2017-05-26 86 views
0

我要解決的ODR功能的特定點,到目前爲止我用:Scipy ODR與fsolve不兼容?

from scipy.odr import ODR, Model, RealData 
from scipy.optimize import fsolve 
import numpy as np 

me = np.array([1, 2, 3, 4, 5]) 
my = np.array([6, 7, 8, 9, 10]) 

def func(beta, x): 
    y = beta[0]+beta[1]*x+beta[2]*x**3 
    return y 

modata = RealData(me, my) 
model = Model(func) 

odr = ODR(modata, model, [0,0,0]) 
odr.set_job(fit_type=0) 
output = odr.run() 

mam = fsolve(func, 5, args=(output.beta)) 

我得到:

IndexError: index 1 is out of bounds for axis 0 with size 1

我想這是因爲beta作爲函數內的指標。

我試着重新定義func以獲得多個變量作爲beta,但我不能讓ODR工作,當我這樣做。

有沒有辦法做到這一點?

回答

0

fsolve是爲了找到func的根。不過,你必須給它一個初始估計,這是一個有效的函數參數。不過,您不能在5中傳遞參數betabeta需要是至少有三個元素的迭代器(因爲您正在評估beta[0],beta[1]beta[2])。

如果你這樣做fsolve(func, [5,5,5], args=(output.beta)),該函數將運行,並且它輸出的[0, 0, 0]根(這顯然是因爲func([0, 0, 0], x)正確的根總是返回0不管x值)

+0

哦,DOI。感謝那。我還有一些關於我試圖使用它的問題,但我會爲此發佈另一個問題。 –