【matlab】劳斯判据实现

matlab实现劳斯判据表的绘制

考虑全零行、首列有0情况下的劳斯表绘制

% 劳斯判据的matlab实现
% 功能:考虑全零行、首列有0情况下的劳斯表绘制
 
%% 初始化
clear;close all; clc
coeffVector = input('输入系数矩阵:\n [an an-1 an-2 ... a0] = ');

%coeffVector =[1 3 12 20 35 25]; %全0行 示例系数向量
%coeffVector =[1 0 -3 2 ];%首列有0示例系数向量

coeffLength = length(coeffVector); %rh表的行数
rhTableColumn = round(coeffLength/2);  %rh表的列数
rhTable = zeros(coeffLength,rhTableColumn); %不赋值的都是0
rhTable(1,:) = coeffVector(1,1:2:coeffLength);

% 根据系数向量长度的奇偶 给rh表前两行赋值
if (rem(coeffLength,2) ~= 0)
    rhTable(2,1:rhTableColumn-1) = coeffVector(1,2:2:coeffLength);
else
    rhTable(2,:)=coeffVector(1,2:2:coeffLength);
end
%首列有0
if rhTable(2,1) ==0
    rhTable(2,1) = 1e-3;
end
%% 计算rh表
for i = 3:coeffLength
    %全0行
    if abs(rhTable(i-1,:)) <=1e-10 %首项为0,小数计算有时为小量不等于0
        power_first = coeffLength - i+2 ;% 全0行的上一行首项的幂数
        power_decrease= 0;%幂数减少量
        for j = 1:rhTableColumn - 1
            rhTable(i-1,j) = (power_first - power_decrease) * rhTable(i-2,j);
            power_decrease = power_decrease + 2;
        end
    fprintf('\n第%1.0f行为全零行\n',i-1);
    end

    %首列有0
    if rhTable(i,1) ==0
        rhTable(i,1) = 1e-3;
    end

    %非全0行
    for x = 1:rhTableColumn-1
        rhTable(i,x) =(rhTable(i-1,1)* rhTable(i-2,x+1)-...
            (rhTable(i-2,1)*rhTable(i-1,x+1)))/rhTable(i-1,1);
    end
end
%% 判断稳定性及不稳定极点个数
unstablePoles = 0;
for i = 1:coeffLength-1;
    if sign(rhTable(i,1))*sign(rhTable(i+1,1))==-1
        unstablePoles = unstablePoles+1;
    end
end

fprintf('\n劳斯表为:')
rhTable

if unstablePoles == 0
    fprintf('该系统稳定\n')
else
    fprintf('该系统不稳定\n')
end
fprintf('\n虚轴右侧的极点数为 %2.0f \n',unstablePoles)

程序运行截图
在这里插入图片描述

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值