2014-02-23 121 views
2

在Python-實時數據數值積分(梯形)質詢數值積分(梯形)上在Python

背景實時數據:在實時我測量移動物體,其具有100的平均速米/分鐘,而且我每60毫秒採樣100毫秒 - 因此在一分鐘結束時,我將有600個採樣。我的測量方法不準確,每次測量的偏差爲10米。一分鐘間隔後的典型圖形是:

enter image description here

問:我知道大致的對象行進100米一分鐘,但是這個時期時,綜合以上(只使用梯形現在)一個我得到答案比預期的多60倍,我做錯了什麼?我懷疑這是'寬度'或deltaT = 100ms這是不正確的(?)

我的python代碼如下 - 這是慣用的,即不pythonic,由於某種原因;以模擬實時測量:

# Trapezoidal rule integral 
testData = []  # store all vel. measurements 
width = 100e-3 # sample every 100ms 
total = 0 
currVel = 0 
prevVel = 0 
t = 0 

while(t < 60): 
    # take a live sample and save it 
    currVel = np.random.normal(100,10,1) 
    testData.append(currVel) 
    # only complete the integral after the second sample 
    if(t >= 100e-3): 
     total += width*(currVel+prevVel)/2 
    # update previous flow and increment 
    prevVel = currVel 
    t += 100e-3 
#total /= 60 # fudge factor, why this factor out? 
print "Total distance covered over 1 minute", total 
+1

這裏沒有理由使用梯形。如果你仔細想想,你一次增加一半的新樣本,然後下一個循環,當樣本變成prevVel時,你將增加另一半。總數的最終值只是所有樣本的總和,但端點除外。 – DarenW

+0

非常感謝DarenW的迴應,但是這並沒有回答我的問題:除非我錯過了什麼,否則爲什麼它會以60的因子出來? –

+1

你有單位問題。您的樣本分佈爲m/min,請嘗試將其改爲1.67 m/s。您的循環測量時間超過60秒,而不是60分鐘。那你在做什麼?跟蹤雷達人? –

回答

1

積分可以被認爲是面積計算。你基本上有:

(100 m/min) * (60 s) 

和你得到的6000的答案,因爲程序沒有單位表示。 (答案是每分鐘6000米秒),如果你寫你的計算這種方式來代替,這個錯誤可能會更明顯:

(100 m/60 s) * (60 s) 

現在秒鐘將適當抵消。請參閱此主題討論Python unit libraries

+0

感謝Adam Burry,但我看不到/ 60 * 60(?)。這就是說我可以明白爲什麼你必須/ 60(t = 100ms/60);以適應米/分鐘的來源率。我認爲這是採樣率轉換 - http://en.wikipedia.org/wiki/Sample_rate_conversion –

+0

我添加了更多的文字。希望現在清楚了嗎? –

+0

不,這與採樣率轉換無關。 –