nlaby/scipy模拟matlab的fminsearch

Sal*_*ali 16 python matlab numpy scipy

我正在使用numpy将一些Matlab代码转换为python .一切都很顺利,但最近我遇到了fminsearch功能.

所以,简而言之:是否有一种简单的方法可以在python中制作这样的东西:

banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
[x,fval] = fminsearch(banana,[-1.2, 1])
Run Code Online (Sandbox Code Playgroud)

将返回

x = 1.0000    1.0000
fval = 8.1777e-010
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有找到任何看起来类似于numpy的东西.我发现的唯一相似之处是scipy.optimize.fmin.根据它的定义

使用下坡单纯形算法最小化函数.

但是现在我找不到使用这个函数编写上面提到的Matlab代码

pco*_*ing 19

这只是从Matlab语法到python语法的直接转换:

import scipy.optimize

banana = lambda x: 100*(x[1]-x[0]**2)**2+(1-x[0])**2
xopt = scipy.optimize.fmin(func=banana, x0=[-1.2,1])
Run Code Online (Sandbox Code Playgroud)

输出:

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 85
         Function evaluations: 159
array([ 1.00002202,  1.00004222])
Run Code Online (Sandbox Code Playgroud)


CT *_*Zhu 9

fminsearch实现Nelder-Mead方法,请参阅Matlab文档:http://www.mathworks.com/help/matlab/ref/fminsearch.html.在参考部分.

要找到它的等价物scipy,您只需要检查提供的方法的doc字符串scipy.optimize.请参阅:http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html#scipy.optimize.fmin.fmin还实现了Nelder-Mead方法.

名称并不总是直接转换matlabscipy,有时甚至是误导.例如,布伦特的方法实现fminbndMatlab,但optimize.brentqscipy.因此,检查doc字符串总是一个好主意.