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;
当然可以,Matlab中提供了一个LMI工具箱,可以用于设计和求解线性矩阵不等式(LMI)问题。以下是使用Matlab LMI工具箱实现LMI预测控制的示例代码: ```matlab % 定义系统参数 A = [-0.5 -0.1; 0.2 -0.7]; B = [1; 0]; C = [1 0]; D = 0; Q = diag([1 1]); R = 1; N = 5; % 定义LMI变量 setlmis([]); P = lmivar(1, [2 1]); Y = lmivar(2, [1 N]); K = lmivar(1, [1 2]); % 构建LMI约束 lmiterm([1 1 1 P], 1, 1); lmiterm([-2 1 1 P; 1 -2 1 0], A, 1, B*K, 1, 's'); for i = 1:N lmiterm([-2 1 1 P; 1 -2 1 0], A^i, 1, 0); lmiterm([-2 1 1 Y(i); 1 -2 1 0], C', C, 's', 1); end lmiterm([2 1 1 0], K, sqrt(Q)); lmiterm([3 1 1 0], R); lmiterm([-3 2 1 K], B'); lmiterm([-4 1 1 Y], 1, 1); lmis = getlmis; % 解决LMI options = [1e-4, 2000, -1, 10, 1]; [~, xopt] = mincx(lmis, zeros(1, length(lmis)), options, [P; Y(:); K]); % 提取控制器系数 P_opt = dec2mat(lmis, xopt, P); K_opt = dec2mat(lmis, xopt, K); ``` 这段代码使用Matlab LMI工具箱中的`setlmis`,`lmivar`和`lmiterm`函数来定义LMI变量和约束。在这个例子中,我们使用了一个2x1的LMI变量`P`,一个2xN的LMI变量`Y`和一个1x2的LMI变量`K`,并使用`lmiterm`函数来构建LMI约束。然后,我们使用`mincx`函数来求解LMI,并提取最优解`P_opt`和`K_opt`。 需要注意的是,Matlab LMI工具箱和YALMIP工具箱的语法略有不同。Matlab LMI工具箱需要手动定义LMI约束,而YALMIP工具箱可以根据问题自动构建LMI约束。此外,Matlab LMI工具箱的求解速度可能较慢,对大型问题可能不太适用。因此,根据具体问题的规模和复杂程度,选择适合的工具箱是很重要的。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值