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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/

はじめに

前回は、状態空間モデルをシミュレーションする上で必要な情報を整理。
各ツール、各言語で実際に試してみる。
※ ただし、MATLABはControl System Toolboxが手元に無いので、Simulinkの状態空間ブロックで代替。

というわけで、まずはMATLAB/Simulinkから

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

MATLAB/Simulinkで状態空間モデル

太郎くん
太郎くん

まずはMATLASB/Simulinkで動作確認かな。

フクさん
フクさん

必要なブロックが何個かあるから、
ブロックの説明、接続、実際のシミュレーション結果の流れで確認していこう。

太郎くん
太郎くん

ちなみに必要なブロックは何になるの?

フクさん
フクさん

以下だな。

  • State-Space
  • Step
  • Scope
  • Mux

State-Space

フクさん
フクさん

まずはState-Space。
ライブラリブラウザのContinuousの中にある。

State-Spaceブロック、Simulink、Continuous
太郎くん
太郎くん

これが状態空間モデルを実現してくれるブロックだねー。

Step

フクさん
フクさん

次はStep。
Sourcesの中にある。

Stepブロック、Simulink、Sources
太郎くん
太郎くん

これは・・・。
状態空間モデルへの入力用?

フクさん
フクさん

そうだね。
まずはシンプルなStep入力が良いだろう。
他のブロックでもOKだ。
複雑な入力をしたい場合は、SignalBuilderを使っても良いだろう。

Scope

フクさん
フクさん

次はScope。
Sinksの中にある。

Scopeブロック、Simulink、Sinks
太郎くん
太郎くん

これは出力確認用だね。

Mux

フクさん
フクさん

最後はMux。
Signal Routingの中にある。

Muxブロック、Simulink、Signal Routing
太郎くん
太郎くん

これは・・・信号を束ねるやつだよね?
何に使うの?

フクさん
フクさん

出力と入力を束ねてScopeに入れるためだな。
同一Scope内の同一軸で複数の信号を見れるようになる。

太郎くん
太郎くん

なるほど。
入力と出力を同時に見るために使うのね。

接続について

フクさん
フクさん

そして、それぞれのブロックを以下のように接続する。

状態空間モデル運動方程式確認用ブロック接続、Simuink、State-Space、Step、Scope、Mux
太郎くん
太郎くん

Simulinkだと入出力が分かり易くて良いねー。

諸設定

フクさん
フクさん

そして各ブロックに設定をする。
といっても、State-SpaceとStepだけだけど。

フクさん
フクさん

Stepはステップ時間を5。
State-Spaceは各行列パラメータ。
行列については前回だした以下にあわせる。

\(
\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}
\)

Stepブロックの設定、ステップ時間
State-Spaceブロックの設定、状態空間モデル、dx/dt=Ax+B、y=Cx+Du

シミュレーション

フクさん
フクさん

そして実際のシミュレーション結果が以下。

状態空間モデル(運動方程式)シミュレーション結果、力F、速度v、距離s
太郎くん
太郎くん

ちゃんと動いてそう!

太郎くん
太郎くん

でも、なんかどんどん加速し続けて行っているような・・・。

フクさん
フクさん

力を加え続けてるし、摩擦を加味してないからね。
宇宙空間で一方向に力を加え続けた際の結果と思えば良いと思うよ。

太郎くん
太郎くん

なんかいきなり宇宙空間とか・・・。
まぁいろいろ条件を入れると複雑になるから仕方ないのか・・・。

まとめ

フクさん
フクさん

まとめだよ。

  • MATLAB/Simulinkで状態空間モデルのシミュレーション。
  • 必要ブロックはState-Space、Step、Scope、Mux。
  • 状態空間モデルの各行列の設定はState-Spaceの詳細設定で可能。
  • シミュレーションは摩擦等を無視しているので宇宙空間での挙動と思って。

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

コメント

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