粒子の拡散をシミュレートしています。シミュレートされた座標は、次のような形式でマトリックスに格納されます。
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
それを行うには10億倍の効果的な方法があると確信していますが、私はmatlab(およびプログラミング)にあまり精通しておらず、アイデアを思いつきませんでした:)誰か合理的なことを提案できますか? たぶん、データの再編成が役立つでしょうか?すべてのアイデアをありがとう:)