出力FB用LMI(固有値制約)

出力FB用LMI(固有値制約)…Homework

[0] n次系

\displaystyle{(1)\quad \left\{\begin{array}{l} \dot{x}=Ax+Bu\\ y=Cx \end{array}\right. }

に対する出力フィードバック

\displaystyle{(2)\quad \left\{\begin{array}{l} \dot{x}_K=A_Kx_K+B_Ky \\ u=C_Kx_K+D_Ky \end{array}\right. }

による閉ループ系

\displaystyle{(3)\quad \left[\begin{array}{c} \dot{x} \\ \dot{x}_K \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A+BD_KC & BC_K \\ B_KC & A_K \end{array}\right] }_{A_{CL}} \left[\begin{array}{c} x \\ x_K \end{array}\right] }

において、

\displaystyle{(4)\quad\lambda(A_{CL})\subset{\cal D}_i\quad(i=1,2,3)}

となるように出力フィードバックのゲインA_K,B_K,C_K,D_Kを求める問題を考えます。


図1 領域{\cal D}={\cal D}_1\cup{\cal D}_2\cup{\cal D}_3

[1] \lambda(A)\subset{\cal D}_1となるLMI条件は、次の通りでした。

\displaystyle{(5) \begin{array}{lll} &&\lambda(A)\subset {\cal D}_1=\{s=x+jy\in{\rm\bf C}: 2\alpha+s+s^*<0 \}\\ &\Leftrightarrow& \exists X>0:\ 2\alpha X+XA+A^TX<0\\ &\Leftrightarrow& \exists Y>0:\ 2\alpha Y+AY+YA^T<0 \end{array} }

したがって、\lambda(A_{CL})\subset{\cal D}_1となるLMI条件は、次のようになります。

\displaystyle{(6)\quad \exists Y_{CL}>0: 2\alpha Y_{CL}+A_{CL}Y_{CL}+Y_{CL}A_{CL}^T<0 }

出力フィードバックに関する変数変換の議論を参照して、Y_{CL}=\Pi_1\Pi_2^{-1}=\Pi_2^{-T}\Pi_1^Tを代入して

\displaystyle{(7)\quad \exists \Pi_1\Pi_2^{-1}>0: 2\alpha \Pi_1\Pi_2^{-1}+A_{CL}\Pi_1\Pi_2^{-1}+\Pi_2^{-T}\Pi_1^TA_{CL}^T<0 }

左から\Pi_2^T、右から\Pi_2をかけると、次のようなLMIとなります。

\displaystyle{(8)\quad \exists \Pi_2^T\Pi_1>0: 2\alpha \Pi_2^T\Pi_1+\Pi_2^TA_{CL}\Pi_1+(\Pi_2^TA_{CL}\Pi_1)^T<0 }

すなわち

\displaystyle{(9)\quad \exists \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]>0: 2\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]+ }
\displaystyle{ \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right] + \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right]^T <0 }

これを解いて R=R^T,S=S^T,{\cal A}_K,{\cal B}_K,{\cal C}_K,D_Kを求め、次式によって出力フィードバックのゲインを決定します。

\displaystyle{(10)\quad \begin{array}{lll} A_K=N^{-1}({\cal A}_K-S(A-BD_KC)R-{\cal B}_KCR-SB{\cal C}_K)M^{-T} \\ B_K=N^{-1}({\cal B}_K-SBD_K) \\ C_K=({\cal C}_K-D_KCR)M^{-T} \\ I-SR=NM^T \end{array} }

[2] \lambda(A)\subset{\cal D}_2となるLMI条件は、次の通りでした。

\displaystyle{(11) \begin{array}{lll} &&\lambda(A)\subset {\cal D}_2=\{s=x+jy\in{\rm\bf C}: \left[\begin{array}{cc} -r & s \\ s^* & -r \end{array}\right] <0 \}\nonumber\\ &\Leftrightarrow& \exists X>0:\ \left[\begin{array}{cc} -rX & XA \\ A^TX & -rX \end{array}\right]<0 \nonumber\\ &\Leftrightarrow& \exists Y>0:\ \left[\begin{array}{cc} -rY & AY \\ YA^T & -rY \end{array}\right]<0\nonumber \end{array} }

したがって、\lambda(A_{CL})\subset{\cal D}_1となるLMI条件は、次のようになります。

