在最近的学习中遇到了关于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;
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