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

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

댓글 수: 4

Atsushi Ueno
Atsushi Ueno 2022년 12월 29일
>Simulinkでfor文を利用するブロックはあるのでしょうか
はい。For Iterator Subsystem があります。シミュレーションのタイム ステップの間、指定された反復回数だけ実行を繰り返すサブシステムで、内部の For Iterator ブロックにより繰り返し実行が制御されます。
蓮 出越
蓮 出越 2022년 12월 30일
편집: 蓮 出越 2022년 12월 30일
ご回答ありがとうございます。 このブロックについて再度質問なのですが、
このブロックは二重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 2023년 1월 3일
Simulink モデル最適化なら
このあたりのツールを使うと便利かと思います。
ご自身で色々と考えるのは良いことだとは思いますが、大抵のことについて過去に考えた人が沢山おられ、その結果としてMATLAB/Simulink では便利なツールとして整備されていることが多いです。まずは調べてみるのが良いかなと思います。かくいう私も、学生の時は FFT や、統計解析を行う計算を自身で書いていました。関数の用意が有るのも知らず。
蓮 出越
蓮 出越 2023년 1월 4일
ご回答頂きありがとうございます。
参考にさせていただきます。

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

도움말 센터File Exchange에서 Simulink에 대해 자세히 알아보기

제품

릴리스

R2022a

질문:

2022년 12월 28일

댓글:

2023년 1월 4일

Community Treasure Hunt

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

Start Hunting!