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

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

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

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

フクさん
フクさん

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

太郎くん
太郎くん

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

フクさん
フクさん

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

まとめ

フクさん
フクさん

まとめだよ。

  • Juliaで状態空間モデルをシミュレーション。
    • Pythonと同じくMATLAB Control System Toolboxの仕様を踏襲したControlSystemsパッケージを使用。
  • 他のツール、言語と同じ結果が得られた。

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

コメント

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