状態FB用LMI(変数変換)

状態FB用LMI(変数変換)…Homework

[0] n次系\dot{x}=Ax+Buに対する状態フィードバックu=-Fxによる閉ループ系\dot{x}=(A-BF)xを安定化するように状態フィードバックゲインFを求める手順を復習しておきます。

いま、A_F=A-BFのジョルダン分解V\Lambda V^{-1}を仮定して

\displaystyle{(1)\quad A-BF=\underbrace{V\Lambda V^{-1}}_{A_F} \Rightarrow AV-V\Lambda=B\underbrace{FV}_{G} }

ここで、\Lambdaが対角行列の場合、A_Fの固有値\lambda_1',\cdots,\lambda_n'に対応する固有ベクトルをv_1,\cdots,v_nとして

\displaystyle{(2)\quad A \underbrace{ \left[\begin{array}{ccc} v_1&\cdots&v_n \end{array}\right] }_{V} - \underbrace{ \left[\begin{array}{ccc} v_1&\cdots&v_n \end{array}\right] }_{V} \underbrace{ {\rm diag}\{\lambda_1',\cdots,\lambda_m'\} }_{\Lambda}}

\displaystyle{= \left[\begin{array}{ccc} (A-\lambda_1'I_n)v_1&\cdots&(A-\lambda_n'I_n)v_n \end{array}\right] =B \underbrace{ \left[\begin{array}{ccc} g_1&\cdots&g_n \end{array}\right] }_{G} }

これより、もし\lambda_1',\cdots,\lambda_n'Aの固有値と一致しないならば、固有ベクトルの表現式として次式を得ます。

\displaystyle{(3)\quad \underbrace{ \left[\begin{array}{ccc} v_1&\cdots&v_n \end{array}\right] }_{V}= \left[\begin{array}{ccc} (A-\lambda_1'I_n)^{-1}Bg_1&\cdots&(A-\lambda_n'I_n)^{-1}Bg_n \end{array}\right] }

したがって、状態フィードバックゲイン行列Fを求める次の手順が考えられます。

1) A_Fの固有値\lambda_1',\cdots,\lambda_n'Aの固有値とは異なるように指定する。

2) A_Fの固有ベクトルv_1,\cdots,v_nを決める自由度g_1,\cdots,g_nを、(3)のVが正則になるように与える。

3) 次式で Fを求める。

\displaystyle{(4)\quad \boxed{F=GV^{-1}} }

以上の方法は、複素左半平面{\rm\bf LHP}内にある望ましい固有値

\displaystyle{(5)\quad \{\lambda_1',\cdots,\lambda_n'\}\subset{\rm\bf LHP} }

をピンポイントで指定しています。これに対して、以下では、複素左半平面内に望ましい領域を指定して、状態フィードバックを設計する方法について述べます。

[1] n次系\dot{x}=Ax+Buに対する状態フィードバックu=-Fxによる閉ループ系\dot{x}=(A-BF)xにおいて、

\displaystyle{(6)\quad \lambda(A-BF)\subset{\rm\bf LHP}}

となるように状態フィードバックゲインFを求める問題を考えます。

\lambda(A)\subset{\rm\bf LHP}となるLMI条件(Y-LMIによる)は、次の通りでした。

\displaystyle{(7) \begin{array}{lll} &&\lambda(A)\subset{\rm\bf LHP}=\{s=x+jy\in{\rm\bf C}: s+s^*<0 \}\\ &\Leftrightarrow& \exists Y>0:\ AY+YA^T<0 \end{array} }

したがって、\lambda(A-BF)\subset{\rm\bf LHP}となるLMI条件は、次のようになります。

\displaystyle{(8)\quad \exists Y>0:\ (A-BF)Y+Y(A-BF)^T<0 }

これは、未知行列FYの積FYをもつので、LMIではなく、lmisolverを用いて解くことができません。しかしながら、変数変換Z=FYを行うと、次のようなYZに関するLMIとなります。

\displaystyle{(9)\quad \exists Y>0:\ AY-BZ+(AY-BZ)^T<0 }

これを解いてYZを求め、次式によって状態フィードバックゲインを決定します。

\displaystyle{(10)\quad F=ZY^{-1} }

●ちなみに、次のLMI条件(X-LMIによる)

\displaystyle{(11) \begin{array}{lll} &&\lambda(A)\subset{\rm\bf LHP}=\{s=x+jy\in{\rm\bf C}: s+s^*<0 \}\\ &\Leftrightarrow& \exists X>0:\ XA+A^TX<0 \end{array} }

を用いて、次式を得ます。

\displaystyle{(12)\quad \exists X>0:\ 2\alpha X+X(A-BF)+(A-BF)^TX<0\\ }

ここで、未知行列FXの積はXBFの形で表され、変数変換の手法を適用することができないことに注意してください。

演習B31…Flipped Classroom
1^\circ 次のコードを参考にして、安定化状態FBを求める関数を作成せよ。

MATLAB

%sf_syn_lmi0.m 
%----- 
 A=[0 1;0 0]; B=[0;1];
 [n,m]=size(B);  
%----- 
 setlmis([]); 
 Y=lmivar(1,[n 1]);  
 Z=lmivar(2,[m n]);  
%----- 
 lmi1=newlmi;  
 lmiterm([lmi1,1,1,Y],A,1,'s');     %#1:A*Y+Y*A’   
 lmiterm([lmi1,1,1,Z],-B,1,'s');    %#1:-(B*Z+Z'*B')   
%----- 
 lmi2=newlmi; 
 lmiterm([-lmi2 1 1 Y],1,1);        %#2:Y  
%----- 
 LMIs=getlmis;
 [tmin,xfeas]=feasp(LMIs);  
 Y=dec2mat(LMIs,xfeas,Y);  
 Z=dec2mat(LMIs,xfeas,Z);  
 F=Z/Y;  
%----- 
 pl=eig(A-B*F)
 close all,figure(1)  
 dregion(0,0,5,pi/2,5*[-1,1,-1,1])  
 plot(real(pl),imag(pl),'*')  
%----- 
%eof