fmin_powell#
- scipy.optimize.fmin_powell(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, direc=None)[源代码][源代码]#
使用修正的Powell方法最小化一个函数。
此方法仅使用函数值,不使用导数。
- 参数:
- 函数可调用函数 f(x,*args)
要最小化的目标函数。
- x0ndarray
初始猜测。
- 参数tuple, 可选
传递给 func 的额外参数。
- xtolfloat, 可选
线搜索误差容限。
- ftolfloat, 可选
func(xopt)
中的相对误差可接受以实现收敛。- maxiterint, 可选
要执行的最大迭代次数。
- maxfunint, 可选
最大函数评估次数。
- 完整输出bool, 可选
如果为真,则返回
fopt
、xi
、direc
、iter
、funcalls
和warnflag
。- dispbool, 可选
如果为真,打印收敛消息。
- retallbool, 可选
如果为真,返回每次迭代时的解列表。
- 回调可调用,可选
一个可选的用户提供的函数,在每次迭代后调用。调用方式为
callback(xk)
,其中xk
是当前的参数向量。- direcndarray,可选
初始拟合步骤和参数顺序设置为一个 (N, N) 数组,其中 N 是 x0 中的拟合参数数量。默认为步长 1.0 同时拟合所有参数(
np.eye((N, N))
)。要防止在步骤中初始考虑值或更改初始步长,请在 M 块的第 J 个位置设置为 0 或所需步长,其中 J 是 x0 中的位置,M 是所需的评估步骤,步骤按索引顺序评估。随着最小化的进行,步长和顺序将自由变化。
- 返回:
- xoptndarray
最小化 func 的参数。
- fopt数字
函数在最小值处的值:
fopt = func(xopt)
。- direcndarray
当前方向已设定。
- iter整数
迭代次数。
- 函数调用整数
函数调用的次数。
- 警告标志整数
- 整数警告标志:
1 : 函数评估的最大次数。 2 : 最大迭代次数。 3 : 遇到 NaN 结果。 4 : 结果超出提供的界限。
- allvecs列表
每次迭代的解决方案列表。
参见
minimize
用于多变量函数无约束最小化算法的接口。特别参见’Powell’方法。
注释
使用 Powell 方法的修改版来找到 N 变量函数的极小值。Powell 方法是一种共轭方向方法。
该算法有两个循环。外循环仅迭代内循环。内循环在方向集中的每个当前方向上进行最小化。在内循环结束时,如果满足某些条件,则给出最大减少的方向将被丢弃,并替换为当前估计的 x 与内循环开始时的估计 x 之间的差异。
替换最大增加方向的技术条件相当于检查
从该迭代中,沿最大增加方向无法再获得进一步的增益。
在函数值从内循环的该次迭代中减少的方向上,最大增加的方向占据了足够大的比例。
参考文献
Powell M.J.D. (1964) 一种在不计算导数的情况下寻找多元函数最小值的有效方法,计算机杂志,7 (2):155-162。
Press W., Teukolsky S.A., Vetterling W.T., and Flannery B.P.: Numerical Recipes (任意版本), Cambridge University Press
示例
>>> def f(x): ... return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin_powell(f, -1) Optimization terminated successfully. Current function value: 0.000000 Iterations: 2 Function evaluations: 16 >>> minimum array(0.0)