2013-09-28 48 views
12

私はnumpyを使っていくつかのMatlabコードをPythonに変換しています。すべてがかなりスムーズに機能しましたが、最近私はfminsearchの機能を遭遇しました。短いそれをカットするので、matlabのfminsearchのnumpy/scipyアナログ

、:pythonでこのような何かを作るための簡単な方法があります:

今まで

x = 1.0000 1.0000 
fval = 8.1777e-010 

を返します

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

私は何も見つかっていませんnumpyで似ています。私が似ているのはscipy.optimize.fminだけです。定義に基づいて

ダウンヒルシンプレックスアルゴリズムを使用して関数を最小化します。

しかし、今、私はそれはPythonの構文にMatlabの構文からわずかストレートフォワード変換です。この機能

答えて

15

を使用して、上記のMatlabのコードを記述するために見つけることができません。

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]) 

と出力:

Optimization terminated successfully. 
     Current function value: 0.000000 
     Iterations: 85 
     Function evaluations: 159 
array([ 1.00002202, 1.00004222]) 
8

fminsearchは、ネルダー・ミードのメソッドを実装し、を参照してください文書:http://www.mathworks.com/help/matlab/ref/fminsearch.html。参照節にあります。

scipyで同等の機能を確認するには、scipy.optimizeで提供されているメソッドのドキュメント文字列を確認するだけです。参照:http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html#scipy.optimize.fminfminは、Nelder-Mead法も実装しています。

名前が常にmatlabからscipyに直接変換されるとは限りません。誤解を招くこともあります。たとえば、ブレントの方法は、Matlabfminbndと実装されていますが、optimize.brentqにはscipyが実装されています。ですから、doc文字列のチェックは常に良い考えです。