LMI 工具箱介绍
线性矩阵不等式(LMI)工具箱是求解一般线性矩阵不等式问题的一个高性能软件
包。由于其面向结构的线性矩阵不等式表示方式,使得各种线性矩阵不等式能够以自然块
矩阵的形式加以描述。一个线性矩阵不等式问题一旦确定,就可以通过调用适当的线性矩
阵不等式求解器来对这个问题进行数值求解。
LMI 工具箱提供了确定、处理和数值求解线性矩阵不等式的一些工具,它们主要用
于:
以自然块矩阵形式来直接描述线性矩阵不等式;
获取关于现有的线性矩阵不等式系统的信息;
修改现有的线性矩阵不等式系统;
求解三个一般的线性矩阵不等式问题;
验证结果。
本附录将详细介绍 LMI 工具箱提供的用于解决以上各个问题的相关函数和命令。
A.1 线性矩阵不等式及相关术语
一个线性矩阵不等式就是具有以下一般形式的一个矩阵不等式:
)
=
xL
(
11
L
L
NNx
x
+
,1
Nx
x
,
是给定的对称常数矩阵,
L
0
+
+
(1)
0<
是未知变量,称为决策变量,
其中:
x
,
=
[
,
,
,
,
T
]
∈
LL
0
1
x
Nx
1
尽管表达式(1)是线性矩阵不等式的一个一般表示式,但在大多数实际应用中,线
NL
NR 是由决策变量构成的向量,称为决策向量。
性矩阵不等式常常不是以一般表示式(1)的形式出现,而是具有以下形式:
X
n
)
<
XR
(
,
,
X
)
n
1
XL
,
,
(
1
,1
X
nX
,
)(⋅L
)(⋅R
其中的 和 是矩阵变量
的仿射函数,通过适当的代数运算,上式可以写
成线性矩阵不等式的一般表示式(1)的形式。例如,在系统稳定性问题中经常遇到的
Lyapunov 矩阵不等式
(2)
也 是 一 个 线 性 矩 阵 不 等 式 , 其 中 的 是 一 个 矩 阵 变 量 。 我 们 以 一 个 二 阶 矩 阵
+ XA
XAT
X
0<
A
=
1
−
0
⎡
⎢
⎣
2
2
−
⎤
⎥
⎦
为例,将矩阵不等式(2)写成一般表示式(1)的形式。针对二阶矩阵不
等式(2),对应的矩阵变量 是一个二阶的对称矩阵,
X
X
=
的决策变量是矩阵 中的独立元
X
。根据对策性,矩阵变量 可以写成
,不等式(2)中
⎤
⎥
⎦
x
1
x
2
⎡
⎢
⎣
2
x
x
3
X
3
x 、、
x
x
1
2
01
⎤
⎡
+⎥
⎢
00
⎦
⎣
xX
1
=
x
2
10
⎡
⎢
01
⎣
⎤
+⎥
⎦
x
3
00
10
⎡
⎢
⎣
⎤
⎥
⎦
将矩阵 A 和上式代入矩阵不等式(2),经整理,可得
0
⎡
⎢
0
⎣
22
⎡−
⎢
0
2
⎣
3
−
⎤
+⎥
4
⎦
0
3
−
⎤
+⎥
⎦
⎡
⎢
⎣
x
1
x
x
3
2
0
4
−
⎤
0<⎥
⎦
(3)
这样就将矩阵不等式(2)写成了线性矩阵不等式的表示式(1)。显然,与 Lyapunov 矩
阵不等式(2)相比,表示式(3)缺少了许多控制中的直观意义。另外,(3)式涉及到
的矩阵也比(2 )式中的多。如果矩阵 是 阶的,则(3 )式中的系数矩阵一般有
( +nn
个。因此,这样的表达式在计算机中将占用更多的存储空间。由于这样的一些
原因,LMI 工具箱中的函数采用线性矩阵不等式的结构表示。例如,Lyapunov 矩阵不等
式(2)就以矩阵变量 的不等式来表示,而不是用其一般形式(3)来表示。
2)1
A
X
n
一般的,一个线性矩阵不等式具有块矩阵的形式,其中每一个块都是矩阵变量的仿射
函数。以下通过一个例子来说明有关描述一个线性矩阵不等式的术语。
考虑 控制中的一个线性矩阵不等式:
∞H
T
N
⎡
⎢
⎢
⎢
⎣
T
XA
+
CX
T
B
XA
T
XC
I
γ
−
T
D
B
D
I
γ
−
⎤
⎥
⎥
⎥
⎦
N
0<
其中:
NDCBA
、、、、
是给定的矩阵,
TXX
=
∈
nn×R 和 R∈γ 是问题的变量。
N 称为外因子,块矩阵
XL
(
,
)
γ
=
⎡
⎢
⎢
⎢
⎣
T
XA
+
CX
T
B
XA
T
XC
I
−
γ
T
D
B
D
I
−
γ
⎤
⎥
⎥
⎥
⎦
称为内因子。外因子可以不是一个正方矩阵,它在许多问题中常常不出现。
X 和γ是问题的矩阵变量。注意标量也可以看成是一个 11× 维的矩阵。
内因子
是一个对称块矩阵。根据对称性,
( γXL
)
( γXL
)
,
,
可以由对角线及其上方
,
的块矩阵完全确定。
中的每一块都是矩阵变量 X 和γ的仿射函数。这一函数由常数项和变量
( γXL
)
项这两类基本项组成,其中常数项就是常数矩阵或以一些常数矩阵组成的算术表
D ; 变 量 项 是 包 含 一 个 矩 阵 变 量 的 项 , 例 如
达 式 , 例 如
XA γ−, 等。
中 的 和B
( γXL
)
I
,
一个线性矩阵不等式不论多么复杂,都可以通过描述其中每一块的各项内容来确定这
个线性矩阵不等式。
A.2 线性矩阵不等式的确定
LMI 工具箱可以处理具有以下一般形式的线性矩阵不等式:
MX
)
K
N 和 M 是具有相同维数的
是具有一定结构的矩阵变量,左、右外因子
XRMNX
XLN
X
<
(
(
)
K
,
,
,
,
T
T
1
1
,1
,
其中:
给定矩阵,左、右内因子 和)(⋅L
KX
)(⋅R 是具有相同块结构的对称块矩阵。
等式
X 称为是不等式的右边,0 称为是不等式的左边,常表示成
注意在线性矩阵不等式的描述中,左边总是指不等式较小的一边,例如对线性矩阵不
,0>X
要确定一个线性矩阵不等式系统,需要做以下两步:
的维数和结构;
1.给出每个矩阵变量
2.描述每一个线性矩阵不等式中各个项的内容。
这个过程产生所描述线性矩阵不等式系统的一个内部表示,它以一个单一向量的形式
储存在计算机内,通常用一个名字,例如 lmisys 来表示。该内部表示 lmisys 可以在后面处
理这个线性矩阵不等式时调用。
X<0
,1
KX
。
X
,
下面将通过 LMI 工具箱中的一个例子来说明线性矩阵不等式系统的确定。运行
lmidem 可以看到这个例子的完整描述。
例 1:考虑一个具有 4 个输入、4 个输出和 6 个状态的稳定传递函数
(4)
(
s
=
−
G
s
)(
1)
BAIC
−
和一组具有以下块对角结构的输入/输出尺度矩阵 D :
0
0
d
d
d
1
0
0
0
0
d
1
0
0
0
0
d
d
D
=
3
2
4
5
⎡
⎢
⎢
⎢
⎢
⎣
⎤
⎥
⎥
⎥
⎥
⎦
(5)
则在具有时变不确定性系统的鲁棒稳定性分析中提出了以下问题:
1 <−D
寻找一个具有结构(5)的尺度矩阵 D ,使得
DG ω
)
(
j
sup
ω
1
。
可以证明:这样一个问题可以转化成一个线性矩阵不等式系统的可行性问题,即寻找
两个对称矩阵 X
66R ×∈
和
T
=
DDS
T
44×∈R ,使得
SCC
+
T
XA
XA
+
T
XB
⎡
⎢
⎣
XB
S
−
⎤
0<⎥
⎦
(6)
(7)
0>X
S > (8)
I
用命令 lmivar 和 lmiterm 给出线性矩阵不等式系统(6)~(8)的内部描述如下:
setlmis([])
X=lmivar(1,[6 1])
S=lmivar(1,[2 0;2 1])
% 1st 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)
% 2nd LMI
lmiterm([-2 1 1 X],1,1)
% 3rd LMI
lmiterm([-3 1 1 S],1,1)
lmiterm([3 1 1 0],1)
lmisys=getlmis
其中:函数 lmivar 定义了两个矩阵变量 X 和 ,lmiterm 则描述了每一个线性矩阵不等式
中各项的内容。getlmis 回到了这个线性矩阵不等式系统的内部表示 lmisys,lmisys 也称为
是储存在机器内部的线性矩阵不等式系统的名称。以下将详细介绍这几个函数的功能和用
法。
S
setlmis 和 getlmis
一个线性矩阵不等式系统的描述以 setlmis 开始,以 getlmis 结束。当要确定一个新的
系统时,输入:
setlmis([])
如果需要将一个线性矩阵不等式添加到一个名为 lmiso 的现有的线性矩阵不等式系统中,
则输入:
setlmis(lmiso)
当线性矩阵不等式系统被完全确定好后,输入:
lmisys=getlmis
该命令返回这个线性矩阵不等式系统的内部表示 lmisys。
lmivar
函数 lmivar 用来描述出现在线性矩阵不等式系统中的矩阵变量,每一次只能描述一个
矩阵变量。矩阵变量的描述包括该矩阵变量的结构。该函数的一般表达式是:
X=lmivar(type,struct)
这一函数定义了一个新的矩阵变量 X ,X 是该矩阵变量的变量名。函数中的第一个输
入量 type 确定了矩阵变量 X 的类型,第二个输入量 struct 进一步根据变量 X 的类型给出该
变量的结构。变量的类型分成三类:
Type =1:对称块对角结构。这种结构对应于具有以下形式的矩阵变量:
D
1
0
0
⎡
⎢
⎢
⎢
⎢
⎣
0
0
D
0
2
rD
0
⎤
⎥
⎥
⎥
⎥
⎦
jD
其中对角线上的每一个矩阵块 是方阵,它可以是零矩阵、对称矩阵或数量矩阵。这种
结构也包含了通常意义的对称矩阵和数量矩阵(分别相当于只有一块)。此时,struct 是
一个
,则其中的 表示对称矩阵块 的阶
数,而 n 只能取 1、0 或 ,其中
1=n 表示 是一个满的对称矩阵(或无结构的对称矩
阵),
nm
,
(
iD
表示 是一个零矩阵。
2×r 维的矩阵。如果该矩阵的第 i 行是
表示 是一个数量矩阵,
1−=n
0=n
1−
iD
m
)
iD
iD
Type =2:长方型结构。这种结构对应于任意的长方矩阵。此时,struct=
阵的维数。
(
nm
,
)
表示矩
Type =3:其他结构。这种结构用来描述更加复杂的矩阵,也可以用于描述矩阵变量
之间的一些关联。 X 的每一个元或者是 0,或者是 nx± ,其中 是第 个决策变量。相应
的,struct 是一个和变量
X 有相同维数的矩阵,其中的每一个元取值如下:
nx
n
j
j
j
如果
i
,(
i
,(
i
,(
,0
n
,
n
,
和 的线性矩阵不等式系统,其中
X
X
如果
X
如果
3X
0)
=
x
)
=
n
x
)
−=
n
2
Δ 是 55 × 维的对称矩阵, 1δ 和 2δ 是两个标量, 表示
2I
例 2:考虑具有三个矩阵变量
是一个
是一个
1X
2X
j
)
=
i
,(
struct
⎧
⎪
⎨
⎪
−
⎩
1 XX 、
33 × 维的对称矩阵;
42 ×
维的长方矩阵;
0
0
0
δ
1
I
0
δ
22
,其中
⎡Δ
⎢
0
⎢
0
⎢
⎣
维的单位矩阵。
⎤
⎥
⎥
⎥
⎦
X
3
=
22 ×
可以应用 lmivar 来定义这些矩阵变量:
setlmis([])
X1=lmivar(1,[3 1])
X2=lmivar(2,[2 4])
X3=lmivar(1,[5 1;1 0;2 0])
lmiterm
在确定了矩阵变量之后,还需要确定每一个线性矩阵不等式中各项的内容。线性矩阵
不等式的项指构成这个线性矩阵不等式的块矩阵中的加项。这些项可以分成三类:
,其中的
1.常数项;
2.变量项,即包含了矩阵变量的项,例如(3)式中的 XAT 和
。一般的变量
X 是一个变量, P 和 Q 是给定的矩阵,分别称为该变量项的左
PXQ
项具有形式
系数和右系数;
3.外因子。
在描述一个具有多个块的线性矩阵不等式时,LMI 工具箱提供了这样的功能,即只需
要确定对角线上和对角线上方的项的内容,或者只描述对角线上和对角线下方的项的内
容,其他部分项的内容可以根据线性矩阵不等式的对称性得到。
SCC T
用命令 lmiterm 每次可以确定线性矩阵不等式的一个项的内容。例如,对线性矩阵不
等式
⎡
⎢
⎣
可以用以下一组命令来描述:
T
XA
+
T
SCC
XA
+
T
XB
XB
S
−
⎤
0<⎥
⎦
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)
这些命令依次描述了项
XA
+
T
XA
、 T
SCC
、
和XB
S− 。在每一条命令中,第 1 项是
一个四元向量,它刻画了所描述的项所在的位置和特征:
第 1 个元表示所描述的项属于哪一个线性矩阵不等式。值 m 表示第 m 个不等式的
左边,-m 表示第 m 个不等式的右边。
第 2 和第 3 个元表示所描述的项所在块的位置。例如,向量[1 1 2 1]表示所描述的
项位于第一个线性矩阵不等式左边内因子的块(1,2)中。第 2 和第 3 个元均取
零表示所描述的项在外因子中。
最后一个元表明了所描述的项是常数项还是变量项。如果是变量项,则进一步说
明涉及哪一个变量。0 表示常数项,k 表示所描述的项包含第 k 个矩阵变量 ,-
X 是第 1 个变量, 是第 2 个
k 则表示包含矩阵变量 的转置 (在例 1 中,
变量,它们按确定的先后顺序排列)。
T
kX
kX
kX
S
lmiterm 的第 2 项和第 3 项包含了数据(常数项的值,外因子,变量项
PXQ
或
QPX T
中的左、右系数)。第 4 项是可选择的,且只能是's'。
在描述项的内容时,有一些简化的方法。
1.零块可以省略描述;
2.可以通过在命令 lmiterm 中外加一个分量's',使得可以只用一个命令 lmiterm 就能
描述一个变量项与该变量项的转置的和。例如,上面的第一个命令描述了
T
XA
+
XA
。
3.可以用一个标量值来表示一个数量矩阵,即用α表示数量矩阵 Iα ,其中α是一个
I
被描述成
标量。如例 1 中的第 3 个不等式
S >
lmiterm([-3 1 1 S],1,1)
lmiterm([3 1 1 0],1)
为了便于阅读,也可以用线性矩阵不等式和矩阵变量的名称来表示对应的线性矩阵不
等式和矩阵变量。矩阵变量的变量名可以用命令 lmivar 来赋值,线性矩阵不等式的名称则
可以用函数 newlmi 来确定。这些标识符可以用在命令 lmiterm 中以表示相应的线性矩阵不
等式或矩阵变量。对例 1 中的线性矩阵不等式系统,采用名称的相应描述如下:
setlmis([])
X=lmivar(1,[6 1])
S=lmivar(1,[2 0;2 1])
BRL=newlmi
lmiterm([BRL 1 1 X],1,A,’s’)
lmiterm([BRL 1 1 S],C’,C)
lmiterm([BRL 1 2 X],1,B)
lmiterm([BRL 2 2 S],-1,1)
Xpos=newlmi
lmiterm([-Xpos 1 1 X],1,1)
Slmi=newlmi
lmiterm([-Slmi 1 1 S],1,1)
lmiterm([Slmi 1 1 0],1)
lmisys=getlmis
其中:X 和 S 分别表示变量 X 和 ,而 BRL、Xpos 和 Slmi 则分别表示第 1、第 2 和第 3
个线性矩阵不等式。-Xpos 指的是第 2 个线性矩阵不等式的右边,-X 表示变量
X 的转
置。
S
lmiedit
线性矩阵不等式编辑器 lmiedit 是一个图形用户界面,它可以按符号方式直接确定线
性矩阵不等式系统。输入
lmiedit
出现一个具有一些可编辑文本区域和各种按钮的窗户。按以下步骤来确定一个线性矩阵不
等式系统:
1.在文本区域的上半部分给出每一个矩阵变量的描述(名字和结构),其结构是通
过类型(S 表示对称块矩阵,R 表示无结构的长方矩阵,G 表示其他结构矩阵)和一个
“附加”的结构矩阵(类似于 lmivar 中的 struct)来刻画的。在文本编辑区,使用一行描
述一个变量。
2.在文本区的下半部分,按 MATLAB 的表示方式给出要描述的线性矩阵不等式。
例如,线性矩阵不等式
⎡
⎢
⎣
可以通过输入
[A’*X+X*A X*B;B’*X -1]<0
XA
T
XA
+
T
XB
XB
I
−
⎤
0<⎥
⎦
来描述。其中 X 是文本区上半部分描述矩阵变量 X 的变量名。一个线性矩阵不等式的描
述可能需要几行,但一行中最多只能描述一个线性矩阵不等式。
完成了线性矩阵不等式系统的描述后,可以通过按相应的按钮来完成以下的任务:
显示用于描述线性矩阵不等式的 lmivar/lmiterm 命令串(按钮 view commands);
反之,通过单击按钮 describe…可以将用一串 lmivar/lmiterm 命令定义的线性矩阵
不等式系统按 MATLAB 表示式显示。
将线性矩阵不等式的符号描述存为一个 MATLAB 语句串(按钮 save)。以后可以
通过按钮 load 重新显示这种描述。
可 以 从 一 个 文 件 读 一 串 lmivar/lmiterm 命 令 ( 按 钮 read ) , 然 后 通 过 单 击
“describe the matrix variables”或“describe the LMIs …”显示出由这些命令确定
的线性矩阵不等式系统的符号表示。
写 一 串 用 于 描 述 一 个 特 殊 线 性 矩 阵 不 等 式 系 统 的 lmivar/lmiterm 命 令 ( 按 钮
write)。
通过按钮 create 产生线性矩阵不等式系统的内部表示,结果用一个以线性矩阵不
等式命名的 MATLAB 变量记录(如果线性矩阵不等式系统名是 mylmi,则其内部
表示用 MATLAB 变量 mylmi 记录)。内部表示 mylmi 可以被线性矩阵不等式求
解器或任何其他的线性矩阵不等式函数调用。
如同命令 lmiterm 一样,可以应用简捷的方法来输入线性矩阵不等式的表示式。例如
零块可以简单地输入 0,而不必定义其维数,类似地,单位矩阵只需输入数字 1 等。
lmiedit 尽管很一般,但它没有 lmiterm 灵活。以下是 lmiedit 的一些局限性:
在矩阵变量的两边不能使用括号。例如当 X 是一个变量名时,
(A*X+B)’*C+C’*(A*X+B)
是不允许的,而
(A+B)’*X+X’*(A+B)