LPV制御(出力FB)

LPV制御(出力FB)…Homework

ここでは、主軸変動を伴う回転体の運動制御を例にとって、出力FB形式のGS制御について説明します。

[1] 次図のような回転体の運動を考えます。


図1 主軸変動を伴う回転体

これは次の運動方程式で表されます。

\displaystyle{(1)\quad \left\{\begin{array}{l} J_1\dot{\omega}_1(t)-\omega_2(t)\Omega(t)(J_2-J_3)=\tau_1(t) \\ J_2\dot{\omega}_2(t)-\omega_1(t)\Omega(t)(J_3-J_1)=\tau_2(t) \end{array}\right. }

ここで、次のパラメータ変動を想定します。

\displaystyle{(2)\quad \Omega_{min}<\Omega(t)<\Omega_{max} }

次の状態方程式を得ます。

\displaystyle{(3) \underbrace{ \left[\begin{array}{c} \dot{\omega}_1(t) \\ \dot{\omega}_2(t) \end{array}\right] }_{\dot{x}(t)} = \underbrace{ \left[\begin{array}{cc} 0 & \Omega(t)\frac{J_2-J_3}{J_1} \\ -\Omega(t)\frac{J_3-J_1}{J_2} & 0 \end{array}\right] }_{A(\Omega(t))} \underbrace{ \left[\begin{array}{c} \omega_1(t) \\ \omega_2(t) \end{array}\right] }_{x(t)} + \underbrace{ \left[\begin{array}{cc} \frac{1}{J_1} & 0 \\ 0 & \frac{1}{J_2} \end{array}\right] }_{B} \underbrace{ \left[\begin{array}{c} \tau_1(t) \\ \tau_2(t) \end{array}\right] }_{u(t)} }

●いま、A(\Omega(t))は次式で表されることに着目します。

\displaystyle{(4)\quad A(\Omega(t))= \underbrace{\frac{\Omega_{max}-\Omega(t)}{\Omega_{max}-\Omega_{min}}}_{p_1(\Omega(t))} \underbrace{A(\Omega_{min})}_{A_1} + \underbrace{\frac{\Omega(t)-\Omega_{min}}{\Omega_{max}-\Omega_{min}}}_{p_2(\Omega(t))} \underbrace{A(\Omega_{max})}_{A_2} }

ただし

\displaystyle{(5)\quad p_1(\Omega(t))+p_2(\Omega(t))=1 }

このとき上の状態方程式は、端点(vertex)モデルとよばれる

\displaystyle{(6)\quad \dot{x}(t)=A_1x(t)+Bu(t),\ \dot{x}(t)=A_2x(t)+Bu(t) }

を、係数p_1(\Omega),p_2(\Omega)によって重み付けて

\displaystyle{(7)\quad \dot{x}(t)=\underbrace{(p_1(\Omega(t))A_1+p_2(\Omega(t))A_2)}_{A(\Omega(t))}x(t)+Bu(t) }

のように得られることが分かります。これをLPV(Linear Parameter Varying)モデルと呼びます。

●出力フィートバックによるパラメータ変動抑制について考えます。そのために端点モデルに対応した出力フィートバック(端点コントローラとよばれる)

\displaystyle{(8)\quad \begin{array}{l} \left\{\begin{array}{l} \dot{x}_K(t)=A_{K1}x_K(t)+B_{K1}y(t) \\ u(t)=C_{K1}x_K(t)+D_{K1}y(t) \end{array}\right.\\ \left\{\begin{array}{l} \dot{x}_K(t)=A_{K2}x_K(t)+B_{K2}y(t) \\ u(t)=C_{K2}x_K(t)+D_{K2}y(t) \end{array}\right. \end{array} }

を、それぞれ係数p_1(\Omega(t)),p_2(\Omega(t))によって重み付けた

\displaystyle{(9)\quad \begin{array}{l} \dot{x}_K(t)=\underbrace{(p_1(\Omega(t))A_{K1}+p_2(\Omega(t))A_{K2})}_{A_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))B_{K1}+p_2(\Omega(t))B_{K2})}_{B_K(\Omega(t))}y(t) \\ u=\underbrace{(p_1(\Omega(t))C_{K1}+p_2(\Omega(t))C_{K2})}_{C_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))D_{K1}+p_2(\Omega(t))D_{K2})}_{D_K(\Omega(t))}y(t) \end{array} }

のようなLPV(Linear Parameter Varying)制御を考えます。この閉ループ系は次式で表されます。

\displaystyle{(10)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] =(p_1(\Omega(t)) \underbrace{ \left[\begin{array}{ccc} A_1+BD_{K1}C & BC_{K1} \\ B_{K1}C & A_{K1} \end{array}\right] }_{A_{CL1}}\\ +p_2(\Omega(t)) \underbrace{ \left[\begin{array}{ccc} A_2+BD_{K2}C & BC_{K2} \\ B_{K2}C & A_{K2} \end{array}\right] }_{A_{CL2}} )\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array} }

ここで、端点コントローラによる閉ループ系

