使用Scipy的ODR的“ RuntimeWarning:在电源中遇到无效的值”

时间:2018-09-19 17:36:10

标签: python scipy non-linear-regression

我正在尝试使用Scipy的正交距离回归(odr)包来拟合函数,但不断出现以下错误:

"RuntimeWarning: invalid value encountered in power"

当我使用scipy的curve_fit函数时发生了这种情况,但是我总是可以放心地忽略该警告。但是现在看来,这会导致数值错误,从而导致拟合中断。我的代码基于在这里找到的示例:

python scipy.odrpack.odr example (with sample input / output)?

这是我的代码:

import numpy as np
import scipy.odr.odrpack as odrpack


def divergence(x,xDiv):
    return  ( 1 - (x/xDiv) )**( -2.4 )


xValues = np.linspace(.25,.37,12)
yValues = np.array([  6.94970607,   9.12475506,  10.65969954,  12.30241672,
        14.44154148,  16.00261267,  19.98693664,  25.93076421,
        30.89483997,  35.27106466,  50.81645983,  68.06009144])


xErrors = .0005*np.ones(len(xValues))
yErrors = np.array([ 0.31905094,  0.37956865,  0.24837562,  0.68320078,  1.25915789,
        1.40241088,  0.33305157,  1.37165251,  0.32658393,  0.52253429,
        1.04506858,  1.30633573])




wcModel = odrpack.Model(divergence)

mydata = odrpack.RealData(xValues, yValues, sx=xErrors, sy=yErrors)

myodr = odrpack.ODR(mydata, wcModel, beta0=[.8])


myoutput = myodr.run()
myoutput.pprint()

通过查看有关此错误的先前问题,我在这里找到了

NumPy, RuntimeWarning: invalid value encountered in power

我怀疑问题出在,我将负值提高到了小数的幂。但是,我提升-2.4 (1-x/xDiv)的力量并不是负面的(至少在xDiv=.8的最初猜测附近)。但是,当我尝试将我的y值设为复杂类型时,会收到一个新错误:

"ValueError: y could not be made into a suitable array"

从命令行开始

myoutput = myodr.run().

我能找到的唯一使用此odr包的示例都适合多项式,因此我怀疑可能是问题所在?

0 个答案:

没有答案