2012-05-08 134 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

那麼它看起來像我試圖不正確使用此程序。這個例程需要相同數量的方程和變量,而這個方程和變量相對於我給出它的三個變量的方程。因此,如果要被最小化的函數的輸入是三維數組,則輸出應該是三維數組。此代碼的工作原理:

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 

它代表同時求解三個方程。