バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、Scilabによる状態空間モデルをシミュレーションを実施。
MATLAB Control System Toolkitに寄せてるかと思いきや全く違う仕様。
しかし、状態空間モデルに関しての使い方は一緒。
引き続きJualiで。
登場人物
博識フクロウのフクさん

イラスト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
Juliaで状態空間モデル

最後はJuliaか。

JuliaもPythonと似たような感じできそうだ。
ControlSystemsパッケージを使用する。

なんか名前的に・・・。

PythonのControlライブラリのmatlabモジュールと同様に
MATLABのControl System Toolkitの仕様を踏襲してるようだな。
よって、流れはPythonの時と一緒で、
ss関数に各行列を渡して、システムオブジェクトを取得。
lsimに入力とシステムオブジェクトを渡してシミュレーション。
になるはずだ。
\(
\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}
\)
コード

まぁソースコードを見れば一目瞭然だと思うよ。
using ControlSystems
using PyPlot
m=1;
A=[0 0; 1 0];
B=[1/m; 0];
C=[1 0; 0 1];
D=[0; 0];
sys=ss(A,B,C,D); # 状態空間モデル生成
t=range(0,10,length=10000); # 時間(横)軸
u=zeros(1,10000); # 入力信号生成
u[5000:10000].=1.0; # 5秒後に0から1へ
y,T,x=lsim(sys,u,t); # step応答
plot(T',y');
plot(T',u', "--b");
grid();

確かにPythonの時と同じ流れだ。
ということはMATLAB Control System Toolboxと同じ流れってことになるのか。
シミュレーション結果

そしてシミュレーション結果


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

というわけで各ツール、各言語による状態空間モデルのシミュレーションは可能ってことだな。

これで状態空間モデルは怖くない!

(といってももっともシンプルなモデルだから、実際にはもっとカオスなことになるんだよなぁ)
まとめ

まとめだよ。
- Juliaで状態空間モデルをシミュレーション。
- Pythonと同じくMATLAB Control System Toolboxの仕様を踏襲したControlSystemsパッケージを使用。
- 他のツール、言語と同じ結果が得られた。
バックナンバーはこちら。
コメント