Simulinkで離​散時間のディスクリプ​タシステムを実装する​にはどうすればよろし​いでしょうか?

11 views (last 30 days)
Yugo OGIO
Yugo OGIO on 28 Sep 2022
Commented: Yugo OGIO on 29 Sep 2022
Simulinkで離散時間のディスクリプタシステムが実装できなくて困っています.
LTI Systemの中にMATLABの関数であるdssを記述することで実装できるのかなと思っていたのですが,dssのパラメータを変えると時折以下のようなエラーが出て困っています.
  • '(Simulinkモデル名)/(ブロック名)' でのエラー: マスクの初期化コマンドを評価できませんでした。
  • 原因:
  • "初期状態" パラメーターは、状態と同じ入力を持つベクトルに設定されなければなりません。
エラーが出るdssのパラメータは,例えば以下のようなもので,初期状態は [0;0] に設定しています.
dss([0 -1;0 1], [1 -1;0 0], [1 1], [0], [0 0;0 0], 0.1)
ただし,MATLABのコマンドラインでdssを実行すると,エラーを吐かれることなく実行することができます.
私の動作環境は,R2022aです.
ご回答いただけますと幸いです.

Answers (2)

Toshinobu Shintai
Toshinobu Shintai on 29 Sep 2022
Eに当たる行列が0であるため、エラーとなっているようです。Eの部分を単位行列にすると問題なく実行できました。
sys = dss([0 -1;0 1], [1 -1;0 0], [1 1], [0], [1 0;0 1], 0.1);
一般的に、Simulinkのブロックのパラメーター記入欄の中にコマンドを入れることはお勧めしておりません。機能としてはできてしまうのですが、その際の実行結果を確認することが難しいため、問題の特定に苦労してしまいます。
まずMATLABスクリプトで上記コマンドを実行し、得られた"sys"というワークスペース変数を LTI System ブロックの中に記入する形が望ましいです。

Yugo OGIO
Yugo OGIO on 29 Sep 2022
回答してくださりありがとうございます.
早速,MATLABのワークスペースに変数を定義して,Simulinkのブロックに読み込ませる形にいたしました.
ただ,エラーの件ですが,Eの行列を零行列でなくとも,非正則な行列にすると同じエラーが吐かれてしまいます.
Eを非正則な行列にしてしまうと,何か不具合が生じるのでしょうか?
  2 Comments
Yugo OGIO
Yugo OGIO on 29 Sep 2022
ありがとうございます.
確認してみます.

Sign in to comment.

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!