fmin
语法
fmin(f, X0, [fargs],
[xtol=0.0001], [ftol=0.0001], [maxIter], [maxFun])
详情
使用 Nelder-Mead 单纯形算法找到目标函数的最小值。这个算法仅使用函数值,不使用一阶导数或二阶导数。返回一个字典,包含以下 key:
-
xopt:使目标函数最小化的参数值;
-
fopt:目标函数最小值,即 fopt=f(xopt);
-
iterations:优化过程中执行的总迭代数;
-
fcalls:优化过程中的目标函数调用次数;
-
warnFlag:
-
0:表示成功执行算法全过程;
-
1:表示已达最大目标函数调用次数,算法停止执行;
-
2:表示已达最大迭代次数,算法停止执行。
-
参数
f 函数名,表示需要最小化的目标函数。
X0 数值类型,可以是标量、向量,表示使目标函数最小化的参数的初始猜测。
fargs 可选参数,元组,表示传递给函数 f 的其他参数,即函数调用为 f(X, fargs…)。
xtol 可选参数,一个浮点数,表示在迭代过程中,算法收敛时允许的 xopt 值之间的绝对误差。默认值为0.0001。
ftol 可选参数,一个浮点数,表示在迭代过程中,算法收敛时允许的函数值(f(xopt) )之间的绝对误差。默认值为0.0001。
maxIter 可选参数,一个非负整数,表示算法的最大迭代次数。如果未指定,它将被设置为 X0 中元素数量乘以 200。
maxFun 可选参数,一个非负整数,表示目标函数的最大调用次数。如果未指定,它将被设置为 X0 中元素数量乘以 200。
例子
def f(x) {return x*x}
fmin(f, 1)
/* ouput:
xopt->[-8.881784197001252E-16]
fopt->7.888609052210119E-31
iterations->17
fcalls->34
warnFlag->0
*/
def targetFunc(x,y,z){
return x*x+2*x*y+5*y+z
}
fmin(targetFunc,5,(11,4))
/* output:
fcalls->46
warnFlag->0
xopt->[-11.0000]
fopt->-62.0000
iterations->23
*/