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 法最小化函数。
此方法只使用函数值,不用导数。
- 参数:
- funccallable f(x,*args)
要最小化的目标函数。
- x0ndarray
初始猜测。
- args元组,可选
传递给 func 的其他参数。
- xtol浮点数,可选
行搜索错误容差。
- ftol浮点数,可选
在
func(xopt)
中可以接受的相对误差,在此误差范围内认为收敛。- maxiter整数,可选
要执行的最大迭代次数。
- maxfun整数,可选
要进行的最大函数评估次数。
- full_output布尔值,可选
如果是 True,将返回
fopt
、xi
、direc
、iter
、funcalls
和warnflag
。- disp布尔值,可选
如果是 True,将打印收敛信息。
- retall布尔值,可选
如果是 True,将返回每次迭代时的解决方案列表。
- callback可调用对象,可选
用户提供的可选函数,在每次迭代后调用。以
callback(xk)
的形式调用,其中xk
是当前参数向量。- direcndarray,可选
最初拟合步骤和作为 (N, N) 数组设置的参数顺序,其中 N 是 x0 中拟合参数的数量。默认步长为 1.0,同时拟合所有参数 (
np.eye((N, N))
)。要防止一开始在某步中考虑这些值,或要更改初始步长,请将 J 在 M 块中的位置上的值设为 0 或所需的步长,其中 J 是 x0 中的位置,M 是所需的评估步骤,评估这些步骤的顺序是按照其索引来确定的。在最小化计算过程中,步长和顺序将自由变化。
- 返回值:
- xoptndarray
使 func 最小化的参数。
- fopt数字
函数在最小值处的取值:
fopt = func(xopt)
。- direcndarray
当前方向集。
- iter整数
迭代次数。
- funcalls整数
进行的函数调用次数。
- warnflag整数
- 整数警告标志
1: 函数求值的最大次数。2:最大迭代次数。3:接收到 NaN 结果。4:结果超出了提供范围。
- allvecs列表
每次迭代的解决方案列表。
另请参见
最小化
用于多变量函数无约束最小化算法的接口。尤其参见“Powell”方法。
备注
使用 Powell 方法的修改来找到 N 个变量函数的最小值。Powell 方法是共轭方向法。
该算法具有两个循环。外层循环仅仅在外层循环中迭代。内层循环按方向集中最小化每个当前方向。在内层循环结束时,如果满足特定条件,则给出最大减小的方向将被去掉,并用当前估计 x 和内层循环开始时的估计 x 之间的差值代替。
用于更换最大增加方向的技术条件,任务是检查
从该迭代开始,沿着最大增加方向不能再获得进一步增益。
最大增加方向占内层循环中函数值减小的足够比例。
引用
Powell M.J.D. (1964) 在不计算衍生量的情况下找到多个变量函数最小值的高效方法,计算机杂志,7 (2):155-162。
William H. Press、Saul A. Teukolsky、William T. Vetterling、Brian P. Flannery 著:《数值食谱》(任意版本),剑桥大学出版社
示例
>>> 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)