Ich simuliere die Diffusion von Partikeln. Simulierte Koordinaten werden in einer Matrix mit einem Format Format gespeichert wie folgt:Matlab: Verschiebung Berechnung für mehrere Trajektorien
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
Was ich tun möchte, ist eine andere Matrix speichern squared Verschiebungen zu erstellen. Format wird wie:
SD(:, 1) % overall track number (like in data matrix)
SD(:, 2:n) % squared displacement between 1st and n-th frame
Beachten Sie, dass Anzahl der Frames innerhalb jeden Datensatz nicht gleich ist. Wenn die Anzahl der Frames in jeder Trajektorie kleiner als n + 1 ist, lassen Sie sie als NaN erhalten.
Ich Berechnung es die schlechteste und langsamste Methode auf der Erde mit - von mehrer für Schleifen:
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
Ich bin sicher, dass es eine Milliarde Mal mehr wirksame Methode ist, das zu tun, aber ich bin nicht sehr fließend in Matlab (und Programmierung überhaupt) und konnte nicht mit einer Idee kommen :) Kann jemand etwas vernünftiges vorschlagen? Vielleicht hilft eine Datenreorganisation? Dank für jede Idee :)
danke für die antwort. Aber ich verstehe Ihre Zeile nicht vollständig: SD (2: n, 1) = Summe (diff (Daten (:, 2: Ende)).^2,2). Koordinaten werden in Daten (:, 5) und Daten (:, 6) gespeichert. Ein anderes Problem ist, dass jeder neue Track von einem anderen Punkt aus startet (also muss man sie unterscheiden oder diese sinnlosen Verschiebungen eliminieren - in meinem Code verwende ich NaNs). – Art
oh und sorry, sollte SD (:, 2: n) nicht SD (2: n, 1), so in SD erste Spalte Spur # und dann Verschiebung für 1., 2., 3. .... n Verzögerung. Danke – Art
Entschuldigung, mein Codeausschnitt benutzte einen Testdatensatz, den ich auf Matlab laufen ließ. Wird bald bearbeiten. –