Mathematica基於standard mathematical definition,對無限域上的函數具有內置函數ArgMax。posmax:與argmax類似,但給出了f [x]最大的元素x的位置
有限域的模擬是一個方便的效用函數。 給定一個函數和一個列表(稱之爲函數的域),返回列表中最大化函數的元素。 這裏是有限的argmax在行動的例子: Canonicalize NFL team names
這是我的執行它(連同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怎麼樣,它不是返回最大元素,而是返回最大元素的位置???????????????????????????????????????????????
我應該注意的是,作爲memoization的替代方法,只要使用'DeleteDuplicates'來代替應用程序。 – 2010-04-17 08:47:44
您可能想要將其封裝在First中,例如,ArgMax [Abs,{1,-3,2}]返回-3而不是{-3}。 – dreeves 2011-08-03 00:37:05