バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回までで、状態空間モデルを使用せずに
微分方程式からブロック図、漸化式、Cコード化、シミュレーションを実施。
この流れを、状態空間モデルを使用するとどうなるかをやってみる。
登場人物
博識フクロウのフクさん
イラスト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
状態空間モデルまま微分解決可能?
前回までは状態空間モデルを使用しないでCコード化、シミュレーションをやったわけだけど、
今回からは状態空間モデルを使用した場合、どうなるかって話に突入か…。
なんか憂鬱そうだねぇ。
以前も言ったけど、ベクトル、行列に加えて微分方程式って思うと気が重くて・・・。
まぁあんまりベクトル、行列は気にしなくて良いかもよ。
というか、気にしないようになってるし。
それは知ってる側の意見であって、知らない側の意見じゃない!
まぁ一つずつ解説していこう。
【再掲】状態空間モデル
とりあえず、状態空間モデルを再掲しておく。
\(\dot{\boldsymbol{x}}=A\boldsymbol{x}+B\boldsymbol{u}\)
\(\boldsymbol{y}=C\boldsymbol{x}+D\boldsymbol{u}\)
ここからどう微分解決するのか・・・。
状態方程式の微分解決
まず状態方程式の両辺を積分してみよう。
\(\int \dot{\boldsymbol{x}} dt=\int(A\boldsymbol{x}+B\boldsymbol{u})dt\)
\(\boldsymbol{x}=\int(A\boldsymbol{x}+B\boldsymbol{u})dt\)
なるほど、両辺を積分すると、とりあえず微分は消える・・・。
その代わり積分が増えたじゃん!!!
ここで微分解法としてオイラー法(テイラー1次)を採用。
\(\boldsymbol{x}(t+\Delta t)=\boldsymbol{x}(t)+\{Ax(t)+B\boldsymbol{u}(t)\}\Delta t \)
そっか、精度をある程度犠牲にすることを考えれば、オイラー法で解決できたことにできるのか。
オイラー法(オイラーほう、英: Euler method)とは、常微分方程式の数値解法の一つである。この方法は、数学的に理解しやすく、プログラム的にも簡単なので、数値解析の初歩的な学習問題としてよく取りあげられる。
Wikipeiaより(https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E6%B3%95)
当然、ホルン法、ルンゲクッタ法でも良いけど、
とりあえずオイラー法の精度でも大体なんとかなるんだよね。
って、これって\(\boldsymbol{x}\)とかベクトルなはずなんだけど成立するの?
成立する。
というか、単なるデータの集合体でしかないから、これが1変数か多変数かは関係ないな。
そういうもんか。
まとめ
まとめだよ。
- 状態空間モデルのまま微分解決可能なはず。
- まずは状態方程式の微分解決を実施。
- 両辺を積分して、その後にオイラー法で微分解決。
- とりえずはオイラー法でも精度が十分なことは多い。
- 両辺を積分して、その後にオイラー法で微分解決。
バックナンバーはこちら。
コメント