状態空間 (制御理論)
状態空間(じょうたいくうかん、State Space)あるいは状態空間表現(じょうたいくうかんひょうげん、State Space Representation)は、制御工学において、物理的システムを入力と出力と状態変数を使った一階連立微分方程式で表した数学的モデルである。入力、出力、状態は複数存在することが多いため、これらの変数はベクトルとして表され、行列形式で微分代数方程式を表す(力学系が線形で時不変の場合)。状態空間表現は時間領域の手法であり、これを使うと複数の入力と出力を持つシステムをコンパクトにモデル化でき、解析が容易になる。周波数領域では、p 個の入力と q 個の出力があるとき、システム全体を現すには q \times p 個のラプラス変換を書かなければならない。周波数領域の手法とは異なり、状態空間表現では、線形性と初期値がゼロという制限は存在しない。「状態空間」は、その次元軸が個々の状態変数に対応することから名づけられている。システムの状態はこの空間内のベクトルとして表現される。
状態変数は、任意の時点でシステム全体の状態を表せるシステム変数群の最小の部分集合である。状態変数群は線形独立でなければならない。すなわち、ある状態変数を別の状態変数群の線形結合で表すことはできない。システムを表現するのに必要な状態変数の最小個数 n は、一般にそのシステムを定義する微分方程式の次数に等しい。システムが伝達関数形式で表されるとき、状態変数の最小個数は伝達関数を適切に約分したときの分母の次数に等しい。状態空間実現(state space realization)を伝達関数形式に変換することで、システムについての内部情報を失う可能性があるが、状態空間実現では不安定なはずなのに安定しているシステムを説明できることがある。電気回路では、状態変数の数は回路内のエネルギー蓄積部品(コンデンサやコイル)の個数と同じであることが多い(常にそうとは限らない)。
p 個の入力変数、q 個の出力変数、n 個の状態変数の状態空間表現の一般形は次のようになる。
\dot{\mathbf{x(t) = A(t) \mathbf{x}(t) + B(t) \mathbf{u}(t)
\mathbf{y}(t) = C(t) \mathbf{x}(t) + D(t) \mathbf{u}(t)}
ここで、
n \times n,
\operatorname{dim}[B(\cdot)] = n \times p,
\operatorname{dim}[C(\cdot)] = q \times n,
\operatorname{dim}[D(\cdot)] = q \times p,
\dot{\mathbf{x(t) := {d\mathbf{x}(t) \over dt}.
}
x(\cdot) を「状態ベクトル」、y(\cdot) を「出力ベクトル」、u(\cdot) を「入力(または制御)ベクトル」、A(\cdot) を「状態行列」、B(\cdot) を「入力行列」、C(\cdot) を「出力行列」、D(\cdot) を「直達行列」と呼ぶ。単純化するため、D(\cdot) は零行列とされることが多い。すなわち、システムには直達項(feedthrough term)が無いものとして扱う。なお、この一般形式では全ての行列は時変とみなされ、その要素は時と共に変化するものとされている。時変数 t は連続的(t \in \mathbb{R})でも離散的(t \in \mathbb{Z})でもよい。後者の場合は時変数を k で表すことが多い。時変か時不変か、連続か離散かによって、状態空間モデルの表現は以下のように変化する。
システムのさまざまな特性(可制御性、可観測性、安定性)は、行列 A、B、CとDに決められる。
連続時不変状態空間モデルの伝達関数は、次のように導出できる。
まず、次の式
のラプラス変換を求める。
次に \mathbf{X}(s) に着目すると次のように変形できる。
B\mathbf{U}(s)
\mathbf{X}(s) = (s\mathbf{I} - A)^{-1}B\mathbf{U}(s)
これを使って、出力方程式の \mathbf{X}(s) を置き換える。
C\mathbf{X}(s) + D\mathbf{U}(s) であるから、
\mathbf{Y}(s) = C((s\mathbf{I} - A)^{-1}B\mathbf{U}(s)) + D\mathbf{U}(s)
となる。伝達関数 \mathbf{G}(s) はシステムの出力と入力の比であるから、次のようになる。
従って、上で求めた \mathbf{Y}(s) で置き換えれば \mathbf{U}(s) が約分され、次の式が得られる。
式の中には、\mathrm{det}(s\mathbf{I} - A)がsI - A の行列式であり、\mathrm{adj}(s\mathbf{I} - A)がsI - Aの余因子行列である。
\mathbf{G}(s) は明らかに q \timesp の次元を持ち、全体で qp 個の要素から成る。従って、個々の入力に対して q 個の伝達関数があり、それぞれが個々の出力に対応している。そのため、複数入力/複数出力システムでは状態空間表現の方が好まれる。
なお、\mathrm{det}(s\mathbf{I} - A)は特性多項式と呼ばれる。その多項式の根(固有値)から、システムの伝達関数の極が得られる。それらの極を使って、そのシステムの安定性を解析できる。\textbf{G}(s) の分子にあるゼロも同様に、システムが最小位相かどうかの判定に使うことができる。
(s\mathbf{I} - A)^{-1}を計算するため、下記のアルゴリズムがある。
\frac{\mathrm{adj}(s\mathbf{I} - A)}{\mathrm{det}(s\mathbf{I} - A)}\\
&=\frac{\sum_{k=0}^{n-1}\mathbf{Q}_ks^k}{s^n+a_{n-1}s^{n-1}+\cdots+a_1s+a_0}
\end{align}
その中には、
\mathbf{I}
\begin{align}
a_k&=\frac{1}{k}\mathrm{tr}\mathbf{Q}_{k-1}\\
&=-\frac{1}{n-k}\mathrm{tr}(\mathbf{AQ}_k)=-\frac{1}{n-k}\mathrm{tr}(\mathbf{Q}_k\mathbf{A})
\end{align}
\mathbf{Q}_{k-1}=\mathbf{Q}_{k}\mathbf{A}+a_k\mathbf{I}=\mathbf{A}\mathbf{Q}_{k}+a_k\mathbf{I}\qquad\qquad (k=n-1,n-2,\cdots,2,1)
a_0=-\frac{1}{n}\mathrm{tr}(\mathbf{AQ}_0)=-\frac{1}{n}\mathrm{tr}(\mathbf{Q}_0\mathbf{A})
最後の等式は、前の演算の精度を検査することができる。
プロパーな伝達関数(「厳密にプロパー」ではない)の実現も容易に得られる。その場合伝達関数を、厳密にプロパーな部分と定数部分という2つの部分に分割するというトリックを用いる。
厳密にプロパーな伝達関数は上述した方法で正準状態空間実現に変換できる。定数の状態空間実現が \textbf{y}(t) = \textbf{G}(\infty)\textbf{u}(t) であることは明らかである。以上から、行列 A, B, C の状態空間実現は厳密にプロパーな部分から得られ、行列 D は定数部分から得られる。
もう少し判りやすくするため、例を挙げて説明する。
\frac{s^{2} + 3s + 3}{s^{2} + 2s + 1}
= \frac{s + 2}{s^{2} + 2s + 1} + 1
この伝達関数から、次の可制御実現が得られる。
\dot{\textbf{x(t) = \begin{bmatrix}
-2& -1\\
1&      0\\
\end{bmatrix}\textbf{x}(t) +
\begin{bmatrix} 1\\ 0\end{bmatrix}\textbf{u}(t)}
出力が入力に直接依存している点に注意されたい。これは伝達関数の \textbf{G}(\infty) 定数部分によるものである。
従って、状態の可制御性(controllability)条件は、許容範囲内の入力で、ある有限の時間をかければ状態をある初期値から特定の値へと変化させることが可能であることを暗に示している。連続時不変状態空間モデルが制御可能(controllable)であるとは、次が成り立つ場合である。
可観測性(observability)とは、システムの外部出力を観測することでシステムの内部状態を推測可能かどうかの尺度である。システムの可観測性と可制御性は数学的な双対である。
連続時不変状態空間モデルが観測可能(observable)であるとは、次が成り立つ場合である。
なお、Rankとは行列内の線形独立な列の数である。
厳密にプロパー(strictly proper)な伝達関数は、次のようにして容易に状態空間に変換可能である。
伝達関数を展開して分子と分母の全ての係数を明らかにする。これは、次のような形式になる。
これらの係数を以下のように直接に状態空間モデルに挿入できる。
\dot{\textbf{x(t) = \begin{bmatrix}
-d_{1}& -d_{2}& -d_{3}& -d_{4}\\
1&      0&      0&      0\\
0&      1&      0&      0\\
0&      0&      1&      0
\end{bmatrix}\textbf{x}(t) +
\begin{bmatrix} 1\\ 0\\ 0\\ 0\\ \end{bmatrix}\textbf{u}(t)
\textbf{y}(t) = \begin{bmatrix} n_{1}& n_{2}& n_{3}& n_{4} \end{bmatrix}\textbf{x}(t)
}
この状態空間実現を可制御正準形式(controllable canonical form)と呼ぶ。「可制御」とされるのは、得られるモデルが可制御であることが保証されているためである。
伝達関数の係数を使って、次のような正準形式も構築可能である。
\dot{\textbf{x(t) = \begin{bmatrix}
-d_{1}&   1&  0&  0\\
-d_{2}&   0&  1&  0\\
-d_{3}&   0&  0&  1\\
-d_{4}&   0&  0&  0
\end{bmatrix}\textbf{x}(t) +
\begin{bmatrix} n_{1}\\ n_{2}\\ n_{3}\\ n_{4} \end{bmatrix}\textbf{u}(t)
\textbf{y}(t) = \begin{bmatrix} 1& 0& 0& 0 \end{bmatrix}\textbf{x}(t)
}
この状態空間実現を可観測正準形式(observable canonical form)と呼ぶ。「可観測」とされるのは、得られるモデルが可観測であることが保証されているためである。
安定性については、外部的な安定に関するBIBO安定性があり、内部的な安定に関するリアプノフ安定性と漸近安定性など平衡状態の安定性もある。非線形システムの平衡状態は唯一ではないが、線形システムの状態行列A(t)が可逆的であるとき平衡状態が\mathbf{0}しかない。
BIBO安定性はシステムの零状態応答を着目し、平衡状態の安定性はシステムの零入力応答を着目する。なお、リアプノフ安定性は、力学系の安定性理論の基礎である。安定性の判定には、状態行列Aとの密接な関係がある。
BIBO安定性は、入力は有界するとき出力は必ず有界であること。これは、不安定な極がゼロによって打ち消される場合と考えられる。
システムをプロパーな伝達関数\mathrm{G}(s)=\mathrm{det}(s\mathbf{I}-A)としてモデル化するとき、BIBO安定の必要十分条件は、システムの極が全部複素平面の左平面になければならないこと、または極が全部負の実部を持つこと。
状態空間の原点はリアプノフ安定の平衡状態である上に、次を満たす\delta(t_0)>0が存在すれば、状態空間の原点は時刻t_0の漸近安定状態という。
\delta(t_0)はt_0と関係ないとき、状態空間の原点は一様漸近安定状態という。
LTIシステムが漸近安定する必要十分条件は、システムの固有値(Aの固有値)がすべて負の実部を持つ。
漸近安定のシステムは必ずBIBO安定する。
システムが可制御性または可観測性持たないとき、伝達関数の極が状態行列Aのスペクトル(固有値の集)の真部分集合であるため、BIBO安定は必ず漸近安定ではない。でも、
LTIシステムには可制御性と可観測性が同時にあるとき、以下の命題が等価である。
システムがBIBO安定する。
システムが漸近安定する。
伝達関数の極が負の実部を持つ。
システムの固有値(Aの固有値)が負の実部を持つ。
典型的なフィードバックは、出力に行列 K をかけたものをシステムの入力とする。
system: \mathbf{u}(t) = K \mathbf{y}(t)
K 内の値には制限はないので、負の値することで容易にネガティブ・フィードバック(負帰還)となる。負の符号は単に表記上の問題であって、式にそれが現われなくとも最終的な結果には何の影響もない。
\dot{\mathbf{x(t) = A \mathbf{x}(t) + B \mathbf{u}(t)
\mathbf{y}(t) = C \mathbf{x}(t) + D \mathbf{u}(t)
}
この式の入力をフィードバックに置き換えると次の式になる。
\dot{\mathbf{x(t) = A \mathbf{x}(t) + B K \mathbf{y}(t)
\mathbf{y}(t) = C \mathbf{x}(t) + D K \mathbf{y}(t)
}
出力方程式を \mathbf{y}(t) について解き、その結果を状態方程式に当てはめると次のようになる。
\dot{\mathbf{x(t) = \left(A + B K \left(I - D K\right)^{-1} C \right) \mathbf{x}(t)
\mathbf{y}(t) = \left(I - D K\right)^{-1} C \mathbf{x}(t)
}
この場合の利点は、\left(A + B K \left(I - D K\right)^{-1} C \right) の固有値分解を使って K を適切に設定することで A の固有値を制御できる点である。これは、開ループ系が制御可能であるか、または A の不安定な固有値を K を適切に設定することで安定にできるということを前提としている。
比較的一般的な単純化として、D を除去し、C を単位元にすると、次のような式が得られる。
\dot{\mathbf{x(t) = \left(A + B K \right) \mathbf{x}(t)
\mathbf{y}(t) = \mathbf{x}(t)
}
こうすると、固有値分解は A + B K についてのみ行えばよい。
フィードバックに加えて、入力 r(t) がある場合、\mathbf{u}(t) = -K \mathbf{y}(t) + \mathbf{r}(t) となる。
\dot{\mathbf{x(t) = A \mathbf{x}(t) + B \mathbf{u}(t)
\mathbf{y}(t) = C \mathbf{x}(t) + D \mathbf{u}(t)
}
この式に当てはめると、次のようになる。
\dot{\mathbf{x(t) = A \mathbf{x}(t) - B K \mathbf{y}(t) + B \mathbf{r}(t)
\mathbf{y}(t) = C \mathbf{x}(t) - D K \mathbf{y}(t) + D \mathbf{r}(t)
}
出力方程式を \mathbf{y}(t) について解き、その結果を状態方程式に当てはめると次のようになる。
\dot{\mathbf{x(t) = \left(A - B K \left(I + D K\right)^{-1} C \right) \mathbf{x}(t) + B \left(I -  K \left(I + D K\right)^{-1}D \right) \mathbf{r}(t)
\mathbf{y}(t) = \left(I + D K\right)^{-1} C \mathbf{x}(t) + \left(I + D K\right)^{-1} D \mathbf{r}(t)
}
比較的一般的な単純化として、D を除去すると、次のような式が得られる。
\dot{\mathbf{x(t) = \left(A - B K C \right) \mathbf{x}(t) + B \mathbf{r}(t)
\mathbf{y}(t) = C \mathbf{x}(t)
}
古典的な線形システムとして、一次元の移動する物体を考える。壁にバネで繋がれた物体が水平な平面上を移動する場合、ニュートン力学では次の式で表される。
y(t) は位置、\dot y(t) は速度、\ddot{y}(t) は加速度である。
u(t) は加えられた力である。
k_1 は粘性摩擦係数である。
k_2 はバネ定数である。
m は物体の質量である。
この場合の状態方程式は次のようになる。
\left[ \begin{matrix} \mathbf{\dot{x_1(t) \\ \mathbf{\dot{x_2}(t) \end{matrix} \right] = \left[ \begin{matrix} 0 & 1 \\ -\frac{k_2}{m} & -\frac{k_1}{m} \end{matrix} \right] \left[ \begin{matrix} \mathbf{x_1}(t) \\ \mathbf{x_2}(t) \end{matrix} \right] + \left[ \begin{matrix} 0 \\ \frac{1}{m} \end{matrix} \right] \mathbf{u}(t)
\mathbf{y}(t) = \left[ \begin{matrix} 1 & 0 \end{matrix} \right] \left[ \begin{matrix} \mathbf{x_1}(t) \\ \mathbf{x_2}(t) \end{matrix} \right]
}
ここで、
x_1(t) は物体の位置を表す。
x_2(t) := \dot{x_1}(t) は物体の速度を表す。
\dot{x_2}(t) = \ddot{x_1}(t) は物体の加速度を表す。
出力 \mathbf{y}(t) は物体の位置である。
可制御性を評価すると、次のようになる。
\left[ \begin{matrix} \left[ \begin{matrix} 0 \\ \frac{1}{m} \end{matrix} \right] & \left[ \begin{matrix} 0 & 1 \\ -\frac{k_2}{m} & -\frac{k_1}{m} \end{matrix} \right]   \left[ \begin{matrix} 0 \\ \frac{1}{m} \end{matrix} \right] \end{matrix} \right] = \left[ \begin{matrix} 0 & \frac{1}{m} \\ \frac{1}{m} & \frac{k_1}{m^2} \end{matrix} \right]
したがって、k_1 についても m についてもフルランクである。
可観測性を評価すると、次のようになる。
\left[ \begin{matrix} \left[ \begin{matrix} 1 & 0 \end{matrix} \right] \\ \left[ \begin{matrix} 1 & 0 \end{matrix} \right] \left[ \begin{matrix} 0 & 1 \\ -\frac{k_2}{m} & -\frac{k_1}{m} \end{matrix} \right] \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix} \right]
したがって、フルランクである。以上から、このシステムは制御可能で、かつ観測可能である。
より普遍的な状態空間モデルの形式は次のように表される。
\mathbf{\dot{x(t) = \mathbf{f}(t, x(t), u(t))
\mathbf{y}(t) = \mathbf{h}(t, x(t), u(t))
}
1つ目が状態方程式、2つ目が出力方程式である。f(\cdot,\cdot,\cdot) が状態と入力の線形な組合せなら、前述のような行列で表現できる。関数の引数である u(t) は、入力のないシステムでは省略できる。
古典的な非線形システムとして、力を加えない単純な振り子を考える。
ここで、
\theta(t) は(重力の方向から見た)振り子の角度である。
m は振り子の質量である(先端にのみ質量があると見なす)。
g は重力加速度である。
k は支点における摩擦係数である。
l は振り子の長さ(回転半径)である(質量 m の重心までの距離)。
すると、状態方程式は次のようになる。
x_2(t)
\dot{x_2}(t) = - \frac{g}{l}\sin{x_1}(t) - \frac{k}{m}{x_2}(t)
ここで、
x_1(t):=\theta(t) は、振り子の角度である。
x_2(t) :=\dot{x_1}(t) は、振り子の回転速度である。
\dot{x_2} =\ddot{x_1} は、振り子の回転加速度である。
状態方程式は、次のようにも書き表せる。
システムの平衡/安定点は \dot{x} = 0 のときであり、従って振り子の平衡点は以下が成り立つ場合である。
ここで n は整数である。