4. Routh-Hurwitz判据:代数稳定性判据的原理与步骤,Routh表的构建
稳定性这东西,说白了就是系统受到扰动后能不能自己回到平衡点。我早年做电机调速系统时,PID参数调得飞起,结果一上电就震荡,差点把电机烧了。后来才明白——先判断稳定性,再谈性能优化。Routh-Hurwitz判据,就是帮你快速判断系统是否稳定的利器,连特征根都不用求。
4.1 为什么需要代数判据?
判断系统稳定,最直接的方法是看特征根是否都在左半平面。但问题是——高阶系统的特征方程往往是一元高次方程,求根非常麻烦。你想想看,一个五阶系统,你要手动解五次方程?不现实。
Routh-Hurwitz判据的好处在于:不需要求解特征根,只需要根据特征方程的系数,通过简单的代数运算,就能判断系统是否稳定。我在项目中用过很多次,尤其是做高阶滤波器设计时,这招特别管用。
4.2 判据的基本原理
Routh-Hurwitz判据的核心思想是:通过构建一个特殊的表格(Routh表),观察表格第一列元素的符号变化,来判断特征根在复平面上的分布情况。
具体来说:
- 系统稳定的充要条件:Routh表第一列所有元素都大于0(同号)
- 第一列符号变化的次数 = 右半平面特征根的个数
嗯,这里要注意:这个判据只适用于线性定常系统,而且特征方程必须是有限多项式。我遇到过有人拿它去判断带纯延迟的系统,结果闹了笑话。
4.3 Routh表的构建步骤
构建Routh表其实是个体力活,但步骤很清晰。我习惯把它分成三步走:
步骤一:写出特征方程
假设系统的特征方程为:
a₀sⁿ + a₁sⁿ⁻¹ + a₂sⁿ⁻² + ... + aₙ₋₁s + aₙ = 0
其中a₀ > 0(如果a₀ < 0,两边同时乘以-1)。
步骤二:构建Routh表的前两行
第一行:从a₀开始,每隔一个系数取一个:a₀, a₂, a₄, ...
第二行:从a₁开始,每隔一个系数取一个:a₁, a₃, a₅, ...
举个例子,对于特征方程:
s⁴ + 2s³ + 3s² + 4s + 5 = 0
前两行就是:
s⁴: 1 3 5
s³: 2 4 0
步骤三:计算后续各行
从第三行开始,每个元素由前两行的元素通过交叉相乘再相除得到。公式如下:
b₁ = (a₁×a₂ - a₀×a₃) / a₁
b₂ = (a₁×a₄ - a₀×a₅) / a₁
b₃ = (a₁×a₆ - a₀×a₇) / a₁
...
以此类推,直到计算完所有行。我刚开始学的时候总觉得这公式很绕,后来发现其实就是个行列式运算,看多了就习惯了。
4.4 完整示例演示
咱们拿一个实际例子走一遍。假设特征方程为:
s⁵ + 2s⁴ + 3s³ + 6s² + 2s + 1 = 0
构建Routh表:
| s⁵ | 1 | 3 | 2 |
|---|---|---|---|
| s⁴ | 2 | 6 | 1 |
| s³ | b₁ = (2×3 - 1×6)/2 = 0 | b₂ = (2×2 - 1×1)/2 = 1.5 | 0 |
| s² | c₁ = (0×6 - 2×1.5)/0 → 特殊情况! | c₂ = (0×1 - 2×0)/0 |
这里出现了b₁ = 0的情况,这就是Routh表构建中的特殊情况。遇到这种情况怎么办?
当某行第一个元素为0,但该行还有其他非零元素时,用一个小正数ε代替0,继续计算。最后看ε趋近于0时第一列元素的符号变化。
用ε代替后继续计算:
s³: ε 1.5 0
s²: (ε×6 - 2×1.5)/ε = (6ε - 3)/ε → 当ε→0⁺时,结果为负无穷
s¹: 计算略
s⁰: 计算略
第一列符号变化:正→正→正→负→... 有两次符号变化,说明系统有2个右半平面极点,系统不稳定。
遇到第一列为0的情况,别慌。我当年做飞行器控制系统时,就遇到过这种特殊情况。用ε法处理,结果判断系统不稳定,后来仿真验证确实如此。记住:特殊情况往往意味着系统临界稳定或不稳定。
4.5 Routh-Hurwitz判据的完整知识体系
下面这张图是我自己总结的,把整个判据的逻辑串起来了:
4.6 避坑指南
做了这么多年控制,Routh判据的坑我踩过不少。给你列几个常见的:
- 系数缺失问题:特征方程中如果缺了某一项(比如s²项系数为0),千万别直接跳过。缺项意味着系数为0,Routh表里要写0,然后按特殊情况处理。
- 整行全为0:这种情况说明系统存在对称于原点的根(比如纯虚根)。需要用上一行的系数构造辅助多项式,求导后再继续。我曾经在电力系统稳定性分析中遇到过,差点翻车。
- 数值精度:手算时小数保留3-4位就够了。但用计算机算时,注意浮点数误差可能导致符号判断错误。
- Routh-Hurwitz判据不需要求特征根,只靠系数就能判断稳定性
- Routh表第一列全部大于0 → 系统稳定
- 第一列符号变化次数 = 右半平面极点个数
- 遇到首元素为0或整行全为0时,按特殊情况处理
- 这个判据只适用于线性定常系统,非线性系统别乱用
说实话,Routh判据虽然古老,但非常实用。我到现在做系统设计时,还是会先用它快速扫一遍稳定性,心里有个底。毕竟,一个不稳定的系统,谈什么性能都是白搭。