Maxima: una herramienta de c´lculo a

Universidad de C´diz - Diciembre, 2006 a
Mario Rodr´ ıguez Riotorto
mario@edu.xunta.es

1

Copyright c 2006 Mario Rodriguez Riotorto Este documento es libre; se puede redistribuir y/o modificar bajo los t´rminos de la e GNU General Public License tal como lo publica la Free Software Foundation. Para m´s a detalles v´ase la GNU General Public License en http://www.gnu.org/copyleft/gpl.html e This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. See the GNU General Public License for more details at http://www.gnu.org/copyleft/gpl.html

´ Indice general
1. Generalidades 2. Despegando con Maxima 2.1. Instalaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.2. Entornos de ejecuci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.3. Tomando contacto con el programa . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Matem´ticas con Maxima a 3.1. N´meros . . . . . . . . . . . . u 3.2. Resoluci´n de ecuaciones . . . o 3.3. Patrones y reglas . . . . . . . 3.4. L´ ımites, derivadas e integrales 3.5. Vectores y campos . . . . . . 3.6. Ecuaciones diferenciales . . . 3.7. Probabilidades y estad´ ıstica . 3.8. Interpolaci´n num´rica . . . . o e 3 5 5 6 6 18 18 19 21 24 29 31 37 40 44 46 46 49 51

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

4. Maxima como herramienta pedag´gica o 5. Programaci´n o 5.1. Nivel Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Nivel Lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A. Ejemplos de programaci´n o

2

Cap´ ıtulo 1

Generalidades
Maxima es un programa de Matem´ticas escrito en Lisp. a Su nombre original fue Macsyma (MAC’s SYmbolic MAnipulation System, donde MAC, Machine Aided Cognition, era el nombre del Laboratory for Computer Science del MIT durante la fase inicial del proyecto Macsyma). Se desarroll´ en estos laboratorios entre los a˜os 1969 y 1982 o n con fondos aportados por varias agencias gubernamentales norteamericanas (National Aeronautics and Space Administration, Office of Naval Research, U.S. Department of Energy (DOE) y U.S. Air Force). El concepto y la organizaci´n interna del programa est´n basados en la tesis doctoral que Joel o a Moses elabor´ en el MIT sobre integraci´n simb´lica. Seg´n Marvin Minsky, director de esta tesis, o o o u Macsyma pretend´ automatizar las manipulaciones simb´licas que realizaban los matem´ticos, a ıa o a fin de entender la capacidad de los ordenadores para actuar de forma inteligente. El a˜o 1982 es clave. El MIT entrega Macsyma al DOE y ´ste a la empresa Symbolics Inc. para n e su explotaci´n comercial, haciendo el c´digo propietario. Debido a la presi´n que la comunidad o o o cient´ ıfica ejerci´ sobre el MIT, ´ste edit´ otra versi´n recodificada ajena a la comercial, dando o e o o as´ nacimiento al denominado DOE-Macsyma. Esta pol´ ı ıtica del MIT con respecto a los proyectos basados en Lisp y Macsyma coincide con la salida de Richard Stallman de la instituci´n y la o posterior creaci´n de la Free Software Foundation. o A partir de 1982, William Schelter traduce DOE-Macsyma a Common Lisp. Parte de la comunidad cient´ ıfica podr´ utilizarlo, pero no tendr´ derechos de redistribuci´n. Es la ´poca en la a a o e que aparecen en el mercado Maple y Mathematica. La versi´n comercial apenas se desarrolla, es o superada por estos dos programas y deja de desarrollarse en 1999. En 1998 Schelter obtiene permiso del Departamento de Energ´ para distribuir Maxima (as´ llaıa ı mado ahora para diferenciarlo de la versi´n comercial) bajo la licencia GPL (General Public Lio cense) de la Free Software Foundation. En el a˜o 2000 Maxima pasa a ser un proyecto hospedado n en Sourceforge y en el 2001 fallece Schelter. Actualmente el proyecto se mantiene con el trabajo voluntario de un equipo internacional de 23 personas. Toda la informaci´n relevante del proyecto est´ disponible en la URL o a http://maxima.sourceforge.net desde donde se puede descargar la documentaci´n y los ficheros de instalaci´n. La v´ m´s directa o o ıa a y r´pida de tomar contacto con el equipo de desarrollo es a trav´s de la lista de correo a e http://maxima.sourceforge.net/maximalist.html Adem´s, desde mediados de septiembre de 2006, se ha activado una lista de correos para usuarios a de habla hispana en 3

CAP´ ITULO 1. GENERALIDADES

4

http://sourceforge.net/mailarchive/forum.php?forum id=50322 Uno de los aspectos m´s relevantes de este programa es su naturaleza libre; la licencia GPL en a la que se distribuye brinda al usuario ciertas libertades: libertad para utilizarlo, libertad para modificarlo y adaptarlo a sus propias necesidades, libertad para distribuirlo, libertad para estudiarlo y aprender su funcionamiento. La gratuidad del programa, junto con las libertades reci´n mencionadas, hacen de Maxima una e formidable herramienta pedag´gica, accesible a todos los presupuestos, tanto institucionales como o individuales.

