3. 能控性判据(一):格拉姆矩阵判据,原理与计算步骤

能控性判据有好几种,我个人最喜欢先讲格拉姆矩阵判据。为什么?因为它最直观,也最接近物理本质。说白了,格拉姆矩阵判据就是在回答一个问题:系统的能量能不能通过输入传递到所有状态上?

3.1 格拉姆矩阵判据的核心思想

先回忆一下,对于一个线性时不变系统:

ẋ = Ax + Bu
y = Cx + Du

我们想知道:给定任意初始状态 x(0),能不能找到一个输入 u(t),让系统在有限时间内回到原点?

格拉姆矩阵判据的思路是这样的——构造一个能控性格拉姆矩阵 W_c,然后检查它是不是满秩的。如果满秩,系统就能控;否则,就有状态是「够不着」的。

我在项目中遇到过这样一个案例:一个四阶系统,用秩判据算出来能控,但实际仿真时总有一个状态调不回来。后来一查,是数值精度问题导致秩判据误判。从那以后,我养成了习惯——能控性分析至少用两种方法交叉验证

3.2 格拉姆矩阵的定义

能控性格拉姆矩阵定义为:

W_c(t) = ∫₀ᵗ e^(Aτ) B B^T e^(A^T τ) dτ

对于稳定系统,我们通常考虑 t → ∞ 时的极限情况,即:

W_c = ∫₀^∞ e^(Aτ) B B^T e^(A^T τ) dτ

这个矩阵满足一个重要的李雅普诺夫方程:

A W_c + W_c A^T = - B B^T

嗯,这里要注意:这个方程只在系统矩阵 A 是稳定的时候才有唯一解。如果 A 有特征值在虚轴上或右半平面,积分可能发散。

3.3 计算步骤

实际工程中,我们不会真的去算那个积分。太慢了,而且容易出错。我建议用以下步骤:

  1. 写出系统矩阵 A 和输入矩阵 B
  2. 求解李雅普诺夫方程 A W_c + W_c A^T = - B B^T
  3. 检查 W_c 的秩,看是否等于系统阶数 n

在 MATLAB 中,一行代码就能搞定:

Wc = gram(sys, 'c');
rank(Wc)

如果你用的是 Python,可以用 scipy 的 solve_continuous_lyapunov

from scipy.linalg import solve_continuous_lyapunov
import numpy as np

A = np.array([[0, 1], [-2, -3]])
B = np.array([[0], [1]])

Wc = solve_continuous_lyapunov(A, -B @ B.T)
rank = np.linalg.matrix_rank(Wc)
print(f"格拉姆矩阵的秩: {rank}")

3.4 一个完整的例子

来看一个二阶系统:

A = [[0, 1], 
     [-2, -3]]
B = [[0], 
     [1]]

手动算一下李雅普诺夫方程。设 W_c = [[w11, w12], [w12, w22]],代入方程:

A W_c + W_c A^T = -B B^T

展开后得到三个方程:

2w12 = 0
w22 - 2w11 - 3w12 = 0
2w12 - 6w22 = -1

解得:

w11 = 1/12, w12 = 0, w22 = 1/6

所以:

W_c = [[1/12, 0], 
       [0, 1/6]]

秩为 2,等于系统阶数,系统能控。

关键结论:格拉姆矩阵判据不仅告诉你系统能不能控,还能告诉你每个状态需要多少「控制能量」。W_c 的特征值越小,对应的状态方向就越难控制。

3.5 格拉姆矩阵的物理意义

你想想看,为什么这个矩阵叫「格拉姆矩阵」?其实它描述的是状态空间中各个方向上的能量分布

具体来说:

  • W_c 的特征值 λ_i 表示第 i 个能控方向上的「控制难度」
  • 特征值越大,这个方向越容易控制
  • 特征值为 0,说明这个方向完全不可控

我曾经调试过一个飞行器控制系统,发现某个模态的控制效果特别差。一查格拉姆矩阵,那个方向的特征值比其它方向小了三个数量级。后来调整了作动器布局,才把这个问题解决。

实用技巧:如果 W_c 的条件数很大(比如 > 10⁶),即使满秩,实际控制效果也可能很差。这时候要考虑重新配置传感器或执行器。

3.6 避坑指南

我曾经踩过的坑:

  • 数值稳定性:对于高阶系统(n > 10),直接求解李雅普诺夫方程可能数值不稳定。我建议用 gram() 函数,它内部用了更稳定的算法。
  • 非稳定系统:如果 A 有右半平面极点,格拉姆矩阵积分发散。这时候要用有限时间格拉姆矩阵,或者改用 PBH 判据。
  • 离散系统:离散系统的能控性格拉姆矩阵是 W_c = Σ_{k=0}^{∞} A^k B B^T (A^T)^k,求解的是离散李雅普诺夫方程。

3.7 知识体系总览

下面这张图总结了格拉姆矩阵判据的核心逻辑:

能控性格拉姆矩阵判据知识体系 系统模型 (A, B) 求解李雅普诺夫方程 A W_c + W_c Aᵀ = -B Bᵀ rank(W_c) = n ? n 为系统阶数 系统能控 所有状态可控 系统不能控 存在不可控状态 补充分析:特征值分布 → 控制难度评估 条件数过大时需重新配置执行器

3.8 小结

格拉姆矩阵判据是能控性分析中最优雅的方法之一。它不仅有严格的数学基础,还能给出控制能量的定量信息。我个人建议:

  • 理论分析:用格拉姆矩阵判据,物理意义清晰
  • 工程计算:用 MATLAB 的 gram() 或 Python 的 solve_continuous_lyapunov
  • 交叉验证:配合秩判据或 PBH 判据,避免数值问题导致的误判

记住一点:能控性分析不是一次性的工作。系统参数变化、工作点迁移,都可能影响能控性。定期检查格拉姆矩阵的条件数,是个好习惯。


公众号:蓝海资料掘金营,微信deep3321