我有一个多个粒子轨迹的矩阵,我想要单独分析,轨迹号是矩阵中的一列,所以我试图根据这个数字进行排序。我使用了以下答案中的一些代码:MSD with matlab (非常有用,谢谢!)来计算MSD,但我很难解析出各个轨迹。为了更详细地解释我试图做的事情:我有一个矩阵格式的轨迹输出,其中一列用于轨迹编号,一列用于x位置,一列用于y位置,等等。我希望能够获取这些信息并计算每个轨迹的均方位移。为此,我必须创建一种基于轨迹编号(列在mymatrix的第7行中)来区分数据点的方法。这似乎就是我遇到麻烦的地方。该矩阵中的重要列是1: X位置、2: Y位置和7:轨迹编号。到目前为止,我已经
total_rows=size(mymatrix,1);
max_trajectory_number=mymatrix(total_rows,7);
nData=0;
msd=zeros(total_rows, 4)
for i=0:max_trajectory_number
trajectornumber= mymatrix(i,7);
if trajectorynumber.equals(i)
nData=nData+1; %counts the number of instances of this trajectory number, which is the number of data points in the trajectory
for dt = 1:nData
deltaCoords = mymatrix(1+dt:end,1:2) - traj0mat(1:end-dt,1:2); %calculates time-averaged MSD based on y and y positions in colums 1 and 2 respectively
squaredDisplacement = sum(deltaCoords.^2,2); %# dx^2+dy^2+dz^2
msd(dt,1) = trajectorynumber; %trajectory number
msd(dt,2) = mean(squaredDisplacement); %# average
msd(dt,3) = std(squaredDisplacement); %# std
msd(dt,4) = length(squaredDisplacement); %# n
end
end 不幸的是,当我在mymatrix上运行它时,得到的msd矩阵仍然是全零。我认为这可能是由于基于轨迹编号的排序错误。我没有得到错误,只是没有得到我想要的结果
如果任何人对如何解决这个问题有任何建议,将不胜感激。
发布于 2013-07-17 12:48:04
看起来您想要捆绑由相同轨迹号标识的所有行。我假设它们是按时间顺序出现的,因为你继续往下看一列。然后尝试如下所示
tnumbs = unique(mymatrix(:,7)); % identify unique trajectory numbers
for i=1:length(tnumbs) % loop through trajectories
icurr = find(mymatrix(:,7)==tnumbs(i)); % find indices to entries for current trajectory
% perform your averaging
deltaCoords = mymatrix(icurr(1+dt:end),1:2) - traj0mat(icurr(1:end-dt),1:2); %calculates time-averaged MSD based on y and y positions in colums 1 and 2 respectively
squaredDisplacement = sum(deltaCoords.^2,2); %# dx^2+dy^2+dz^2
msd(i,1) = tnumbs(i); %trajectory number
msd(i,2) = mean(squaredDisplacement); %# average
msd(i,3) = std(squaredDisplacement); %# std
msd(i,4) = length(squaredDisplacement); %# n
endhttps://stackoverflow.com/questions/17686419
复制相似问题