MATLAB,Python,Scilab,Julia比較 その51【状態空間モデル⑨】

MATLAB,Python,Scilab,Julia比較 その51【状態空間モデル⑨】 数値計算
MATLAB,Python,Scilab,Julia比較 その51【状態空間モデル⑨】

バックナンバーはこちら。
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で状態空間モデル(運動方程式)、力F、速度v、距離s
太郎くん
太郎くん

Scilabでも同じ結果が得られたね。

まとめ

フクさん
フクさん

まとめだよ。

  • Scilabで状態空間モデルのシミュレーションをするにはsyslinとcsim関数を使用する。
    • MATLABに寄せてるかと思いきや、この分野はかなり異なる仕様になっている。
  • 想定通りのシミュレーション結果を得られた。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました