1

x 座標と y 座標を持つ 2 つの列を持つ行列があります。すべての時間間隔が等しいと仮定して、平均二乗変位を計算したいと思います.

したがって、作業式は次のとおりです。

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 値の行列です。

したがって、この式は、連続する 2 つのポイント間の時間が一定である場合に機能します。しかし、2 つの座標間の時間が異なると仮定すると、どのようにその成分を組み込んで MSD を計算できますか?

4

2 に答える 2

1

これはかなり効率的であるはずです(ただし、ローランドはループの非効率性に関する彼の一般的な主張では部分的にしか正しくありません)。

A <- matrix(1:20, ncol=2)
mean( (A[,1] - A[1,1])^2 + (A[,2] - A[1,2])^2 )
[1] 57
于 2012-06-05T14:37:18.080 に答える
0

まず第一に、R ではループが非常に遅いため、パフォーマンス上の理由から、ループを避けて off を使用しdiff()ます。

ただし、実際の質問は数学的なものであり、背景知識がなければ答えるのが難しい. a^(abs(deltat-b)) などの重み付け関数を使用できます。ここで、deltat は 2 点間の時間差です。

于 2012-06-05T07:28:40.487 に答える