\displaystyle{(11)\quad \begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A_1+BD_{K1}C & BC_{K1} \\ B_{K1}C & A_{K1} \end{array}\right] }_{A_{CL1}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] = \underbrace{ \left[\begin{array}{ccc} A_2+BD_{K2}C & BC_{K2} \\ B_{K2}C & A_{K1} \end{array}\right] }_{A_{CL2}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array} }

はそれぞれ漸近安定となるように設計しますが、閉ループ系の時変系としての安定性が保証されるかの検討が必要になります(Note B52参照)。

[2] いま、次の2ポート表現かつポリトピック表現されたn次系を考えます。混乱を避けるため、A^{(1)}=A_1A^{(2)}=A_2と記法を改めたことに注意してください。

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

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

\displaystyle{(13)\quad K:  \left\{\begin{array}{l} \dot{x}_K(t)=\underbrace{(p_1(\Omega(t))A_{K1}+p_2(\Omega(t))A_{K2})}_{A_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))B_{K1}+p_2(\Omega(t))B_{K2})}_{B_K(\Omega(t))}y_2(t) \\ u_2(t)=\underbrace{(p_1(\Omega(t))C_{K1}+p_2(\Omega(t))C_{K2})}_{C_K(\Omega(t))}x_K(t)\\ +\underbrace{(p_1(\Omega(t))D_{K1}+p_2(\Omega(t))D_{K2})}_{D_K(\Omega(t))}y_2(t) \end{array}\right. }

による閉ループ系

\displaystyle{(14)\quad P_{CL}: \left\{\begin{array}{l} \left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right] =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]\\ + \underbrace{ \left[\begin{array}{ccc} B_1 \\ 0 \end{array}\right] }_{B_{CL}} u_1(t)\\ y_1(t) = \underbrace{ \left[\begin{array}{ccc} C_1+D_{12}D_KC_2 & D_{12}C_K \end{array}\right] }_{C_{CL}} \left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right] \end{array}\right. }

において、その{\cal L}_2ゲインが\gammaより小、すなわち

\displaystyle{(15)\quad \sup_{u_1\in{\cal L}_2}\frac{||y_1(t)||_2}{||u_1(t)||_2}<\gamma }

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

●そのために、各端点におけるH_\infty制御(出力フィードバック)を共通のリャプノフ関数をもつように解きます。その際コントローラの実装上の立場から、各端点において

\lambda(A_{CL1}),\lambda(A_{CL2})\subset{\cal D}_1\cup{\cal D}_2\cup{\cal D}_3

の制約を課すことがあります。この問題は次のように定式化されます。

Minimize \gamma on R,S,{\cal A}_K^{(1)},{\cal B}_K^{(1)},{\cal C}_K^{(1)},D_K^{(1)},{\cal A}_K^{(2)},{\cal B}_K^{(2)},{\cal C}_K^{(2)},D_K^{(2)} subject to

\displaystyle{(16) \begin{array}{l} \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] >0 \end{array} }

\displaystyle{(17) \left[\begin{array}{ccc} \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right]+(*)^T & \left[\begin{array}{c} B_1+B_2D_K^{(1)}D_{21} \\ SB_1+{\cal B}_K^{(1)}D_{21} \end{array}\right] & (*)^T \\ (*)^T & -\gamma I & (*)^T \\ \left[\begin{array}{cc} C_1R+D_{12}{\cal C}_K^{(1)} & C_1+D_{12}D_K^{(1)}C_2 \end{array}\right] & D_{11} & -\gamma I \end{array}\right]<0 }

\displaystyle{(18) \begin{array}{l} \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right] +(*)^T %\nonumber\\&& +\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]<0} \\ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right] \\ (*)^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0 \\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]\otimes \left[\begin{array}{cc} A^{(1)}R+B_2{\cal C}_K^{(1)} & A^{(1)}+B_2D_K^{(1)}C_2\\ {\cal A}_K^{(1)} & SA^{(1)}+{\cal B}_K^{(1)}C_2 \end{array}\right]+ (*)^T <0 \end{array} }

\displaystyle{(19) \left[\begin{array}{ccc} \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right]+(*)^T & \left[\begin{array}{c} B_1+B_2D_K^{(2)}D_{21} \\ SB_1+{\cal B}_K^{(2)}D_{21} \end{array}\right] & (*)^T \\ (*)^T & -\gamma I & (*)^T \\ \left[\begin{array}{cc} C_1R+D_{12}{\cal C}_K^{(2)} & C_1+D_{12}D_K^{(2)}C_2 \end{array}\right] & D_{11} & -\gamma I \end{array}\right]<0 }

\displaystyle{(20) \begin{array}{l} \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(1)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right] +(*)^T %\nonumber\\&& +\alpha \left[\begin{array}{cc} R & I \\ I & S \end{array}\right]<0} \\ \left[\begin{array}{cc} -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] & \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right] \\ (*)^T & -r \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] \end{array}\right] <0 \\ \left[\begin{array}{cc} \sin\theta & \cos\theta \\ -\cos\theta & \sin\theta \end{array}\right]\otimes \left[\begin{array}{cc} A^{(2)}R+B_2{\cal C}_K^{(2)} & A^{(2)}+B_2D_K^{(2)}C_2\\ {\cal A}_K^{(2)} & SA^{(2)}+{\cal B}_K^{(2)}C_2 \end{array}\right]+ (*)^T <0 \end{array} }

この最小化問題の解 R,S,{\cal A}_K^{(1)},{\cal B}_K^{(1)},{\cal C}_K^{(1)},D_K^{(1)},{\cal A}_K^{(2)},{\cal B}_K^{(2)},{\cal C}_K^{(2)},D_K^{(2)}を用いて、次式によって出力フィードバック(12)のゲインを決定します。

\displaystyle{(21)\quad \begin{array}{lll} A_{K1}=N^{-1}({\cal A}_K^{(1)}-S(A-B_2D_K^{(1)}C_2)R-{\cal B}_K^{(1)}C_2R-SB_2{\cal C}_K^{(1)})M^{-T} \nonumber\\ B_{K1}=N^{-1}({\cal B}_K^{(1)}-SB_2D_K^{(1)}) \nonumber\\ C_{K1}=({\cal C}_K^{(1)}-D_K^{(1)}C_2R)M^{-T} \nonumber\\ (I-SR=NM^T) \end{array} }

\displaystyle{(22)\quad \begin{array}{lll} A_{K2}=N^{-1}({\cal A}_K^{(2)}-S(A-B_2D_K^{(2)}C_2)R-{\cal B}_K^{(2)}C_2R-SB_2{\cal C}_K^{(2)})M^{-T} \nonumber\\ B_{K2}=N^{-1}({\cal B}_K^{(2)}-SB_2D_K^{(2)}) \nonumber\\ C_{K2}=({\cal C}_K^{(2)}-D_K^{(2)}C_2R)M^{-T} \nonumber\\ (I-SR=NM^T) \end{array} }

●この問題設定では

\displaystyle{(23)\quad \left[\begin{array}{ccc} Y_{CL}A_{CL1}^T+A_{CL1}Y_{CL} & B_{CL} & Y_{CL}C_{CL}^T \\ B_{CL}^T & -\gamma I & D_{CL}^T \\ C_{CL}Y_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(24)\quad \left[\begin{array}{ccc} Y_{CL}A_{CL2}^T+A_{CL2}Y_{CL} & B_{CL} & Y_{CL}C_{CL}^T \\ B_{CL}^T & -\gamma I & D_{CL}^T \\ C_{CL}Y_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

の共通解Y_{CL}>0を求めています。X_{CL}=Y_{CL}^{-1}ととれば

\displaystyle{(25)\quad X_{CL}>0 \Leftrightarrow Y_{CL}>0 \Leftrightarrow \left[\begin{array}{cc} R & I \\ I & S \end{array}\right] >0 }

に注意して

\displaystyle{(26)\quad \left[\begin{array}{ccc} A_{CL1}^TX_{CL}+X_{CL}A_{CL1} & X_{CL}B_{CL} & C_{CL}^T \\ B_{CL}^TX_{CL} & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(27)\quad \left[\begin{array}{ccc} A_{CL2}^TX_{CL}+X_{CL}A_{CL2} & X_{CL}B_{CL} & C_{CL}^T \\ B_{CL}^TX_{CL} & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

の共通解となっています。これにより、閉ループ系の時変系としての安定性が保証されます(Note B52参照)。

演習B52…Flipped Classroom

1^\circ 回転体のパラメータ変動を出力FBによるLPV制御で抑制したシミュレーションプログラムを以下に示す。これを実行し効果を確かめよ。

MATLAB
%cSPIN_of_gs.m
%-----
 clear all close all
 J1=1; J2=1; J3=0.5;
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
%  sim("SPIN0")
 A1=[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); C=eye(2); D=zeros(2,2);
 S0=[zeros(2,2) B;C D];
 S1=zeros(4,4); S1(1:2,1:2)=A1;
%  sim("SPIN")
%-----
 J1=1; J2=1; J3=0.5; 
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
 A1= OMmin*[0 (J2-J3)/J1;(J3-J1)/J2 0]; 
 A2= OMmax*[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); 
 B1=B; B2=B;
 C1=[eye(2,2);zeros(2,2)]; 
 D11=zeros(4,2); 
 D12=[zeros(2,2);eye(2,2)];
 C2=eye(2,2); 
 D21=zeros(2,2); 
 D22=zeros(2,2);
%----- 
 alpha=1; r=3; th=pi/4; 
 LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3); 
 %-----
 ak1=dec2mat(LMIs,xopt,4); 
 bk1=dec2mat(LMIs,xopt,5); 
 ck1=dec2mat(LMIs,xopt,6); 
 dk1=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A1,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK1=Ni*(ak1-S*(A1-B2*dk1*C2)*R-bk1*C2*R-S*B2*ck1)*Mti; 
 BK1=Ni*(bk1-S*B2*dk1); 
 CK1=(ck1-dk1*C2*R)*Mti; 
 DK1=dk1; 
 K1=[AK1 BK1;CK1 DK1];
 ACL1=[A1+B2*DK1*C2 B2*CK1;
      BK1*C2 AK1];
 plCL1=eig(ACL1)
 %-----
 ak2=dec2mat(LMIs,xopt,8); 
 bk2=dec2mat(LMIs,xopt,9); 
 ck2=dec2mat(LMIs,xopt,10); 
 dk2=dec2mat(LMIs,xopt,11); 
 [u,sd,v]=svd(eye(size(A2,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK2=Ni*(ak2-S*(A2-B2*dk2*C2)*R-bk2*C2*R-S*B2*ck2)*Mti; 
 BK2=Ni*(bk2-S*B2*dk2); 
 CK2=(ck2-dk2*C2*R)*Mti; 
 DK2=dk2; 
 K2=[AK2 BK2;CK2 DK2];
 ACL2=[A2+B2*DK2*C2 B2*CK2;
       BK2*C2 AK2];
 plCL2=eig(ACL2)
%------
 figure(1) 
 subplot(121),dregion(alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(plCL1),imag(plCL1),'*') 
 subplot(122), dregion(alpha,0,r,th,r*[-1,1,-1,1]) 
 plot(real(plCL2),imag(plCL2),'*')  
%-----
 prange=OMmax-OMmin; pmax=OMmax; pmin=OMmin; 
%sim("SPIN_of_gs") 
 sim("SPIN_of_gs_2015a")  
%-----
function LMIs=of_synlmi7(A1,A2,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak1=lmivar(2,[n n]); 
 Bk1=lmivar(2,[n p]); 
 Ck1=lmivar(2,[m n]); 
 Dk1=lmivar(2,[m p]); 
 Ak2=lmivar(2,[n n]); 
 Bk2=lmivar(2,[n p]); 
 Ck2=lmivar(2,[m n]); 
 Dk2=lmivar(2,[m p]);  
%=====
 lmiRS1=newlmi;
 lmiterm([lmiRS1 1 1 R],A1,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS1 1 1 Ck1],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS1 2 1 0],A1');            %#1:A' 
 lmiterm([lmiRS1 2 1 Ak1],1,1);          %#1:Ak 
 lmiterm([lmiRS1 2 1 -Dk1],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS1 2 2 S],1,A1,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS1 2 2 Bk1],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS1 1 3 0],B1);             %#1:B1 
 lmiterm([lmiRS1 1 3 Dk1],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS1 2 3 S],1,B1);           %#1:S*B1 
 lmiterm([lmiRS1 2 3 Bk1],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS1 3 3 gam],-1,1);         %#1:-gam 
 lmiterm([lmiRS1 4 1 R],C1,1);           %#1:C1*R 
 lmiterm([lmiRS1 4 1 Ck1],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS1 4 2 0],C1);             %#1:C1 
 lmiterm([lmiRS1 4 2 Dk1],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS1 4 3 0],D11);            %#1:D11 
 lmiterm([lmiRS1 4 3 Dk1],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS1 4 4 gam],-1,1);         %#1:-gam 
%-----
 lmiPL11=newlmi; 
 lmiterm([lmiPL11 1 1 R],A1,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL11 1 1 Ck1],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL11 2 1 Ak1],1,1);         %#2:Ak 
 lmiterm([lmiPL11 1 2 0],A1);            %#2:A 
 lmiterm([lmiPL11 1 2 Dk1],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL11 2 2 S],1,A1,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL11 2 2 Bk1],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL11 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL11 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL11 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL21=newlmi; 
 lmiterm([lmiPL21 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL21 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL21 1 3 R],A1,1);          %#3:A*R
 lmiterm([lmiPL21 1 3 Ck1],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL21 2 3 Ak1],1,1);         %#3:Ak 
 lmiterm([lmiPL21 1 4 0],A1);            %#3:A 
 lmiterm([lmiPL21 1 4 Dk1],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL21 2 4 S],1,A1);          %#3:S*A 
 lmiterm([lmiPL21 2 4 Bk1],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL21 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL21 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL21 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL31=newlmi; 
 lmiterm([lmiPL31 1 1 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL31 1 1 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 2 1 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 1 2 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 1 2 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 2 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 2 2 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL31 1 3 R],cth*A1,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL31 1 3 R],1,-cth*A1');    %#1:cth*(-R*A')
 lmiterm([lmiPL31 1 3 Ck1],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL31 1 3 -Ck1],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL31 2 3 Ak1],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL31 1 4 -Ak1],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL31 1 4 0],A1);            %#4:cth*(A) 
 lmiterm([lmiPL31 2 3 0],-A1');          %#4:cth*(-A') 
 lmiterm([lmiPL31 1 4 Dk1],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL31 2 3 -Dk1],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL31 2 4 S],1,cth*A1);      %#4:cth*(S*A) 
 lmiterm([lmiPL31 2 4 S],-cth*A1',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL31 2 4 Bk1],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL31 2 4 -Bk1],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL31 3 3 R],sth*A1,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL31 3 3 Ck1],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL31 4 3 Ak1],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL31 3 4 0],sth*A1);        %#4:sth*(A) 
 lmiterm([lmiPL31 3 4 Dk1],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL31 4 4 S],1,sth*A1,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL31 4 4 Bk1],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%=====
 lmiRS2=newlmi;
 lmiterm([lmiRS2 1 1 R],A2,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS2 1 1 Ck2],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS2 2 1 0],A2');            %#1:A' 
 lmiterm([lmiRS2 2 1 Ak2],1,1);          %#1:Ak 
 lmiterm([lmiRS2 2 1 -Dk2],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS2 2 2 S],1,A2,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS2 2 2 Bk2],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS2 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS2 1 3 Dk2],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS2 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS2 2 3 Bk2],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS2 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS2 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS2 4 1 Ck2],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS2 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS2 4 2 Dk2],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS2 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS2 4 3 Dk2],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS2 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL12=newlmi; 
 lmiterm([lmiPL12 1 1 R],A2,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL12 1 1 Ck2],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL12 2 1 Ak2],1,1);         %#2:Ak 
 lmiterm([lmiPL12 1 2 0],A2);            %#2:A 
 lmiterm([lmiPL12 1 2 Dk2],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL12 2 2 S],1,A2,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL12 2 2 Bk2],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 lmiterm([lmiPL12 1 1 R],2*alpha,1);     %#2:2*alpha*R
 lmiterm([lmiPL12 2 1 0],2*alpha);       %#2:2*alpha*I 
 lmiterm([lmiPL12 2 2 S],2*alpha,1);     %#2:2*alpha*S 
