我们要实现的就利用LMI进行求解。首先我们要用setlmis([])命令初始化一个LMI系统。接下来,我们就要设定矩阵变量了。采用函数为lmivar语法:X=lmivar(type,struct)type=1:定义块对角的对称矩阵。每一个对角块或者是全矩阵任意对称矩阵,标量单位矩阵的乘积,或者是零阵。如果X有R个对角块,那么后面这个struct就应该是一个Rx2阶的的矩阵,在此矩阵中,struct(r,1)表示第r个块的大小,struct(r,2)表示第r个块的类型1--全矩阵,0--标量,-1--零阵)。比如一个矩阵有两个对角块,其中一个是2x2的全对称矩阵,第二个是1x1的一个标量,那么该矩阵变量应该表示为X=lmivar(1,[21;10])。type=2:mxn阶的矩阵,只需要写作struct=[m,n]即可。type=3:其它类型。针对类型3,X的每一个条目(eachentryofX)被定义为0或者是+(-)xn,此处xn代表了第n个决策变量。那么针对我们的例子,我们如此定义变量:%Qisasymmetricmatrix,hasablocksizeof2andthisblockissymmetricQ=lmivar(1,[21]);%S1asymmericmatrix,size2S1=lmivar(1,[21]);%S2is1by1matrixS2=lmivar(1,[10]);%Typeof2,size1by2M=lmivar(2,[12]);定义完成变量之后,我们就该用lmiterm来描述LMI中的每一个项了。Matlab的官方文档提示我们,如果要描述一个LMI只需要描述上三角或者下三角元素就可以了,否则会描述成另一个LMI。WhendescribinganLMIwithseveralblocks,remembertospecifyonlythetermsintheblocksonorbelowthediagonal(orequivalently,onlythetermsinblocksonorabovethediagonal).语法为:lmiterm(termID,A,B,flag)termID是一个四维整数向量,来表示该项的位置和包含了哪些矩阵变量。termID(1)可以为+p或者-p,+p代表了这个项位于第p个线性矩阵不等式的左边,-p代表了这个项位于第p个线性矩阵不等式的右边。注意:按照惯例来讲,左边通常指较小的那边。termID(2:3):1、对于外部变量来说,取值为[0,0];2、对于左边或者右边的内部变量来说,如果该项在(i,j)位置,取值[i,j]termID(4):1、对于外部变量,取值为02、对于A*X*B,取值X3、对于A*X'*B,取值-Xflag(可选,值为s):因为:(A*X*B)+(A*X*B)T=A*X*B+B'*X'*A',所以采用s来进行简写。比如:针对A*X+X'*A'我们采用笨方法:lmiterm([111X],A,1)lmiterm([111-X],1,A')那么简写就是lmiterm([111X],A,1,'s')接下来我们就看该论文中的算例吧:(1,1)位置是-Q+Bd*S2*Bd'+Ad*S1*Ad';我们应该表示为:%posin(1,1)lmiterm([111Q],-1,1);lmiterm([111S2],Bd,Bd');lmiterm([111S1],Ad,Ad');其它位置仿照写就行了,不懂了多看帮助文档。把每一个项都定义以后,要记得lmis=getlmis;[tmin,feas]=feasp(lmis)getlmis:是在完成定义变量和项之后,LMI系统的内部表示就可以通过此命令获得(AftercompletingthedescriptionofagivenLMIsystemwithlmivarandlmiterm,itsinternalrepresentationlmisysisobtainedwiththecommand)。feasp是调用feasp求解器,看有没有可行解。feas就是可行解。下面我把代码贴上去,那些常数矩阵都在此源程序中定义了。A=[21;01];Ad=[0.20.1;00.1];B1=[0.10.1]';B2=[11]';Bd=[0.10.1]';C=[1,1];Cd=[0.1,0.1];D11=0.1;D12=1;Dd=0.1;gammar=1;%InitialaLMIsystemsetlmis([]);%DefineVariables%Qisasymmetricmatrix,hasablocksizeof2andthisblockissymmetricQ=lmivar(1,[21]);%S1asymmericmatrix,size2S1=lmivar(1,[21]);%S2is1by1matrixS2=lmivar(1,[10]);%Typeof2,size1by2M=lmivar(2,[12]);%Q,S1,S20lmiterm([-211Q],1,1);lmiterm([-311S1],1,1);lmiterm([-411S2],1,1);%posin(1,1)lmiterm([111Q],-1,1);lmiterm([111S2],Bd,Bd');lmiterm([111S1],Ad,Ad');%pos(1,2)lmiterm([112Q],A,1);lmiterm([112M],B2,1);%pos(1,3)lmiterm([1130],B1);%pos(1,4)lmiterm([114S2],Bd,Dd');lmiterm([114S1],Ad,Cd');%pos(2,2)lmiterm([122Q],-1,1);%pos(2,4)lmiterm([124Q],1,C');lmiterm([124-M],1,D12');%pos(2,5)lmiterm([125-M],1,1);%pos(2,6)lmiterm([126Q],1,1);%pos(3,3)lmiterm([1330],-(gammar^2));%pos(3,4)lmiterm([1340],D11');%pos(4,4)lmiterm([1440],-1);lmiterm([144S1],Cd,Cd');lmiterm([144S2],Dd,Dd');lmiterm([155S2],-1,1);lmiterm([166S1],-1,1);lmis=getlmis;[tmin,feas]=feasp(lmis)运行后,就调用dec2mat把决策变量转化为矩阵形式。Q=dec2mat(lmis,feas,Q)Q=1.9253-2.2338-2.23389.1054可以看到,和论文中的一样。