For Iterator Subsystemについての質問

3 次查看(过去 30 天)
For Itertor Subsystemについての質問なのですが、
このブロックは二重for文も対応可能かでしょうか。
また、for文の範囲が「シミュレーションのタイムステップの間」という表記ですが、自分でfor文の範囲を設定することは可能でしょうか。
例えば、現在ヨーレートが-0.52(rad/s)から0.52(rad/s)の範囲でそのヨーレートを保持した場合の2秒後進んだときの評価値をサンプリングタイム0.1(s)ごとに求め、その評価値の合計が一番高い時のヨーレートを決定し、車両制御を行いたいと思っています。以下のように
for Yawlate = Yaw_min:Yaw_sample:Yaw_max
Eval = 0;
for t = 0:Ts:N%Ts = 0.1(s), N = 2(s)
% 次の車両の位置
X = x + v*tcos(Yaw + Yawlate*t);
Y = y + v*tsin(Yaw + Yawlate*t);
% 車両の位置、速度、ヨーレートから評価値を算出するコード(今は適当に書いています)
Eval = A
Eval = Eval + A;
end
A(indent,1) = Eval;
A(indent,2) = Yawlate;
indent = indent +1;
end
% ヨーレートとSoCの格納用配列を昇順に並べ替え
S = sortrows(A);
target_Yawlate = S(1,2);
評価値を求めるモデルがSimulinkで作成していたため、コードで再度作成するのではなく、Simulinkでできると幸いです。
お手数をお掛けしますがよろしくお願いします。

采纳的回答

Toshinobu Shintai
まず、内側のループ
for t = 0:Ts:N
end
の箇所は、tという変数を時間変化に見立て、それに応じた計算をしているようですので、このforループの箇所はSimulinkでそのままモデル化できます。なぜなら、Simulinkは時間変化をシミュレーションする環境であるためです。一定の時間刻みでモデルを実行するには、固定ステップソルバーを用います。
そして、外側のループ
for Yawlate = Yaw_min:Yaw_sample:Yaw_max
end
では、Yawlateというパラメーターを変更しています。これは時間に依らない要素ですので、Simulinkでモデル化するよりは、MATLABで行う方が効率的です。この部分はMATLABで記述し、内側ループをSimulinkで記述し、Simulink部分を「sim」コマンドで実行して結果を得て、それをMATLAB側で評価する、という形がおすすめです。
以下リンク先デモモデルで、そのようなことをしています。ご参考までに。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 コード生成 的更多信息

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!