利用劳斯判据分析右半平面极点数量的方法研究
摘要
劳斯判据是一种经典的稳定性判据,可用于判断线性定常系统特征方程的根是否全部位于复平面的左半平面。本文详细介绍了如何通过构建劳斯表来分析系统右半平面极点的数量,并结合具体的实例展示了该方法的步骤与结果验证。该方法无需求解特征方程的具体根,具有高效、准确的优点,适用于高阶系统的稳定性分析。
1 引言
在线性系统分析中,系统稳定性与其特征方程根的位置密切相关。若系统的全部特征根均位于复平面左半部,则系统是渐近稳定的;若存在右半平面极点(Right-Half Plane, RHP),系统将表现为不稳定状态。传统的根求解方法对于高阶系统而言运算繁重,劳斯判据则通过符号表构建,提供了一种简洁有效的方式用于极点分布分析。
2 劳斯判据原理
对于一个线性系统,其特征方程表示为:
P(s)=a0sn+a1sn−1+⋯+an−1s+an P(s) = a_0 s^n + a_1 s^{n-1} + \cdots + a_{n-1} s + a_n P(s)=a0sn+a1sn−1+⋯+an−1s+an
其中,a0>0a_0 > 0a0>0,其余系数为实数。构造劳斯表(Routh Table)是关键步骤。表格的第一列是分析的重点:第一列中符号变化的次数即为特征方程存在的右半平面极点数量。
劳斯表的构造规则如下:
- 第1行填入最高次幂项系数 a0,a2,a4,...a_0, a_2, a_4, \ldotsa0,a2,a4,...
- 第2行填入次高项系数 a1,a3,a5,...a_1, a_3, a_5, \ldotsa1,a3,a5,...
- 第3行及以后,通过如下公式递推:
bij=ai−1,1⋅ai−2,j+1−ai−2,1⋅ai−1,j+1ai−1,1 b_{ij} = \frac{a_{i-1,1} \cdot a_{i-2,j+1} - a_{i-2,1} \cdot a_{i-1,j+1}}{a_{i-1,1}} bij=ai−1,1ai−1,1⋅ai−2,j+1−ai−2,1⋅ai−1,j+1
表格一直构造到 s0s^0s0 行。
3 判断右半平面极点数量的步骤
- 写出系统的特征多项式 P(s)P(s)P(s)
- 构造劳斯表
- 观察第一列符号变化的次数
- 符号变化的次数 = 右半平面极点数量(RHP)
4 实例分析
考虑如下四阶特征方程:
P(s)=s4+2s3+3s2+4s+5 P(s) = s^4 + 2s^3 + 3s^2 + 4s + 5 P(s)=s4+2s3+3s2+4s+5
构造劳斯表如下:
次数 | 系数 | |
---|---|---|
s⁴ | 1 | 3 |
s³ | 2 | 4 |
s² | b1=2⋅3−1⋅42=1b_1 = \frac{2\cdot3 - 1\cdot4}{2} = 1b1=22⋅3−1⋅4=1 | 5 |
s¹ | b2=1⋅4−2⋅51=−6b_2 = \frac{1\cdot4 - 2\cdot5}{1} = -6b2=11⋅4−2⋅5=−6 | 0 |
s⁰ | 5 |
第一列为:1 → 2 → 1 → -6 → 5,符号变化2次 ,因此该系统有2个右半平面极点 ,系统不稳定。
5 注意事项
- 若某一行首项为0,可用一个趋近于0的正数 ϵ\epsilonϵ 替代,构造完毕后再令 ϵ→0\epsilon \to 0ϵ→0
- 若某一行全为0,说明存在对称根,需要引入辅助多项式求导重新构造该行
- 系统是否稳定,仅当第一列全为正且无符号变化
6 结论
劳斯判据为分析系统极点分布提供了简洁高效的工具。通过判断劳斯表第一列的符号变化次数,能够准确判断系统右半平面极点数量,进而判定系统稳定性。该方法特别适合高阶系统、符号未知或无法数值求解的情况,具有较强的工程实用性。
参考文献
- Ogata, K.《现代控制工程》第5版.
- Dorf, R.C., Bishop, R.H.《现代控制系统》.
- 李尚志. 《自动控制理论》. 高等教育出版社.
MATLAB分析代码
matlab
clc; clear;
% 输入多项式系数(按降幂排列,例如s^4 + 2s^3 + 3s^2 + 4s + 5 对应 [1 2 3 4 5])
coeffs = [1 4 -3 0 2 -1 6 2]; % 示例系数
% coeffs = [1 2 1 2]; % 测试全0行的例子(s^3 + 2s^2 + s + 2 = 0)
n = length(coeffs); % 系数个数 = 多项式阶数 + 1
max_col = ceil(n/2); % 每行最大元素数
routh = zeros(n, max_col); % 初始化劳斯表
% 构造前两行(s^n, s^(n-2), ... 和 s^(n-1), s^(n-3), ...)
routh(1, 1:length(coeffs(1:2:end))) = coeffs(1:2:end); % 奇数索引(1,3,5...)
routh(2, 1:length(coeffs(2:2:end))) = coeffs(2:2:end); % 偶数索引(2,4,6...)
% 递推填充劳斯表
for i = 3:n
% 计算当前行元素(直到前一行的倒数第二个元素)
for j = 1:(max_col-1)
a = routh(i-2, 1); % 上上行第一列
b = routh(i-2, j+1); % 上上行第j+1列
c = routh(i-1, 1); % 上一行第一列
d = routh(i-1, j+1); % 上一行第j+1列
% 处理上一行第一列为0的情况(避免除零)
if abs(c) < 1e-9
c = 1e-6; % 用小正数代替零
end
% 计算劳斯表元素
routh(i, j) = (c*b - a*d) / c;
end
% 处理全0行(用辅助多项式的导数系数替换)
% 用容差判断是否为全0行(避免浮点数误差影响)
if all(abs(routh(i, :)) < 1e-9)
disp(['第 ', num2str(i), ' 行全为0,使用辅助多项式处理']);
% 辅助多项式的阶数 = 当前行对应的s的阶数(n - i + 1)
order = n - i + 1;
prev_row = routh(i-1, :); % 上一行元素(辅助多项式系数)
% 计算辅助多项式的导数系数
aux_coeffs = zeros(1, length(prev_row));
for p = 1:length(prev_row)
% 原项为 s^(order - 2*(p-1)),导数后系数乘以 (order - 2*(p-1))
aux_coeffs(p) = prev_row(p) * (order - 2*(p-1));
end
% 赋值给当前行(保留零系数,不剔除)
routh(i, 1:length(aux_coeffs)) = aux_coeffs;
end
end
% 输出劳斯表(只显示有效部分,剔除末尾全零列)
valid_cols = find(any(routh, 1), 1, 'last'); % 最后一个非零列
disp('劳斯表结果:');
disp(routh(:, 1:valid_cols));
% 统计第一列符号变化次数(右半平面极点数量)
first_col = routh(1:n, 1); % 提取第一列
sign_changes = 0;
for i = 1:(n-1)
% 忽略连续零(理论上不应出现,此处为容错)
if abs(first_col(i)) < 1e-9 || abs(first_col(i+1)) < 1e-9
continue;
end
% 符号相反则计数
if first_col(i) * first_col(i+1) < 0
sign_changes = sign_changes + 1;
end
end
fprintf('系统右半平面极点个数为:%d\n', sign_changes);