繁体   English   中英

Scipy curve_fit在测量数据拟合时失败

[英]Scipy curve_fit fails on measured data fit

我已经编写了一个程序,用于对测量数据进行参数识别。 公式是

f = k0 * x + c1 *(x-x1)^ e1 + c2 *(x-x2)^ e2。

(这种显示方式是这样的,因为尚未允许我在此处放置图片)

我必须为公式找到正确的参数,参数为k0,x,1,e1,c2,x2,e2。 线性部分很容易找到。 所以我得到k0和x1我的第一个问题是:这段代码对公式是否正确

x = [0.4,0.5,0.513,1.02,1.5,2,2.25,2.75,3,3.3,3.51,3.75,4,4.3,4.5,4.7]
y = [65,115,135,150,170,300,400,600,700,800,1064,1401,1935,2616,3697,4693]

x_np = np.array(x)
y_np = np.array(y)

p0 =(0.1,10)

def advance(x,c2,e2):
    k0 = 166.801522505
    c1 =0.195545880867
    x1 = 0.3
    x2 = 4.7
    print c1
    return k0*x+c1*np.power((x-x1),e1)+c2*np.power((x-x2),e2)


standard_fitting = scipy.optimize.curve_fit(advance, x_np, y_np, p0)

第二个是,我的代码无法对此曲线进行curve_fitting。 如果在拟合过程中打印变量,Python交互器仅打印nan

x = [0.4,0.5,0.513,1.02,1.5,2,2.25,2.75,3,3.3,3.51,3.75,4,4.3,4.5,4.7]
y = [65,115,135,150,170,300,400,600,700,800,1064,1401,1935,2616,3697,4693]

x_np = np.array(x)
y_np = np.array(y)

p0 =(0.1,10)

def advance(x,c1,e1):
    k0 = 166.801522505
    x1 = 0.3
    print c1
    return k0*x+c1*np.power((x-x1),e1)#+c2*np.power((x-x2),e2)


standard_fitting = scipy.optimize.curve_fit(advance, x_np, y_np, p0)

这会收敛并​​运行。 您的示例代码仍然无法运行。 另外,我不建议使用该数据拟合两个以上的参数,两个参数的拟合看起来非常好,因此您可能没有足够的信息来有意义地拟合任何其他参数。

编辑:哦,我看到曾经有一个线性部分。 也许那将值得更多参数,尽管我怀疑采用两个幂定律模型会有所帮助。

如果要使用更多参数,则需要很好的猜测。 因此,例如,如果您希望k0作为参数,则使用y的均值或中位数或最小值作为猜测。 首先进行两个参数拟合,然后将其输出用作下一个拟合的输入的猜测。

暂无
暂无

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

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