我想解决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: index 1 is out of bounds for axis 0 with size 1
我认为这是因为beta
在函数中充当索引
我尝试重新定义func
以将多个变量作为beta
,但这样做时ODR
无法工作
有办法做到这一点吗
fsolve
用于查找func
的根。但是,您必须给它一个起始估计,这是函数的有效参数。但是,不能为beta
参数传入5
beta
必须是至少包含三个元素的iterable(因为您正在计算beta[0]
、beta[1]
和beta[2]
)如果执行
fsolve(func, [5,5,5], args=(output.beta))
,函数将运行,并输出[0, 0, 0]
的根(这显然是正确的根,因为func([0, 0, 0], x)
将始终返回0
,而不管x
的值如何)相关问题 更多 >
编程相关推荐