状態FB用LMI(H2制御)

状態FB用LMI(H2制御)…Homework

[1] n次系\dot{x}=Ax+Bu,\ y=CxH_2ノルムが\gammaより小となるためのLMI条件は、次の通りでした。

\displaystyle{(1)\quad \begin{array}{l} \displaystyle{{\rm tr} (CW_cC^T)<\gamma^2\quad(W_c=\int_0^\infty \exp(At)BB^T\exp(A^Tt)dt)}\\\\ \displaystyle{\Leftrightarrow \exists X_c>0,\ Q_c>0:\\ \left[\begin{array}{cc} A^TX_c+X_cA & X_cB  \\ B^TX_c & -I  \end{array}\right]<0,\  \left[\begin{array}{cc} X_c & C^T  \\ C & Q_c  \end{array}\right]>0,\  {\rm tr}(Q_c)<\gamma^2}\\\\ \displaystyle{\Leftrightarrow \exists Y_c>0,\ Q_c>0:\\ \left[\begin{array}{cc} Y_cA^T+AY_c & B \\ B^T & -I \end{array}\right]<0,\  \left[\begin{array}{cc} Y_c & Y_cC^T  \\ CY_c & Q_c  \end{array}\right]>0,\  {\rm tr}(Q_c)<\gamma^2} \end{array}}

いま、次の2ポート表現されたn次系を考えます。

\displaystyle{(2)\quad P: \left\{\begin{array}{l} \dot{x}=Ax+B_1u_1+B_2u_2 \\ \underbrace{ \left[\begin{array}{c} y\\ u \end{array}\right] }_{y_1} = \underbrace{ \left[\begin{array}{c} C\\ 0 \end{array}\right] }_{C_1} x+ \underbrace{ \left[\begin{array}{c} 0\\ 0 \end{array}\right] }_{D_{11}}u_1+ \underbrace{ \left[\begin{array}{c} 0\\ I \end{array}\right] }_{D_{12}} u_2 \\ y_2=x \end{array}\right. }

これに対する状態フィードバック

\displaystyle{(3)\quad K: u_2=-Fy_2 }

による閉ループ系

\displaystyle{(4)\quad P_{CL}: \left\{\begin{array}{l} \dot{x}=\underbrace{(A-B_2F)}_{A_{CL}}x+\underbrace{B_1}_{B_{CL}}u_1 \\ y_1= \underbrace{ \left[\begin{array}{c} C\\ -F \end{array}\right] }_{C_{CL}=C_1-D_{12}F} x \end{array}\right. }

において、そのH_2ノルムが\gammaより小、すなわち

\displaystyle{(5)\quad {\rm tr} (C_{CL}W_cC_{CL}^T)<\gamma^2\quad(W_c=\int_0^\infty \exp(A_{CL}t)B_{CL}B_{CL}^T\exp(A_{CL}^Tt)dt)} }

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

この問題のLMI条件は、次のようになります。

\displaystyle{(6)\quad \begin{array}{l} \exists Y_{CL}>0,\ Q>0:\\ \left[\begin{array}{cc} Y_{CL}A_{CL}^T+A_{CL}Y_{CL} & B_{CL} \\ B_{CL}^T & -I \end{array}\right]<0,\\  \left[\begin{array}{cc} Y_{CL} & Y_{CL}C_{CL}^T  \\ C_{CL}Y_{CL} & Q \end{array}\right]>0,\\  {\rm tr}(Q)<\gamma^2 \end{array} }

すなわち

\displaystyle{(7)\quad \begin{array}{l} \displaystyle{\exists Y>0,\ Q>0:\\ \left[\begin{array}{cc} Y(A-B_2F)^T+(A-B_2F)Y & B_1 \\ B_1^T & -I \end{array}\right]<0,\\  \left[\begin{array}{cc} Y & Y(C_1-D_{12}F)^T  \\ (C_1-D_{12}F)Y & Q  \end{array}\right]>0,\\  {\rm tr}(Q)<\gamma^2} \end{array}}

ここで、変数変換Z_c=FY_cを行うと、次のようなY_cZ_cに関するLMIとなります。

\displaystyle{(8)\quad \begin{array}{l} \displaystyle{\exists Y>0,\ Q>0:\\ \left[\begin{array}{cc} (AY-B_2Z)^T+AY-B_2Z & B_1 \\ B_1^T & -I \end{array}\right]<0,\\  \left[\begin{array}{cc} Y & (C_1Y-D_{12}Z)^T  \\ C_1Y-D_{12}Z & Q  \end{array}\right]>0,\\  {\rm tr}(Q)<\gamma^2} \end{array}}

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

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

演習B34…Flipped Classroom
1^\circ 次のコードを参考にして、H_2制御(状態FB)を求める関数を作成せよ。

MATLAB
%sf_syn_lmi7.m 
%----- 
%A=[0 1;-1 -2*0.01]; B1=[0;1]; B2=B1;
%C1=[1 0;0 0]; D11=[0;0]; D12=[0;1]; 
 A=1; B1=1; B2=B1; 
 C1=[1;0]; D11=[0;0]; D12=[0;1];
 [n,m]=size(B2);  p=1;
%----- 
 setlmis([]);
 gam=lmivar(1,[1 0]); 
 Q=lmivar(1,[p 1]); 
 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],-B2,1,'s');  %#1:-B2*Z-Z*B2' 
 lmiterm([lmi1,1,2,0],B1);         %#1:B1 
 lmiterm([lmi1,2,2,0],-1);         %#1:-I 
%----- 
 lmi2=newlmi;
 lmiterm([-lmi2,1,1,Y],1,1);       %#2:Y 
 lmiterm([-lmi2,2,1,Y],C1,1);      %#2:C1*Y
 lmiterm([-lmi2,2,1,Z],-D12,1);    %#2:-D12*Z
 lmiterm([-lmi2,2,2,Q],1,1);       %#2:Q
%----- gam-tr(Q)>0
 CT=zeros(1,p*(p+1)/2); 
 for i=1:p, j=(i+1)*i/2; CT(j)=1; end
 lmi3=newlmi;   
 lmiterm([-lmi3 1 1 gam],1,1);     %#3:gam  
 lmiterm([-lmi3 1 1 Q],-CT,1);     %#3:-tr(Q)   
%----- 
 LMIs=getlmis; 
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj); 
 gam=dec2mat(LMIs,xopt,gam)
 Q=dec2mat(LMIs,xopt,Q)   
 Y=dec2mat(LMIs,xopt,Y)  
 Z=dec2mat(LMIs,xopt,Z)  
 F=Z/Y
 [Fopt,plopt]=opt(A,B1,C1(1,:),1,1)
%----- 
 pl=eig(A-B2*F)
 close all,figure(1) 
 dregion(0,0,20,pi/4,20*[-1,1,-1,1]) 
 plot(real(pl),imag(pl),'*') 
 figure(2) 
 ol=ltisys(A,B1,C1,D11); 
 cl=ltisys(A-B2*F,B1,C1-D12*F,D11); 
 om=logspace(-2,2,200); 
 splot(ssub(cl,1,1),'sv',om),hold on 
 splot(ssub(ol,1,1),'sv',om),grid 
%----- 
%eof