状態フィードバック…Homework
[1] ある平衡状態周りの挙動が線形状態方程式
![]()
で表される制御対象に対して、状態フィードバック
![]()
を考えます。ここで、
を入力変数の個数、
を状態変数の個数とするとき、
はサイズ
のゲイン行列です。(2)を(1)に代入して、次式を得ます。
![]()
以上の状況は次図のように図示されます。
図1 状態フィードバックによる閉ループ系
これは、制御対象とコントローラ(状態フィードバック)が閉路を構成することから、閉ループ系と呼ばれます。ここで、興味深いのは、制御対象が不安定であっても(行列
の固有値の一部が複素左半平面にあっても)、状態フィードバックを行って閉ループ系を構成すると、行列
の固有値をすべて複素左半平面に移動させる可能性があることです。どのような条件の下で、どのようにゲイン行列
を決定できるかを検討する問題を状態フィードバックによる安定化問題と言います。
●状態フィードバックゲイン行列
を求めることは、適当な安定行列
を与えて、行列方程式
![]()
を解くことに他なりません。よく学生さんは次のように解きます。
![]()
でも一般には
は正方行列ではないので、そもそも逆行列を考えることができません。
を安定行列とする状態フィードバックが求まる条件の説明は次節で行いますが、ここではその準備として、状態フィードバックゲイン行列
を求める公式を示します。
[2] いま行列
の特性多項式を次式で表します。
![]()
ケーリーハミルトンの定理から次式が成り立ちます。
![]()
これは
のとき、次のように書けます。
![Rendered by QuickLaTeX.com \displaystyle{(8)\quad \begin{array}{l} A_F^2+a_1'A_F+a_2'I_2=0\\ \quad\Downarrow\\ (A-BF)A_F+a_1'(A-BF)+a_2'I_2=0\\ \quad\Downarrow\\ AA_F-BFA_F+a_1'A-a_1'BF+a_2'I_2=0\\ \quad\Downarrow\\ A(A-BF)+a_1'A+a_2'I_2=BFA_F+a_1'BF\\ \quad\Downarrow\\ A^2+a_1'A+a_2'I_2=BF(A_F+a_1'I_2)+ABF\\ \quad\Downarrow\\ A^2+a_1'A+a_2'I_2=\left[\begin{array}{ccc} B &AB \end{array}\right] \left[\begin{array}{ccc} F(A_F+a_1'I_2)\\ F \end{array}\right] \end{array} }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-58bb1c562247a773cc1edf865ae91cad_l3.png)
したがって、1入力系で
が正則ならば、次の公式を得ます。
![]()
同様に、
のとき、次のように書けます。
![Rendered by QuickLaTeX.com \displaystyle{(10)\quad \begin{array}{l} A_F^3+a_1'A_F^2+a_2'A_F+a_3'I_3=0\\ \quad\Downarrow\\ (A-BF)(A_F^2+a_1'A_F+a_2'I_3)+a_3'I_3=0\\ \quad\Downarrow\\ A(A_F^2+a_1'A_F+a_2'I_3)+a_3'I_3\\=BF(A_F^2+a_1'A_F+a_2'I_3)\\ \quad\Downarrow\\ A((A-BF)A_F+a_1'(A-BF)+a_2'I_3)+a_3'I_3\\=BF(A_F^2+a_1'A_F+a_2'I_3)\\ \quad\Downarrow\\ A^2(A-BF)+a_1'A^2+a_2'A+a_3'I_3\\ =BF(A_F^2+a_1'A_F+a_2'I_3)+ABF(A_F+a_1'I_3)\\ \quad\Downarrow\\ A^3+a_1'A^2+a_2'A+a_3'I_3\\ =BF(A_F^2+a_1'A_F+a_2'I_3)+ABF(A_F+a_1'I_3)+A^2BF\\ \quad\Downarrow\\ A^3+a_1'A^2+a_2'A+a_3'I_3\\ =\left[\begin{array}{ccc} B &AB&A^2B \end{array}\right] \left[\begin{array}{ccc} F(A_F^2+a_1'A_F+a_2'I_3)\\ F(A_F+a_1'I_3)\\ F \end{array}\right] \end{array} }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-2e1d5f3518704a7eb5ccf03446662208_l3.png)
したがって、1入力系で
が正則ならば、次の公式を得ます。
![]()
の場合も同様にして、
の特性多項式(7)を
![Rendered by QuickLaTeX.com \displaystyle{(12)\quad %\begin{array}{l} A^n+a'_1A^{n-1}+\cdots+a'_nI_n =\left[\begin{array}{cccc} B & AB &\cdots & A^{n-1}B \end{array}\right] \left[\begin{array}{ccc} X_{n-1}\\ \vdots\\ X_1\\ F \end{array}\right] %\end{array} }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-1a417bf647a9f2f3adebc7f2a80b6017_l3.png)
のように書き換えることができます。ここで、
はサイズ
の適当な行列です。したがって、1入力系で
が正則ならば、(12)の右辺の第2番目の行列の最下段にある
を取りだすことにより、次の公式が得られます。
![Rendered by QuickLaTeX.com \displaystyle{(13)\quad \boxed{\begin{array}{l} F= \left[\begin{array}{cccc} 0 & \cdots & 0 & 1 \end{array}\right] \left[\begin{array}{cccc} B & AB &\cdots & A^{n-1}B \end{array}\right]^{-1}\\ \times (A^n+a'_1A^{n-1}+\cdots+a'_nI_n) \end{array}} }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-fec91a15818dbf1db1e87f86c46972c1_l3.png)
このように、1入力
次系の場合は、
の
個の要素が、
の特性多項式の
個の係数(すなわち
個の固有値)を指定することにより決定されます。ところが
入力系の場合、
の固有値だけでは決まらず、対応する固有ベクトルまで指定する必要があります。このことを以下で調べてみます。
[3] いま、ジョルダン分解
を仮定して
![]()
ここで、
が対角行列の場合、
の固有値
に対応する固有ベクトルを
として
![]()
![]()
これより、もし
が
の固有値と一致しないならば、固有ベクトルの表現式として次式を得ます。
![]()
したがって、状態フィードバックゲイン行列
を求める次の手順が考えられます。
|
1) 2) 3) 次式で
|
この手順は簡潔ですが、1)の制約があること、2)の具体的な手法が不明であることなどの難点があります。状態フィードバックを定める手続きは、ある最適化問題の解として得ることが多く、これについてはあと説明します。
演習 A31…Flipped Classroom
次のコードを実行し、
の固有値を計算し、指定されているものになっていることを確かめよ。
| MATLAB |
|
次のコードを実行し、
の固有値と固有ベクトルを計算し、指定されているものになっていることを確かめよ。
| MATLAB |
|
Note A31 不可制御の例
どのような制御対象に対しても,閉ループ系を安定化する状態フィードバックが求まるわけではありません。たとえば、皆さんは小さいころ棒立て遊びをやった記憶があると思います。不安定なモノを安定化できた楽しい思い出だったと思います。それでは、2本の棒を同時に立てることはできたと思いますか?この状況を次図のように表します。

図 2本の棒立て制御
ここで、2本の棒の長さと質量をそれぞれ
と
とします。また鉛直線からの傾きを
とします。2本の棒は1つの軸に取り付けられており、自由に回転できるとします。この軸を左右に動かして回転トルクを与えるのですが、その結果として働くトルクをここでは
で表します。このとき運動方程式は次式となります。ただし、
。
![]()
これから次の状態方程式を得ます。
![Rendered by QuickLaTeX.com \displaystyle{(2)\quad \begin{equation} \frac{d}{dt} \left[\begin{array}{c} \theta_1\\ \theta_2\\ \dot\theta_1\\ \dot\theta_2\\ \end{array}\right]= \left[\begin{array}{cccc} 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ a_1 & 0 & 0 & 0\\ 0 & a_2 & 0 & 0\\ \end{array}\right] \left[\begin{array}{c} \theta_1\\ \theta_2\\ \dot\theta_1\\ \dot\theta_2\\ \end{array}\right]+ \left[\begin{array}{c} 0\\ 0\\ b_1\\ b_2\\ \end{array}\right]\tau }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-3a3fa72bbe74de9a255bf87116b40789_l3.png)
ただし、
、
。
それでは、これを安定化する状態フィードバックゲインを求めてみます。上述の公式
![]()
を参照すれば、次の行列が正則である必要があります。
![Rendered by QuickLaTeX.com \displaystyle{(4)\quad \begin{equation} \left[\begin{array}{cccc} B & AB & A^2B & A^3B \end{array}\right] = \left[\begin{array}{cccc} 0 &b_1 &0 &a_1b_1\\ 0 &b_2 &0 &a_2b_2\\ b_1&0 &a_1b_1 &0\\ b_2&0 &a_2b_2 &0\\ \end{array}\right] }](https://cacsd1.sakura.ne.jp/wp/wp-content/ql-cache/quicklatex.com-c96e667021ae4a5a4f1f35e8b5fc078e_l3.png)
これは2つの棒の長さ違うときは正則となり、閉ループ系を安定化する状態フィードバックが求まります。ところが2つの棒が同じで、
となる場合は、第1行と第2行が同じとなり、第3行と第4行も同じとなり、正則性は失われます。これから全く同じ2本の棒の棒立ては成功しないと考えられます。これは「二兎を追うものは一兎も得ず」のことわざ通りですね。