基于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时间。

相关推荐
一叶龙洲5 小时前
Ubuntu从图标到卸载应用
linux·windows·ubuntu
头发够用的程序员5 小时前
别被 TOPS 参数迷惑:手把手推导边缘 GPU 整型算力
人工智能·python·ubuntu·计算机视觉·硬件架构·边缘计算
捷瑞电子工坊9 小时前
VSCode的配置和一些报错问题
vscode·ubuntu·c/c++·编译报错·开发环境配置·初学者教程·json配置
捷瑞电子工坊1 天前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
发光的沙子1 天前
嵌入式系统架构师----Ubuntu如何安装不在列表内的软件?
linux·运维·ubuntu
飘忽不定的bug1 天前
ubuntu20.04交叉编译QT5.15.12(RK3562+ubuntu20.04)
linux·qt·ubuntu
库玛西1 天前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装
linux·服务器·网络·c++·ubuntu
迷路爸爸1801 天前
在 Ubuntu / Linux 上轻量安装 LaTeX:TinyTeX 使用记录
linux·运维·ubuntu
与自己和解7411 天前
使用ssh实现 VScode 直连 ubuntu
vscode·ubuntu·ssh
2601_962299881 天前
Linux下运行Python脚本
linux·python·ubuntu·脚本·命令