1

何千もの時間ステップの粒子 ID、x 位置、y 位置、x 速度、および y 速度のデータがあります。find()複数の時間ステップで使用できるようにしたいと考えています。たとえば、x 速度と y 速度がある値を下回るすべての時間と粒子を検索します。

これを行うために、行列の配列から始めました。

particles{t}(particleIndex,dataType)

そのためparticles{40}(:,2)、時間ステップ 40 ですべての粒子の y 位置が得られparticles{50}(:,1)、時間ステップ 50 ですべての粒子の x 位置が返されます。

これは、私のデータを扱うには扱いにくい方法のように思えました。構造体の配列 、 などを使用できることに気付きましたparticles(t).id。タイム ステップ全体でのparticles(t).xpos使用にはまだ問題がfind()あり、正しい方向に向ける情報を見つけることができませんでした。私が読んだことから、これも最良の選択ではない可能性があるようです。

目的のためにこのデータをどのように保存する必要がありますか? またfind()、タイム ステップ間で反復せずに使用できますか?

4

1 に答える 1

0

パーティクル ID を使用してインデックスを作成しないのはなぜですか?:

particles = struct;
particles(id).t    % length(t)-by-1
particles(id).x    % length(t)-by-1
particles(id).y    % length(t)-by-1
particles(id).xdot % length(t)-by-1
particles(id).ydot % length(t)-by-1

次にparticles(id).x、各要素が の要素に対応するベクトルparticles(id).tです。particles(1).x(1)が 1 の最初のx値になりidます。しかし、ID で物事を分割することの問題は、粒子全体を検索できないことです。私は本当に配列(またはすべての粒子の配列を含む構造体)を使用するだけです:

particles = struct;
particles.ids  % 1-by-length(ids)
particles.t    % length(t)-by-1 or length(t)-by-length(ids)
particles.x    % length(t)-by-length(ids)
particles.y    % length(t)-by-length(ids)
particles.xdot % length(t)-by-length(ids)
particles.ydot % length(t)-by-length(ids)

ここでparticles.idsは、行 (または他の配列の列) へのインデックスを指定できます。もちろん、この場合、すべての粒子軌跡は同じ長さ (時間ステップ数) である必要があります。これは、Matlab の ODE 関数の構造出力形式に似ていますode45

于 2013-07-20T20:42:38.937 に答える