繁体   English   中英

Scipy ODR与fsolve不兼容?

[英]Scipy ODR not compatible with fsolve?

到目前为止,我想解决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超出了尺寸为1的轴0的范围

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

我尝试重新定义func以将多个变量用作beta ,但是这样做时我无法使ODR正常工作。

有没有办法做到这一点?

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的值如何

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM