Subject | : Re^2: SAD Update V1.0.10.5a21 Min, Max, MinMax |
Date | : 2011/11/07(Mon) 15:37:09 |
Contributor | : Akio Morita |
> Dear Users,
>
> 1. A change has been made of functions Min, Max, MinMax not to cause an error when the arguments are not numerical, like as other math functions.
>
これらの関数はComplex型を扱うことが出来ますが、複素数の順序に関して自然な定義が存在しないので、
数学的には何を返しても良いのかも知れませんが、以下の結果はあまり直感的とは言えないと思います
(*1) Min[Complex[+1,-1], Complex[-1,+1]] -> Complex[-1, -1]
(*2) Max[Complex[+1,-1], Complex[-1,+1]] -> Complex[+1, +INF]
(*1)のケースでは、Min[]の引数中に現れない元を返しています。
(*2)のケースでは、Max[]の引数中に現れない要素(INF)が含まれています、おそらく内部変数の初期化不良です。
自然な順序が存在しない集合へ拡張するなら、言語的には Sortの CanonicalOrderを用いた以下の定義(*3)の方が自然に思えます。
Min := First[Sort[Flatten[{##}]]]&
Max := Last[Sort[Flatten[{##}]]]&
あるいは、順序集合でないものを対象とした場合、値が存在しないので Nullを返すのも有りかもしれません。
現行の定義は、次のような直感的な定義と結果が整合しません
Min[arg1_] := arg1;
Min[arg1_, argv__] := If[arg1 < Min[argv], arg1, Min[argv]]
(*3)の定義は、Less演算子の順序を数学的な順序から CanonicalOrderへ拡張したものと整合します。