2012-06-05 3 views
1

x 및 y 좌표가있는 두 개의 열이있는 행렬이 있습니다. 나는 평균 제곱 변위 - 모든 시간 간격이 동일하다고 가정 할 때, 주어진 시간 동안 시작 지점에서 다른 지점으로 이동 한 제곱 거리를 계산하고 싶다.균일하지 않은 시간 간격으로 MSD 계산

그래서 작업 수식은 다음

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

그래서 이것을 계산하기 위해 사용하고있는 코드이다

여기 mat
#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) 

는 x 및 y 값의 행렬이다.

따라서이 공식은 2 개의 연속 점 사이의 시간이 일정 할 때 작동합니다. 그러나 매 2 개의 좌표 사이의 시간이 다르다고 가정하면 MSD를 계산하기 위해 해당 구성 요소를 어떻게 통합 할 수 있습니까?

+0

적절한 처리가 특정 애플리케이션에 의존 할 수있다. –

+0

"point-point_before"정보 이상을 사용할 수 있습니다. http://web.mit.edu/savin/Public/.Tutorial_v1.2/Concepts.html#A1 – dani

답변

0

우선, 루프는 매우 느립니다. 따라서 성능상의 이유로 성능 저하 문제를 피하고 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 
관련 문제