fmin#
- scipy.optimize.fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, initial_simplex=None)[源代码]#
使用下降单纯形算法最小化函数。
此算法仅使用函数值,不使用导数或二阶导数。
- 参数:
- func可调用对象 func(x,*args)
要最小化的目标函数。
- x0ndarray
初始猜测。
- args元组,可选
传递给 func 的额外参数,即
f(x,*args)
。- xtol浮点数,可选
迭代之间 xopt 的绝对误差,可接受的收敛条件。
- ftol数字,可选
迭代之间 func(xopt) 的绝对误差,可接受的收敛条件。
- maxiter整数,可选
要执行的最大迭代次数。
- maxfun数字,可选
最大函数评估次数。
- full_output布尔值,可选
如果需要 fopt 和 warnflag 输出,则设置为 True。
- disp布尔值,可选
设置为 True 以打印收敛消息。
- retall布尔值,可选
设置为 True 以返回每次迭代的解决方案列表。
- callback可调用对象,可选
在每次迭代后调用,形式为 callback(xk),其中 xk 是当前参数向量。
- initial_simplex形状为 (N + 1, N) 的类数组,可选
初始单纯形。如果给定,则覆盖 x0。
initial_simplex[j,:]
应包含单纯形中第 j 个顶点的坐标(共N+1
个顶点),其中N
是维度。
- 返回:
- xoptndarray
使函数最小化的参数。
- fopt浮点数
函数在最小值处的值:
fopt = func(xopt)
。- iter整数
执行的迭代次数。
- funcalls整数
函数调用次数。
- warnflag整数
1:达到最大函数评估次数。 2:达到最大迭代次数。
- allvecs列表
每次迭代的解决方案。
另请参阅
minimize
多变量函数最小化算法的接口。特别参阅“Nelder-Mead”方法。
注意
使用 Nelder-Mead 单纯形算法查找一个或多个变量的函数最小值。
该算法在应用中有着悠久的成功使用历史。但它通常比使用一阶或二阶导数信息的算法慢。在实践中,它在高维问题中可能表现不佳,并且对于最小化复杂函数不够鲁棒。此外,目前还没有完整的理论描述该算法何时能成功收敛到最小值,或者如果收敛会以多快的速度收敛。收敛必须同时满足 ftol 和 xtol 条件。
参考文献
[1]Nelder, J.A. and Mead, R. (1965), “A simplex method for function minimization”, The Computer Journal, 7, pp. 308-313
[2]Wright, M.H. (1996), “Direct Search Methods: Once Scorned, Now Respectable”, in Numerical Analysis 1995, Proceedings of the 1995 Dundee Biennial Conference in Numerical Analysis, D.F. Griffiths and G.A. Watson (Eds.), Addison Wesley Longman, Harlow, UK, pp. 191-208.
示例
>>> def f(x): ... return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin(f, 1) Optimization terminated successfully. Current function value: 0.000000 Iterations: 17 Function evaluations: 34 >>> minimum[0] -8.8817841970012523e-16