matlab–LMI工具箱使用学习1(lmivar()、lmiterm()函数)
在最近的学习中遇到了关于matlab-lmi工具箱的使用问题,网上看了很多有着繁杂而且不太清晰明了,决定自己写一篇。
首先要初始化一个LMI系统
setlmis([]) %注意这只是定义了一个矩阵不等式系统,并没有定义矩阵
如果有已存在的矩阵不等式系统lim0,命令为
setlmis([lim0])
然后使用 limvar 和 limterm 来定义矩阵不等式
- limvar(在LMI问题中指定矩阵变量)函数,函数格式X = lmivar(type,struct)
type为矩阵格式
- type = 1 为对角块对称矩阵格式,每个对角块都是全矩阵(任意对称矩阵),标量(单位矩阵的倍数)或相同的零。
struct定义对角块矩阵的格式,如有r个对角块,struct就是r x 2为的矩阵。
举例:X0 = limvar(1,[2 1;1 0]) ,[2 1]表示2x2的满阵,[1 0]表示1x1的标量
- type = 2 为m*n任意矩阵格 struct =[m n]
下面是matlab帮助文档中给的例子
X1是一个3x3的对称矩阵,X2是2x4矩阵,X3第一个对角块5x5矩阵,delta1、delta2个为标量,I2为2x2的单位矩阵
- type = 3 指定的结构比较复杂,对于类型3,X的每个条目被指定为零或±x,其中xn是第n个决策变量。
为了有助于描述这一类型的矩阵变量,lmivar提供了两个额外的输出,它的一般表达式是:[X,n,sX]=lmivar(type,struct)其中n和sX是提供的两个额外输出n,表示到目前为止使用的决策变量的总数,sX表明了变量X中的每一个元依赖于决策变量的哪个元。
下面所给具体例子中,sX2(1,1)=7,表示(1,1)条目是第七个决策变量。
然后利用type = 3定义,根据X1和X2定义矩阵变量X
- limterm(指定矩阵不等式的具体内容)函数,语法lmiterm(termID,A,B,flag)
在描述具有多个块的LMI时,只需要指定块中下三角或上三角矩阵即可
termID 在调用lmiterm时,termID是一个四项的整数向量,用于指定LMI中相的位置和所涉及的矩阵变量。
-
termID (1)=+p 或−p其中正p表示第p个LMI左侧的项,负p表示第p个LMI右侧的项。即AX1<BX2的左右(按照惯例左边相小于右边相)。
-
termID(2:3)=[0,0] 对应外部矩阵
-
termID(2:3)= [i,j] 对应于左或右内因子的第(i,j)个块中的项
-
termID(4)=0 对应与外部量
-
termID(4)=x 对应于变量AXB,X是所需返回的矩阵变量,A、B为先设定好的矩阵
-
termID(4)=-x 对应于变量AX’B, X’是X的转置矩阵。
对于 (AXB) + (AXB)’ = AXB + B’X(T)A’ 设置flag ='s’允许您使用单个lmiterm命令指定此类表达式。lmiterm([1 1 1 X],A,B,‘s’)一个命令即可写成。
下面是帮助文档中的具体例子
所谓内部量是括号里面的外部量是括号内部的,形式一看便知。
- 在完成lmivar()、lmiterm()后,获得LMI的函数的内部描述
lmisys = getlmis;