バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回までで、とりあえずニュートンの運動方程式をもととした
状態空間モデルを作成した。
といっても、これが本当に正しいのかも確認する必要はある。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
状態空間モデルを確認するには
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
とりあえず、前回でニュートンの運動方程式を状態空間モデルで表現できたわけなんけど、
これってこの後何したらいいの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
当然、動作確認だな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
どうやって?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/はてなフクロウ.png)
それは・・・、
どうしよっか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」11アップ.png)
なぜこっちに問い返す!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁまじめにベクトル、行列単位で微分を解くのが一番ではあるのだけど、
それを始めると結構な長さの解説になりそうなんだよね。
今の段階では、もっと手っ取り早い確認方法が良いかなって思って。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
MATLABとかで一撃で確認できないの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
できるんだけど、
MATLABの場合、Control System Toolboxが必要になるんだよね。
残念ながら私が保有しているライセンスだと入ってない。
まぁSimulinkに状態空間モデル用のブロックがあるからそれで代用してもよいけど。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
もしかして、各ツール、各言語で状態空間モデルを扱えちゃったりする?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
さっきも言った通り、MATLABはControl System Toolboxが必要にはなるが、
各ツール、各言語で状態空間モデルは扱えそうだ。
少なくともPython、Scilabは使えるはずだ。
Juliaに関してはやったことないけど、軽く調べた限りだと似たようなやり方でできそうだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
じゃー、各ツール、各言語で今回の状態空間モデルを動かせちゃえばいいじゃん。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだな。
まずはそれが手っ取り早そうだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(「まずは」って言い方がものすごく不穏なんだけど・・・。)
使用する状態空間モデルの各行列とパラメータ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まず事前に、今回使用する状態空間モデルの各行列とパラメータをまとめておこう。
前回、求めた状態空間モデルは以下だ。
\(
\begin{bmatrix}
\dot{v}(t) \\
\dot{s}(t)
\end{bmatrix}=
\begin{bmatrix}
0 && 0 \\
1 && 0
\end{bmatrix}
\begin{bmatrix}
v(t) \\
s(t)
\end{bmatrix}+
\begin{bmatrix}
1/m \\
0
\end{bmatrix}
F(t)
\)
\(
\boldsymbol{y}=
\begin{bmatrix}
1 && 0 \\
0 && 1
\end{bmatrix}
\begin{bmatrix}
v(t) \\
s(t)
\end{bmatrix}+
\begin{bmatrix}
0 \\
0
\end{bmatrix}
F(t)
\)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
確かにそうだね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
これにより各行列は以下になる。
\(
\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}
\)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして、質量\(m\)は外部設定可能なパラメータとする。
とりあえず、特性を見たいだけだから\(1[kg]\)にしておこう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
これでシミュレーションができるってことだね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
次回から一つずつ試してみよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 状態空間モデルを確認するにはシミュレーションしてみるしかない。
- まじめにシミュレーションしようと思うとベクトル、行列に対する微分を解決する必要がある。
- (これもやる予定だが後で)
- 各ツール、各言語で状態空間モデルが扱えそうなので、それらで動かしてみる。
- ただし、MATLABに関してはSimulinkの状態空間モデルブロックで実施予定。
バックナンバーはこちら。
コメント