バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回から、状態空間モデルの掘り下げの話に突入。
まずは状態空間モデルを使用しないパターンをやってみる。
漸化式は前回出したので、ブロック図、C言語化にチャレンジ。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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/指差しフクロウ.png)
じゃ、運動方程式のブロック図をざっと書いておこう。
ちなみにガチで書くとメンドサイからSimulinkで書いた。
![運動方程式のブロック図、力F、速度v、距離s](https://www.simulationroom999.com/blog/wp-content/uploads/2022/09/02_運動方程式のブロック図.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
Simulinkで書いたなら、もうこれでシミュレーションとオートコード生成しちゃえばいいじゃんって思うな・・・。
![フクさん](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)
そこはまぁ一通りやってみてから再度考察しよう。
運動方程式のブロック図の離散化
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
先のブロック図は連続系。
これを離散化する必要がある。
まぁ積分器のところを加算器にさしかえるだけなんだけど。
![運動方程式のブロック図(離散化)、力F、速度v、距離s](https://www.simulationroom999.com/blog/wp-content/uploads/2022/09/03_運動方程式のブロック図離散化.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
これも良く見かけるな。
オートコード生成する場合はこれからやる感じかな。
再度漸化式
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして、前回すでに書きだしたが、
この離散化したブロック図を元に漸化式を導出する。
速度の漸化式
\(\boldsymbol{\dot{v}}(t)=\displaystyle \frac{1}{m}\boldsymbol{F}(t)\)
\(\boldsymbol{v}(t)=\boldsymbol{\dot{v}}(t)\Delta T + \boldsymbol{v}(t-\Delta T) \)
距離の漸化式
\(\boldsymbol{\dot{s}}(t)=\boldsymbol{v}(t)\)
\(\boldsymbol{s}(t)=\boldsymbol{\dot{s}}(t)\Delta T + \boldsymbol{s}(t-\Delta T) \)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
なるほど。
離散化したブロック図があれば、この漸化式もそのまんま数式にしているだけってのはわかるな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そして漸化式があると、Cコード化が可能になる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
え?可能なの?
オートコードが出せるのは分かるけど、
手作業でCコード化はイメージ湧かないなぁ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
企業によっては漸化式からフローチャートにして、
そこからCコード化ってプロセスを踏んでるところもあるようだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
ちょっと、どんな感じのコードになるか見たいんだけど・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
じゃ、次回までにCコードを起こしておこう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 運動方程式をブロック図で書き起こした。
- エディタの利便性からSimulinkを利用。
- 上記を離散化。
- Simulink利用の場合、この段階からオートコード生成。
- 離散化ブロックを元に漸化式。
- これからCコード化をする。(次回Cコードを見せる予定)
バックナンバーはこちら。
コメント