Mathematica には、標準の数学的定義に基づいて、無限領域にわたる関数用の組み込み関数ArgMaxがあります。
有限領域の類似物は便利な効用関数です。関数とリスト (関数のドメインと呼びます) を指定すると、関数を最大化するリストの要素を返します。実行中の有限 argmax の例を次に示します。 NFL チーム名の正規化
そして、これが私の実装です(適切な測定のために argmin とともに):
(* argmax[f, domain] returns the element of domain for which f of
that element is maximal -- breaks ties in favor of first occurrence. *)
SetAttributes[{argmax, argmin}, HoldFirst];
argmax[f_, dom_List] := Fold[If[f[#1]>=f[#2], #1, #2]&, First[dom], Rest[dom]]
argmin[f_, dom_List] := argmax[-f[#]&, dom]
まず、それは argmax を実装する最も効率的な方法ですか? 最初の要素だけでなく、すべての最大要素のリストが必要な場合はどうしますか?
次に、最大要素を返す代わりに、最大要素の位置を返す関連関数 posmax はどうですか?