2017-01-08 37 views
2

我目前使用Python来比较两个不同的数据集(xDAT和yDAT),这些数据集由在一定时间内采集的240个距离度量值组成。但是,数据集xDAT被非线性数量抵消。这个非线性的数量等于一个时间依赖的动态媒体的宽度,我称之为level-A。更具体地说,xDAT从原点到A级的顶部进行度量,而yDAT则从原点到A级的底部进行度量。见以下图:Python中的曲线拟合和参数估计

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级引起的非线性偏移。

谢谢。

+0

我不认为你很清楚你想要做什么。你称'polyfit'就好像'xDAT'和'yDAT'是一组样本点的x和y坐标,然而你的问题描述和图表表明它们并不相关。 – Stelios

+0

按照你的描述,偏移是一个常数。使用度数> 0的多项式看起来是错误的方法。另外,从你的绘图xDat和yDat看起来并不是“排队” - 也就是说xDat显然不是yDat +/-一些常数 - 它似乎也是“翻转”或相移的。 –

+0

谢谢Stelios。在介绍中,我提到xDAT和yDAT都是240点的数据集。每个点对应于特定时间的测量...两个数据集均以相同的时间增量进行测量。我使用polyfit来派生描述两个数据集之间差异的多项式,然后使用该多项式来校正xDAT中看到的偏移量。我相信有一种更合适的方法来纠正在xDAT中观察到的A级偏移量,而不是np.polyfit。 – LexStJ

回答

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,因为这只会使振荡的实际部分(弹簧阻尼器系统的“弹簧”部分)退化,这就是为什么你corrected_xDatxDat同相,而不是yDat。要回归这样的东西,你需要使用傅立叶变换(这不是我的专业)。