参数设置
系统矩阵 A 的各元素。A=[[a11,a12],[a21,a22]] 决定状态 x 的自由运动(固有运动)。
输入向量 B=[b1,b2]。决定输入 u 沿哪个方向推动状态。
能控性矩阵的列向量 — 状态平面
从原点伸出的两支箭头是能控性矩阵的列向量 B 和 AB。若二者线性无关,绿色平行四边形可张成整个平面;若平行(线性相关),则重叠在红色直线上,系统不能控。
理论与主要公式
$$\dot{x}=Ax+Bu,\qquad \mathcal{C}=\begin{bmatrix}B & AB\end{bmatrix}$$
状态方程与能控性矩阵 𝒞。对于二阶系统,𝒞 是把 B 和 AB 作为列排成的 2×2 矩阵。AB 是矩阵 A 与向量 B 的乘积。
$$\text{能控}\iff \operatorname{rank}\mathcal{C}=n$$
卡尔曼能控性判据。n 为状态的阶数(本工具 n=2)。若 rank 小于 n 则不能控。对 2×2 而言,det(𝒞)≠0 与 rank(𝒞)=2 等价。
$$\det\mathcal{C}=b_1(AB)_2-b_2(AB)_1$$
2×2 能控性矩阵的行列式。对 n 阶系统,一般构造 𝒞=[B, AB, A²B, …, Aⁿ⁻¹B] 的 n×n 矩阵并考察其秩。
什么是能控性
🙋
“能控性”这个词在控制工程课上出现过……粗略地说,它到底是一种什么性质呢?
🎓
一句话概括,就是“仅靠输入 u,能否把系统的状态 x 自由地移动到想去的位置”这一性质。比如考虑小车上立着倒立摆的系统,状态有四个:小车位置、速度、摆角、角速度。如果系统能控,仅凭推小车的力就能把这四个量全部调到任意值;反之若不能控,无论怎么努力,总会剩下触碰不到的状态。
🙋
会剩下触碰不到的状态——那要怎么分辨呢?这个工具里有 A 和 B 的滑块。
🎓
这时就轮到“能控性矩阵”𝒞 登场了。对二阶系统,𝒞=[B AB],即把输入向量 B 和它左乘一次 A 得到的 AB 并排组成的 2×2 矩阵。B 表示输入直接推动的方向,AB 表示一步之后影响传播到的方向。这两个向量若能张成整个平面,系统就能控;张不成则不能控。右上方的画布展示的正是这两支箭头。
🙋
原来如此,是两支箭头!那“能否张成平面”具体是用行列式来判断吗?
🎓
对,2×2 的情形直接算 det(𝒞) 最快。若 B 与 AB 线性无关,行列式为非零值,秩为 2,即能控;若 B 与 AB 平行(线性相关),行列式恰好为 0,秩降到 1,系统不能控。把左侧的 b1 保持默认值 0、b2 保持默认值 1,就有 AB=[1,-2],det=-1。因为不为 0,这个系统能控——结果卡片上应该会这样显示。
🙋
行列式不为 0 就行,这一点我明白了。不过 |det| 的数值本身也有意义吗?卡片里有一项“能控性强度”。
🎓
问得好。能控还是不能控是“是否为 0”的 Yes/No 判定,但在实际工程中,“离 0 有多近”同样重要。|det| 很小的系统,纸面上虽然能控,数值上却几乎不能控:反馈增益会变得异常巨大,导致对噪声敏感、执行器饱和等问题。因此把 |det| 当作“能控性强度”的参考,就能大致判断设计是否现实。严格来说应使用格拉姆矩阵(Gramian)的奇异值,但要建立直觉,用 |det| 就足够了。
🎓
系统能控就可以自由地进行“极点配置”,这是最大的好处。适当选择状态反馈 u=-Kx 的增益 K,就能把闭环系统的极点(特征值)放到任意位置。也就是说,即使是不稳定的系统,也能按预期设计响应速度和阻尼。反过来,如果存在不能控的模态,其极点无法通过 K 移动;若这个模态恰好不稳定,状态反馈无论如何都无法使系统稳定。所以控制系统设计的出发点,就是先检查能控性。
常见问题
什么是能控性?如何判定?
能控性是指“给定适当的输入 u(t),能否在有限时间内把状态 x 移动到任意点”的性质。对 n 阶线性时不变系统 ẋ=Ax+Bu,构造能控性矩阵 𝒞=[B, AB, A²B, …, Aⁿ⁻¹B],若其 rank 等于 n 则判定为能控(卡尔曼能控性判据)。本工具处理二阶系统,故 𝒞=[B AB],只要其行列式不为 0(rank=2)即能控。
能控性矩阵的行列式变为 0 时会发生什么?
当 det(𝒞)=0 时,列向量 B 与 AB 位于同一直线上(线性相关),能控性矩阵的秩从 2 降到 1 以下。这意味着输入 u 只能驱动状态空间中的部分方向,即系统不能控。从物理上讲,此时存在无法由输入激励的模态,该方向的状态只能保持初值,或任由系统的固有运动支配。在本工具中,B 与 AB 会重叠显示在红色直线上。
能控性矩阵的行列式与稳定性有关系吗?
没有直接关系。能控性关注“能否用输入驱动状态”,稳定性关注“放任不管是否会发散”,是两种不同的性质。存在不能控但稳定的系统,也存在能控但不稳定的系统。不过需要注意:若不能控的模态不稳定,就无法通过状态反馈使系统稳定。只要系统能控,就可以任意配置极点,把不稳定极点自由地移到左半平面。
能控性矩阵行列式的大小有意义吗?
|det(𝒞)| 离 0 越远,说明列向量 B 与 AB 越接近正交、彼此独立,可以粗略地作为“能控性强度”的参考。|det| 很小(接近 0)的系统在数值上接近不能控:反馈增益可能变得极端巨大,微小的模型误差就会使系统实质上不能控。严格的指标是能控性格拉姆矩阵的最小奇异值,本工具的 |det| 是一个直观的近似指标。
实际应用
倒立摆·小车系统的镇定: 控制工程的经典对象倒立摆,用“位置、速度、角度、角速度”四阶状态建模。设计的第一步就是确认该系统是否能控。若能控,就可以用状态反馈配置极点,把不稳定的“倾倒”模态移到左半平面,使摆保持直立。本工具的二阶系统正是以最小配置体验这一判定逻辑。
多输入系统的执行器布置: 在飞机姿态控制和四轮独立转向车辆中,把执行器(输入 B 的方向)布置在哪里会左右系统的能控性。设计阶段会针对多个 B 候选比较能控性矩阵的秩和 |det|,选择能以足够“强度”驱动所有模态的布置。传感器或执行器发生单点故障时系统是否会陷入不能控,这类容错设计也使用同样的判定。
现代控制(LQR·极点配置)的前提检查: 基于 LQR 或极点配置的状态反馈设计,以对象能控(至少可镇定)为前提。MATLAB 的 ctrb / rank、Python python-control 的 ctrb 等,工程现场的工具链一定从能控性判定开始。若系统包含不能控的模态,设计者对该模态无从下手,需要重新考虑输入的选取或建模方式。
过程控制·电力系统: 在化工厂的温度·浓度控制、电力系统的频率·电压控制等大规模系统中,能控性同样是判断“某个控制输入能否把整个系统引导到期望状态”的基础。把能控子空间与不能控子空间分离(卡尔曼分解),只把设计资源集中于可以控制的部分,这类策略也直接建立在能控性之上。
常见误解与注意事项
首先最常见的是“混淆能控性与稳定性” 。能控性关注“能否用输入驱动状态”,稳定性关注“切断输入后状态是否不发散”,是完全不同的两种性质。能控但不稳定的系统(如倒立摆)极为常见,控制真正的用武之地恰恰在这里;反之,不能控但稳定的系统同样存在。请理解:本工具的 det(𝒞) 是能控性的指标,与 A 的特征值(稳定性)是两回事。即使 det(𝒞)≠0,也并不意味着系统稳定。
其次是“误以为数值上能控就没有实用问题” 。即使 det(𝒞) 不为零,非常接近零的系统也“几乎不能控”。在这种状态下强行配置极点,反馈增益 K 会变得极端巨大,放大测量噪声,让执行器立即饱和,并对模型误差极度敏感。即便纸面上 rank=2,若 |det| 很小,也可能“设计得出来但现实中根本不能用”。工程实务的铁则是:能控性不仅要看 Yes/No,还要看“强度”。
最后是“对能控性矩阵的数值秩计算过度信任” 。能控性矩阵 𝒞=[B, AB, …, Aⁿ⁻¹B] 在阶数 n 变大时,Aⁿ⁻¹B 项会大到(或小到)相差好几个数量级,矩阵的条件数变得极差。因此对高阶系统,不应使用行列式或朴素的秩计算,而要用奇异值分解(SVD)评估有效秩,或采用数值稳定的能控性格拉姆矩阵、阶梯形(staircase form)变换等方法。本工具是用于概念理解的二阶系统,这一问题不会显现;但在实际系统中,不要简单相信“算出秩=n 就能控”,还应确认条件数。
具体计算示例
对直流电机控制系统(a11=0, a12=1, a21=-10, a22=-5, b1=0, b2=1):能控性矩阵为 [0 1; 1 -5],det(𝒞)=-1,rank(𝒞)=2,完全能控。另一方面,改为 a21=0, a22=-5 时矩阵为 [0 1; 1 0],det(𝒞)=-1,仍然能控;但改成 b1=1, b2=0 后矩阵为 [1 0; 0 -5],det(𝒞)=-5。对串联RLC滤波器(a11=0, a12=1, a21=-1, a22=-2, b1=0, b2=1),det(𝒞)=-1(能控);若两个输入方向相同,则 det(𝒞)=0(不能控)