2012-06-05 68 views
1

我有一個有x和y座標的2列的矩陣。我想計算均方位移 - 即在給定時間內從起點移動到另一點的平均距離,在許多不同時間點上平均 - 假設所有時間間隔相等。使用非均勻時間間隔計算MSD

所以工作公式爲:

MSD=average(r(t)-r(0))^2 where r(t) is position at time t and r(0) is position at time 0.

因此,這我使用來計算這個代碼是:

#Create a vector to save the square of the distance between successive 
#locations 
distsq<- numeric(length=nrow(mat)) 

#Calculate and assign these values 
for (i in 2:nrow(mat)) 
{ 
distsq[i]<-((mat[i,1]-mat[i-1,1])^2)+((mat[i,2]-mat[i-1,2])^2) 
} 

#Calculate the mean sq distance for this value of n 
MSD[k]<- mean(distsq) 

這裏mat是x和y值的矩陣。

所以這個公式在兩個連續點之間的時間被認爲是恆定的時候起作用。但是,假設每兩個座標之間的時間不同,那麼如何將該組件組合到一起來計算MSD?

+0

的不規則觀察妥善處理可能取決於具體的應用。 –

+0

請注意,您可以使用的不僅僅是「point-point_before」信息。看看http://web.mit.edu/savin/Public/.Tutorial_v1.2/Concepts.html#A1 – dani

回答

0

首先,R中的循環非常緩慢。所以,出於性能原因,我會避免它並使用diff()

但是,您的實際問題是一個數學問題,如果沒有更多的背景知識,很難回答。你可以使用某種加權函數:a(abs(deltat-b)),其中deltat是兩點之間的時間差。

+0

'diff(a)'不等於'a [-1] -a [1]'第二個是r(t)-r(0)隱含的序列。 –

+0

給出的代碼示例不執行前面介紹的內容。我會用diff()複製示例代碼的輸出。 – Roland

+0

確實如此,但是當回答有編碼困難的人時,我通常會使用描述而不是他們的代碼。 –

1

這應該是相當有效的(雖然羅蘭只是他的循環效率低下的一般要求在部分正確。)

A <- matrix(1:20, ncol=2) 
mean((A[,1] - A[1,1])^2 + (A[,2] - A[1,2])^2) 
[1] 57