domingo, 26 de mayo de 2013

Criterio de estabilidad de Routh-Hurwitz en MATLAB


Enseguida adjunto un "script" mediante el cual podemos analizar la estabilidad de un sistema con el método de Routh-Hurwitz, para ello sólo es necesario correr el "script" y posteriormente introducir el vector de coeficientes del polinomio característico que nos interese. El script fue desarrollado por Farzad Sagharchi y está disponible en el File Exchange de MathWorks.

%The Routh-Hurwitz stability criterion is a necessary (and frequently
%sufficient) method to establish the stability of a single-input,
%single-output (SISO), linear time invariant (LTI) control system.
%More generally, given a polynomial, some calculations using only the
%coefficients of that polynomial can lead us to the conclusion that it
%is not stable.
%in this program you must give your system coefficents and the
%Routh-Hurwitz table would be shown
%
% Farzad Sagharchi ,Iran
% 2007/11/12

clc
clear
r=input('input vector of your system coefficents: ');
m=length(r);
n=round(m/2);
q=1;
k=0;
for p = 1:length(r)
if rem(p,2)==0
c_even(k)=r(p);
else
c_odd(q)=r(p);

k=k+1;
q=q+1;
end
end
a=zeros(m,n);

if m/2 ~= round(m/2)
c_even(n)=0;
end
a(1,:)=c_odd;
a(2,:)=c_even;
if a(2,1)==0
a(2,1)=0.01;
end
for i=3:m
for j=1:n-1
x=a(i-1,1);
if x==0
x=0.01;
end

a(i,j)=((a(i-1,1)*a(i-2,j+1))-(a(i-2,1)*a(i-1,j+1)))/x;

end
if a(i,:)==0
order=(m-i+1);
c=0;
d=1;
for j=1:n-1
a(i,j)=(order-c)*(a(i-1,d));
d=d+1;
c=c+2;
end
end
if a(i,1)==0
a(i,1)=0.01;
end
end
Right_poles=0;
for i=1:m-1
if sign(a(i,1))*sign(a(i+1,1))==-1
Right_poles=Right_poles+1;
end
end
fprintf('\n Routh-Hurwitz Table:\n')
a
fprintf('\n Number Of Right Poles =%2.0f\n',Right_poles)

reply = input('Do You Need Roots of System? Y/N ', 's');
if reply=='y'||reply=='Y'
ROOTS=roots(r);
fprintf('\n Given Polynomials Coefficents Roots :\n')
ROOTS
else
end


11 comentarios:

  1. excelente codigo. Gracias por el aporte

    ResponderEliminar
  2. como colocan los coeficientes?

    ResponderEliminar
    Respuestas
    1. y si tengo 4^s5+3^s4+2^s3+11^s2+3s+ks+16k=0?

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
    3. Pregúntale al ingeniero Wenso el Creo el Código. Up CHIAPAS.

      Eliminar
    4. ora loco acabo de tener clases con el :O es una celebridad salu2
      PD:(no me jala este codigo)

      Eliminar
  3. y si tengo 4^s5+3^s4+2^s3+11^s2+3s+ks+16k=0?

    ResponderEliminar
    Respuestas
    1. Pudiste resolver teniendo una constante K ? ayudame pasame el codigo a mi correo gabrielangelencaladaseminario@outlook.es

      Eliminar