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.