Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^2: SAD Update V1.0.10.5a21 Min, Max, MinMax
Date: 2011/11/07(Mon) 15:37:09
ContributorAkio 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へ拡張したものと整合します。


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)