P. 1
Maxima

Maxima

|Views: 11|Likes:
Publicado porrbbpet

More info:

Published by: rbbpet on Feb 09, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

11/24/2013

pdf

text

original

Sections

  • Despegando con Maxima
  • 2.1. Instalaci´on
  • 2.2. Entornos de ejecuci´on
  • 2.3. Tomando contacto con el programa
  • Matem´aticas con Maxima
  • 3.1. N´umeros
  • 3.2. Resoluci´on de ecuaciones
  • 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´on num´erica
  • Programaci´on
  • 5.1. Nivel Maxima
  • 5.2. Nivel Lisp
  • Ejemplos de programaci´on

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.

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

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

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

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

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

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

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

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

2]].”set terminal postscript eps.[x.[y.[x.5])$ plot2d([-x^2.[t.500])$ plot3d(exp(-x^2-y^2). Los gr´ficos de la Figura 2. tales direca trices se deben hacer en el lenguaje de scripts de gnuplot.t. 2 / [ sqrt(x + 2) (%o36) I ----------. 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).%pi]. ordenadas de izquierda a derecha y de arriba hacia abajo.2*t].2 sqrt(2) sqrt(3)) + 548 sqrt(3) -------------------------------------------------2048 4 Reconozco que aqu´ hay algo de trampa.-2.0])$ plot3d([cos(t).data"))$ boxplot(s2. (%i22) (%i23) (%i24) (%i25) (%i26) (%i27) plot2d(exp(-x^2). para lo cual hubo que a˜ adir cierto c´digo a las sentencias que se describen.outputdev="eps")$ (%i28) (%i30) (%i31) (%i32) Gnuplot es un programa gr´fico muy potente.-2.5 fueron creados con gnuplot en formato ı a eps.2) = integrate(sqrt(2+x)/x^5. aunque esta alternativa estuvo en hibernaci´n en los ultimos tiempos. [x.15])$ /* Un par de ejemplos de estad´stica descriptiva */ ı load(descriptive)$ load (numericalio)$ s2 : read_matrix (file_search ("wind.eps’”]) .1+x.2).CAP´ ITULO 2.x.[y.5. a o ´ est´ recobrando nuevos br´ en la actualidad. DESPEGANDO CON MAXIMA 13 [ [ . Ninguna de estas dos soluciones es completamente a ıos satisfactoria en su estado actual.01. sin(x)*(3+y*cos(x/2)). si se quiere redactar publicaciones en formato L TEX.[u. lo que puede llegar a ser embarazoso para el usuario medio. Las siguiena tes instrucciones generan diferentes tipos de gr´ficos.t*sin(1/t).x.[t.-2.-2.-2.[x. que permite m´s libertad a la e a hora de programar gr´ficos.-1. 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. cuyas reproducciones4 se pueden ver en la a Figura 2.7*sin(x)].outputdev="eps")$ dataplot(s2.[gnuplot preamble.%pi].1.0. ya se ha visto c´mo se pueden generar archivos o A gr´ficos en calidad Postscript.-8 2 y + -24 ] ] En cuanto a gr´ficos.5].1].50. 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.1. en particular.5])$ plot2d([parametric.0.2].0.[x.-%pi.set out ’grafico1. Maxima utiliza tambi´n el entorno tcl-tk.-%pi.1])$ plot3d([cos(x)*(3+y*cos(x/2)). 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.[nticks.dx = ] 5 / x 1 5 sqrt(2) log(5 . Maxima hace uso por defecto del programa externo gnuplot. sin embargo.y*sin(x/2)].sin(t). o a A fin de preparar publicaciones cient´ ıficas.[’grid.

2*t] Function 8 6 4 2 0 -2 -4 -6 -8 0. DESPEGANDO CON MAXIMA 14 1 0.22 [cos(t).5 -1 3 4 -1 -0.2 0.05 0 -0.9 0.2 -20 0.06 0.1 0.sin(t).6 -0.9 %e^-x^2 10 -x^2 x+1 7*sin(x) 5 0.2 1 1 0.05 1 0.1 0 -25 -10 0 -5 -15 -2 -1 0 1 2 3 4 t.1 -2 -0.4 -0.7 0.6 0.5 0 0.5 0.4 0.4 -1.8 0.12 0.3 0.04 0.6 0.6 -1.15 -1.4 0.16 0. o .3 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.18 0. sin(1/t)*t 5 -2 -1 0 1 2 3 4 5 0.15 %e^(-y^2-x^2) 0.02 0.2 -1.4 -0.5 1 1.5 -1 -1 -0.6 -0.5 0 0.8 0.8 -0.2 -0.8 0.5 0.14 0.1 0.2 0 0.08 0.8 0 -0.2 -0.5 2 -2 -1.5 1 -1 -0.CAP´ ITULO 2.7 0.6 0.2 0.5: Ejemplos de la interacci´n entre Maxima y gnuplot.4 0.1 0 -0.5 0 -0.

se cargar´ el fichero sesion con la funci´n load: o a o (%i1) load("sesion"). DESPEGANDO CON MAXIMA 15 15 sqrt(2) log(3 .(tan(x))) dx d -. en este caso vz.(tan(x)) dx Es posible que el usuario necesite trabajar sobre un mismo problema durante varias sesiones. La unica diferencia entre ambos es el ap´strofo que o ´ o antecede al primer integrate. pero s´ la segunda. (%o38) (%i39) z+z. $$\int_{1}^{2}{{{\sqrt{x+2}}\over{x^5}}\. junto con el resultado de su evaluaci´n (salida o o %o40). d sesion . ´ste es un operador (llamado de comilla simple) que Maxima utiliza e para evitar la ejecuci´n de una instrucci´n.\sqrt{2}\.----------------------------------6144 (%i37) tex(%).x).CAP´ ITULO 2.\log \left(3-2\. (%o41) sesion (%i42) quit(). (%i38) z: ’diff(tan(x). de forma que en el resultado la primera integral no se o o calcula. podr´ hacer uso de la funci´n save: a o (%i41) save("sesion". La ultima instrucci´n es la que termina la ejecuci´n del programa. por lo que le interesar´ guardar aquellas partes de la sesi´n actual que necesitar´ m´s adelante. dando lugar a la igualdad que se obtiene como resultado final. ı 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{3}}\over{2048}}-{{15 \.\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.\sqrt{3}\right)+548\.\sqrt{2}\. 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. nouns.\log \left(5-2\. Se observa en ella que se ha escrito dos veces el mismo c´digo a ambos lados del signo de igualdad. como el valor de z no se hab´ asignado a ninguna variable.2 sqrt(2)) + 244 . (%o39) (%i40) z. 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. ´ o o Una vez iniciada una nueva sesi´n. (%o1) (%i2) z. a o a a Si se quiere almacenar la expresi´n guardada en z. el siguiente ejemplo muestra el uso del s´ ımbolo especial nouns. vz=%o40). es necesario ıa ponerle uno.dx}={{5\. (%o40) 2 sec (x) d 2 (-.\sqrt{2}\. z.

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

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

ı (%i3) zz: (3/12-3 *8/5)^-5 .1. aunque s´ las simplifica. 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. que devuelve el resultado como un n´mero de coma flotante de doble precisi´n. (%o3) 3200000 .127940964462986E-4 Si se quiere m´s precisi´n.Cap´ ıtulo 3 Matem´ticas con Maxima a 3.12794096446298596293256880814488029168034600338090820571\ 736601714365755675235967904307883385669518132648516346437807887855\ 18 . se puede recurrir a los n´meros decimales grandes. (%o1) 788657867364790503552363213932185062295135977687173263294742\ 533244359449963403342920304284011984623904177212138919638830257642\ 790242637105061926624952829931113462857270763317237396988943922445\ 621451664240254033291864131227428294853277524242407573903240321257\ 405579568660226031904170324062351700858796178922222789623703897374\ 720000000000000000000000000000000000000000000000000 (%i2) factor(%).5. u o (%i4) float(%). (%o4) . /* 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. 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. (%o6) . u (%i1) 200!. N´ meros u Maxima puede trabajar con n´meros enteros tan grandes como sea necesario. (%i5) fpprec: 200$ bfloat(zz).5.

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

como en el caso de la ecuaci´n polin´mica o e o o x5 + x4 + x3 + x2 + x = 0 .[u. t = . 2 sqrt(255) . y = 2 sqrt(3) sqrt(5) sqrt(17) + 27 .--------------------]] sqrt(2) sqrt(a) sqrt(a + 6) sqrt(2) sqrt(a + 6) Cuando Maxima no es capaz de resolver el sistema algebraicamente. %i a 2 a sqrt(----.[x]).1 3 sqrt(3) %i + 1 (%o1) [[x = ----------------]. MATEMATICAS CON MAXIMA 20 (%i1) algsys([4*x^3-2*x^2+5*x -7=0]. [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].-------------------. recurre a m´todos de e aproximaci´n num´rica.t/u=1].v. 3 sqrt(3) %i . sqrt(2) sqrt(2) sqrt(a) sqrt(a + 6) %i a 2 a sqrt(----.-----------------------------].-------------.t]). [u = . 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.x=y+9]. sqrt(2) sqrt(a + 6) sqrt(2) 2 sqrt(%i + 2) sqrt(%i + 2) sqrt(a) v = . v = ---------------------------.+ -----) a + 6 a + 6 2 sqrt(%i + 2) (%o6) [[u = -------------------.----------------]. sqrt(255) + 9 (%o5) [[x = .[x]). [x = .9 sqrt(3) sqrt(5) sqrt(17) .(2+%i)/(u+t)=3*v+u.---------------------------.y]). (%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.[x.27 [x = -------------.´ CAP´ ITULO 3.+ -----) sqrt(%i + 2) sqrt(a) a + 6 a + 6 t = --------------------].

(%o2) [cos(7). [x = . por e o u ejemplo.2. 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. las cuales se suponen igualadas a cero.4.2. y la funci´n map. [1.6]). (%o11) [[x = 1.. (%o9) [[u = 1. cos(9). En tales casos se puede hacer uso de las funciones lambda. sin necesidad o de haberla definido previamente. el primer argumento es una lista con la ecuaci´n o ecuaciones a o resolver. cos(2). que s´lo admite o ıa ı o un m´ximo de dos argumentos. (%o1) 2 (%i2) map(cos. [x = . 3. Patrones y reglas En un programa de c´lculo simb´lico. 2*x^2-x*y-5*x+1].[x.[x. convendr´ reparar en dos funciones que suelen ser de utilidad en a este contexto y que se relacionan con las listas. las funciones a utilizar por map deben ser de un unico a ´ argumento.9.[7.3090169943749475 . o (%i1) apply(min.[x]). que se utiliza para pasar como o argumentos de una funci´n a todos los elementos de una lista. y]. Sin embargo. la funci´n apply.4. cos(4). que se utiliza para o o aplicar una funci´n a cada uno de los elementos de una lista.8090169943749475].[7. . 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. aunque s´ existe un m´dulo para la aplicaci´n del m´todo de Newton. Antes de abordar este tema.3.´ CAP´ ITULO 3.5877852522924731 %i . ´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.524964836379522]] En los anteriores ejemplos. [x = . 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. (%o7) [[x = 0].9. (%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.373478353409809.[u]. [5. y = 2. la funci´n suma "+" podr´ haberse utilizado sin problemas.[1])..3. ı 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 = ...4. cos(3). 2*x^2-x*y-5*x+1]. no as´ "-". cos(6)] Obs´rvese que la funci´n a aplicar en apply debe ser tal que admita m´ltiples argumentos. [x = .1. -2]). 5]). cos(4). Maxima no dispone de algoritmos de resoluci´n simb´lia a o o ca.4. sup´ngase o 1 que a cada elemento x de una lista se le quiere aplicar la funci´n f (x) = sin(x) + 2 .9510565162951535 %i + .3.3090169943749475]] M´s all´ de las ecuaciones algebraicas.6]).5877852522924731 %i .756834008012769.9510565162951535 %i].8090169943749475]. MATEMATICAS CON MAXIMA 21 (%i7) algsys([x^5+x^4+x^3+x^2+x].779849592817897]] (%i11) mnewton([x+3*log(x)-y^2. y].

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

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

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

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

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

2.) (x . (%i28) integrate(cos(x)^3/sin(x)^4. .) (x . 2 2 2 2 2 (%o25) 120 x y . .1 (%o26) ------------3 3 sin (x) (%i27) integrate(cos(x)^3/sin(x)^4.x.. (%i25) expand(%). 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. .1.2) 2 2 + (6 y + 120 y + .+ 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. 1 1 1 1 . 2 (%o24)/T/ 1 + 8 y + 32 y + . 0) hasta grado 2 respecto de cada variable. 2 3 1 (x . To debug this try debugmode(true).2].384 x y + 320 y + 6 x y .[x.+ --.1) (%o22)/T/ .1. 3 2 x x 5 x 1 (%o23) -.2]). . 2 3 sin (x) . Quitting.3). . Integral is divergent -.1) (x . (%i24) taylor(exp(x^2*sin(x*y)).12 x y + 8 y + 1 Las integrales definidas e indefinidas las controla la funci´n integrate.x..2) + .[y.+ -------.an error.+ .0.´ CAP´ ITULO 3. para acabar esta secci´n. . Finalmente. .+ 2 x) del(x) = dx dy 2 x del(y) + (2 x -. 2 12 12 (%i23) expand(%). .-------. siguen algunos ejemplos o (%i26) integrate(cos(x)^3/sin(x)^4. 2 + (12 y + 96 y + .+ 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).2).x).-. . .1).0. (%i22) taylor((x*log(x))/(x^2-1). MATEMATICAS CON MAXIMA 27 (%o21) 3 y del(y) + (3 y -.x.

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

c].[a.4/5]$ (%i7) modulo(xx-yy). (%o2) [a s. o Otras funciones de cuadratura num´rica son quad_qags. quad_qawo y e quad_qaws.d. z) = −x + y 2 + z 2 y ψ(x. " no es un vector !!!!")$ (%i5) xx:[a. el estilo de o .e]$ (%i6) yy:[3. cuyas peculiaridades podr´ consultar el lector interesado en el manual de referencia. producto por un n´mero y producto escalar de vectores. los vectores se introducen como simples listas. MATEMATICAS CON MAXIMA 29 (%o36) .9097959895689502 El integrador simb´lico falla emitiendo un mensaje sobre la divergencia de la integral.b.c]. 2 2 2 2 (%o11) grad (z + y . lo que implica que debe ser cargado en memoria antes de ser utilizado. (%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) . b s.5. siendo el operador gradiente.b. b + 2.2.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.3]+[a.-) + d + (c + 6) + (b .v^2)) else error("Mucho ojito: ". y.´ CAP´ ITULO 3. z) = 4x + log(y 2 + z 2 ) y demostremos que sus l´ ıneas de nivel son ortogonales probando que φ · ψ = 0. Sigue a continuaci´n una sesi´n de ejemplo sobre c´mo usarlo. grad (log(z + y ) + 4 x) Como se ve. Maxima se limita a devolvernos la misma expresi´n que le introducimos.4. quad_qawc. c + 3] (%i2) s*[a. grad(psi).c]. Vectores y campos En Maxima.x) . o u (%i1) [1. v. 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. a 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.b. o o o Partamos de los campos escalares φ(x. siendo el caso que con ellas se pueden realizar las operaciones de adici´n. /* 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("+". c s] (%i3) [1.4) + (a .2.-6.b.c.0. (%o1) [a + 1. 4 2 2 2 2 2 (%o7) sqrt((e .7). quad_qawf. y.3].

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

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

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

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

Como ejemplo."k=-2:2. 2 x .´ CAP´ ITULO 3. [f(x).x)=f(x)+h(x)]. y) = F (x. 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). d´ndoles inicialo a mente a h y k los valores -1. Las variables ser´n siempre x e y. y una lista o o con las funciones F y G en el segundo. MATEMATICAS CON MAXIMA 34 En este ultimo ejemplo.2.1)$ desolve([’diff(f(x).x=0.x)=g(x)-2*h(x). dx dt = 2x + hxy dy dt = −x + kxy El siguiente c´digo permite generar el campo de direcciones correspondiente.g(x). 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.2 x %e + 2 %e + %e .3)$ atvalue(h(x). algunas de las cuales aprovechamos en el siguiente o ejemplo.x g(x) = .2 y 0. [sliders. En primer lugar introduciremos estas condiciones con la funci´n atvalue.h=0. para posteriormente solicitar la resoluci´n del sistema.-1)$ atvalue(g(x).x h(x) = x %e + %e ] Adem´s de las funciones anteriores. [parameters. el paquete plotdf permite generar campos de direcciones.1 izquierda. La funci´n plotdf admite varias opciones. -y+h*x*y]. 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. Supongamos el modelo predador-presa de Lotka-Volterra. y). en el primer caso. dx bien de sistemas dx dt dy dt (%i14) (%i15) (%i16) (%i17) = G(x."k=-1.h(x)]).9"]. 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. g(0) = 3 y f (0) = 1. o o atvalue(f(x). El gr´fico que resulta es el de la Figura 3. y) Los argumentos a pasar a la funci´n plotdf son la funci´n F . dependiente de dos par´metros a h y k.2 %e .x)=f(x)+g(x)+3*h(x).x=0.x=0. ’diff(h(x). 2 x 2 x . . adem´s. respectivamente.h=-2:2"]). a bien de ecuaciones diferenciales de primer orden dy = F (x.9. ’diff(g(x). (%i20) plotdf([2*x+k*x*y. 2 x 2 x .x (%o17) [f(x) = x %e + %e .

5988014211752297.0.5. . 3.y.5.5. 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. o dy En la Figura 3.y):= -2*y^2+exp(-3*t) $ (%i25) res: runge1(f. Como e e primer ejemplo.0.+ 2 y . dt con la condici´n y(0) = 1. 4. 1.5. (%o25) [[0.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). y) = en Maxima.´ CAP´ ITULO 3.1).2260784415237641.2915932807721147.0. dy 2 . .1547912058210609.5. el cual se encuentra programado en el paquete diffeq. 1.t)+2*y^2-exp(-3*t)=0.3 t (%o21) -.183860316087325. 0. (%i23) load(diffeq)$ (%i24) f(t. 0. 2. 3. 2.0. se podr´ recurrir al o o a m´todo num´rico de Runge-Kutta. para lo cual definimos la expresi´n e o f (t. 4.0.0. La funci´n ode2 es incapaz de resolverla: o o (%i21) ec: ’diff(y.5.4011473182183033. a la derecha el correspondiente al modelo predador-presa. [1.t).%e = 0 dt (%i22) ode2(ec. (%o22) false Abordamos ahora el problema con un enfoque num´rico. .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 . dy = −2y 2 + exp(−3t) dt . .5.0]. 5. . a Cuando la funci´n ode2 no es capaz de resolver la ecuaci´n propuesta.0. nos planteamos la resoluci´n de la ecuaci´n o o dy = −2y 2 + exp(−3t).

03570266617749457.´ CAP´ ITULO 3.5 2 c) d) Figura 3. .5 2 1. soluci´n de la ecuaci´n o e o o de primer orden dy = −2y 2 + exp(−3t).5 -2 -2.5 0 -0.. dt diagrama (y.1 0 -1 -1.02766698775990988.5 1 0. soluci´n de la ecuaci´n de segundo orden o o dt = 0.5 -0.0.7 0.5 discrete1 2. Al final del ejemplo anterior.5 0 0. d2 y dt2 .5 1 0.09974417126696171.3 0. y. .2720512734596094..1589442862446483. t0 .8 0.1 y y (0) = 1. de la variable independiente.5 b) discrete1 -2 -1. . . y(0) = 1. .5 1 0.2(1 − y 2 ) − y. MATEMATICAS CON MAXIMA 36 1 0. . cuyo aspecto es el mostrado por la Figura 3. .5 1 1.5 -2.6 discrete1 2 1.5 -1 -1. b).5 -1 -0.5 0..5 -2 -2. ..5 0 discrete1 0.01801909665196759]] (%i26) plot2d([discrete. c).4 0.2(1 − y 2 ) dy − y. con las condiciones y(0) = 0. . .. o Nos planteamos ahora la resoluci´n de la ecuaci´n diferencial de segundo orden o o d2 y dy = 0.. y ). El resultado es una lista que a su vez contiene tres listas: las abscisas t. d).49399612385452.5 -2. se solicita la representaci´n gr´fica de la o a soluci´n. los valores inicial.2 0. y ).. t1 . y ) = d2 y = 0.res[1].5 -2 -2.res[2]])$ La funci´n runge1 necesita cinco argumentos: la funci´n derivada dy . .5 2 1.5 0 1 2 3 4 5 0 10 20 30 40 50 60 70 80 90 100 a) 2.09491944625388439]..1 y y (0) = 1 para lo cual definimos en Maxima la funci´n o g(t. y o o dt final. 2 dt dt con y(0) = 0.06705614729331426.2(1 − y 2 )y − y.2: Resoluci´n num´rica de ecuaciones diferenciales con ’diffeq’: a). dt2 . diagrama (y. .5 -1 -1.04779722499498942.9 0.2 a). .1050518038293819.02207039201652747.5 0 -0. las ordenadas y y las correspondientes derivadas.1.1336603954558797.5 1 1.0.5 -1 -0..1176289334565761. la amplitud de los subintervalos y el valor que toma y en t0 . [.5 2 -2 -1.5 0 0.

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

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

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

b_estimation.((9 x . residuals] 3.´ CAP´ ITULO 3. . cond_mean_conf_int.7]]$ linearinterpol(datos). a_conf_int. polinomio de Lagrange y splines c´bicos. v_estimation. v_conf_int.[3. correlation.8. para lo cual a o o haremos uso de la funci´n linearinterpol. means. (%o17) [model.5].2].[6. variances. new_pred_conf_int. o (%i1) (%i2) (%i3) (%o3) load(interpol)$ datos: [[7. minf. a_estimation. a bx ˆ bx (%i17) items_inference(z). statistic.[8.39) charfun2(x. p_value. Interpolaci´n num´rica o e El paquete interpol permite abordar el problema de la interpolaci´n desde tres enfoques: o lineal. hypotheses.[1. distribution.2]. b_conf_int. adc. MATEMATICAS CON MAXIMA 40 4 discrete1 3 2 1 0 -1 -2 -3 -4 140 145 150 155 160 165 170 175 Figura 3. 3) .4: Predicciones y residuos: (ˆ + ˆ i .2]. yi − a − ˆ i ). 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.

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

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

2.%pi]).´ CAP´ ITULO 3. "with points pointsize 3"]])$ .datos]]. o u (%i16) s2(z):=’’%$ (%i17) map(s2.5.0.10].595228723404633.076658794432381] Con esto hemos obtenido dos interpoladores distintos por el m´todo de los splines c´bicos. 2.[7.3.881415315197325.[x.25/7.5: Interpolaci´n: a) lineal y de Lagrange. [gnuplot_curve_styles. ["with lines". 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. cuyo resultado se observa en el apartado b) o o a de la Figura 3. (%i18) plot2d([’(s1(x)).[discrete.’(s2(x)). numer. (%o17) [1. "with lines". b) Splines c´bicos. con e u el siguiente c´digo pedimos su representaci´n gr´fica.

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

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

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

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

su forma es for <var> in <lista> do <expr> y un ejemplo: .5 .625 27.´ CAP´ ITULO 5. done for cont:1 thru 3 step 0. 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) .2 (%o22) (%i23) 1 3. is ya no es necesario: o (%i19) sin(4)< 9/10 and 2^2 = 4. done for z:-5 unless z+2>0 do print(z) . la siguiente o o secuencia aclara algo m´s las cosas: a (%i17) sin(4)< 9/10 . o e Otra variante de for es cuando el contador recorre los valores de una lista. (%o19) true (%i20) if sin(4)< 9/10 then 1.5 . (%o20) 1 En cuanto a los bucles. done [cont. ı. var].5 do (var: cont^3. (%o18) 9 sin(4) < -10 true Pero ante la presencia de un operador l´gico o una sentencia condicional.3 .4 . [cont. 27. for es muy vers´til.375 8.0 15. 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. e ´ o mientras que var s´ la raz´n es que cont es local al bucle.3 (%o21) (%i22) .0] V´ase en este ultimo resultado c´mo la variable cont no queda con valor ninguno asignado.4 . print(var)) . expirando cuando ´ste termina.0 (%o23) (%i24) (%o24) for z:-5 while z+2<0 do print(z) . (%o17) (%i18) is(sin(4)< 9/10).

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->