2017-05-26 57 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。感谢那。我还有一些关于我试图使用它的问题,但我会为此发布另一个问题。 –