2012-05-08 26 views
1

私はscipyでroot-finderを使用するとエラーが発生しているようです。誰かが私が間違っていることを指摘できるかどうか疑問に思っていた。
私が根本を見つけ出す機能は、単なる簡単な例であり、特に重要ではありません。scipy.optimize.fsolveの入力/出力エラー

私はscipyのダウンロード0.9.0でこのコードを実行する場合:

import numpy as np 
from scipy.optimize import fsolve 

tmpFunc = lambda xIn: (xIn[0]-4)**2 + (xIn[1]-5)**2 + (xIn[2]-7)**3 

x0 = [3,4,5] 
xFinal = fsolve(tmpFunc, x0) 

print xFinal 

私は、次のエラーメッセージが表示されます。

Traceback (most recent call last): 
    File "tmpStack.py", line 7, in <module> 
    xFinal = fsolve(tmpFunc, x0) 
    File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 115, in fsolve 
    _check_func('fsolve', 'func', func, x0, args, n, (n,)) 
    File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 26, in _check_func 
    raise TypeError(msg) 
TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument '<lambda>'. 

答えて

3

私は間違ってこのルーチンを使用しようとしていたようまあそれが見えます。このルーチンは、私が与えた3つの変数を持つ1つの式に対して、同じ数の式と変数を必要とします。したがって、最小化される関数への入力が3次元配列の場合、出力は3次元配列でなければなりません。このコードは次のように動作します。

import numpy as np 
from scipy.optimize import fsolve 

tmpFunc = lambda xIn: np.array([(xIn[0]-4)**2 + xIn[1], (xIn[1]-5)**2 - xIn[2]) \ 
, (xIn[2]-7)**3 + xIn[0] ]) 

x0 = [3,4,5] 
xFinal = fsolve(tmpFunc, x0) 

print xFinal 

これは、3つの等式を同時に解くことを表しています。