2個のSimulinkモデルでlinmodを使用し2個のボード線図を描きたい
10 ビュー (過去 30 日間)
古いコメントを表示
mathworksにある公式回答(複数の入力を持つシステムをlinmodで線形化しても1つ目の入力に対する伝達関数しか得られません。任意の入力に対する伝達関数を得るにはどうすれば良いですか? - MATLAB Answers - MATLAB Central (mathworks.com))を参考にするべきなのですが,
途中でつまずいてしまったため質問をします.
複数個のモデル,例えば
1 20
G1(s) = ----------- ,G2(s) = --------------------
s + 1 s^2 + 11s +10
のモデルをsimulinkのtransfer Fncを使用し作成することを考えます(sample.png).
この時コードを上記公式回答を参考に,
[a,b,c,d] = linmod('simulinkファイル名(拡張子なし)');
[num1,den1] = ss2tf(a,b,c,d,1)
[num2,den2] = ss2tf(a,b,c,d,2)
Gs1 = tf(num1,den1)
Gs2 = tf(num2,den2)
bode(Gs1)
hold on
bode(Gs2)
としてみたのですが,tfの使用で行またはベクトルでなければならないとエラーが出ます.
単体でボード線図を書くときは
1
G(s) = -----------
s + 1
[num,den] = linmod('simulinkファイル名(拡張子なし)');
Gs = tf(num,den);
bode(Gs)
でボード線図を表示させることは可能なのですが,入手出力が2個でもボード線図を書きたいです.
0 件のコメント
採用された回答
Toshinobu Shintai
2023 年 1 月 30 日
エラーになる理由は、"ss2tf"で得られる伝達関数が1入力2出力を表現するものになっているからです。以下のように、num1が2行になっており、行の数が出力の数を表しています。よって、num1をそのままtfに入れるとエラーとなります。
[a,b,c,d] = linmod('test_model')
[num1,den1] = ss2tf(a,b,c,d,1)
ここで、以下のように1行目だけを与えると、以下のように伝達関数を得ることができます。
Gs1 = tf(num1(1, :), den1)
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Additional Math and Discrete についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!