(1)使用环境:matlab 2014a 。LMI工具包不用安装,可以直接使用。
(2)LMI toolbox: Linear Matrix Inequality,线性矩阵不等式。
(3)如何定义一个LMI系统:
1.初始化一个 LMI 系统
setlmis([]) 注意这只是定义一个LMI系统,并不是定义了一个 LMI不等式。LMI不等式需要用newlmi函数定义。如果想把一个之前定义好的LMI系统LMIS0引入进来setlmis(LMIS0)2.定义LMI变量X = lmivar(1,[6 1]); S = lmivar(1,[2 0;2 1]);上面的函数定义了两个矩阵型LMI矩阵变量 X 和 Slmivar() 函数说明:第一个参数表示矩阵的类型,可以是1,2,31:对称块对角结构X3 = lmivar(1,[5 1;1 0;2 0]); % Type 12:矩形结构如lmivar(2,[3 5])表示大小为3*5的普通矩阵3:一般结构为了有助于描述这一类型的矩阵变量,lmivar提供了两个额外的输出,它的一般表达式是:[X,n,sX]=lmivar(type,struct) 其中n和sX是提供的两个额外输出n表示到目前为止使用的决策变量的总数,sX表明了变量X中的每一个元依赖于决策变量的哪个元。例:定义,其中X1和X2分别是2*3维和3*2维的长方矩阵
(第三种结构可以用来表示矩阵型中间变量,例如上面的X变量依赖于矩阵变量X1和X2。可以用下面的代码表示这个中间变量)%定义X1和X2 setlmis([]) [X1,n,sX1] = lmivar(2,[2 3]); [X2,n,sX2] = lmivar(2,[3 2]); %定义第三类型矩阵X [X,n,sX] = lmivar(3,[sX1,zeros(2);zeros(3),sX2]);
注意:用第三种方法表示变量时,被表示变量只能用 已声明变量的正一倍或负一倍或转置或0矩阵表示。(each entry of X is specified independently as either 0, xn, or –xn where xn denotes the n-th decision variable in the problem.)
例子说明:setlmis([]) [R,~,SR]=lmivar(1,[3 1]); [P,~,SP]=lmivar(1,[3 1]); A=[2,0,0;0,2,0;0,0,2]; [ph1,~,Sph1]=lmivar(3,A*SR);%错误的,不会报错,但这样得到的解ph1不会等于 A*变量R [ph2,~,Sph2]=lmivar(3,2*SR);%也是错误的,不会报错,但这样得到的解ph2不会等于变量R的二倍 [ph3,~,Sph3]=lmivar(3,-SR);%正确的,解出的ph3会等于-R [ph4,~,Sph4]=lmivar(3,SR');%正确的,解出的ph4会等于变量R的转置第二组变量([]内的内容): 描述矩阵中的块矩阵的结构以X为例:第一个参数数表示块矩阵的大小 6*6的块矩阵第二个参数表示块矩阵的形式,可以是1,0,-11:全对称块0:标量矩阵:即单位矩阵乘以常数-1:0矩阵以S为例:[] 中用;隔开的有两组数据,表示S的对角线上有两个矩阵块(S的例子)
3.定义LMI不等式中的每一个项(lmiterm)线性矩阵不等式(LMI)中的项:以这个LMI不等式为例,其中的项(lmiterm)有ATX + XA, CTSC, XB, and –S
定义lmiterm:lmiterm([1 1 1 1],1,A,'s'); %定义了ATX + XA lmiterm([1 1 1 2],C',C); %定义了CTSC lmiterm([1 1 2 1],1,B); %定义了XB lmiterm([1 2 2 2],-1,1); %定义了–Slmiterm()函数说明:第一个参数是一个四维向量:向量中的第一个参数:表示这个项属于哪个不等式,正数表示该项在不等式的左边,负数表示在不等式的右边。向量中的第二个和第三个参数:表示该项属于矩阵中的哪个矩阵块向量中的第四个参数:表示该项中包含哪个LMI变量(可以参考2.定义LMI变量)K表示包含第K个LMI变量(也就是第K个被定义的LMI变量,如2中X是第一个LMI变量,S是第二个LMI变量)-K表示包含第K个LMI变量的转置0表示单位矩阵I例如上面第一个lmiterm:lmiterm([1 1 1 1],1,A,'s'); %定义了ATX + XA中的[1 1 1 1]表示该项在第一个不等式的左边矩阵的 (1,1)处的矩阵块中,包含第一个LMI变量(X)第二个参数和第三个参数:表示该项中矩阵变量两边乘上的系数:可以是常量值,也可以将矩阵作为系数。例如 lmiterm([1 1 1 2],C',C); %定义了CTSC 第二个和第三个参数表示矩阵变量(S)左乘矩阵C的转置,右乘矩阵C额外参数: lmiterm([1 1 1 1],1,A,'s'); %定义了ATX + XA中多了一个额外参数,'s'表示symmetry,即加上本项的转置。lmiterm([1 1 1 1],1,A);表示XA lmiterm([1 1 1 1],1,A,'s');表示该项加上自身的转置,所以该项为ATX + XA 在lmiterm函数中直接使用名称:四维向量中第一个参数如果是数字K则表示第K个LMI不等式,也可以直接用不等式的名称代替。例如:Xpos = newlmi; lmiterm([-Xpos 1 1 X],1,1); 表示定义了一个新LMI不等式,这次定义的项在Xpos不等式的右边部分。四维向量第四个参数如果是常数K,表示该项中含有第K个被定义的LMI变量。也可以直接用变量的名称作为这个参数。例如:lmiterm([-Slmi 1 1 S],1,1); 表示该项中包含的LMI变量是S4.得到问题的内部表示当LMI系统完全定义完成之后,即lmivar(变量),lmiterm(项),lmi(项)都定义完毕。使用下面的命令行结束定义。该命令行只能使用一次。LMISYS = getlmis;(4)LMI系统求解对于LMI Lab, 其中有三种求解器(solver): feasp,mincx和gevp。 每个求解器针对不同的问题: feasp:解决可行性问题(feasibility problem),例如:A(x) mincx:在线性矩阵不等式的限制下解决最小化问题(Minimization of a linear objective under LMI constraints),例如最小化c'x,在限制条件A(x) < B(x)下。 gevp:解决广义特征值最小化问题。例如:最小化lambda1.利用feas得到LMI的解lmis = getlmis; [tmin, feas] = feasp(lmis) %该式中的feas就是求得的解2.运行后,就调用dec2mat把决策变量转化为矩阵形式。 Q = dec2mat(lmis, feas, Q) Q = 1.9253 -2.2338 -2.2338 9.1054LMI toolbox的更详尽的使用可以参考以下连接:http://read.pudn.com/downloads104/ebook/428541/LMI%20%E5%B7%A5%E5%85%B7%E7%AE%B1%E4%BB%8B%E7%BB%8D.pdfmatlab官网的相关资料:https://cn.mathworks.com/help/robust/ug/specify-lmi-system-at-the-command-line.htmlhttps://cn.mathworks.com/help/robust/lmis.html
版权声明:本文为qq_28093585原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。