\displaystyle{(12)\quad \exists Y_{CL}>0: \left[\begin{array}{cc} -rY_{CL} & A_{CL}Y_{CL} \\ Y_{CL}A_{CL}^T & -rY_{CL} \end{array}\right]<0 }

出力フィードバックに関する変数変換の議論を参照して、Y_{CL}=\Pi_1\Pi_2^{-1}=\Pi_2^{-T}\Pi_1^Tを代入して

\displaystyle{(13)\quad \exists \Pi_1\Pi_2^{-1}>0: \left[\begin{array}{cc} -r\Pi_1\Pi_2^{-1} & A_{CL}\Pi_1\Pi_2^{-1} \\ \Pi_2^{-T}\Pi_1^TA_{CL}^T & -r\Pi_1\Pi_2^{-1} \end{array}\right]<0 }

左から\Pi_2^T、右から\Pi_2をかけると、次のようなLMIとなります。

\displaystyle{(14)\quad \exists \Pi_2^T\Pi_1>0: \left[\begin{array}{cc} -r\Pi_2^T\Pi_1 & \Pi_2^TA_{CL}\Pi_1 \\ (\Pi_2^TA_{CL}\Pi_1)^T & -r\Pi_2^T\Pi_1 \end{array}\right]<0 }

すなわち

\displaystyle{(15)\quad \exists \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]>0:\ }
\displaystyle{ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right] \\ \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right]^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0 }

これを解いて R=R^T,S=S^T,{\cal A}_K,{\cal B}_K,{\cal C}_K,D_Kを求め、次式によって出力フィードバックのゲインを決定します。

\displaystyle{(10)\quad \begin{array}{lll} A_K=N^{-1}({\cal A}_K-S(A-BD_KC)R-{\cal B}_KCR-SB{\cal C}_K)M^{-T} \\ B_K=N^{-1}({\cal B}_K-SBD_K) \\ C_K=({\cal C}_K-D_KCR)M^{-T} \\ I-SR=NM^T \end{array} }

[3] \lambda(A)\subset{\cal D}_3となるLMI条件は、次の通りでした。

\displaystyle{(16) \begin{array}{lll} &&\lambda(A)\subset {\cal D}_3=\{s=x+jy\in{\rm\bf C}:\\ && \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]s + \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]^Ts^* <0 \}\nonumber\\ &&\Leftrightarrow \exists X>0:\ \left[\begin{array}{cc} \sin\theta(XA+A^TX) & \cos\theta(XA-A^TX) \\ -\cos\theta(XA-A^TX) & \sin\theta(XA+A^TX) \end{array}\right] <0 \nonumber\\ &&\Leftrightarrow \exists Y>0:\ \left[\begin{array}{cc} \sin\theta(AY+YA^T) & \cos\theta(AY-YA^T) \\ -\cos\theta(AY-YA^T) & \sin\theta(AY+YA^T) \end{array}\right] <0\nonumber \end{array} }

したがって、\lambda(A_{CL})\subset{\cal D}_1となるLMI条件は、次のようになります。

\displaystyle{(17)\quad \exists Y_{CL}>0:\ }
\displaystyle{ \left[\begin{array}{cc} \sin\theta(A_{CL}Y_{CL}+Y_{CL}A_{CL}^T) & \cos\theta(A_{CL}Y_{CL}-Y_{CL}A_{CL}^T) \\ -\cos\theta(A_{CL}Y_{CL}-Y_{CL}A_{CL}^T) & \sin\theta(A_{CL}Y_{CL}+Y_{CL}A_{CL}^T) \end{array}\right] <0 }

出力フィードバックに関する変数変換の議論を参照して、Y_{CL}=\Pi_1\Pi_2^{-1}=\Pi_2^{-T}\Pi_1^Tを代入して

\displaystyle{(18)\quad \exists \Pi_1\Pi_2^{-1}>0:\ }
\displaystyle{ \left[\begin{array}{cc} \sin\theta(A_{CL}\Pi_1\Pi_2^{-1}+\Pi_2^{-T}\Pi_1^TA_{CL}^T) & \cos\theta(A_{CL}\Pi_1\Pi_2^{-1}-\Pi_2^{-T}\Pi_1^TA_{CL}^T) \\ -\cos\theta(A_{CL}\Pi_1\Pi_2^{-1}-\Pi_2^{-T}\Pi_1^TA_{CL}^T) & \sin\theta(A_{CL}\Pi_1\Pi_2^{-1}+\Pi_2^{-T}\Pi_1^TA_{CL}^T) \end{array}\right] <0 }

