2個のSimulin​kモデルでlinmo​dを使用し2個のボー​ド線図を描きたい

10 ビュー (過去 30 日間)
milk
milk 2023 年 1 月 30 日
コメント済み: milk 2023 年 1 月 31 日
途中でつまずいてしまったため質問をします.
複数個のモデル,例えば
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個でもボード線図を書きたいです.

採用された回答

Toshinobu Shintai
Toshinobu Shintai 2023 年 1 月 30 日
エラーになる理由は、"ss2tf"で得られる伝達関数が1入力2出力を表現するものになっているからです。以下のように、num1が2行になっており、行の数が出力の数を表しています。よって、num1をそのままtfに入れるとエラーとなります。
[a,b,c,d] = linmod('test_model')
a = 3×3
-1 0 0 0 -11 -10 0 1 0
b = 3×2
1 0 0 1 0 0
c = 2×3
1 0 0 0 0 20
d = 2×2
0 0 0 0
[num1,den1] = ss2tf(a,b,c,d,1)
num1 = 2×4
0 1 11 10 0 0 0 0
den1 = 1×4
1 12 21 10
ここで、以下のように1行目だけを与えると、以下のように伝達関数を得ることができます。
Gs1 = tf(num1(1, :), den1)
Gs1 = s^2 + 11 s + 10 ------------------------ s^3 + 12 s^2 + 21 s + 10 Continuous-time transfer function.
  1 件のコメント
milk
milk 2023 年 1 月 31 日
上記のようにやってみたらできました!,またソースコード及びサンプルファイルの作成もお忙しい中ありがとうございました!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeAdditional Math and Discrete についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!