%-----
 lmiPL22=newlmi; 
 lmiterm([lmiPL22 1 1 R],-r,1);          %#3:-r*R 
 lmiterm([lmiPL22 2 1 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 2 2 S],-r,1);          %#3:-r*S 
% 
 lmiterm([lmiPL22 1 3 R],A2,1);          %#3:A*R
 lmiterm([lmiPL22 1 3 Ck2],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL22 2 3 Ak2],1,1);         %#3:Ak 
 lmiterm([lmiPL22 1 4 0],A2);            %#3:A 
 lmiterm([lmiPL22 1 4 Dk2],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL22 2 4 S],1,A2);          %#3:S*A 
 lmiterm([lmiPL22 2 4 Bk2],1,C2);        %#3:Bk*C2 
% 
 lmiterm([lmiPL22 3 3 R],-r,1);          %#3:-r*R
 lmiterm([lmiPL22 4 3 0],-r);            %#3:-r*I 
 lmiterm([lmiPL22 4 4 S],-r,1);          %#3:-r*S 
%-----
 sth=sin(th); cth=cos(th);
 lmiPL32=newlmi; 
 lmiterm([lmiPL32 1 1 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R) 
 lmiterm([lmiPL32 1 1 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 2 1 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 1 2 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 1 2 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 2 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 2 2 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
 lmiterm([lmiPL32 1 3 R],cth*A2,1);      %#1:cth*(A*R) 
 lmiterm([lmiPL32 1 3 R],1,-cth*A2');    %#1:cth*(-R*A')
 lmiterm([lmiPL32 1 3 Ck2],cth*B2,1);    %#1:cth*(B*Ck) 
 lmiterm([lmiPL32 1 3 -Ck2],-cth*B2',1); %#1:cth*(-Ck'*B') 
 lmiterm([lmiPL32 2 3 Ak2],cth,1);       %#4:cth*(Ak) 
 lmiterm([lmiPL32 1 4 -Ak2],-cth,1);     %#4:cth*(-Ak') 
 lmiterm([lmiPL32 1 4 0],A2);            %#4:cth*(A) 
 lmiterm([lmiPL32 2 3 0],-A2');          %#4:cth*(-A') 
 lmiterm([lmiPL32 1 4 Dk2],cth*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL32 2 3 -Dk2],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 lmiterm([lmiPL32 2 4 S],1,cth*A2);      %#4:cth*(S*A) 
 lmiterm([lmiPL32 2 4 S],-cth*A2',1);    %#4:cth*(-A'*S) 
 lmiterm([lmiPL32 2 4 Bk2],1,cth*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL32 2 4 -Bk2],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL32 3 3 R],sth*A2,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL32 3 3 Ck2],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*Ck) 
 lmiterm([lmiPL32 4 3 Ak2],sth,1);       %#4:sth*(Ak) 
 lmiterm([lmiPL32 3 4 0],sth*A2);        %#4:sth*(A) 
 lmiterm([lmiPL32 3 4 Dk2],sth*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL32 4 4 S],1,sth*A2,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL32 4 4 Bk2],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2)  
%=====
 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 
%-----
 lmiDk1=-newlmi;                        
 lmiterm([lmiDk1 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk1 2 1 Dk1],1,1);          %#6:Dk 
%-----
 lmiDk2=-newlmi;                        
 lmiterm([lmiDk2 1 1 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 2 0],1e2);            %#6:1e2 
 lmiterm([lmiDk2 2 1 Dk2],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);            %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);             %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof


図2 回転体のLPV制御

2^\circ 回転体のパラメータ変動を出力FBによるH^\infty制御で抑制したシミュレーションプログラムを以下に示す。これを実行し1^\circと比較せよ。

MATLAB
%cSPIN_of_hinf.m
%-----
 clear all close all
 J1=1; J2=1; J3=0.5;
 OMnom=2*pi; OMmin=0*OMnom; OMmax=2*OMnom;
%  sim("SPIN0")
 A1=[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); C=eye(2); D=zeros(2,2);
 S0=[zeros(2,2) B;C D];
 S1=zeros(4,4); S1(1:2,1:2)=A1;
