clear;
clc;
%定义A矩阵初值
A=[0 10 2;-1 1 0;0 2 -5];
%定义B矩阵初值
B1=[1 0 1]';
B2=[0 1 0]';
%定义C矩阵初值
C1=[1 0 0;0 0 0];
C2=[0 1 0];
%定义D矩阵的初值
D11=[0 0 ]';
D12=[0 1 ]';
D21=2;
D22=0;
%定义LMI变量
setlmis([])
r=lmivar(1,[1 1]);
X=lmivar(1,[3 1]);
Y=lmivar(1,[3 1]);
a=lmivar(2,[3 3]);
b=lmivar(2,[3 1]);
c=lmivar(2,[1 3]);
d=lmivar(2,[1 1]);
%%%%%%%建立第一个LMI%%%%%
%不等式左边为分块对称矩阵,故只需要表示右上角或左下角块即可
%第1行第1列 A*X+X*A'+B2*c+(B2*c)'
lmiterm([1 1 1 X],A,1);
lmiterm([1 1 1 X],1,A');
lmiterm([1 1 1 c],B2,1);
lmiterm([1 1 1 -c],1,B2');
%第1行第2列 a'+A+B2*d*C2
lmiterm([1 1 2 -a],1,1);
lmiterm([1 1 2 0],A);
lmiterm([1 1 2 d],B2,C2);
%第1行第3列 B1 + B2*d*D21
lmiterm([1 1 3 0],B1);
lmiterm([1 1 3 d],B2,D21);
%第1行第4列(C1*X+D12*c)'
lmiterm([1 1 4 -X],1,C1');
lmiterm([1 1 4 -c],1,D12');
%第2行第2列A'*Y+Y*A+b*C2+(b*C2)'
lmiterm([1 2 2 Y],A',1);
lmiterm([1 2 2 Y],1,A);
lmiterm([1 2 2 b],1,C2);
lmiterm([1 2 2 -b],C2',1);
%第2行第3列 Y*B1+b*D21
lmiterm([1 2 3 Y],1,B1);
lmiterm([1 2 3 b],1 ,D21);
%第2行第4列(C1+D12*d*C2)'
lmiterm([1 2 4 0],C1');
lmiterm([1 2 4 -d],C2',D12');
%第3行第3列-r
lmiterm([1 3 3 r],-1,1);
%第3行第4列 (D11+D12*d*D21)'
lmiterm([1 3 4 0],D11);
lmiterm([1 3 4 -d],D21',D12');
%第4行第4列 -r
lmiterm([1 4 4 r],-1,1);
%%%%%%%建立第二个LMI%%%%%%%%%
%不等式为[X I;I Y]>0;LMI标准形式为 0<[X I;I Y];矩阵在右边,故type=-2.
lmiterm([-2 1 1 X],1,1);
lmiterm([-2 1 2 0],1);
lmiterm([-2 2 2 Y],1,1);
lmisys=getlmis;
n=decnbr(lmisys);
t=zeros(n,1);
for i=1:n
[Li]=defcx(lmisys,i,r);
t(i)=Li;
end
[ropt xopt]=mincx(lmisys,t) ;
%可行解结果输出
r=dec2mat(lmisys,xopt,r)
X=dec2mat(lmisys,xopt,X)
Y=dec2mat(lmisys,xopt,Y)
a=dec2mat(lmisys,xopt,a)
b=dec2mat(lmisys,xopt,b)
c=dec2mat(lmisys,xopt,c)
d=dec2mat(lmisys,xopt,d)
%求解M和N,对(I-XY)进行满秩分解
F=eye(size(X*Y))-X*Y;
%A=M*N;
[M,N]=mypq(F);
N=N';
%求解输出反馈矩阵K
Dc=0
Cc=(c-Dc*C2*X)*inv(M')
Bc=inv(N)*(b-Y*B2*Dc)
Ac=inv(N)*(a-Y*(A+B2*Dc*C2)*X)*inv(M')-Bc*C2*X*inv(M')-inv(N)*Y*B2*Cc
k=[Ac Bc;Cc Dc]
%利用函数ltisys构造P广义系统
P=ltisys(A,[B1 B2],[C1;C2],[D11 D12;D21 D22])
%再由slft(P,k)得到闭环系统
clsys=slft(P,k)
%求解闭环系统极点
cpole=spol(clsys);
norminf(clsys);
figure(1);splot(clsys,'st',[0,100]);
评论1