[英]curve fitting and parameter estimation in Python
我目前正在使用Python比较两个不同的数据集(xDAT和yDAT),这些数据集是在一定时间内进行的240次距离测量。 但是,数据集xDAT偏移了一个非线性量。 这个非线性量等于与时间有关的动态介质的宽度,我称之为A级。 更具体地说,xDAT从起点到A级顶部进行测量,而yDAT从起点到A级底部进行测量。 参见下图:
为了比较两条曲线,我必须首先对xDAT进行校正以弥补其偏移量(A级宽度)。
到目前为止,我已经使用了不同程度的numpy.polyfit。 IE:
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 =绿色:
理想情况下,校正后的xDAT仍应比yDAT噪声更大,但曲线的总体振荡和趋势应匹配。
我将非常感谢您提供帮助,以实施不同的曲线拟合和参数估计技术,以纠正由A级引起的非线性偏移。
谢谢。
答案取决于A级是什么。 如果是独立的,您的第一行应该是这样的
coefs = np.polynomial.polynomial.polyfit(numpy.arange(xDAT.size), yDAT-xDAT, 5)
这将得出一个独立A
的多重拟合,然后将校正后的x
设为
xDAT+np.polynomial.polynomial.polyval(numpy.arange(xDAT.size),coefs)
如果A
取决于变量(看起来是这样),则您不希望进行polyfit
,因为它只会使振荡的实数部分(弹簧阻尼器系统的“弹簧”部分)回归,这就是为什么您corrected_xDat
与xDat
而不是yDat
同相。 要使类似的东西退化,您将需要使用傅立叶变换(这不是我的专长)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.