%  sim("SPIN")
%-----
 A=OMnom*[0 (J2-J3)/J1;(J3-J1)/J2 0];
 B=diag([1/J1 1/J2]); 
 B1=B; B2=B;
 C1=[eye(2,2);zeros(2,2)]; 
 D11=zeros(4,2); 
 D12=[zeros(2,2);eye(2,2)];
 C2=eye(2,2); 
 D21=zeros(2,2); 
 D22=zeros(2,2);
 %-----
 alpha=1; r=3; th=pi/4; 
 LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th);
 cobj=zeros(1,decnbr(LMIs)); 
 cobj(1)=1; 
 [cost,xopt]=mincx(LMIs,cobj);  
 gopt=dec2mat(LMIs,xopt,1)
 R=dec2mat(LMIs,xopt,2); 
 S=dec2mat(LMIs,xopt,3); 
 ak=dec2mat(LMIs,xopt,4); 
 bk=dec2mat(LMIs,xopt,5); 
 ck=dec2mat(LMIs,xopt,6); 
 dk=dec2mat(LMIs,xopt,7); 
 [u,sd,v]=svd(eye(size(A,1))-R*S); 
 sd=diag(sqrt(1./diag(sd))); 
 Ni=sd*v'; Mti=u*sd; 
 AK=Ni*(ak-S*(A-B2*dk*C2)*R-bk*C2*R-S*B2*ck)*Mti; 
 BK=Ni*(bk-S*B2*dk); 
 CK=(ck-dk*C2*R)*Mti; 
 DK=dk; 
 K=[AK BK;CK DK];
%-----
 pl=eig(A)
 ACL=[A+B2*DK*C2 B2*CK;
      BK*C2 AK];
 plCL=eig(ACL)
 figure(1)
 dregion(alpha,0,r,th,r*[-1,1,-1,1])  
 plot(real(pl),imag(pl),'x',real(plCL),imag(plCL),'*')
%sim("SPIN_of_hinf")
 sim("SPIN_of_hinf_2015a") 
%-----
function LMIs=of_synlmi6(A,B1,B2,C1,C2,D11,D12,D21,D22,alpha,r,th)
 [n,m]=size(B2);  [p,n]=size(C2);
 setlmis([]); 
 gam=lmivar(1,[1 0]);  
 [R,xxx,Rdec]=lmivar(1,[n 1]); 
 [S,xxx,Sdec]=lmivar(1,[n 1]); 
 Ak=lmivar(2,[n n]); 
 Bk=lmivar(2,[n p]); 
 Ck=lmivar(2,[m n]); 
 Dk=lmivar(2,[m p]); 
% 
 lmiRS=newlmi;
 lmiterm([lmiRS 1 1 R],A,1,'s');       %#1:R*A'+AR 
 lmiterm([lmiRS 1 1 Ck],B2,1,'s');     %#1:Ck'*B2'+B2*Ck 
 lmiterm([lmiRS 2 1 0],A');            %#1:A' 
 lmiterm([lmiRS 2 1 Ak],1,1);          %#1:Ak 
 lmiterm([lmiRS 2 1 -Dk],C2',B2');     %#1:C2'*Dk'*B2' 
 lmiterm([lmiRS 2 2 S],1,A,'s');       %#1:A'*S+S*A 
 lmiterm([lmiRS 2 2 Bk],1,C2,'s');     %#1:C2'*Bk'+Bk*C2 
 lmiterm([lmiRS 1 3 0],B1);            %#1:B1 
 lmiterm([lmiRS 1 3 Dk],B2,D21);       %#1:B2*Dk*D21 
 lmiterm([lmiRS 2 3 S],1,B1);          %#1:S*B1 
 lmiterm([lmiRS 2 3 Bk],1,D21);        %#1:Bk*D21 
 lmiterm([lmiRS 3 3 gam],-1,1);        %#1:-gam 
 lmiterm([lmiRS 4 1 R],C1,1);          %#1:C1*R 
 lmiterm([lmiRS 4 1 Ck],D12,1);        %#1:D12*Ck 
 lmiterm([lmiRS 4 2 0],C1);            %#1:C1 
 lmiterm([lmiRS 4 2 Dk],D12,C2);       %#1:D12*Dk*C2 
 lmiterm([lmiRS 4 3 0],D11);           %#1:D11 
 lmiterm([lmiRS 4 3 Dk],D12,D21);      %#1:D12*Dk*D21 
 lmiterm([lmiRS 4 4 gam],-1,1);        %#1:-gam 
%-----
 lmiPL1=newlmi; 
 lmiterm([lmiPL1 1 1 R],A,1,'s');      %#2:R*A'+A*R 
 lmiterm([lmiPL1 1 1 Ck],B2,1,'s');    %#2:Ck'*B2'+B2*Ck 
 lmiterm([lmiPL1 2 1 Ak],1,1);         %#2:Ak 
 lmiterm([lmiPL1 1 2 0],A);            %#2:A 
 lmiterm([lmiPL1 1 2 Dk],B2,C2);       %#2:B2*Dk*C2 
 lmiterm([lmiPL1 2 2 S],1,A,'s');      %#2:A'*S+S*A 
 lmiterm([lmiPL1 2 2 Bk],1,C2,'s');    %#2:C2'*Bk'+Bk*C2 
% 
 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 
%-----
 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],B2,1);        %#3:B2*Ck 
 lmiterm([lmiPL2 2 3 Ak],1,1);         %#3:Ak 
 lmiterm([lmiPL2 1 4 0],A);            %#3:A 
 lmiterm([lmiPL2 1 4 Dk],B2,C2);       %#3:B2*Dk*C2 
 lmiterm([lmiPL2 2 4 S],1,A);          %#3:S*A 
 lmiterm([lmiPL2 2 4 Bk],1,C2);        %#3:Bk*C2 
