0

システムが完全に回転するたびに、ベクトル [nx113] 内の特定の要素を更新する方法を探しています。

%% # Iterate through timesteps
for tt = 1:nTimeSteps
% # Initialise ink on transfer roller
rollers(2).ink = [zeros(1,98),ones(1,5),zeros(1,113)];

% # Rotate all rollers
for ii = 1:N
        rollers(ii).ink(:) = ...
            circshift(rollers(ii).ink(:),rollers(ii).rotDirection);
end

% # Update all roller-connections
for ii = 1:N
    for jj = 1:nBins(ii)
        if(rollers(ii).connections(jj) ~= 0)
            index1 = rollers(ii).connections(jj);
            index2 = find(ii == rollers(index1).connections);
            ink1 = rollers(ii).ink(jj);
            ink2 = rollers(index1).ink(index2);
            rollers(ii).ink(jj) = (ink1+ink2)/2;
            rollers(index1).ink(index2) = (ink1+ink2)/2;
        end
    end
end

% # Calculate average amount of ink on each roller
for ii = 1:N
    averageAmountOfInk(tt,ii) = mean(rollers(ii).ink);
end
rollers(18).TakeOff = averageAmountOfInk*0.6;

end

ベクトル rollers(2).ink は、更新したいベクトルです。現在、ベクトルは 1 回だけ入力されるため、行 98:103 からのものがあります。初めてだけでなく、システムの「ローテーション」ごとにこの範囲の要素を入力したいと思います。その理由は、ローラー表面のごく一部から断続的に追加されるインクを表示しようとしているため、5 つのセルのみを設定する必要があるためです。ループ内のステップサイズ nBins-Max で、1 からタイムステップ数まで反復すると、次のようになると思いました。

for tt = 1:nBins_max:nTimeSteps

これは私が求めているものではないようです。また、最後にシステムからインクを削除したいと考えています。回転ごとに、回転ごとに一定の割合のインクを除去できるようにして、システム内に留まらないようにしたいと考えています (あたかもシートに印刷されて取り除かれたかのように)。誰かがこれを理解し、私の問題のいずれかまたは両方を進める方法についてアドバイスを提供してくれることを願っています.

4

1 に答える 1

1

あなたの説明はあなたのコードと完全には一致していません (または、必要に応じてその逆) ので、何をしたいのか完全にはわかりませんが、以下は解決策や問題をより明確に表現するのに役立つ場合があります。

  • ベクトルrollers(2).inkには 1 行と 216 列があるため、 のような操作rollers(2).ink(98:103) = somethingは行 98 から 103 までを更新しません。また、そのベクトルの要素 98 は に初期化され0、 に初期化される要素には含まれないことに注意してください1
  • そのベクトル内の要素の範囲を更新することを記述しfor tt = 1:nBins_max:nTimeSteps、タイム ステップのベクトルをまたぐループ ステートメントを記述します。確かにあなたはのようなものを書きたいですrollers(2).ink(99:103) = new_values
  • 回転ごとにローラーからインクを取り除くことについては、次のような行を実行できrollers(2).ink = rollers(2).ink * 0.975ます。明らかに、私が選択した回転ごとに 2.5% の除去率を、シミュレーションに適したものに置き換えたいと思うでしょう。
于 2013-03-08T10:31:05.463 に答える