项目:简易线性矩阵不等式求解器 (EasyLMI)
1. 项目介绍
EasyLMI 是一个基于 MATLAB 的演示项目,旨在展示如何利用线性矩阵不等式(LMI)技术解决鲁棒控制中的优化问题。虽然项目愿景是提供类似自然语言的高级封装,目前的
main.m 核心代码着重演示了直接使用 MATLAB LMI 工具箱(LMI Control Toolbox)进行底层建模、求解 $H_infty$ 次优控制问题以及进行结果可视化的完整流程。该项目对于理解 LMI 在控制理论中的应用、掌握 LMI 工具箱的复杂语法(如
lmivar 和
lmiterm 的使用)具有极高的参考价值。
2. 功能特性
- 不稳定系统建模:内置了一个开环不稳定的二阶线性系统案例,用于验证控制算法的有效性。
- $H_infty$ 控制器设计:实现了基于有界实引理(Bounded Real Lemma)的 LMI 建模,通过求解矩阵不等式寻找状态反馈增益矩阵 $K$,在保证闭环系统稳定的同时,最小化 $H_infty$ 性能指标 $gamma$。
- LMI 自动化求解:完整展示了从 LMI 系统初始化、决策变量定义、复杂矩阵项描述到调用内点法求解器(
mincx)的全过程。 - 自动恢复控制器增益:演示了如何从 LMI 优化出的矩阵变量(如 $X$ 和 $Y$)中反解出实际的物理控制器参数 $K$。
- 闭环验证与可视化:提供自动化的数值验证(计算闭环特征值)和图形化展示(极点分布图、时域响应对比图),直观展示控制效果。
3. 系统要求
- MATLAB R2014b 或更高版本
- Control System Toolbox(控制系统工具箱)
- Robust Control Toolbox(鲁棒控制工具箱,原 LMI Control Toolbox)
4. 使用方法
- 确保 MATLAB 路径中包含
main.m 文件。 - 在 MATLAB 命令窗口输入
main 并回车,或直接运行脚本。 - 程序将输出以下内容:
* 命令行窗口:显示系统初始化状态、求解器调用日志、计算出的最优 $gamma$ 值、控制器增益 $K$ 以及闭环特征值。
* 图形窗口:弹出一个名为 "EasyLMI Solver Report" 的图表,包含开闭环极点对比图和时域响应仿真曲线。
5. 代码实现逻辑详细分析 (main.m)
代码主要分为五个核心处理阶段,具体逻辑如下:
第一阶段:系统定义与初始化
程序首先定义了一个二阶不稳定线性系统状态空间模型($dx/dt = Ax + Bu$)。
- 系统矩阵:定义了矩阵 $A$(包含正特征值,不仅定)、输入矩阵 $B$、输出矩阵 $C$ 和直馈矩阵 $D$。
- 参数提取:自动获取系统的状态维数 $n$ 和输入维数 $m$,为后续定义 LMI 变量维度做准备。
第二阶段:LMI 模型构建
这是代码的核心部分,使用 MATLAB LMI 工具箱的原生指令构建 $H_infty$ 控制问题的数学模型。
- 系统初始化:使用
setlmis([])以此重置 LMI 系统内部缓存。 - 变量定义 (
lmivar):
* 定义变量 $X$:设定为一个 $n times n$ 的对称矩阵,对应 Lyapunov 矩阵 $P$ 的逆(即 $Q=P^{-1}$)。
* 定义变量 $Y$:设定为一个 $m times n$ 的一般矩阵,用于变量代换($Y = K Q$)。
* 定义变量 $g$:设定为一个标量,代表 $H_infty$ 性能指标 $gamma$。
*
LMI #1 ($H_infty$ 性能约束):构建了一个 3x3 的分块矩阵不等式。
* 块 (1,1):描述 Lyapunov 稳定性与系统动态,包含 $AX + XA^T + BY + Y^T B^T$。使用简写
's' 自动处理对称项。
* 块 (1,2):描述扰动输入通道 $B_w$。
* 块 (1,3):描述输出方程 $(CX + DY)^T$。
* 对角块 (2,2) 和 (3,3):填充 $-gamma I$,用于约束 $L_2$ 增益。
* 利用 LMI 的对称性,仅需定义下三角或上三角部分。
*
LMI #2 (正定性):约束变量 $X$ 必须正定($X > 0$),确保 Lyapunov 函数的存在性。
第三阶段:求解优化问题
程序将可行性问题转化为凸优化问题。
- 生成 LMI 系统:通过
getlmis 获取内部描述结构。 - 构建目标向量:为了最小化 $gamma$,程序构建了一个权重向量 $c$。通过遍历决策变量索引,找到对应 $gamma$ 的变量位置并将其系数设为 1,其余设为 0。
- 调用求解器:使用
mincx(凸优化最小化求解器)配合内点法求解该半定规划(SDP)问题,并设置了求解精度。
第四阶段:结果解析与后处理
- 可行性检查:判断求解器返回的结果是否为空。
- 数值提取:使用
dec2mat 将优化器返回的向量形式解转换回矩阵形式的 $X_{sol}$、$Y_{sol}$ 和 $gamma_{sol}$。 - 控制器还原:执行变量代换的逆运算 $K = Y_{sol} X_{sol}^{-1}$,得到最终的状态反馈增益矩阵。
- 数值验证:计算闭环系统矩阵 $A_{cl} = A + BK$ 的特征值,验证其实部是否均小于零(即系统是否稳定)。
第五阶段:可视化与仿真
通过辅助函数
visualize_results 展示设计结果。
- 极点配置图:在复平面上绘制开环极点(红色叉号)和 LMI 求解后的闭环极点(蓝色圆圈)。通过对比展示极点从右半平面(不稳定)移动到左半平面(稳定)的过程。
- 时域响应仿真:设定非零初始状态 $x_0 = [1; -1]$,利用
initial 函数对比开环系统(发散)和闭环系统(收敛)的状态响应曲线,直观验证控制器的调节能力。