1、 打造最优秀、专业和权威的Matlab技术交流平台! http:/ 线性矩阵不等式(LMI)的MATLAB求解 作者:dynamic 时间:2008.12.10 版权:All Rights Reserved By Matlab Sky联盟-打造最优秀、专业和权威的Matlab技术交流平台! 网址:http:/ /com/org/net 邮箱: QQ群:23830382 40510634 16233891(满了) 44851559(满了) 论坛拥有40多个专业版块,内容涉及资料下载、视频教学、数学建模、数学运算、程序设计、GUI开发、simulink仿真、统计概率、拟合优化、扩展编程、算法研究
2、、控制系统、信号通信、图像处理、经济金融、生物化学、航空航天、人工智能、汽车设计、机械自动化、毕业设计等几十个方面! 请相信我们:1.拥有绝对优秀的技术人员,热情的版主,严谨负责的管理团队 2.免费提供技术交流和在线解答 Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ 近年来,线性矩阵不等式广泛应用于解决系统与控制中的一系列问题。随着解决线LMI内点法的提出以及Matlab中LMI控制工具箱的推广,LMI这一工具已经受到人重视。LMI控制工具箱已经成为了从控制工程到系统识别设计和结构设计等诸多领域的一个强大的设计工具。由于许多控制问题都可以转化为一个 LM
3、I 系统的可行性问题,或者是一个具有LMI约束大的徒优化问题,应用LMI来解决系统和控制问题已经成为这些领域中的一大研究热点。 LMI控制工具箱,采用内点法的LMI求解器,这些求解器比经典的凸优化算法速度有了显著提高。另方方面,它采用了有效的LMI结构化表示,在求解和计算领域做出了重大贡献。 LMI基础知识3 一、LMI的一般表示3 二、描述LMI的相关术语.4 三、3类标准的LMI控制问题5 1.可行性问题.5 2.线性目标最小化问题5 3.广义特征值最小化问题5 LMI工具箱介绍和使用6 一、LMI工具箱概述6 1.系统描述.6 2.信息检.6 3.问题求解.6 4.结果验证.6 二、LM
4、I工具箱函数列表8 1.确定LMI系统的函数8 2.对LMI变量的操作8 3.LMI解算器.8 4.LMI结果验证与修改.8 5.LMI系统信息的提取.8 三、LMI工具箱函数详解9 1.确定LMI系统的函数9 2.对LMI变量的操作13 3.LMI求解器命令.14 4.结果验证和修改21 5.LMI系统信息提取.24 LMI系统实例分析25 命令行形式解答25 GUI形式解答27 Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ LMI基础知识 一、LMI的一般表示 一个LMI就是具有形式 011()0(1)mmFxFxFxF=+0,X是不等式的右边,而0
5、是右边,也就是说 LMI系统一般总是使用“ 使用Matlab的LMI工具箱函数编程如下,现在看不懂不要紧: %具体函数的意义和用法在后面会详细介绍 %初始化LMI系统 setlmi() %定义决策变量 X=lmivar(1,6,1); S=lmivar(1,2 0;2 1); %添加LMI内因子的项 %注意只要给出右上角(或左下角)的即可 lmiterm(1 1 1 X,1,A,s); lmiterm(1 1 1 S,C,C); lmiterm(1 1 2 X,1,B); lmiterm(1 2 2 S,-1,1) % lmiterm(-2 1 1 X,1,1); % lmiterm(-3 1
6、 1 S,1,1); lmiterm(3 1 1 0,1); % lmisys=getlmis; Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ 二、LMI工具箱函数列表 1.确定LMI系统的函数 setlmis 初始化LMI系统 lmivar 定义矩阵变量 lmiterm 确定LMI系统中每一项的内容 newlmi 多LMI系统中添加新的LMI getlmis 获得LMI系统的内部描述 lmiedit 通过GUI界面确定LMI系统 2.对LMI变量的操作 dec2mat 将求解器的输出转化为矩阵变量值 mat2dec 通过给定的矩阵变量值返回决策向量 3
7、.LMI解算器 feasp 验证LMI的可行性 mincx LMI限制下线性目标的极小值 defcx 在mincx命令中第一CTx目标 gevp LMI限制下的广义特征值最小化 4.LMI结果验证与修改 evallmi 由决策变量的给定值来验证所有的变量项 showlmi 返回一个已经评估的LMI的左右边 dellmi 从系统中删除一个LMI delmvar 从问题中移除一个矩阵变量 setmvar 将一个矩阵变量赋予指定值 5.LMI系统信息的提取 decinfo 以决策变量的形式表示每个输入的矩阵变量 decnbr 得到决策变量的个数 lmiinfo 查询现存LMI系统的信息 lminbr
8、 得到问题中LMI的个数 mntnbr 得到问题中矩阵变量的个数 Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ 三、LMI工具箱函数详解 1.确定LMI系统的函数 (1)setlmis()或者setlmis(lmi0) 在通过lmivar以及lmiterm描述一个LMI系统之前,利用setlmis初始化其内部表示。为一个已经存在的LMI系统中添加新描述,使用后者,其中lmi0表示已存在的LMI系统,之后的lmivar和lmiterm被用来在lmi0中添加新的变量和项。 (2)X,n,sX=lmivar(type,struct) 为 LMI问题定义矩阵变量
9、,其中 type 和 struct 是描述该矩阵变量的必须参数。type 确定变量 X 的类型,struct描述变量X的内容。 type=1:此时X是具有块对角化对称矩阵。X对角线上的每一个矩阵Di必须是方阵,注意标量也11的方阵。此时的矩阵变量X大体结果如下: 12 ()inDDXD=O必须是方阵 如果X具有n个对角块,那么struct是一个n2的矩阵: m=struct(i,1)表示第i个方阵(即Di)的大小,比如Di是55的方阵,那么struct(i,1)=5, n=struct(i,2) 表示Di的内容,n=-1表示Di是零矩阵,n=0表示标量,n=1表示满矩阵。 type=2:表示X
10、是一个mn的长方形矩阵,此时struct=m,n,很简单。 type=3:表示其他结构,一般用于复杂的LMI系统,正常情况使用的比较少,此时若X(i,j)=0,struct(i,j)=0,若X(i,j)=xk则struct(i,j)=k,若X(i,j)=-xk则struct(i,j)=-k,其中xk表示第k个决策变量。 type struct=m n 说明 m 第i个矩阵的大小 -1 零矩阵 0 标量 1 n 1 满矩阵 X必须是对角化的块对称矩阵,每个块也必须是方阵 2 m n X为mn的长方形矩阵,不能包含子块矩阵 3 Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台!
11、 http:/ 例 2、举个例子说明下吧,考虑有3个矩阵变量的LMI系统,其中X1是33的对称矩阵,X2是24的矩阵,X3具有下面的形式 122000000 Idd其中是一个任意的55的对称矩阵,1和2是标量,I2是22的单位矩阵,利用lmivar定义上述三个矩阵变量如下: %定义X1 X1=lmivar(1,3,1); %定义X2 X2=lmivar(2,2,4); %定义X3 %注意此时的X3(3,3)是算标量的,原因有二,一是它不满也不全为零,二是只需要2一个数据即可确定 X3=lmivar(1,5 1;1,0,2,0); 例3、下面考虑更复杂的矩阵变量,使用lmivar定义矩阵变量X
12、1122232X XXX=其中是 ,是3, 当然我们可以通过两个type=2和一个type=3来构成X,即 %由于Di不符合是方阵,故不能使用type=1来构造X X1,n,sX1=lmivar(2,2 3); X2,n,sX2=lmivar(2,3,2); %有X1和X1组合成X X=lmivar(3,sX1,zeros(2);zeros(3),sX2); (3)lmiterm(termID,A,B,flag) 确定LMI中每一项的内容,包括内外因子、常数项以及变量项。再次强调,在描述一个具有分块对称的LMI时,只需要确定右上角或者左下角即可。 termID:四元向量,确定该项的位置以及包含
13、的矩阵变量。 termID(1)表述所描述的项属于哪个LMI,它可取值为p或者-p,p代表该项位于第p个LMI的左边,而-p则代表该项位于第p个LMI的右边。我们再起强调,左边是指LMI较小的那一边。 termID(2:3)表示所描述的项所在LMI中块的位置,如果该项位于内因子的第(i,j)块,那么termID(2:3)=i,j;如果Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ 该项在外因子中,那么termID=0 0。 termID(4)表示所描述的项是常数项还是变量项。0代表常数项,k代表该项中包含第k个矩阵变量Xk,-k代表该项中包含第k个矩阵变量
14、Xk的转置XkT。 termID 取值 所描述的项 p 位于第p个LMI的左边 termID(1) -p 位于第p个LMI的右边 0 0 外因子 termID(2:3) i j 在内因子中的位置(i,j) 0 常数 Xk 项中包含第k个矩阵变量Xk termID(4) -Xk 项中包含第k个矩阵变量的转置XkT 参数A、B是描述该项包含的数据信息,具体可以看下面的表格: 所描述项 A B 外因子N N 省略 常数项C或者Q*Q C/ Q*Q 省略 变量项AXB或者AXBT A/A B/ B flag:是个可选参数,并且只能是s,它只对AXB+BTXTAT这种项有效,即可以一次性同时添加这两项,
15、命令如下: lmiterm(1 1 1 X,A,B,s); 当然可以分开写了 lmiterm(1 1 1 X,A,B); lmiterm(1 1 1 -X,B,A); 例4、看个例子吧,考虑LMI,给出这个LMI的描述 23111212 00TTT TTTTTAXAxEDDBX CXCCXCMMfXXBI+ +I的对称矩阵P,使得 11223312300120.81.51.40.9131.32.70.72.0TTTTTTAPPAAPPAAPPAAAA+其中,找出矩阵 ,满足该系统要求%显然该问题是可行解的问题,当然使用feasp求解 A=0.5 -0.2;0.1 -0.7; setlmis()
16、; X=lmivar(1,2,1); lmiterm(1 1 1 X,A,A); lmiterm(1 1 1 X,-1,1); lmiterm(1 1 1 0,1); lmiterm(-2 1 1 X,1,1);%不要忘记还有一个X0 lmisys=getlmis; tmin,xfeas=feasp(lmisys) 运行结果如下: tmin = -4.7117 xfeas = 110.2905 -11.5186 119.4186 由于tmin0和K,使得 ()()0TABKPPABKI+ decX(i,j)=0 X(i,j)=xk = decX(i,j)=k X(i,j)=-xk = decX
17、(i,j)=-k 当第二参数省略的时候,会出现交互是界面列所有的决策变量,要求你选择。 Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ LMI系统实例分析 命令行形式解答 例12、考虑一类由带时滞的Lure系统组成的具有N个节点的复杂网络(网络的每个节点都是一个具有相同参数的同类系统),基本模型如下所示 1()()()() (),1,2,NiiiiijjjxtAxtAxtdBfCxtchxtiN=+= L( )200.20.50.2,0.60.8120.50.20.34111111000,I(),1,21010010001dAABCHcd=其中单位阵对于这
18、类网络,可以利用Lyapunov函数的方法,采用解耦的方法将一个高维的LMI化为几个低维的LMI,从而得到整个网络达到同步的充分条件 ( )()0 0()20()()()00014TTdTdTiTTTNPAYPBCVdAcZQdAZIdBZdZXYYZNAcPPAcYYdXQVPQXYZlllll+=+=式1式2其中是H的特征根,故这里我们取1、和是LMI的矩阵变量Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ c=1; v=1; d=2; %lambda共有5个值,我们需要一个一个的验证,先验证lambda=0 lambda=0; C=0.6 0.8;
19、A=-2 0;-1 -2; Ad=-0.2 -0.5;0.5 -0.2; B=-0.2;-0.3; %A1为N的表达式中的A+c*lambda*Gamma那部分 Gamma= eye(size(A) A1=A+c*lambda*Gamma; setlmis(); %定义矩阵变量PQXYZ P=lmivar(1,2,1); Q=lmivar(1,2,1); X=lmivar(1,2,1); Y=lmivar(1,2,1); Z=lmivar(1,2,1); %添加(式1)LMI的项 lmiterm(1 1 1 P,1,A1,s); lmiterm(1 1 1 Y,1,1,s); lmiterm(
20、1 1 1 X,d,1); lmiterm(1 1 1 Q,1,1); lmiterm(1 1 2 P,1,Ad); lmiterm(1 1 2 Y,-1,1); lmiterm(1 1 3 P,-1,B); lmiterm(1 1 3 0,-v*C); lmiterm(1 1 4 Z,d*A1,1); lmiterm(1 2 2 Q,-1,1); lmiterm(1 2 4 Z,d*Ad,1); lmiterm(1 3 3 0,-2); lmiterm(1 3 4 Z,-d*B,1); lmiterm(1 4 4 Z,-d,1); %添加(式2)LMI的项,注意不等式的右边为负,又由于是第二
21、个LMI,故-2 lmiterm(-2 1 1 P,1,1); %还注意到X、Y和Z都必须大于0,故-3 lmiterm(-3 1 1 X,1,1); lmiterm(-3 1 2 Y,1,1); lmiterm(-3 2 2 Z,1,1); lmisys=getlmis; tmin,xfeas=feasp(lmisys); Matlab Sky打造最优秀、专业和权威的Matlab技术交流平台! http:/ pp=dec2mat(lmisys,xfeas,P); qq=dec2mat(lmisys,xfeas,Q); xx=dec2mat(lmisys,xfeas,X); yy=dec2mat(lmisys,xfeas,Y); zz=dec2mat(lmisys,xfeas,Z); GUI形式解答 例13、我们以例7的表达式进行说明 1.输入 LMI 系统的名2.定义和描述LMI变量 第一项:变量名 第二项:类型,S方阵,R矩阵,G其它 第三项:结构,具体参见前面的说明 3.直观的输入所有的LMI不等式 点击这里命令形式查看 将系统描述以字符表达形式保存到工作空间的指定变量中 将系统以命令行的形式保存到指定文件中 我总觉得该GUI是多余,它只能将LMI表达式转换为命令行形式,对熟悉 LMI 的人来说没有任何意义,也方便不了多少 dynamic Matlab Sky