2017-01-08 44 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。要回歸這樣的東西,你需要使用傅立葉變換(這不是我的專業)。