matlab 劳斯稳定判据routh函数,同时实现对特殊情况的处理

matlab 劳斯稳定判据routh函数,同时实现对特殊情况的处理

首先,先明确两种特殊情况如何处理:

1.某行第一列元素为0,而该行元素不全为零

这时,计算劳斯表下一行第一个元素时,会出现分母是0的情况,将0用一个很小的正数代替即可,matlab里eps可以表示为一个很小的正数

2.出现全零行

此时就需要列辅助方程了,至于如何找辅助方程的方法就很简单了,不详细说了。这里具体看如何用代码实现

 m=r(i-1,:);    % m为全零行上面一行元素构成的数组
 s=n-i+1;       % s为全零行上面一行的最高次数
for k=1:len1    %len1为劳斯表列数 
     r(i,k)=s*m(k); 
     if(s-2>0)
     	s=s-2;
	 else
     	s=0;
     end
end

举例下图
在这里插入图片描述
则变量s=2,m=[5 25 0]

routh函数代码如下:
r为返回的矩阵形式的劳斯表,info为简要的系统稳定性分析结果

function [r,info]=routh(den)
info='';
n=length(den);
a1=den(1:2:end);
a2=den(2:2:end);
len1=length(a1);
len2=length(a2);
if(len1>len2)
    a2=[a2 0];
end
r=zeros(n,len1);
r(1,:)=a1;
r(2,:)=a2;

for i=3:n
    for j=1:ceil((n-i+1)/2)
        r(i,j)=(r(i-1,1)*r(i-2,j+1)-r(i-1,j+1)*r(i-2,1))/r(i-1,1);
    end
    if(r(i,1)==0&&sum(r(i,2:len1))~=0)
        r(i,1)=eps;
        info='某行第一列为0,而该行不全为零,将0用eps代替';
    end
    if(sum(r(i,:)==0)==len1)
        info='出现全零行';
        m=r(i-1,:);
        s=n-i+1;
        for k=1:len1
            r(i,k)=s*m(k);
            if(s-2>0)
                s=s-2;
            else
                s=0;
            end
        end
    end
end
if(sum(r(:,1)>0)==n)
    info=[info,'系统稳定'];
else
    info=[info,'系统不稳定'];
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值