【入門】状態空間モデルで微分解決【数値計算】

【入門】状態空間モデルで微分解決【数値計算】 数値計算
【入門】状態空間モデルで微分解決【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

の、
MATLAB,Python,Scilab,Julia比較 その56【状態空間モデル⑭】
MATLAB,Python,Scilab,Julia比較 その57【状態空間モデル⑮】

を書き直したもの。

状態空間モデルは多変量であるため、ベクトル行列の形式になっている。
つまり、ベクトル行列の形式まま微分解決する話となる。

状態空間モデルまま微分解決可能か?

結論としては微分解決可能。
実はそれほどベクトル行列であることは意識しない

【再掲】状態空間モデル

状態空間モデルを再掲しておく。

\(\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)+\{A\boldsymbol{x}(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(t)}\)を出力方程式に代入
\(\boldsymbol{y}(t+\Delta T)=C\boldsymbol{x}(t+\Delta t)+D\boldsymbol{u}(t)\)

微分解決済みの状態方程式と出力方程式

\(\boldsymbol{x}(t+\Delta t)=\boldsymbol{x}(t)+\{A\boldsymbol{x}(t)+B\boldsymbol{u}(t)\}\Delta t \)
\(\boldsymbol{y}(t+\Delta T)=C\boldsymbol{x}(t+\Delta t)+D\boldsymbol{u}(t)\)

これをプログラムに落とせばOK。
イメージがわかない場合は、MATLAB、Python、Scilab、Juliaで作成する予定なので、ご参考に。

まとめ

  • 状態空間モデルの状態方程式と出力方程式の微分解決を実施。
    • 基本的には状態方程式側の微分解決をし、その結果を出力方程式に代入する。
  • MATLAB、Python、Scilab、Juliaで上記をプログラムとして実装予定なので、よくわからん人は参照すべし。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

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