资讯动态

状态空间能控性判断:秩判据、PBH判据与工程实践

发布时间:2026/9/28 6:44:19 来源:尧图企业网站定制
拿到一个系统模型比如最常见的状态方程 (\dot{x}AxBu)学现代控制原理的人几乎都会脱口而出这个系统能不能控说实话能控这两个字在自动控制原理里太容易被当成一句口号背过去了——老师讲秩判据你记个 (rank\left[ B\ AB\ \cdots\ A^{n-1}B \right]n)考试能过但真拿一个工程对象来问你为什么这系统就不能控很多人就卡住了。我写这篇东西就是想用比较生动的方式把这个判断能控的问题讲透不光告诉你怎么算还让你理解秩判据里那些矩阵为什么长成那样遇到实际系统时怎么快速判断、怎么避开数值坑。文章适合正在学现代控制原理、复习自动控制原理准备考研、或者刚开始用状态空间方法做控制器设计的读者线性代数基础只要到矩阵秩、特征值这个水平就够用。1. 能控性到底在问什么——从方向盘说起1.1 一个通俗到极致的直觉你先忘掉所有数学公式想一个最简单的场景你开一辆车方向盘、转向拉杆、车轮都是好的那你想要车往左就往左、往右就往右这个系统是能控的。但假如方向盘和转向机构之间那根轴断了你无论怎么转方向盘车轮都不理你这时候车就处于不可控状态。把这个场景搬到状态空间里系统的状态就是车的位置、速度、角度这些东西输入 (u) 就是你踩油门、打方向盘的指令矩阵 (B) 就是你的指令能作用到哪些状态上的通道。能控性要回答的问题非常朴素给定任意一个初始状态你能不能通过一段合法时间内的输入序列把系统状态搬到任意你想要的目标状态如果能那这个系统在状态空间的意义上就是能控的如果存在某个角落无论你怎么使劲都到不了那这个方向就是不可控的。这个朴素定义是卡尔曼在六十年代正式给出的它后来成了现代控制理论里一切设计的先决条件。你要做极点配置、做LQR、做状态观测器第一步一定是确认系统能控否则后面全是空中楼阁。1.2 从状态方程看控制臂够不够长有了直觉再看数学。连续线性时不变系统[ \dot{x}AxBu ]其中 (x\in R^n)(u\in R^m)(A) 是系统矩阵(B) 是输入矩阵。(A) 描述了系统自身的动态也就是你不踩油门时车自己会怎么滑行、怎么摆动(B) 描述了你的手能直接推动哪些状态。问题来了你的手只能通过 (B) 直接推动一部分状态但系统状态之间有耦合——(A) 会让一个状态的变化带动另一个状态变化。所以即便 (B) 只直接控制速度你也能通过控制速度间接控制位置就像开车时你没有直接控制位置的踏板但你踩油门能改变速度速度积分成位置位置照样被你控制住。这个间接控制就是能控性的核心。(B) 是你的手直接够到的地方(A) 是系统内部的传动结构能控性判断的实质是你的手加上系统的内部传动最终能不能够到状态空间里的每一个方向。如果传动结构里有一根轴是断的某个模态和输入完全无关那这个方向就永远够不到。1.3 为什么能控性是一切控制器设计的前置检查我在实际项目里见过不少同学或者年轻工程师拿到对象模型之后第一件事就是调LQR权重矩阵 (Q) 和 (R)调了半天性能还是上不去最后回头一查才发现系统里有一个模态根本不可控——你费劲调出来的控制器本质上只是在一个不可控系统上做无用功。自动控制原理里讲传递函数时如果有零极点对消你其实已经遇到过不可控/不可观的雏形只是当时没点破。到了现代控制原理状态空间模型把这个问题摆到了台面上一个系统能不能被任意配置极点、能不能通过状态反馈达到你想要的全部动态特性取决于能控性一个系统的状态能不能被观测出来取决于能观性。这两个概念是一对姊妹本篇文章先集中聊能控性能观性在最后会作为对照提一下。2. 三个判断武器——秩判据、PBH判据、约当标准型判据2.1 秩判据最硬核也最常用的方法绝大多数教材讲能控性判断第一个给的就是秩判据。对 (n) 阶系统构造能控性矩阵[ Q_c \left[ B \quad AB \quad A^2B \quad \cdots \quad A^{n-1}B \right] ]然后看它的秩[ rank(Q_c) n ]如果满秩系统能控不满秩系统存在不可控模态。这个方法简单粗暴手工计算时对低阶系统很友好计算机实现也极其容易所以它是工程上默认的第一选择。为什么要算到 (A^{n-1}B) 就停而不是一直算到 (A^{100}B)这是凯莱-哈密顿定理告诉我们的(A^n) 一定能表示成 (I, A, A^2, \ldots, A^{n-1}) 的线性组合。所以 (A^nB、A^{n1}B) 这些列向量不会给能控性矩阵带来新的线性无关方向矩阵列的信息量到 (A^{n-1}B) 就饱和了。你算再多秩也不会增加。2.2 PBH判据逐个特征值审查精准定位病灶秩判据能告诉你系统整体能不能控但你想知道到底是哪个模态不可控时秩判据就不够直观了。这时候用PBH判据Popov-Belevich-Hautus判据它的核心结论是[ rank\left( \left[ \lambda_i I - A \quad B \right] \right) n ]对系统所有特征值 (\lambda_i) 都要成立系统才完全能控。这个判据看起来要算很多次但它的好处是能直接定位不可控模态。如果某个特征值 (\lambda_i) 让这个增广矩阵降秩那说明存在一个非零左特征向量 (q)满足[ q^T A \lambda_i q^T, \quad q^T B 0 ]翻译成人话存在一个特征方向系统内部会沿着它自己演化但你的控制输入对这个方向完全使不上劲。这就是断掉的方向盘拉杆在数学上的位置。我在实际排查问题时特别喜欢用PBH判据而不是单纯算 (Q_c) 的秩。因为算完 (Q_c) 秩不够你还得回头慢慢找是哪个方向不可控而PBH判据直接把特征值和可控性挂钩哪个特征值不过关哪个模态有问题一目了然。后面第4节会给你一个具体手算例子。2.3 约当标准型判据拆开看最直观第三种常用判据是把系统变换到约当标准型再判断。假设系统已经化成约当形[ \dot{z} Jz \tilde{B}u ]那么判断规则是每个约当块对应的 (\tilde{B}) 的最后一行的行向量不能是全零行如果同一特征值有多个约当块这些约当块最后一行行向量需要线性无关。这个方法理解起来其实最物理约当块就是系统内部被解耦出来的一个个小房间每个房间有自己的动态。你要能控每个房间就必须在房间里有自己的控制入口如果某个约当块对应的那一行输入通道全是零那这个房间就是密闭的外面的信号进不去这个模态就完全不可控。三种判据各有适用场景我做了一个简单对比判据计算量能否定位不可控模态适合场景秩判据小构造一个矩阵求秩能判断能不能控难定位日常快速判断、编程实现PBH判据中每个特征值算一次能直接定位特征模态分析具体哪个模态不可控约当标准型大需要做相似变换能直观看出结构问题理论分析、系统结构设计实际工作中我的习惯是先用秩判据做快速筛查如果发现秩不够再用PBH判据去定位具体故障模态。约当标准型更多用于理论推导和教学演示真到工程计算里矩阵阶数一大求约当标准型本身就不稳定不太划算。3. 理解为什么是[B AB A²B ...]——从一步能走到n步能走3.1 递推视角离散化之后一切都清楚了很多同学背得住 (Q_c [B\ AB\ A^2B\ \cdots])但被问为什么 (AB) 也要算进去就答不上来。我建议你先看离散系统一切都清楚得多。设离散系统[ x(k1)Ax(k)Bu(k) ]从任意初始状态 (x(0)) 出发[ x(1)Ax(0)Bu(0) ][ x(2)A^2x(0)ABu(0)Bu(1) ][ x(3)A^3x(0)A^2Bu(0)ABu(1)Bu(2) ]你发现没有控制输入在第 (k) 步能影响的方向集合就是 (B, AB, A^2B, \ldots) 这些列向量张成的子空间。(Bu(0)) 是第一步直接注入的方向(ABu(0)) 是第一步注入后经过系统动态演化一步之后留下的足迹(A^2Bu(0)) 是注入后演化两步的足迹。能控性问的是给我 (n) 步时间我能把这些控制足迹组合到多大空间如果这些列向量张满了整个 (R^n)那我就有办法通过设计一串 (u(0), u(1), \ldots, u(n-1)) 把状态从任意起点搬到任意终点。连续系统虽然时间上无限细分但思想完全一样只是把求和变成了积分能控性格拉姆矩阵而秩判据则和这个离散化视角下的结论保持一致。3.2 AB、A²B的物理味道为什么单独一个 (B) 不够很简单因为 (B) 的列数通常只有 (m) 个而状态空间的维度 (n) 往往比 (m) 大得多。比如一个单输入系统(B) 只是个列向量你直接控制的方向只有一个。但是系统内部有耦合控制量先通过 (B) 注入到某个状态再被 (A) 推动去影响别的状态。(AB) 这个矩阵的每一列就是输入先被 (B) 映射到状态空间然后被系统动态自然演化一步后的方向。我特别喜欢用一个推箱子的类比(B) 是你站在某个位置推箱子的方向(AB) 是箱子被推了一下之后顺着地面摩擦力、惯性自然滑动一段后的运动方向。如果你每次只能从一个角度推但箱子在滑动过程中会自己拐弯那通过推一下、等一会儿、再推一下的组合你其实可能让箱子走遍整个房间。能控性矩阵里的每一列就是你每一次推完等待演化之后在房间里留下的轨迹方向。3.3 秩不够意味着什么——几何直觉理解了列向量的物理意义秩判据的几何含义就水落石出了。假设你把这些列向量全部列出来它们张成一个子空间 (S)。如果 (S) 的维度小于 (n)那么按照线性代数的结论存在一个非零向量 (q) 与 (S) 中所有向量正交(q^TB0,\ q^TAB0,\ \ldots,\ q^TA^{n-1}B0)。这个 (q) 就是不可控方向。你在任何时刻施加的控制在这个方向上的投影都是零系统状态中沿着 (q) 方向的分量完全不受输入影响只能随 (A) 自己演化。换句话说这个方向就像被一堵透明的墙隔离了一样你的手伸不进去。用三维空间举个例子如果你的状态是三维的但所有控制足迹都躺在同一个平面里那垂直于这个平面的那个方向就是不可控的。你在这个平面上怎么折腾都没用因为你的控制永远无法给垂直方向分量做功。这就是秩不够 系统没有足够多的自由度来覆盖整个状态空间的几何本质。4. 实战手算三个典型系统的能控性4.1 例子1双积分器——最简单的能控系统先看一个最常见的双积分器模型比如小车的位移和速度[ A\begin{bmatrix}01\00\end{bmatrix},\quad B\begin{bmatrix}0\1\end{bmatrix} ]这个系统 (n2)算能控性矩阵[ AB \begin{bmatrix}01\00\end{bmatrix}\begin{bmatrix}0\1\end{bmatrix}\begin{bmatrix}1\0\end{bmatrix} ][ Q_c \left[ B \quad AB \right]\begin{bmatrix}01\10\end{bmatrix} ](\det(Q_c)-1\neq0)秩为2能控。这个结果符合直觉你通过控制加速度也就是速度的导数一步步就能控制位置和速度两个状态位置虽然不能被直接控制但速度积分成位置属于典型的间接可控。这个系统也是后面做极点配置、LQR最常用的练手对象。4.2 例子2串联系统里藏着一个不可控模态再看一个稍微阴险一点的系统[ A\begin{bmatrix}01\-2-3\end{bmatrix},\quad B\begin{bmatrix}0\0\end{bmatrix} ]这个 (B) 是全零矩阵输入根本没有注入到系统里能控性矩阵全是零矩阵秩为0系统完全不可控。这属于一眼就能看出来的情况。真正容易看走眼的是这种[ A\begin{bmatrix}010\-2-30\00-1\end{bmatrix},\quad B\begin{bmatrix}0\1\0\end{bmatrix} ]注意看第三个状态 (x_3) 的动态是 (\dot{x}_3-x_3)完全独立而且 (B) 的第三行是0所以这个模态和输入没有任何联系。如果你只机械地套秩判据不加思考也能算出来秩不够但你可能不知道具体坏在哪。这时候用PBH判据对特征值 (\lambda-1)[ \left[ -1I-A \quad B \right] \begin{bmatrix}-1000\2201\0000\end{bmatrix} ]最后一行全零明显降秩立刻定位(\lambda-1) 这个模态不可控。这个例子告诉我们系统里只要有一个状态方程里不出现 (u)、且和其他状态没有耦合的状态那这个状态十有八九就是不可控的。4.3 例子3用Python写一个通用判断函数工程上不可能天天手算写个脚本才是正道。我用Python的numpy给你一个最小实现import numpy as np def controllability_matrix(A, B): n A.shape[0] m B.shape[1] Qc B.copy() power np.eye(n) for i in range(1, n): power power A Qc np.hstack([Qc, power B]) return Qc A np.array([[0, 1], [0, 0]]) B np.array([[0], [1]]) Qc controllability_matrix(A, B) print(Qc rank:, np.linalg.matrix_rank(Qc)) print(System controllable:, np.linalg.matrix_rank(Qc) A.shape[0])要注意的是np.linalg.matrix_rank默认会用一个容差来判断奇异值是否为零这个容差和矩阵维度、数值尺度有关对小矩阵没问题但大系统或者病态系统可能出现误判。我习惯把奇异值显式打印出来看sv np.linalg.svd(Qc, compute_uvFalse) print(Singular values:, sv)如果最小的奇异值小到和最大奇异值差了好几个数量级那这个系统在数值意义上就接近不可控即使理论上是能控的实际控制效果也会非常差。这一点在第5节会展开讲。5. 能控性判断中容易踩的坑5.1 数值病态理论能控实际难控这是我在实际工程项目里踩过的大坑。有一次做一个四阶系统的控制器用MATLAB算rank(ctrb(A,B))得到4满秩我心里踏实了。结果控制器设计出来后反馈增益大得离谱执行机构根本输出不了那么大。后来我把能控性矩阵的奇异值打出来一看最小奇异值只有 (10^{-8}) 量级最大奇异值是 (10^2)条件数达到 (10^{10})。这种系统在理论上能控但能控性质量极差虽然满秩但某个方向几乎不受控制影响你需要极大的控制能量才能推动它。这就像方向盘虽然没断但是转向拉杆被橡皮筋拴住了——你能控但要使很大劲且反应很慢。所以判断能控性时不仅要看秩还要看能控性格拉姆矩阵的最小奇异值。奇异值太小就意味着系统病态能控设计控制器时要格外小心或者考虑改变执行机构配置。5.2 采样系统与离散化的能控性变化连续系统能控离散化之后未必一定保持能控反过来有些连续系统不可控离散化之后反而可能看起来能控。这是因为采样会让系统丢掉一些动态也可能因为采样周期和系统特征值之间有特殊关系导致离散能控性矩阵降秩。一个经典例子采样周期 (T) 和非零特征值产生重叠时离散化后会出现能控性丧失。我给你的建议是系统如果是数字控制器实现一定要在离散域重新做能控性判断不要偷懒直接用连续域的结论。尤其是那些特征值实部都在左半平面很远处的高频模态采样周期稍微大一点这些模态在离散域里的响应几乎衰减完了控制能量也传不过去实际就相当于不可控。5.3 能控和能观的镜像关系学现代控制原理的人经常把能控和能观混在一起。其实它们是对偶的系统 ((A,B)) 能控当且仅当对偶系统 ((A^T, B^T)) 能观。这里的对偶就是把能观性矩阵写成[ Q_o \begin{bmatrix}C\CA\ \vdots \CA^{n-1}\end{bmatrix} ]它的秩判断和能控性完全对称。我在做状态观测器设计时一定先检查能观性否则即使系统能控你看不到状态也无法做状态反馈。一个特别容易忽视的点能控和能观是两个独立性质一个系统完全可以既能控但不可观或者反之或者两个都满足或者两个都不满足。设计完整控制系统时两边的检查缺一不可。实践中我遇到过系统能控、但某个状态完全观测不到的情况结果不得不引入观测器重新设计白白浪费了一周。5.4 结构性问题把系统解析地看出不可控除了数值计算我还建议你养成一个习惯拿到系统模型后先别忙着敲代码先在纸面上看一遍结构。看看 (A) 是否是分块对角矩阵有没有一个状态完全独立、(B) 对应行又是全零的。这类结构性问题往往一眼就能判断不可控不需要任何计算。比如前面4.2那个例子只要看到第三个状态 (\dot{x}_3-x_3) 且 (B) 第三行全零你就已经知道它不可控了。我在带新人时经常说先做10分钟的纸面结构分析再做1分钟的计算机数值验证这两步组合起来比上来就rank(ctrb())稳妥得多。6. 判断完能控之后怎么真正用起来6.1 从能不能控到多能控工程上光知道Yes/No是不够的。系统能控但你还要问一句控制它需要多大的能量稳定时间大概会是多少这就要引入能控性格拉姆矩阵[ W_c(t) \int_0^t e^{A\tau}BB^T e^{A^T\tau}d\tau ]这个矩阵的最小特征值反映了最不可控方向上单位控制能量能产生多少状态变化。特征值越大说明系统越容易控制特征值小到一定程度即使秩判据满足实际工程效果也很差。我在设计执行机构选型时常用 (W_c) 的最小奇异值做一个快速能量估算。如果按理想控制器算出来的最小控制能量已经接近执行机构极限那这系统基本等于名义能控、实际废控就要回头调整系统结构比如增加执行器数量、改变力的作用点而不是硬调控制参数。6.2 能控性给极点配置开绿灯只有系统能控状态反馈 (u-Kx) 才能任意配置闭环极点。这一点是自动控制原理中根轨迹法和现代控制理论的分水岭经典方法只能通过调增益移动极点而现代控制原理告诉你只要系统能控极点想放哪就放哪。实际设计步骤我总结成一个流程写状态方程检查能控性用秩判据奇异值根据性能指标选定闭环极点响应速度、阻尼、带宽用Ackermann公式或占位法求反馈增益 (K)仿真验证重点关注实际执行机构能量是否过限。第1步千万别省。我见过太多人直接跳到第3步算出来的 (K) 巨大无比执行机构一秒就饱和最后还怪控制器设计方法不行。其实问题在系统本身就处于病态能控状态光靠调 (K) 解决不了。6.3 个人经验一个判断能控性的自我检查清单最后把我的经验做个总结也算是我在项目里一直用的检查清单结构先行先看 (A) 、 (B) 有没有全零行、分块对角、明显解耦先在纸面上做三轮判断数值验证用Python或MATLAB算能控性矩阵的秩同时打印奇异值模态定位如果秩不够用PBH判据逐个特征值检查找出不可控特征值离散复核如果是数字控制系统在离散域再做一次能控性检查能量评估用能控性格拉姆矩阵的最小特征值评估控制难度防止虚假能控。还有一个我经常提醒自己的细节系统的能控性在选取不同状态变量时是不会变的因为能控性本质是系统结构属性。如果你发现换了个坐标变换后能控性判断结果变了那一定是代码写得有问题不是理论出问题。能控性这个概念说难不难说简单不简单。它真正的价值不在于考试时能算出个秩来而在于让你在设计系统之前就知道这条路走不走得通。我做了这么多年的控制系统设计越来越觉得很多项目返工的原因不是控制器设计得不好而是最开始就没有认真做能控性、能观性这些基础分析。把这些基础打牢后面所有花哨的算法才有发挥的空间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