u Las siguientes indicaciones hacen referencia al sistema operativo Linux./bootstrap .Cap´ ıtulo 2 Despegando con Maxima 2./configure --enable-clisp --enable-lang-es-utf8 make make check sudo make install make clean 3. Linux y Mac-OS. Grosso o modo. a o 5 . Acceder a la carpeta local de nombre maxima y ejecutar las instrucciones . la mayor´ de las distribuciones tienen ficheros precompilados con las extensiones ıa rpm o deb. ser´ necesario descargar los a ficheros fuente completos del CVS de Sourceforge y proceder posteriormente a su compilaci´n. Si se quiere instalar Maxima en su estado actual de desarrollo. siendo la codificaci´n del sistema unicode.1. cmucl. teclear a o xmaxima 1 Se supone que se trabajar´ con clisp. En Windows. incluidas las dependencias tcl-tk y gnuplot. as´ como todos los programas que permitan ejecutar las a ı instrucciones que se indican a continuaci´n. la instalaci´n consiste en descargar el binario exe desde el enlace correspondiente o en la p´gina del proyecto y ejecutarlo. a 2. los pasos a seguir son los siguientes1 : 1. Descargar las fuentes a un directorio local siguiendo las instrucciones que se indican en el enlace al CVS de la p´gina del proyecto. sbcl y gcl son a a todas ellas alternativas libres v´lidas). Instalaci´n o Maxima funciona en Windows. Se o deber´ tener operativo un entorno Common Lisp en la m´quina (clisp. seg´n el caso. Para ejecutar Maxima desde la l´ ınea de comandos escribir maxima si se quiere trabajar con la interfaz gr´fica (ver secci´n siguiente). a En Linux.

(%o1) (%i2) . y otro basado en el entorno gr´fico tcl-tk.9. se podr´ instalar este entorno separadamente2 . (%i1) diff(1-exp(-k*x). Figura 2.net . N´tese que tras la respuesta.CAP´ ITULO 2. es la de ejecutar Maxima desde el editor Texmacs3 . que a´n no siendo parte del proyecto Maxima. que resulta muy vistosa por hacer uso de TEX. uno basado en texto. etiquetando este resultado con (%o1) (o de output). (%i1) donde el s´ ımbolo (%i1) nos indica que Maxima est´ esperando la primera entrada del usuario a (i de input).org 2 %pi 2 http://wxmaxima. una vez instalado Maxima. Adem´s de los citados. En Linux. El a a c´digo que se muestra est´ copiado y pegado del entorno de texto. Ahora se puede escribir una instrucci´n y terminarla con un punto y coma (. a Una cuarta alternativa. se dispone o de dos entornos de ejecuci´n.) para o que el programa la ejecute. Tomando contacto con el programa En esta sesi´n se intenta realizar un primer acercamiento al programa a fin de familiarizarse o con el estilo operativo de Maxima. 2. se nos presenta una cabecera: o Maxima 5.net Using Lisp CLISP () Distributed under the GNU Public License.texmacs. Figura 2. DESPEGANDO CON MAXIMA 6 2. ejecut´ndose desde la l´ o a ınea de comandos. This is a development version of Maxima. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. dejando sus habilidades matem´ticas para m´s adelante. (%o2) (%i3) float(%). de igual forma que %pi representa al n´mero π. Ambos son partes constituyentes a del programa Maxima. 3 http://www. o (%i2) %pi + %pi.sourceforge. una vez instalado Maxima. por ejemplo.sourceforge. Entornos de ejecuci´n o Como queda comentado al final de la secci´n anterior.x). Otro entorno gr´fico es Wxmaxima. Figura 2. a u se distribuye conjuntamente con el ejecutable para Windows.1cvs http://maxima. la etiqueta (%i2) nos indica que Maxima u o espera una segunda instrucci´n. o Continuando con la sesi´n. o a Una vez iniciada la ejecuci´n del programa.3.k x k %e donde le pedimos la derivada de la funci´n y = 1 − exp(−kx) respecto de x.1. Figura 2. a lo que Maxima o responde con ke−kx .3.2.4. se puede acceder a ellos a trav´s del enlace Related Projects de la p´gina web e a de Maxima. en los ultimos tiempos han aparecido varios proyectos de entornos a ´ basados en la web.3. See the file COPYING. El s´ ımbolo %e es la forma que tiene Maxima de representar a la base de los logaritmos naturales.2.

DESPEGANDO CON MAXIMA 7 Figura 2.1: Maxima desde la l´ ınea de comandos.CAP´ ITULO 2. .

CAP´ ITULO 2. el entorno gr´fico de tcl-tk. DESPEGANDO CON MAXIMA 8 Figura 2.2: Xmaxima. a .

DESPEGANDO CON MAXIMA 9 Figura 2.3: Wxmaxima. el entorno gr´fico basado en wxwidgets. a .CAP´ ITULO 2.

.4: Maxima desde Texmacs. DESPEGANDO CON MAXIMA 10 Figura 2.CAP´ ITULO 2.

1 8 (%o8) [. ´ as´ en la entrada n´mero tres se solicita que el ultimo resultado se devuelva en formato decimal ı. [a. b].3] este quinto o e elemento de la lista es sustitu´ sucesivamente por estas tres cantidades. a=c. igualando u a la lista [1. u=2. (-1)^3. Maxima utiliza los dos ıdo . por lo que ya se puede intuir su potencia a la hora de trabajar a con listas.2. [c. las cuales devuelve en forma simb´lica. cuando se utiliza aislado. -. [u=2. u=[1. en el siguiente di´logo. de modo que %o4[5] es el quinto elemento de esta lista. .1. b].1. -. El s´ o ımbolo %.1. lo que puede utilizarse para la evaluaci´n num´rica de expresiones: o o e (%i7) /* Sustituciones a hacer en x */ xx. */ /* eliminando redundancias. -. el texto escrito entre las marcas /* e */ son comentarios que a no afectan a los c´lculos. 4/16. 1 8 (%o7) [. . tambi´n se puede hacer referencia a ´ e una salida o entrada arbitraria. -] 4 3 (%i8) /* Forma alternativa para hacer lo mismo */ xx. tal como muestra el siguiente ejemplo.1.1. b]. que es ´ la lista guardada en la variable xx. representa la ultima respuesta dada por Maxima.1. [a. --} 4 3 De la misma manera que % representa al ultimo resultado. 3 1 u (%o6) {.1. adem´s se observa c´mo se hace una asignaci´n con el operador de dos a a o o puntos (:) a la variable xx. .u)]. -. --] 4 3 (%i5) /* Se calcula el n´mero de elementos del ´ltimo resultado */ u u length(%). Maxima est´ escrito en Lisp. -. donde tambi´n se observa e c´mo hacer sustituciones. Los */ /* corchetes se transforman en llaves */ setify(xx). [c.2. u ´ de coma flotante. despu´s. (%i4) /* Se le asigna a la variable x una lista */ xx: [cos(%pi). 3 1 u (%o4) [.3]. a=c]. (%o5) 5 (%i6) /* Se transforma una lista en conjunto. DESPEGANDO CON MAXIMA 11 (%o3) 6. 1 8 (%o9) [-.283185307179586 Maxima hace simplificaciones algebraicas. [a. 9] 3 3 En esta ultima entrada. por lo que esta expresi´n es equivalente a a xx[5]. integrate(u^2.CAP´ ITULO 2. -] 4 3 (%i9) %o4[5]. b]. %o4 hace referencia al cuarto resultado devuelto por Maxima. como π + π = 2π. b].

2]. false .[0. o El final de cada instrucci´n debe terminar con un punto y coma (. lo que indica que Maxima evitar´ dar resultados en o a formato decimal. mientras que el s´ ımbolo de igualdad se reserva para la construcci´n de ecuaciones. (%o17) (%i18) numer:false$ .2].0.%pi]. prefiriendo expresiones racionales: (%i14) numer. [ sin(x) 2 %pi ] [ ] (%o19) [ 2 5 ] [ 0 y .5 %pi 2 sin(x) + --.CAP´ ITULO 2. [ 1 2 ] [ ] [ 0 2 ] (%o20) [ ] [ 1 ] [ .2357022603955159 /*se reinstaura valor por defecto */ Las matrices tambi´n tienen su lugar en Maxima.B. la manera m´s inmediata de construirlas es e a con la instrucci´n matrix: o (%i19) A: matrix([sin(x). en el primer caso. (%o11) (%i12) b: 6+6$ (%i13) 2*b.] [ 8 ] (%i20) B: matrix([1.2. que por defecto toma el valor l´gico false.integrate(x^2.) o con un s´ o ımbolo de d´lar o ($). (%o14) (%i15) sqrt(8)/12.[-5.[0. Una de ellas es la variable numer.1/2 2 -----3 (%o15) (%i16) numer:true$ (%i17) sqrt(8)/12. /* producto matricial */ [ %pi ] [ sin(x) . En la a entrada %i12 se opt´ por el $ para evitar una l´ o ınea adicional que no interesa ver: (%i11) a: 2+2.1)]). Maxima muestra el resultado del c´lculo y en el segundo lo oculta.5/8]).] [ 3 ] (%i21) A.y^2. (%o13) 4 24 Un aspecto a tener en cuenta es que el comportamiento de Maxima est´ controlado por los a valores que se le asignen a ciertas variables globales del sistema.x.5 . DESPEGANDO CON MAXIMA 12 puntos (:) para hacer asignaciones a variables.+ 4 ] [ 3 ] (%o21) [ ] [ 25 2 5 ] .

2) = integrate(sqrt(2+x)/x^5.[x.[nticks.-2. que permite m´s libertad a la e a hora de programar gr´ficos. Los gr´ficos de la Figura 2. ya se ha visto c´mo se pueden generar archivos o A gr´ficos en calidad Postscript.5.5 fueron creados con gnuplot en formato ı a eps.[’grid.-1.01.x.[t.[gnuplot preamble. Maxima hace uso por defecto del programa externo gnuplot.[x.[y.x. DESPEGANDO CON MAXIMA 13 [ [ .CAP´ ITULO 2.7*sin(x)].1+x. 2 / [ sqrt(x + 2) (%o36) I ----------.%pi]. [x.1])$ plot3d([cos(x)*(3+y*cos(x/2)).15])$ /* Un par de ejemplos de estad´stica descriptiva */ ı load(descriptive)$ load (numericalio)$ s2 : read_matrix (file_search ("wind.[u.1.0])$ plot3d([cos(t).5]. sin(x)*(3+y*cos(x/2)).outputdev="eps")$ dataplot(s2. en particular.-8 2 y + -24 ] ] En cuanto a gr´ficos. Las siguiena tes instrucciones generan diferentes tipos de gr´ficos.1.-%pi.%pi].0.2]. lo que puede llegar a ser embarazoso para el usuario medio.”set terminal postscript eps.-2. si se quiere redactar publicaciones en formato L TEX.2 sqrt(2) sqrt(3)) + 548 sqrt(3) -------------------------------------------------2048 4 Reconozco que aqu´ hay algo de trampa.dx = ] 5 / x 1 5 sqrt(2) log(5 .t. tales direca trices se deben hacer en el lenguaje de scripts de gnuplot.50.500])$ plot3d(exp(-x^2-y^2).5])$ plot2d([-x^2.set out ’grafico1. a o ´ est´ recobrando nuevos br´ en la actualidad. Maxima utiliza tambi´n el entorno tcl-tk. la funci´n tex a o de Maxima ser´ una util compa˜era. el primer fichero n o gr´fico se generar´ con el c´digo a ıa o plot2d(exp(-x**2). cuyas reproducciones4 se pueden ver en la a Figura 2. o a A fin de preparar publicaciones cient´ ıficas. en el siguiente ejemplo se calcula una integral y a continuaci´n a ´ n o se pide la expresi´n resultante en formato TEX: o (%i36) ’integrate(sqrt(a+x)/x^5. (%i22) (%i23) (%i24) (%i25) (%i26) (%i27) plot2d(exp(-x^2).1]. Ninguna de estas dos soluciones es completamente a ıos satisfactoria en su estado actual. para lo cual hubo que a˜ adir cierto c´digo a las sentencias que se describen.eps’”]) . ordenadas de izquierda a derecha y de arriba hacia abajo.sin(t).5])$ plot2d([parametric.-%pi.0.-2.2*t]. aunque esta alternativa estuvo en hibernaci´n en los ultimos tiempos.[y.outputdev="eps")$ (%i28) (%i30) (%i31) (%i32) Gnuplot es un programa gr´fico muy potente.[x.-2.t*sin(1/t). sin embargo.[t.[x. pero est´ claro que antes o despu´s habr´ que tomar algunas a e a decisiones sobre c´mo generar todo tipo de gr´ficos desde Maxima.2]].0.data"))$ boxplot(s2.2). la forma que se tiene de aprovechar sus capacia dades desde Maxima consiste en escribir dentro del apartado gnuplot_preamble (ver ejemplo a pie de p´gina) todas las directrices que el usuario considere oportunas.-2.y*sin(x/2)].

1 -2 -0.8 0 -4 -3 -2 -1 0 1 2 3 4 -4 -3 -2 -1 0 1 2 30 20 18 16 14 12 10 8 6 4 2 25 20 15 10 5 0 -5 22 20 18 16 14 12 10 8 6 4 2 0 35 30 25 20 15 10 5 0 30 25 20 15 10 5 0 25 02468 121620 101418 25 20 15 10 5 0 -5 25 20 15 10 5 0 22 20 18 16 14 12 10 8 6 4 2 0 35 30 25 20 15 10 5 0 30 25 20 15 10 5 0 -5 0 510 20 15 25 25 20 15 10 5 0 -5 25 20 15 10 5 0 -5 20 18 16 14 12 10 8 6 4 35 30 25 20 15 10 5 0 30 25 20 15 10 5 0 02468 121620 10141822 25 20 15 10 5 0 -5 25 20 15 10 5 0 -5 22 20 18 16 14 12 10 8 6 4 2 0 16 14 12 10 8 6 4 2 30 25 20 15 10 5 0 0 510 20 30 15 25 35 25 20 15 10 5 0 -5 25 20 15 10 5 0 -5 22 20 18 16 14 12 10 8 6 4 2 0 35 30 25 20 15 10 5 0 25 20 15 10 5 0 0 510 20 30 15 25 20 -5 0 510 20 15 25 02468 121620 10141822 02468 121620 10141822 0 510 20 30 15 25 35 0 510 20 30 15 25 15 y -5 0 510 20 15 25 -5 0 510 20 15 25 2468 121620 101418 0 510 20 30 15 25 35 0 510 20 30 15 25 10 5 -5 0 510 20 15 25 -5 0 510 20 15 25 02468 121620 10141822 5 1015202530 0 510 20 30 15 25 0 1 2 3 sample 4 5 6 -5 0 510 20 15 25 -5 0 510 20 15 25 02468 121620 10141822 0 510 20 30 15 25 35 5 1015202530 Figura 2.5 0 0.5 0 0.2 -20 0.22 [cos(t).1 0 -25 -10 0 -5 -15 -2 -1 0 1 2 3 4 t.8 -0.5 1 1.6 0.1 0.2 1 1 0.4 0.2 -0.9 0.2 0.5 0 -0.8 0 -0. sin(1/t)*t 5 -2 -1 0 1 2 3 4 5 0.16 0.8 0.6 -0.06 0.14 0.4 -0.4 -1.18 0.04 0.15 -1.05 1 0.2 0 0.2 0.02 0.5 -1 -1 -0.7 0.2*t] Function 8 6 4 2 0 -2 -4 -6 -8 0.1 0.3 0.2 -0.8 0.5 0.6 0.5 0.9 %e^-x^2 10 -x^2 x+1 7*sin(x) 5 0.sin(t).4 0.05 0 -0.6 -1.6 -0.5 1 -1 -0.6 0.5 2 -2 -1.4 -0. o .CAP´ ITULO 2.5 -1 3 4 -1 -0.7 0. DESPEGANDO CON MAXIMA 14 1 0.15 %e^(-y^2-x^2) 0.08 0.3 0.8 0.12 0.2 -1.5: Ejemplos de la interacci´n entre Maxima y gnuplot.1 0 -0.4 0.

dando lugar a la igualdad que se obtiene como resultado final. podr´ hacer uso de la funci´n save: a o (%i41) save("sesion". (%o39) (%i40) z.\sqrt{2}\. es necesario ıa ponerle uno.\sqrt{3}}\over{2048}}-{{15 \.\sqrt{3}\right)+548\.----------------------------------6144 (%i37) tex(%).(tan(x))) dx d -.2 sqrt(2)) + 244 . z. pero s´ la segunda. ı Puede darse el caso de que llegue el momento en el que el usuario decida evaluar una expresi´n o que previamente marc´ con el operador comilla (tales expresiones reciben en Maxima el apelativo o de nominales).\sqrt{2}\. Obs´rvese que en primer lugar se escribe el nombre del fichero y a continuaci´n los nombres de e o las variables a almacenar.dx}={{5\.\sqrt{2}\right)+244}\over{6144}}$$ A Al pegar y copiar el c´digo encerrado entre los dobles s´ o ımbolos de d´lar a un documento L TEX. (%o38) (%i39) z+z. DESPEGANDO CON MAXIMA 15 15 sqrt(2) log(3 .CAP´ ITULO 2. $$\int_{1}^{2}{{{\sqrt{x+2}}\over{x^5}}\. La ultima instrucci´n es la que termina la ejecuci´n del programa.\sqrt{2}\. el siguiente ejemplo muestra el uso del s´ ımbolo especial nouns. Se observa en ella que se ha escrito dos veces el mismo c´digo a ambos lados del signo de igualdad. (%o41) sesion (%i42) quit(). nouns. vz=%o40). se cargar´ el fichero sesion con la funci´n load: o a o (%i1) load("sesion"). (%o40) 2 sec (x) d 2 (-. La unica diferencia entre ambos es el ap´strofo que o ´ o antecede al primer integrate. (%i38) z: ’diff(tan(x). (%o1) (%i2) z. ´ste es un operador (llamado de comilla simple) que Maxima utiliza e para evitar la ejecuci´n de una instrucci´n. d sesion . de forma que en el resultado la primera integral no se o o calcula. a o a a Si se quiere almacenar la expresi´n guardada en z. como el valor de z no se hab´ asignado a ninguna variable. junto con el resultado de su evaluaci´n (salida o o %o40).\log \left(5-2\.\log \left(3-2\. ´ o o Una vez iniciada una nueva sesi´n. o el resultado es el siguiente: √ √ √ √ √ √ 2 √ 5 2 log 5 − 2 2 3 + 548 3 15 2 log 3 − 2 2 + 244 x+2 dx = − x5 2048 6144 1 Un comentario sobre la entrada %i36. en este caso vz. por lo que le interesar´ guardar aquellas partes de la sesi´n actual que necesitar´ m´s adelante.(tan(x)) dx Es posible que el usuario necesite trabajar sobre un mismo problema durante varias sesiones.x).

el usuario tan s´lo e o tendr´ que buscar esta carpeta. o Algunos usuarios encuentran engorroso que la ayuda se interfiera con los c´lculos. 9: idiff :Definiciones para itensor.Funci´n: diff (<expr>. en la que se encontrar´ la p´gina principal maxima. 12: ratdiff :Definiciones para Polinomios. 11: poisdiff :Definiciones para las Funciones Especiales.CAP´ ITULO 2.]) o Se trata de la funci´n de Maxima para la diferenciaci´n. DESPEGANDO CON MAXIMA 16 (%o2) (%i3) vz. <v_1>. esto se puede a arreglar con un m´ ınimo de bricolage inform´tico. . 16: undiff :Definiciones para itensor. Maxima nos muestra una lista con todas las funciones y variables que contienen la cadena diff. la cual admite como o . una vez seleccionada la que nos interesa (5). Esto permite que la derivaci´n o se pueda realizar con respecto del <v_i>-´simo miembro de la lista e ‘vect_coords’. <n_2>] .html. 4: covdiff :Definiciones para itensor. respecto de <v_2> <n_2> veces. o 3: AntiDifference :Definiciones para zeilberger. En primer lugar. Enter space-separated numbers. o 7: evundiff :Definiciones para itensor.la funci´n ha sido o modificada de manera que <v_i> puedan ser enteros desde 1 hasta el valor que tome la variable ‘dim’. Para el paquete de tensores. 8: extdiff :Definiciones para itensor. Al tiempo que se instala Maxima. 1: Definiciones para impdiff. haciendo uso de la funci´n describe. 15: symmdifference :Definiciones para los conjuntos. Calcula la derivada de <expr> respecto de <v_1> <n_1> veces.info)impdiff. del a o operador ?: (%i4) ? diff 0: (maxima. [<v_2>. 13: rediff :Definiciones para itensor. (%o3) -. o equivalentemente. se almacena a tambi´n el sistema de ayuda en formato html en una determinada carpeta. y otras que ir´n apareciendo. 5: diff <1> :Definiciones para itensor.(tan(x)) dx 2 sec (x) Se puede acceder a la ayuda relativa a cualquiera de las funciones que han aparecido hasta ahora. 6: diff :Definiciones para Diferenciaci´n. como ‘x[1]’. [<n_1>. 10: liediff :Definiciones para itensor. 2: antidiff :Definiciones para Diferenciaci´n. ‘x[2]’. o entonces esa variable ser´ la que se utilice en la derivaci´n.. se lee la informaci´n correspondiente. ampliada o o para las necesidades del paquete ‘itensor’.. y hacer a a a uso de la funci´n system de Maxima que ejecuta comandos del sistema. ‘all’ or ‘none’: 5 -... 14: setdifference :Definiciones para los conjuntos. Con a o esto se hace posible la utilizaci´n de una lista con nombres de o coordenadas subindicadas. etc. Si ‘vect_coords’ guarda una variable at´mica.

DESPEGANDO CON MAXIMA 17 argumento una cadena alfanum´rica con el nombre del navegador (en el ejemplo. . a del programa.9. se abrir´ el navegador con el manual de referencia ı.html. mozilla) seguido e de la ruta hacia el documento maxima.html")$ Este proceso se puede automatizar si la instrucci´n anterior se guarda en un fichero de nombre o maxima-init.3/doc/html/es/maxima.mac y se guarda en una carpeta oculta de nombre .CAP´ ITULO 2. (%i5) system("mozilla /usr/local/share/maxima/5. As´ cada vez que arranque Maxima.maxima en el directorio principal del usuario.

(%o6) . (%i5) fpprec: 200$ bfloat(zz). ı (%i3) zz: (3/12-3 *8/5)^-5 .5. (%o1) 788657867364790503552363213932185062295135977687173263294742\ 533244359449963403342920304284011984623904177212138919638830257642\ 790242637105061926624952829931113462857270763317237396988943922445\ 621451664240254033291864131227428294853277524242407573903240321257\ 405579568660226031904170324062351700858796178922222789623703897374\ 720000000000000000000000000000000000000000000000000 (%i2) factor(%). para lo cual se a o u indica en primer lugar la precisi´n deseada con la variable global fpprec y se hace la transformaci´n o o con bfloat. no transforma las fracciones a su forma decimal.---------6240321451 La expresi´n decimal de un n´mero racional se puede obtener con una llamada a la funci´n o u o float. /* factoriza el resultado anterior */ 197 97 49 32 19 16 11 10 8 6 6 5 4 4 (%o2) 2 3 5 7 11 13 17 19 23 29 31 37 41 43 4 3 3 3 2 2 2 2 2 2 2 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 Por defecto.5. u o (%i4) float(%). u (%i1) 200!. aunque s´ las simplifica.12794096446298596293256880814488029168034600338090820571\ 736601714365755675235967904307883385669518132648516346437807887855\ 18 . se puede recurrir a los n´meros decimales grandes.1.127940964462986E-4 Si se quiere m´s precisi´n. N´ meros u Maxima puede trabajar con n´meros enteros tan grandes como sea necesario. que devuelve el resultado como un n´mero de coma flotante de doble precisi´n. (%o3) 3200000 . (%o4) .Cap´ ıtulo 3 Matem´ticas con Maxima a 3.

MATEMATICAS CON MAXIMA 19 230937205128922131867273899509251418529208712713155391584330100241\ 17746366396b-4 Los n´meros complejos se construyen haciendo uso de la constante imaginaria %i. en la segunda lista se colocan los nombres de las inc´gnitas. u (%i7) z1: 3+4*%i. 3. /* forma cartesiana */ 7 %pi 7 %pi %i (sin(-----) + 4) + cos(-----) + 3 8 8 polarform(%). (%o9) (%i10) (%o10) (%i11) (%o11) 7 %i %pi -------8 %e + 4 %i + 3 rectform(%). en las que si se omite la igualdad o se interpretan como igualadas a cero. Resoluci´n de ecuaciones o La funci´n algsys resuelve sistemas de ecuaciones algebraicas.84955567695155 (%i12) abs(%). Admite como argumentos dos o listas. en la primera se escribe la ecuaci´n o ecuaciones del sistema. o Veamos algunos ejemplos: Ecuaci´n polin´mica de tercer grado o o 4x3 − 2x2 + 5x − 7 = 0 . (%o7) (%i8) z2: exp(7*%pi/8*%i).´ CAP´ ITULO 3. 4 %i + 3 7 %i %pi -------8 %e (%o8) (%i9) z1+z2. /* m´dulo en formato decimal */ o (%o13) 4.2. /* forma polar */ 7 %pi 2 7 %pi 2 sqrt((sin(-----) + 4) + (cos(-----) + 3) ) 8 8 7 %pi sin(-----) + 4 8 %i atan(--------------) 7 %pi cos(-----) + 3 8 %e /* m´dulo */ o 2 7 %pi 7 %pi 2 7 %pi 7 %pi (%o12) sqrt(sin (-----) + 8 sin(-----) + cos (-----) + 6 cos(-----) 8 8 8 8 + 25) (%i13) float(%).

9 sqrt(3) sqrt(5) sqrt(17) . recurre a m´todos de e aproximaci´n num´rica. 3 sqrt(3) %i . 2 sqrt(255) .(2+%i)/(u+t)=3*v+u.-------------. t = .---------------------------.t/u=1].´ CAP´ ITULO 3. y = 2 sqrt(3) sqrt(5) sqrt(17) + 27 . [x = .--------------------]] sqrt(2) sqrt(a) sqrt(a + 6) sqrt(2) sqrt(a + 6) Cuando Maxima no es capaz de resolver el sistema algebraicamente. como en el caso de la ecuaci´n polin´mica o e o o x5 + x4 + x3 + x2 + x = 0 .----------------]. %i a 2 a sqrt(----.t]).[x. v = ---------------------------. [x = 1]] 4 4 Se piden las soluciones no complejas de la ecuaci´n anterior o (%i2) realonly: true$ (%i3) algsys([4*x^3-2*x^2+5*x -7].1 3 sqrt(3) %i + 1 (%o1) [[x = ----------------].[x]). [u = . sqrt(255) + 9 (%o5) [[x = . sqrt(2) sqrt(2) sqrt(a) sqrt(a + 6) %i a 2 a sqrt(----.[u.-------------------.x=y+9]. y = -----------------------------]] 2 2 Un sistema no lineal con coeficientes param´tricos y complejos e   3u − av = t 2+i = 3v + u u+t  t = 1 u (%i6) algsys([3*u-a*v=t.+ -----) sqrt(%i + 2) sqrt(a) a + 6 a + 6 t = --------------------].-----------------------------].y]).+ -----) a + 6 a + 6 2 sqrt(%i + 2) (%o6) [[u = -------------------.v. MATEMATICAS CON MAXIMA 20 (%i1) algsys([4*x^3-2*x^2+5*x -7=0]. sqrt(2) sqrt(a + 6) sqrt(2) 2 sqrt(%i + 2) sqrt(%i + 2) sqrt(a) v = .[x]).27 [x = -------------. (%o3) [[x = 1]] (%i4) realonly: false$ /* se restaura su valor por defecto */ Sistema no lineal 3 ∗ x2 − y 2 = 6 x = y+9 (%i5) algsys([3*x^2-y^2=6.

6]). cos(3).[1]).3. cos(2).2.9510565162951535 %i + .´ CAP´ ITULO 3. [x = . no as´ "-".4. 3.4.3090169943749475 . MATEMATICAS CON MAXIMA 21 (%i7) algsys([x^5+x^4+x^3+x^2+x].[x.2. -2]). (%o9) [[u = 1. (%o7) [[x = 0]. cos(4). cos(9).9. [x = . [x = .5877852522924731 %i . .1..9510565162951535 %i]. el primer argumento es una lista con la ecuaci´n o ecuaciones a o resolver.. 2*x^2-x*y-5*x+1]. el segundo argumento es la lista de variables y el ultimo el valor inicial a partir del cual se generar´ el algoritmo y cuya elecci´n determinar´ las ´ a o a diferentes soluciones del problema.9.756834008012769.779849592817897]] (%i11) mnewton([x+3*log(x)-y^2. sin necesidad o de haberla definido previamente.[u].3090169943749475]] M´s all´ de las ecuaciones algebraicas. que s´lo admite o ıa ı o un m´ximo de dos argumentos. y]..373478353409809. Maxima no dispone de algoritmos de resoluci´n simb´lia a o o ca.524964836379522]] En los anteriores ejemplos.8090169943749475]. convendr´ reparar en dos funciones que suelen ser de utilidad en a este contexto y que se relacionan con las listas. ı o o e Resoluci´n de la ecuaci´n o o 2uu − 5 = u (%i8) load("mnewton")$ /* carga el paquete correspondiente */ (%i9) mnewton([2*u^u-5]. y = 2. (%o2) [cos(7).4. [1. Antes de abordar este tema. las cuales se suponen igualadas a cero. las funciones a utilizar por map deben ser de un unico a ´ argumento. Patrones y reglas En un programa de c´lculo simb´lico. y]. por e o u ejemplo. ´ste no s´lo debe tener informaci´n sobre una funci´n u a o e o o o operaci´n a partir de su definici´n. que se utiliza para o o aplicar una funci´n a cada uno de los elementos de una lista.3.4. (%o1) 2 (%i2) map(cos. cos(6)] Obs´rvese que la funci´n a aplicar en apply debe ser tal que admita m´ltiples argumentos.3. sup´ngase o 1 que a cada elemento x de una lista se le quiere aplicar la funci´n f (x) = sin(x) + 2 .6]).[7.[x]). En tales casos se puede hacer uso de las funciones lambda. aunque s´ existe un m´dulo para la aplicaci´n del m´todo de Newton. la funci´n apply. y la funci´n map. 5]). (%o10) [[x = 3..70927556786144]] Y del sistema x + 3 log(x) − y 2 2x2 − xy − 5x + 1 = 0 = 0 (%i10) mnewton([x+3*log(x)-y^2. la funci´n suma "+" podr´ haberse utilizado sin problemas.5877852522924731 %i . [x = . [5. A veces se quiere utilizar en map una funci´n que no est´ definida y que no va a ser utilizada m´s o a a que en esta llamada a map. y = . Sin embargo. o (%i1) apply(min. que se utiliza para pasar como o argumentos de una funci´n a todos los elementos de una lista. sino que tambi´n habr´ propiedades y reglas de transformaci´n o o e a o de expresiones de las que un programa como Maxima debe tener noticia.[7. (%o11) [[x = 1.[x.8090169943749475]. 2*x^2-x*y-5*x+1]. cos(4).

y].y)/x).y]. siendo el segundo argumento una funci´n de o a o predicado1 que devolver´ true si el patr´n se cumple. true). Adem´s. true). 1 Se denominan as´ todas aquellas funciones que devuelven como resultado de su evaluaci´n true o false. y) otra funci´n. pero se lo podemos cambiar.y). o a (%i5) defrule (regla1. en el caso presente. H(x. y) -> ------x Aplicamos ahora la regla a las expresiones G(f. Nos planteamos ahora la siguiente situaci´n: necesitamos trabajar con una funci´n G(x. sin imponer restricciones a y. 1 1 1 1 (%o3) [sin(7) + -. Como se ve. integerp). o o independientemente de que est´ definida o no. (%o4) done En este caso. numberp. sin(3) + -. sabemos que es igual a la expresi´n H(x. queremos que la primera expresi´n sea sustitu´ por la o o ıda segunda y adem´s queremos tener bajo control estas sustituciones.´ CAP´ ITULO 3. y. sin(4) + -. sin(9) + -] 2 2 2 2 Como se ve. a la que llamaremos regla1. Antes de definir la regla de sustituci´n es necesario saber a qu´ patrones ser´ aplicable.regla1).2+k). G(x. 6). y) (%o5) regla1 : G(x. 6) Como se ve en este ultimo ejemplo. la funci´n lambda admite dos argumentos. se deber´ escribir matchdeclare ([x. los argumentos impares son variables o listas de variables y los pares las condiciones de los patrones.9]). escribir´ u ıamos matchdeclare (x. H(x.2+k). Si quisi´semos que la regla se aplicase e s´lo a n´meros enteros.6). H(4. La variable global o a maxapplydepth indica a Maxima hasta qu´ nivel puede bajar en la expresi´n para aplicar la regla. e o su valor por defecto es 10000. y) pueden tener cualquier forma: (%i4) matchdeclare ([x.3. la regla se aplica a todas las subexpresiones que contengan ´ a la funci´n G.y) en todo e o x su dominio. MATEMATICAS CON MAXIMA 22 (%i3) map(lambda([x]. H(f. las variables patr´n ser´n x e y. k + 2) 4 (%o7) ------------------H(4. sin(x) + 1/2). 2 + k) y G(G(4. ı o . siendo el segundo la expresi´n que indica qu´ se hace con o e los elementos de la lista anterior. el patr´n es unia o o versal y admite cualquier formato para estas variables. siendo H(x.regla1). apply1 aplica la regla desde fuera hacia adentro. Todo ello se consigue trabajando a con patrones y reglas. Se define ahora la regla de sustituci´n indicada m´s arriba. (%i6) apply1(G(f.4. si quisi´semos que o u ıa e la regla se aplicase siempre que x sea un n´mero. 6) 4 H(-------.[7. 2 + k). y) que. el primero es una lista (no se puede o evitar la redundancia) de argumentos. k + 2) (%o6) ----------f (%i7) apply1(G(G(4. para o e a lo cual admitiremos que los argumentos de G(x.

+ xn ) = F (x1 ) + F (x2 ) + . MATEMATICAS CON MAXIMA 23 (%i8) maxapplydepth. . 6) Quiz´s sea nuestro deseo realizar la sustituci´n desde dentro hacia fuera.2+k).´ CAP´ ITULO 3. applyb1 y maxapplyheight son las claves ahora. args(z))) + apply("*".v):= u^v+1.2+k). 6). H(4. xn y que queremos definir una regla que realice esta transformaci´n. . 4097 (%o14) G(----.6). sumando despu´s estos o e resultados con la funci´n apply. controlando tambi´n a o e a qu´ niveles se aplica. (%o11) 1 (%i12) applyb1(G(G(4. necesitamos una funci´n de predicado que defina este o patr´n. .map(F. k + 2) (%o10) ----------------G(4. (%o8) 10000 (%i9) maxapplydepth:1. le indicamos a Maxima que cada vez que se encuentre o con la funci´n F y que ´sta tenga como argumento una suma.regla1).esunasuma)$ En la definici´n de la nueva regla. v (%o13) H(u. (%i17) defrule(regla2. args(z)) aplica la funci´n a cada uno de los sumandos de z. (%o9) 1 (%i10) apply1(G(G(4. Puesto que la regla se aplicar´ s´lo o a o cuando el argumento de F sea un sumando.2+k). k + 2) 4 Continuemos esta exposici´n con un ejemplo algo m´s sofisticado. args(z))). . apply("+". k + 2) 4 Obs´rvese que hemos estado controlando el comportamiento de las funciones G y H sin haberlas e definido expl´ ıcitamente. v) := u + 1 (%i14) applyb1(G(G(4. F(z). o (%i15) esunasuma(expr):= not atom(expr) and op(expr)="+" $ (%i16) matchdeclare(z. la transforme seg´n se indica: o e u map(F. o . + F (xn ) + x1 x2 . Supongamos que cierta funo a ci´n F verifica la igualdad o F (x1 + x2 + . finalmente a este resultado se le suma el producto de los sumandos o de z. . (%i13) H(u. . args(z))) + apply(*. 6) (%o12) G(-------. map(F.6). (%o17) regla2 : F(z) -> apply(+.regla1). args(z)) Veamos unos cuantos resultados de la aplicaci´n de esta regla. H(G(4. e (%i11) maxapplyheight:1.6). pero nada nos impide hacerlo.regla1).

F(c) .x. A continuaci´n se declara una operaci´n de nombre "o" como o o infija (esto es. commutative). 4 5 + (F(4) + F(5)) simp:true$ /* restaura la simplificaci´n de Maxima */ o %o24. F(b) + a b + F(a) apply1(F(a+b). MATEMATICAS CON MAXIMA 24 (%i18) (%o18) (%i19) (%o19) (%i20) (%o20) (%i21) (%o21) (%i22) (%o22) (%i23) (%i24) (%o24) (%i25) (%i26) (%o26) apply1(F(a+b). el primero define reglas a aplicar antes de que Maxima aplique las suyas propias. o is(a o b = b o a). F(4) apply1(F(4+5). regla2) . regla2) .a c + F(b) + a b apply1(F(a+b+c). (%o1) 0 (%i2) limit((exp(x)-exp(-x))/(exp(x)+exp(-x)).´ CAP´ ITULO 3. hemos tenido que indicar expresamente a Maxima en qu´ momento e e debe aplicar una regla.inf). no ha sido necesario definir qu´ es lo que hace la nueva operaci´n con sus argumentos. pudiendo solicitar los l´ o ım laterales. Otro mecanismo de definici´n de reglas es el aportado por tellsimp y o tellsimpafter. N´tese que los s´ ım ım o ımboe +e los inf y minf representan a ∞ y −∞. respectivamente. obs´rvese que s´lo cuando e o la operaci´n se declara como conmutativa Maxima considera que a o b es lo mismo que b o a.x. a e o (%i27) (%o27) (%i28) (%o28) (%i29) (%o29) (%i30) (%o30) infix("o"). regla2). 1 ımites Algunos l´ ımites necesitan informaci´n adicional. e Otra funci´n util en estos contextos es declare. regla2). Los siguientes ejemplos sobre l´ ımites son autoexplicativos: (%i1) limit(1/sqrt(x). regla2). regla2). y el segundo para reglas que se aplican despu´s de las habituales de Maxima. que sus operandos se colocan a ambos lados del operador).1 1 Donde hemos calculado l´ x→∞ √x y l´ x→−∞ ex −e−x . o adem´s. done is(a o b = b o a).minf). false declare("o". regla2). F(5) + F(4) + 20 En los ejemplos reci´n vistos. x −x . L´ ımites. (%o2) . true 3. diff e integrate son las que nos interesan ahora. F(9) simp:false$ /* inhibe la simplificaci´n de Maxima */ o apply1(F(4+5). derivadas e integrales Las funciones limit.apply1(F(a+c).4. . como l´ x→1 x−1 . con la que se pueden declarar propiedades o ´ algebraicas a nuevos operadores. F(c) + a b c + F(b) + F(a) apply1(F(4).

x. y(u. 2 2 dy d z dx d z .plus).2). (%o5) minf El s´ ımbolo und hace referencia al t´rmino ing´s undefined.+ ------) x x log(a x) log(a x) log(x) 2 + x (. Sup´nganse que cierta variable e o z depende de otras dos x y y.´ CAP´ ITULO 3.v. v)] (%i11) diff(z. /* primera derivada */ log(a x) log(a x) log(x) (%o6) x (-------.+ ------) x x (%i7) diff(x^log(a*x). e e El c´lculo de derivadas requiere el concurso de la funci´n diff.x.z.x. las cuales a su vez dependen de u y v. a continuaci´n algunos ejemplos a o o (%i6) diff(x^log(a*x).y].1.x. y).[u.+ -. ϑx3 ϑy 5 ϑz 2 (%i9) diff(exp(x)*sin(y)*tan(z).3.log(a x) + log (x) . x(u. v).5. dy dz dx dz (%o11) -.1).minus). ϑyϑv o ϑuϑv .2 2 (%o8) x (log (a x) + 2 log(x) log(a x) 2 .-.-----.1).[x.1).y.1.-------. (%o10) [z(x. (%o3) und (%i4) limit(1/(x-1).v]).-dv dy dv dx (%i12) diff(z.y]. MATEMATICAS CON MAXIMA 25 (%i3) limit(1/(x-1). /* derivada segunda */ log(a x) log(a x) log(x) 2 (%o7) x (-------.x.y..v. /* ayudamos a Maxima a mejorar el resultado */ log(a x) . Veamos c´mo se aplica la o ϑz ϑz 2 ϑz 2 regla de la cadena para obtener ϑv .1. x 2 (%o9) 2 %e cos(y) sec (z) tan(z) Maxima tambi´n nos puede ayudar a la hora de aplicar la regla de la cadena en el c´lculo de e a derivadas de funciones vectoriales con variable tambi´n vectorial. ϑ10 (ex sin(y) tan(z)) = 2ex cos(y) sec2 (z) tan(z).x).log(x) + 2) Pedimos ahora a Maxima que nos calcule el siguiente resultado que implica derivadas parciales.[x.+ --) 2 2 2 x x x (%i8) factor(%).2). (%o4) inf (%i5) limit(1/(x-1). (%i10) depends(z.

MATEMATICAS CON MAXIMA 26 (%o12) -.+ 2 x = 2 x -.+ 2 y dx dx Cuando se solicita el c´lculo de una derivada sin especificar la variable respecto de la cual se a deriva.+ -. habr´ dia o a a ferenciales para todas.+ -. 2 dy d z (%o17) -. le declararemos una dependencia respecto de x. e (%i15) remove(x. y).(-.--. v)] (%i17) diff(z. (%o20) 2 x del(x) lo que se interpretar´ como 2xdx. (%i18) depends(y.v. En el siguiente ejemplo. (%i14) dependencies.----dv 2 dv dx dy dy (%i13) diff(z. v).y.-----) + ----.(-. (%o14) [z(x.1).v.--. y(u.+ -. para evitar que y sea considerada una constante. y). (%i20) diff(x^2).1. Maxima utilizar´ el s´ a ımbolo del para representar las diferenciales. Si en la expresi´n a derivar hay m´s de una variable. (%o15) done (%i16) dependencies.1.´ CAP´ ITULO 3.x). 2 dy dy (%o19) 3 y -.1).x)$ (%i19) diff(x^2+y^3=2*x*y. 2 2 dy . y(u. 2 2 2 dy dy d z dx d z d y dz (%o13) -. (%o16) [z(x.-du dv 2 dv dx dy du dv dx dx En cualquier momento podemos solicitarle a Maxima que nos recuerde el cuadro de dependencias.dependency). v)] Tambi´n podemos eliminar dependencias.-du dv 2 dv dx dy du dv dy dy 2 2 2 dx dx d z dy d z d x dz + -.--. x(u.--dv 2 dy Veamos c´mo deriva Maxima funciones definidas impl´ o ıcitamente. (%i21) diff(x^2+y^3=2*x*y).-----) + ----.u.

siguen algunos ejemplos o (%i26) integrate(cos(x)^3/sin(x)^4.2) + .[y.[x.12 x y + 8 y + 1 Las integrales definidas e indefinidas las controla la funci´n integrate. . Quitting.2]). (%i28) integrate(cos(x)^3/sin(x)^4. hagamos referencia al desarrollo de Taylor de tercer grado o de la funci´n o x ln x y= 2 x −1 en el entorno de x = 1. 2 (%o24)/T/ 1 + 8 y + 32 y + .2). (%i22) taylor((x*log(x))/(x^2-1). 2 + (12 y + 96 y + .-------..x).2]..384 x y + 320 y + 6 x y .-.3).+ -------.) (x .+ 12 3 12 3 A continuaci´n un ejemplo de desarrollo multivariante de la funci´n y = exp(x2 sin(xy)) alreo o dedor del punto (2. To debug this try debugmode(true). .1.x.+ 2 x) del(x) = dx dy 2 x del(y) + (2 x -.x.0. 0) hasta grado 2 respecto de cada variable.) (x . Finalmente.1 (%o26) ------------3 3 sin (x) (%i27) integrate(cos(x)^3/sin(x)^4. . (%i24) taylor(exp(x^2*sin(x*y)).1) (x . 1 1 1 1 . . 2 2 2 2 2 (%o25) 120 x y . 2 12 12 (%i23) expand(%).x. para acabar esta secci´n.0. 3 2 x x 5 x 1 (%o23) -.2. (%i25) expand(%).1) (%o22)/T/ .+ .+ 2 y) del(x) dx Recu´rdese que durante este c´lculo est´ todav´ activa la dependencia declarada en la entrada e a a ıa (%i18). .an error.1. .´ CAP´ ITULO 3. . 2 3 1 (x . Integral is divergent -. .1). MATEMATICAS CON MAXIMA 27 (%o21) 3 y del(y) + (3 y -.+ --. .2) 2 2 + (6 y + 120 y + . 2 3 sin (x) . .

747336298073747. la estimaci´n del error. un c´digo de error que ser´ cero si no surgieron problemas. .2. la regla heur´ o ıstica a seguir por el usuario es dar un n´mero tanto m´s alto cuanto m´s oscile la funci´n en el intervalo u a a o de integraci´n. el n´mero de veces que se tuvo que evaluar el integrando y.an error. nos ´ e pide informaci´n sobre el par´metro a.-----.27060206376023E-14.a. dispone de varias funciones. a utilizar o o e en intervalos no acotados.x. escrito inicialmente en Fortran y portado a Lisp para Maxima.x.2).1. (%o34) [. siempre queda el recurso de los m´todos num´rie e cos. (%o29) 1 1 1 1 .´ CAP´ ITULO 3. or zero? p.x.2.x. 5. El paquete quadpack.3). 31.2 positive. la segunda da un error debido a la o singularidad en x = 0. que debe ser un n´mero entero entre 1 y 6.--------sin(a) 3 sin(2) 3 3 sin (a) 3 sin (2) La primera integral indefinida no requiere explicaci´n.inf). (%i34) quad_qagi(x^(n/2-1)*exp(-x/2)/2^(n/2)*gamma(n/2). es el encargado de estos menesteres.+ --------sin(2) 3 sin(1) 3 3 sin (2) 3 sin (1) (%i29) integrate(cos(x)^3/sin(x)^4. o a La otra funci´n de integraci´n num´rica a la que hacemos referencia es quad_qagi.-----.+ --------. Quitting. la tercera es una integral definida y la ultima.--------.. 7 / [ sin(x) (%o30) I %e dx ] / 2 (%i31) /* Resolvemos num´ricamente */ e quad_qag(exp(sin(x)). El resultado que obtenemos es una lista con cuatro elementos: el valor aproximado o de la integral. 0] La funci´n quad_qag tiene un argumento extra. MATEMATICAS CON MAXIMA 28 (%o28) -----. Integral is divergent -. To debug this try debugmode(true).7). (%i30) /* El integrador simb´lico no puede con esta integral */ o integrate(exp(sin(x)).9097959895689501. pero nos detendremos tan s´lo en dos o de ellas.n).cdf_chi2(1. (%o31) [4. sea mayor que la unidad (Pr(χ2 > 1)). o a Cuando Maxima no puede resolver la integral. En el siguiente ejemplo se pretende calcular la probabilidad de que una variable aleatoria χ2 de n = 4 grados de libertad.inf). 165.numer. 1. siendo la primera la utilizada para integrales definidas en intervalos acotados...7.+ -----.913452127046495E-10. Is a . el o u cual hace referencia al algoritmo que la funci´n debe utilizar para la cuadratura. o u finalmente. negative.1. 4 (%i32) n:4$ (%i33) integrate(x^(n/2-1)*exp(-y/2)/2^(n/2)*gamma(n/2). siendo tambi´n definida. 0] (%i35) load(distrib)$ (%i36) 1 .x.

b. siendo el caso que con ellas se pueden realizar las operaciones de adici´n.3].3]+[a.2.x) .v^2)) else error("Mucho ojito: ". grad(psi).4/5]$ (%i7) modulo(xx-yy). c + 3] (%i2) s*[a. Sigue a continuaci´n una sesi´n de ejemplo sobre c´mo usarlo. producto por un n´mero y producto escalar de vectores. el estilo de o .c]. " no es un vector !!!!")$ (%i5) xx:[a. los vectores se introducen como simples listas.b.4. (%o2) [a s.-) + d + (c + 6) + (b . /* producto escalar */ (%o3) 3 c + 2 b + a El c´lculo del m´dulo de un vector se puede hacer mediante la definici´n previa de una funci´n a o o o al efecto: (%i4) modulo(v):= if listp(v) then sqrt(apply("+". 2 2 2 2 (%o11) grad (z + y . quad_qawc. o u (%i1) [1.5.[a. b s.4) + (a .3) ) 5 Los operadores diferenciales que son de uso com´n en el ´mbito de los campos vectoriales est´n u a a programados en el paquete vect.c].-6.0. z) = −x + y 2 + z 2 y ψ(x. b + 2. cuyas peculiaridades podr´ consultar el lector interesado en el manual de referencia.´ CAP´ ITULO 3. la cual se corresponde aceptablemente con la estimaci´n que hacen los algoritmos o del paquete de distribuciones de probabilidad (ver Secci´n 3. a 3.c.d. c s] (%i3) [1. Vectores y campos En Maxima.e]$ (%i6) yy:[3. quad_qawo y e quad_qaws. MATEMATICAS CON MAXIMA 29 (%o36) . v. z) = 4x + log(y 2 + z 2 ) y demostremos que sus l´ ıneas de nivel son ortogonales probando que φ · ψ = 0. y. (%i8) /* Se carga el paquete */ load(vect)$ (%i9) /* Se definen los campos escalares */ phi: y^2+z^2-x$ psi:log(y^2+z^2)+4*x$ (%i11) /* Calculamos el producto escalar de los gradientes */ grad(phi) . siendo el operador gradiente. La funci´n o o quad_qagi ha necesitado 165 evaluaciones del integrando para alcanzar una estimaci´n num´rica o e de la integral.2.7).b. lo que implica que debe ser cargado en memoria antes de ser utilizado.b. o Otras funciones de cuadratura num´rica son quad_qags. quad_qawf.9097959895689502 El integrador simb´lico falla emitiendo un mensaje sobre la divergencia de la integral. Maxima se limita a devolvernos la misma expresi´n que le introducimos. o o o Partamos de los campos escalares φ(x. y. (%o1) [a + 1. grad (log(z + y ) + 4 x) Como se ve. 4 2 2 2 2 2 (%o7) sqrt((e .c].

o e a e (%i12) express(%).(log(z + y ) + 4 x)) dz dz d 2 2 d 2 2 + (-. /* divergencia */ 2 y + x (%o9) div [x y. rotacional ( × F)y laplaciano ( 2 F) (%i8) F: [x*y. %e ] (%i13) express (%). 2 x z .(z + y ..-. y + x 2 y + x (%o14) [%e . d 2 d y + x d (%o10) -. 2 2 4 z 4 y (%o13) ------. MATEMATICAS CON MAXIMA 30 trabajo del paquete vect requiere el uso de dos funciones: express y ev.(x z) + -.4 2 2 2 2 z + y z + y (%i7) ratsimp(%).x)) (-.-. (%o7) 0 Al final. -.diff).x^2*z. . d 2 2 d 2 2 (%o12) (-.exp(x+y)]$ (%i9) div (F).+ ------.-. la primera para obtener la expresi´n anterior en t´rminos de derivadas y la segunda para forzar el c´lculo de ´stas.´ CAP´ ITULO 3. hemos tenido que ayudar un poco a Maxima para que terminase de reducir la ultima ´ expresi´n.(x y) . x z. diff).%e .(%e ) + -.(x y)] dx dy (%i14) ev (%.x)) (-.(x z). x z.(log(z + y ) + 4 x)) dy dy d 2 2 d 2 2 + (-.(%e ). dy dz dz dx d 2 d -.x)) (-. %e ] (%i10) express (%).(%e ) .(z + y .x] (%i15) laplacian (F).(z + y .(x y) dy dz dx (%i11) ev (%. o Sea ahora el campo vectorial definido por F = xyi + x2 zj − ex+y k y pid´mosle a Maxima que a calcule su divergencia. (%o11) y (%i12) curl (F).x .(log(z + y ) + 4 x)) dx dx (%i13) ev(%. diff). /* laplaciano */ . /* rotacional */ 2 y + x (%o12) curl [x y. ( · F).(x z) . d y + x d 2 d d y + x (%o13) [-.

a y .b x] 3. x z. y. debe verificarse que y = −3. (%o18) [a.1 (%o2) ------. y ) = 0. diff). donde y = dx . e o . Para la resoluci´n de esta ecuaci´n tan solo habr´ que hacer o o a (%i2) ode2(ec. z].1) -. b. %e ]) + --. (%o19) [b z . MATEMATICAS CON MAXIMA 31 2 y + x (%o15) laplacian [x y. Ecuaciones diferenciales Con Maxima se pueden resolver simb´licamente algunas ecuaciones diferenciales ordinarias de o primer y segundo orden mediante la instrucci´n ode2. %e ] (%i16) express (%). Por ultimo. Sup´ngase que se sabe que cuando x = 2.([x y. y + x (%o17) [0. el paquete vect o ´ incluye tambi´n la definici´n del producto vectorial.= %c .1) y = 0 dx siendo obligatorio el uso de la comilla simple (’) antes de diff al objeto de evitar el c´lculo de a la derivada. que por otro lado dar´ cero al no haberse declarado la variable y como dependiente ıa de x. 2 2 d 2 y + x d 2 y + x (%o16) --. 2 y . al cual le asigna el operador ~.´ CAP´ ITULO 3. c] ~ [x. %e ]) 2 dx (%i17) ev (%. x z. o dy Una ecuaci´n diferencial de primer orden tiene la forma general F (x. x z.([x y. c] ~ [x. (%i1) /* ecuaci´n de variables separadas */ o ec:(x-1)*y^3+(y-1)*x^3*’diff(y.1 2 x . b. 2 %e ] N´tese en todos los casos el usos de la secuencia express .------2 2 2 y 2 x donde %c representa una constante. y. lo o o cual haremos saber a Maxima a trav´s de la funci´n ic1.6.a z. 2 z. o Para expresar una de estas ecuaciones se hace uso de diff. z] (%i19) express(%). e o (%i18) [a.([x y. 3 dy 3 (%o1) x (y .c y. %e ]) 2 2 dz dy 2 d 2 y + x + --. que se ajustar´ de acuerdo a la condici´n inicial que se le a o imponga a la ecuaci´n.+ (x . c x .x).x)=0. y.y. x z.ev.

2 x + 1) + 2 atan(-----) y (%o5) -------------------------------------. y.1 log(y + x .y).= %c 4 En este caso. 2 dy d y (%o9) -.= --.´ CAP´ ITULO 3. 2 2 x .36 ------.y.x)=x+’diff(y. Una ecuaci´n diferencial ordinaria de segundo orden tiene la forma general F (x. (%i4) /* ecuacion homog´nea */ e ode2(x^3+y^3+3*x*y^2*’diff(y.x).x=2.1) = x + %c (%i8) solve(%.+ x dx 2 dx (%i10) ode2(%.y. 3 4 4 x y + x (%o4) ----------.y + 8 x y + x = %c (%i7) /* Bernoulli */ ode2(’diff(y.2).= %c 4 (%i6) /* ecuaci´n exacta */ o ode2((4*x^3+8*y)+(8*x-4*y^3)*’diff(y.x)-y+sqrt(y). x + %c x/2 + %c/2 (%o8) [y = %e + 2 %e + 1] En este ultimo caso. Como ejemplo.-------------2 2 2 y 72 x (%o3) Veamos ejemplos de otros tipos de ecuaciones diferenciales que puede resolver Maxima.y=-3). cuando no se incluye el s´ ımbolo de igualdad. 4 4 (%o6) .y. (%i5) /* reducible a homog´nea */ e ode2(’diff(y.= .x).x).y.y.x).x).x).x. MATEMATICAS CON MAXIMA 32 (%i3) ic1(%o2.+ %k2 2 . (%o7) 2 log(sqrt(y) . y . (%i9) ’diff(y. y ) = 0.x). 2 2 y .x)=(x+y-1)/(x-y-1).1 x + 72 x . o siendo y la segunda derivada de y respecto de x. 2 x x + 2 x + 2 (%o10) y = %k1 %e + -----------. optamos por obtener la soluci´n en su forma expl´ ´ o ıcita. se da por hecho que la expresi´n es o igual a cero.

x (2 g(0) . que para ajustara los necesitaremos proporcionar ciertas condiciones iniciales. MATEMATICAS CON MAXIMA 33 Maxima nos devuelve un resultado que depende de dos par´metros.x)=2*f(x)-2*g(x)].4 f(0)) %e .y=3. haremos uso de la instrucci´n ic2.x=1. o hacemos (%i12) bc2(%o10. si sabemos que cuando x = 1 entonces dy y = −1 y y = dx = 2. Observamos en la a ı respuesta que nos da Maxima la presencia de f(0) y g(0)..6 N´tese que este c´lculo se le solicita a Maxima con bc2. lo cual es debido a que se desconocen las condiciones de contorno del sistema.2 2 En el caso de las ecuaciones de segundo orden.+ -----------. x + 1 2 3 35 %e x + 2 x + 2 15 %e + 20 (%o12) y = .2 f(0)) %e (g(0) .x 2 x (4 g(0) .diff(y.x=2. %k1 y %k2.y=-1. 2 x + 2 x + 2 7 (%o11) y = -----------. o a La resoluci´n de sistemas de ecuaciones diferenciales se hace con llamadas a la funci´n desolve. o x=1 (%i11) ic2(%.´ CAP´ ITULO 3. tambi´n es posible ajustar los par´metros de la e a soluci´n especificando condiciones de contorno.6 6 %e . .x)=2).x=-1. g(x) = 3 . resolviendo el sistema o a df (x) dx dg(x) dx = = 3f (x) − 2g(x) 2f (x) − 2g(x) (%i13) desolve([’diff(f(x). esto es.2 f(0)) %e ----------------------.---------.-----------------------. un ejemplo aclarar´ este punto.y=5/3).. as´ si la soluci´n obtenida en (%o10) debe pasar por los puntos (−1. o ı.---------------------] 3 3 Como se ve. ’diff(g(x).+ ----------3 2 3 6 %e .x)=3*f(x)-2*g(x). 3) y (2. as´ como los nombres de las funciones. fijando dos puntos del plano por los que o 5 pase la soluci´n. 3 ).g(x)]). o o En este contexto es preciso tener en cuenta que se debe utilizar notaci´n funcional dentro de la o expresi´n diff.f(0)) %e (%o13) [f(x) = --------------------3 2 x (2 g(0) . las referecias a las funciones deben incluir la variable independiente y las ecuaciones estar´n acotadas entre corchetes. . [f(x).

dependiente de dos par´metros a h y k.x)=g(x)-2*h(x).x g(x) = . (%i20) plotdf([2*x+k*x*y."k=-1. ’diff(h(x). [parameters.1 izquierda.2. y) = F (x.2 y 0.9. en el que adem´s se observan dos trayeca a torias que se dibujaron de forma interactiva al hacer clic sobre dos puntos del plano.3)$ atvalue(h(x). [f(x).1)$ desolve([’diff(f(x). adem´s.2 %e . algunas de las cuales aprovechamos en el siguiente o ejemplo. respectivamente. Como ejemplo."k=-2:2. el paquete plotdf permite generar campos de direcciones. .h(x)]).´ CAP´ ITULO 3. En primer lugar introduciremos estas condiciones con la funci´n atvalue. La funci´n plotdf admite varias opciones. MATEMATICAS CON MAXIMA 34 En este ultimo ejemplo. dx dt = 2x + hxy dy dt = −x + kxy El siguiente c´digo permite generar el campo de direcciones correspondiente. aparecer´n sobre la ventana gr´fica a a a dos barras de deslizamiento para alterar de forma interactiva estos dos par´metros y ver los cambios a que se producen en el campo. y) Los argumentos a pasar a la funci´n plotdf son la funci´n F . y una lista o o con las funciones F y G en el segundo.-1)$ atvalue(g(x). 2 x 2 x . 2 x 2 x . en el primer caso. [sliders. g(0) = 3 y f (0) = 1.x (%o17) [f(x) = x %e + %e .x)=f(x)+h(x)].x h(x) = x %e + %e ] Adem´s de las funciones anteriores. 2 x .x)=f(x)+g(x)+3*h(x). a bien de ecuaciones diferenciales de primer orden dy = F (x. o o atvalue(f(x). ’diff(g(x).9"]. pidamos a dy a Maxima que genere el campo de direcciones de la ecuaci´n diferencial dx = 1 + y + y 2 o (%i18) load(plotdf)$ (%i19) plotdf(1 + y + y^2). supongamos que queremos resolver el sistema de ecuaciones diferenciales ´  (x)  dfdx = f (x) + g(x) + 3h(x)  dg(x) = g(x) − 2h(x) dx  dh(x)  = f (x) + h(x) dx bajo las condiciones f (0) = −1.x=0. El gr´fico que resulta es el de la Figura 3.g(x). para posteriormente solicitar la resoluci´n del sistema. Supongamos el modelo predador-presa de Lotka-Volterra.x=0. d´ndoles inicialo a mente a h y k los valores -1.h=-2:2"]). dx bien de sistemas dx dt dy dt (%i14) (%i15) (%i16) (%i17) = G(x. y).h=0. -y+h*x*y].x=0.2 x %e + 2 %e + %e . Las variables ser´n siempre x e y.

y.5. y) = en Maxima. para lo cual definimos la expresi´n e o f (t.´ CAP´ ITULO 3. 1.4011473182183033.5. 4.2260784415237641.0.0.+ 2 y . a la derecha el correspondiente al modelo predador-presa.t).1 derecha se observa el gr´fico obtenido desp´es de pedir trayectorias concretas a u que pasan por varios puntos del plano (en el archivo gr´fico no aparecen las barras de deslizamiento).3 t (%o21) -. 3. se podr´ recurrir al o o a m´todo num´rico de Runge-Kutta.5.0.5.1: Campos de direcciones creados con la funci´n ’plotdf’: a la izquierda el campo de la o ecuaci´n dx = 1 + y + y 2 .1).0].y):= -2*y^2+exp(-3*t) $ (%i25) res: runge1(f. dy 2 .0. 4. 3. 0. nos planteamos la resoluci´n de la ecuaci´n o o dy = −2y 2 + exp(−3t). [1. el cual se encuentra programado en el paquete diffeq. .%e = 0 dt (%i22) ode2(ec. 0.0.5988014211752297.5.5.0. MATEMATICAS CON MAXIMA 35 8 5 4 0 0 -4 -5 -8 -8 -4 0 4 8 -10 -5 0 5 10 Figura 3.0. (%o22) false Abordamos ahora el problema con un enfoque num´rico. La funci´n ode2 es incapaz de resolverla: o o (%i21) ec: ’diff(y. .2915932807721147. Como e e primer ejemplo. (%i23) load(diffeq)$ (%i24) f(t. 5. . a Cuando la funci´n ode2 no es capaz de resolver la ecuaci´n propuesta. . . 1.1547912058210609.t)+2*y^2-exp(-3*t)=0. o dy En la Figura 3.0.5. dt con la condici´n y(0) = 1.183860316087325. 2. dy = −2y 2 + exp(−3t) dt . (%o25) [[0. 2.

.6 discrete1 2 1. los valores inicial. soluci´n de la ecuaci´n o e o o de primer orden dy = −2y 2 + exp(−3t). . de la variable independiente.5 -2 -2.1336603954558797.5 0 -0. cuyo aspecto es el mostrado por la Figura 3.1176289334565761.5 0 1 2 3 4 5 0 10 20 30 40 50 60 70 80 90 100 a) 2.02766698775990988.5 -1 -0. El resultado es una lista que a su vez contiene tres listas: las abscisas t.5 -2. ..06705614729331426.5 -2 -2. y ).5 discrete1 2. y ).2(1 − y 2 ) dy − y..5 -0.03570266617749457. MATEMATICAS CON MAXIMA 36 1 0.1589442862446483. .´ CAP´ ITULO 3. b). o Nos planteamos ahora la resoluci´n de la ecuaci´n diferencial de segundo orden o o d2 y dy = 0...1050518038293819..5 1 1. Al final del ejemplo anterior.5 0 0. .2 0.2(1 − y 2 )y − y.1 0 -1 -1.5 0 -0.5 1 0. t0 .5 1 1.5 1 0. t1 . .5 -1 -0. . [.3 0.49399612385452.1. . y ) = d2 y = 0.1 y y (0) = 1 para lo cual definimos en Maxima la funci´n o g(t.5 0. se solicita la representaci´n gr´fica de la o a soluci´n. .5 -1 -1.. . y(0) = 1. diagrama (y.7 0.04779722499498942.res[2]])$ La funci´n runge1 necesita cinco argumentos: la funci´n derivada dy . soluci´n de la ecuaci´n de segundo orden o o dt = 0.5 -2. y. . con las condiciones y(0) = 0.09491944625388439].02207039201652747. .0. la amplitud de los subintervalos y el valor que toma y en t0 .0.5 2 -2 -1.09974417126696171.2 a). d2 y dt2 . d).01801909665196759]] (%i26) plot2d([discrete. .5 0 0.5 0 discrete1 0.5 -1 -1.4 0.5 -2 -2.2(1 − y 2 ) − y.9 0.res[1]..5 2 c) d) Figura 3.2: Resoluci´n num´rica de ecuaciones diferenciales con ’diffeq’: a).2720512734596094..8 0. dt2 .5 2 1. y o o dt final.5 2 1.1 y y (0) = 1. . 2 dt dt con y(0) = 0.5 b) discrete1 -2 -1.5 1 0. c). dt diagrama (y. las ordenadas y y las correspondientes derivadas.

. o (%i1) load(distrib)$ (%i2) assume(s>0)$ (%i3) cdf_normal(x. MATEMATICAS CON MAXIMA 37 (%i27) g(t. de Poisson. x .["with lines"]])$ (%i30) plot2d([discrete.1. de la variable independiente.1. como continuas (normal. la funci´n de densidad o los cuantiles.1)$ (%i29) plot2d([discrete. t0 .7. beta. Para cada una de ellas. por ultimo. .yp) := 0.0. (y. 1 67 gamma(-) 3 ----------- (%o6) .0. tanto discretas (binomial.+ 2 2 pdf_poisson(5. la amplitud de los subintervalos y los valores que toman y y su primera derivada en t0 .mu. t de Student. de Bernoulli.100.708140543186975 (%o3) (%i4) (%o4) (%i5) (%o5) Tambi´n se pueden calcular los momentos de primer y segundo orden. e (%i6) mean_weibull(3.mu erf(---------) sqrt(2) s 1 -------------.25). se puede calcular la probabilidad acumulada.["with lines"]])$ y La funci´n runge2 necesita seis argumentos: la funci´n derivada d 2 . uniforme continua. ´ Al final de este ultimo ejemplo se solicitan algunos gr´ficos asociados a la soluci´n. y ) y (y. de Cauchy y de Gumbel). F de e Snedecor. 2 3.1/s).1/s %e ------5 120 s quantile_student_t(0.2*(1-y^2)*yp . lognormal. exponencial. hie pergeom´trica y binomial negativa).y.y $ (%i28) res: runge2(g.res[1]. geom´trica. log´ ıstica.s). las segundas derivadas.res[2].res[2].0. gamma. uniforme discreta. de Weibull. y).res[3]].05.67). El resultado es una lista que a su vez contiene cuatro listas: las abscisas t. de Rayleigh. c) y d) de la Figura 3. y ). [gnuplot_curve_styles. χ2 de Pearson. t1 .res[4]]. de Laplace. [gnuplot_curve_styles. que son los correspondientes a los apartados b). [gnuplot_curve_styles. de Pareto. las correspondientes primeras derivadas y.["with lines"]])$ (%i31) plot2d([discrete. y o o dt final. los valores inicial. Probabilidades y estad´ ıstica El paquete distrib contiene la definici´n de las funciones de distribuci´n de probabilidad m´s o o a comunes.res[2]].1. los formados ´ a o con los pares (t.2.´ CAP´ ITULO 3. las ordenadas y.

44.H1: b # 0 ] [ ] [ statistic = 6.2].31. a o o el coeficiente de correlaci´n.3). 39.[145. 32.167.406 x .conflevel=0.[140.767304] ] [ ] [ hypotheses = H0: b = 0 . hay suficiente evidencia (con nivel de significaci´n 0. se remite al interesado a ”Primeros pasos en Maxima”.99). Warning: global variable ’fpprintprec’ is set to 7. 19. obtenemos el intervalo de confianza a para la pendiente de la recta de regresi´n.8]]$ (%i11) z:simple_linear_reg(datos.169. 31.1/8). tambi´n es posible la simulaci´n de muestras independientes de cualquiera de las ´ e o distribuciones anteriores. en primer lugar. 57] En cuanto a la estad´ ıstica descriptiva.19 ] [ ] [ correlation = .3].[130. 53. con { i } iid N (0. la estimaci´n insesgada de la varianza de los errores aleatorios del o o modelo yi = a + bxi + i .7].01) para rechazar H0 : b = 0 en favor de o H1 : b = 0.1]. Veamos c´mo hacer uso de estos resultados. (%i10) datos:[[125. 42. (%o8) [65. σ 2 ).1/5. su distribuci´n y el p-valor correspondiente. . 2.160.57967 ] [ ] (%o11) [ b_conf_int = [.140. 28. 37. junto con la recta estimada (Figura 3. tanto param´tricos como no param´tricos. o a 2 Debido a que este paquete a´ n est´ en fase de desarrollo.032687 ] [ ] [ distribution = [student_t. Sigue a contio e e nuaci´n una sesi´n sobre regresi´n lineal simple2 o o o (%i9) load("stats. en este o caso. 3] ] [ ] [ p_value = .003805955 ] Maxima nos muestra los resultados m´s importantes: la ecuaci´n de la recta de regresi´n. es posible que en su versi´n final los resultados no se u a o muestren tal cual se ve en estos ejemplos. Adem´s. 22.´ CAP´ ITULO 3.mac")$ Warning: global variable ’numer’ is set to ’true’.15). MATEMATICAS CON MAXIMA 38 3 (%i7) var_binomial(34. 28.9611685 ] [ ] [ v_estimation = 13. nos puede interesar una represeno taci´n gr´fica de los datos. [ SIMPLE LINEAR REGRESSION ] [ ] [ model = 1. (%o7) 119 --32 Por ultimo. el estad´ ıstico del contraste. 47. (%i8) random_negative_binomial(9. 29.[135. Maxima contendr´ un paquete que incluye procedimientos inferenciales o a y de contraste estad´ ıstico de hip´tesis. qu´ hip´tesis se est´ contrastando sobre b (la nula y o e o a la alternativa).04469634. En un futuro pr´ximo.155.

19 125 130 135 140 145 150 Figura 3.z)])$ En fin.take_inference(residuals. (%i13) take_inference(model. Adem´s de los resultados mostrados.3: Ajuste del modelo de regresi´n lineal. la variable z a a guarda otros que no muestra. (%o13) 155. yi −ˆ − ˆ i ). finalmente.406*x-31.4 como resultado de la instrucci´n %i16. MATEMATICAS CON MAXIMA 39 180 175 170 165 160 155 150 145 140 135 120 discrete1 1.62] (%i15) /* Intervalo de confianza para nueva predicci´n */ o take_inference(new_pred_conf_int. 179."with lines"]] )$ En caso de querer estimar la respuesta y para el valor x = 133. o a bx a bx imprescindibles para el an´lisis de la bondad de ajuste del modelo y que se representan en la a o o Figura 3.150]. el coeficiente de determinaci´n ajustado. los intervalos e o de confianza para los par´metros a y σ 2 del modelo.z)]. x=133.0729. (%o15) [132. porque entiende que no son de uso frecuente.´ CAP´ ITULO 3. no hay m´s que escribir e a a . los intervalos de confianza para la media a condicionada y para una nueva observaci´n y. x=133.z). [gnuplot_curve_styles.z).z). o (%i12) plot2d([[discrete. esta variable almacena tambi´n las medias y varianzas de x e y. take_inference(model.808 Pero Maxima puede hacer m´s por nosotros. [x.5431] (%i16) plot2d([discrete. datos].120. (%o14) [135. los pares de residuos (ˆ + ˆ i . para saber qu´ resultados est´n almacenados en la variable z. Veamos c´mo seguir haciendo uso de la variable z: (%i14) take_inference(means. ["with points".0. 158.

distribution.7]]$ linearinterpol(datos).((9 x . . para lo cual a o o haremos uso de la funci´n linearinterpol.[1. statistic. hypotheses. polinomio de Lagrange y splines c´bicos. adc. a_conf_int.4: Predicciones y residuos: (ˆ + ˆ i . cond_mean_conf_int. o (%i1) (%i2) (%i3) (%o3) load(interpol)$ datos: [[7. Interpolaci´n num´rica o e El paquete interpol permite abordar el problema de la interpolaci´n desde tres enfoques: o lineal.2]. MATEMATICAS CON MAXIMA 40 4 discrete1 3 2 1 0 -1 -2 -3 -4 140 145 150 155 160 165 170 175 Figura 3. u A lo largo de esta secci´n vamos a suponer que disponemos de los valores emp´ o ıricos de la siguiente tabla: x y 7 2 8 2 1 5 3 2 6 7 Nos planteamos en primer lugar el c´lculo de la funci´n de interpolaci´n lineal. yi − a − ˆ i ).8. a bx ˆ bx (%i17) items_inference(z).[6.[3. means. new_pred_conf_int.[8.5]. 3) .2]. correlation. (%o17) [model. v_estimation.´ CAP´ ITULO 3.2]. variances. p_value. a_estimation. minf. b_conf_int. residuals] 3. b_estimation. v_conf_int.39) charfun2(x.

definimos cierta funci´n f previa evaluaci´n ´ o o (dos comillas simples) de la expresi´n devuelta por linearinterpol.25/7. [ 7 2 ] [ ] [ 8 2 ] [ ] (%o7) [ 1 5 ] [ ] [ 3 2 ] [ ] [ 6 7 ] (%i8) lagrange(datos2. (%o4) f(x) := .´ CAP´ ITULO 3. 6))/6 Empezamos cargando el paquete que define las funciones de interpolaci´n y a continuaci´n o o introducimos los pares de datos en forma de lista. (%o6) [2.21152 w + 15624 (%o9) g(w) := ------------------------------------------420 (%i10) map(g.[6. inf) + (30 x .39) charfun2(x.1402 w + 8957 w . 7) + (18 .[7. 2. pero tambi´n la funci´n admite una matriz de dos columnas o una lista de n´meros.1402 w + 8957 w . 3) . adem´s.10 x) charfun2(x.222) charfun2(x.%pi]).[1.[8. 3. . Esta funci´n la podemos o o utilizar ahora tanto para interpolar como para extrapolar: (%i5) map(f. --. . La funci´n linearinterpol devuelve una exo presi´n definida a trozos.12 charfun2(x.25/7. la lista a ´ a de pares de la variable datos no ha sido necesario ordenarla respecto de la primera coordenada.10 x) charfun2(x. Los datos los hemos introducido como una lista de pares de n´meros. 3.2].952380952380953. 4 3 2 73 w .222) charfun2(x.3. 6.2].b) devuelve 1 si el primer argumento pertence o al intervalo [a. 62 18 . 7) + (18 . 4 3 2 73 w .[3.12 charfun2(x.21152 w + 15624 (%o8) ------------------------------------------420 (%i9) g(w):=’’%. 6. Por ultimo.10 %pi (%o5) [2.5]. inf) + (30 x . (%i7) datos2: matrix([7.numer.((9 x .3.7]).2]. u e o u asign´ndole en este ultimo caso las abscisas secuencialmente a partir de la unidad. 7.%pi]). MATEMATICAS CON MAXIMA 41 . 6))/6 (%i4) f(x):=’’%. asunto del que ya se encarga Maxima por cuenta propia. minf. 2.235987755982988] Unos comentarios antes de continuar. El polinomio de interpolaci´n de Lagrange se calcula con la funci´n lagrange. 7. en la que charfun2(x. b) y 0 en caso contrario.[7. en el siguiente o o ejemplo le daremos a los datos un formato matricial y le indicaremos a Maxima que nos devuelva el polinomio con variable independiente w.varname=’w).-----------] 21 6 (%i6) %.a. numer.

1278468 z + 8110656 z . La funci´n que ahora necesitamos o o es cspline. inf) 3 2 + (28290 x . represent´moslas gr´ficamente o e a junto con los datos emp´ ıricos.227405312429501] La funci´n cspline admite.7317) 3 2 charfun2(z. 6))/20304 . 3) + (. 5. de manera que sus derivadas cumplan ciertas condiciones que aseguren una curva sin cambios bruscos de direcci´n.dn=0).18273 x + 74547) 3 2 charfun2(x. minf. 6))/9864 (%i13) s1(x):=’’%$ (%i14) map(s1.10431 x .%pi]). 2.3. en caso a de no suministrarse. otras o a o o dos a las que se hace referencia con los s´ ımbolos ’d1 y ’dn. "with lines". las segundas derivadas se igualan a cero. (%i11) plot2d([’(f(x)).289650 x + 345924) charfun2(x. 6. 3. 3. 3 2 (%o15) ((21051 z . que indican las primeras derivadas en las abscisas de los extremos. (%i15) cspline(datos.[7.25/7.10]. 7. estos valores establecen las condiciones de contorno y con ellas Maxima calcular´ los valores de las segundas derivadas en estos mismos puntos extremos.g(x).16797024) 3 2 charfun2(z. "with points pointsize 3"]])$ cuyo resultado se ve en el apartado a) de la Figura 3. El m´todo de los splines c´bicos consiste en calcular polinomios interpoladores de tercer grado e u entre dos puntos de referencia consecutivos. (%i12) cspline(datos).2964702 x + 7842816) charfun2(x.786816 z + 997920) charfun2(z. MATEMATICAS CON MAXIMA 42 (%o10) [1. 2. numer. 7) + (.89319655125692] Disponemos en este punto de dos funciones de interpolaci´n.5. como en el anterior ejemplo.´ CAP´ ITULO 3.6574 x + 80028 x .7184700) 3 2 charfun2(x.567941928958183. 3.’varname=’z.130635 z + 218421 z .16180 z + 204444 z .15522 x + 372528 x .0.438224452555094. adem´s de la opci´n ’varname que ya se vi´ anteriormente.[discrete.9839808 z + 25087392) charfun2(z.043464999999768.547524 x + 3475662 x . [gnuplot_curve_styles.datos]]. En el siguiente ejemplo hacemos uso de estas opciones. 7) + (. 3 2 (%o12) ((3477 x . 3) + (. inf) 3 2 + (66204 z . 7.320503453379951.55908 z + 1285884 z . 6. ["with lines". minf.[x. (%o14) [1.d1=1.

[gnuplot_curve_styles.[7.0. 2.[discrete.881415315197325. MATEMATICAS CON MAXIMA 43 70 60 f(x) (73*x^4-1402*x^3+8957*x^2-21152*x+15624)/420 discrete3 10 5 0 -5 s1(x) s2(x) discrete3 50 40 -10 30 -15 20 -20 10 -25 -30 -35 0 -10 0 2 4 6 8 10 0 2 4 6 8 10 a) b) Figura 3.076658794432381] Con esto hemos obtenido dos interpoladores distintos por el m´todo de los splines c´bicos. "with points pointsize 3"]])$ . b) Splines c´bicos. ["with lines". (%o17) [1. (%i18) plot2d([’(s1(x)).3.10].´ CAP´ ITULO 3. "with lines". cuyo resultado se observa en el apartado b) o o a de la Figura 3.%pi]). numer.[x. con e u el siguiente c´digo pedimos su representaci´n gr´fica.5.5: Interpolaci´n: a) lineal y de Lagrange.datos]].’(s2(x)). o u (%i16) s2(z):=’’%$ (%i17) map(s2.25/7. 2.595228723404633.

El alumno aprender´ m´s r´pidamente a utilizarlo si asiste a explicaciones donde el profesor a a a lo usa junto con un ca˜´n proyector. a a herencias de clases. a Los inconvenientes: No siempre existe una disponibilidad razonable de los recursos inform´ticos y de hardware. Centr´ndonos en los sistemas de c´lculo simb´lico. o a Hay sesiones con los alumnos en los que se desea trabajar m´s el concepto que las habilidades a manipulativas. de mayor dificultad matem´tica. lo que a uno se le est´ escapando. ir al grano. el alumno que tenga que programar algoritmos lo puede hacer m´s f´cil. a Necesita m´s tiempo de dedicaci´n por parte del profesor. otro lo ve claro. o La licencia libre de Maxima permite que los alumnos puedan disponer de ´l en casa. etc. 44 . a evitando la dispersi´n de esfuerzos en c´lculos tediosos. son por naturaleza opinables y sujetas a m´ltiples matices. n Puede fomentar la colaboraci´n entre profesionales de la educaci´n.Cap´ ıtulo 4 Maxima como herramienta pedag´gica o En los ultimos tiempos se promueve el uso de las tecnolog´ inform´ticas en todos los niveles ´ ıas a de la ense˜anza. los gr´ficos son e o a inmediatos. no Ayuda a interpretar los aspectos geom´tricos de los fen´menos bajo estudio. a Al disponer Maxima de un lenguaje muy sencillo. Promoci´n del trabajo creativo frente al rutinario. pudiendo e dise˜arse nuevas formas de trabajo personal. sin preocuparse de declaraciones de variables. crear otras estructuras de datos previas. no reconoci´ndose suficientemente a o e a nivel administrativo su esfuerzo adicional. u Las ventajas: Permite experimentar directamente sobre modelos reales. Es bueno crear equipos o o que compartan experiencias educativas. se pueden citar algunas ideas n a a o que. Permite m´s tiempo para reflexionar sobre los modelos y los resultados. al contrario que cuando se hacen a mano en la pizarra. como todas las ideas.

a Al profesor se le debe facilitar informaci´n sobre el software. . botones. pero hay contextos que lo piden a u gritos. Los entornos gr´ficos pueden dispersar la atenci´n del alumno (men´s. Idear nuevas tareas. nuevas formas y nuevos estilos. Evitar que el alumno abandone sus esfuerzos por adquirir habilidades y automatismos manuales.´ CAP´ ITULO 4. m´s ventanas). Los errores sint´cticos a a frenan la marcha de la clase. Maxima ser´ util o ıa a a´ en algunos casos. a o u ventanas. opciones. n Los riesgos: Evitar convertir una clase de Matem´ticas en una clase de Maxima. es imprescindible que los alumnos tengan que escribir lo menos posible. El entorno de texto puede ayudar a centrar la atenci´n. ya que ver´ ante s´ un doble trabajo: aprender a utilizar el programa a a ı y aprender a usarlo como herramienta pedag´gica. e in´til en otros. si tiene que aprender por su o cuenta habr´ rechazo. No forzar situaciones. o El profesor debe adquirir ciertos conocimientos m´ ınimos de programaci´n. MAXIMA COMO HERRAMIENTA PEDAGOGICA 45 Las actividades y el proceso de ense˜anza – aprendizaje deben ser diferentes a los planten amientos cl´sicos. Riesgo de p´rdida del sentido cr´ e ıtico: fe ciega en los resultados del ordenador. con el fin de poder o dise˜ar actividades a conveniencia y explotar las posibilidades del programa. a o No pretender que esta sea la gran revoluci´n de la pedagog´ matem´tica.

que consiste en que e podemos alterar desapercibidamente valores de variables que quiz´s se est´n utilizando en otras a e partes de la sesi´n actual.1. Maxima se puede programar a dos niveles: en el lenguaje propio de Maxima. cuya existencia no o o se extiende m´s all´ de la duraci´n del programa. (%o3) 9 3 6 Como se ve en las salidas %o2 y %o3. programar consiste en escribir secuencialmente un grupo de sentencias sint´ctia camente correctas que el int´rprete pueda leer y luego ejecutar. cuyo c´digo es cerrado e inaccesible a o para el usuario. el siguiente ejemplo a a o muestra el mismo c´lculo anterior declarando c y d locales. y en el lenguaje en el que est´ dise˜ado o o a n todo el sistema. (%o5) (%i6) d.Cap´ ıtulo 5 Programaci´n o A diferencia de los programas de Matem´ticas privativos. (%o1) (%i2) a. (%o6) 9 c d A la hora de hacer un programa. mediante el uso de bloques. Lisp. lo habitual es empaquetarlo como cuerpo de una funci´n. la manera m´s sencilla de empae a quetar varias sentencias es mediante par´ntesis. c+d ). La soluci´n pasa por declarar variables localmente. que es muy sencillo.d:6]. 5. de o 46 . (%o2) (%i3) b. al que dedicaremos algunos p´rrafos en la segunda secci´n de este cap´ a o ıtulo. c:3. adem´s se ve c´mo es posible asignarles a a o valores a las variables en el momento de crearlas: (%i4) block([c. siendo el resultado del programa la salida de la e ultima sentencia: ´ (%i1) (a:3. a+b). b:6. y al que dedicaremos la pr´xima secci´n. este m´todo conlleva un peligro. Nivel Maxima Esencialmente. (%o4) (%i5) c.

. ..403677461028802 (%i9) fact(n):=block([prod:1]..1]). prod )$ (%i10) fact(45).<arg2>. v´anse los si´ e guientes ejemplos: (%i7) loga(x.. con sus significados obvios.menor que.. false. (%o16) ... numer) $ (%i8) loga(7.... Esta ultima funci´n podr´ haberse escrito recursivamente ´ o ıa mediante un sencillo condicional. (%o8) 1.a):= ev(log(x) / log(a)...1... a o e solicitamos que nos los eval´e siempre en formato decimal. . o a or y not. Los operadores l´gicos que frecuentemente se utilizar´n con las relaciones anteriores son and. previendo que s´lo los vamos a necesitar en su forma num´rica.igual que.. la estructura de la definici´n de una funci´n o o o necesita el uso del operador := f(<arg1>. true] (%i15) if sin(4)< 9/10 and 2^2 = 4 then 1 else -1 . puede ser de o utilidad la siguiente tabla de operadores relacionales = # > < >= <= .):=<expr> donde <expr> suele ser una unica sentencia o un bloque con variables locales.. (%o13) 119622220865480194561963161495657715064383733760000000000 Acabamos de ver dos estructuras de control de flujo comunes a todos los lenguajes de programaci´n. (%i14) makelist(is(log(x)<x-1). (%o14) [true..´ CAP´ ITULO 5.. a a ıa. En cuanto a las primeras.. PROGRAMACION 47 forma que sea sencillo utilizar el c´digo escrito tantas veces como sea necesario sin m´s que escribir o a el nombre de la funci´n con los argumentos necesarios.1 .. (%o15) 1 (%i16) if sin(4)< -9/10 and 2^2 = 4 then 1 else -1 .. for k:1 thru n do prod:prod*k.. [0. (%i13) 45!. (%o12) 119622220865480194561963161495657715064383733760000000000 O m´s f´cil todav´ :-).. las sentencias if-then-else y los bucles for..menor o igual que...diferente de.9.. (%i11) fact2(n):= if n=1 then 1 else n*fact2(n-1) $ (%i12) fact2(45). (%o10) 119622220865480194561963161495657715064383733760000000000 En el primer caso (loga) se definen los logaritmos en base arbitraria (Maxima s´lo tiene deo finidos los naturales). 4).1. . . En el segundo caso (fact) hacemos uso u de un bucle para calcular factoriales.mayor que. x.mayor o igual que. adem´s..

3 (%o21) (%i22) . print(var)) .5 . ı.5 .0] V´ase en este ultimo resultado c´mo la variable cont no queda con valor ninguno asignado. is ya no es necesario: o (%i19) sin(4)< 9/10 and 2^2 = 4.´ CAP´ ITULO 5.375 8. 27.0 (%o23) (%i24) (%o24) for z:-5 while z+2<0 do print(z) . done for cont:1 thru 3 step 0.4 . (%o17) (%i18) is(sin(4)< 9/10). PROGRAMACION 48 Se ilustra en el ejemplo anterior (%i14) c´mo se eval´a con la funci´n is el valor de verdad de o u o una expresi´n relacional ante la ausencia de un condicional o de un operador l´gico. var].0 15.2 (%o22) (%i23) 1 3. tiene las siguientes variantes: a for <var>:<val1> step <val2> thru <val3> do <expr> for <var>:<val1> step <val2> while <cond> do <expr> for <var>:<val1> step <val2> unless <cond> do <expr> Algunos ejemplos que se explican por s´ solos: ı (%i21) .4 .625 27. la siguiente o o secuencia aclara algo m´s las cosas: a (%i17) sin(4)< 9/10 . (%o18) 9 sin(4) < -10 true Pero ante la presencia de un operador l´gico o una sentencia condicional. (%o19) true (%i20) if sin(4)< 9/10 then 1. done [cont.3 . [cont. expirando cuando ´ste termina. for es muy vers´til. done for z:-5 unless z+2>0 do print(z) .5 do (var: cont^3. o e Otra variante de for es cuando el contador recorre los valores de una lista. su forma es for <var> in <lista> do <expr> y un ejemplo: . e ´ o mientras que var s´ la raz´n es que cont es local al bucle. (%o20) 1 En cuanto a los bucles.

Ahora. Nivel Lisp A veces se presentan circunstancias en las que es mejor hacer programas para Maxima directamente en Lisp. 3: u: u+3.mac line 4) (%i27) foo(2). 5: u). Maxima dispone del modo de ejecuci´n de depurado (debugmode). Una vez dentro de Maxima.´ CAP´ ITULO 5. devolvi´ndou e nos un resultado incorrecto.mac contiene alg´n error. la instrucci´n load("ruta/fichero. listas para ser utilizadas. a e o Sin dar por hecho que el lector conoce el lenguaje de programaci´n Lisp. /* cargamos fichero */ (%o26) prueba.x)) $ cos(x) x %e 3 -----1/4 4 x Cuando se hace un programa. x^(3/4)] do print(diff(z.mac"). /* llamada a funci´n */ o Bkpt 0:(prueba. /* ¿valor de u? */ 7 (dbm:1) y. exp(x). tal es el caso de las funciones que no requieran de mucho procesamiento simb´lico. Supongamos el siguiente contenido de cierto fichero prueba.mac")$ o o leer´ las funciones escritas en ´l y las cargar´ en la menmoria. 4: u: u^2.mac 4) prueba. lo habitual es escribir el c´digo con un editor de texto y almacenaro lo en un archivo con extensi´n mac. que o ejecuta el c´digo paso a paso. /* ¿valor de y? */ 2 (dbm:1) u: 1000. nos limitaremos a dar o . pudiendo el programador chequear interactivamente el estado de las o variables o asignarles valores arbitrariamente. o como funciones de c´lculo num´rico o la creaci´n de nuevas estructuras de datos. a e a Si alguna de las funciones definidas en el fichero fichero. PROGRAMACION 49 (%i25) for z in [sin(x). la siguiente sesi´n nos permite analizar los valores de las variables en cierto punto de la o ejecuci´n de la funci´n: o o (%i26) load("prueba.mac (%i27) :break foo 3 /* punto de ruptura al final de l´nea 3*/ ı Bkpt 0 for foo (in prueba.mac:4:: /* se detiene al final de l´nea 4 */ ı (dbm:1) u.2. /* cambio valor de u */ 1000 (dbm:1) :continue /* contin´a ejecuci´n */ u o (%o27) 1000000 Para m´s informaci´n tecl´ese ? depura.mac 1: foo(y) := 2: block ([u:y^2]. a o e 5.

897) 3 4 Pero s´ hay una funci´n en Lisp que realiza este c´lculo. (%o3) round(4. cmucl o sbcl. (%o6) [1. (%o1) (%i2) :lisp $%o1 ((RAT SIMP) 3 4) (%i2) :lisp ($num $%o1) 3 La expresi´n 3 se almacena internamente como la lista ((RAT SIMP) 3 4). le indicamos que aplique a la fracci´n la funci´n de Maxima num.´ CAP´ ITULO 5. En la segunda instrucci´n que o introducimos a nivel Lisp. o la raz´n por la que se antepone el s´ o ımbolo de d´lar es que desde Lisp. o o (%i8) :lisp (defun $redondea (x) (round x)) $REDONDEA (%i9) redondea(4.7777). tal como indica este ejemplo: o (%i4) ?round(4. gcl. de tal manera que en la actualidad Maxima funciona perfectamente con compiladores libres como clisp. veamos qu´ pasa con la e e funci´n de redondeo. (%o5) 2 y + x (%i6) [1. un ejemplo de c´mo definir a nivel de maxima una funci´n de redondeo. al nivel o de Maxima tambi´n se pueden ejecutar funciones de Lisp. PROGRAMACION 50 unos breves esbozos. los objetos de Maxima. que o o devuelve el numerador de una fracci´n. si queremos que Maxima la invoque. la cual no existe en Maxima: o (%i3) round(4. ı o a s´lo necesitamos llamarla con el prefijo ?. Empecemos por ver c´mo almacena Maxima internamente las expresiones o matem´ticas como listas Lisp: a (%i1) 3/4.897). Como ejemplo. llevan este prefijo.897). Al entrar en modo o 4 Lisp mediante el s´ ımbolo :lisp le estamos pidiendo a Maxima que nos devuelva la expresi´n %o1. (%o4) 5 A efectos de saciar nuestra curiosidad. .2]. (%o9) 5 Se ha hecho un gran esfuerzo para que Maxima sea lo m´s universal posible en cuanto a a entornos Common Lisp. veamos c´mo se almacenan internamente otras expreo siones simb´licas: o (%i5) x+y*2. o Del mismo modo que desde el nivel de Lisp ejecutamos una instrucci´n de Maxima. 2] (%i7) :lisp $%o5 ((MPLUS SIMP) $X ((MTIMES SIMP) 2 $Y)) (%i7) :lisp $%o6 ((MLIST SIMP) 1 2) Para terminar. o tanto variables como nombres de funciones.

gnu.mac.html */ /* INTRODUCCION Ejemplos de programacion de funciones orientadas a la docencia. but WITHOUT ANY WARRANTY. ejecutese desde Maxima load("ruta_a/cadiz. Para comentarios. without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.org/copyleft/gpl. either version 2 of the License. Este conjunto de funciones esta almacenado en el fichero cadiz. para cargar en memoria el paquete. sugerencias y aclaraciones. a fin de evitar errores de lectura en plataformas con diferentes codificaciones de las fuentes.mac"). you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. mario ARROBA edu PUNTO xunta PUNTO es */ 51 . En los comentarios se ha evitado el uso de acentos y caracteres especiales. or (at your option) any later version.Ap´ndice A e Ejemplos de programaci´n o /* COPYRIGHT NOTICE Copyright (C) 2006 Mario Rodriguez Riotorto This program is free software. See the GNU General Public License for more details at http://www. This program is distributed in the hope that it will be useful.

ymax: max(10. 10]. sconcat("set title ’Transformaciones del seno’. " to ". "set arrow 1 from -10. /* representa el seno y su transformada. am).abs(am)+dv). [x. ymin. dv + am * sin (fa + fr * x)].". set xzeroaxis lt -1. print(" Desp. aux. fa). dv.". /* actualiza opciones del usuario */ for i in select do( aux: ?position(lhs(i). fr). -10. ". con ’gnuplot_preamble’ se hacen los retoques necesarios para que aparezcan la malla. dv. dv). EJEMPLOS DE PROGRAMACION 52 /* Transformaciones de la funcion seno. */ seno([select]):= block([options. " nohead lt 2. /* nombres de opciones y sus valores por defecto */ options : [’amp. dv. "set grid. ":". if numberp(aux) and aux <= length(options) and aux >= 1 then defaults[aux]: rhs(i)). ymax. ". [gnuplot_preamble. /* actualiza variables locales */ am: defaults[1]. if -fa > -10 and -fa < 10 then sconcat("set arrow 2 from ". /* muestra en terminal la funcion */ print("Transformacion de la funcion sinusoidal:"). amp=5. ". "set yrange [".-abs(am)+dv). print(" Amplitud =". ymax].". ymin.options). ". ymax. fase=5. */ /* seno(). set yzeroaxis lt -1. ’y = dv + am * sin (fa + fr * ’x) )$ . print(" Fase =". " to 10. el titulo y las dimensiones de la ventana grafica */ plot2d([sin(x). ’frec. defaults.") else "". am. desp=6). -fa. "]")]). ’fase. -fa. */ /* seno(frec=%pi/2. fr. /* desplazamiento vertical */ ymin: min(-10. fa. /* fase */ fr: defaults[3]. defaults : [ 1. /* frecuencia */ dv: defaults[4]. vert. */ /* seno(frec=2*%pi/3. amp=5). ’desp].´ ´ APENDICE A. 0. los ejes. Opciones: */ /* ’amp: amplitud */ /* ’fase: fase */ /* ’frec: frecuencia */ /* ’desp: desplazamiento vertical */ /* Las opciones se separan por comas y se esta*/ /* blecen con el formato: */ /* opcion = valor */ /* Ejemplos de uso: */ /* seno(amp=4). ymin. ". 1. " nohead lt 2. =". /* amplitud */ fa: defaults[2]. print(" Frecuencia =". 0 ]. ".

int).’inf).d.=". print("") )$ . if tipo = ’inf then ordenadas: makelist([k.numer:true.3 border -1". print("Area bajo la curva .ordenadas)). suma: apply("+".tipo):= block([abscisas. /* variables globales numer y ratprint se modifican temporalmente */ d: (rango[3]-rango[2])/n.funcion]. abscisas: makelist(rango[2]+k*d-d/2. ["set title ’Sumas de Riemann’.rango[1]=k-d/2). */ /* riemann(exp(-v^2).rango.´ ´ APENDICE A.rango. k. [gnuplot_curve_styles. "with lines lt 3 lw 2"]].[u.[’sup..n).10. if not member(tipo.ev(funcion.rango[1]=k-d/2).d*makelist(k[2]. suma). int: integrate(funcion.2]..rango[1]=k+d/2))].=". ["with boxes fs solid 0. max(ev(funcion. */ /* Argumentos: */ /* funcion: funcion a integrar */ /* rango: de la forma [x. [gnuplot_preamble.k. print("Area rectangulos . min(ev(funcion.10.’sup). Permite seleccionar si se dibujan */ /* los rectangulos inferiores o superiores.ev(funcion.1.-5.ordenadas]..int. int-suma). plot2d([[discrete. set nokey"]]).abscisas). print("").’inf]) then error("Tipo de sumas incorrecto: debe ser ’sup o ’inf").suma]. */ riemann(funcion.-2.5]. EJEMPLOS DE PROGRAMACION 53 /* Definicion de la integral mediante las sumas */ /* de Riemann.rango[2]..0.10] */ /* n: numero de rectangulos */ /* tipo: ’sup o ’inf */ /* Ejemplo de uso: */ /* riemann(u^3.[v.rango[1]=k+d/2))]. k.ratprint:false.n.abscisas) else ordenadas: makelist([k.k. print("Diferencia (int-sum) =".rango[1].ordenadas.rango[3]).

[x.k. int: integrate(funcion. sumasup: apply("+".rango.´ ´ APENDICE A.rango[2].d*makelist(k[2]. sup: makelist([k.abscisas). int).[discrete. [gnuplot_curve_styles. "with boxes fs solid 0.3 border -1".inf.sup)). */ /* Argumentos: */ /* funcion: funcion a integrar */ /* rango: de la forma [x.abscisas). [gnuplot_preamble.ordenadas. set nokey"]]).sup. "with lines lt 3 lw 2"]].0. print("Area bajo la curva . Dibuja rectangulos inferiores y */ /* superiores. /* a continuacion.rango[1]=k-d/2). diferencia de las sumas superior e inferior */ print("Diferencia (sup-inf) =".rango[1]=k+d/2))].5).k.k. max(ev(funcion.n).numer:true. /* variables globales numer y ratprint se modifican temporalmente */ d: (rango[3]-rango[2])/n.1.[u.rango. print(""). inf: makelist([k.rango[1]. sumasup-sumainf).sumainf].ev(funcion.inf]. */ riemann2(funcion.3 border -1".sumasup.n):= block([abscisas.k.int.5]. abscisas: makelist(rango[2]+k*d-d/2. sumainf: apply("+".rango[1]=k+d/2))].ratprint:false. ["set title ’Sumas de Riemann’.rango[3]).k. print("") )$ . min(ev(funcion. EJEMPLOS DE PROGRAMACION 54 /* Definicion de la integral mediante las sumas */ /* de Riemann.ev(funcion. plot2d([[discrete.0.10] */ /* n: numero de rectangulos */ /* Ejemplo de uso: */ /* riemann2(u^3.=".d.5].sup].10).rango[1]=k-d/2).-5..d*makelist(k[2]. ["with boxes fs solid 0. */ /* riemann2(sin(x)+1.inf)).funcion].

’minus)= lim) ) else if side = 1 then (lim: limit(expr.[var.expr)). print(" =================="). args(rest(tab))]]. xx).’plus).7. /* limite((z^3-z^2+5)/(z-4). print(float(lim)=lim). print(" Estudio del limite"). ["with lines".xmax].yy))). /* calculo del limite */ if side = -1 then (lim: limit(expr.9).z.z.side:0].5.k. ’fin )$ .’minus).’plus). print(float(lim)=lim).var.var.5.val.val.´ ´ APENDICE A.var.tab. print(’limit(expr. ) /* representacion grafica */ plot2d([expr.val.9. subst(u. print(’limit(expr.7.var.yy.k. */ */ */ */ */ */ */ */ */ */ */ */ tabla */ /* calculo de las abscisas */ if side # 0 then xx: float(makelist(val+side/2^k.var.val.var.val.[dir]):= block([xx. print(’limit(expr. /* Argumentos: /* expr: expresion objetivo /* var: nombre de la variable independiente /* val: valor hacia el que tiende var /* xmin. reverse(makelist(val+1/2^k.[discrete.’minus). [gnuplot_curve_styles. print(tab).xmax.xx). xmax: subdominio para el grafico /* argumento opcional dir: indica si me aproximo /* por la izquierda (minus) o por la derecha (plus) /* Ejemplos de uso: /* limite((z^3-z^2+5)/(z-4).var.k.7.5.0. append([expr]. /* limite((z^3-z^2+5)/(z-4).xmin.z. print(float(lim)=lim).lim."with impulses"]]).9.npar). tab: transpose(matrix(append([var]. /* asignando valor a side */ if length(dir) > 0 then if dir[1] = ’minus then side: -1 else if dir[1] = ’plus then side: 1.0.0.val).npar)))). npar:6$ /* variable global: controla numero de pares de la limite(expr.var.npar)) else xx: float(append(makelist(val-1/2^k. /* achegamento tabular */ yy: map (lambda ([u].xmin.val)= lim) ). EJEMPLOS DE PROGRAMACION 55 /* Genera informacion relativa al calculo de los limites.’plus)= lim) else (lim: limit(expr.

-80].-76].[100.[94.[81.-102].[88. simy(bs).[35.-60].-45].-9]. return(trans) )$ /* Simetria respecto del origen de coordenadas */ simo(pts):=block([trans:[]]. [51. [99.-62].-69].[72.[58.-90].-75].[85.[94. for i in pts do trans:endcons([i[1]+v1.-64].[57.[32.[73.[80.[51.-41].[61.i[2]].[94. [45.-52].[91. homotecia(bs.-81].[15.[47.-86]. [42.-50].-68].-2).-61].-104]]$ .[51.-88].[91.-53].[48.-61].trans).[72.-62]. simy(bs). [91.-88].[88.[48.[35.[77.-65].-16].[80.-105]. [87. /* dibuja(barco.-76].[36.-42].[42.[39.-56].-58].[48.6].[61.-77].[12.-i[2]].-11].[115.[91.[78.-60].-17]. [91.-89]. [64.-42].[51. "set grid.-73].[51.[81. return(trans) )$ /* Simetria respecto del eje de ordenadas */ simy(pts):=block([trans:[]].5)).-77].-5]. homotecia(bs.[35.´ ´ APENDICE A. /* dibuja(barco.-47].6]. for i in pts do trans:endcons(k*[i[1].-72].[32.-27].[35.-95]. 6.-35].[56.-80].-57]. append([map(lambda ([x].[56. return(trans) )$ /* dibuja numero arbitrario de listas de vertices */ dibuja([figs]):= apply(’plot2d.[98.-61].[91.[107.-16]. return(trans) )$ /* Homotecia respecto del origen con parametro k */ homotecia(pts.[91.[4.-82].-81].[81.[69.[47.[39.1].[67.1].-84].-67].-67]. [’discrete.-106].v2):=block([trans:[]].-2)).[86.-75].[87.[80.-61].-72].-69].-61].[52.[80.-95].-85].[51.-72].[87.[2.-94].1]]$ bs: [[64.-60].-21].[88.-85].-68].[94.3].set zeroaxis linetype 6"]]))$ */ */ */ */ */ */ */ */ */ /* Vertices de dos objetos: barco y bs */ barco: [[1.-6].[88.-47].-43].3].[74.-11].-74].[32.-91]. /* dibuja(bs.-71].-44].-76].-43]. [82.[94.-99].-61].-104].v1. return(trans) )$ /* Traslacion respecto del vector [v1.-42].-74]. simo(barco)).[89.trans).-60].trans).-76].v2] */ traslacion(pts. simx(barco).-16].-49].-41].-79].[55.[45.-44].[64. EJEMPLOS DE PROGRAMACION 56 /* Funciones para una actividade sobre transformacions no plano. homotecia(bs.[91.[75.[35.3].-83].[51.[87. /* dibuja(bs.-22].[80.-50].[110.[84. [75.trans).[97.-50].-70].-60].[60.[49. /* dibuja(barco.[55. x]).-69]. for i in pts do trans:endcons([i[1]. /* Simetria respecto del eje de abscisas */ simx(pts):=block([trans:[]].[45. traslacion(barco.[39.-45].-79].[36.-i[2]].-7].[32.[92.i[2]].[1.[49.-70].-32].-62].-69].[72. for i in pts do trans:endcons([-i[1].[91.3].-73].[43.-14].-57]. [53.-90].[78.-52].[67.-95].[106.[33.-12].[55.-12].[62.-89].-76].-84].[44.-72].[92.-54].-52].[80.k):=block([trans:[]].[54. figs)].-25].-49].-88]. [[gnuplot_preamble.i[2]+v2]. [52.[87.trans).[79.[75.[4.[97.[35.[2.-87].[55.[39.-38].[43.[64.[94.-89].[1.[53.[93.[70.-48]. simx(barco)). for i in pts do trans:endcons([-i[1].[91.-19].[48.-83]. -7)). /* Ejemplos de uso: /* barco. /* Se incluyen dos variables que contienen listas de puntos a transformar.-79].[78.-52].

Sign up to vote on this title
UsefulNot useful