3、能控性判据(格拉姆矩阵法)
能控性格拉姆矩阵法,说白了就是判断系统能不能被我们“指挥得动”。
我个人习惯把能控性理解成:你给系统一个输入信号,它能不能在有限时间内,从任意初始状态跑到你想要的任意终点状态。如果能,那系统就是能控的。
嗯,这里要注意,格拉姆矩阵法是一种充要条件。什么意思?就是它既不会漏判,也不会误判。不像有些判据(比如秩判据)在某些边界情况下会让人心里没底。
3.1 能控性格拉姆矩阵的构造
先看离散系统的状态方程:
x(k+1) = A x(k) + B u(k)
其中 x 是 n 维状态向量,u 是 m 维输入向量。
能控性格拉姆矩阵长这样:
W_c = Σ A^k B B^T (A^T)^k (k从0到n-1求和)
等等,我是不是写太快了?咱们一步步来。
这个矩阵的物理意义是什么?它其实衡量的是:输入能量通过系统动态,能在多大程度上影响各个状态分量。
我在项目中遇到过一个问题:一个四阶系统,用秩判据判断是能控的,但实际控制效果很差。后来一查,原来是格拉姆矩阵的条件数太大,接近奇异了。这就是所谓的“病态能控”——理论上能控,实际上很难控。
3.2 满秩条件与能控性判定
判定条件其实很简单:
离散系统能控的充要条件:
能控性格拉姆矩阵 W_c 是满秩的(即 rank(W_c) = n)
为什么?因为如果 W_c 不满秩,说明存在某个状态方向,无论你怎么给输入,都“够不着”那个方向。就像你开车,如果方向盘坏了,你只能直走,没法转弯——这就是那个方向不可控。
我给大家画个图,看看这个逻辑关系:
3.3 实际计算中的坑
讲个我踩过的坑。有一次我在 MATLAB 里算一个 10 阶系统的格拉姆矩阵,直接用公式循环求和。结果算出来矩阵的条件数大得离谱,满秩判断都出问题了。
后来发现,问题出在数值精度上。当系统矩阵 A 的谱半径接近 1 时,A^k 的数值会变得很大或很小,导致求和过程中出现严重的数值误差。
避坑指南:
我曾经在计算高维系统格拉姆矩阵时,直接用循环累加 A^k,结果数值溢出。后来改用 lyap 函数(求解李雅普诺夫方程)来间接计算,才解决了问题。
记住:能控性格拉姆矩阵也满足李雅普诺夫方程:
A * W_c * A^T - W_c = -B * B^T
用这个方程求解,数值稳定性好得多。
3.4 一个简单的例子
来看个二阶系统:
A = [1.2, 0;
0, 0.8]
B = [1;
0]
计算格拉姆矩阵(n=2):
k=0: B*B^T = [1, 0; 0, 0]
k=1: A*B*B^T*A^T = [1.44, 0; 0, 0]
W_c = [2.44, 0; 0, 0]
你看,W_c 的第二行第二列是 0,秩为 1,小于系统阶数 2。所以系统不能控。
为什么?因为第二个状态分量 x₂ 的方程是 x₂(k+1) = 0.8 x₂(k),输入 u 根本影响不到它。说白了,这个状态是“自由落体”的,你没法通过输入去改变它。
实用技巧:
我建议在实际工程中,不要只看秩是否等于 n,还要看格拉姆矩阵的最小奇异值。如果最小奇异值太小(比如小于 1e-6),即使理论上满秩,实际控制效果也会很差。
这就好比你的方向盘虽然能转,但转动的角度只有 0.001 度——理论上是能转向,实际上等于没转。
3.5 格拉姆矩阵法的优缺点
| 优点 | 缺点 |
|---|---|
| 充要条件,没有误判 | 计算量大,尤其是高维系统 |
| 能给出“能控度”的定量信息 | 数值稳定性问题需要注意 |
| 可以用于最优控制中的能量最小化设计 | 对时变系统需要重新计算 |
我个人觉得,格拉姆矩阵法最大的价值不在于“能不能控”这个二元判断,而在于它给出了能控的程度。你想想看,在实际工程中,我们往往不是问“能不能控”,而是问“好不好控”。格拉姆矩阵的条件数、最小奇异值,恰恰回答了这个问题。
嗯,关于能控性格拉姆矩阵法,就讲这么多。记住核心:满秩则能控,不满秩则不能控。但实际用的时候,多留个心眼,看看数值稳定性,看看条件数,别被理论上的“满秩”给骗了。
公众号:蓝海资料掘金营,微信deep3321