使用多项式拟合查找峰值点的误差范围

时间:2014-01-16 03:51:38

标签: python

我有一条光谱线的数据,它产生一个嘈杂的U形曲线。 我想拟合曲线并找到最小点的x,y值。 然后我使用polyfit将多项式拟合到它。 然后我发现拟合曲线上的最小点。 注意:原始曲线不对称(左侧比右侧略微陡峭。) 因此min(原始)稍微离开min(fitting_curve) 如何找到此点的X和Y错误? 以下是我的代码的骨头:

import pylab , numpy

x = [... linear list of floats ...]
y = [... list of floats ...]    # Produces a noisy U shaped curve .

fit = numpy.polyfit(x,y,3) 
fit2 = numpy.polyval(fit,x)     # Fit a third order polynomial .  

miny = # min y value on fitted curve .
minx = # corresponding x value , not the actually min(x) .

pylab.plot(x,y,'k-')
pylab.plot(x,fitt,'r-')
pylab.plot(minx,miny,'ro')
pylab.show()

既然我有原始的[x,y],拟合曲线[x,fitt2]和拟合曲线上的最小点[minx,miny],我如何找到这个单点的误差范围? / p>

谢谢。

1 个答案:

答案 0 :(得分:0)

对于numpy 1.7,polyfit有选项cov=True。您获得协方差矩阵作为附加输出。由此,使用高斯误差传播,您可以得到最小的误差。但它是什么样的频谱?通常有适合的模型形状,因此不需要多项式拟合。

您可能还想查看scipy.optimize.curve_fit

PS:是什么让你认为真正的价值是你的拟合值。如果您的拟合函数是对称的,则应用于非对称峰值,这将是真实的。然而,三阶多项式应该能够解决不对称问题。