Source: http://docplayer.es/142381-Introduccion-al-maxima-cas-con-aplicaciones-a-la-resolucion-de-ecuaciones-diferenciales-ordinarias.html
Timestamp: 2017-08-22 23:18:49+00:00

Document:
Introducción al Maxima CAS con aplicaciones a la resolución de ecuaciones diferenciales ordinarias * - PDF
Introducción al Maxima CAS con aplicaciones a la resolución de ecuaciones diferenciales ordinarias *
Download "Introducción al Maxima CAS con aplicaciones a la resolución de ecuaciones diferenciales ordinarias *"
Bernardo Toledo San Martín
1 Introducción al Maxima CAS con aplicaciones a la resolución de ecuaciones diferenciales ordinarias * Renato Álvarez Nodarse Dpto. Análisis Matemático, Universidad de Sevilla. 24 de enero de 215 Índice 1. Por qué usar el ordenador en las clases de matemáticas? 2 2. Primeros pasos con Maxima Empezando: primeras operaciones Conceptos del cálculo diferencial e integral Otros comandos útiles de Maxima Manipulando expresiones algebraicas y resolviendo ecuaciones Un poco de álgebra lineal Tratamiento de datos Resolviendo EDOs con Maxima Soluciones analíticas Soluciones numéricas El método de Euler con Maxima El método de Euler El método de Euler mejorado Resolviendo sistemas de EDOs lineales Resolviendo sistemas con Maxima Resolviendo EDOs lineales de orden n Un ejemplo usando series de potencias Automatizando el método de las series de potencias Bibliografía básica 57 * A las notas les acompañan las sesiones en el entorno wxmaxima. Cada fichero comienza con un distintivo de la sección. Por ejemplo, el s2 del fichero s2-maxima-intro.wxm indica que este fichero es la sesión usada en la sección 2. Así, s4-metodo-euler.wxm será el fichero usado en la sección 4, etc. Dichos ficheros se encuentran disponibles en la página web del autor. 1
2 R. Álvarez Nodarse EDOs y Maxima 2 1. Por qué usar el ordenador en las clases de matemáticas? Los computadores, como instrumentos de experimentación matemática, han seguido un lento camino desde que John von Neumann 1 los concibiera; Fermi, Pasta y Ulam 2 lo usaran por primera vez experimentalmente en los años 5, hasta el día de hoy, en que constituyen un elemento más de nuestro entorno cotidiano. No obstante lo que que es deseable, aparte de los muchos usos lúdicos que puedan tener, es que aprendamos a utilizarlo como una herramienta esencial para resolver problemas y proyectos relacionados con las matemáticas y demás ciencias exactas. De esta forma se pueden, entre otras cosas, comprobar las predicciones analíticas (teóricas) mediante experimentos numéricos. Es por ello que es interesante aprender a trabajar con un programa de cálculo matemático. En relación a lo anterior se plantea el problema de qué software elegir. La elección de un software libre es, seguramente, la mejor opción ya que no tiene ningún coste adicional como, por ejemplo, Maxima (programa basado en LIPS de corte simbólico/numérico) u Octave (escrito en C++, para cálculo numérico esencialmente), programas matemáticos con licencia GNU/GPL (y por tanto gratuitos y de distribución libre) accesibles por internet en y respectivamente 3. En estas notas vamos a describir brevemente como funciona el programa de cálculo simbólico (y numérico) Maxima. La elección de Maxima no es arbitraria. En primer lugar hay que destacar que es un programa que permite tanto el cálculo simbólico (es decir, como si lo hiciésemos con lápiz y papel) como numérico; en segundo lugar, tiene una comunidad de usuarios muy numerosa, con foros de discusión, etc. y por último, pero no por ello menos importante, existen una gran cantidad de manuales de acceso libre muchos de ellos disponibles en la propia web del programa entre los que se encuentran los siguientes: 4 1. Jerónimo Alaminos Prats, Camilo Aparicio del Prado, José Extremera Lizana, Pilar Muñoz Rivas y Armando R. Villena Muñoz, Prácticas de ordenador con wxmaxima, Granada 2. José Manuel Mira Ros, Elementos para prácticas con Maxima (Murcia, 3. Rafa Rodríguez Galván, Maxima con wxmaxima: software libre en el aula de matemáticas (Cádiz, 27) 4. Mario Rodríguez Riotorto, Primeros pasos en Maxima (Ferrol, 28) 1 En realidad el primer ordenador digital fue el ENIAC (Electronic Numerical Integrator And Calculator) pero su programa estaba conectado al procesador y debía ser modificado manualmente, es decir si queríamos resolver un problema distinto había que cambiar las propias conexiones en el ordenador, i.e., cambios de programa implicaban cambios en la estructura de la máquina (hardware). Fue el polifacético John von Neumann quien propuso que se separara el programa (software) del hardware, por lo que se le considera el creador de los ordenadores modernos. 2 A mediados de 1952 el físico Enrico Fermi ( ) propuso resolver numéricamente con ayuda de la computadora MANIAC-I (Mathematical Analyzer Numerical Integrator And Calculator) de los Alamos un problema de un sistema con osciladores no lineales, para lo que se asoció con el especialista en computación John Pasta ( ) y el Matemático Stanislaw Ulam ( ). Aunque nunca se llegó a publicar el trabajo debido a la prematura muerte de Fermi (apareció como preprint titulado Studies of nonlinear problems. I y más tarde fue incluido en Collected Papers of Enrico Fermi, E. Segré (Ed.), University of Chicago Press (1965) p , con una introducción de Ulam) fue un trabajo extremadamente influyente y marcó la fecha del nacimiento de la matemática experimental (para más detalle véase el artículo de M.A. Porter, N.J. Zabusky, B. Hu y D.K. Campbell, Fermi, Pasta, Ulam y el nacimiento de la matemática experimental, Revista Investigación y Ciencia 395 Agosto de 29, p. 72 8). 3 Una lista bastante completa de las opciones se puede consultar en la wikipedia matematico 4 Conviene visitar también la web que contiene además muchos manuales en inglés muy interesantes.
3 R. Álvarez Nodarse EDOs y Maxima 3 5. José Antonio Vallejo Rodríguez, Manual de uso de Maxima y wxmaxima en asignaturas de cálculo diferencial (México, 28) Por comodidad usaremos la interfaz gráfica wxmaxima (otra opción posible es XMaxima) que se puede obtener gratuitamente desde la página de Maxima o, si se usa Linux, mediante el instalador de paquetes de la correspondiente distribución, en cuyo caso hay que asegurarse de instalar Gnuplot y Maxima. Lo que pretendemos con estas notas es mostrar el uso de Maxima como complemento a un curso introductorio de Análisis Matemático con un énfasis especial en la resolución de las ecuaciones diferenciales. Esto último no es casual 5 pues para la resolución de las ecuaciones diferenciales se precisa de los conceptos del Cálculo diferencial e integral y del Álgebra lineal y por tanto tendremos que mostrar como trabajar con ellos con Maxima. Las notas están organizadas de la siguiente forma: los capítulos 2 y 3 constituyen una breve introducción general a Maxima, mientras que los capítulos 4, 5 y 6 se centran en las ecuaciones diferenciales. 2. Primeros pasos con Maxima 2.1. Empezando: primeras operaciones Maxima es un programa que funciona como una calculadora científica. Las operaciones aritméticas elementales son las habituales: + suma, resta, multiplicación, / división, ˆ potencias: 6 (%i1) 2+2; 3-3; 2*3; 5/1; 3^3; (%o1) 4 (%o2) (%o3) 6 (%o4) 1/2 (%o5) 27 La notación que usa Maxima es (%in) y (%om) para indicar la entrada (inchar o input) n-ésima y la salida (outchar u output) m-ésima. Usando, por ejemplo, las órdenes inchar: "input"; y outchar: "output"; podemos cambiar las (%in) y (%om) por (%inputn) y (%outputm), respectivamente. Dado que Maxima es un programa de cálculo simbólico, trabaja con variables definidas por letras: (%i6) e; (%o6) e Las funciones (comandos) tienen el argumento (o los argumentos) que van entre paréntesis, como por ejemplo el comando float(x) que nos da como resultado el valor numérico de la variable x. En este ejemplo e representa una variable que no tiene ningún argumento asignado: (%i7) float(e); (%o7) e (%i8) pi; (%o8) pi (%i9) float(pi); (%o9) pi 5 Inicialmente se usó como complemento al curso de Ampliación de Análisis Matemático de la Diplomatura de Estadística de la Universidad de Sevilla (dicha asignatura tenía como objetivo, esencialmente, el estudio y resolución numérica de ecuaciones diferenciales ordinarias. 6 Normalmente para que Maxima calcule es necesario apretar al mismo tiempo las teclas Schift (mayúsculas) y Enter.
4 R. Álvarez Nodarse EDOs y Maxima 4 por lo que su respuesta es la propia variable. Nótese que si escribimos pi, (o π, lo que se puede conseguir con la combinación Esc p Esc ) el resultado es pi. Para los valores numéricos de las constantes e (base de los logaritmos neperianos) o π Maxima usa una notación distinta: (%i1) %e; (%o1) %e (%i11) float(%e); (%o11) Si no se le dice lo contrario, Maxima trabaja en precisión simple, i.e., con 16 dígitos. Dado que es un programa simbólico, podemos definirle con cuantas cifras queremos trabajar. Para ello hay que definir la variable fpprec. Para asignar valores a las variables dadas se usan los dos puntos. Por ejemplo si escribimos e: %e habremos definido la variable e con el valor de la base de los logaritmos neperianos. Vamos a definir el grado de precisión en 5 cifras significativas: (%i12) fpprec:5; (%o12) 5 y lo comprobamos pidiendo a Maxima que nos de los valores de e y π con 5 cifras, para lo cual hay que usar el comando bfloat (%i13) bfloat(%e); bfloat(%pi); (%o13) b (%o14) b Aquí, la notación b indica 1. Calculemos ahora e 7 y pidamos a Maxima que escriba los valores numéricos del mismo: (%i15) float(%e^7); (%o15) (%i16) bfloat(%e^7); (%o16) b3 (%i17) %e^7; (%o17) %e^7 Así si escribimos %e^7 la salida es simplemente e 7 pues Maxima, como hemos dicho, trabaja simbólicamente. Si usamos float, la salida es en precisión normal, y solo si usamos bfloat nos devuelve el resultado en la precisión definida previamente de 5 cifras. El orden de realización de las operaciones es el habitual. Así en la expresión (%i18) (2+3^2)^3*(5+2^2); (%o18) primero calcula las potencias dentro de cada paréntesis, luego las sumas, luego las potencias externas y finalmente la multiplicación. Como hemos mencionado, para definir los valores de las variables se usan los dos puntos. En la secuencia que aparece a continuación se definen la x y la y para que valgan 123 y 321, respectivamente, dejándose la z libre. (%i19) x:123; y:321; x*y; x/y; x-y; (%o19) 123 (%o2) 321 (%o21) (%o22) 41/17 (%o23) -198 (%i24) 123*321;
5 R. Álvarez Nodarse EDOs y Maxima 5 (%o24) (%i25) x; (%o25) 123 (%i26) z=2; (%o26) z=2 (%i27) z; (%o27) z (%i28) x; (%o28) 123 (%i29) y; (%o29) 321 (%i3) x*y; (%o3) (%i31) x+z; (%o31) z+123 Del resultado se sigue, que, por ejemplo, al realizar la división x/y, Maxima simplifica al máximo el resultado. Nótese también que el resultado de la multiplicación de x y es precisamente el valor de Como vemos en la salida (%o26) la expresión z=2 no asigna el valor 2 a la variable z, ya que en realidad z=2 es una ecuación (como veremos más adelante). Es importante destacar, además, que hay que escribir el símbolo de cada multiplicación pues, si por ejemplo escribimos x y en vez de x*y obtenemos un mensaje de error (%i32) x y; Incorrect syntax: Y is not an infix operator SpacexSpacey; ^ También es posible definir funciones. Hay múltiples formas en función de lo queramos hacer. La más sencilla es mediante la secuencia := (%i32) f(x):= x^2 -x + 1; (%o32) f(x):=x^2-x+1 (%i33) f(%pi); (%o33) %pi^2-%pi+1 (%i34) float(%); (%o34) (%i35) float(f(%pi)); (%o35) Nótese que a no ser que pidamos a Maxima que trabaje numéricamente, sigue usando cálculo simbólico (ver el valor de f(π) de la salida 33). Otro detalle interesante a tener en cuenta es que Maxima contiene una ayuda completa que puede ser invocada desde la propia línea de comandos. Para ello preguntamos a Maxima con?? delante del comando desconocido (%i36)??float; : Functions and Variables for Floating Point 1: bfloat (Functions and Variables for Floating Point) 2: bfloatp (Functions and Variables for Floating Point) 3: float (Functions and Variables for Floating Point) 4: float2bf (Functions and Variables for Floating Point) etc.
6 R. Álvarez Nodarse EDOs y Maxima 6 Enter space-separated numbers, all or none : La respuesta es una lista de opciones de funciones de Maxima que contienen las letras del comando y el programa se queda esperando que elijamos una opción. Al elegirla nos da una explicación detallada de la sintaxis y de lo que hace dicho comando y, en muchos casos, ejemplos de utilización: Enter space-separated numbers, all or none : ; 1.1 Functions and Variables for Floating Point =============================================== -- Function: bffac (<expr>, <n>) Bigfloat version of the factorial (shifted gamma) function. The second argument is how many digits to retain and return, it s a good idea to request a couple of extra. -- Option variable: algepsilon Default value: 1^8 algepsilon is used by algsys. etc. (%o36) true Si no existe ningún comando con ese nombre la respuesta es false (en caso contrario, al final de las explicaciones, la salida es true). (%i37)??renato; (%o37) false Otra de las interesantes opciones de Maxima es su potencia gráfica. Para hacer las gráficas Maxima usa Gnuplot, un potente paquete gráfico GNU. El comando más sencillo de usar es plot2d (o si usas como interfaz gráfica el wxmaxima, wxplot2d). Si sintaxis es muy simple wxplot2d([funcion1,funcion2,...],[variable,inicio,final]) Ahora bien, para usar ese comando tenemos que ser muy cuidadosos. Si hacemos en nuestro caso (%i39) wxplot2d([f(x)], [x,-5,5]); Bad range: [123,-5,5]. Range must be of the form [variable,min,max] -- an error. To debug this try: debugmode(true); obtenemos un error, que simplemente, leyendo nos indica que la variable x ya esta asignada. Eso se resuelve cambiando la variable por otra no usada o, usando una variable muda, es decir una variable que solo se use dentro del propio comando wxplot. Estas variables se definen colocando delante de la misma el signo, por ejemplo, en vez de x usamos x (%i4) wxplot2d([f( x)], [ x,-5,5])$ que nos saca en el propio entorno de xwmaxima la gráfica. También podemos usar plot que saca el resultado en una pantalla aparte (de Gnuplot). También podemos representar varias gráficas al mismo tiempo. Para ello creamos una lista 7 de funciones de la siguiente forma [f1(x),...,fn(x)]. En el ejemplo representamos las funciones f(x), sen(2x) y arctan(x) (%i41) wxplot2d([f( x),2*sin( x),atan( x)], [ x,-2,2])$
7 R. Álvarez Nodarse EDOs y Maxima x 2 -x+1 2*sin(x) atan(x) x 2 -x x x Figura 1: Los gráficos de la función de la salida %o32 f(x) = x 2 x + 1 (izquierda) y el de las tres funciones de la salida %o41 (derecha) Maxima también dispone de una gran cantidad de funciones elementales, exponencial, logaritmo, trigonométricas, etc. Además las trata de forma simbólica como se puede ver en la secuencia que sigue. Nótese que la función log denota a los logaritmos neperianos (probar con la función ln). (%i42) log(1); (%o42) log(1) (%i43) float(%); (%o43) (%i44) log(%e); (%o44) 1 También podemos calcular factoriales (%i45) fac:15!; (%o45) En el próximo apartado se incluye una lista de algunas de las funciones más comunes que usa Maxima. Otra de las bondades de Maxima es que cuenta con un gran repertorio de comandos de manipulación algebraica, basta pinchar en la pestaña Simplificar y veremos las muchas posibilidades. A modo de ejemplo factorizaremos el factorial anterior (que al ser un número, Maxima lo que hace es encontrar sus factores primos). (%i46) factor(fac); (%o46) 2^11*3^6*5^3*7^2*11*13 Podemos factorizar expresiones algebraicas: (%i47) factor(x^2+x+6); (%o47) 2*3*2543 Ops! qué es esto? (%i48) x; (%o48) Las listas no son más que expresiones de la forma [objeto1,...,objeton], donde objeto1,..., objeton son objetos cuales quiera (números, variables, gráficas, listas,...).
8 R. Álvarez Nodarse EDOs y Maxima 8 Claro, x estaba asignada al valor 123. Una opción es usar variables mudas (%i49) factor( x^2 + x -6); (%o49) (x-2)*(x+3) o bien, limpiar el valor de una variable, para lo cual usamos el comando kill (%i5) kill(x); x; (%o51) done Ahora ya podemos usar sin problemas los comandos de simplificación usando la variable x, como por ejemplo, radcan (%i52) radcan((x^2-1)/(x-1)); (%o52) x+1 Si en vez de factorizar queremos desarrollar en potencias usamos la orden expand. Su sintaxis es expand(expr,n,m). Es importante destacar que esta orden desarrolla las potencias que van desde m a n en la expresión expr. Como ejercicio comprobad la salida de expand para la expresión (x + 1) 1 + 2(x 3) 32 + (x + 2) 2 + 1/x + 2/(x 1) 2 + 1/(x + 1) 3 usando las opciones expand(expr); expand(expr,1); expand(expr,3,2); Las ecuaciones se definen en Maxima de forma habitual, mediante el signo igual, i.e., miembro izquierdo = miembro derecho, por ejemplo x^2-4= define la ecuación x 2 4 =. Lo interesante es que, definida una ecuación, podemos resolverla analíticamente con el comando solve: (%i53) solve(x^2-4=,x); (%o53) [x=-2,x=2] Además, Maxima lo hace simbólicamente, como ya hemos mencionado más de una vez. Incluso da las soluciones complejas si es necesario (%i54) solve(x^2-4=a,x); (%o54 [x=-sqrt(a+4),x=sqrt(a+4)] (%i55) solve(x^2=-1); (%o55) [x=-%i,x=%i] (%i56) solve(x^5=1,x); (%o56) [x=%e^((2*%i*%pi)/5),x=%e^((4*%i*%pi)/5), x=%e^(-(4*%i*%pi)/5),x=%e^(-(2*%i*%pi)/5),x=1] (%i6) rectform(%); (%o6) [x=%i*sin((2*%pi)/5)+cos((2*%pi)/5), x=%i*sin((4*%pi)/5)+cos((4*%pi)/5), x=cos((4*%pi)/5)-%i*sin((4*%pi)/5), x=cos((2*%pi)/5)-%i*sin((2*%pi)/5),x=1] Como ejercicio resolver la ecuación x n = 1. Si queremos limpiar todas las variables 8 de nuestra sesión debemos usar el comando kill(all) (%i61) kill(all); (%o) done Nótese que el número del output es. Aparte de la orden solve existen otros dos comandos para resolver sistemas. Ellos son linsolve y algsys cuyas sintaxis son 8 Esto es muy recomendable cuando comencemos a trabajar en un nuevo problema o queremos repetir los cálculos para asegurarnos que no hemos cometidos errores. Otra opción es ir a la pestaña Maxima y elegir Reiniciar.
9 R. Álvarez Nodarse EDOs y Maxima 9 algsys([ecuaciones],[variables]) y linsolve([ecuaciones],[variables]) respectivamente. El primero de ellos se usa para resolver sistemas de ecuaciones algebraicas y tiene la ventaja de que si el sistema no es resoluble de forma analítica lo intenta de forma numérica (%i1) solve(x^7+2*x+1); (%o1) [=x^7+2*x+1] (%i2) algsys([x^7+2*x+1=],[x]); (%o2) [[x= *%i],...,[x= ]] El otro comando linsolve resuelve sistemas de ecuaciones lineales (%i3) eq:[x+2*y+3*z=a,3*x+2*y+z=-a,x-y+z=a]$ (%i4) solve(eq,[x,y,z]); (%o4) [[x= a/4,y= a/2,z=(3*a)/4]] (%i5) linsolve(eq,[x,y,z]); (%o5) [x= a/4,y= a/2,z=(3*a)/4] (%i6) linsolve(eq,[x,y,z,a]); (%o6) [x= %r4/4,y= %r4/2,z=(3*%r4)/4,a=%r4] Nótese que la salida depende de cuales son las incógnitas, así el mismo sistema eq tiene soluciones distintas si se resuelve respecto a las variables x,y,z o respecto a x,y,z,a Conceptos del cálculo diferencial e integral Antes de comenzar a mostrar como Maxima trabaja con los conceptos del cálculo diferencial e integral vamos a incluir una lista con las funciones más comunes que tiene Maxima: abs(expresion) valor absoluto o módulo de la expresión expresion entier(x) parte entera de x round(x) redondeo de x exp(x) función exponencial de x log(x) logaritmo neperiano de x max(x1, $x$2,...), min(x1, x2,...) máximo y mínimo de los números x 1, x 2,... sign(exp) signo de la expresión exp. Devuelve una de las respuestas siguientes: pos (positivo), neg (negativo), zero, pz (positivo o cero), nz (negativo o cero), pn (positivo o negativo), o pnz (positivo, negativo, o cero, i.e. no se sabe). sqrt(x) raíz cuadrada de x, i.e., sqrtx. acos(x) arco coseno de x acosh(x) arco coseno hiperbólico de x acot(x) arco cotangente de x acoth(x) arco cotangente hiperbólico de x acsc(x) arco cosecante de x acsch(x) arco cosecante hiperbólico de x
10 R. Álvarez Nodarse EDOs y Maxima 1 asec(x) arco secante de x asech(x) arco secante hiperbólico de x asin(x) arco seno de x asinh(x) arco seno hiperbólico de x atan(x) arco tangente de x atan2(y,x) proporciona el valor de arctan(y/x) en el intervalo [ π, π) atanh(x) arco tangente hiperbólico de x cos(x) coseno de x cosh(x) coseno hiperbólico de x cot(x) cotangente de x coth(x) cotangente hiperbólica de x csc(x) cosecante de x csch(x) cosecante hiperbólica de x sec(x) secante de x sech(x) secante hiperbólica de x sin(x) seno de x sinh(x) seno hiperbólico de x tan(x) tangente de x tanh(x) tangente hiperbólica de x gamma(x) función gamma de Euler beta(x,y) función beta de Euler erf(x) la función error, i.e. 2 x π du e u2 isqrt(x) parte entera de la raíz cuadrada de x, que debe ser entero binomial(x,y) número combinatorio ( ) n m = n! m!(n m)! Antes mostrar como Maxima trabaja con los conceptos del cálculo diferencial e integral conviene comentar una opción muy importante relacionada con la forma como Maxima trabaja con los logaritmos y las raíces. Esta opción tiene que ver con las variables logexpand y radexpand que son las que controlan si se simplifican logaritmos de productos o radicales con productos. Por defecto su valor es true lo que implica es que expand no desarrolla dichos productos (%i1) log(a*b); (%o1) log(a*b) (%i2) sqrt(a*b); (%o2) sqrt(a*b) (%i3) radexpand:all$ (%i5) log(a*b); (%o5) log(b)+log(a) logexpand:all$
11 R. Álvarez Nodarse EDOs y Maxima 11 (%i6) sqrt(a*b); (%o6) sqrt(a)*sqrt(b) (%i7) kill(all); (%o) done Veamos como Maxima trabaja con los conceptos del cálculo diferencial e integral. Ante todo, Maxima sabe calcular límites lím x x± f(x), para ello usa el comando limit cuya sintaxis es (%i1) limit(sin(a*x)/x,x,); (%o1) a Incluso aquellos que dan infinito (%i2) limit(log(x),x,); (%o2) infinity (%i3) limit(log(x),x,,plus); (%o3) -inf (%i4) limit(log(x),x,,minus); (%o4) infinity limit(f(x),x,x,dirección) Debemos destacar que infinity es entendido por Maxima como el infinito complejo, mientras que inf lo entiende como el + real. Gracias a esto podemos calcular límites infinitos (%i5) limit((1+2/x)^(x^(1/3)),x,inf); (%o5) 1 Como ejercicio calcula los límites lím x log(3x)/x, lím n (1 + 2/n) 3/n y lím x 2 x 2 4 x 2. Muchas veces necesitamos evaluar una salida en una serie de valores. Por ejemplo x 2 + 3x + 2 en x = 1, digamos. Entonces usamos en comando ev cuya sitaxis es ev(expr,var1,var2,...) que evalúa la expresión expr en los valores de var1,... Por ejemplo (%i7) ev(x^2+3*x+2,x=1); (%o7) 6 (%i8) ev(x^p+3*x+2,x=2); (%o8) 2^p+8 (%i9) ev(x^p+3*x+2,x=2,p=2); (%o9) 12 El comando diff permite calcular derivadas parciales de cualquier orden de una función. Su sintaxis es diff(f(x,y),x,k) o diff(f(x,y),x,k,y,m) donde f(x) es la función a la que le vamos a calcular la derivada k-ésima respecto a la variable x o la k-ésima respecto a la variable x y la m-ésima respecto a la variable y, respectivamente. Por ejemplo: (%i6) diff(sin(x^2+2),x); (%o6) 2*x*cos(x^2+2) (%i7) diff(x^x, x,3); (%o7) x^(x-1)*(log(x)+(x-1)/x)+x^x*(log(x)+1)^3+2*x^(x-1)*(log(x)+1) (%i8) (sin(x))^x; (%o8) sin(x)^x (%i9) diff(sin(x)^x, x); (%o9) sin(x)^x*(log(sin(x))+(x*cos(x))/sin(x))
12 R. Álvarez Nodarse EDOs y Maxima 12 Además, como vemos también funciona para funciones definidas por el usuario (%i1) g(x):= sin(x*log(1+x^2)); (%o1) g(x):=sin(x*log(1+x^2)) (%i11) diff(g(x),x,1); (%o11) (log(x^2+1)+(2*x^2)/(x^2+1))*cos(x*log(x^2+1)) Maxima recuerda todas las salidas. Para invocar la última salida bastante usar el %. Por ejemplo, la orden ratsimp(%) simplifica la salida anterior (que en nuestro ejemplo era la derivada de g(x)) (%i12) ratsimp(%); (%o12) (((x^2+1)*log(x^2+1)+2*x^2)*cos(x*log(x^2+1)))/(x^2+1) (%i13) radcan(%); (%o13) (((x^2+1)*log(x^2+1)+2*x^2)*cos(x*log(x^2+1)))/(x^2+1) (%i14) factor(%); (%o14) ((x^2*log(x^2+1)+log(x^2+1)+2*x^2)*cos(x*log(x^2+1)))/(x^2+1) (%i15) expand(%); (%o15) (x^2*log(x^2+1)*cos(x*log(x^2+1)))/(x^2+1)+ (log(x^2+1)*cos(x*log(x^2+1)))/(x^2+1)+ (2*x^2*cos(x*log(x^2+1)))/(x^2+1) (%i16) trigsimp(%); (%o16) (((x^2+1)*log(x^2+1)+2*x^2)*cos(x*log(x^2+1)))/(x^2+1) Podemos recuperar la n-ésima salida simplemente usando %onúmero de la salida (output). Así %o5 nos devolvería la salida número 5, i.e. 1. El comando integrate(f(x),x) calcula una primitiva de la función f(x) (%i17) integrate(sin(2*x), x); (%o17) -cos(2*x)/2 Cuando Maxima no puede calcular la integral analíticamente podemos integrar numéricamente. Para ello Maxima cuenta con el paquete quadpack que tiene implementado una serie de reglas de cuadratura. Este paquete tiene muchísimas opciones así que nos restringiremos al comando quad_qag. que permite calcular el valor de la integral de una función en un intervalo acotado quad_qag. Su sintaxis es quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit]) donde f(x) es la función a integrar, x es la variable, a y b los extremos del intervalo. el valor key es un número del 1 al 6 (es el orden de la regla de integración de Gauss-Kronrod que se va a usar). La segunda lista consta de los siguientes elementos epsrel que es el error relativo deseado de la aproximación (el valor por defecto es 1 8, epsabs es el error absoluto deseado de la aproximación (el valor por defecto es, y limit es el número máximo de subintervalos a utilizar (el valor por defecto es 2). La función quad_qag devuelve una lista de cuatro elementos: [la aproximación a la integral, el error absoluto estimado de la aproximación, el número de evaluaciones del integrando, un código de error]. Es deseable que la salida del último argumento (el código de error) sea (no hay errores). Por ejemplo, para calcular numéricamente la integral 1 x2 dx escribimos quad_qag (x^(2), x,, 1, 3, epsrel=1d-1); cuya salida es [ , *1^ 15,31,]. El primer elemento es casi el valor real 1/3 de la integral con una presición de 1 15 y el programa ha necesitado 31 iteraciones. Para más detalle consúltese el manual de Maxima [1]. Vamos ahora a aprender como definir funciones a partir de las salidas de Maxima. Por ejemplo, definamos la función int(x) como la salida de la orden integrate
13 R. Álvarez Nodarse EDOs y Maxima 13 (%i18) int(x):=integrate(x+2/(x -3), x); (%o18) int(x):=integrate(x+2/(x-3),x) (%i19) int(x); (%o19) 2*log(x-3)+x^2/2 En efecto, vemos que podemos dibujarla (%i2) wxplot2d([int( x)], [ x,2,7])$ plot2d: expression evaluates to non-numeric value somewhere in plotting range. (%t2) << Graphics >> Nótese que Maxima nos previene que hay valores para los cuales la función int(x) no está definida. Además podemos comprobar que la derivada de int(x) es precisamente nuestra función de partida: (%i21) diff(int(x),x,1); (%o21) x+2/(x-3) Sin embargo hay que ser cuidadoso a la hora de trabajar con las funciones definidas a partir de las salidas de Maxima. El siguiente ejemplo 9 muestra que no siempre Maxima funciona bien: (%i22) vnum1:integrate(x+2/(x -3), x,,1); (%o22) -2*log(3)+2*log(2)+1/2 (%i23) int(1)-int(); Attempt to integrate wrt a number: 1 #: int(x=1) -- an error. To debug this try: debugmode(true); (%i24) int(1); Attempt to integrate wrt a number: 1 #: int(x=1) -- an error. To debug this try: debugmode(true); La razón es que Maxima al calcular int(1) intenta sustituir la x por 1 en la expresión integrate(x+2/(x-3),x,,1), lo que causa el error, es por ello que hay que proceder de forma diferente, concretamente usando el comando define de la siguiente forma 1 : (%i25) define(intprim(x),integrate(x+2/(x-3),x)); (%o25) intprim(x):=2*log(x-3)+x^2/2 (%i26) intprim(1); (%o26) 2*log(-2)+1/2 (%i27) intprim(1)-intprim(); (%o27) 2*log(-2)-2*log(-3)+1/2 lo que nos permite, efectivamente, usar la salida de Maxima para definir la nueva función intprim, que ahora si está bien definida. Podemos finalmente comprobar que intprim da, efectivamente, una primitiva de nuestra función (%i28) %-vnum1; (%o28) 2*log(3)-2*log(2)+2*log(-2)-2*log(-3) (%i29) rectform(%); (%o29) 9 El comando integrate(expr, x, a, b) calcula la integral definida de la expresión expr (usualmente una función) en la variable x, e.g. integrate(f(x), x, a, b) calcula b a f(x)dx. 1 También valdría define(intprim(x),int(x))
14 R. Álvarez Nodarse EDOs y Maxima 14 Hemos de destacar que en la expresión anterior aparece log(-2) y log(-3) lo que en principio no tiene sentido ya que el logaritmo no esta definido para los negativos a no ser que... sea el logaritmo complejo, (%i3) log(-2); rectform(%); (%o3) log(-2) (%o31) log(2)+%i*%pi que como vemos es precisamente el caso. Otra opción interesante que tiene Maxima es que se pueden hacer suposiciones sobre las variables. Por ejemplo si pedimos a Maxima que calcule la integral (%i32) integrate (x^a*exp(-x), x,, inf); Is a+1 positive, negative, or zero?p; (%o32) gamma(a+1) este nos pregunta si la a es positiva, negativa, etc. Al responder nos da la solución ( preguntar a Maxima qué significa gamma?) Si sabemos que, por ejemplo, la a es positiva, etc. podemos usar el comando assume que indica que al calcular la integral la a es un número mayor que uno. (%i33) assume (a > 1)$ integrate (x^a*exp(-x), x,, inf); (%o34) gamma(a+1) Veamos otros dos comandos interesantes. El primero es el comando taylor que permite calcular el polinomio de Taylor de orden n alrededor del punto x de la función f(x). Formalmente Maxima lo que hace es calcular el polinomio P n (x, x ) = f(x ) + f (x )(x x ) + 1 2! f (x )(x x ) n! f (n) (x )(x x ) n. La sintaxis es taylor(f(x),x,x,n) (%i42) taylor(%e^x,x,,5); (%o42)/t/ 1+x+x^2/2+x^3/6+x^4/24+x^5/ El segundo powerseries permite a Maxima tratar con series infinitas. En primer lugar la orden powerseries(f(x),x,x) devuelve la serie de potencias de f alrededor del punto x. (%i43) powerseries(%e^x,x,);sere:niceindices(%); (%o43) sum(x^i1/i1!,i1,,inf) (%o44) sum(x^i/i!,i,,inf) Lo interesante es que Maxima es capaz de integrar y diferenciar las series de potencias (%i45) ser:niceindices(powerseries(1/(1+x),x,)); (%o45) sum((-1)^i*x^i,i,,inf) (%i46) integrate(ser,x); (%o46) sum(((-1)^i*x^(i+1))/(i+1),i,,inf) (%i47) diff(%,x); (%o47) sum((-1)^i*x^i,i,,inf) Para terminar esta introducción debemos decir que Maxima también dibuja gráficas 3D con el comando plot3d cuya sintaxis es similar a la de plot2d plot3d([funcion1,funcion2,...],[variable1,inicio,final],[variable2,inicio,final])
15 R. Álvarez Nodarse EDOs y Maxima 15 cos(y)+sin(x) x y Figura 2: La gráfica de la función f(x, y) = sen(x) + cos(x). (%i35) kill(f,x,y)$ f(x,y):= sin(x) + cos(y); wxplot3d(f(x,y), [x,-5,5], [y,-5,5])$ Para que Maxima reconozca el directorio local de trabajo (lo que es conveniente para importar y exportar ficheros) es conveniente definir la variable file_search_maxima. En este ejemplo (con Linux) el directorio de búsqueda es /home/renato/. La forma más sencilla de definirlo es mediante la opción Añadir a ruta en la pestaña Maxima del menú del programa: (%i38) file_search_maxima : cons(sconcat( "/home/renato/###.{lisp,mac,mc}"), file_search_maxima)$ Figura 3: Fijando el directorio de trabajo con wxmaxima Otra opción muy útil de Máxima es la de exportar los gráficos como ficheros eps (postcript encapsulado) o png. En el primer caso podemos usar la orden
SLUD 2006. Resolver problemas con Máxima In memoriam William Schelter
SLUD 2006 Resolver problemas con Máxima In memoriam William Schelter Robert Dodier Proyecto Máxima Libero este documento por el GNU General Public License version 2 Características generales de Máxima
MATEMÁTICA TICA SUPERIOR APLICADA. para Ecuaciones Diferenciales Ordinarias. Universidad Tecnológica Nacional Facultad Regional Rosario
MATEMÁTICA TICA SUPERIOR APLICADA Utilización n de Resolvedores de MATLAB para Ecuaciones Diferenciales Ordinarias Universidad Tecnológica Nacional Facultad Regional Rosario Dr. Alejandro S. M. Santa Cruz
Breve Tutorial sobre el Graficador GNUPlot Como iniciar el GNUPlot: El programa para graficar datos científicos Gnuplot (standard en cualquier distribución Linux) se inicia desde cualquier ventana terminal
Capítulo 3: Derivación de funciones
Capítulo 3: Derivación de funciones 1. Lección 10. Derivada de una función 1.1. Derivada de una función en un punto Sea y = f(x) una función con dominio D. A partir de ella, podemos definir una nueva función

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución