固有ベクトル設定問題

[0] 次の2入力2次系

\displaystyle{(1)\quad \dot{x}= \underbrace{ \left[\begin{array}{cc} 0 & 0\\ 0 & -1 \end{array}\right] }_{A} x+ \underbrace{ \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] }_{B} u }

に対して2つの異なる状態フィードバック

\displaystyle{(2)\quad %\begin{array}{l} u=- \underbrace{ \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] }_{F_1} x,\quad u=- \underbrace{ \left[\begin{array}{cc} 1 & 0\\ 1 & 2 \end{array}\right] }_{F_2} x %\end{array} }

による閉ループ系は、それぞれ

\displaystyle{(3)\quad \dot{x}= \underbrace{ \left[\begin{array}{cc} -2 & 0\\ 0 & -3 \end{array}\right] }_{A-BF_1} x,\quad \dot{x}= \underbrace{ \left[\begin{array}{cc} -2 & 2\\ 0 & -3 \end{array}\right] }_{A-BF_2} x }

となって、同じ固有値-2,-3を持ちます。このように多入力系では閉ループ系の固有値を指定しても状態フィードバックは一意に定まりません。これは固有ベクトルの指定に任意性があるからです(ちなみに1入力系では一意に定まります)。そこで、上の2つの閉ループ系の固有ベクトルを求めてみると

\displaystyle{(4)\quad V_1=\left[\begin{array}{cc} 1 & 0\\ 0 & 1 \end{array}\right],\quad V_2=\left[\begin{array}{cc} 1 & 1\\ 0 & 1 \end{array}\right] }

また応答は次式となります。

\displaystyle{(5)\quad \dot{x}= \underbrace{ \left[\begin{array}{cc} e^{-2t} & 0\\ 0 & e^{-3t} \end{array}\right] }_{\exp((A-BF_1)t)=V_1\exp(\Lambda t)V_1^{-1}} x(0) }
\displaystyle{(6)\quad \dot{x}= \underbrace{ \left[\begin{array}{cc} 1 & 1\\ 0 & 1 \end{array}\right] \left[\begin{array}{cc} e^{-2t} & 0\\ 0 & e^{-3t} \end{array}\right] \left[\begin{array}{cc} 1 & -1\\ 0 & 1 \end{array}\right] }_{\exp((A-BF_2)t)=V_2\exp(\Lambda t)V_2^{-1}} x(0) }

明らかに(5)ではモードe^{-2t}e^{-3t}が分離していますが、(6)ではそれらがミックスされています。このように、多入力系の場合の状態フィードバックの設計は、モードをどのように分布させるかがポイントとなります。

[1] 実固有値の場合

\displaystyle{(7)\quad (A-BF)v=\lambda v \Rightarrow \underbrace{ \left[\begin{array}{cc} \lambda I-A & B \end{array}\right] }_{G(\lambda)} \left[\begin{array}{c} v\\ \xi \end{array}\right] =0 \quad(\xi=Fv) }

より、v\xiは、サイズn\times(n+m)の行列G(\lambda)の零化空間の基底行列に対して、適当なm次元ベクトル\deltaを用いて

\displaystyle{(8)\quad G(\lambda) \left[\begin{array}{c} N(\lambda)\\ M(\lambda)\\ \end{array}\right] =0 \Rightarrow \left[\begin{array}{c} v\\ \xi \end{array}\right]= \left[\begin{array}{c} N(\lambda)\\ M(\lambda)\\ \end{array}\right]\delta }

のように表されます。そこで望ましい固有ベクトルvを与えて

\displaystyle{(9)\quad N(\lambda)\delta=v }

を解いて\deltaを求めます。ただし、望ましい固有ベクトルvのすべての成分を指定できるわけではないので

\displaystyle{(10)\quad \tilde{R}N(\lambda)\delta=\tilde{R}v =\left[\begin{array}{c} \tilde{v}^s\\ \tilde{v}^u\\ \end{array}\right] \Rightarrow \left[\begin{array}{cc} I_q & 0 \end{array}\right] \tilde{R}N(\lambda)\times\delta=\tilde{v}^s }

の最小2乗解として\delta=\delta^*を定めます。ここで、セレクタ行列\tilde{R}により、望ましい固有ベクトルvの指定されたq個の成分だけを集めた\tilde{v}^sが得られるとしています。

このとき、割当可能なv^*\xi^*は次式で与えられます。

\displaystyle{(11)\quad \left[\begin{array}{c} v^*\\ \xi^* \end{array}\right]= \left[\begin{array}{c} N(\lambda)\\ M(\lambda)\\ \end{array}\right]\delta^* }

●もしA-\lambda I_nが正則ならば

\displaystyle{(12)\quad (\lambda I_n-A)\underbrace{(\lambda I_n-A)^{-1}B}_{N(\lambda)}+B\underbrace{(-I_m)}_{M(\lambda)}=0 }

より、N(\lambda)M(\lambda)が特定できます。(8)より

\displaystyle{(13)\quad \begin{array}{l} v=(\lambda I_n-A)^{-1}B\delta\\ \xi=-\delta \end{array} \quad\Rightarrow\quad \boxed{v=(A-\lambda I_n)^{-1}B\xi} }

となって、指定した固有ベクトルvを近似する\xiを直接求めることができます。

●具体的に、(1)に対して、固有値-2,-3を持たせる状態フィードバックを、対応する固有ベクトルが(4)のV_1となるように求めてみます。

\displaystyle{(14)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{cc} 0-(-2) & 0\\ 0 & -1-(-2) \end{array}\right]^{-1} \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] }_{(A-\lambda I_n)^{-1}B} \xi_1 =\underbrace{ \left[\begin{array}{c} 1\\ 0 \end{array}\right]}_{V_1(:,1)}\\ \Rightarrow \xi_1= \left[\begin{array}{cc} 1/2 & 1/2\\ 1 & -1 \end{array}\right]^{-1} \left[\begin{array}{c} 1\\ 0 \end{array}\right] = \left[\begin{array}{cc} 1 & 1/2\\ 1 & -1/2 \end{array}\right] \left[\begin{array}{c} 1\\ 0 \end{array}\right] = \left[\begin{array}{cc} 1\\ 1 \end{array}\right] \end{array} }

\displaystyle{(15)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{cc} 0-(-3) & 0\\ 0 & -1-(-3) \end{array}\right]^{-1} \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] }_{(A-\lambda I_n)^{-1}B} \xi_2 =\underbrace{ \left[\begin{array}{c} 0\\ 1 \end{array}\right]}_{V_1(:,2)}\\ \Rightarrow \xi_2= \left[\begin{array}{cc} 1/3 & 1/3\\ 1/2 & -1/2 \end{array}\right]^{-1} \left[\begin{array}{c} 0\\ 1 \end{array}\right] = \left[\begin{array}{cc} 3/2 & 1\\ 3/2 & -1 \end{array}\right] \left[\begin{array}{c} 0\\ 1 \end{array}\right] = \left[\begin{array}{cc} 1\\ -1 \end{array}\right] \end{array} }

状態フィードバックゲインF

\displaystyle{(16)\quad \left[\begin{array}{cc} \xi_1 & \xi_2 \end{array}\right] =FV_1 \quad\Rightarrow\quad  F= \left[\begin{array}{cc} \xi_1 & \xi_2 \end{array}\right]V_1^{-1} = \left[\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right] }

[2] 複素共役固有値の場合

\displaystyle{(17)\quad \begin{array}{l} (A-BF)(v_R\pm jv_I)=(\lambda_R\pm j\lambda_I)(v_R\pm jv_I)\\ \Rightarrow (A-BF)v_R=\lambda_Rv_R-\lambda_Iv_I,\ (A-BF)v_I =\lambda_Rv_I+\lambda_Iv_R \\ \Rightarrow \underbrace{ \left[\begin{array}{ccc} \lambda_R I-A & \lambda_I I & B \end{array}\right] }_{G(\lambda)} \left[\begin{array}{cc} v_R & v_I\\ -v_I & v_R\\ \xi_R & \xi_I \end{array}\right] =0 \quad(\xi_R=Fv_R,\xi_I=Fv_I) \end{array} }

より、v_R,v_I\xi_R,\xi_Iは、サイズn\times(2n+m)の行列G(\lambda)の零化空間の基底行列に対して、適当なm次元ベクトル\delta_R,\delta_Iを用いて

\displaystyle{(18)\quad G(\lambda) \left[\begin{array}{c} N(\lambda)\\ P(\lambda)\\ M(\lambda) \end{array}\right] =0 \Rightarrow \left[\begin{array}{cc} v_R & v_I\\ -v_I & v_R\\ \xi_R & \xi_I \end{array}\right]= \left[\begin{array}{c} N(\lambda)\\ P(\lambda)\\ M(\lambda) \end{array}\right] \left[\begin{array}{cc} \delta_R & \delta_I \end{array}\right] }

のように表されます。そこで望ましいv_R,v_Iを与えて

\displaystyle{(19)\quad \left[\begin{array}{c} v_R \\ v_I \end{array}\right]= \underbrace{ \left[\begin{array}{cc} N(\lambda) \\ -P(\lambda) \end{array}\right] }_{\alpha} \delta_R= \underbrace{ \left[\begin{array}{cc} P(\lambda)\\ N(\lambda) \end{array}\right] }_{\beta} \delta_I }

の解として\delta_R,\delta_Iを求めますが、\alpha\betaが独立ではないので、その求解には工夫が必要です。ここでは、Edwards and Spurgeon に従って、その手順を述べます。

まず、行列\alphaに対して、\alpha^Tの零化空間の基底行列をK_\alphaで表すと、\alpha^TK_\alpha=0よりK_\alpha^T\alpha=0を得て、K_\alpha^Tの零化空間の基底行列は\alpha、すなわち{\cal N}(K_\alpha^T)={\cal R}(\alpha)となることに注意します。同様に行列\betaに対して、\beta^Tの零化空間の基底行列をK_\betaで表すと、K_\beta^Tの零化空間の基底行列は\beta、すなわち{\cal N}(K_\beta^T)={\cal R}(\beta)となります。そこで、

\displaystyle{(20)\quad \underbrace{ \left[\begin{array}{c} K_\alpha^T\\ K_\beta^T \end{array}\right] }_{\gamma^T} K_\gamma=0 \Rightarrow {\cal R}(K_\gamma)\subset {\cal N}(K_\alpha^T)\cap {\cal N}(K_\beta^T)={\cal R}(\alpha)\cap {\cal R}(\beta) }

に注意して、\gamma=[K_\alpha,K_\beta]の零化空間の基底行列K_\gammaを用いて、望ましいv_R,v_Iを与えて

\displaystyle{(21)\quad \left[\begin{array}{c} v_R \\ v_I \end{array}\right]= K_\gamma \delta }

を解いて\deltaを求めます。ただし、望ましいv_R,v_Iのすべての成分を指定できるわけではないので

\displaystyle{(22)\quad \tilde{R}K_\gamma\delta=\tilde{R}v =\left[\begin{array}{c} \tilde{v}_R^s\\ \tilde{v}_I^s\\ \tilde{v}_R^u\\ \tilde{v}_I^u\\ \end{array}\right] \Rightarrow \left[\begin{array}{cc} I_{2q} & 0 \end{array}\right] \tilde{R}K_\gamma\times\delta= \left[\begin{array}{c} \tilde{v}_R^s\\ \tilde{v}_I^s\\ \end{array}\right] }

の最小2乗解として\delta=\delta^*を定めます。ここで、セレクター行列\tilde{R}により、望ましいv_R,v_Iの指定された2q個の成分だけを集めた\tilde{v}_R^s,\tilde{v}_I^sが得られるとしています。

このとき、割当可能なv_R^*,v_I^*は次式で与えられます。

\displaystyle{(23)\quad \left[\begin{array}{c} v_R^*\\ v_I^* \end{array}\right]= K_\gamma\delta^* }

これは(14)の\delta_R^*,\delta_I^*を、それぞれ\alpha^{\dag}K_\gamma\delta^*\beta^{\dag}K_\gamma\delta^*で定めれば(\dagは疑似逆行列を表す)、対応する\xi_R^*,\xi_I^*は次式で与えられます。

\displaystyle{(24)\quad \left[\begin{array}{c} \xi_R^*\\ \xi_I^* \end{array}\right]= \left[\begin{array}{c} M(\lambda)\alpha^{\dag}K_\gamma\delta^*\\ M(\lambda)\beta^{\dag}K_\gamma\delta^*\\ \end{array}\right] }

[3] 複素共役固有値の場合(別のアプローチ)

(17)は次式のようにも表すことができます。

\displaystyle{(25)\quad \begin{array}{l} (A-BF)(v_R\pm jv_I)=(\lambda_R\pm j\lambda_I)(v_R\pm jv_I)\\ \Rightarrow (A-BF)v_R=\lambda_Rv_R-\lambda_Iv_I,\ (A-BF)v_I =\lambda_Rv_I+\lambda_Iv_R \\ \Rightarrow %\underbrace{ \left[\begin{array}{cccc} \lambda_R I-A & -\lambda_I I & B & 0\\ \lambda_I I & \lambda_R I-A & 0 & B\\ \end{array}\right] %}_{G(\lambda)} \left[\begin{array}{cc} v_R \\ v_I \\ \xi_R \\  \xi_I \end{array}\right] =0 \quad(\xi_R=Fv_R,\xi_I=Fv_I) \end{array} }

したがって、[2]において

\displaystyle{(26)\quad \begin{array}{l} G(\lambda)\leftarrow \left[\begin{array}{cccc} \lambda_R I-A & -\lambda_I I & B & 0\\ \lambda_I I & \lambda_R I-A & 0 & B \end{array}\right]\\ v\leftarrow\left[\begin{array}{c} v_R\\ v_I \end{array}\right],\  \xi\leftarrow\left[\begin{array}{c} \xi_R\\ \xi_I \end{array}\right],\  \delta\leftarrow\left[\begin{array}{c} \delta_R\\ \delta_I \end{array}\right] \end{array} }

と置き換えて同様の議論ができそうです([2]の議論と等価であるかは検討中です)。

●もしA-\lambda_R I_nが正則ならば、公式

\displaystyle{(27)\quad \begin{array}{l} \left[\begin{array}{cc} M_{11} & M_{12} \\ M_{21} & M_{22} \end{array}\right]^{-1} = \left[\begin{array}{cc} \Phi^{-1} & -\Phi^{-1}M_{12}M_{22}^{-1} \\ -M_{22}^{-1}M_{21}\Phi^{-1} & M_{22}^{-1}+M_{22}^{-1}M_{21}\Phi^{-1}M_{12}M_{22}^{-1} \end{array}\right]\\ \Phi\stackrel{\rm def}{=}M_{11}-M_{12}M_{22}^{-1}M_{21}\ (M_{22}\ {\rm nonsingular}) \end{array} }

を参照すると

\displaystyle{(28)\quad \left[\begin{array}{cc} \lambda_R I-A & -\lambda_I I\\ \lambda_I I & \lambda_R I-A  \end{array}\right]^{-1} }

を計算できます。そこで

\displaystyle{(29)\quad \begin{array}{l} \left[\begin{array}{cc} \lambda_R I-A & -\lambda_I I\\ \lambda_I I & \lambda_R I-A  \end{array}\right] \underbrace{ \left[\begin{array}{cc} \lambda_R I-A & -\lambda_I I\\ \lambda_I I & \lambda_R I-A  \end{array}\right]^{-1} \left[\begin{array}{cc} B & 0\\ 0 & B \end{array}\right] }_{N(\lambda)}\\ + \left[\begin{array}{cc} B & 0\\ 0 & B \end{array}\right] \underbrace{(-I_{2m})}_{M(\lambda)}=0 \end{array} }

より、N(\lambda)M(\lambda)が特定できます。(8)に相当する式より

\displaystyle{(30)\quad \boxed{ \left[\begin{array}{c} v_R\\ v_I \end{array}\right] = \left[\begin{array}{cc} A-\lambda_R I & \lambda_I I\\ -\lambda_I I & A-\lambda_R I  \end{array}\right]^{-1} \left[\begin{array}{cc} B & 0\\ 0 & B \end{array}\right] \left[\begin{array}{c} \xi_R\\ \xi_I \end{array}\right]} }

となって、指定した固有ベクトルの実部v_Rと虚部v_Iを近似する\xi_R\xi_Iを直接求めることができます。

●具体的に、(1)に対して、固有値-1\pm jを持たせる状態フィードバックを、対応する固有ベクトルが

\displaystyle{(31)\quad \underbrace{ \left[\begin{array}{c} 1\\ 0 \end{array}\right]}_{v_R} \pm j \underbrace{ \left[\begin{array}{c} 0\\ 1 \end{array}\right]}_{v_I} }

となるように求めてみます。

