Scipy ODR与fsolve不兼容?

2024-09-28 23:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想解决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无法工作

有办法做到这一点吗


Tags: 函数fromimportmodelmynpscipyarray
1条回答
网友
1楼 · 发布于 2024-09-28 23:16:39

fsolve用于查找func的根。但是,您必须给它一个起始估计,这是函数的有效参数。但是,不能为beta参数传入5beta必须是至少包含三个元素的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的值如何)

相关问题 更多 >