次回>「

1:常微分方程式と状態方程式

常微分方程式とは

Wikipediaによれば
「常微分方程式(じょうびぶんほうていしき、英: ordinary differential equation, O.D.E.)とは、数学において、未知関数とその導関数からなる等式で定義される方程式である微分方程式の一種で、未知関数が本質的にただ一つの変数を持つものである場合をいう」常微分方程式 – Wikipedia
とあります。

完全に奥歯にモノが挟まってますが、各方面のご指摘を恐れなければ、
\begin{equation}
 \frac{dx(t)}{dt} = f(t,x(t))
  \label{eq:Scalar}
\end{equation}
の形の微分方程式を常微分方程式とする、でいいでしょう。

つまり、ただ一つの変数\(t\)を持つ未知関数\(x(t)\)とその導関数からからなる微分方程式です。
さらに、例えば、
\begin{eqnarray}
x_2 &=& \frac{dx_1}{dt} \nonumber \\
x_3 &=&\frac{dx_2}{dt} = \frac{d^2x_1}{dt^2} \nonumber
\end{eqnarray}

とすることで、高階の導関数を\(X=[x_{1},x_{2}, … ,x_{n}]^t \)ベクトルの要素とし、ベクトル関数 \(F(t,X(t))\)を用いて、
\begin{equation}
\frac{dX(t)}{dt} = F(t,X(t))
\label {eq:Vector}
\end{equation}

としておけば、微分の微分の…といった方程式も扱えるので、
これを基本形としましょう。

制御屋をやっていると、この常微方程式と付き合いが避けられないのですが、なにより、現代制御(といっても50年前の理論ですが)の大黒柱である状態方程式(State Space Equation)が常分方程式そのものですね。式\eqref{eq:Vector}を線形に限定したものが、次の状態方程式です。
\begin{equation}
\frac{dX(t)}{dt}=AX(t)+BU(t)
\label {eq:StateEq}
\end{equation}

とある状態変数[1]”とある状態変数”とは何ぞや?というのは、意外に深いので流してくださいのベクトルである状態変数ベクトル\(X(t)\)と外部から与えられる変数である入力ベクトル\(U(t)\)とを、行列およびを用いて、線形式にしたものが、\(X(t)\)の導関数に等しい、という式になります。

式(\ref{eq:Vector})のような一般形で\(X(t) \)を解析的に求めるのは困難ですが、式(\ref{eq:StateEq})の状態方程式は有難いことに解析解が知られています。

とりあえず\(U(t)\)ベクトルを無視して、スカラー式で考えるなら、
\begin{equation}
\frac{dx(t)}{dt}= \lambda x(t)
\label {eq:testEq}
\end{equation}
ですので、これは
\begin{equation}
x(t) = x(0)e^{\lambda t}
\end{equation}
です。

こうなるように\(e\)を仕込んである、いや以下に定義してあるので、
\begin{equation}
e^{\alpha }:=1+\alpha+\frac{\alpha^2}{2!}+…+\frac{\alpha^\infty}{\infty!}=\sum_{k=0}^{\infty} \frac{\alpha^k}{k!}
\label{eq:expDef}
\end{equation}

そうなります。式\eqref{eq:expDef}において\(\alpha=\lambda t \)とすれば、式(\ref{eq:testEq})を満たすはずです。

なお、\(x(0)\)は\(t=0\)における初期値ですね。常微分方程式を解くことは初期値問題とも呼ばれ、初期値が無いと解けない、いや初期値さえあれば解けるという事になっています。

では、式\eqref{eq:StateEq}はどうか? 
これは、やはりこう仕込みます。Wikipediaでは行列指数関数(Matrix Exponential Function)と呼ばれてるようですが、定数である\(e\)の行列乗という、なんだか解らない数を、ためらうことなく定義して、立ち去ります。

\begin{equation}
e^{A}:=I+A+\frac{A^2}{2!}+…+\frac{A^\infty}{\infty!}= \sum_{k=0}^{\infty} \frac{A^k}{k!}
\label{eq:defMatExp}
\end{equation}

コイツさえあれば、
\begin{equation}
X(t)=e^{At} X(0)
\end{equation}

です。ちなみに式\eqref{eq:defMatExp})は制御の分野では状態遷移行列(State Transition Matrix)と呼ばれています。

さて、ここで置き去りにした\(U\)ベクトルを思い出すと、式\eqref{eq:StateEq}の状態方程式は
\begin{equation}
X(t)=e^{A (t-t_o)}X(t_o) + \int_{t_0}^{t} e^{A(t-\tau)} BU(\tau) d\tau
\label{eq:resoSolution} 
\end{equation}
と解けるとのよし。

なんか解ったような解らないような、感じです。 
そこで、「実は\(U(\tau)\)は区間\([t、t_0]\)で定数です!」と衝撃の告白を行います。
ならば\(BU\)は積分の対象外ですので、

\begin{equation}
X(t)=e^{A (t-t_o)}X(t_o) + \int_{t_0}^{t} e^{A(t-\tau)} d\tau BU
\label{eq:resoSolution2}
\end{equation}
です。

これならば、
\begin{eqnarray}
X(t)&=&e^{A (t-t_o)}X(t_o) + \int_{t_0}^{t} e^{A(t-\tau)} d\tau BU\nonumber \\
&=&e^{A (t-t_o)}X(t_o) + e^{At} \int_{t_0}^{t} e^{A(-\tau)} d\tau BU \nonumber \\
&=&e^{A (t-t_o)}X(t_o) + e^{At} \left (-e^{-At} +e^{-At_0} \right)A^{-1} BU\nonumber \\
&=&e^{A (t-t_o)}X(t_o) +  \left (e^{A(t-t_0)} – I \right)A^{-1} BU
\label{eq:resoSolution3}
\end{eqnarray}
ですね[2]状態遷移行列は、その定義式\eqref{eq:defMatExp}よりA行列で右から除しても左から除しても同じ

しかし、「\(U\)が区間\([t、t_0]\)で定数は許せない!」と冷たく拒絶されるかもしれません。
そこで、すごく小さい\(h\)の間だけ、つまり「\(U\)は区間\([h+t_0、t_0]\)の間だけ定数です」、と許しを請います。
\begin{eqnarray}
X(h+t_0)=e^{A h}X(t_0) +(e^{A h} – I )A^{-1} BU_{t_0}
\end{eqnarray}
です。

さらに、「実は\(X(t_0)\)は離散数列\(X\)の\(i\)番目の数\(X_i\)で、\(X(h+t_0)\)は\(X_{i+1}\)でした」と、たたみかければ
\begin{equation}
X_{i+1}=e^{A h}X_i + (e^{A h} – I )A^{-1} BU_i
\label{eq:diffExp}
\end{equation}
となり、\(h\)をかなり小さくすれば、任意のtに関する\(X(t)\)(に近い)値が得られます[3]ですが、実際に式\eqref{eq:diffExp}を計算するのは、一筋縄ではいきません。それはまた後ほど


参考文献
「微分方程式による 計算機入門」三井 斌友 小藤 俊幸 齊藤 善弘 2004年 共立出版社
「システム制御理論入門」     小郷 寛 美多 勉  1979年 実教出版社

脚注
脚注
1 ”とある状態変数”とは何ぞや?というのは、意外に深いので流してください
2 状態遷移行列は、その定義式\eqref{eq:defMatExp}よりA行列で右から除しても左から除しても同じ
3 ですが、実際に式\eqref{eq:diffExp}を計算するのは、一筋縄ではいきません。それはまた後ほど

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です