Nombre: ROUTHHUR.LIB Tama¤o: 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 librer¡a 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 (aproximaci¢n por errores, derivaci¢n de polinomios), est n recogidas. Se permiten coeficientes indeterminados en el polinomio, por lo que tuve que utilizar partes de la librer¡a 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). A£n as¡, a veces salen expresiones algebraicas "raras" (todas las ideas para resolver este problema ser n 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 librer¡a con la librer¡a LIB.LIB, de Detlef Mueller y Raymond Hellstern (dos grandes programadores). Y despus de tanta palabrer¡a; como funciona el programa (para los no entendidos en Teor¡a de Sistemas -entre ellos el menda-, ver un libro del tema en cuesti¢n). -Cargar la librer¡a en la calculadora, y configurarla para su utilizaci¢n haciendo: 'ROUTHHUR' DUP RCL 0 STO PURGE, y apagar y encender la HP. -Entrar en el men£ de librer¡as, y entrar en la librer¡a ROUTHHUR. -Hay dos comandos: -Informaci¢n: peque¤a descripci¢n del programa + copyright + logotipo. -RouthHurwitz: p£lsalo, y se te pedir el polinomio, luego todo funciona solo. Como salida, y si no hay coeficientes indeterminados, se dan el n£mero de inversiones de signo ( que es lo que se busca en el mtodo); adem s, se presentan unas listas en la pila; estas listas son los polinomios auxiliares para la realizaci¢n del mtodo. Se podr n mirar mediante la "pila interactiva" (pulsando el cursor arriba), utilizando el comando VIEW. LISTADO DEL PROGRAMA PRINCIPAL: %%HP: T(1)A(D)F(.); « "¿Polinomio? Entrada: s³-s+K { 1 0 -1 K }" { "{}" 2 } INPUT OBJ CLLCD
@ @ @ @ @ @
Entrada del polinomio caracter¡stico: los coeficientes del programa se entran como en el mtodo de Ruffinni. (Se incluye una ayuda por si no te acuerdas de qu va el asunto). Pantalla de "Trabajando..."
"Trabajando " 1 DISP DUP SIZE SWAP DUP2 a « 0 1 ROT FOR b a b GET TYPE DUP 6 == SWAP 9 == OR OR NEXT » 3 ROLLD OVER IF 2 MOD 1 == THEN 0 + END DUP SIZE 2 / a b c d « { } { } 1 d 2 * FOR e SWAP c e GET + NEXT b 1 - 2 FOR e f « IF f 1 GET 0 SAME THEN IF 1 2 d FOR g f g GET 0 SAME AND NEXT DUP d 2 AND SWAP b e - 1 AND OR THEN g « g "P(s)" TAG { } 1 d 1 FOR h g h GET e h 1 - 2 * - * EVAL SCOLCT DO DUP SEXPAN UNTIL DUP ROT SAME END SCOLCT + NEXT 0 + "P'(s)" TAG » ELSE f 1 '' PUT "" TAG END ELSE f END » 2 d FOR f DUP2 g h « g 1 GET h f GET * g f GET h 1 GET * - h 1 GET / NEG » EVAL SCOLCT DO DUP SEXPAN UNTIL DUP ROT SAME END SCOLCT
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
Operaciones con el polinomio caracter¡stico: - Se mira si tiene coeficientes indeterminados. - Si no tiene n£mero par de elementos, se le a¤ade un cero. Datos de entrada: a: Si a=1 -> hay algebraicos; si a=0, no. b: Grado del polinomio. c: El polinomio, con n£mero par de elementos d: N£mero par de elementos/2. Se parte el polinomio con n£mero de elementos par en dos (as¡ funciona el mtodo). Bucle principal (ahora hay muchos IF THEN ELSE anidados). ¨Primer elemento=0?-> se utilizar una aproximaci¢n por error (=epsilon). Utilizo SAME en vez de ==, por posibles algebraicos. Vemos si todos los elementos son cero, y varias condiciones m s para derivar el polinomio o no (confieso que no me acuerdo de las condiciones, pero esto funciona). En su caso, derivamos el polinomio. (Y le ponemos una etiqueta).
¨Y por qu aqu¡ se utilizan SCOLCT y SEXPAN si puede ser que s¢lo haya n£meros?. Bueno, ya que estamos derivando, hag moslo todo "por si acaso". ( Si no, tendr¡a que hacer otro IF THEN para algebraicos, y de todas maneras, esto funciona r pido). Aqu¡ se pone el error () , si el primer elemento es cero, y si no tenemos que derivar el polinomio.( Y adem s una etiqueta).
Las operaciones raras del mtodo R.-H., que son las que chinchan a todo el mundo (para m s detalles, ver libros al caso). Idem al comentario anterior: se utilizan SCOLCT y SEXPAN "por si" hay algebraicos. Es el gran problema de usar coeficientes indeterminados: a veces salen cosas raras. ¨Alguna sugerencia?.
DEPTH ROLLD NEXT DEPTH d - 2 + DEPTH 1 FOR g g ROLL NEXT 0 d LIST b e - 1 + b 1 - / 100 * 1 RND "%" + 2 DISP -1 STEP IF a NOT THEN .000000000001 '' STO { } b 1 + 2 FOR g g PICK 1 GET EVAL + -1 STEP '' PURGE g « "Inversiones=" 0 1 b 1 FOR h g h GET g h 1 + GET * 0 < 1 0 IFTE + NEXT + CLLCD 1 DISP 2.5 WAIT » END » » Javier Campos Delgado Suarez Somonte, 13, 2§ C.P. 06800 Mrida (Badajoz)
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
Se colocan los sucesivos polinomios para que aparezcan en la forma: - grado superior . - grado inferior Simplemente, un indicador del trabajo hecho. Si no hay algebraicos ( para eso utilizo la variable "a"), se calcula el n£mero de inversiones de signo. El error se aproxima por 1E-12.
C lculo del n£mero de inversiones.
Se presentan el n£mero de inversiones.