线性矩阵不等式 (LMI)

线性矩阵不等式是控制系统、优化和许多工程领域中的一个核心工具。

1. 什么是线性矩阵不等式?

线性矩阵不等式 是指具有以下形式的不等式:

其中:

x=(x1,x2,…,xm)x = (x_1, x_2, dots, x_m)x=(x1​,x2​,…,xm​) 是我们需要求解的决策变量(一个向量)。F0,F1,…,FmF_0, F_1, dots, F_mF0​,F1​,…,Fm​ 是给定的对称矩阵。≺0prec 0≺0 表示矩阵 F(x)F(x)F(x) 是负定的。这意味着对于所有非零向量 zzz,都有 zTF(x)z<0z^T F(x) z < 0zTF(x)z<0。等价地,F(x)F(x)F(x) 的所有特征值都是负数。

“线性”的含义
尽管我们处理的是矩阵,但“线性”指的是矩阵 F(x)F(x)F(x) 对决策变量 xix_ixi​ 的依赖关系是线性的。矩阵本身的内容随 xix_ixi​ 线性变化。

2. LMI 的一般形式和常见类型

严格 LMI:F(x)≺0F(x) prec 0F(x)≺0非严格 LMI:F(x)⪯0F(x) preceq 0F(x)⪯0(负半定)一般形式的 LMI 系统:可以同时包含多个 LMI,因为它们可以组合成一个更大的 LMI。

Lyapunov 不等式:在系统稳定性分析中非常著名。

矩阵不等式形式:有时问题会呈现为更复杂的形式,但可以通过Schur补引理将其转化为标准的 LMI。
Schur补引理:对于对称矩阵 [ABBTC]
[ABBTC]” role=”presentation”>[ABTBC][ABBTC][ABT​BC​],以下三个条件是等价的:

[ABBTC]≻0
[ABBTC]” role=”presentation”>[ABTBC][ABBTC] succ 0[ABT​BC​]≻0C≻0C succ 0C≻0 且 A−BC−1BT≻0A – B C^{-1} B^T succ 0A−BC−1BT≻0A≻0A succ 0A≻0 且 C−BTA−1B≻0C – B^T A^{-1} B succ 0C−BTA−1B≻0
这个引理可以将非线性矩阵不等式(如涉及 A−1A^{-1}A−1 的项)转化为关于原矩阵块的线性矩阵不等式。

3. 如何求解 LMI?

LMI 问题通常不寻求“解析解”,而是通过数值方法寻找可行解(Feasible Solution)或优化解(Optimal Solution)。

核心思想:LMI 定义了一个在决策变量空间中的凸约束集。也就是说,如果 xxx 和 yyy 都满足 LMI,那么它们连线上的任何点 λx+(1−λ)ylambda x + (1-lambda)yλx+(1−λ)y (0≤λ≤1)(0 leq lambda leq 1)(0≤λ≤1) 也满足 LMI。凸性使得我们可以使用非常高效的内点法来求解。

求解流程:

问题建模:将你的工程问题(如稳定性、鲁棒控制、滤波器设计)表述为一个或多个 LMI。选择求解器:使用专门的数值求解软件。编程实现:在软件中定义决策变量、约束(LMI)和目标函数。数值求解:运行求解器。结果分析:验证解是否满足要求,并提取所需的控制器增益或系统参数。

4. 常用的求解工具(软件)

以下是业界和学术界最常用的一些工具:

1. MATLAB 的 LMI 工具箱 / Robust Control Toolbox

这是最主流的选择。

早期专用工具
lmitool
,
feasp
,
mincx
,
gevp
等函数。这些函数比较底层,需要用户按照特定格式定义 LMI 系统。YALMIP(强烈推荐):一个强大的 MATLAB 建模工具箱,作为前端,可以调用多种后端求解器。它的语法非常直观易用。
示例(使用 YALMIP 求解 Lyapunov 不等式)


% 定义已知矩阵 A
A = [0, 1; -2, -3];

% 定义决策变量:对称正定矩阵 P
P = sdpvar(2, 2, 'symmetric');

% 定义 LMI 约束
Constraints = [P >= 0]; % 正定约束
Constraints = [Constraints, A’*P + P*A <= -eye(2)]; % Lyapunov 不等式,这里用 <= -I 来保证 < 0

% 定义目标函数(对于可行性问题,目标函数可以设为常数,例如 0)
Objective = 0;

% 求解
optimize(Constraints, Objective);

% 检查求解结果并获取 P 的值
if problem == 0
    P_solution = value(P)
    eig_P = eig(P_solution) % 检查 P 是否是正定的
    eig_Lyap = eig(A’*P_solution + P_solution*A) % 检查 Lyapunov 矩阵是否是负定的
else
    disp(‘未找到可行解’);
end

CVX:另一个流行的 MATLAB 建模系统,尤其适用于凸优化,也支持 LMI。

2. Python 生态系统

Python 在科学计算和优化领域越来越强大。

CVXPY:与 MATLAB 的 CVX 类似,是 Python 下的凸优化建模工具。
示例(使用 CVXPY 求解相同的 Lyapunov 不等式)


import cvxpy as cp
import numpy as np

# 定义已知矩阵 A
A = np.array([[0, 1], [-2, -3]])

# 定义决策变量:对称正定矩阵 P
P = cp.Variable((2, 2), symmetric=True)

# 定义约束
constraints = [P >> 0]  # 正定约束
constraints += [A.T @ P + P @ A << -np.eye(2)]  # Lyapunov 不等式

# 定义问题(可行性问题)
prob = cp.Problem(cp.Minimize(0), constraints) # 目标函数最小化 0

# 求解
prob.solve()

# 输出结果
if prob.status == ‘optimal’:
    P_solution = P.value
    print(“P found:
”, P_solution)
    # 可以进一步检查特征值
else:
    print(“Solution not found.”)

SciPy:对于小规模问题,有时可以使用
scipy.optimize.minimize
并结合自定义的约束函数(将负定性约束转化为所有特征值小于 0),但这通常不如专用的 LMI 求解器高效和稳定。

3. 专用求解器(通常被 YALMIP/CVXPY 调用)

SeDuMiSDPT3MOSEK(商业软件,性能强大)

5. 应用实例:状态反馈控制器设计

一个经典问题是寻找状态反馈控制律 u=Kxu = Kxu=Kx,使得闭环系统 x˙=(A+BK)xdot{x} = (A+BK)xx˙=(A+BK)x 稳定。
这可以转化为以下 LMI 问题:

寻找矩阵 Q≻0Q succ 0Q≻0 和 YYY,使得:

总结

步骤 关键内容 推荐工具
1. 建模 将问题转化为 LMI 形式,必要时使用 Schur 补引理。 纸笔推导
2. 编程 使用直观的建模语言定义变量和约束。 YALMIP (MATLAB)CVXPY (Python)
3. 求解 调用高效的内点法求解器计算数值解。 MOSEK, SeDuMi, SDPT3(通常由前端工具自动调用)
4. 验证 检查解的正定性/负定性,计算控制器增益等。 MATLAB
eig
函数,Python
numpy.linalg.eigvals

对于具体问题,建议从 YALMIP 或 CVXPY 的官方文档和示例开始,它们是入门和解决实际问题的绝佳起点。

© 版权声明

相关文章

暂无评论

none
暂无评论...