Scipy ODR与fsolve不兼容?

时间:2017-05-26 21:03:15

标签: python scipy

我想解决ODR函数的特定点,到目前为止我已经使用过:

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:索引1超出轴0的大小为1

我认为这是因为beta充当函数中的索引。

我尝试重新定义func以将多个变量设为beta,但在执行此操作时,我无法让ODR工作。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分: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)始终会返回0x