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

相关推荐
星马梦缘9 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu
WaiSaa14 小时前
Ubuntu配置Git免密操作
git·ubuntu·gitee
星马梦缘15 小时前
如何切换window-ubuntu双系统【方案一】
linux·ubuntu·双系统
醇氧19 小时前
WSL 安装 Ubuntu 完整步骤(Windows 10/11 通用,极简无脑版)
linux·windows·ubuntu
酸钠鈀1 天前
AI M61SDK Ubuntu 环境搭建
linux·运维·ubuntu
Riu_Peter1 天前
【技巧】如何在 Ubuntu 中安装 .deb 软件包
linux·chrome·ubuntu
HABuo1 天前
【linux(四)】套接字编程--基于UDP协议的客户端服务端
linux·服务器·c++·网络协议·ubuntu·udp·centos
_只道当时是寻常1 天前
【Codex】Ubuntu 安装 Codex CLI 并解决 Clash 代理与账号认证问题
linux·ubuntu·chatgpt
嵌入式×边缘AI:打怪升级日志1 天前
全志T113嵌入式Linux开发环境搭建(VMware + Ubuntu 18.04)详细步骤
linux·ubuntu
Frank_refuel1 天前
终端环境下:Ubuntu 22.04.1 安装 MySQL 数据库
数据库·mysql·ubuntu