LMI工具箱求解线性不等式:
例题:求解AP+PA’-3B*B’ < 0
//可以写成一个函数
setlmis([])//初始化LMI系统
A = [0,1,0,0;0,0,0,0;0,0,0,1;0,0,0,0];%4x4
B = [0,0;1,0;0,0;0,1];
C = -3* (B*B');//声明一些常数
P = lmivar(1,[4,1]);//声明一个新的矩阵变量,前面的1表示是对称矩阵,表示4x4的对称矩阵。
//前面数字要是2的话,可以表示任意大小的矩阵,如lmivar(2,[2,3]),表示一个2x3的矩阵.
//还可以是3,以及安装分块矩阵写法,确定矩阵。
lmiterm([1,1,1,P],A,1,'s');//第一个1是说的是第一个不等式左边,接下来两个1说的是[1,1]位置。P是变量,后面的A,1是参与运算的量,以及最后's'表示的是本身加转置。
//所以这一项表示AP+PA'<0;A在左,1在右,即AP1
lmiterm([1,1,1,0],C);//这一项也是和上面相同位置,后面的0表示这项是外部量,即C
//表示:AP+PA'-3BB'<0
lmiterm([-2,1,1,P],1,1);//表示第二个不等式右边,即0<P
//如果还有多个不等式就继续写3,4,5,。。。,唯一注意的就是LMI中默认<,注意正负号就好。
lmisys = getlmis;//获取LMI的内部描述
//求解
[tmin,xfeas] = feasp(lmisys);
if(tmin < 0)//解有效
disp('feasible');
P = dec2mat(lmisys,xfeas,P);//取出P
X=P*A' + A*P-3*(B*B');//记录了一下不等式
else//解无效
P = nan;
X =nan;
end
[x,y] = eig(X)//分别求出特征值和特征向量,查看是否为负,用于验证。