Simulink forループ内の結果を次の周の入力にする方法

Simulinkでforループ内の結果を次の周の入力にする方法を考えています。
たとえば下図のようなイメージです。
モデルが複雑でわかりにくくなってしまうのですが、もっと効率の良い、スマートな表現方法はあるでしょうか?
恐れ入りますが、ご教示願います。

 Accepted Answer

2 votes

こちらはどうでしょうか?
For Iterator ブロックの開始時の状態をリセットに設定し、Delayブロックを使用して前ループの結果を渡します。開始時の状態をリセットに設定しているので、Delayの初期条件は毎ステップ入力値から始まります。

1 Comment

tak
tak on 4 Feb 2025
ありがとうございます。
だいぶスマートになりました。

Sign in to comment.

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 1 Feb 2025

0 votes

質問の例に挙げられた処理は「Nが4以上ならを出力、Nが1~3なら(何か)を出力」です。
2のN乗は Math Function でOK。その場合、MemoryFor Iterator Subsystem は不要になります。

3 Comments

tak
tak on 3 Feb 2025
ご回答ありがとうございます。
説明が不足しており申し訳ございません。
実際にはGain(2)の部分が別の複雑なシステムになります。
その別の複雑なシステムの出力結果を次の周の入力とさせて複数回繰り返し処理させたいと考えております。
現状ではswitchを複数個置いて表現していますが作るのも読み取るのもわかりづらいと感じており、もう少しスマートな表現方法はないものかと悩んでおります。
Atsushi Ueno
Atsushi Ueno on 11 Feb 2025
気になる事:
最後のSwitch((1:N)>=4)は、有っても無くても動作に影響しないのではないでしょうか?
For Iterator Subsystem内で繰り返し処理が行われている間の出力は使われず、全ての繰り返し処理が終わった後に始めて出力が使われます。 @交感神経優位なあかべぇ氏の回答からも最後のSwitchは除去されています。
tak
tak on 12 Feb 2025
ありがとうございます。
私も実際にswitchを外してみたところ、結果に変わりがありませんでした。
意図としてはループの最後の結果のみ出力させようとしていました。

Sign in to comment.

Categories

Find more on Simulink in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!