左から\Pi_2^T、右から\Pi_2をかけると、次のようなLMIとなります。

\displaystyle{(19)\quad \exists \Pi_2^T\Pi_1>0:\ }
\displaystyle{ \left[\begin{array}{cc} \sin\theta(\Pi_2^TA_{CL}\Pi_1+(\Pi_2^TA_{CL}\Pi_1)^T) & \cos\theta(\Pi_2^TA_{CL}\Pi_1-(\Pi_2^TA_{CL}\Pi_1)^T) \\ -\cos\theta(\Pi_2^TA_{CL}\Pi_1-(\Pi_2^TA_{CL}\Pi_1)^T) & \sin\theta(\Pi_2^TA_{CL}\Pi_1+(\Pi_2^TA_{CL}\Pi_1)^T) \end{array}\right]<0 }

すなわち

\displaystyle{(20)\quad \begin{array}{l} \exists \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]>0:\ \\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right] \otimes \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right]+ \\ (\left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right] \otimes \left[\begin{array}{cc} AR+B{\cal C}_K & A+BD_KC \\ {\cal A}_K & SA+{\cal B}_KC \end{array}\right])^T <0 \end{array} }

これを解いて R=R^T,S=S^T,{\cal A}_K,{\cal B}_K,{\cal C}_K,D_Kを求め、次式によって出力フィードバックのゲインを決定します。

\displaystyle{(10)\quad \begin{array}{lll} A_K=N^{-1}({\cal A}_K-S(A-BD_KC)R-{\cal B}_KCR-SB{\cal C}_K)M^{-T} \\ B_K=N^{-1}({\cal B}_K-SBD_K) \\ C_K=({\cal C}_K-D_KCR)M^{-T} \\ I-SR=NM^T \end{array} }

演習B42…Flipped Classroom
1^\circ 次のコードを参考にして、\lambda(A-BF)\subset{\cal D}を達成する出力FBを求める関数を作成せよ。

MATLAB
%of_syn_lmi4.m 
%-----
 clear all, close all
 A=[0 1;-1 -2*0.01]; B=[0;1]; C=[1 0];
%-----
 setlmis([]);
 R=lmivar(1,[2 1]); 
 S=lmivar(1,[2 1]); 
 Ak=lmivar(2,[2 2]); 
 Bk=lmivar(2,[2 1]); 
 Ck=lmivar(2,[1 2]); 
 Dk=lmivar(2,[1 1]); 
%-----
 alpha=0.1;
 lmiPL1=newlmi; 
 lmiterm([lmiPL1 1 1 R],A,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL1 1 1 Ck],B,1,'s');     %#2:Ck'*B'+B*Ck 
 lmiterm([lmiPL1 2 1 Ak],1,1);         %#2:Ak 
 lmiterm([lmiPL1 1 2 0],A);            %#2:A 
 lmiterm([lmiPL1 1 2 Dk],B,C);         %#2:B*Dk*C 
 lmiterm([lmiPL1 2 2 S],1,A,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL1 2 2 Bk],1,C,'s');     %#2:C'*Bk'+Bk*C 
% 
 lmiterm([lmiPL1 1 1 R],2*alpha,1);    %#2:2*alpha*R
 lmiterm([lmiPL1 2 1 0],2*alpha);      %#2:2*alpha*I 
 lmiterm([lmiPL1 2 2 S],2*alpha,1);    %#2:2*alpha*S 
%-----
 r=5;
 lmiPL2=newlmi; 
 lmiterm([lmiPL2 1 1 R],-r,1);         %#3:-r*R 
 lmiterm([lmiPL2 2 1 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 2 2 S],-r,1);         %#3:-r*S 
% 
 lmiterm([lmiPL2 1 3 R],A,1);          %#3:A*R
 lmiterm([lmiPL2 1 3 Ck],B,1);         %#3:B*Ck 
 lmiterm([lmiPL2 2 3 Ak],1,1);         %#3:Ak 
 lmiterm([lmiPL2 1 4 0],A);            %#3:A 
 lmiterm([lmiPL2 1 4 Dk],B,C);         %#3:B*Dk*C 
 lmiterm([lmiPL2 2 4 S],1,A);          %#3:S*A 
 lmiterm([lmiPL2 2 4 Bk],1,C);         %#3:Bk*C 
% 
 lmiterm([lmiPL2 3 3 R],-r,1);         %#3:-r*R
 lmiterm([lmiPL2 4 3 0],-r);           %#3:-r*I 
 lmiterm([lmiPL2 4 4 S],-r,1);         %#3:-r*S 
