0% found this document useful (0 votes)
4 views3 pages

Routh Array Calculation in MATLAB

The ROUTH function generates the symbolic Routh array for a given polynomial, handling special cases such as zero first elements and rows of zeros by substituting them with a symbolic variable, EPSILON. The function initializes the Routh array, assembles the first two rows, and computes subsequent rows using determinants. It also provides examples of how to use the function with both numerical and symbolic coefficients.

Uploaded by

John Celis
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views3 pages

Routh Array Calculation in MATLAB

The ROUTH function generates the symbolic Routh array for a given polynomial, handling special cases such as zero first elements and rows of zeros by substituting them with a symbolic variable, EPSILON. The function initializes the Routh array, assembles the first two rows, and computes subsequent rows using determinants. It also provides examples of how to use the function with both numerical and symbolic coefficients.

Uploaded by

John Celis
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

function RA=routh(poli,epsilon);

%ROUTH Routh array.

% RA=ROUTH(R,EPSILON) returns the symbolic Routh array RA for

% polynomial R(s). The following special cases are considered:

% 1) zero first elements and 2) rows of zeros. All zero first

% elements are replaced with the symbolic variable EPSILON

% which can be later substituted with positive and negative

% small numbers using SUBS(RA,EPSILON,...). When a row of

% zeros is found, the auxiliary polynomial is used.

% Examples:

% 1) Routh array for s^3+2*s^2+3*s+1

% >>syms EPS

% >>ra=routh([1 2 3 1],EPS)

% ra =

% 1.0000 3.0000

% 2.0000 1.0000

% 2.5000 0

% 1.0000 0

% 2) Routh array for s^3+a*s^2+b*s+c

% >>syms a b c EPS;

% >>ra=routh([1 a b c],EPS);

% ra =

% [ 1, b]
% [ a, c]

% [ (-c+b*a)/a, 0]

% [ c, 0]

% Author:Rivera-Santos, Edmundo J.

% E-mail:edmundo@[Link]

if(nargin<2),

fprintf('\nError: Not enough input arguments given.');

return

end

dim=size(poli); %get size of poli

coeff=dim(2); %get number of coefficients

RA=sym(zeros(coeff,ceil(coeff/2))); %initialize symbolic Routh array

for i=1:coeff,

RA(2-rem(i,2),ceil(i/2))=poli(i); %assemble 1st and 2nd rows

end

rows=coeff-2; %number of rows that need determinants

index=zeros(rows,1); %initialize columns-per-row index vector

for i=1:rows,

index(rows-i+1)=ceil(i/2); %form index vector from bottom to top

end

for i=3:coeff, %go from 3rd row to last


if(all(RA(i-1,:)==0)), %row of zeros

fprintf('\nSpecial Case: Row of zeros detected.');

a=coeff-i+2; %order of auxiliary equation

b=ceil(a/2)-rem(a,2)+1; %number of auxiliary coefficients

temp1=RA(i-2,1:b); %get auxiliary polynomial

temp2=a:-2:0; %auxiliry polynomial powers

RA(i-1,1:b)=temp1.*temp2; %derivative of auxiliary

elseif(RA(i-1,1)==0), %first element in row is zero

fprintf('\nSpecial Case: First element is zero.');

RA(i-1,1)=epsilon; %replace by epsilon

end

%compute the Routh array elements

for j=1:index(i-2),

RA(i,j)=-det([RA(i-2,1) RA(i-2,j+1);RA(i-1,1) RA(i-1,j+1)])/RA(i-1,1);

end

end

You might also like