- 根据极点-零点分布进行状态空间模型降阶
-
- 极点(Pole)的物理/数学含义
- 零点(Zero)的物理/数学含义
- 极点--零点相同位置:模式抵消
- [✨ 为什么 可以 模型降阶?](#✨ 为什么 可以 模型降阶?)
- [MATLAB 绘制极点-零点分布](#MATLAB 绘制极点-零点分布)
根据极点-零点分布进行状态空间模型降阶
- 极点 告诉你系统自己会怎么"颤动/衰减"------是所有模态的汇总;
- 零点 告诉你在哪些频率上"输入到输出的链路被一脚踹断"------那些模态对外是不透明的;
- 极点--零点相同 说明 "内部有这个模态,但外部完全看不到",正是降阶的目标。
极点(Pole)的物理/数学含义
- 自然模态(Natural Modes)
- 极点 s i s_i si 就是矩阵 A A A 的特征值 。每一个特征值对应一个"模态"------系统在无外力( u = 0 \!u=0 u=0)下,会 沿着对应的特征向量方向 ,以 e s i t e^{s_i t} esit 的形式 自然衰减或振荡。
- 如果 s i s_i si 是实数,模式是单指数衰减 e s i t e^{s_i t} esit;如果是复数对 α ± j β \alpha\pm j\beta α±jβ,是衰减振荡 e α t cos ( β t ) e^{\alpha t}\cos(\beta t) eαtcos(βt)。
- 时域含义
- ℜ ( s i ) < 0 \Re(s_i)<0 ℜ(si)<0 → 模式衰减,且 ∣ ℜ ( s i ) ∣ |\Re(s_i)| ∣ℜ(si)∣ 越大,衰得越快,系统稳定;
- ℜ ( s i ) > 0 \Re(s_i)>0 ℜ(si)>0 → 模式发散,系统不稳定;
- ℜ ( s i ) = 0 \Re(s_i)=0 ℜ(si)=0 且 ℑ ( s i ) ≠ 0 \Im(s_i)\neq0 ℑ(si)=0 → 永久振荡(边界稳定)。
- 频域含义
- 在频率响应里,离开输入的频率越靠近某个复数极点的虚部,系统对该频率的放大倍数越大(共振/峰值)。
零点(Zero)的物理/数学含义
- 传输零点(Transmission Zeros)
- 零点 z j z_j zj 是这样一类频率:即使在输入端 U ( s ) U(s) U(s) 做脉冲/正弦激励,输出 Y ( s ) Y(s) Y(s) 却在此 s = z j s=z_j s=zj 频率处被完全"抑制"(幅度为零)。
- 数学上,零点是使得传递函数矩阵 G ( s ) G(s) G(s) 在某个方向上降秩(或者 分子多项式为零 )的 s s s 值。
- 输入--输出影响
- 有零点的模式往往是那种"输入作用到这个模态上,会被系统某种耦合机制立刻在输出端给抵消掉",即 在传递路径上打了一个"死结"。

这些脉冲响应来自拥有 相同极点 的系统,那么它们究竟如何产生如此巨大的差异呢?
首先注意到,它们的 传递函数分子 (零点位置)是不同的。我们把这两组传递函数 泛化为二阶系统:

左侧系统在 s = − z s=-z s=−z 处有一个零点;右侧系统没有任何零点。
问题就转化为:一个零点的存在,为什么会导致如此不同的响应?
首先看 无零点系统 H 1 ( s ) H_1(s) H1(s) 的脉冲响应,

其中极点为复共轭对(阻尼比 ζ < 1 \zeta<1 ζ<1),可分解并做部分分式展开,取逆拉普拉斯变换后得到时域脉冲响应并简化,

注意, y 1 ( t ) y_1(t) y1(t) 是指数和正弦波的乘积,指数项控制衰减(或增长)速度,正弦项控制振荡频率。

现在已经确定了无零脉冲响应,现在来确定 在 − z -z −z 处有一个零点系统 H 2 ( s ) H_2(s) H2(s) 的脉冲响应,

同样对分母分解、做部分分式展开,并取逆拉普拉斯变换,化简后可得,

事情开始变得有趣了,看一下第二项 z − a b \frac{z-a}{b} bz−a,随着 z z z 接近 a a a,频率响应的一部分会缩放,特别是当 z z z 接近于 p p p 的实部时,极点位于 − p -p −p,该项会消失。

- 缩放 了无零点响应 y 1 y_1 y1;
- 叠加 了 y 1 y_1 y1 的一阶导数项。
极点--零点相同位置:模式抵消
当看到:
vbnet
极点: -1.8423, -1.7864, ...
零点: -1.8423, -1.7864, ...
一一对应,说明:
- 这些 极点--零点对 在传递函数里互相抵消,对输入--输出动态没有贡献。
- 换言之,这部分"内部模态"虽然存在于 A A A 矩阵,却对任何外部输入 u u u 并不会在输出 y y y 上留下痕迹------要么是 不可观测 ,要么是 不可控,或者两者兼有。
✨ 为什么 可以 模型降阶?
点 | 含义 |
---|---|
极点 = 模态存在 | 系统里有这个模式 |
零点 = 模态抵消 | 输入--输出通路上不允许这个模式传播 |
极点 = 零点 | 模态虽然存在,但完全被抑制,对输入输出行为 没有任何影响 |
极点 = 零点 为什么无用? | 不影响响应、不影响控制器、不改变系统性能,删掉更高效 |
- 移除"丝毫不影响"输入--输出性能的那些模式,让模型变得更小、更高效;
- 降阶后剩下的极点,才是真正决定系统对外(关心的那个输入--输出通道)动力学性能的 "有效模式";
- 去除无用模式还有利于控制器设计(避免去补偿那些根本检测不到或控制不到的动态)。
举一个简单的例子,考虑一个 SISO 系统,传递函数为:
G ( s ) = ( s + 3 ) ( s + 1 ) ( s + 3 ) G(s) = \frac{(s + 3)}{(s + 1)(s + 3)} G(s)=(s+1)(s+3)(s+3)
可以对上面的式子做约分,化简后得到的系统:
G 简化 ( s ) = 1 s + 1 G_{\text{简化}}(s) = \frac{1}{s + 1} G简化(s)=s+11
- 原本极点有 { − 1 , − 3 } \{-1,-3\} {−1,−3},零点有 { − 3 } \{-3\} {−3}。
- 因为 − 3 -3 −3 频率上"零点--极点成对抵消",最终等价于一个一阶系统 1 / ( s + 1 ) 1/(s+1) 1/(s+1)。
为什么这个抵消的模态没用了?
可以从时域和频域两个角度来理解。
-
时域角度理解
系统本来包含模态:
- e − t e^{-t} e−t(极点 -1)→ 留下来了
- e − 3 t e^{-3t} e−3t(极点 -3)→ 被零点抵消了!
也就是说:系统本来有两个动态过程在响应输入时发生,一个快的、一个慢的。但是由于 s = − 3 s = -3 s=−3 同时是零点,所以该模态虽然 系统内部存在 ,但它 对输出的影响被输入路径"抵消"掉了 !
想象成:这个模态存在于系统内部,但输入 u u u 不会激发它,输出 y y y 也看不到它。 -
频域角度理解
来看系统的频率响应:
- 零点是让系统在某个频率 完全无响应。
- 极点是系统在某个频率 响应增强(或延迟)。
当 极点和零点相同 时,这两种影响完全抵消掉了。在 s = − 3 s = -3 s=−3 附近,刚想要"振起来",系统立刻把那一部分"消掉",结果就是没有那部分响应。
在控制系统里,我们只关心 输入 u u u 到 输出 y y y 的通路。如果某个内部状态的动态,输入激不起它,输出也看不到它,那它对控制器设计来说是 完全无用的:无需观测它、无需控制它、不影响性能、不影响稳定性。
所以在建模或简化模型时,完全可以删掉它。
MATLAB 绘制极点-零点分布
matlab
%% 1. 构造系统并算极零点
sys = ss(A,B,C,D); % 自定义的 A,B,C,D
%% 2. 绘制极点-零点图
figure
hold on;
pzmap(sys)
grid on
%% 3. 叠加阻尼比和自然频率线
sgrid

底图并不是一个"正方形"网格,而是典型的 s‑平面(damping--frequency)网格:
- 圆弧(constant natural frequency)
- 放射状直线(constant damping ratio)
- x 轴、y 轴刻度不等距(非等高宽)
MATLAB 自带了 Control Toolbox 里的 sgrid 函数,专门用来往 s‑平面上画这两种网格。
从极点(Poles)和传输零点(Transmission Zeros)结果来看,主要暴露出以下几个问题:
- 高阶系统中存在大量"重合"极点--零点
- 除了一个 幅值约为 − 9.4108 × 1 0 4 -9.4108\times10^4 −9.4108×104 的快模 ,几乎所有极点都落在 − 0.0 ... ∼ − 1.0 -0.0...\sim-1.0 −0.0...∼−1.0 之间,而且传输零点列表里几乎"抄"了一份极点(同样的值、同样的幅度)------这说明在这些频率点上存在 成对的极点--零点。
- 这正是典型的 "极点--零点相互抵消" (pole--zero cancellation):系统在这些模态上既有极点又有相同位置的零点,结果在开环或闭环响应中,这部分动态都会被"抹去",对外表现得像不存在这些模态。
- 模型"非最简"/不必要的高阶
- 当从某个更复杂的结构(比如带有很多中间变量、滤波器、观测器等)直接写出 A , B , C , D A,B,C,D A,B,C,D 后,很容易出现 非最小实现 (non‑minimal realization):可控但不可观测或可观测但不可控的状态分量,被保留在模型里,却对输入---输出响应没有实质贡献。
- 大量频率接近零的模式
- 大量接近 0 (如 − 0.0000 -0.0000 −0.0000)的极点和零点,往往是数值精度或模型降阶/近似造成的"伪模式"------物理上并不存在这么多几乎为零的慢模态("伪零点")。
真正对系统输入---输出贡献 的是 被保留下来的"非抵消"极点/零点 ,对这些模式之外的部分,可以 用 minreal 或降阶方法清理掉。这样既让模型更简洁,也能避免后续控制器设计中出现不必要的麻烦。
-
最小化模型: 在 MATLAB 中对状态空间对象调用
matlabsys_min = minreal(sys);
它会自动做可控性/可观测性分析,去掉所有"成对抵消"的极点--零点,得到最简的等价系统。
-
数值条件检查:
- 用
ctrb(A,B)
与obsv(A,C)
查看可控/可观矩阵秩,确认是否存在不可控或不可观测子空间。
matlabrank(ctrb(A,B)), rank(obsv(A,C))
- 若秩小于状态维数,说明有冗余(不可控或不可观),需要先做可控/可观子空间分解。
- 用
-
平衡降阶(可选) 如果想在保留主要特性下更进一步降阶,可用
matlabsys_bal = balreal(sys); sys_red = modred(sys_bal, indices_to_remove);
或直接
matlabsys_red = balred(sys, r);
用 Hankel 奇异值自动去掉贡献最小的模式。
-
避免数值爆炸/精度问题:
- 如果原始 A A A 矩阵元素跨度极大(如首个极点是 1 0 4 10^4 104,其余都是 1 0 − 1 10^{-1} 10−1 量级),建议先缩放状态或做"坐标变换"让系统矩阵条件数改善。
- 保持同一数量级,有助于数值算法(计算特征值、零点)更稳健。