1

我有一个矩阵,它有 2 列,x 和 y 坐标。我想计算均方位移 - 这是在给定时间内从起点移动到另一个点的平方距离,在许多不同的时间点上平均 - 假设所有时间间隔都相等。

所以工作公式是:

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 个坐标之间的时间不同,那么我该如何合并该组件来计算 MSD?

4

2 回答 2

1

这应该是相当有效的(尽管 Roland 在他关于循环低效率的一般说法中只是部分正确。)

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 是两点之间的时间差。

于 2012-06-05T07:28:40.487 回答