2. 线性定常系统的能控性定义:状态能控与输出能控的区别与联系

能控性这个概念,说白了就是问一个问题:你手里的控制量,到底能不能把系统的状态或者输出,拽到你想要的地方去?

我刚入行做飞行器控制的时候,遇到过一件挺尴尬的事。设计了一个控制器,仿真跑得飞起,结果一上硬件,某个状态变量死活调不回来。后来一查,那个状态根本不受控制输入的影响——这就是典型的能控性问题。从那以后,我设计任何系统之前,第一件事就是先算能控性矩阵。

这一节,我们就来掰扯清楚两个概念:状态能控输出能控。它们长得很像,但本质完全不同。

2.1 状态能控性:你到底能不能控制每一个内部变量?

先看定义。对于一个线性定常系统:

ẋ = Ax + Bu
y = Cx + Du

状态能控性指的是:是否存在一个控制输入 u(t),能在有限时间内,把系统的任意初始状态 x(0) 转移到任意期望的终端状态 x(t₁)。

嗯,这里要注意:它关心的是状态变量,不是输出。状态变量是系统内部的、看不见摸不着的东西。比如一个电机,它的状态可能是电流和转速,但你只能测到转速输出。状态能控性问的是:你能不能通过调节电压(输入),让电流和转速都按你的想法走?

判断方法很简单——算能控性矩阵:

Qc = [B  AB  A²B  ...  Aⁿ⁻¹B]

如果这个矩阵满秩(秩等于 n,系统阶数),那系统就是状态完全能控的。

核心要点:状态能控性关注的是系统内部所有状态变量的可操控性。它是最根本的能控概念。

2.2 输出能控性:我只关心你输出的结果

输出能控性就接地气多了。它问的是:你能不能通过控制输入 u(t),在有限时间内,让系统的输出 y(t) 从任意初始值到达任意期望值?

你想想看,很多时候我们并不关心系统内部的状态到底怎么样。比如一个温度控制系统,我只关心最终温度(输出)能不能达到设定值,至于加热器内部的温度分布怎么样,我不在乎。

输出能控性的判断矩阵是:

Qoc = [CB  CAB  CA²B  ...  CAⁿ⁻¹B  D]

如果这个矩阵的秩等于输出变量的个数 p,那系统就是输出能控的。

我个人习惯:做工程应用时,我通常先检查输出能控性。因为大多数控制任务最终关心的是输出。但如果做状态反馈或者观测器设计,那就必须检查状态能控性了。

2.3 两者的区别与联系:一张表说清楚

对比项 状态能控性 输出能控性
控制对象 内部状态变量 x 输出变量 y
判断矩阵 Qc = [B AB ... Aⁿ⁻¹B] Qoc = [CB CAB ... CAⁿ⁻¹B D]
满秩条件 rank(Qc) = n rank(Qoc) = p
工程意义 能否设计状态反馈 能否实现输出跟踪
依赖关系 状态能控 ≠ 输出能控 输出能控 ≠ 状态能控

这里有个坑,我曾经踩过:状态能控的系统,输出不一定能控;反过来,输出能控的系统,状态也不一定能控。

为什么会这样?举个例子你就明白了。

假设一个系统有两个状态变量,但输出只取了其中一个。如果那个被取出的状态是能控的,但另一个状态不能控——那输出能控性矩阵可能是满秩的(因为输出能控),但状态能控性矩阵不满秩(因为有一个状态不能控)。

反过来,如果两个状态都能控,但输出是它们的某种线性组合,且这个组合恰好抵消了控制输入的影响——那状态能控,但输出可能不能控。

避坑指南:我曾经在一个电机控制项目里,只验证了输出能控性就上了状态反馈控制。结果发现某个内部状态发散,系统直接炸了。后来才意识到——状态反馈要求所有状态都能控,光输出能控是不够的。

2.4 知识体系框架图

下面这张图,帮你理清状态能控与输出能控的关系:

能控性知识体系框架 线性定常系统能控性 状态能控性 输出能控性 控制对象:内部状态变量 x 判断矩阵:Qc = [B AB ... Aⁿ⁻¹B] 满秩条件:rank(Qc) = n 控制对象:输出变量 y 判断矩阵:Qoc = [CB CAB ... D] 满秩条件:rank(Qoc) = p 两者无必然因果关系,需分别验证

2.5 一个简单的数值例子

来看个具体的系统,加深理解:

A = [0  1;    B = [0;    C = [1  0];    D = 0
     0  0]         1]

这个系统是个积分器串联结构。状态 x₁ 是位置,x₂ 是速度,输入 u 是加速度。

先算状态能控性:

Qc = [B  AB] = [0  1; 1  0]
rank(Qc) = 2 = n  → 状态完全能控

再算输出能控性:

Qoc = [CB  CAB  D] = [0  1  0]
rank(Qoc) = 1 = p  → 输出完全能控

这个例子里,状态和输出都能控。但如果我们把 C 改成 [0 1],输出只测速度:

Qoc = [CB  CAB  D] = [1  0  0]
rank(Qoc) = 1 = p  → 输出仍然能控

状态能控性不变,还是满秩。但如果把 B 改成 [1; 0],输入只作用在位置上:

Qc = [B  AB] = [1  0; 0  0]
rank(Qc) = 1 ≠ 2  → 状态不能控

但输出能控性呢?

Qoc = [CB  CAB  D] = [1  0  0]
rank(Qoc) = 1 = p  → 输出仍然能控

看到了吗?状态不能控,但输出能控。这就是两者的本质区别。

总结一下:状态能控性更"底层",它决定了你能不能对系统内部动手术。输出能控性更"实用",它决定了你能不能完成控制任务。做工程时,我建议两个都算一遍,别偷懒。


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