技術士(総合技術監理・機械部門)のブログ

技術士がお届けする,技術,工学,技術者倫理などの話題

SCILABによる制御系設計 その3

2017-03-12 11:14:05 | 工学
2 動的解析の準備 の続き

前回、伝達関数と状態空間表示の変換についてやってみた。

伝達関数はラプラス演算子sによる記述であり、状態空間も状態量x(t)による表現であった。
連続時間での表現であった。

前回は、伝達関数→状態空間の変換までやってきた。
今回は状態空間→伝達関数の変換をやってみる。
-->A=[0 1 0;0 0 1;-5.008 -25.1026 -5.03247];

-->B=[0;25.04;-121.005];

-->C=[1 0 0];

-->D=[0];

-->E=[1 0 0;0 1 0;0 0 1];
として
-->S=des2ss(A,B,C,D,E);

-->H=ss2tf(S);

-->H
H =

2
5.0080488 + 25.04s - 5.329D-15s
-------------------------------
2 3
5.008 + 25.1026s + 5.03247s + s


となる。尾形先生の参考書Matlab Program 2-6と同じになったので まあOKですね。(ならなかったら問題)
さて、これは1入力1出力なので、伝達関数は1つであるが、多入力だった場合はどうするのか?
->A={0 1;-2 -3];

-->B=[1 0;0 1];

-->C=[1 0];

-->D=[0 0];

-->E=[1 0 ;0 1];

-->S=des2ss(A,B,C,D,E);

-->H=ss2tf(S);

-->H
H =

3 + s 1
--------- ---------
2 2
2 + 3s + s 2 + 3s + s
となり、特に意識しないでも2つでる。(Matlabの場合指定するが)


連続系はここまでで、システムの場合、離散系も考えられる。変換はMatlabではc2dであるが、scilabではdscrらしいが引数がシステムである。まあ、やってみよう。

-->A=[0 1;-25 -4];
--→B=[0;1];
だけではシステムとして定義できないのでCを追加
-->C=[1 0];

-->Si=syslin('c',A,B,C);

-->sld=dscr(Si,0.05) サンプリング0.05で離散化
sld =


sld(1) (state-space system:)

!lss A B C D X0 dt !

sld(2) = A matrix =

0.9708833 0.0448470
- 1.1211761 0.7914951

sld(3) = B matrix =

0.0011647
0.0448470

sld(4) = C matrix =

1. 0.

sld(5) = D matrix =

0.

sld(6) = X0 (initial state) =

0.
0.

sld(7) = Time domain =

0.05

となった。これも尾形先生の参考書Program2-9と同じ結果。ただし、精度には注意(format long )とMatlabでは参考書に書いてありましたが、scilabの場合はこのままで精度は良いようです。


最新の画像もっと見る

コメントを投稿