Simulink をMatlabコードに変換したい

大学で車両制御を学んでいる者です。
車両制御を最適化手法を用いて行いたいと考えています。その際にfor文を利用したいため、Simulinkで作成したモデルをMatlab functionに変換したいと考えています。
そこで、質問内容ですが、Simulinkでfor文を利用するブロックはあるのでしょうか。
また、for文の機能がなければ、
①Pulse Generatorブロック(出力パルス)と②Delayブロック(入力信号を指定されたサンプル数だけ遅延)のコード変換方法を教えていただきたいです。
よろしくお願いします。

4 Commenti

Atsushi Ueno
Atsushi Ueno il 29 Dic 2022
>Simulinkでfor文を利用するブロックはあるのでしょうか
はい。For Iterator Subsystem があります。シミュレーションのタイム ステップの間、指定された反復回数だけ実行を繰り返すサブシステムで、内部の For Iterator ブロックにより繰り返し実行が制御されます。
蓮 出越
蓮 出越 il 30 Dic 2022
Modificato: 蓮 出越 il 30 Dic 2022
ご回答ありがとうございます。 このブロックについて再度質問なのですが、
このブロックは二重for文も対応可能かでしょうか。
また、for文の範囲が「シミュレーションのタイムステップの間」という表記ですが、自分でfor文の範囲を設定することは可能でしょうか。
例えば、現在ヨーレートが-0.52(rad/s)から0.52(rad/s)の範囲でそのヨーレートを保持した場合の評価値を求め、その評価値が一番高い時のヨーレートを決定し、車両制御を行いたいと思っています。以下のように
for Yawlate = Yaw_min:Yaw_sample:Yaw_max
Eval = 0;
for t = 0:Ts:N
% 次の車両の位置
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でできると幸いです。
お手数をお掛けしますがよろしくお願いします。
Hiro Yoshino
Hiro Yoshino il 3 Gen 2023
Simulink モデル最適化なら
このあたりのツールを使うと便利かと思います。
ご自身で色々と考えるのは良いことだとは思いますが、大抵のことについて過去に考えた人が沢山おられ、その結果としてMATLAB/Simulink では便利なツールとして整備されていることが多いです。まずは調べてみるのが良いかなと思います。かくいう私も、学生の時は FFT や、統計解析を行う計算を自身で書いていました。関数の用意が有るのも知らず。
蓮 出越
蓮 出越 il 4 Gen 2023
ご回答頂きありがとうございます。
参考にさせていただきます。

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Simulink in Centro assistenza e File Exchange

Prodotti

Release

R2022a

Richiesto:

il 28 Dic 2022

Commentato:

il 4 Gen 2023

Community Treasure Hunt

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

Start Hunting!