我想解决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
工作。
有办法做到这一点吗?
答案 0 :(得分:0)
fsolve
旨在找到func
的根源。但是,您必须给它一个起始估计值,这是函数的有效参数。但是,您无法为5
参数传递beta
。 beta
必须是至少包含三个元素的可迭代(因为您正在评估beta[0]
,beta[1]
和beta[2]
)。
如果您执行fsolve(func, [5,5,5], args=(output.beta))
,则该函数将运行,并输出[0, 0, 0]
的根(显然是正确的根,因为func([0, 0, 0], x)
始终会返回0
值x
)