基于Matlab的LMI矩阵理论算法与矩阵不等式研究:待求矩阵在LMI区域内的优化设计与区间观...

基于 Matlab的LMI矩阵理论与算法、矩阵不等式 待求矩阵在lmi中的一个小矩阵中 区间观测器设计

LMI这玩意儿搞控制的老铁肯定不陌生,尤其是设计观测器的时候总得和矩阵不等式打交道。最近帮学弟调区间观测器代码,发现有个坑特别容易踩------待求矩阵被嵌套在LMI的小块矩阵里,这时候用Matlab的LMI工具箱处理起来得讲究点技巧。

先举个栗子,假设咱们要处理形如A'P + PA + Q < 0这种经典不等式,这时候直接上feasp或者mincx可能没啥问题。但实际情况往往更复杂,比如观测器增益矩阵L被藏在某个子矩阵块里:

A'P + PA - C'L' - LC \*

B'P -γI

这种结构下,传统写法容易把变量位置搞错。这时候就得用lmivar的三明治操作了------先定义矩阵块结构,再通过偏移量定位变量位置。

matlab 复制代码
setlmis([]); 
P = lmivar(1,[n 1]);  % 对称正定矩阵
L = lmivar(2,[m,n]);  % 全矩阵结构

% 构建块矩阵
lmiterm([1 1 1 P],A',1,'s');  % A'P + PA
lmiterm([1 1 1 L],-1,C);      % -LC
lmiterm([1 1 1 0],Q);         % +Q
lmiterm([1 2 2 0],-gamma*eye(p)); 

这里有个骚操作:当L出现在非对角线位置时,得注意转置顺序。比如- C'L'其实等价于转置后的结构,这时候用lmiterm的参数顺序调整比手动转置更安全。

遇到变量耦合的情况,建议先纸上推导分块结构,标出每个块的变量依赖关系。比如观测误差动态方程中的交叉项处理:

matlab 复制代码
% 处理观测误差中的耦合项
lmiterm([-2 1 1 P],1,1);       % P > 0
lmiterm([3 1 1 P],1,A,'s');    % P(A-LC) + (A-LC)'P
lmiterm([3 1 1 L],-1,C);       % 关键在这行,隐含了PL的耦合

这时候如果直接写P*(A-L*C)会出大事,得拆解成多个lmiterm。有个验证技巧:把生成的LMI用getlmis检查矩阵块维度是否匹配,特别是变量块的位置是否产生冲突。

最后上求解器前,记得用decinfo检查决策变量映射关系。曾经有个bug折腾了我两小时,最后发现是L变量被错误映射到了P的对称位置。代码检查阶段可以这样操作:

matlab 复制代码
LMIsys = getlmis;
[P_idx, L_idx] = decinfo(LMIsys);
disp('决策变量结构:');
disp([P_idx; L_idx]);

解出来后用dec2mat提取变量时,注意维度对齐。特别是当L被多个不等式约束时,可能出现解不唯一的情况,这时候加个迹最小化的目标函数会更稳。

总之,处理嵌套变量的LMI就像搭乐高,得先看清图纸结构再动手码代码。多试几个测试用例,用issymmetric检查生成矩阵的对称性,能省下不少debug时间。

相关推荐
北冥有鱼被烹4 小时前
【微知】Ubuntu中如何安装docker?
ubuntu·docker
会飞的土拨鼠呀4 小时前
运维工程师需要具备哪些技能
linux·运维·ubuntu
q***062911 小时前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
u***420711 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
爱学习的小道长17 小时前
进程、线程、协程三者的区别和联系
python·ubuntu
IT小哥哥呀17 小时前
如何从 Windows SSH 进入 VirtualBox Ubuntu 虚拟机——密码认证(逐步指南)
linux·windows·ubuntu·ssh·教程·虚拟机
paopao_wu18 小时前
目标检测YOLO[02]:YOLOv8 环境安装-Ubuntu
yolo·目标检测·ubuntu
ragnwang1 天前
Ubuntu /home 分区安全扩容教程
linux·运维·ubuntu
咸鱼の猫1 天前
用samba服务器将虚拟机的Ubuntu(磁盘)映射到本地电脑实现文件互传
linux·服务器·ubuntu