Anda di halaman 1dari 3

Nombre: ROUTHHUR.

LIB
Tamao: 2724 bytes, checksum # 53389d
Autor: Javier Campos Delgado
Utilidad: Mtodo de Routh-Hurwitz de estabilidad de un polinomio de
transferencia.
Fecha: 31-7-95.
La librera ROUTHHUR sirve para encontrar la estabilidad de un polinomio de
transferencia mediante el mtodo de Routh-Hurwitz.
El polinomio de transferencia se entrar como una lista de coeficientes (como
en el mtodo de Ruffinni); si un coeficiente no existe, se pondr el valor
cero.
Todas las excepciones inherentes al mtodo (aproximacin por errores,
derivacin de polinomios), estn recogidas.
Se permiten coeficientes indeterminados en el polinomio, por lo que tuve que
utilizar partes de la librera ARIT.LIB (SCOLCT y SEXPAN), de Mika Heiskanen
(lo siento si hay derechos de autor por en medio; vayan por delante mis
reconocimientos y agradecimientos para l), al tener rutinas para expandir y
reunir expresiones algebraicas complejas (los comandos EXPAN y COLCT no dan
buenos resultados en estos casos). An as, a veces salen expresiones
algebraicas "raras" (todas las ideas para resolver este problema sern
agradecidas). En estos casos, es mejor mirar un poco los resultados que da el
programa, y utilizar la cabeza (siempre es mejor un par de neuronas que una
calculadora).
Cre la librera con la librera LIB.LIB, de Detlef Mueller y Raymond
Hellstern (dos grandes programadores).
Y despus de tanta palabrera; como funciona el programa (para los no
entendidos en Teora de Sistemas -entre ellos el menda-, ver un libro del
tema en cuestin).
-Cargar la librera en la calculadora, y configurarla para su utilizacin
haciendo: 'ROUTHHUR' DUP RCL 0 STO PURGE, y apagar y encender la HP.
-Entrar en el men de libreras, y entrar en la librera ROUTHHUR.
-Hay dos comandos:
-Informacin: pequea descripcin del programa + copyright + logotipo.
-RouthHurwitz: plsalo, y se te pedir el polinomio, luego todo
funciona solo.
Como salida, y si no hay coeficientes indeterminados, se dan el nmero de
inversiones de signo ( que es lo que se busca en el mtodo); adems, se
presentan unas listas en la pila; estas listas son los polinomios auxiliares
para la realizacin del mtodo. Se podrn mirar mediante la "pila interactiva"
(pulsando el cursor arriba), utilizando el comando VIEW.
LISTADO DEL PROGRAMA PRINCIPAL:
%%HP: T(1)A(D)F(.);
@ Entrada del polinomio caracterstico: los
"Polinomio? @ coeficientes del programa se entran como en
Entrada: s-s+K @ el mtodo de Ruffinni. (Se incluye una ayuda
{ 1 0 -1 K }" @ por si no te acuerdas de qu va el asunto).
{ "{}" 2 } INPUT @
OBJ CLLCD @ Pantalla de "Trabajando..."
"Trabajando" 1 @
DISP DUP SIZE SWAP @
DUP2 a @ Operaciones con el polinomio caracterstico:
0 1 ROT @ - Se mira si tiene coeficientes
FOR b a b GET @ indeterminados.
TYPE DUP 6 == SWAP @
9 == OR OR @ - Si no tiene nmero par de elementos, se le
NEXT @ aade un cero.
3 ROLLD OVER @
IF 2 MOD 1 == @ Datos de entrada:
THEN 0 + @ a: Si a=1 -> hay algebraicos; si a=0, no.
END DUP SIZE 2 / @ b: Grado del polinomio.
a b c d @ c: El polinomio, con nmero par de elementos
{ } { } 1 d 2 * @ d: Nmero par de elementos/2.
FOR e SWAP c e @ Se parte el polinomio con nmero de
GET + @ elementos par en dos (as funciona el
NEXT b 1 - 2 @ mtodo).
FOR e f @ Bucle principal (ahora hay muchos
@ IF THEN ELSE anidados).
IF f 1 GET @ Primer elemento=0?-> se utilizar una
0 SAME @ aproximacin por error (=epsilon). Utilizo
THEN @ SAME en vez de ==, por posibles algebraicos.
IF 1 2 d @
FOR g f @ Vemos si todos los elementos son cero, y
g GET 0 SAME AND @ varias condiciones ms para derivar el
NEXT @ polinomio o no (confieso que no me acuerdo
DUP d 2 AND SWAP @ de las condiciones, pero esto funciona).
b e - 1 AND OR @
THEN g @
g @ En su caso, derivamos el polinomio. (Y le
"P(s)" TAG { } 1 d @ ponemos una etiqueta).
1 - @
FOR h @
g h GET e h 1 - 2 * @
- * EVAL SCOLCT @ Y por qu aqu se utilizan SCOLCT y SEXPAN
DO DUP SEXPAN @ si puede ser que slo haya nmeros?. Bueno,
UNTIL DUP ROT SAME @ ya que estamos derivando, hagmoslo todo
END SCOLCT + @ "por si acaso". ( Si no, tendra que hacer
NEXT @ otro IF THEN para algebraicos, y de todas
0 + "P'(s)" TAG @ maneras, esto funciona rpido).
@
ELSE f 1 @ Aqu se pone el error () , si el primer
'' PUT "" TAG @ elemento es cero, y si no tenemos que
END @ derivar el polinomio.( Y adems una
ELSE f @ etiqueta).
END @
2 d @
FOR f DUP2 @
g h @
g 1 GET h @ Las operaciones raras del mtodo R.-H., que
f GET * g f GET h 1 @ son las que chinchan a todo el mundo (para
GET * - h 1 GET / @ ms detalles, ver libros al caso).
NEG @
EVAL @
SCOLCT @ Idem al comentario anterior: se utilizan
DO DUP @ SCOLCT y SEXPAN "por si" hay algebraicos.
SEXPAN @ Es el gran problema de usar coeficientes
UNTIL DUP @ indeterminados: a veces salen cosas raras.
ROT SAME @ Alguna sugerencia?.
END SCOLCT @
DEPTH ROLLD @
NEXT DEPTH d @ Se colocan los sucesivos polinomios para que
- 2 + DEPTH 1 - @ aparezcan en la forma: - grado superior
FOR g g ROLL @ - .
NEXT 0 d @ - grado inferior
LIST b e - 1 + b 1 @
- / 100 * 1 RND "%" @ Simplemente, un indicador del trabajo hecho.
+ 2 DISP -1 @
STEP @
IF a NOT @ Si no hay algebraicos ( para eso utilizo la
THEN @ variable "a"), se calcula el nmero de
.000000000001 '' @ inversiones de signo. El error se aproxima
STO { } b 1 + 2 @ por 1E-12.
FOR g g PICK @
1 GET EVAL + -1 @
STEP '' @
PURGE g @
@
"Inversiones=" 0 1 @
b 1 - @
FOR h g h @ Clculo del nmero de inversiones.
GET g h 1 + GET * 0 @
< 1 0 IFTE + @
NEXT + @
CLLCD 1 DISP 2.5 @ Se presentan el nmero de inversiones.
WAIT @
@
END @
@
@
Javier Campos Delgado
Suarez Somonte, 13, 2
C.P. 06800
Mrida (Badajoz)

Anda mungkin juga menyukai