% 
 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 
%-----
 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*B2,1,'s');%#4:sth*(Ck'*B2'+B2*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*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 2 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 2 2 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
% 
%  lmiterm([lmiPL3 1 3 R],1,cth*A');     %#4:cth*(R*A')
%  lmiterm([lmiPL3 1 3 R],-cth*A,1);     %#4:cth*(-A*R) 
%  lmiterm([lmiPL3 1 3 -Ck],cth*B2',1);  %#4:cth*(Ck'*B2') 
%  lmiterm([lmiPL3 1 3 Ck],-cth*B2,1);   %#4:cth*(-B2*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*B2,1);     %#1:cth*(B*Ck) 
 lmiterm([lmiPL3 1 3 -Ck],-cth*B2',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*B2,C2);   %#4:cth*(B2*Dk*C2) 
 lmiterm([lmiPL3 2 3 -Dk],-cth*C2',B2');%#4:cth*(-C2'*Dk'*B2') 
 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*C2);    %#4:cth*(Bk*C2) 
 lmiterm([lmiPL3 2 4 -Bk],-cth*C2',1); %#4:cth*(-C2'*Bk') 
% 
 lmiterm([lmiPL3 3 3 R],sth*A,1,'s');  %#4:sth*(R*A'+A*R)
 lmiterm([lmiPL3 3 3 Ck],sth*B2,1,'s');%#4:sth*(Ck'*B2'+B2*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*B2,C2);   %#4:sth*(B2*Dk*C2) 
 lmiterm([lmiPL3 4 4 S],1,sth*A,'s');  %#4:sth*(A'*S+S*A) 
 lmiterm([lmiPL3 4 4 Bk],1,sth*C2,'s');%#4:sth*(C2'*Bk'+Bk*C2) 
%-----
 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 
%-----
 lmiDk=-newlmi;                        
 lmiterm([lmiDk 1 1 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 2 0],1e2);           %#6:1e2 
 lmiterm([lmiDk 2 1 Dk],1,1);          %#6:Dk 
%-----
 lmig=newlmi;                          
 lmiterm([lmig,1,1,gam],1,1);          %#7:gam 
 lmiterm([lmig,1,1,0],-1e3);           %#7:1e3 
 LMIs=getlmis;
end
%-----
%eof


図3 回転体のH_\infty制御

3^\circ 1^\circのLPV制御において、次のようにスケジューリングを止めた場合、これを実行し1^\circ2^\circと比較せよ。

Note B52 閉ループ系の時変系としての安定性

●次の時変自由系の漸近安定性を考えます。

\displaystyle{(1)\quad \dot{x}(t)=A(t)x(t) }

平衡状態x=0の近傍{\cal X}において、リャプノフ関数とよばれる

\displaystyle{(2)\quad \left\{\begin{array}{ll} V(x)>0 & (x\in{\cal X}, x\ne0) \\ V(x)=0 & (x=0) \end{array}\right. }

を構成して

\displaystyle{(3)\quad \frac{d}{dt}V(x(t))<0 }

を示すことができれば、平衡状態は漸近安定となることが知られています。

●LPVモデル

\displaystyle{(4)\quad \underbrace{\left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right]}_{\dot{\bar x}(t)} =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)} }

において、A_{CL1}A_{CL2}を個別に安定行列としたとすると

\displaystyle{(5)\quad \exists X_1>0:X_1A_{CL1}+A_{CL1}^TX_1<0 }
\displaystyle{(6)\quad \exists X_2>0:X_2A_{CL2}+A_{CL2}^TX_2<0 }

から、個別にリャプノフ関数の候補

\displaystyle{(7)\quad V_1(\bar{x}(t))=\bar{x}^T(t)X_1\bar{x}(t)}
\displaystyle{(8)\quad V_2(\bar{x}(t))=\bar{x}^T(t)X_2\bar{x}(t)}

が得られますが、(4)のリャプノフ関数を構成したことにはなりません。一方

\displaystyle{(9)\quad \exists X>0: \begin{array}{l} XA_{CL1}+A_{CL1}^TX<0\\ XA_{CL2}+A_{CL2}^TX<0 \end{array} }

となる共通のX>0を見つけることができれば

\displaystyle{(10)\quad V(\bar{x}(t))=\bar{x}^T(t)X\bar{x}(t) }

に対して

