繁体   English   中英

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

[英]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_xDatxDat而不是yDat同相。 要使类似的东西退化,您将需要使用傅立叶变换(这不是我的专长)。

暂无
暂无

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

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