Neopolys v6.5 (c)APO ( La librería definitiva de cálculo polinomial para la HP48-G,GX ) ( CON TRANSFORMADAS Z Y DE LAPLACE ) Lo primero es agradeceos a todos aquéllos de vosotros que os tomáis un pequeño tiempo de vuestra vida para enviarme cualquier comentario sobre ésta o cualquier otra librería. ¡¡¡ GRACIAS !!! LOS FICHEROS ============ NeopV6x5.esp Manual en español. NeopV6x5.eng Manual en inglés. NeopV6x5.lib Librería con la versión 6.5 de Neopolys NeopV6x5.trn Librería con la versión 6.5 de Neopolys y coman- dos para el cálculo de transformadas y antitrans- formadas de Laplace y Z. Si utilizas normalmente la librería "ALG48.LIB" de Mika Heiskanen puedes pensar en instalar cualquiera de las siguientes librerías en lugar de las dos anteriores. Pero ten en cuenta que SOLO FUN- CIONARÁN BIEN SI ESTÁ INSTALADA LA LIBRERÍA "ALG48.LIB". NeopAlg.lib Librería con la versión 6.5 de Neopolys optimiza- da para su uso junto con la librería "Alg48.lib" de Mika Heiskanen. NeopAlg.trn Librería con las transformadas (también optimiza- da para su uso con la librería "Alg48.lib"). LA INSTALACION ============== Simplemente carga cualquiera de los ficheros .lib o .trn que vie- nen en el paquete ( dependiendo de si vas a utilizar el cálculo de transformadas y antitransformadas de Laplace y Z, y de si u- tilizas al mismo tiempo la librería "Alg48.lib" ... ) y después pon en el nivel 1 la librería recién cargada e introduce '0 STO' ( o 'n STO' , siendo n el puerto donde quieras instalar la libre- ría ). Ahora apaga la calculadora y vuélvela a encender o pulsa a la vez ON-C y ¡ ya está !. ¡¡ ATENCION !! ALGUNOS COMANDOS VIENEN ACOMPAÑADOS POR UNAS NOTAS IMPORTANTES ; POR FAVOR, LEELAS. LA INTRODUCCION =============== 1. Los polinomios pueden representarse: a) por sus coeficientes en orden descendente del exponente, y que pueden ser: reales : { 2 0 4 -500 } = '2·x^3+x-500' complejos : { (1,0) (3,-6) 2 } simbólicos : { '1/3' 6 '2*(A,B)' '4/(B+C)' A } b) por sus raíces, que también pueden ser: reales : { { 1 2 3 4 } } complejas : { { (1,2) (3,4) 5 (6,0) } } simbólicas : { { A B (0,-2) 'COS(E)' '2*INV(F)' 4 } } c) en cualquier otro caso, el elemento que haya en el nivel correspondiente se convierte a un polinomio de un único ele- mento y se opera con él normalmente. Por ejemplo: 2: 2 P+ 1: 'X' ->->->->->->->-> 1: { 'X+2' } NOTA: Si en el directorio de trabajo o en los directorios supe- riores a él se encuentran unas variables con el mismo nombre que el de cualquiera de las variables que pueda aparecer en las expresiones de los coeficientes, si el contenido de esas variables es un número o una expresión que dé resultado numé- rico, se tomará ese valor a la hora de realizar los cálculos en lugar de operar con el nombre simbólico de la variable en cuestión. Personalmente encuentro esto de gran utilidad porque per- mite realizar algunos estudios interesantes de los polinomios en función de la variación de sus coeficientes. 2. Las fracciones polinómicas se representan mediante el numerador en el nivel 2 y el denominador en el nivel 1 de la pila . En casi todos los comandos que trabajan con fracciones polinómicas se pue- de aplicar también el apartado c) del punto 1. anterior. 3. Todos los comandos admiten coeficientes simbólicos y/o numéricos salvo 'Roots' que sólo trabaja con valores numéricos o simbólicos con resultado numérico (como por ejemplo '8/4+1' que es igual a 3) excepto cuando el grado del polinomio es menor o igual que 2 , en cuyo caso 'Roots' puede devolver las raíces simbólicas. 4. El polinomio '0' se representa por la lista nula '{ }', aunque se admiten otras formas como { 0 } o { (0,0) 0 0 '2*A-A-A' }, como más guste. 5. El polinomio representado por '{{ }}' es en realidad un polinomio indefinido (es el polinomio cuyas raíces son ??? ); de todas for- mas, a efecto de cálculos se considera como el polinomio 0 o lo que es igual, como el polinomio '{ }'. 6. Al ejecutar cualquiera de los comandos de la librería se tienen en cuenta el estado de los siguientes flags de usuario: flag Cuando está activado ---- ------------------------------------ 2 ........... Los resultados simbólicos se simplifican automá- ticamente. Las fracciones polinómicas se simplifican ( si ello fuera posible ). Las operaciones son más lentas cuando se trabaja con coeficientes simbólicos. Algunas expresiones muy complicadas puede que no se simplifiquen del todo. NOTA: Las librerías optimizadas para usarse con Alg48 simplifican completamente las expresiones simbólicas. El tiempo que tar- de en hacer la simplificación depende principalmente de la rapidez de la librería Alg48 para realizar la simplificación no de Neopolys en sí misma. 3 ........... Después de cada operación se ejecuta el comando 'QPI' (de la librería de Mika Heiskanen, QPI.LIB) si éste estuviera presente. Si no se encuentra el comando 'QPI' se ejecuta el comando de la calcu- ladora '->Q'. 4 ........... Este flag es utilizado sólo por el comando '->Z'. Cuando está activado, la salida de ese comando se expresa directamente como una fracción polinómica. Cuando no está activado , el resultado se expresa mediante una forma alternativa (ver comando '->Z' más abajo). Podéis activar o desactivar cualquiera de estos flags escribiendo en la calculadora: N SF -> activa el flag número N N CF -> borra el flag número N o bien podéis utilizar el comando 'flgs' de esta librería ( ver más abajo ). LOS COMANDOS ============ Explico al lado de cada comando lo que hace , aunque creo que es bastante obvio. * P+ : Suma polinomios: 2: { 0 1 '3/4' } P+ 1: '-3/4' ->->->->->->->-> 1: { 1 0 } 2: { { '3/A' (1,1) 0 } } P+,flg3,flg2 1: { 1 '(0,-1)-3/A' '2 1: { 1 '2/3' (4,0) } ->->->->->->->-> /3+(3,3)/A' 4 } * P- : Resta polinomios: 2: { 1 2 3 4 } P-,flg2 1: { '2+A+B+C' '3+(-B- 1: { { A B C } } ->->->->->->->-> C)*A-B*C''4+A*B*C'} * P* : Multiplica polinomios: 2: { { 1 2 } } P* 1: { 1 -9 31 -51 40 1: { 1 -6 11 -6 } ->->->->->->->-> -12 } * P/ : Divide polinomios: 2: { { A B 'C/3' } } P/,flg2 2: { } (resto) 1: { { B 'C/3 } } ->->->->->->->-> 1: { 1 '-A'}(cociente) * P^ : Eleva un polinomio a una potencia entera: 2: { 1 '-A' } P^,flg2 1: { 1 '-(2*A)' 'A^2' 1: '(5*C-C)/(2*C)' ->->->->->->->-> } 2: { { 1 2 3 } } P^ 2: { 1 } 1: -2 ->->->->->->->-> 1: { 1 -12 58 -144 193 -132 36 } NOTA: Cuando el exponente se dé en forma simbólica ( como en el primer ejemplo ), algunas veces la simplificación de la expresión puede no ser completa y dar lugar error. Si le pasas a este comando una lista en lugar del exponente se toma el primer elemento de la lista como exponente. * Pval : Evalúa un polinomio en un punto mediante el método de Horner: 2: { 5 4 3 2 1 } Pval 1: (0,-1) ->->->->->->->-> 1: (3,2) 2: { { A B 1 } } Pval 1: '(1+C/3-1)*(1+C/3-B 1: '1+C/3' ->->->->->->->-> )*(1+C/3-A)' Los siguientes comandos ( que trabajan con fracciones polinómicas ) tienen en cuenta posibles resultados de división por cero. Recuerda que las fracciones polinómicas necesitan dos niveles, uno para el numerador y otro para el denominador. NOTA: Todos los comandos que devuelven fracciones polinómicas siempre devolverán dos listas (aunque el denominador sea la unidad) EXCEPTo CUANDO EL RESULTADO SEA CERO, EN CUYO CASO SE DEVUELVE UNA SOLA LIS- TA NULA EN EL NIVEL 1 DE LA PILA. * F+ : Suma fracciones de polinomios. 4: { 1 2 } 3: { { 3 4 5 } } F+ 2: { 6 7 A } ->->->->->->->-> 2: { 6 8 'A+2' } 1: { 1 -12 47 -60 } 1: { 1 -12 47 -60 } * F- : Resta fracciones de polinomios. 4: 1 3: { 2 } F-,flg2,flg3 2: { { 3 } } ->->->->->->->-> 2: { '-1/4' '5/4' } 1: 4 1: { 1 } Si no acabas de entender la forma de trabajar con fracciones, piensa que este ejemplo es como si hicieras: 1 (s-3) (1/4)·s+(5/4) --- - ------- = --------------- = (1/4)·s+(5/4) 2 4 1 * F* : Multiplica fracciones de polinomios. * F/ : Divide fracciones de polinomios. * F^ : Eleva fracciones de polinomios a una potencia entera . Admite expresiones simbólicas para el exponente al igual que el co- mando P^ ( ver nota relativa a las expresiones simbólicas en la ayuda de P^ ). * Fval : Evalúa fracciones de polinomios. * A->P : Transformación de una expresión Algebraica en Polinómica. 2: 'A*s^2+B/(3*s)' A->P 2: { 'A*3' 0 0 B } 1: 's' ->->->->->->->-> 1: { 3 0 } NOTA: Ten en cuenta que la expresión simbólica puede ser fraccionaria o no, con lo que el resultado puede ser también fraccionario ( dos listas) o no (una lista). * P->A : Expresión polinómica -> expresión algebraica: 2: { A '1/3' (1,1) } P->A,flg3 1: 'z' ->->->->->->->-> 1: 'A*z^2+1/3*z+(1,1)' 2: { { 1 2 3 } } P->A 1: '(S+3)^3-6*(S+3)^2+ 1: 'S+3' ->->->->->->->-> 11*(s+3)-6' NOTA: Poniendo un valor real o complejo en el nivel 1 de la pila se puede obtener el valor del polinomio evaluado en ese punto. * F->A : Fracción de polinomios -> expresión algebraica. 3: { { A B } } F->A 2: { 1 2 3 } ->->->->->->->-> 1: '(X^2+(-B-A)*X-B*-A 1: 'X' )/(X^2+2*X+3)' 3: { { 1 1 3 } } F->A 2: { { 1 2 } } ->->->->->->->-> 1: '(X^2-4*X+3)/(X-2)' 1: 'X' * Pd : Deriva polinomios: Pd,flg2 1: { { 1 1 '2/(A+B)' } ->->->->->->->-> 1: { 3 '2*(-2-2/(A+B)) } ' '1+4/(A+B)' } * PS : Integra polinomios. * Fd : Deriva fracciones de polinomios. * Pcoef : Dadas las raíces de un polinomio devuelve sus coeficientes: 1: { { 'A+B' 2 '1/3' } Pcoef,flg3 1: { 1 '-7/3+(-A-B)' ' } ->->->->->->->-> 2/3-7/3*(-A-B)' '2/ 3*(-A-B)' } Pcoef,flg3 1: '2/3' ->->->->->->->-> 1: { 1 '-(2/3)' } * Fsimp : Simplifica fracciones de polinomios: 2: { { 1 2 } } Fsimp 2: { 1 } 1: { 1 -6 11 -6 } ->->->->->->->-> 1: { 1 -3 } 2: { { A B } } Fsimp 2: { 1 } 1: { { A B } } ->->->->->->->-> 1: { 1 } NOTA: Los polinomios con muchos coeficientes simbólicos pueden tar- dar mucho en simplificarse o incluso no llegar a hacerlo. Las liberías optimizadas para su uso con Alg48 sí que simpli- ficarán todo lo posible y tardarán mucho menos tiempo. * GCD : Calcula el mayor común denominador de 2 polinomios: 2: { { 0 (1,0) A } } GCD,flg2 1: { { 1 A } } ->->->->->->->-> 1: { 1 '-A-1' A } 2: { 1 2 3 4 5 } GCD 1: { 1 2 3 4 } ->->->->->->->-> 1: { 1 } (no hay GCD) * Roots : Calcula las raíces numéricas de un polinomio o simbólicas si el grado del polinomio es menor o igual que 2. Roots 1: { 1 -15 85 -225 274 ->->->->->->->-> 1: { { 1 2 3 4 5 } } -120 } 1: { 1 '-(7/3)' '14/9' Roots,flg3 1: { { '1/3' '2/3' '4/ '-(8/27)' } ->->->->->->->-> 3' } } NOTA: Te recuerdo que puedes obtener las raíces SIMBÓLICAS de polino- mios con grado menor o igual que 2 (listas con menos de 4 elementos). También se pueden calcular las raíces de un polinomio con coe- ficientes simbólicos de resultado numérico. Por ejemplo, si tienes almacenados los valores 1, -3 y -12 en unas variables situadas en directorio actual de trabajo o en los superiores a él y que se lla- men por ejemplo 'A', 'B' y 'C' respectivamente, podrías hacer: Roots 1: { A '-A+3*B' '-A+B*C' ->->->->->->->-> 1: { { 1 2 3 4 } } '3*C+4*B-2*A' '-2*C' } Esto también funcionaría si 'A', 'B' y 'C' fueran variables tem- porales de un programa. Por ejemplo, el siguiente programa en user- RPL: << 1 -3 -12 -> A B C << 'A' '-A+3*B' '-A+B*C' '3*C+4*B-2*A' '-2*C' 5 ->LIST Roots >> >> devolvería lo mismo que el ejemplo anterior: 1: { { 1 2 3 4 } } * pf : Descompone una fracción polinómica en fracciones simples: En el nivel 2 se obtienen los coeficientes que acompañan a cada raíz del nivel 1. 2: { 1 } pf 2: { '1/(A-B)' '1/(... 1: { { A B } } ->->->->->->->-> 1: { { A B } } En el caso de raíces múltiples los coeficientes del nivel 2 SE ORDENAN DE MENOR A MAYOR EXPONENTE del denominador es de- cir: 2: { { 1 2 } } pf 2: { 1 0 -1 -1 0 } 1: { { 1 2 1 2 1 } } ->->->->->->->-> 1: { { 2 2 1 1 1 } } que significa: (x-1)·(x-2) ----------------------------- = (x-1)·(x-2)·(x-1)·(x-2)·(x-1) 1 0 -1 -1 0 = ------- + --------- + ------- + --------- + --------- (x-2) (x-2)^2 (x-1) (x-1)^2 (x-1)^3 * flgs : Activa/desactiva los flags de usuario 2 y 3 alternativamente. Para activar/desactivar el flag 4 utiliza las formas explica- das al principio de este documento, esto es , 4 CF( borrar el flag 4 ) y 4 SF ( activar el flag 4 ). * DoLis : Aplica el programa del nivel 1 a la lista del nivel 2: 2: { 1 2 3 4 5 } DoLis 1: << 1 + >> ->->->->->->->-> 1: { 2 3 4 5 6 } NOTA: Este comando ahora también trabaja con matrices simbólicas (lista de listas) y polinomios dados por sus raíces. 2: { { '1/3' } { '2/4 } } DoLis 1: << ->NUM >> ->->->->->->->-> 1: { { 0.333333333333 } { .5 } } 2: { { 2 6 8 } } DoLis 1: << 2 / >> ->->->->->->->-> 1: { { 1 3 4 } } * RevLis : Invierte ¡ rápidamente ! los elementos de una lista. RevLis 1: { 1 2 3 4 5 6 } ->->->->->->->-> 1: { 6 5 4 3 2 1 } NOTA: Al igual que el comando anterior, DoLis, también trabaja con matrices simbólicas y polinomios dados por sus raíces. RevLis 1: { { 1 2 } { 3 4 } } ->->->->->->->-> 1: { { 4 3 } { 2 1 } } RevLis 1: { { 1 2 3 4 } } ->->->->->->->-> 1: { { 4 3 2 1 } } * Q-> : Este comando es el inverso de '->Q'. Convierte expresiones que contienen fracciones numéricas y expresiones simbólicas de resulta- do numérico en números. Es útil cuando has activado el flag 3 para obtener resultados fraccionarios pero esos resultados no son de tu agrado porque contienen fracciones "exageradas" como por ejemplo: '12345/67890', o cuando quieres convertir resultados simbólicos en números ( válido sólo para expresíones simbólicas con resultado nu- mérico ). Veamos: Q-> 1: { '1/3' 'A+2/5*B' } ->->->->->->->-> 1: { .333333333333 'A+ .4*B' } Si representamos por 'V' el símbolo de la raíz cuadrada y por 'pi' el símbolo del número pi (3.1415...), entonces, si por ejemplo obtuviste después de ejecutar el comando Roots { { 'V3''pi' } } pue- des aplicar Q-> para obtener los resultados numéricos: Q-> 1: { { 'pi' 'V3' } } ->->->->->->->-> 1: { { 3.14159265359 1.73205080757 } } También se tiene en cuenta la posibilidad de que alguna de las variables que intervienen en las expresiones de los coeficientes se encuentren en el directorio actual (o superiores) y contengan una expresión de resultado numérico. Por ejemplo, prueba a crear en el directorio actual dos variables, una llamada 'A' que contenga un 2 y otra llamada 'B' y que contenga '6/2' ( tecleando simplemente 2 'A' STO '6/2' 'B' STO ). Y ahora, una vez creadas esas variables y suponiendo que no hay nin- guna variable llamada C en el directorio actual y superiores, piensa en el resultado del siguiente ejemplo: Q-> 1: { A 'A+B' 'A*B+C' } ->->->->->->->-> 1: { 2 5 '6+C' } (A=2,B='6/2') -o-o- Los siguientes comandos sólo están disponibles si instalas la li- brería con la opción del cálculo de transformadas y antitransformadas de Laplace y Z (fichero .trn). * ->L : Proporciona la transformada de Laplace de expresiones que in- cluyan combinaciones de cualquiera de las siguientes funcio- nes: · K (constante) · t^n · e^( a·t ± b ) · sin( a·t ± b ) · cos( a·t ± b ) · sinh( a·t ± b ) · cosh( a·t ± b ) NOTA: Recuerda que las expresiones han de estar en función de 't'. 1: 'e^-t*COS(3*t+2)+2* ->L,DEG 2: { .999390827019 6.... e^-(2*t)*t' ->->->->->->->-> 1: { 1 6 22 48 40 } ->L,flg2 2: { 'COS(b)' '-(2*SI... 1: 't*COS(a*t+b)' ->->->->->->->-> 1: { 1 0 '2*a^2' 0 'a^ 4' } * L-> : Proporciona la antitransformada de Laplace de la función dada por la fracción polinómica situada en los niveles 1 y 2 (que ha de tener el grado del numerador menor o igual que el del denominador). 2: { 1 } L-> 1: '-(.5*e^-t*COS(t))+ 1: { { (-1,1) (-1,-1) ->->->->->->->-> 0.5*e^-(2*t)+.5*t*e^ -2 -2 } } -(2*t)' NOTA: Las antitransformadas de Laplace de las funciones senh y cosh se devuelven en forma exponencial. Te recuerdo que: e^t - e^(-t) sinh(t) = -------------- 2 e^t + e^(-t) cosh(t) = -------------- 2 * ->Z: Debido a que muchas veces se calcula la transformada Z a par- tir de una transformada de Laplace (una función en "s"), este comando lo que espera como argumento es precisamente eso , una fracción polinómica que representa una transformada de Laplace Asímismo, como las transformadas Z incluyen normalmente térmi- nos exponenciales dependientes del período de muestreo, el re- sultado puede a veces ser difícil de leer con claridad ; esta es la principal razón que me llevó a tener la posibilidad de poder ver el resultado de otra forma más rápida de calcular (aunque quizá no más sencilla de interpretar) . La posibilidad de obtener el resultado de forma completa o a través de esta forma alternativa se lleva a cabo mediante la activación o desactivación del flag 4 de usuario ( ver notas al principio del documento para su activación/desactivación ). Veamos todo esto con un ejemplo. EJEMPLO ------- Si x(t) es x(t)=1-t·e^(-t) cuál será su transformada Z ? -0-0- SOL: --- X(z) = Z[x(t)] = Z[x(kT)] = Z[1-kT·e^(-kT)] Para calcular esta transformada Z introduce '1-t·e^(-t)' en el nivel 1 y presiona '->L', con lo que obtendrás la corres- pondiente transformada de Laplace 2: { 1 1 1 } 1: { 1 2 1 0 } lo que significa s^2 + s + 1 X(s) = L[x(t)] = ----------------- s^3 + 2·s^2 + s En este punto puedes hacer una de las siguientes cosas: a) activa el flag 4 y presiona '->Z' con lo que obtendrás la expresión de la transformada Z de X(s) en su "versión completa" 2: { 1 '-(T*e^-T)-2*e... 1: { 1 '-1-2*e^-T' 'e^ (-T-T)+2*e^-T' '-e^ (-T-T}' } lo que quiere decir que: z^3 + [-T·e^(-T)-2·e^(-T)]·z^2 + [T·e^(-T)+e^(-2T)]·z X(z) = ----------------------------------------------------------- z^3 + [-1-2·e^(-T)]·z^2 + (e^(-2T)+2·e^(-T)]·z + (-e^(-2T)) A algunas personas les gusta más la notación en potencias negativas de z ... En fin, como prefieras. O también puedes hacer: b) desactiva el flag 4 y presiona '->Z' con lo que obten- drás el resultado expresado de una forma alternativa: 2: { { 1 0 } { '-(T*e... 1: { { 0 1 } { '-T' 2 } } que significa lo siguiente: z -T·e^(-T)·z X(z)= ------------- + --------------- (*) (z - e^0)^1 (z - e^(-T))^2 A A A A Es decir, las listas contenidas en la lista del nivel 2 son polinomios en potencias descendientes de z (como los de toda la vida), que representan los numeradores de la descomposición en fracciones simples de la transformada. Las listas del nivel 1 contienen pares de la forma { X Y } donde X es el exponente al que hay que elevar "e" para posteriormente restárselo a "z" y obtener algo de la for- ma ( z - e^X ) e Y es la potencia a la que se eleva ese factor para ob- tener la expresión completa del denominador de la forma ( z - e^X )^Y - en la expresión (*) las Aes marcan los valores de X e Y para cada término del ejemplo - ¿ Has entendido ? Creo que no es muy complicado y después de un poco de práctica verás qué útil es ( por lo menos a mi me lo resulta ). ¿Que quieres particularizar la transformada Z para un va- lor concreto del período de muestreo "T" ? ¡¡¡ NINGÚN PROBLEMA !!! Este comando lo hace por ti. Dale X(s) (como siempre expresa- do en forma de una fración polinómica pero ahora en los nive- les 2 y 3 ) y el valor (real) del período de muestreo "T" en el nivel 1 y te devolverá la transformada Z particularizada para ese período. Por ejemplo: Una vez que tienes X(s) de la forma: 2: { 1 1 1 } 1: { 1 2 1 0 } introduce T en el nivel 1. V.g. ( para T = 0.5 segundos ) 3: { 1 1 1 } 2: { 1 2 1 0 } 1: .5 Pulsa '->Z' y obtendrás lo que buscas. ¿ Obtuviste la forma alternativa de la transformada Z y quieres la forma completa ? ¡¡¡ NINGÚN PROBLEMA !!! Eso es precisamente lo que hace el siguiente comando: * ->ND: Dada la transformada Z en su forma alternativa , devuelve la forma completa. Continuando con el ejemplo anterior... Una vez que tienes la forma alternativa 2: { { 1 0 } { '-(T*e... 1: { { 0 1 } { '-T' 2 } } presiona '->ND' y obtendrás la fracción polinómica correspon- diente a la forma completa de la transformada Z. * Z-> : Devuelve la transformada Z inversa de la fracción polinómica (expresada en potencias positivas descendentes de z) dada en los niveles 1 y 2. EJEMPLO ------- Para calcular la transformada inversa de z z^-1 X(z) = --------------- = ------------------- z^2 + 3·z + 2 1 + 3·z^-1 + z^-2 introduce 2: { 1 0 } 1: { 1 3 2 } y presiona 'Z->'. Obtendrás: 1: (-1)^k-(-2)^k lo que quiere decir que x(k) = Z^-1[X(z)] = (-1)^k-(-2)^k NOTAS (para '->Z' y 'Z->'): * Estos dos comandos sólo trabajan con polinomios CUYAS RAÍCES TENGAN UNA MULTIPLICIDAD MENOR O IGUAL QUE 4 ( lo que es sufi- ciente para la mayoría de los casos ). DATE CUENTA QUE ESO NO SIGNIFICA QUE NO PUEDAS TRABAJAR CON POLINOMIOS DE MÁS DE 4 COEFICIENTES. * Puedes también jugar con el flag 2 para obtener resultados algo más simplificados. * No olvides que puedes seguir utilizando la notación habitual de Neopolys para los polinomios que pasas a estos comandos. Por ejemplo: en el ejemplo del comando 'Z->' podías haberle pasado 2: { { 0 } } 1: { { -1 -2 } } y habrías obtenido el mismo resultado. * Para particularizar las transformadas Z para un T dado , pudes también utilizar los comandos 'MATCH' de la calculadora en combi- nación con el comando 'Dolis' ... Pero dejaré que pienses en ello... REFERENCIA RÁPIDA ================= La siguiente es una relación de los argumentos admitidos por cada comando y el tipo de resultado devuelto. Para el que no esté acostum- brado a este tipo de simbología, los términos a la izquierda del sím- bolo "->->" representan los argumentos pasados al comando , y su si- tuación en la pila. Así por ejemplo: P+ : (lrts,otro) (lrts,otro) ->-> list ( Nivel de la pila )-> (2) (1) ->-> (1) ) significa que el comando P+ admite o bien un polinomio, o bien otro tipo de dato en el nivel 2 (posíción (2)), y los mismos tipos de datos en el nivel 1, y devuelve un polinomio en el nivel 1. El significado de cada símbolo es el siguiente: list = Una lista con los coeficientes del polinomio. Ej: { 1 2 3 4 } roots = Una lista doble con las raíces del polinomio. Ej: { { 1 2 3 4 } } lrts = Cualquiera de las dos anteriores. Ej: { 1 2 3 } o { { 1 2 3 } } listlst = Una "lista de listas" Ej: { { 1 0 } { 1 3 } } simb = Expresión simbólica. Ej: 'x^2+1/A' simbn = Expresión simbólica de resultado numérico: Ej: '1/3+2^3' var = Nombre de variable. Ej: s num = Dato numérico real o complejo. Ejs: 1) 123 2) (1,-23.12) prog = Programa. Ej: << 2 * >> otro = Cualquier tipo de dato. Y la referencia para cada comando es: P+ : SUMA POLINOMIOS (lrts,any) (lrts,any) ->-> list P- : RESTA POLINOMIOS (lrts,any) (lrts,any) ->-> list P* : MULTIPLICA POLINOMIOS (lrts,any) (lrts,any) ->-> list P/ : DIVIDE POLINOMIOS (lrts,any) (lrts,any) ->-> list(resto) list(cociente) P^ : ELEVA UN POLINOMIO A UNA POTENCIA ENTERA (lrts,any) (num,simbn,list) ->-> list Pval : EVALÚA UN POLINOMIO EN UN PUNTO (lrts,any) (num,simbn,simb,var) ->-> num F+ : (lrts,any) (lrts,any) (lrts,any) (lrts,any) ->-> list list ( ó { } ) F- : (lrts,any) (lrts,any) (lrts,any) (lrts,any) ->-> list list ( ó { } ) F* : (lrts,any) (lrts,any) (lrts,any) (lrts,any) ->-> list list ( ó { } ) F/ : (lrts,any) (lrts,any) (lrts,any) (lrts,any) ->-> list list ( ó { } ) F^ : (lrts,any) (lrts,any) (num,simbn) ->-> list list ( ó { } ) Fval : (lrts,any) (lrts,any) (num,simbn,simb,var) ->-> num A->P : EXPRESIÓN ALGEBRAICA A POLINOMIO (simb,num,var) var ->-> list list list P->A : POLINOMIO A EXPRESION ALGEBRAICA (lrts,any) (var,num,simb) ->-> simb F->A : FRACCION POLINOMICA A EXPRESION ALGEBRAICA (lrts,any) (lrts,any) (var,num,simb) ->-> simb Pd : DERIVA POLINOMIOS (lrts,any) ->-> list PS : INTEGRA POLINOMIOS (lrts,any) ->-> list Fd : DERIVA FRACCIONES DE POLINOMIOS (lrts,any) (lrts,any) ->-> list list { } Pcoef : DEVUELVE LOS COEFICIENTES DE UN POLINOMIO DADAS LAS RAICES (roots,any) ->-> list Fsimp : SIMPLIFICA FRACCIONES DE POLINOMIOS (lrts,any) (lrts,any) ->-> list list { } GCD : MAYOR COMUN DENOMINADOR DE DOS POLINOMIOS (lrts,any) (lrts,any) ->-> list Roots : RAICES DE UN POLINOMIO DADOS LOS COEFICIENTES (lrts,any) ->-> roots pf : DESCOMPOSICION EN FRACCIONES PARCIALES (lrts,any) (lrts,any) -> -> list roots flgs : ACTIVACION/DESACTIVACION DE LOS FLAGS 3 Y 4 ALTERNATIVAMENTE ->-> (modified state of user flags 2 and 3) DoLis : APLICA UN PROCEDIMIENTO A UNA LISTA (lrts,listlst) proc ->-> (lrts,listlst) RevLis : INVIERTE LOS ELEMENTOS DE UNA LISTA (lrts,listlst) ->-> (lrts,listlst) Q-> : CONVIERTE FRACCIONES NUMÉRICAS Y EXPRESIONES NUMÉRICAS EN NÚMEROS SUSTITUYENDO EL CONTENIDO DE LAS VARIABLES QUE SEAN NUMÉRICAS Y QUE ESTÉN EN EL DIRECTORIO ACTUAL O SUPERIORES (lrts,listlst) ->-> (lrts,listlst) ->L : TRANSFORMADA DE LAPLACE symb(in terms of t) ->-> list list { } L-> : TRANSFORMADA INVERSA DE LAPLACE (lrts,any) (lrts,any) ->-> symb ->Z : TRANSFORMADA Z lrts lrts ->-> listlst listlst (flag 4 not set) ->-> list list (flag 4 set) lrts lrts num(real) ->-> listlst listlst (flag 4 not set) ->-> list list (flag 4 set) Z-> : TRANSFORMADA Z INVERSA (lrts,any) (lrts,any) ->-> symb ->ND : FORMA ALTERNATIVA A FRACCION POLINOMICA listlst listlst ->-> list list EL AUTOR ======== Agradezco cualquier comentario sobre fallos que hayáis encontrado o sobre cualquier otra cuestión que penséis sea de interés para mejo- rar Neopolys. Para ello podéis encontrarme en : apolo@sorolla.eis.uva.es NOTA FINAL ========== Todos aquellos que utilizáis las librerías de polinomios para trabajar con funciones de transferencia , control de sistemas y todo ese tipo de cosas, que sepáis que hay una librería llamada Bode-Routh que hace Bodes, diagramas de Nyquist , lugar de las raíces , etc... y que utiliza Neopolys. Bode-Routh la podéis encontrar en los mismos si- tios que Neopolys; así que si estáis leyendo esto ahora mismo, seguro que no tenéis mucho problema para encontrar esa librería. HISTORIAL ========= CAMBIOS DESDE LA VERSIÓN 6.2 Se ha introducido una pequeñísima rutina que reduce considera- blemente los errores de redondeo y aumenta mucho la exactitud de los resultados con lo que las simplificaciones son mucho mejores. Se ha hecho especial hincapié en procurar que los comandos tengan en cuenta si las variables que intervienen en los coeficien- tes de los polinomios existen en el directorio actual o en los su- periores a éste. En caso de ser así, y de que el dato contenido en las variables sea un número o una expresión de resultado numérico, su valor es directamente sustituido en las operaciones en lugar de trabajar con el nombre simbólico de la variable en cuestión. Obser- va el último ejemplo del comando 'Q->' si no has entendido esta bre- ve explicación. CAMBIOS DESDE LA VERSIÓN 6.0 El comando 'L->' ha sido reescrito completamente, con lo que se ha conseguido así corregir alguna que otra errata traviesa que quedaba por ahí suelta y ahora también es algo más rápido. El comando 'pf' ahora es más rápido que antes cuando trabaja con polinomios de raíces con multiplicidad mayor que uno. En las versiones anteriores algunas simplificaciones de fraccio- nes polinómicas no se hacían. Ahora la simplificación es bastante mejor. Se han hecho algunos otros pequeños retoques aquí y allá... CAMBIOS DESDE LA VERSIÓN 5.9 Se ha corregido una errata en el comando 'A->P' de los ficheros NeopV5x9.lib y NeopV5x9.trn. ¡ Gracias, Fredy Labbaci ! CAMBIOS DESDE LA VERSIÓN 5.8 Se ha observado que cuando se utilizan los comandos 'L->' y 'Z->' que vienen en el archivo NeopAlg.trn con el flag 2 activado (sim- plificación automática de resultados activada), la librería Alg48 tarda mucho tiempo en simplificar algunas expresiones, e incluso puede llegar a veces a bloquear la calculadora. Por este motivo, la simplificación automática ha sido eliminada de esos comandos. CAMBIOS DESDE LA VERSIÓN 5.7 Se han hecho unas ligeras modificaciones al comando 'Roots' para que puede manejar polinomios con coeficientes simbólicos de resul- tado numérico (véase la nota en la explicación de 'Roots'). Se han hecho unas ligeras modificaciones para obtener mejores simplificaciones y resultados más exactos. CAMBIOS DESDE LA VERSIÓN 5.6 Corregido un pequeño error en el comando 'L->'. Gracias de nuevo, Fredy Serrano y compañía... CAMBIOS DESDE LA VERSIÓN 5.4 Se han reescrito completamente los comandos '->L', 'L->' y 'Roots', Con ello se ha conseguido que estos comandos sean bastante más rá- pidos que en versiones anteriores, y que '->L' y 'L->' manejen mu- cho mejor las expresiones que contengan senos y cosenos de sumas. Los comandos de transformadas daban problemas si estaba activo el comando 'ASTK' de la librería 'EQSTK.LIB'. Parece que este proble- ma se ha esfumado al reescribir esos comandos. ¡ Gracias !, Fredy Serrano y compañía. Se han depurado otros errores menores y reescrito otros comandos internos para ganar en velocidad, consiguiendo al mismo tiempo una ligera disminución del tamaño de las librerías. CAMBIOS DESDE LA VERSIÓN 5.3 Se corrigió un error en el comando 'pf' que hacía que los resulta- dos no fueran correctos cuando el primer coeficiente del denomina- dor no era 1. CAMBIOS DESDE LA VERSIÓN 5.1 Se han introducido los comandos 'RevLis' y 'Q->'. Casi todos los comandos se han revisado para que admitan más ti- pos de argumentos y se han optimizado para que las simplificacio- nes sean mejores y algo más rápidas. Algunos comandos contenían erratas que fueron corregidas. Se han corregido algunas erratas de los manuales. CAMBIOS DESDE LA VERSIÓN 5.0 Los principales cambios se hicieron en las librerías NeopAlg.* donde había importantes y variados fallos que fueron corregidos. CAMBIOS DESDE LA VERSIÓN 4.5 Se introdujo la posibilidad de hacer uso del comando "QPI" (de la librería "QPI" de Mika Heiskanen) en caso de estar disponible, en sustitución del comando de la calculadora '->Q'. Asímismo, los usuarios de la librería "Alg48.lib" de Mika Heiska- nen tienen una versión optimizada de Neopolys que trabaja con esa librería, haciendo las operaciones más rápidas y las simplifica- ciones más correctas. Los comandos de transformadas de Laplace ahora manejan también las funciones hiperbólicas 'SINH' Y 'COSH'. Se introdujeron algunas mejoras para poder manejar cualquier tipo de datos como un polinomio sin necesidad de convertirle a una lis- ta. Se corrigieron algunas pequeñas erratas. CAMBIOS DESDE LA VERSIÓN 4.4 Se corrigió un error por el cual, cuando se hacían antitransfor- madas de Laplace de funciones que involucraban términos en 'sin(t)' la solución no era correcta. Debido a un pequeño error de simplificación, algunas fracciones polinómicas no se reducían adecuadamente. Este error fue corre- gido. CAMBIOS DESDE LA VERSIÓN 4.1 Esta nueva versión trabaja bien con las constantes 'pi', 'e' e 'i'. Se han añadido los comandos para calcular transformadas Z. CAMBIOS DESDE LA VERSIÓN 4.0 Se ha añadido el comando 'DoLis'. CAMBIOS RESPECTO DE LA VERSION 3.5 Se han reescrito algunos comandos en ensamblador , se han optimi- zado otros y se han añadido algunas pequeñas rutinas en ensambla- dor, logrando así un aumentando significativo en la velocidad ge- neral de las operaciones. Se ha renombrado el comando 'Psimp' como 'Fsimp'. Se ha añadido la posibilidad de expresar el resultado final en forma de fracciones mediante la activación del flag 3. El cálculo de transformadas de Laplace se ha reescrito casi en su totalidad corrigiendo así errores que hacían que algunos resulta- dos no fueran correctos y además se pueden calcular ahora trans- formadas algo más complicadas que antes. CAMBIOS RESPECTO DE LA VERSION 3.3 Se encontraron algunos polinomios para los que el comando 'Roots' no convergía adecuadamente. Se realizó otra pequeña optimización del código. CAMBIOS RESPECTO DE LA VERSION 3.1 Había un error en el comando 'pf' que si bien era pequeño , hacía que algunos resultados no fueran los verdaderos ni por asomo . Por cierto, ¡GRACIAS, GONZALO! por tus comentarios acerca de la libre- ría y por las exahustivas pruebas a la que la sometes. Se ha optimizado un poco el comando 'A->P'. CAMBIOS RESPECTO DE LA VERSION 3.0 Se corrigió una fallo en el comando P->A cuando se intentaba con- vertir un polinomio de grado cero (¡GRACIAS, PETER HORN!). Se corrigió el error "bad argument type" que daba el comando A->P cuando se intentaba convertir un número o una constante a un poli- nomio de grado cero. CAMBIOS RESPECTO DE LA VERSION 2.3 Extensa optimización de código y eliminación de pequeñas erratas en algunos de los comandos, consiguiendo un leve aumento de la ve- locidad de cálculo y reduciendo el tamaño de la librería. Se podía haber reducido mucho más el tamaño de la librería pero se optó por un amplio chequeo de errores y casos críticos como divi- siones por cero, etc... Se da opción a elegir cargar la librería con o sin los comandos de transformadas de Laplace. Se han incluido algunos casos más a la hora de calcular las trans- formadas de Laplace. !! ATENCION (ANTERIORES USUARIOS) !! Se ha cambiado la forma de representar el resultado que devuelve el comando 'pf'. CAMBIOS RESPECTO DE LA VERSION 2.2 Para algunos polinomios el comando 'Roots' no convergía. Se hizo un pequeño cambio para asegurar la convergencia para cualquier po- linomio. CAMBIOS RESPECTO DE LA VERSION 2.1 Se corrigió un error de cálculo en el comando 'pf' que se daba cuando el primer coeficiente del polinomio del denominador era distinto de uno.