我想解决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工作。
有办法这样做吗?
发布于 2017-05-26 22:30:28
fsolve是为了找到func的根。但是,您必须给它一个开始估计,这是函数的一个有效参数。但是,您不能将5传递给beta参数。beta需要至少有三个元素可以迭代(因为您正在计算beta[0]、beta[1]和beta[2])。
如果您执行fsolve(func, [5,5,5], args=(output.beta)),该函数将运行,并输出[0, 0, 0]的根(这显然是一个正确的根,因为无论x的值如何,func([0, 0, 0], x)总是返回0 )。
https://stackoverflow.com/questions/44210072
复制相似问题