0

個別に分析したい複数の粒子軌道の行列があります。軌道番号は行列の列の 1 つなので、その番号に基づいて並べ替えようとしています。この回答のコードの一部を使用しています: MSD with matlab (これは非常に役に立ちました、ありがとう!) を使用して MSD を計算していますが、個々の軌跡を解析するのが困難です。私がやろうとしていることをより詳細に説明するには:軌道番号用の1列、x位置用の1列、y位置用の1列などの行列形式の軌道出力があります。この情報を取得し、各軌道の平均二乗変位を計算します。これを行うには、軌跡番号 (の行 7 にリストされている) に基づいてデータ ポイントを区別する方法を作成する必要があります。mymatrix)。これは私が困っているところのようです。この行列の重要な列は、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 マトリックスはすべてゼロのままになります。これはおそらく軌跡番号によるソートの誤りによるものだと思います。探していた結果ではなく、エラーは発生しません

これを修正する方法について何か提案があれば、大歓迎です。

4

1 に答える 1

0

同じ軌跡番号で識別されるすべての行をバンドルしたいようです。列を進めていくと、時系列で表示されると思います。次に、次のようなものを試してください

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
end
于 2013-07-17T04:48:03.857 に答える