バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、Pythonによる状態空間モデルをシミュレーションを実施。
Controlライブラリのmatlabモジュールを使用することで実現可能。
MATLAB/Simulinkの時と同じ結果が得られた。
引き続きScilabで。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
Scilabで状態空間モデル
次はScilabだね。
Scilabも流れは一緒だな。
使用する関数名が違うって程度だ。
- syslin:線形システム定義関数
- csim:線形システムシミュレーション関数
察するに、syslin関数に各行列を渡して、
csimでシミュレーション実行か。
\(
\boldsymbol{A}=
\begin{bmatrix}
0 && 0 \\
1 && 0
\end{bmatrix}
\)
\(
\boldsymbol{B}=
\begin{bmatrix}
1/m \\
1
\end{bmatrix}
\)
\(
\boldsymbol{C}=
\begin{bmatrix}
1 && 0 \\
0 && 1
\end{bmatrix}
\)
\(
\boldsymbol{D}=
\begin{bmatrix}
0 \\
0
\end{bmatrix}
\)
コード
これもコードみた方が早いな。
m=1;
A=[0,0 ; 1,0];
B=[1/m ; 0];
C=[1,0;0,1];
D=[0;0];
sys = syslin('c', A, B, C, D); // 状態空間モデル生成
t=linspace(0,10,10000); // 時間(横)軸
step=zeros(1,10000); // 入力信号生成
step(1,5000:10000)=1; // 5秒後に0から1へ
y=csim(step,t,sys); // 連続系時間応答のシミュレーション
plot(t,y,"linewidth",3);
plot(t,step,"--b","linewidth",3);
xgrid();
てっきりMATLABのControl System Toolboxの仕様に合わせてるのかと思ったけど、
そういうわけじゃないんだね。
そうだね。
ここら辺の文化は特にMATLABに寄せてる感じはしないな。
むしろ別物と思っておいた方が良いな。
今回の状態空間モデルに限定すると流れは似てるんだけどね。
まぁ出来るってのはわかったし。
シミュレーション結果
そしてシミュレーション結果。
Scilabでも同じ結果が得られたね。
まとめ
まとめだよ。
- Scilabで状態空間モデルのシミュレーションをするにはsyslinとcsim関数を使用する。
- MATLABに寄せてるかと思いきや、この分野はかなり異なる仕様になっている。
- 想定通りのシミュレーション結果を得られた。
バックナンバーはこちら。
コメント