%-----
 th=pi/2; sth=sin(th); cth=cos(th);
 lmiPL3=newlmi; 
 lmiterm([lmiPL3 1 1 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL3 1 1 Ck],sth*B,1,'s'); %#4:sth*(Ck'*B'+B*Ck) 
 lmiterm([lmiPL3 2 1 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 1 2 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 1 2 Dk],sth*B,C);     %#4:sth*(B*Dk*C) 
 lmiterm([lmiPL3 2 2 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 2 2 Bk],1,sth*C,'s'); %#4:sth*(C'*Bk'+Bk*C) 
% 
%lmiterm([lmiPL3 1 3 R],1,cth*A');     %#1:cth*(R*A')
%lmiterm([lmiPL3 1 3 R],-cth*A,1);     %#1:cth*(-A*R) 
%lmiterm([lmiPL3 1 3 -Ck],cth*B',1);   %#1:cth*(Ck'*B') 
%lmiterm([lmiPL3 1 3 Ck],-cth*B,1);    %#1:cth*(-B*Ck) 
 lmiterm([lmiPL3 1 3 R],cth*A,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL3 1 3 R],1,-cth*A');    %#1:cth*(-R*A')
 lmiterm([lmiPL3 1 3 Ck],cth*B,1);     %#1:cth*(B*Ck) 
 lmiterm([lmiPL3 1 3 -Ck],-cth*B',1);  %#1:cth*(-Ck'*B')  
 lmiterm([lmiPL3 2 3 Ak],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL3 1 4 -Ak],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL3 1 4 0],A);            %#4:cth*(A) 
 lmiterm([lmiPL3 2 3 0],-A');          %#4:cth*(-A') 
 lmiterm([lmiPL3 1 4 Dk],cth*B,C);     %#4:cth*(B*Dk*C) 
 lmiterm([lmiPL3 2 3 -Dk],-cth*C',B'); %#4:cth*(-C'*Dk'*B') 
 lmiterm([lmiPL3 2 4 S],1,cth*A);      %#4:cth*(S*A) 
 lmiterm([lmiPL3 2 4 S],-cth*A',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL3 2 4 Bk],1,cth*C);     %#4:cth*(Bk*C) 
 lmiterm([lmiPL3 2 4 -Bk],-cth*C',1);  %#4:cth*(-C'*Bk') 
% 
 lmiterm([lmiPL3 3 3 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL3 3 3 Ck],sth*B,1,'s'); %#4:sth*(Ck'*B'+B*Ck) 
 lmiterm([lmiPL3 4 3 Ak],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL3 3 4 0],sth*A);        %#4:sth*(A) 
 lmiterm([lmiPL3 3 4 Dk],sth*B,C);     %#4:sth*(B*Dk*C) 
 lmiterm([lmiPL3 4 4 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 4 4 Bk],1,sth*C,'s'); %#4:sth*(C'*Bk'+Bk*C) 
%-----
 posX=-newlmi;
 lmiterm([posX 1 1 R],1,1);            %#5:R 
 lmiterm([posX 2 1 0],1);              %#5:I 
 lmiterm([posX 2 2 S],1,1);            %#5:S 
%-----
 LMIs=getlmis; 
 [tmin,xfeas]=feasp(LMIs);   
 R=dec2mat(LMIs,xfeas,R); 
 S=dec2mat(LMIs,xfeas,S); 
 ak=dec2mat(LMIs,xfeas,Ak); 
 bk=dec2mat(LMIs,xfeas,Bk); 
 ck=dec2mat(LMIs,xfeas,Ck); 
 dk=dec2mat(LMIs,xfeas,Dk); 
 [u,sd,v]=svd(eye(size(A,1)-S*R);  
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*u'; Mti=v*sd; 
 AK=Ni*(ak-S*(A-B*dk*C)*R-bk*C*R-S*B*ck)*Mti; 
 BK=Ni*(bk-S*B*dk); 
 CK=(ck-dk*C*R)*Mti; 
 DK=dk; 
%-----
 pl=eig(A)
 ACL=[A+B*DK*C B*CK;
      BK*C AK];
 plCL=eig(ACL)
 figure(1)
 dregion(0,0,5,0.4*pi,5*[-1,1,-1,1])  
 plot(real(pl),imag(pl),'x',real(plCL),imag(plCL),'*')
%-----
%eof