Python中的曲线拟合和参数估计

时间:2017-01-08 20:09:24

标签: python numpy estimation polynomials

我目前正在使用Python来比较两个不同的数据集(xDAT和yDAT),这些数据集由在一定时间内进行的240次距离测量组成。但是,数据集xDAT偏移了非线性量。这个非线性量等于时间相关的动态介质的宽度,我将其称为A级。更具体地说,xDAT从A级的起点到顶部进行测量,而yDAT从A级的起点到底部进行测量。见下图:

enter image description here

为了比较两条曲线,我必须先对xDAT进行修正,以弥补其偏移量(水平A的宽度)。

到目前为止,我已经玩过不同程度的numpy.polyfit。即:

coefs = np.polynomial.polynomial.polyfit(xDAT, yDAT, 5)
polyEST=[]
for i in range(0,len(x-DAT)):
    polyEST.append(coefs[0] + coefs[1]*xDAT[i] + coefs[2]*pow(xDAT[i],2) + coefs[3]*pow(xDAT[i],3) + coefs[4]*pow(xDAT[i],4) + coefs[5]*pow(xDAT[i],5))

使用此方法的问题是,当我绘制polyEST(这是xDAT的修正版本)时,绘图仍然与yDAT的趋势不匹配并保持偏移。请看下图,其中xDAT =蓝色,更正xDAT =红色,yDAT =绿色:

enter image description here

理想情况下,校正后的xDAT仍应比yDAT噪声更大,但曲线的一般振荡和趋势应该匹配。

我非常感谢帮助实现不同的曲线拟合和参数估计技术,以便纠正由A级引起的非线性偏移。

谢谢。

1 个答案:

答案 0 :(得分:0)

答案取决于A级。如果它是独立的,那么你的第一行应该是

coefs = np.polynomial.polynomial.polyfit(numpy.arange(xDAT.size), yDAT-xDAT, 5)

这将给出绘制的独立A的polyfit,然后更正的x

xDAT+np.polynomial.polynomial.polyval(numpy.arange(xDAT.size),coefs)

如果A依赖于变量(看起来像是),你不想polyfit,因为它只会回归振荡的真实部分(&# 34;弹簧"弹簧阻尼系统的一部分),这就是为什么corrected_xDatxDat而不是yDat同步的原因。要回归类似的东西,你需要使用傅里叶变换(这不是我的专长)。