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

相关推荐
corpse20101 小时前
VirtualBox 安装ubuntu-25 ,配置SSH工具登录
linux·ubuntu·ssh
YYYing.2 小时前
【Linux/C++网络篇(一) 】网络编程入门:一文搞懂 TCP/UDP 编程模型与 Socket 网络编程
linux·网络·c++·tcp/ip·ubuntu·udp
魔都吴所谓3 小时前
【Ubuntu】22.04安装 CMake 3.24
linux·运维·ubuntu
计算机网恋3 小时前
【无标题】
ubuntu·vmware·虚拟机
青花瓷12 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
一叶知秋yyds15 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
camellias_20 小时前
ubuntu(二)ubuntu18.04安装mysql8
linux·ubuntu·adb
藤谷性能20 小时前
Ubuntu 22.04:安装串口调试助手CoolTerm
linux·运维·ubuntu·串口·coolterm
丶伯爵式20 小时前
Ubuntu 新装后常用设置
linux·运维·ubuntu
吴烦恼的博客21 小时前
WSL迁移指南
ubuntu·wsl·系统移植