\displaystyle{(11)\quad \begin{array}{l} \frac{d}{dt}V(\bar{x}(t))=\bar{x}^T(t)(A_{CL}^T(\Omega(t))X+XA_{CL}(\Omega(t)))\bar{x}(t)\\\ =\bar{x}^T(t)( ( ( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} )^TX\\ +X( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} ) )\bar{x}(t)\\ =p_1(\Omega(t)) \underbrace{\bar{x}^T(t)(A_{CL1}^TX+XA_{CL1})\bar{x}(t)}_{<0}\\ +p_2(\Omega(t)) \underbrace{\bar{x}^T(t)(A_{CL2}^TX+XA_{CL2})\bar{x}(t)}_{<0}<0 \end{array} }

となって、リャプノフ関数を構成したことになります。

●LPVモデル

\displaystyle{(12)\quad P_{CL}: \left\{\begin{array}{l} \underbrace{\left[\begin{array}{c} \dot{x}(t) \\ \dot{x}_K(t) \end{array}\right]}_{\dot{\bar x}(t)} =\underbrace{(p_1(\Omega(t))A_{CL1} +p_2(\Omega(t))A_{CL2} )}_{A_{CL}(\Omega(t))} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)}\\ + \underbrace{ \left[\begin{array}{ccc} B_1 \\ 0 \end{array}\right] }_{B_{CL}} u_1(t)\\ y_1(t) = \underbrace{ \left[\begin{array}{ccc} C_1+D_{12}D_KC_2 & D_{12}C_K \end{array}\right] }_{C_{CL}} \underbrace{\left[\begin{array}{c} x(t) \\ x_K(t) \end{array}\right]}_{\bar{x}(t)} \end{array}\right. }

に対して、各端点モデルの閉ループ系において、H_\inftyノルムは\gammaより小であるとすると

\displaystyle{(13)\quad \exists X_1>0:\ \left[\begin{array}{ccc} A_{CL1}^TX_1+X_1A_{CL1} & X_1B_{CL} & C_{CL}^T \\ B_{CL}^TX_1 & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }
\displaystyle{(14)\quad \exists X_2>0:\ \left[\begin{array}{ccc} A_{CL2}^TX_2+X_2A_{CL2} & X_2B_{CL} & C_{CL}^T \\ B_{CL}^TX_2 & -\gamma I & D_{CL}^T \\ C_{CL} & D_{CL} & -\gamma I \end{array}\right]<0 }

が成り立ちます。いま、共通解X_1=X_2=X>0が求まっているとしますと

\displaystyle{(15)\quad \left[\begin{array}{ccc} A_{CL1}^TX+XA_{CL1} & XB_{CL} & C_{CL}^T \\ B_{CL}^TX & -\gamma^2 I & D_{CL}^T \\ C_{CL} & D_{CL} &-I \end{array}\right]<0 }
\displaystyle{ \Leftrightarrow \left[\begin{array}{cc} A_{CL1}^TX+XA_{CL1} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] < \left[\begin{array}{cc} C_{CL}^T & 0 \\ D_{CL}^T & I \end{array}\right] \left[\begin{array}{cc} -I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] }
\displaystyle{(16)\quad \left[\begin{array}{ccc} A_{CL1}^TX+XA_{CL1} & XB & C_{CL}^T \\ B_{CL}^TX & -\gamma^2 I & D_{CL}^T \\ C_{CL} & D_{CL} &-I \end{array}\right]<0 }
\displaystyle{ \Leftrightarrow \left[\begin{array}{cc} A_{CL2}^TX+XA_{CL2} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] < \left[\begin{array}{cc} C_{CL}^T & 0 \\ D_{CL}^T & I \end{array}\right] \left[\begin{array}{cc} -I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] }

に注意して

\displaystyle{(17)\quad \dot{V}(\bar{x}(t))=\frac{d}{dt}(\bar{x}^T(t)X\bar{x}(t))= }
\displaystyle{ \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} \begin{array}{c} ( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} )^TX\\ +X( p_1(\Omega(t))A_{CL1}+p_2(\Omega(t))A_{CL2} ) \end{array} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ =p_1(\Omega(t)) \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} A_{CL1}^TX+XA_{CL1} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ +p_2(\Omega(t)) \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} A_{CL2}^TX+XA_{CL2} & XB_{CL} \\ B_{CL}^TX & 0 \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ < \underbrace{(p_1(\Omega(t))+p_2(\Omega(t)))}_1 \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right]^T \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right]^T \left[\begin{array}{cc} - I & 0 \\ 0 & \gamma^2 I \end{array}\right] \left[\begin{array}{cc} C_{CL} & D_{CL} \\ 0 & I \end{array}\right] \left[\begin{array}{c} \bar{x}(t) \\ u_1(t) \end{array}\right] }
\displaystyle{ =\gamma^2 u_1^T(t)u_1(t)-y_1^T(t)y_1(t) }

を得ます。すなわち時変系としての閉ループ系において

\displaystyle{(18)\quad \underbrace{\frac{d}{dt}(\bar{x}^TX\bar{x})}_{\dot{V}(\bar{x})} <\underbrace{\gamma^2 u_1^Tu_1-y_1^Ty_1}_{s(u,y)} }

が成り立ち

\displaystyle{(19)\quad \sup_{u\in{\cal L}_2}\frac{||y_1(t)||_2}{||u_1(t)||_2}<\gamma }

が成り立ちます。これは時不変系の場合にはH_\inftyノルムですが、時変系の場合は{\cal L}_2ゲインとよびます。