我在模拟粒子的扩散。模拟坐标存储在矩阵格式如下:matlab:多轨迹位移计算
data(:, 1) % overall track number
data(:, 2) % dataset number
data(:, 3) % individual track number (within dataset)
data(:, 4) % frame number
data(:, 5) % xcoordinate
data(:, 6) % ycoordinate
我想要做的是创建另一个矩阵存储平方位移。格式将如下:
SD(:, 1) % overall track number (like in data matrix)
SD(:, 2:n) % squared displacement between 1st and n-th frame
注意,每个数据集内的帧数不相等。如果每个轨迹的帧数小于n + 1,让它保持为NaN。
我使用的是地球上最糟糕的和最慢的方法计算了 - 几个for循环:
SD(:, 1) = data(:, 1);
for i=1:length(data(:, 1)) % I am taking each row
for j=1:lagsToCalculate % then every timelag (or n as described above)
if j<i % check if enough data from the 1st point
if data(i, 3) == data(i-j, 3) % and if it is still the same trajectory
% calculate square displacement
SD(i,j+1) = (data(i, 5)-data(i-j, 5))^2+(data(i, 6)-data(i-j, 6))^2;
else
SD(i, j+1) = NaN; % or set to NaN
end
else
SD(i, j+1) = NaN;
end
end
end
我敢肯定有做的十亿倍更有效的方法,但我不是很流利的matlab(和编程),不能有任何想法:)任何人都可以提出一些合理的建议吗?也许一些数据重组会有所帮助? 感谢每一个想法:)
谢谢你的回答。但是我完全没有得到你的行:SD(2:n,1)= sum(diff(data(:,2:end))。^ 2,2)。坐标存储在数据(:,5)和数据(:,6)中。另一个问题是,每一个新的轨道是从不同的角度出发(所以你必须区分它们或消除这些无意义的位移 - 在我的代码中我使用NaN)。 – Art 2012-04-09 10:08:24
哦,对不起,应该是SD(:, 2:n)而不是SD(2:n,1),所以在SD第一列轨道#中,然后是第一,第二,第三...... n滞后位移。谢谢 – Art 2012-04-09 10:10:21
对不起,我的代码片段使用了我在Matlab上运行的测试数据集。将尽快编辑。 – 2012-04-09 10:10:36