\displaystyle{(32)\quad \begin{array}{l} \underbrace{ \left[\begin{array}{cccc} 0-(-1) & 0 & 1 & 0\\ 0 & -1-(-1) & 0 & 1\\ -1 & 0 & 0-(-1) & 0\\ 0 & -1 & 0 & -1-(-1) \end{array}\right]^{-1} }_{\left[\begin{array}{cc} A-\lambda_R I & \lambda_I I\\ -\lambda_I I & A-\lambda_R I  \end{array}\right]^{-1}}\\ \times\underbrace{ \left[\begin{array}{cccc} 1 & 1 & 0 & 0\\ 1 & -1& 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & 1 & -1 \end{array}\right] }_{\left[\begin{array}{cc} B & 0\\ 0 & B \end{array}\right]} \left[\begin{array}{c} \xi_R\\ \xi_I \end{array}\right] =\underbrace{ \left[\begin{array}{c} 1\\ 0\\ 0\\ 1 \end{array}\right]}_{\left[\begin{array}{c} v_R\\ v_I \end{array}\right]}\\ \Rightarrow \left[\begin{array}{c} \xi_R\\ \xi_I \end{array}\right]= \left[\begin{array}{cccc} 1/2 & 1/2 & -1/2 & -1/2\\ 0 & 0 & -1 & 1\\ 1/2 & 1/2 & 1/2 & 1/2\\ 1 & -1& 0 & 0 \end{array}\right]^{-1} \left[\begin{array}{c} 1\\ 0\\ 0\\ 1 \end{array}\right]= \left[\begin{array}{c} 1\\ 0\\ -1/2\\ -1/2 \end{array}\right] \end{array} }

状態フィードバックゲインF

\displaystyle{(33)\quad \begin{array}{l} \left[\begin{array}{cc} \xi_R & \xi_I \end{array}\right] =F \left[\begin{array}{cc} v_R & v_I \end{array}\right]\\ \Rightarrow F= \left[\begin{array}{cc} \xi_R & \xi_I \end{array}\right] \left[\begin{array}{cc} v_R & v_I \end{array}\right]^{-1} = \left[\begin{array}{cc} 1 & -1/2\\ 0 & -1/2 \end{array}\right] \end{array} }

演習C42…Flipped Classroom
1^\circ (16)と(33)の計算を行う次のプログラムを実行せよ。

MATLAB
%test_vplace2.m
%-----
 clear all, close all
 A=[0 0;
    0 -1];
 B=[1 1;
    1 -1];
%-----
 lambda=[-2 -3];
 nocomp=0;
%固有ベクトルの要素の指定の有無 (1:指定、0:任意)
 specpos=[ 1  1; 
           1  1];       
%固有ベクトルの要素の値 (0:零指定、1:非零指定、-1:非零任意)       
 specent=[ 1  0;
           0  1];
 F=vplace2(A,B,lambda,nocomp,specpos,specent)
 [V,pl]=eig(A-B*F)
 VV=V*diag([1/V(2,1),1/V(1,2)])
 disp("---")
%-----
 lambda=[-1 1];
 nocomp=1;
%固有ベクトルの要素の指定の有無 (1:指定、0:任意)
 specpos=[ 1  1; 
           1  1];        
%固有ベクトルの要素の値 (0:零指定、1:非零指定、-1:非零任意)       
 specent=[ 1  0;
           0  1];        
 F=vplace2(A,B,lambda,nocomp,specpos,specent) 
 [V,pl]=eig(A-B*F) 
 VV=V*diag([1/V(1,1),1/V(1,2)])

2^\circ 1入力系の場合は、specposとspecentは乱数で与えてよい、なぜか?

MATLAB
%test_vplace2a.m
%-----
 clear all, close all
 A=[0 1;
    0 0];
 B=[0;
    1];
%-----
%lambda=[-1 -1];
 lambda=[-2 -3];  
 nocomp=0;
%固有ベクトルの要素の指定の有無 (1:指定、0:任意)
 specpos=rand(2,2)
%固有ベクトルの要素の値 (0:零指定、1:非零指定、-1:非零任意)       
 specent=rand(2,2) 
 F=vplace2(A,B,lambda,nocomp,specpos,specent) 
 [V,pl]=eig(A-B*F)
%-----
 lambda=[-1 1];
 nocomp=1;
%固有ベクトルの要素の指定の有無 (1:指定、0:任意)
 specpos=rand(2,2)
%固有ベクトルの要素の値 (0:零指定、1:非零指定、-1:非零任意)       
 specent=rand(2,2) 
 F=vplace2(A,B,lambda,nocomp,specpos,specent) 
 [V,pl]=eig(A-B*F) 
%-----
%eof

Note C42 固有ベクトル設定プログラム
これはEdwards and Spurgeonによるプログラムspvplを基に作成できます。