2012-12-02 3 views
30

SciPy documentationによれば、複数の変数を持つ関数を最小限に抑えることはできますが、そのような関数を最適化する方法は教えていません。SciPyのoptimize.minimizeの複数の変数

from scipy.optimize import minimize 
from math import * 

def f(c): 
    return sqrt((sin(pi/2) + sin(0) + sin(c) - 2)**2 + (cos(pi/2) + cos(0) + cos(c) - 1)**2) 

print minimize(f, 3.14/2 + 3.14/7) 

上記のコードは、関数fを最小化しようとしないが、私の仕事のために、私は三つの変数に関して最小化する必要があります。

2番目の引数を導入し、それに応じて最小化を調整するだけでエラー(TypeError: f() takes exactly 2 arguments (1 given))が生成されます。

minimizeは、複数の変数で最小化するとどのように機能しますか?

答えて

39

パック単一のアレイに複数の変数:

import scipy.optimize as optimize 

def f(params): 
    # print(params) # <-- you'll see that params is a NumPy array 
    a, b, c = params # <-- for readability you may wish to assign names to the component variables 
    return a**2 + b**2 + c**2 

initial_guess = [1, 1, 1] 
result = optimize.minimize(f, initial_guess) 
if result.success: 
    fitted_params = result.x 
    print(fitted_params) 
else: 
    raise ValueError(result.message) 

利回り

[ -1.66705302e-08 -1.66705302e-08 -1.66705302e-08]