Está en la página 1de 256

Breve Manual de Maxima

Breve Manual de Maxima


R. Ipanaqu
Departamento de Ciencias - rea de Matemtica Universidad Nacional de Piura

Robert Ipanaqu Chero


Departamento de Ciencias - rea de Matemtica Universidad Nacional de Piura Urb. Miraores s/n, Castilla, Piura PER http://www.unp.edu.pe/pers/ripanaque robertchero@hotmail.com La composicin de BREVE MANUAL DE MAXIMA A se ha hecho en L TEX, usando el editor libre TEXMAKER 1.9.9. Este documento es libre; se puede redistribuir y/o modicar bajo los trminos de la GNU General Public License tal como lo publica la Free Software Foundation. Para ms detalles vase la GNU General Public License en http://www.gnu.org/copyleft/gpl.html Mayo 2010, publicado por el grupo eumednet Grupo de Investigacin de la Universidad de Mlaga, Espaa http://www.eumed.net Hecho el depsito legal en la Biblioteca Nacional de Espaa con Resitro N

ISBN

En memoria de mi padre, Juan A. Ipanaqu Vargas

ndice

Prlogo 1. Obtencin de
1.1. 1.2.

Descarga . . . . . . . . . . . . . . . . . . . . . . . . . . Instalacin . . . . . . . . . . . . . . . . . . . . . . . . .

Maxima

v
1
1 2

2. Funcionamiento de
2.1. 2.2.

Interfaz de cuaderno

Maxima
Maxima

9
9 10

. . . . . . . . . . . . . . . . . . .

Interfaz basada en texto . . . . . . . . . . . . . . . . .

3. Uso del sistema


3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9.

La estructura de

Maxima

12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 17 19 22 23 23 24 25

Cuadernos como documentos

Conguracin de opciones y estilos . . . . . . . . . . . Bsqueda de ayuda . . . . . . . . . . . . . . . . . . . . Reinicio . . . . . . . . . . . . . . . . . . . . . . . . . .

Comentarios . . . . . . . . . . . . . . . . . . . . . . . . Paquetes en

Maxima

. . . . . . . . . . . . . . . . . . .

Advertencias y mensajes . . . . . . . . . . . . . . . . . Interrupcin de clculos . . . . . . . . . . . . . . . . .

4. Clculos numricos
4.1. 4.2. 4.3. 4.4. 4.5. Aritmtica . . . . . . . . . . . . . . . . . . . . . . . . . Resultados exactos y aproximados . . . . . . . . . . . Algunas funciones matemticas . . . . . . . . . . . . . Clculos con precisin arbitraria . . . . . . . . . . . .

26
26 27 30 33 35

Nmeros complejos . . . . . . . . . . . . . . . . . . . .

ii

ndice general

5. Generacin de clculos
5.1. 5.2. 5.3. 5.4. Uso de entradas y salidas previas . . . . . . . . . . . . Denicin de variables . . . . . . . . . . . . . . . . . . Secuencia de operaciones . . . . . . . . . . . . . . . . . Impresin de expresiones sin evaluar . . . . . . . . . .

37
37 39 42 44

6. Clculos algebraicos
6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. Clculo simblico . . . . . . . . . . . . . . . . . . . . . Valores para smbolos . . . . . . . . . . . . . . . . . . Transformacin de expresiones algebraicas . . . . . . . Simplicacin de expresiones algebraicas . . . . . . . . Expresiones puestas en diferentes formas . . . . . . . . Simplicacin con asunciones . . . . . . . . . . . . . . Seleccin de partes de expresiones algebraicas . . . . .

47
47 50 54 56 59 65 66

7. Matemticas simblicas
7.1. 7.2. 7.3. 7.4. 7.5. 7.6. 7.7. 7.8. 7.9. Lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diferenciacin . . . . . . . . . . . . . . . . . . . . . . . Integracin Sumas y Productos . . . . . . . . . . . . . . . . . . . . Operadores relacionales y lgicos Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68
68 70 73 78 81 84 85 88 90 92 96

Solucin de Ecuaciones . . . . . . . . . . . . . . . . . . Ecuaciones diferenciales ordinarias Sistemas de ecuaciones diferenciales ordinarias lineales . . . . . . . . . . . . . . . .

7.10. Series de potencias . . . . . . . . . . . . . . . . . . . . 7.11. Transformada de Laplace

8. Matemticas numricas
8.1. 8.2. Solucin numrica de ecuaciones Integrales numricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97
97 99

9. Funciones y programas
9.1. 9.2. 9.3. Denicin de funciones . . . . . . . . . . . . . . . . . . Reglas de transformacin para funciones . . . . . . . . Funciones denidas a partir de expresiones . . . . . . .

101
101 111 114

10.Listas
10.1. Juntar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2. Generacin de listas 10.3. Eleccin de elementos de una lista

117
117 118 121

ndice general

iii

10.4. Prueba y bsqueda de elementos de una lista 10.5. Combinacin de listas 10.6. Reordenamiento de listas 10.8. Reorganizacin de listas

. . . . .

124 126 127 128 129 130

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.7. Agregar y quitar elementos de una lista 10.9. Funciones adicionales para listas

11.Arrays 12.Matrices
12.1. Generacin de Matrices 12.3. Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Elegir elementos de matrices . . . . . . . . . . . . . . . 12.4. Funciones adicionales para matrices 12.6. Autovalores y autovectores

132 136
136 138 139 144 147 148

12.5. Matrices asociadas a sistemas de ecuaciones . . . . . . . . . . . . . . . . . . . . .

13.Conjuntos
13.1. Generacin de conjuntos . . . . . . . . . . . . . . . . . 13.2. Conversiones entre conjuntos y listas . . . . . . . . . . 13.3. Eleccin de elementos de un conjunto . . . . . . . . . . . . . . . . . . 13.4. Prueba y bsqueda de elementos de un conjunto 13.5. Agregar y quitar elementos de un conjunto

150
150 152 153 154 156 157 157 160

13.6. Reorganizacin de conjuntos . . . . . . . . . . . . . . . 13.7. Operaciones con conjuntos . . . . . . . . . . . . . . . . 13.8. Funciones adicionales para conjuntos . . . . . . . . . .

14.Grcos
14.1. Grcos bsicos . . . . . . . . . . . . . . . . . . . . . . 14.2. Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3. Grcos de puntos y lneas . . . . . . . . . . . . . . . 14.4. Grcos paramtricos y polares . . . . . . . . . . . . . 14.5. Combinacin de grcos . . . . . . . . . . . . . . . . . 14.6. Grcos de supercies tridimensionales . . . . . . . . . 14.7. Grcos de densidad y contornos . . . . . . . . . . . . 14.8. Grcos animados . . . . . . . . . . . . . . . . . . . .

162
163 165 169 172 174 174 179 180

15.Grcos con draw


15.1. Objetos grcos bidimensionales 15.2.1. Opciones locales . . . . . . . . . . . . . . 15.2. Opciones para los objetos grcos bidimensionales . . . . . . . . . . . . . . . . .

183
184 192 192

iv

ndice

15.2.2. Opciones locales genricas . . . . . . . . . . . . 15.2.3. Opciones globales . . . . . . . . . . . . . . . . . 15.2.4. Ejemplos ilustrativos . . . . . . . . . . . . . . . 15.3. Objetos grcos tridimensionales 15.4.1. Opciones locales . . . . . . . . . . . . 15.4. Opciones para objetos grcos tridimensionales . . . . . . . . . . . . . . . . . . . . . 15.4.2. Opciones locales genricas . . . . . . . . . . . . 15.4.3. Opciones globales . . . . . . . . . . . . . . . . . 15.4.4. Ejemplos ilustrativos . . . . . . . . . . . . . . . 15.5. Fijacin de valores para opciones . . . . . . . . . . . . 15.6. Grcos mltiples 15.7. Grcos animados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

194 195 198 203 211 211 212 212 214 217 218 220

16.Archivos y operaciones externas


16.1. Generacin de expresiones y archivos T X . . . . . . . E 16.2. Generacin de archivos HTML . . . . . . . . . . . . . 16.3. Generacin de expresiones Lisp y Fortran . . . . . . .

224
224 228 228

17.Programacin con

17.1. Operadores relacionales y lgicos 17.2. Operadores y argumentos 17.3. Programacin funcional

Maxima

229
. . . . . . . . . . . . 229 232 235 237 . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

17.4. Implementacin del paquete:

ejemplo

. . . . . . . . .

BIBLIOGRAFA

242

Prlogo
Este manual da una introduccin al Software Libre Maxima v5. 21.1, presentndolo como un potente Sistema Algebraico Computacional (Computer Algebraic System, o CAS) cuyo objeto es la realizacin de clculos matemticos, tanto simblicos como numricos; adems de ser expandible, pues posee un lenguaje de programacin propio. Las razones para apostar por el uso de Software Libre pueden deducirse de las cuatro libertades asociadas a este tipo de Software:

libertad de ejecutarlo, para cualquier propsito; libertad de estudiar cmo trabaja, y cambiarlo a voluntad de quien lo usa; libertad de redistribuir copias para ayudar al prjimo; y libertad de mejorarlo y publicar sus mejoras, y versiones modicadas en general, para que se benecie toda la comunidad.
De hecho, las libertades asociadas a todo Software Libre y, en particular, al CAS

Maxima

hacen de ste una formidable herramienta

pedaggica accesible a todos los presupuestos, tanto institucionales como individuales. No obstante, somos sinceros en sealar que no posee toda la versatilidad de sus smiles comerciales; pero el hecho que sea gratuito minimiza tal carencia. Hay que sealar, tambin, que cualquier actualizacin de un Software Libre puede obtenerse sin obstculo alguno y as es posible contar inmediatamente con la ltima versin del mismo. Algo que no sucede con el Software Comercial, a menos que se tenga disponibilidad inmediata de dinero para pagar la actualizacin. La idea de elaborar este manual surge de la necesidad de contar con bibliografa propia acerca de un CAS Libre para trabajar con alumnos de un curso de pregrado, los cuales ya estaban familiarizados con el uso de un CAS Comercial. La experiencia ha sido bastante satisfactoria y quedan en el tintero los borradores para la futura elaboracin de un

vi

Introduccin

libro en el que se plasmen los resultados obtenidos en tal curso. Este manual se compone de diecisiete captulos en los cuales se describen resumidamente las principales caractersticas y las funciones incorporadas en el ncleo de paquete incorporado

Maxima. Sin embargo, en el captulo Maxima.

quince se hace una excepcin y se aborda una breve descripcin del

draw,

pues ste amplia la capacidad grca que Adems,

ofrecen las funciones incorporadas en el ncleo de

en el ltimo captulo se dan los lineamientos generales para la elaboracin de paquetes de funciones. Esto con la nalidad que el usuario obtenga el mximo provecho en el uso de

Maxima.

R. Ipanaqu

Piura, Per

Captulo 1 Obtencin de
Maxima

Maxima
Maxima
en el sistema

puede funcionar en distintos sistemas operativos, entre

ellos diversas variantes de Windows y de GNU/Linux. En este captulo se tratar acerca de la descarga e instalacin de operativo Windows (95 o posterior). El lector interesado en utilizar

Maxima en alguna variante de GNU/Linux, puede acceder a la seccin Download de la web de Maxima y seguir las instrucciones que en ella
se indican.

1.1 Descarga
Maxima se descarga gratuitamente desde la pgina de sourceforge que alberga a una gran cantidad de instaladores de softwares
de cdigo abierto . Debemos destacar que por el hecho de ser gratuito no requiere de ningn password que siempre est asociada con el software comercial (tambin llamado software propietario o ms acertadamente

software privativo ).

La direccin especca donde esta alojado

Maxima

es la siguiente:

http://sourceforge.net/projects/maxima/files
1 Cdigo
abierto (en ingls open source) es el trmino con el que se conoce al

software distribuido y desarrollado libremente. El cdigo abierto tiene un punto de vista ms orientado a los benecios prcticos de compartir el cdigo que a las cuestiones morales y/o loscas las cuales destacan en el llamado software libre.

Cap. 1. Obtencin de Maxima

Figura 1.1: Porcin de la pgina de descarga de

Maxima-5.21.1.exe.

El botn sealado permite la descarga directa de Maxima para Windows.

desde donde puede descargarse el archivo el instalador de

Maxima

Maxima-5.21.1.exe que es

para Windows. Este instalador ocupa 25.3

MB de espacio en memoria. Una vez descargado el instalador se ver un icono, como el que se aprecia en la gura 1.2, en la carpeta donde ste se haya descargado.

1.2 Instalacin
Despus de la descarga se procede a instalar

Maxima, lo cual debe

hacerse siguiendo los pasos que se detallan a continuacin.

Figura 1.2: Icono del instalador de

Maxima-5.21.1.exe.

1. Hacer doble clic sobre el icono del instalador.

Sec. 1.2. Instalacin

2. Si aparece un cuadro como el de la gura 1.3, hacer clic sobre

el botn

Ejecutar .

Figura 1.3: Cuadro de vericacin.

3. Seleccionar el idioma (por defecto esta seleccionado

hacer clic sobre el botn

Aceptar (g.

Espaol)

1.4).

Figura 1.4: Cuadro para seleccionar el idioma.

4. Hacer clic sobre el botn

asistente de instalacin de Maxima (g. 1.5).


5. Seleccionar la opcin

Siguiente del

cuadro Bienvenido al

Licencia. Luego hacer clic en el botn


cuadro (g. 1.6).

Acepto el acuerdo del cuadro Acuerdo de Siguiente mismo del

6. Hacer clic en el botn 1.7).

Siguiente del

cuadro Informacin (g.

7. Seleccionar la carpeta en la cual se quiere instalar Maxima (generalmente se deja la carpeta que aparece por defecto) y luego

Cap. 1. Obtencin de Maxima

Figura 1.5: Cuadro Bienvenido al asistente de instalacin de Maxi-

ma.

Figura 1.6: Cuadro Acuerdo de Licencia.

hacer clic en el botn

peta de Destino (g. 1.8).

Siguiente del

cuadro Seleccione la Car-

8. En el cuadro Seleccione los Componentes desmarcar las casillas idioma

Portugus y Portugus Brasileo Espaol. Esto permite, a su

ya que slo utilizaremos el vez, el ahorro de memoria

(g. 1.9). 9. Seleccionar la carpeta del men Inicio en la cual se quiere ubi-

Sec. 1.2. Instalacin

Figura 1.7: Cuadro Informacin.

Figura 1.8: Cuadro Seleccione la Carpeta de Destino.

car el icono de acceso a

Maxima

(generalmente se deja la car-

peta que aparece por defecto) y luego hacer clic en el botn

Siguiente del
(g. 1.10).

cuadro Seleccione la Carpeta del Men Inicio

10. Hacer clic en el botn

reas Adicionales para que el asistente cree un icono de acceso


directo a

Siguiente del
Instalar del

cuadro seleccione las Ta-

Maxima

en el escritorio (g. 1.11). cuadro Listo para Instalar

11. Hacer clic en el botn

Cap. 1. Obtencin de Maxima

Figura 1.9: Cuadro Seleccione los Componentes.

Figura 1.10: Cuadro Seleccione la Carpeta del Men Inicio.

(g. 1.12). 12. Hacer clic en el botn 1.13).

Siguiente del

cuadro Informacin (g.

13. Por ltimo, hacer clic en el botn

pletando la Instalacin de Maxima (g. 1.14).

Finalizar del

cuadro Com-

Despus de seguir el procedimiento anterior deben haberse instalado: el ncleo de

Maxima

que es el responsable de todos los clculos

Sec. 1.2. Instalacin

Figura 1.11: Cuadro Seleccione las Tareas Adicionales.

Figura 1.12: Cuadro Listo para Instalar.

y permite una interfaz de texto, el entorno grco el entorno grco

wxMaxima que per-

mite una interfaz grca (o interfaz de cuaderno) bastante amigable,

XMaxima

que tambin permite una interfaz gr-

ca (aunque menos amigable que

wxMaxima )

y una aplicacin para

usuarios de habla hispana. Adems, debe haberse creado automticamente, en el escritorio de su ordenador (computadora), el icono de acceso directo al entorno grco

wxMaxima

(g. 1.15).

Cap. 1. Obtencin de Maxima

Figura 1.13: Cuadro Informacin.

Figura 1.14: Cuadro Completando la Instalacin de

Maxima.

Figura 1.15: Icono de acceso directo a wxMaxima.

Captulo 2 Funcionamiento de

Maxima

2.1 Interfaz de cuaderno


utilice un icono o el men de Inicio nalizar texto con entrada para formas grcas de inicializar

Maxima

Maxima

Shift + Enter

salir de

elegir el tem salida del men

Maxima

Funcionamiento de Maxima en una interfaz de cuaderno.

El acceso a una interfaz de cuaderno es factible en un ordenador usado va una interfaz puramente grca (como Windows). En una interfaz de cuaderno, es posible interactuar con en el icono de inicio de

Maxima

creando

documentos interactivos. Para ello el usuario debe hacer doble clic

wxMaxima,

despus de lo cual se desplegar

un cuaderno en blanco. En este cuaderno el usuario digita la entrada

(input), luego presiona (en simultneo) las teclas Shift + Enter para que

Maxima

procese su entrada.

que el usuario ha nalizado su entrada.

Shift

+ Enter indica a Maxima

Maxima etiquetar

Despus de ejecutar una entrada en la entrada con

Maxima

desde un cuaderno,

( %in)

y despus de presionar

+ Shift Enter devolver ( %on) .

la correspondiente salida etiquetada con

10

Cap. 2. Funcionamiento de Maxima

Maxima
El usuario digita cesa la entrada, despus etiqueta la entrada con salida etiquetada con

1+1, luego naliza su entrada con Shift Enter Maxima + .


( %i1) ( %o1)
.

pro-

, y devuelve la respectiva

( %i1) ( %o1)

1+1; 2

Debe recordarse que los cuadernos corresponden al entorno grco

wxMaxima.

El ncleo de

Maxima

es el que realiza realmente los

clculos (seccin 3.1). Para salir de

wxMaxima, el usuario elige el tem salida del respec-

tivo men en la interfaz de cuaderno.

2.2 Interfaz basada en texto


maxima
nalizar texto con comando del sistema operativo para inicializar

; + Enter
quit();

entrada para

Maxima Maxima

salir de

Maxima

Funcionamiento de Maxima en una interfaz basada en texto.

Con una interfaz basada en texto, el usuario interacta con su ordenador digitando texto mediante el teclado. Para inicializar el comando Cuando

maxima

Maxima

en una interfaz basada en texto, se digita

en el prompt del sistema operativo. ha inicializado, imprimir el prompt

Maxima

signica que esta lista para que el usuario haga su entrada. ste puede entonces digitar su entrada, terminndola con

Maxima

( %i1), esto ; + Enter .

procesa la entrada y genera un resultado, el mismo que

etiquetar con

( %o1).

Obsrvese que la mayor parte de los dilogos dados en el libro muestran salidas en la forma que se obtendran con una interfaz de

Sec. 2.2. Interfaz basada en texto

11

cuaderno de

Maxima ; la salida con una interfaz basada en texto luce Maxima, debe digitarse Quit(); en el prompt de la

similar, pero carece de caractersticas tales como caracteres especiales y cambio de tamao de fuente. Para salir de entrada.

Captulo 3 Uso del sistema

Maxima
Maxima

3.1 La estructura de
Maxima wxMaxima XMaxima

ncleo responsable de todos los clculos interfaz de cuaderno que se ocupa de interactuar con el usuario (muy amigable) interfaz grca que se ocupa de interactuar con el usuario (menos amigable que

wxMaxima )

Partes bsicas del Sistema Maxima.

Maxima

es un potente motor de clculo simblico aunque, en su

origen, no destacaba por tener una interfaz grca ms amigable para los usuarios que la simple consola de texto. Con el tiempo este hecho ha ido cambiando y han aparecido distintos entornos de ejecucin que intentan facilitar la interaccin con los usuarios. Entre ellos, estn

XMaxima

wxMaxima.

XMaxima

es la primera interfaz grca que fue desarrollada, es

mantenida ocialmente por el equipo de desarrollo de

Maxima.

En

Windows se instala automticamente. Presenta algunas ventajas como la integracin en formato HTML de manuales de ayuda. Sin embargo, tambin tiene algunas desventajas con respecto a otras inter12

Sec. 3.1. La estructura de Maxima

13

faces ms modernas.

wxMaxima 1 ,

basada en la biblioteca grca

wxwidgets,

gracias

a la cual existen versiones nativas tanto para sistemas operativos GNU/Linux como para Windows. Integra elementos especcos para la navegacin de la ayuda, introduccin de matrices, creacin de grcas, clculo de lmites, derivadas o integrales, etc. Actualmente tambin se instala automticamente en Windows.

Maxima
Un cuaderno que mezcla texto, grcos con entradas y salidas de Maxima.

interfaz de cuaderno con

wxMaxima

documentos interactivos

interfaz basada en texto

texto desde el teclado

Tipos comunes de interfaz con Maxima.

1 wxMaxima

fue desarrollada por Andrej Vodopivec y est disponible en

http://wxmaxima.sourceforge.net

14

Cap. 3. Uso del sistema Maxima

En algunos casos, puede que el usuario no necesite usar la interfaz de cuaderno, y que desee en cambio interactuar directamente con el ncleo de al ncleo.

Maxima. Es posible hacer esto usando la interfaz basada en

texto, en la cual se digita el texto en el teclado y ste va directamente

Maxima
Un dilogo con Maxima usando una interfaz basada en texto.

3.2 Cuadernos como documentos


Los cuadernos de

wxMaxima

permiten crear documentos que pue-

den verse interactivamente en la pantalla o imprimirse en papel. En los cuadernos extensos, es comn tener los captulos, secciones etc., representados cada uno en grupos de celdas. La extensin de estos grupos de celdas es indicada por el botn asociado a la celda dominante que es una celda de estilo ttulo, seccin o subseccin. Un grupo de celdas puede estar abierto o cerrado. Cuando est abierto se puede ver todas sus celdas explcitamente. Pero cuando est cerrado, slo puede verse la celda que encabeza el grupo de celdas.

Sec. 3.2. Cuadernos como documentos

15

Maxima
Un cuaderno de wxMaxima como documento.

Los cuadernos extensos son a menudo distribuidos con muchos grupos de celdas cerradas, para que cuando sean vistos por primera vez el cuaderno muestre solamente una lista de su contenido. Es posible abrir las partes en las que el usuario est interesado haciendo clic sobre el botn apropiado.

Maxima
Haciendo clic sobre el botn que corresponde a la celda dominante se cierra el grupo, dejando slo la primera celda visible.

16

Cap. 3. Uso del sistema Maxima

Maxima
Cuando el grupo est cerrado, el botn que le corresponde aparece relleno en color negro. Haciendo clic sobre este botn se abre nuevamente el grupo.

A cada celda dentro de un cuaderno se le asigna un estilo en particular que indica su rol dentro del cuaderno. La interfaz de

wxMaxima

provee menes y mtodos abreviados

de teclas para insertar celdas con diferentes estilos todos ellos estn disponibles en el ltimo bloque del men

Cell.

Maxima
El recuadro muestra los menes y mtodos abreviados de teclas para insertar celdas con diferentes estilos.

Sec. 3.3. Conguracin de opciones y estilos

17

Maxima
Esto muestra celdas en diferentes estilos. Los estilos no slo denen el formato del contenido de las celdas, sino que tambin su ubicacin y espaciado.

3.3 Conguracin de opciones y estilos


Como se vio en la seccin 3.2 los cuadernos pueden editarse a manera de documentos.

wxMaxima
del men

incorpora una conguracin pre-

denida para los estilos de los ttulos, secciones, etc. Sin embargo, es posible cambiar algunos aspectos de dicha conguracin haciendo clic en la opcin

Preferencias

Editar.

Maxima
Primer paso para congurar las opciones y estilos.

tana y

Preferencias se desplega la venConguracin de wxMaxima que incorpora dos pestaas: Opciones Estilo.
Despus de hacer clic en la opcin

18

Cap. 3. Uso del sistema Maxima

Hacer coincidir los parntesis en los controles de texto (de la pestaa Opciones), Maxima cierra automticamente cualquier parntesis que
cin se abra en una celda de estilo Input. Al desactivar esta casilla, y ha-

Por ejemplo, cuando est activa la casilla de vericacin de la op-

cer clic en

ningn parntesis sino que esperar a que el usuario lo haga. En la pestaa tante intuitiva.

Aceptar ,

Maxima

no volver a cerrar automticamente

Estilo

se presenta una lista de todos los estilos que

pueden congurarse a gusto del usuario y la forma de hacerlo es bas-

Maxima
Activando o desactivando las casillas de vericacin se cambia la conguracin de las opciones.

Por ejemplo, congurando los estilos con los valores indicados en las siguientes tablas se obtienen cuadernos con un aspecto elegante.

Fuentes Fuente predeterminada Fuente matemtica

Tipo Courier New (12) Courier New (12)

Sec. 3.4. Bsqueda de ayuda

19

Estilos Nombre de funciones Celda de texto Celda de subseccin Celda de seccin Celda de ttulo Fondo de celda de texto Fondo

Color rgb(0,0,0) rgb(0,0,0) rgb(188,73,18) rgb(188,73,18) rgb(54,95,145) rgb(252,250,245) rgb(252,250,245)

Fuente Courier New Tahoma Tahoma Tahoma Tahoma

Aspecto Gruesa, Itlica Normal Gruesa Gruesa Gruesa

Tam. 12 12 16 18 24

Maxima
Un cuaderno de wxMaxima como documento, despus de haber editado la conguracin de estilo.

3.4 Bsqueda de ayuda


Todas las funciones incorporadas en formas. La ms usada es desde el men que da acceso a la opcin

Maxima

estn descritas en el

manual en lnea del usuario, el cual puede ser consultado en diferentes

Ayuda, de la barra de menes, Ayuda de Maxima la cual sirve como un

20

Cap. 3. Uso del sistema Maxima

punto de entrada a la gran cantidad de documentacin en lnea para

Maxima.

Maxima
Un ejemplo de bsqueda de informacin bsica sobre una funcin en el la

ndice

de

Ayuda

de Maxima

Para buscar ayuda desde un cuaderno de trabajo puede utilizarse la funcin

describe2 .

describe(string )

encuentra el elemento, si existe, cuyo ttulo coincide exactamente con culas y minsculas)

string

(ignorando la diferencia entre mays-

describe(string,exact ) describe(string,inexact )

equivale a

describe(string )

encuentra todos los elementos documentados que contengan ttulos

string

en sus

Sintaxis de la funcin funciones de Maxima.

describe,

la cual permite recibir informacin de las

2 describe

no evala su argumento. La funcin

cuentra la documentacin solicitada y

false

describe

devuelve

true

si en-

en caso contrario.

Sec. 3.4. Bsqueda de ayuda

21

?name ??name

equivale a equivale a

describe("name")

describe("name",inexact)

Otras formas de recibir informacin.

Maxima
Esta sentencia da informacin de la funcin incorporada

max.

( %i1)
- -Funcin:

describe("max"); max(< x_1 >, . . . , < x_n >)


< x_1 >
hasta

Devuelve un valor simplicado de la mayor de las expresiones desde

< x_n >.

Si `get(trylevel, maxmin)' es

2 o ms, `max' aplica la simplicacin `max(e, e)

> |e|'.

Si

`get(trylevel, maxmin)' es 3 o ms, `max' intenta eliminar las expresiones que estn entre dos de los argumentos dados; por ejemplo, `max(x, 2

x, 3 x) > max(x, 3 x)'. Para asignar el

valor 2 a `trylevel' se puede hacer `put(trylevel, 2, maxmin)'. There are also some inexact matches for `max'. Try `??max' to see them.

( %o1)

true

Maxima
Esta sentencia encuentra todos los elementos documentados que contienen en sus ttulos. No devuelve

"plus"

true

false

hasta que el usuario seleccione las op-

ciones que desee consultar (aqu las opciones disponibles son: 0,1,2,3, all y none).

( %i2)
lineal).

describe("plus",inexact);

0: doscmxplus (Funciones y variables para las matrices y el lgebra

1: poisplus (Series de Poisson) 2: region_boundaries_plus (Funciones y variables para worldmap) 3: trigexpandplus (Funciones y variables para trigonometra) Enter space-separated numbers, `all' or `none':

22

Cap. 3. Uso del sistema Maxima

Maxima
Una vez elegidas las opciones (en este caso 0 y 2) la sentencia devuelve

true.

( %i2)
lineal).

describe("plus",inexact);

0: doscmxplus (Funciones y variables para las matrices y el lgebra

1: poisplus (Series de Poisson) 2: region_boundaries_plus (Funciones y variables para worldmap) 3: trigexpandplus (Funciones y variables para trigonometra) Enter space-separated numbers, `all' or `none': 0 2; - -Variable opcional: doscmxplus Valor por defecto: `false'. Cuando `doscmxplus' vale `true', las operaciones entre escalares y matrices dan como resultado una matriz. - -Funcin :

region_boundaries_plus(< x1 >, < y1 >, < x2 >, < y2 >)

Detecta los segmentos poligonales almacenados en la variable global `boundaries_array' con al menos un vrtice dentro del rectngulo denido por los extremos izquierdo- y Ejemplo. ( %i1) load(worldmap)$; ( %i2) region_boundaries(10.4,41.5,20.7,35.4); ( %o2) [1846, 1863, 1864, 1881, 1888, 1894] ( %i3) draw2d(geomap( %))$

(< x1 >, < y1 >)

-superior

(< x2 >, < y2 >)

-inferior derecho-.

( %o2)

true

3.5 Reinicio
La forma brusca de reiniciar

Maxima

es saliendo de

obstante, en muchos casos resulta til reiniciar

Maxima. No Maxima sin salir de

Sec. 3.6. Comentarios

23

Maxima. Para reiniciar Maxima sin salir de Maxima Reiniciar Maxima del men Maxima.

se elige la opcin

Maxima
Reiniciando Maxima en una interfaz de cuaderno.

3.6 Comentarios
Los comentarios son toda una serie de caracteres que no afectan los clculos. En

Maxima

los comentarios se escriben entre las marcas

/. /comentario /
con esta sintaxis

comentario

es inter-

pretado como un comentario


Escribiendo comentarios.

Maxima
Aqu se muestra un clculo y un comentario.

( %i3) ( %o3)

4+5 /*esto es una suma*/; 9

3.7 Paquetes en

Maxima
Maxima es que es un

Una de las caractersticas ms importantes de

sistema extensible, hay una cierta cantidad de funciones incorporadas

24

Cap. 3. Uso del sistema Maxima

en

Maxima

pero, usando el lenguaje de programacin de

Maxima,

siempre es posible aadir ms funciones. Para muchos tipos de clculos, lo incorporado en la versin estndar de

Maxima

ser suciente. Sin embargo, si se trabaja en particu-

lar en un rea especializada, es posible encontrarse en la necesidad de utilizar ciertas funciones no incorporadas en

Maxima.

En tales casos, podra ser factible encontrar (o elaborar) un package (paquete) de funciones de que sean necesarias.

Maxima

que contenga las funciones

load(paquete )
Leyendo paquetes de Maxima.

lee un paquete de

Maxima

Si el usuario quiere usar las funciones de un paquete en particular, primero debe inicializar el paquete en

Maxima.

Maxima
Con estas sentencias se est inicializando y utilizando una funcin de un paquete en particular de Maxima.

( %i4) ( %i5) ( %o5)

load(simplex); minimize_lp(x+y,[3x+2y>2,x+4y>3]); 9 7 1 [ , [y = , x = ]] 10 10 5

El hecho de que

Maxima

ca que las posibilidades de

Maxima

pueda extenderse usando paquetes signison ilimitadas. En lo que al uso

concierne, no hay en realidad ninguna diferencia entre las funciones denidas en paquetes y las funciones incorporadas en

Maxima.

3.8 Advertencias y mensajes


Maxima
sigue el trabajo del usuario silenciosamente, dando salida solamente cuando ste lo requiere. Sin embargo, si tiende, imprimir un mensaje de advertencia.

Maxima

se

percata de algo que se pretende hacer y que denitivamente no en-

Sec. 3.9. Interrupcin de clculos

25

Maxima
La funcin para calcular la raz cuadrada debe tener solamente un argumento.

Maxima imprime un mensaje para advertir que, en este caso, se ha errado en el


nmero de argumentos.

( %i6)

sqrt(4,5);

Wrong number of arguments to sqrt - - an error. To debug this try: debugmode(true);

3.9 Interrupcin de clculos


Probablemente habr veces en que el usuario desee detener Maxima en medio de un clculo. Tal vez l se da cuenta que pidi a Maxima hacer un clculo incorrecto. O quizs el clculo tarda demasiado, y quiere saber que es lo que pasa. La forma en que se interrumpe un clculo en

Maxima

depende de qu clase de interfaz est utilizando.

Clic en el botn

Ctrl C +

interfaz de cuaderno interfaz basada en texto

Formas de interrumpir clculos en Maxima.

Captulo 4 Clculos numricos


4.1 Aritmtica
El usuario puede hacer aritmtica con con una calculadora

Maxima

tal y como lo hara

Maxima
Aqu tenemos la suma de dos nmeros.

( %i1) ( %o1)

5.6+3.7; 9.3

Maxima
Con

indicamos el producto de dos nmeros.

( %i2) ( %o2)

5.6*3.7; 20.72

Maxima
Es posible digitar operaciones aritmticas haciendo uso de los parntesis.

( %i3) ( %o3)

(2+3)^3-4*(6+7); 73

26

Sec. 4.2. Resultados exactos y aproximados

27

x ^y

x y x x /y x y z x +y +z

potencia menos divisin producto suma

Operaciones aritmticas en Maxima.

Las operaciones aritmticas en por ejemplo, signica

las convenciones estndares de la matemtica. Como es usual,

2+3/7, 2+(3/7), y no (2+3)/7. El usuario siempre pue-

Maxima se agrupan de acuerdo con

de controlar la forma de agrupar explcitamente usando los parntesis.

4.2 Resultados exactos y aproximados


Una calculadora electrnica hace todos sus clculos con una precisin determinada, digamos de diez dgitos decimales. Con en cambio, es posible obtener resultados exactos.

Maxima,

Maxima
Maxima da un resultado exacto para

2300 .

( %i4) ( %o4)

2^300; 20370359763344860862684456884093781610514683936 65936250636140449354381299763336706183397376

El usuario puede pedir a funcin

Maxima
numer

que devuelva un resultado apro-

ximado, tal como lo dara una calculadora, para ello puede usar la

float

o la variable

o una combinacin de ambos.

Maxima
Esto da un resultado numrico aproximado.

( %i5) ( %o5)

2^300,float; 2,0370359763344861 1090

28

Cap. 4. Clculos numricos

float(expr )

da un valor numrico aproximado para ciertas

expr

expr , float expr , numer


float(expr ), numer

equivale a

float(expr )

da un valor numrico aproximado para ciertas

expr

da un valor numrico aproximado para cualquier tante

expr

que no sea una cons-

Obteniendo aproximaciones numricas.

Maxima
Esta forma tambin da un resultado numrico aproximado.

( %i6) ( %o6)

float(2^300); 2,0370359763344861 1090

Maxima
Para el clculo previo la constante

numer

no es til.

( %i7) ( %o7)

2^300,numer; 20370359763344860862684456884093781610514683936 65936250636140449354381299763336706183397376

Maxima
Maxima puede dar resultados en trminos de nmeros racionales.

( %i8) ( %o8)

1/3+2/7; 13 21

Maxima
En este caso, tanto con aproximado.

float

como con

numer,

se obtiene un resultado numrico

( %i9) ( %o9)

1/3+2/7,float; 0.61904761904762

Sec. 4.2. Resultados exactos y aproximados

29

( %i10) ( %o10)

1/3+2/7,numer; 0.61904761904762

Cuando el usuario digita un entero como 7,

Maxima

asume que es

exacto. Si digita un nmero como 4.5, con un punto decimal explcito,

Maxima

asume que desea efectuar clculo numrico aproximado.

Maxima
Esto es tomado como un nmero racional exacto, y es llevado a una fraccin irreducible.

( %i11) ( %o11)

26/78; 1 3

Maxima
Cuando el usuario digita un nmero con un punto decimal explcito, Maxima produce un resultado numrico aproximado.

( %i12) ( %o12)

26.7/78; 0.34230769230769

Maxima
Aqu, la presencia del punto decimal seguido del cero hace que Maxima d un resultado numrico aproximado.

( %i13) ( %o13)

26.0/78; 0.33333333333333

Maxima
Cuando cualquier nmero en una expresin aritmtica es digitado con un punto decimal seguido del cero, el usuario obtiene un resultado numrico aproximado.

( %i14) ( %o14)

5.0+9/78-5/8; 4.490384615384615

30

Cap. 4. Clculos numricos

4.3 Algunas funciones matemticas


Maxima
incluye una gran coleccin de funciones matemticas. A continuacin se mencionan las ms comunes.

sqrt(x ) exp(x ) log(x ) sin(x ), cos(x ), tan(x ), cot(x ), sec(x ), csc(x ) asin(x ), acos(x ), atan(x ), acot(x ), asec(x ), acsc(x )

raz cuadrada exponencial

( x) (loge x)

(ex )

logaritmo neperiano

funciones trigonomtricas (con argumentos en radianes) funciones trigonomtricas inversas

n! n !!
abs(x ) round(x ) mod(n,m ) floor(x ) random(x ) max(x,y , . . .), min(x,y , . . .) ifactor(n )

factorial de

(producto de los enteros

1, 2, . . . , n) 13. . .n (n
(

impar)

24. . .n

par)

valor absoluto redondeo

mdulo

entre

m)

(resto de la divisin de

mayor entero de

x
r, tal que 0 0 < r < x, si x R+

nmero seudo aleatorio

r < x,

si

xN

mximo, mnimo de

x,y,. . .

factores primos de

Algunas de las funciones matemticas ms comunes.

Los argumentos de todas las funciones en

Maxima se colocan Maxima


em-

entre parntesis. Los nombres de las funciones incorporadas en

piezan con letra minscula.


Dos puntos importantes acerca de funciones en Maxima.

Sec. 4.3. Algunas funciones matemticas

31

Maxima
Esto da

loge 15,7.

( %i15) ( %o15)

log(15.7); 2.753660712354262

Maxima
Maxima no tiene denida una funcin para el logaritmo de base 10 u otras bases.
Para salvar esta dicultad el usuario puede hacer uso de la igualdad matemtica

logb x = loge b . As, por ejemplo, lo siguiente devuelve un resultado numrico para e log2 1024.

log x

( %i16) ( %o16)

log(1024)/log(2),numer; 10.0

Maxima
Esto devuelve

64

como un nmero exacto.

( %i17) ( %o17)

sqrt(64); 8

Maxima
Esto da un valor numrico aproximado para

6.

( %i18) ( %o18)

sqrt(6),numer; 2.449489742783178

Maxima
La presencia explcita de un punto decimal seguido de un cero le indica a Maxima que d un resultado numrico aproximado.

( %i19) ( %o19)

sqrt(6.0); 2.449489742783178

32

Cap. 4. Clculos numricos

Maxima
En este caso Maxima devuelve un nmero en forma simblica exacta.

( %i20) ( %o20)

sqrt(6); 6

Maxima
Aqu tenemos un resultado entero exacto para

40 39 . . . 1.

( %i21) ( %o21)

40!; 815915283247897734345611269596115894272000000000

Maxima
Esto da un valor numrico aproximado del factorial.

( %i22) ( %o22)

float(40!); 8,1591528324789768 1047

%e %i inf minf infinity und %pi

e 2,718281828459045 i = 1
representa al innito real positivo representa al innito real negativo representa al innito complejo representa un resultado indenido

3,141592653589793

Algunas constantes matemticas comunes.

Maxima
Este es el valor numrico de

2 .

( %i23) ( %o23)

%pi^2,numer; 9.869604401089358

Sec. 4.4. Clculos con precisin arbitraria

33

Maxima
Esto devuelve el valor exacto para

sen(/2).

( %i24) ( %o24)

sin( %pi/2); 1

4.4 Clculos con precisin arbitraria


Cuando el usuario utiliza

float, numer

ambos para obtener un resultado numrico, posible indicar a

Maxima

o una combinacin de devuelve el re-

sultado con un nmero jo de cifras signicativas. No obstante, es

Maxima

las cifras signicativas con las que se desea

operar. Esto permite obtener resultados numricos en cualquier grado de precisin.

Maxima

con

fpprec :n $ bfloat(expr ) fpprec :n $ expr , bfloat

valor numrico de

expr

calculado con

dgitos de precisin (el valor por de-

fecto es 16)

Evaluacin numrica con precisin arbitraria.

Maxima
Esto devuelve el valor numrico de

con un nmero jo de cifras signicativas.

( %i25) ( %o25)

float( %pi); 3.141592653589793

Maxima
Esto devuelve

con 50 dgitos.

( %i26) ( %o27)

fpprec : 50$ bfloat( %pi); 3.141592653589793238462643383279502884197169399 3751b0

34

Cap. 4. Clculos numricos

Cabe mencionar que el smbolo de dolar que aparece despus del nmero que indica la cantidad de dgitos signicativos se utiliza, en general, para nalizar una sentencia y, a diferencia del punto y coma, no permite que aparezca ninguna salida en pantalla (subsec. 5.3). Al realizar cualquier tipo de clculo numrico el usuario puede introducir pequeos errores de redondeo en sus resultados. Cuando se aumenta la precisin numrica estos errores se hacen ms pequeos. Asegurarse que se obtiene la misma respuesta al aumentar la precisin numrica es a menudo una buena forma de vericar los resultados.

Maxima
La cantidad

163 esta bastante prxima a ser entera. Para vericar que el re-

sultado no es, de hecho, un entero, usted tiene que usar la precisin numrica suciente.

( %i28) ( %o29)

fpprec : 40$ bfloat(exp( %pi sqrt(163))); 2.625374126407687439999999999992500725972b17

El usuario que desee, por ejemplo, visualizar de 200 cifras signicativas, o

con una precisin

21000

con el total de las cifras, utilizan-

do las sentencias aqu descritas encontrar que la salida se muestra truncada en la parte central, en la cual aparece un nmero que indica la cantidad de dgitos faltantes.

Maxima
Esto devuelve una salida de

con 200 dgitos, la cual ha sido truncada. El dato

entre los corchetes indica que se han obviado 443 dgitos

( %i30) ( %o31)

fpprec : 200$ bfloat( %pi); 3.1415926535897932384626433832[443 digits]88575 27248912279381830119491b0

Para obtener una salida completa se selecciona ascii como el algoritmo de salida matemtica de la opcin Cambiar pantalla 2D del men Maxima y luego se ejecutan las sentencias de ( %i30) . Tngase presente que el algoritmo de salida matemtica, previamente seleccionado (

ascii),

prevalecer hasta que el usuario vuelva a

seleccionar como algoritmo de salida matemtica a

xml.

Sec. 4.5. Nmeros complejos

35

Maxima
Seleccionando

ascii

como el algoritmo de salida.

Maxima
Despus de cambiar el algoritmo de salida matemtica se devuelve la salida 200 dgitos.

con

( %i32) ( %o33)

fpprec : 200$ bfloat( %pi); 3.141592653589793238462643383279502884197169399 37510582097494459230781640628620899862803482534 21170679821480865132823066470938446095505822317 25359408128481117450284102701938521105559644622 948954930382b0

4.5 Nmeros complejos


Es posible ingresar nmeros complejos en la constante

%i,

igual a

Maxima

con slo incluir

1.

Maxima
Esto devuelve como resultado el nmero imaginario

2i.

( %i34) ( %o34)

sqrt(-4); 2 %i

36

Cap. 4. Clculos numricos

Maxima
Esto devuelve la divisin de dos nmeros complejos.

( %i35) ( %o35)

(8 + 4 %i)/(1 + %i), rectform; 6 %i 2

Maxima
Aqu tenemos el valor numrico de un exponencial complejo.

( %i36) ( %o36)

exp(11 + 5 %i), numer; 16984,02989166794 57414,76791532402 %i

x + %iy realpart(z ) imagpart(z ) conjugate(z ) cabs(z ) carg(z )

el nmero complejo parte real parte imaginaria complejo conjugado mdulo de

x+iy

en

el argumento

|z|ei

Operaciones con nmeros complejos.

Captulo 5 Generacin de clculos


5.1 Uso de entradas y salidas previas
Al realizar clculos, muchas veces se necesita usar expresiones previamente ingresadas u obtenidas. En

Maxima,

_ y % siempre hacen

referencia a la ltima expresin de entrada y salida, respectivamente.

la ltima expresin de entrada la ltima expresin de salida la expresin de la entrada la expresin de la salida la expresin de la rior

% %in %on %th(i )

%in
salida ante-

%on

i -sima

Formas de hacer referencia a expresiones de entrada y salida previas.

Para efectos didcticos, a partir de esta seccin se supone un reinicio de

Maxima

(sec. 3.5).

Maxima
Aqu se tienen las expresiones de la primera entrada y salida.

( %i1) ( %o1)

5^3; 125

37

38

Cap. 5. Generacin de clculos

Maxima
Esto agrega 6 a la expresin de la ltima salida.

( %i2) ( %o2)

%+6; 131

Maxima
Esto utiliza las dos expresiones de las salidas previas.

( %i3) ( %o3)

5+ %o1+ %; 261

Maxima
Esto suma las expresiones de las salidas 1 y 3.

( %i4) ( %o4)

%o1+ %o3; 386

Maxima
Aqu se eleva al cuadrado la expresin de la salida 2.

( %i5) ( %o5)

%o2^2; 17161

Si se utiliza una interfaz basada en texto en

Maxima, entonces las

lneas sucesivas de entradas y salidas aparecern siempre en orden. Sin embargo, si se utiliza una interfaz de cuaderno, varias lneas sucesivas de entradas y salidas no necesariamente aparecen en orden. Es posible, por ejemplo, volver atrs e insertar el clculo siguiente dondequiera que se desee en el cuaderno. Tngase en cuenta que % siempre invoca el ltimo resultado que

Maxima

gener. ste puede o

no ser el resultado que aparece inmediatamente encima de su actual posicin en el cuaderno. Con una interfaz de cuaderno, la nica manera de saber cundo un resultado particular fue generado es mirar la etiqueta de

( %on)

que tiene. Como es posible insertar y suprimir en

Sec. 5.2. Denicin de variables

39

todas partes en un cuaderno, de acuerdo a la necesidad del usuario, el ordenamiento de los resultados, por lo general, no tiene ninguna relacin con el orden en el cual los resultados fueron generados.

5.2 Denicin de variables


Cuando se efectan clculos extensos, muchas veces es conveniente dar nombre a los resultados intermedios. De igual modo que en las matemticas tradicionales o en otros lenguajes de programacin, es posible hacer esto introduciendo

variables

con un nombre especco.

Maxima
Esto inicializa el valor de la variable x con 6.

( %i6) ( %o6)

x:6; 6

Maxima
Donde quiera que aparezca x, Maxima la reemplaza por su valor 6.

( %i7) ( %o7)

x^3-25 191

Maxima
Esto asigna un nuevo valor para x.

( %i8) ( %o8)

x:11+5 16

Maxima
pi es inicializada con el valor numrico de

con 20 dgitos de exactitud.

( %i9) fpprec:20$ ( %i10) pi : %pi, bfloat; ( %o10) 3.1415926535897932385b0

40

Cap. 5. Generacin de clculos

Maxima
Aqu esta el valor de

sqrt(pi).

( %i11) ( %o11)

sqrt(pi) 1.7724538509055160273b0

x : valor x : y : valor

asigna un valor a la variable

x x
e

asigna un valor a las variable

y
e

kill(x ) kill(x ,y ) values


Manipulacin de variables.

x quita cualquier valor asignado a x


quita cualquier valor asignado a ha asignado un valor

muestra las variables a las que se les

Es muy importante recordar que los valores asignados a las variables son permanentes. Una vez que el usuario ha asignado un valor a una variable en particular, el valor ser almacenado hasta que ste lo remueva explcitamente. El valor, claro est, desaparecer si el usuario inicia una nueva sesin con

Maxima.

Olvidarse de las deniciones hechas es la causa ms comn de errores al usar

Maxima.

Si el usuario pusiera

que ste siempre quiere que

tenga el valor

5,

x:5, Maxima

asume

hasta o a menos que

se le indique explcitamente otra cosa. Para evitar los errores, deben quitarse los valores denidos en cuanto se haya terminado de usarlos.

Quite valores que asigne a las variables en cuanto termine

de usarlos.
Un principio til al usar Maxima.

Maxima
Inicializando el valor de la variable y con 9.

( %i12) ( %o12)

y:9; 9

Sec. 5.2. Denicin de variables

41

Maxima
Aqu se muestran todas las variables que tienen un valor asignado.

( %i13) ( %o13)

values; [x, ,y]

Maxima
Sentencia para quitar el valor asignado a la variable x.

( %i14) ( %o14)

kill(x); done

Maxima
Sentencia para quitar el valor asignado a todas las variables.

( %i15) ( %o15)

kill(values); done

Las variables que el usuario dene pueden tener cualquier nombre. No hay lmite para la longitud de sus nombres. Un inconveniente, sin embargo, es que los nombres de las variables nunca pueden empezar con nmeros. Por ejemplo,

x3

puede ser una variable, pero

corresponde a una sintaxis incorrecta en

Maxima.

3x

Maxima
He aqu cuatro variables diferentes.

( %i16) ( %o16) ( %i17) ( %o17) ( %i18) ( %o18) ( %i19) ( %o19)

EstoEsUnaVariable:4/3; 4 3 Esto_Es_Una_Variable:5^3; 125 estoesunavariable:8; 8 esto_es_una_variable:sqrt(7); 7

42

Cap. 5. Generacin de clculos

Maxima
Con

values visualizamos las nuevas variables a las que se les ha asignado un valor.

( %i20) ( %o20)

values; [EstoEsUnaVariable,Esto_Es_Una_Variable, estoesunavariable,esto_es_una_variable]

Maxima
Es posible realizar operaciones diversas con estas variables.

( %i21) ( %o21)

(Esto_Es_Una_Variable^2+esto_es_una_variable* estoesunavariable)/EstoEsUnaVariable; 3(8 7 + 15625) 4

Maxima
Con

kill(all)

tambin se quita el valor asignado a todas las variables.

( %i22) ( %o22)

kill(all); done

Maxima
Esta vez

values

no encuantra ninguan variable con valor asignado.

( %i23) ( %o23)

values; []

5.3 Secuencia de operaciones


Al realizar clculos con

Maxima,

usualmente se lo hace mediante

una secuencia de pasos. Si el usuario desea puede realizar cada paso en una lnea separada. A veces, sin embargo, es conveniente ingresar varios pasos en una misma lnea. Es posible hacer esto simplemente separando cada una de las partes ingresadas con punto y coma (si

Sec. 5.3. Secuencia de operaciones

43

quiere verse las salidas en pantalla) o con signo de dolar (si no quiere verse salida alguna).

expr1 ; expr2 ; . . . ; exprn ; expr1 $ expr2 $ . . . $ exprn $ expr1 $ expr2 $ . . . $ exprn ;

hace varias operaciones y da el resultado de todas ellas hace varias operaciones y no muestra ningn resultado hace varias operaciones y da el resultado de la ltima lnea

Formas de hacer secuencias de operaciones en Maxima.

Maxima
Esto realiza tres operaciones en una misma lnea y muestra todos los resultados.

( %i24) ( %o24) ( %o25) ( %o26)

x:3;y:4;z:x+y; 3 4 7

Maxima
Esto realiza tres operaciones en una misma lnea sin mostrar resultados.

( %i27)

x:3 $ y:4 $ z:x+y $

Maxima
Esto realiza tres operaciones en una misma lnea y muestra el resultado de la ltima operacin.

( %i30) ( %o32)

x:3 $ y:4 $ z:x+y; 7

Si el usuario naliza su entrada con un signo de dolar, esto es interpretado por

Maxima

como si estuviera ingresando una secuencia

de operaciones con un signo de dolar al nal; as que tiene el efecto

44

Cap. 5. Generacin de clculos

de hacer que

Maxima

calcule las operaciones especicadas, pero no

muestre la salida.

expr $
Inhibiendo la salida.

realiza una operacin, pero no muestra la salida

Maxima
Aadiendo un signo de dolar al nal de la lnea se le indica a Maxima que no muestre la salida.

( %i33)

x:47+5$

Maxima
Usando

se puede visualizar la salida anterior.

( %i34) ( %o34)

% 52

5.4 Impresin de expresiones sin evaluar


El operador comilla simple evita la evaluacin. Aplicado a un smbolo, la comilla simple evita la evaluacin del smbolo. Aplicado a la invocacin de una funcin, la comilla simple evita la evaluacin de la funcin invocada, aunque los argumentos de la funcin son evaluados (siempre y cuando la evaluacin no se evite de otra manera). Aplicado a una expresin con parntesis, la comilla simple evita la evaluacin de todos los smbolos y llamadas a funciones que hayan en la expresin.

Maxima
Esto asigna valores a las variables a y b.

( %i35)

a:45$ b:56$

Sec. 5.4. Impresin de expresiones sin evaluar

45

'a 'f (x ) '(expr )

evita la evaluacin del smbolo

evita la evaluacin de la funcin , pero no de sus argumentos evita la evaluacin de todos los smbolos y llamadas a funciones que hayan en la expresin

a f

expr

Evitando la evaluacin.

Maxima
El operador comilla simple (') aplicado a la variable a evita la evaluacin de sta.

( %i37) ( %o37)

'a a

Maxima
El operador ' aplicado a la funcin

integrate

evita la evaluacin de sta.

( %i38) ( %o38)

'integrate(x^3,x);
x3 dx

Maxima
Un uso interesante del operador '.

( %i39) ( %o39)

'integrate(x^3,x)=integrate(x^3,x); x4 x3 dx = 4

Maxima
El operador ' no evita la evaluacin de los argumentos de una funcin.

( %i40) ( %o40)

'integrate((2+3)*x^3,x);
5 x3 dx

46

Cap. 5. Generacin de clculos

Maxima
El operador ' aplicado a una expresin.

( %i41) ( %o41)

'(2*sqrt(a)+b*integrate(x^3,x)); b x3 dx + 2 a

Maxima
Otro uso interesante del operador '.

( %i42) ( %o42)

'(2*sqrt(a)+b*integrate(x^3,x))=(2*sqrt(a)+ b*integrate(x^3,x)); b x3 dx + 2 a = 14x4 + 6 5

Captulo 6 Clculos algebraicos


6.1 Clculo simblico
Una de las caractersticas importantes de nejar frmulas algebraicas as como nmeros.

Maxima

es que puede

hacer clculos simblicos y numricos. Esto signica que puede ma-

Maxima
He aqu un tpico clculo numrico.

( %i1) ( %o1)

4 + 36 1; 39

Maxima
Este es un clculo simblico.

( %i2) ( %o2)

7 x 3 x + 6; 4x+6

Clculo numrico Clculo simblico


Clculo simblico y numrico.

4 + 36 1 39 7x 3x + 6 4x + 6

47

48

Cap. 6. Clculos algebraicos

Maxima
El usuario puede digitar cualquier expresin algebraica en Maxima.

( %i3) ( %o3)

x3 + 2 x 1; x3 + 2 x 1

Maxima
Maxima realiza automticamente simplicaciones algebraicas bsicas. Aqu combina a x2 y a 4x2 para dar 3x2 .

( %i4) ( %o4)

x2 + x 4 x2; x 3 x2

Es posible digitar cualquier expresin algebraica usando los operadores enumerados en la seccin 4.1. No debe olvidarse ingresar el asterisco para el producto, por ejemplo:

x y, de lo contrario Maxima

asumir que se trata de una sola variable.

Maxima
Maxima reordena y combina trminos usando las reglas estndares del lgebra.

( %i5) ( %o5)

x y + 2 x2 y + y2 x2 2 y x; x2 y2 + 2 x2 y x y

Maxima
He aqu otra expresin algebraica.

( %i6) ( %o6)

(x + 2 y + 1) (x 2)2;; (x 2)2 (2 y + x + 1)

Maxima
La funcin

expand

ampla productos y potencias.

( %i7) ( %o7)

expand( %); 2x2 y 8xy + 8y + x3 3x2 + 4

Sec. 6.1. Clculo simblico

49

Maxima
factor
hace lo inverso de

expand.

( %i8) ( %o8)

factor( %); (x 2)2 (2y + x + 1)

Cuando se digita expresiones complicadas, es importante poner los parntesis en los lugares correctos. As, por ejemplo, debe dar la expresin

x4y

en la forma

x(4y).

Si no colocan los parntesis, se

interpretar como

x4 y .

Maxima
He aqu una frmula ms complicada, que requiere de varios parntesis.

( %i9) ( %o9)

sqrt(2)/9801 (4 n)! (1103 + 26390 n)/(n!4 + 1); 2 (26390 n + 1103) (4 n)! 9801 (n!4 + 1)

Cuando el usuario digita una expresin,

Maxima

aplica autom-

ticamente su gran repertorio de reglas para transformar las expresiones. Estas reglas incluyen las reglas estndares del lgebra, tales como

x x = 0,

junto con reglas mucho ms sosticadas.

Maxima
Maxima utiliza reglas estndares del lgebra para sustituir

( x + 1)4

por

(x+1)2 .

( %i10) ( %o10)

sqrt(x + 1)4; 2 (x + 1)

Maxima
Maxima no conoce ninguna regla para esta expresin, as que deja expresin en
la forma original que usted le dio.

( %i11) ( %o11)

log(cos(x) + 1); log (cos x + 1)

50

Cap. 6. Clculos algebraicos

6.2 Valores para smbolos


Cuando

Maxima

transforma una expresin por ejemplo

x+x

en

2 x,

est tratando la variable

en forma puramente simblica o for-

mal. En tales casos, expresin.

es un smbolo que puede representar cualquier

A menudo, sin embargo, se necesita sustituir un smbolo como aunque puede que sea una expresin. Para sustituir el smbolo

por un valor determinado. Algunas veces este valor ser un nmero;

x,

que aparece en la expresin

con un valor determinado; el usuario puede utilizar la funcin una sintaxis alternativa de la misma.

1 + 2x, ev o

ev(expr, x=valor ) ev(expr, x=valor, y=valor )

reemplaza

exp

por

valor

en la expresin

realiza varios reemplazos

expr, x=valor expr, x=valor, y=valor

reemplaza

exp

por

valor

en la expresin

realiza varios reemplazos

Sustitucin de smbolos por valores en expresiones.

Maxima
Esto realiza la regla de sustitucin

x=3

en la expresin

1 + 2x.

( %i12) ( %o12)

1 + 2 x, x = 3; 7

Maxima
Tambin es posible sustituir es sustituida por

por cualquier expresin. Aqu cada ocurrencia de

2 y.

( %i13) ( %o13)

1 + x + x2, x = 2 y; 2 y + (2 y) + 3

Sec. 6.2. Valores para smbolos

51

Maxima
Maxima trata las reglas de sustitucin como cualquier otra expresin simblica.

( %i14) ( %o14)

x = y + 3; x=y+3

Maxima
Esto aplica la regla de sustitucin ltima a la expresin

x2 9.

( %i15) ( %o15)

x2 9, %; (y + 3)2 9

Maxima
Es posible aplicar varias reglas de sustitucin juntas.

( %i16) ( %o16)

(x + y) (x y)2, x = 3, y = 1 a; 2 (4 a) (a + 2)

La funcin

ev o su sintaxis alternativa, permiten aplicar reglas de


x por 3 siempre que aparezca x. Segn x : 3, x

sustitucin a una expresin particular. A veces, sin embargo, se querr denir reglas de sustitucin que se apliquen siempre. Por ejemplo, puede ser que se desee sustituir lo discutido en la seccin 5.2, puede hacerse esto asignando el valor

x,

usando

x : 3.

Una vez que se haya hecho la asignacin

siempre ser sustituido por

3,

cuando aparezca.

Maxima
Esto asigna el valor de

x.

( %i17) ( %o17)

x : 3; 3

Maxima
Ahora

ser sustituido automticamente por

dondequiera que aparezca.

( %i18)

x2 1;

52

Cap. 6. Clculos algebraicos

( %o18)

Maxima
Esto asigna la expresin

1+a

x.

( %i19) ( %o19)

x : a + 1; a+1

Maxima
Ahora

es reemplazado por

a + 1.

( %i20) ( %o20)

x2 1; 2 (a + 1) 1

Es posible denir como valor de un smbolo a cualquier expresin, no solamente a un nmero. Debe recordarse que una vez que se haya dado tal denicin, sta continuar siendo utilizada siempre que aparezca el smbolo, hasta que el usuario la cambie o quite explcitamente. Para la mayora de usuarios, el olvidarse quitar valores que han asignado a los smbolos es la causa ms comn de errores al usar

Maxima.

x:valor
kill(x )
Asignando valores a smbolos.

dene un valor para do siempre

que ser utiliza-

remueve cualquier valor denido para

Maxima
El smbolo

todava tiene el valor que le asign arriba.

( %i21) ( %o21)

x + 5 2 x; 2 (a + 1) + a + 6

Sec. 6.2. Valores para smbolos

53

Maxima
Esto quita el valor que asign a

x.

( %i22) ( %o22)

kill(x) done

Maxima
Ahora

no tiene ningn valor denido, as que puede ser utilizado como variable

puramente simblica.

( %i23) ( %o23)

x + 5 2 x; 5x

Los lenguajes de programacin tradicionales que no soportan el clculo simblico permiten que las variables sean utilizadas solamente como nombres para objetos, tpicamente nmeros, que se han asignado como valores para ellos. En

Maxima,

sin embargo,

se puede

tambin tratar como variable puramente formal, a la cual se le puede aplicar varias reglas de transformacin. Por supuesto, si el usuario da explcitamente una denicin, por ejemplo sustituida siempre por

x : 3,

entonces

ser

3,

y no sirve ms como variable formal.

Debe recordarse que las deniciones explcitas por ejemplo tienen un efecto global. Por otra parte, un reemplazo tal como

x:3

expr , x = 3
afecta solamente a la expresin especca

expr.

Es posible mezclar siempre reemplazos con asignaciones. Con asignaciones, se puede dar nombres a las expresiones en las cuales se desea hacer reemplazos, o a las reglas que se desea utilizar para hacer los reemplazos.

Maxima
Esto asigna un valor al smbolo

t.

( %i24) ( %o24)

t : x2 + 1; x2 + 1

54

Cap. 6. Clculos algebraicos

Maxima
Esto asigna un valor al smbolo

t.

( %i25) ( %o25)

t : x = 2; 5

Maxima
Esto encuentra el valor de

para un valor diferente de

x.

( %i26) ( %o26)

t, x = 5 a; 25a2 + 1

Maxima
Esto encuentra el valor de resultado numricamente.

cuando

es sustituido por

%pi,

y luego evala el

( %i27) ( %o27)

t, x = %pi, numer; 10,86960440108936

6.3 Transformacin de expresiones algebraicas


A menudo hay muchas formas diferentes de escribir la misma expresin algebraica. Como un ejemplo, la expresin escrita como

x + 2x + 1. Maxima
2

(x + 1)2

puede ser

proporciona una gran coleccin

de funciones para hacer conversiones entre las diferentes formas de expresiones algebraicas.

Maxima
expand
da la forma expandida de una expresin, con los productos y las potencias desarrolladas.

( %i28) ( %o28)

expand((x + 1)2); x2 + 2 x + 1

Sec. 6.3. Transformacin de expresiones algebraicas

55

expand(expr )

desarrolla productos y potencias, escribiendo el resultado como suma de trminos

expr ,expand factor(expr ) expr ,factor

equivale a escribe

expand(expr )
como un producto de fac-

expr

tores mnimos equivale a

factor(expr )

Dos funciones comunes para transformar expresiones algebraicas.

Maxima
factor
recupera la forma original.

( %i29) ( %o29)

factor( %); (x + 1)2

Maxima
Es fcil generar expresiones complicadas con

expand.

( %i30) ( %o30)

(x + 3 y + 1)4, expand; 81 y4 + 108 x y3 + 108 y3 + 54 x2 y2 + 108 x y2 + 54 y2 + 12 x3 y + 36 x2 y + 36 x y + 12 y + x4 + 4 x3 + 6 x2 + 4 x + 1

Maxima
factor
a menudo le da expresiones ms simples.

( %i31) ( %o31)

%, factor; 4 (3 y + x + 1)

Maxima
Hay algunos casos donde

factor

puede dar expresiones ms complicadas.

( %i32) ( %o32)

x8 1, factor; (x 1) (x + 1) (x2 + 1) (x4 + 1)

56

Cap. 6. Clculos algebraicos

Maxima
En este caso,

expand

da la forma ms simple.

( %i33) ( %o33)

%, expand; x8 1

6.4 Simplicacin de expresiones algebraicas


En muchas situaciones el usuario desea escribir una expresin algebraica en la forma ms simple posible. Aunque sea difcil saber exactamente lo que se entiende por la forma ms simple, un procedimiento prctico que vale la pena seguir es analizar varias formas diferentes de una expresin, y elegir la de menor nmero de partes

rat(expr ) ratsimp(expr )

convierte cional

expr

al formato cannico ra-

simplica la expresin

expr

y todas

sus subexpresiones, incluyendo los argumentos de funciones no racionales

expr ,ratsimp fullratsimp(expr )

equivale a aplica

ratsimp(expr ) repetidamente ratsimp

a una

expresin, seguida de simplicaciones no racionales, hasta que no se obtienen ms transformaciones; entonces devuelve el resultado

expr ,fullratsimp

equivale a

fullratsimp(expr )

Simplicacin de expresiones algebraicas.

Se puede utilizar, a menudo,

ratsimp

para mejorar expresiones

complicadas que se obtienen como resultado de clculos.

Maxima
He aqu la integral de

1 . x4 1

( %i34)

integrate(1/(x4 1), x);

Sec. 6.4. Simplicacin de expresiones algebraicas

57

( %o34)

log (x + 1) arctan x log (x 1) + 4 2 4

Maxima
Al derivar el ltimo resultado debera volverse a la expresin original. En este caso, como es comn, se obtiene una versin ms complicada de la expresin original.

( %i35) ( %o35)

diff( %, x); 1 1 1 + 2 (x2 + 1) 4 (x + 1) 4 (x 1)

Maxima
ratsimp
permite volver a la forma original de la expresin.

( %i36) ( %o36)

ratsimp( %); 1 41 x

Las expresiones pueden incluir funciones no racionales y los argumentos de tales funciones son tambin racionalmente simplicados.

Maxima
He aqu una expresin que incluye funciones no racionales cuyos argumentos admiten ser racionalmente simplicados.

( %i37) ( %o37)

sin(x/(x2 + x)) = exp((log(x) + 1)2 log(x)2); 2 2 x sen = %e(log x+1) log x 2+x x

Maxima
ratsimp
simplica los argumentos de tales funciones.

( %i38) ( %o38)

%, ratsimp; 1 sen = %e x2 x+1

58

Cap. 6. Clculos algebraicos

Ante expresiones no racionales, una llamada a sern necesarias ms de una llamada a precisamente

ratsimp

puede no

ser suciente para conseguir un resultado simplicado. En ocasiones

fullratsimp.

ratsimp,

que es lo que hace

Maxima
Esto dene la variable

expresion.

( %i39) ( %o39)

expresion : (x(a/2) + 1)2 (x(a/2) 1)2/(xa 1); xa/2 1 xa/2 + 1 xa 1


2 2

Maxima
En general,

rat no simplica otras funciones que no sean la suma, resta, multipli-

cacin, divisin y exponenciacin de exponente entero.

( %i40) ( %o40)

rat(expresion); xa/2
4

2 xa/2 xa 1

+1

Maxima
Con

ratsimp

se consigue una mejor simplicacin.

( %i41) ( %o41)

ratsimp(expresion); x2 a 2 xa + 1 xa 1

Maxima
Con

fullratsimp

se consigue simplicar la expresin al mximo.

( %i42) ( %o42)

fullratsimp(expresion); xa 1

Sec. 6.5. Expresiones puestas en diferentes formas

59

6.5 Expresiones puestas en diferentes formas


Las expresiones algebraicas complicadas se pueden escribir generalmente en varias maneras.

Maxima

proporciona una variedad de y

funciones para convertir expresiones de una forma a otra. Los ms comunes de estas funciones son

expand, factor

ratsimp.

Sin em-

bargo, cuando se tiene expresiones racionales que contienen cocientes, puede ser necesario utilizar otras funciones.

expandwrt(expr,var1 , . . . , varn ) expand(expr ) factor(expr ) partfrac(expr,var )

expande la expresin to a las variables

expr

con respecy por

var1 , . . . , varn

defecto no expande los denominadores expande la expresin

factoriza la expresin expande la principal

expr expr expresin expr

en fraccio-

nes parciales respecto de la variable

var

Comandos para transformar expresiones algebraicas.

Maxima
He aqu una expresin racional, la cual puede ser escrita en varias formas diferentes.

( %i43) ( %o43)

e : (x 1)2 (2 + x)/((1 + x) (x 3)2 ); 2 (x 1) (x + 2) 2 (x 3) (x + 1)

Maxima
expandwrt
expande el numerador de la expresin, pero deja el denominador en forma factorizada.

( %i44) ( %o44)

expandwrt(e, x); x3 3x 2 + 2 2 2 (x 3) (x + 1) (x 3) (x + 1) (x 3) (x + 1)

60

Cap. 6. Clculos algebraicos

Maxima
expand
expande todo, incluyendo el denominador.

( %i45) ( %o45)

expand(e); x3 3x + x3 5 x2 + 3 x + 9 x3 5 x2 + 3 x + 9 2 x3 5 x2 + 3 x + 9

Maxima
partfrac
separa la expresin en trminos con denominadores simples.

( %i46) ( %o46)

partfrac( %, x); 1 19 5 + + +1 4 (x + 1) 4 (x 3) (x 3)2

Maxima
factor
factoriza todo, en este caso reproduce la forma original.

( %i47) ( %o47)

factor( %); 2 (x 1) (x + 2) 2 (x 3) (x + 1)

collectterms(expr,var )

agrupa juntas todos las potencias de

var

Reordenamiento de expresiones en varias variables.

Maxima
He aqu una expresin algebraica en dos variables.

( %i48) ( %o48)

v : expand((3 + 2 x)2 (x + 2 y)2); 16 x2 y2 + 48 x y2 + 36 y2 + 16 x3 y + 48 x2 y + 36 x y+ 4 x4 + 12 x3 + 9 x2

Sec. 6.5. Expresiones puestas en diferentes formas

61

Maxima
Esto agrupa los trminos de

afectados por la misma potencia de

x.

( %i49) ( %o49)

collectterms(v, x); x (48 y2 + 36 y) + x2 (16 y2 + 48 y + 9) + 36 y2 + x3 (16 y + 12) + 4 x4

Maxima
Esto agrupa juntas las potencias de

y.

( %i50) ( %o50)

collectterms(v, y); (16 x2 + 48 x + 36) y2 + (16 x3 + 48 x2 + 36 x) y+ 4 x4 + 12 x3 + 9 x2

Como acaba de verse, cuando el usuario se limita a expresiones polinmicas racionales, hay muchas formas de escribir cualquier expresin particular. Si ste considera expresiones ms complicadas, que incluyan, por ejemplo, funciones matemticas trascendentes, la variedad de formas posibles llega a ser mayor. Por consiguiente, es imposible tener una funcin incorporada especco en cada forma posible. Ms bien,

Maxima

Maxima para producir

le permite construir sistemas

arbitrarios de reglas de transformacin para hacer diversas conversiones . Sin embargo, hay algunas funciones incorporadas adicionales de

Maxima

para transformar expresiones.

trigexpand(expr )

expande funciones trigonomtricas e hiperblicas de sumas de ngulos y de mltiplos de ngulos presentes en

expr

expr ,trigexpand trigsimp(expr )

equivale a utiliza para

trigexpand(expr ) identidades sen(x)2 + 2 2 cos(x) = 1 y cosh(x) senh(x)2 = 1


las simplicar expresiones etc. que contienen

tan, sec,

Algunas funciones ms para transformar expresiones.

1 Para

ms detalle al respecto consulte sobre las funciones

scsimp

defrule

en la ayuda de Maxima.

62

Cap. 6. Clculos algebraicos

trigreduce(expr,var )

combina productos y potencias de senos y cosenos trigonomtricos e hiperblicos de otros que son mltiplos de

trigreduce(expr )

si no se de

var, transformndolos en var introduce el argumento var,


trigreduce(expr )

entonces se utilizan todas las variables

expr

expr ,trigreduce trigrat(expr )


exponentialize(expr )

equivale a

devuelve una forma cannica simplicada cuasi-lineal de una expresin trigonomtrica convierte las funciones trigonomtricas e hiperblicas de

expr

a exponenciales

expr ,exponentialize demoivre(expr ) expr ,demoivre rectform(expr ) expr ,rectform polarform(expr ) expr ,polarform radcan(expr )

equivale a

exponentialize(expr )

convierte exponenciales complejos en expresiones equivalentes pero en trminos de las funciones trigonomtricas equivale a

demoivre(expr )

a+ b %i equivalente a expr, con a y b reales


devuelve una expresin de la forma equivale a

rectform(expr )

devuelve una expresin de la forma

r %e %i
reales

equivalente a

expr,

con

equivale a

polarform(expr )

simplica la expresin

expr,

que pue-

de contener logaritmos, exponenciales y radicales, convirtindola a una forma cannica

expr ,radcan prod ,radexpand:all

equivale a las races producto ej.,

radcan(expr )

n, se extraen

n -simas de los factores del prod, que sean potencias de


del smbolo radical (p.

4x2 2x)

Algunas funciones ms para transformar expresiones.

Sec. 6.5. Expresiones puestas en diferentes formas

63

logcontract(expr )

analiza do ma en

la

expresin de

expr
la

refor-

cursivamente, subexpresiones expresiones

transforman-

a1*log(b1)+a2*log(b2)+c
de la forma

expr ,logcontract

log(ratsimp(b1^a1*b2^a2))+c equivale a logcontract(expr )

Algunas funciones ms para transformar expresiones.

Maxima
Esto expande la expresin trigonomtrica, escribindola de modo que todas las funciones tengan argumento x.

( %i51) ( %o51)

tan(x) cos(3 x), trigexpand; cos3 x 3 cos x sin2 x tan x

Maxima
Esto reduce la expresin usando ngulos mltiples.

( %i52) ( %o52)

tan(x) cos(2 x), trigreduce; tan x cos (3 x)

Maxima
Esto expande el seno asumiendo que

son reales.

( %i53) ( %o53)

sin(x + %i y), rectform; %i cos x sinh y + sin x cosh y

Maxima
Con

logcontract

se contrae una expresin logartimica.

( %i54) ( %o54)

2 (a log(x) + 2 a log(y)), logcontract; a log (x2 y4 )

64

Cap. 6. Clculos algebraicos

Las transformaciones hechas por funciones como

expand y factor

siempre son correctas, independientemente del valor que puedan tener las variables simblicas en las expresiones. A veces, sin embargo, es til realizar transformaciones que slo son correctas para algunos posibles valores de las variables simblicas. Transformaciones como stas las realizan

radcan

radexpand:all.

Maxima
Maxima no expande automticamente potencias no enteras de productos y cocientes.

( %i55) ( %o55)

sqrt(x5 y/w3); x5 y w3

Maxima
radcan
hace la expansin.

( %i56) ( %o56)

%, radcan; 5 x2 y w2
3

Maxima
En este caso Maxima aplica una equivalencia matemtica.

( %i57) ( %o57)

sqrt(x6 y2/w10); 3 |x| |y| 5 |w|

Maxima
Utilizando la variable opcional

radexpand con el valor asignado all, Maxima

pasa

por alto la equivalencia anterior.

( %i58) ( %o58)

sqrt(x6 y2/w10), radexpand : all; x3 y w5

Sec. 6.6. Simplicacin con asunciones

65

6.6 Simplicacin con asunciones


assume(pred1 , . . . , predn ) f orget(pred1 , . . . , predn )
Asuncin de predicados.

aade los predicados al contexto actual

pred1 , . . . , predn

borra los predicados establecidos por

assume

Maxima
assume
devuelve una lista con los predicados que han sido aadidos al contexto.

( %i59) ( %o59)

assume(x > 0, y < 0); [x > 0, y < 0]

Maxima
Maxima realiza simplicaciones asumiendo los predicados ingresados.

( %i60) ( %o60)

[sqrt(x2), sqrt(y)]; x, y

Maxima
Otra simplicacin asumiendo los predicados ingresados.

( %i61) ( %o61)

sqrt(x2 y2 ); x y

Maxima
forget
borra los predicados previamente establecidos.

( %i62) ( %o62)

forget(x > 0, y < 0); [x > 0, y < 0]

66

Cap. 6. Clculos algebraicos

6.7 Seleccin de partes de expresiones algebraicas


coeff(expr,x,n ) hipow(expr,x ) part(expr,n1 , . . . , nk )
devuelve el coeciente de (el argumento

xn

en

expr

puede omitirse si es

igual a la unidad) devuelve el mayor exponente explcito de

hipow

en

expr

(si

no aparece en

expr,

devuelve 0)

devuelve la parte de ca por los ndices se obtiene la la parte

expr

que se especi-

n1 , . . . , nk (primero parte n1 de expr, despus

n2

del resultado anterior, y as

sucesivamente)
Comandos para seleccionar partes de polinomios.

Maxima
He aqu una expresin algebraica.

( %i63) ( %o63)

e : expand((1 + 3 x + 4 y2)2); 16 y4 + 24 x y2 + 8 y2 + 9 x2 + 6 x + 1

Maxima
Esto da el coeciente de

en

e.

( %i64) ( %o64)

coeff(e, x); 24 y2 + 6

Maxima
hipow(expr ,y)
da la mayor potencia de

que aparece en expr.

( %i65) ( %o65)

hipow(e, y); 4

Sec. 6.7. Seleccin de partes de expresiones algebraicas

67

Maxima
Esto da el cuarto trmino en

e.

( %i66) ( %o66)

part(e, 4); 9 x2

num(expr ) denom(expr )

devuelve el numerador de

no es una fraccin, devuelve devuelve el

expr

expr (si expr expr ) denominador de expr (si


1)

no es una fraccin, devuelve

Comandos para seleccionar partes de expresiones racionales.

Maxima
He aqu una expresin racional.

( %i67) ( %o67)

r : (1 + x)/(2 (2 y)); x+1 2 (2 y)

Maxima
denom
selecciona el denominador.

( %i68) ( %o68)

denom(r); 2 (2 y)

Maxima
denom
da 1 para las expresiones que no son cocientes.

( %i69) ( %o69)

denom(1/x + 1/y); 1

Captulo 7 Matemticas simblicas


7.1 Lmites
limit(f,x,x0 ) limit(f,x,x0 ,plus) limit(f,x,x0 ,minus)
Lmites.

el lmite el lmite el lmite

xx0

l f m l f m l f m

xx+ 0

xx 0

Maxima
He aqu la expresin

sen x . x

( %i1) ( %o1)

f : sin(x)/x; sin(x) x

Maxima
Si se sustituye x por 0, la expresin se hace 0/0, y se obtiene un mensaje de error.

( %i2)

f, x = 0;

Division by 0 - -an error. To debug this try: debugmode(true);

68

Sec. 7.1. Lmites

69

Maxima
Si se evala

sen(x) x

para un x prximo a 0, se consigue un resultado prximo a 1.

( %i3) ( %o3)

f, x = 0,01; 0,99998333341667

Maxima
Esto encuentra el lmite de

sen(x) x

cuando x tiende a 0.

( %i4) ( %o4)

limit(f, x, 0); 1

inf minf und ind zeroa zerob infinity

+
indenido indenido pero acotado innitesimal mayor que cero innitesimal menor que cero innito complejo

Smbolos especiales para lmites.

La funcin

limit con un solo argumento se utiliza frecuentemente

para simplicar expresiones en las que aparecen los smbolos especiales para lmites.

Maxima
Esto da un resultado para

1 .

( %i5) ( %o5)

limit(1 minf);

70

Cap. 7. Matemticas simblicas

Maxima
He aqu la simplicacin de una expresin que incluye un innitesimal mayor que cero.

( %i6) ( %o6)

limit(x + zeroa); x

7.2 Diferenciacin
diff(f,x ) diff(f,x,n ) diff(f,x1 , n1 , . . . , xm , nm ) diff(f )
Diferenciacin con Maxima.

devuelve la primera derivada de pecto de la variable devuelve la pecto de

res-

n -esima derivada de f f

res-

devuelve la derivada parcial de respecto de

con

x1 , . . . , xm y equivale a diff(. . .(diff(f,xm , nm . . .), x1 , n1 )


devuelve el diferencial total de

Maxima
He aqu la derivada

xn

con respecto a

x.

( %i7) ( %o7)

diff(xn , x); n xn1

Maxima
Maxima conoce las derivadas de todas las funciones matemticas estndar.

( %i8) ( %o8)

diff(atan(x), x); 1 2+1 x

Sec. 7.2. Diferenciacin

71

Maxima
La tercera derivada con respecto a

x.

( %i9) ( %o9)

diff(xn, x, 3); (n 2) (n 1) n xn3

Si no se indica la variable, En notacin matemtica, es como

Maxima

asume que se quiere calcular la

diferencial total, en la cual todas las derivadas se asumen relacionadas.

diff(f,x )

es como

d dx f , mientras

diff(f )

df .
d(xn ).
del(x) y del(n) son los diferenciales

Maxima
Esto da la diferencial total respectivamente.

dx

dn,

( %i10) ( %o10)

diff(xn); n xn1 del (x) + xn log x del (n)

As como se trata variables simblicamente, tambin es posible tratar funciones simblicamente en forma explcita para la funcin

Maxima. As, por ejemplo, puede


f(x),

encontrarse frmulas para las derivadas de

ma

f.

sin especicar una

Para esto hay que indicar a

Maxi-

depends.

la dependencia de la funcin, lo que se consigue con la funcin

Maxima
Esto declara la dependencia

f (x2 ).

( %i11) ( %o11)

depends(f, x2); [f (x2 )]

Maxima
Ahora Maxima puede utilizar la regla de cadena para simplicar la derivada.

( %i12) ( %o12)

diff(2 x f, x); d 4 f x2 + 2 f d x2

72

Cap. 7. Matemticas simblicas

depends(, ) depends(1 , 1 , . . . , n , n ) depends([1 , . . . , n ] , ) depends(, [1 . . . , n ]) depends([1 , . . . , n ] , [1 , . . . , m ]) dependencies remove(, dependency) remove([1 , . . . , n ] , dependency) remove(all, dependency)

declara la dependencia funcional declara la dependencia

()

funcional

1 (1 ) , . . . , n (n )
declara la dependencia funcional

1 () , . . . , n ()
declara la dependencia funcional

(1 , . . . , n )
declara la dependencia funcional

1 (1 , . . . , m ) , . . . , n (1 , . . . , m )
lista de tomos que tienen algn tipo de dependencia funcional elimina la dependencia funcional asociada con

1 , . . . , n

elimina la dependencia funcional asociada con

elimina la dependencia funcional de todos los tomos que la tengan

Declaracin y remonicin de dependencia funcional.

Maxima
Esto declara las dependencias

u(x)

v(x).

( %i13) ( %o13)

depends([u, v] , x); [u (x) , v (x)]

Maxima
Aqu se obtiene una frmula para

d dx

(uv ),

donde

u = u(x)

v = v(x).

( %i14) ( %o14)

diff(uv, x), expand; uv log u ddx v + uv1

d dx

u v

Maxima
Esto permite apreciar todas las dependencias declaradas hasta el momento.

( %i15)

dependencies;

Sec. 7.3. Integracin

73

( %o15)

[f (x2 ) , u (x) , v (x)]

Maxima
Con esta sentencia se borran todas las dependencias.

( %i16) ( %o16)

remove(all, dependency); done

7.3 Integracin
integrate(f,x ) integrate(f,x,a,b ) integrate(f=g,x )
la integral indenida la integral denida

f dx f dx

b a

la integral denida de una ecuacin, equivale a

f dx =

gdx
por que

changevar('expr,(x, y), hace el cambio de variable dado y,x ) (x, y) = 0 en la expresin expr
depende de

y)

(la nueva variable ser

Integracin.

integration_constant integration_ constant_counter

variable del sistema cuyo valor por defecto es

%c

variable del sistema cuyo valor por defecto es 0

Constantes y contadores de constantes para integrar ecuaciones.

Maxima
Para calcular la integral

xn dx,

Maxima, pregunta si

este caso se le ha indicado la eleccin de la opcin

n + 1 = 0 o n + 1 = 0. En n + 1 = 0, es decir, n = 1.

( %i17)
Is

n+1

integrate(xn , x);

zero or nonzero? n;

74

Cap. 7. Matemticas simblicas

( %o17)

xn+1 n+1

Maxima
He aqu la integral

xn dx,

cuando

n = 1.

( %i18)
Is

n+1

integrate(xn , x); log(x)

zero or nonzero? z;

( %o18)

Maxima
Este es un ejemplo ligeramente ms complicado.

( %i19) ( %o19)

integrate(1/(x4 a4), x); log (x + a) log (x a) arctan + 4 a3 4 a3 2 a3

x a

Maxima
Recurdese que

logcontract

contrae los logaritmos.

( %i20) ( %o20)

integrate(1/(x4 a4), x), logcontract; log


x+a xa

+ 2 arctan 4 a3

x a

Maxima

resuelve casi cualquier integral que puede ser expresada

en trminos de funciones matemticas estndares. Pero debe comprenderse que aun cuando un integrando pueda contener slo funciones simples, su integral puede implicar funciones mucho ms complicadas, o puede no ser expresable en absoluto en trminos de funciones matemticas estndares.

Maxima
He aqu una integral simple.

( %i21)

integrate(log(1 x2 ), x), logcontract;

Sec. 7.3. Integracin

75

( %o21)

x log 1 x2 2 + log

x+1 x1

Maxima
Esta integral puede ser expresada slo en trminos de una funcin dilogartmica1 .

( %i22) ( %o22)

integrate(log(1 x2 )/x, x); li 2 (1 x2 ) log(x) log 1 x2 + 2

Maxima
Esta integral involucra la funcin

erf2 .

( %i23) ( %o23)

integrate(exp(1 x2 ), x); e erf (x) 2

Maxima
Esta integral simplemente no puede ser expresada en trminos de funciones matemticas estndares. Por consiguiente, Maxima la deja como est.

( %i24) ( %o24)

integrate(xx , x); xx dx

Maxima
b
He aqu la integral denida

sen2 (x) dx.

( %i25) ( %o25)
1 La
innita

integrate(sin(x)2, x, a, b); sin (2 a) 2 a sin (2 b) 2 b 4 4


zk k=1 ks . En este caso

funcin polilogartmica de orden s y argumento z est denida por la serie

2 erf(z)

lis (z) =

s=2

z = 1 x2 . erf (z) =

es la integral de la distribucin gaussiana, dada por

z 0

et dt

76

Cap. 7. Matemticas simblicas

Maxima
He aqu otra integral denida.

( %i26) ( %o26)

integrate(exp(x2 ), x, 0, inf);
2

Maxima
Maxima no puede darle una frmula para esta integral denida.

( %i27) ( %o27)

integrate(xx , x, 0, 1);
1

xx dx
0

Maxima
1
Esto evala la integral mltiple

x 0

(x2 + y 2 ) dy dx.

( %i28) ( %o28)

integrate(integrate(x2 + y2, y, 0, x), x, 0, 1);


1 3

Cuando una constante de integracin se crea durante la integracin denida de una ecuacin, el nombre de la constante se construye concatenando

integration_constant y integration_constant_counter.

Maxima
Esto calcula la integral denida de una ecuacin.

( %i29) ( %o29)

integrate(x2 = sin(x), x); x3 3 = %c1 cos(x)

Maxima
A

integration_constant

se le puede asignar un smbolo cualquiera.

( %i30) ( %o30)

integration_constant : 'K; K

Sec. 7.3. Integracin

77

Maxima
Esto calcula la integral denida de una ecuacin a la que se le ha reiniciado la constante de integracin por defecto.

( %i31) ( %o31)

integrate(x2 = sin(x), x); x3 = K2 cos x 3

Maxima
Es posible reiniciar el contador de

integration_constant_counter.

( %i32) ( %o32)

reset(integration_constant_counter); [integration _constant _counter ]

Maxima
Aqu se aprecia que el contador ha sido reiniciado.

( %i33) ( %o33)

integrate(x2 = sin(x), x); x3 = K1 cos x 3

Es posible realizar un cambio de variable en una integral indenida o denida usando la funcin

changevar.

Para que

Maxima

pueda

realizar esto debe mantenerse la integral sin evaluar (seccin 5.4).

Maxima
He aqu una integral clsica sin evaluar.

( %i34) ( %o34)

'integrate( %esqrt(y), y);

%e

dy

Maxima
Esto realiza un cambio de variable en una integral indenida.

( %i35)

assume(z > 0)$ changevar( %o28, y z2, z, y);

78

Cap. 7. Matemticas simblicas

( %o36)

%e

dy

Maxima
Esto realiza un cambio de variable en una integral denida.

( %i37) ( %o37)

'changevar(integrate( %esqrt(y), y, 0, 4), y z2, z, y);


0

2
2

z %ez dz

7.4 Sumas y Productos


sum(f ,i,imin , imax ) lsum(f ,i,L)
Sumas.

la suma

imax imin
en

representa la suma de mento

para cada ele-

Maxima
7
Esto construye la suma

i=1

xi . i

( %i38) ( %o38)

sum(xi/i, i, 1, 7); x7 x6 x5 x4 x3 x2 + + + + + +x 7 6 5 4 3 2

Maxima
n
Esto devuelve la suma

i2
i=1

sin realizar ningn cambio.

( %i39) ( %o39)

sum(i2, i, 1, n);
n

i2
i=1

Sec. 7.4. Sumas y Productos

79

Maxima
Agregando

simpsum

la suma es calculada simblicamente como una funcin de

n.

( %i40) ( %o40)

sum(i2, i, 1, n), simpsum; 2 n3 + 3 n2 + n 6

Maxima
Combinando

simpsum

con

factor

se obtiene un resultado factorizado.

( %i41) ( %o41)

sum(i2, i, 1, n), simpsum, factor; n (n + 1) (2 n + 1) 6

Maxima
Maxima tambin puede dar un resultado exacto para esta suma innita.

( %i42) ( %o42)

sum(1/i4, i, 1, inf), simpsum; 4 90

Maxima
3
Esta es la suma mltiple

xi y j .
i=1 j=1

( %i43) ( %o43)

sum(sum(xi yj, j, 1, i), i, 1, 3); x3 y3 + x3 y2 + x2 y2 + x3 y + x2 y + x y

Maxima
Esta es una suma para la cual los valores del ndice de variacin no estn equiincrementados.

( %i44) ( %o44)

lsum(xi, i, [1, 2, 7]); x7 + x2 + x

80

Cap. 7. Matemticas simblicas

product(f (i ),i,imin , imax )el


Productos.

producto

imax imin

f (i)

Maxima
Los productos se obtienen en forma similar a las sumas.

( %i45) ( %o45)

prod(x + i, i, 1, 4); (x + 1) (x + 2) (x + 3) (x + 4)

Maxima
Agregando de

simpproduct

la suma es calculada simblicamente como una funcin

n.

( %i46) ( %o46)

product(k, k, 1, n), simpproduct; n!

Cabe mencionar que la funcin

changevar

tambin se puede uti-

lizar para cambiar los ndices de una suma o producto. Sin embargo, debe tenerse en cuenta que cuando se realiza un cambio en una suma o producto, el mismo debe expresarse en trminos de sumas, como

i = j + . . .,

no como una funcin de mayor grado.

Maxima
He aqu una suma nita con ndice

j.

( %i47) ( %o47)

sum(f(j + 2) xj, j, 2, n);


n

f (j + 2) xj
j=2

Maxima
Esto realiza el cambio

j =i2

en la suma anterior.

( %i48)

changevar( %, j i + 2, i, j);

Sec. 7.5. Operadores relacionales y lgicos

81

n+2

( %o48)
i=0

f (i) xi2

Maxima
Aqu se hace el cambio

i=k2

en un producto innito.

( %i49) ( %o49)

product(f(i + 2) x(i + 2), i, 2, inf);

f (i + 2) xi+2
i=2

( %i50) ( %o50)

changevar( %, i k + 2, k, i);

f (k) xk
k=0

7.5 Operadores relacionales y lgicos


= # > >= < <=
igual (por sintaxis) desigual (por sintaxis) mayor que mayor o igual que menor que menor o igual que igual (por valor) desigual (por valor)

equal notequal
Operadores relacionales.

compare(x,y )

compara

<, <=, >, >=, =, #, notcomparable unknown, segn sea el caso

devuelve

Funcin para obtener operadores relacionales.

82

Cap. 7. Matemticas simblicas

Maxima
Esto prueba si 10 es menor que 7.

( %i51) ( %o51)

10 < 7, pred; false

Maxima
Esto prueba si 10 es diferente que 7.

( %i52) ( %o52)

10#7, pred; true

Maxima
Ya que los entes involucrados son numricas, Maxima puede determinar que esto es verdadero.

( %i53) ( %o53)

%pi %e < %e %pi, pred; true

Maxima
Puesto que los entes a comparar son constantes, Maxima no sabe si esto es verdadero o falso.

( %i54) ( %o54)

x > y, pred; x>y

Maxima
He aqu dos comparaciones.

( %i55) ( %o55) ( %i56) ( %o56)

compare(1, 2); < compare(1/x, 0); #

Sec. 7.5. Operadores relacionales y lgicos

83

Maxima
Una diferencia notable entre

equal.

( %i57) ( %o57) ( %i58) ( %o58)

(x + 1)2 = x2 + 2 x + 1, pred; false equal((x + 1)2 , x2 + 2 x + 1), pred; true

El usuario debe tener presente que, los operadores relacionales son todos operadores binarios.

Maxima

no reconoce expresiones del estilo

a < b < c.

Maxima
Al pretender evaluar una desigualdad como la siguiente, Maxima devuelve un mensaje de error.

( %i59)
expected 2<3<4 ^

2 < 3 < 4, pred;

Incorrect syntax: Found logical expression where algebraic expression

not and or if cond then expr1 else expr2


Operadores lgicos.

negacin conjuncin disyuncin devuelve si

cond

es

expr1 si cond false

es

true, y expr2

Maxima
Una forma de ingresar expresiones del estilo operador lgico

a < b < c,

en Maxima, es usando el

and.

( %i60) ( %o60)

2 < 3 and 3 < 4; true

84

Cap. 7. Matemticas simblicas

Maxima
Mientras no se hayan hecho asignaciones adecuadas a esto es verdadero o falso.

q,

Maxima no sabe si

( %i61) ( %o61)

p and q; pq

7.6 Ecuaciones
En

Maxima,

una ecuacin consiste de dos expresiones vinculadas

con el smbolo

=.
representa una ecuacin devuelve devuelve

expr1 = expr2

lhs(expr1 = expr2 ) rhs(expr1 = expr2 )


Ecuaciones en Maxima.

expr1 expr2

Maxima
Una ecuacin por s misma no es evaluada.

( %i62) ( %o62)

x4 5 x2 3 = x; x = x4 5 x2 3

Es muy importante que el usuario no confunda seccin 5.2). Mientras que gina una asignacin,

x=y

x:y con x=y (ver x:y es una declaracin imperativa que ori-

no causa ninguna accin explcita.

Maxima
Con

lhs3

se selecciona el miembro izquierdo de la ecuacin.

( %i63) ( %o63)
3 Las

lhs(x = x4 5 x2 3); x
lhs
y

funciones

rhs

tambin pueden ser aplicadas en los casos cuando el

vnculo es cualquier otro operador relacional.

Sec. 7.7. Solucin de Ecuaciones

85

Maxima
Con

rhs

se selecciona el miembro derecho de la ecuacin.

( %i64) ( %o64)

rhs(x = x4 5 x2 3); x4 5 x2 3

7.7 Solucin de Ecuaciones


solve(ecu,x )
Solucin de ecuaciones.

resuelve la ecuacin algebraica incgnita

ecu

de

solve siempre trata de dar frmulas explcitas para las soluciones


de ecuaciones. Sin embargo, para ecuaciones sucientemente complicadas, no pueden darse frmulas algebraicas explcitas. Si se tiene una ecuacin algebraica en una variable, y la potencia ms alta de la variable es menor que cinco, entonces

Maxima

siempre puede dar frmulas

para las soluciones. Sin embargo, si la potencia ms alta es cinco o ms, puede ser matemticamente imposible dar frmulas algebraicas explcitas para todas las soluciones.

Maxima
Maxima siempre puede solucionar ecuaciones algebraicas en una variable cuando
la potencia ms alta es menor que cinco.

( %i65) ( %o65)

solve(x4 5 x2 3 = 0, x); 37+5 37+5 375 %i x = 2 , x = 2 , x = , 2 375 %i x= 2

Maxima
Tambin puede solucionar algunas ecuaciones que involucran potencias ms altas.

( %i66)

solve(x6 = 1, x);

86

Cap. 7. Matemticas simblicas

( %o66)

x= x=

3 %i+1 , x = 3 %i1 , x 2 2 3 %i1 ,x = 1 2

= 1, x =

3 %i+1 , 2

Maxima
Hay algunas ecuaciones, sin embargo, para las cuales es matemticamente imposible encontrar frmulas explcitas para las soluciones.

( %i67) ( %o67)

solve(2 4 x + x5 = 0, x); [0 = x5 4 x + 2]

Adems de la capacidad de solucionar ecuaciones puramente algebraicas,

Maxima

tambin puede solucionar algunas ecuaciones que

implican otras funciones.

Maxima
Hay algunas ecuaciones, sin embargo, para las cuales es matemticamente imposible encontrar frmulas explcitas para las soluciones. Despus de la impresin de una advertencia, Maxima devuelve una solucin para esta ecuacin.

( %i68)

solve(sin(x) = a, x);

solve: using arc-trig functions to get a solution. Some solutions will be lost.

( %o68)

[x = asin(a)]

Es importante comprender que una ecuacin tal como caso que se diferencian por mltiplos de que pueden existir otras soluciones.

sen(x) = a

en realidad tiene un nmero innito de soluciones posibles, en este

2 .

Sin embargo,

solve

por

defecto da slo una solucin, pero imprime un mensaje que le dice

Maxima
No hay ninguna solucin explcita para una ecuacin trascendental como esta.

( %i69) ( %o69)

solve(cos(x) = x, x); [x = cos(x)]

Sec. 7.7. Solucin de Ecuaciones

87

solve([ecu1 , . . . , ecun ] , [x1 , . . . , xn ])

resuelve un sistema de ecuaciones polinmicas simultneas (lineales o no)

Solucin de sistemas ecuaciones.

Tambin puede usarse cica la lista de variables.

Maxima

para solucionar conjuntos de ecua-

ciones simultneas. Simplemente se da la lista de ecuaciones, y espe-

Maxima
He aqu una lista de dos ecuaciones simultneas, para que sean resueltas en las variables x e y.

( %i70) ( %o70)

solve ([a x + y = 0, 2 x + (1 a) y = 1] , [x, y]) ; 1 a x= 2 ,y = 2 a a+2 a a+2

Maxima
He aqu algunas ecuaciones simultneas ms complicadas.

( %i71) ( %o71)

solve([x2 + x y + y2 = 4, x + x y + y = 2], [x, y]); 11 %i + 3 11 %i + 7 , y = , [x = 2, y = 0] , x = 11 %i + 1 2 11 %i 3 11 %i 7 x= , y = , [x = 0, y = 2] 2 11 %i 1

Maxima
Con

rectform

se obtiene una mejor presentacin.

( %i72) ( %o72)

%, rectform; [x = 2, y = 0] , x =
11 %i 2

x=

3, y = 2

11 %i 3, y = 2 2 11 %i 2 3 , [x 2

11 %i 2

3 2

= 0, y = 2]

Una variable para

solve puede ser tambin una expresin. Esto se

aprecia, por ejemplo, al aplicar esta funcin para obtener la derivada de una funcin dada en forma implcita.

88

Cap. 7. Matemticas simblicas

Maxima
Esto asigna la ecuacin

y 3 3 x y + x3 = 0

a la variable

e.

( %i73) ( %o73)

e : x3 3 x y + y3 = 0; y3 3 x y + x3 = 0

Maxima
Aqu se dene la dependencia

y(x).

( %i74) ( %o74)

depends(y, x); [y (x)]

Maxima
Ahora se deriva

( %i75) ( %o75)

diff(e, x); 3 y2 ddx y 3 x

d dx

y 3 y + 3 x2 = 0

Maxima
Finalmente se resuelve la ecuacin para la variable

d dx

y.

( %i76) ( %o76)

solve( %, diff(y, x)); y x2 d y= 2 dx y x

7.8 Ecuaciones diferenciales ordinarias


ode2(ecu,dvar,ivar )
resuelve la ecuacin diferencial ordinaria variable independiente

ecu, de variable dependiente dvar y ivar, de primer

orden y segundo orden


Solucin de ecuaciones diferenciales ordinarias.

Sec. 7.8. Ecuaciones diferenciales ordinarias

89

icl1(sol,x = x0 , y = y0 ) icl2(sol,x = x0 , y = y0 , 'dif f (y, x) = dy0 ) bc2(sol,x = x0 , y = y0 , x = x1 , y = y1 )

resuelve el problema del valor inicial en ecuaciones diferenciales ordinarias de primer orden resuelve el problema del valor inicial en ecuaciones diferenciales ordinarias de segundo orden resuelve el problema del valor en la frontera para ecuaciones diferenciales ordinarias de segundo orden

Solucin de ecuaciones diferenciales ordinarias.

Maxima
He aqu la solucin de la ecuacin diferencial

y '(x) = ay(x) + 1.

En esta solucin

%c

es una constante que debe ser determinada a partir de valores iniciales.

( %i77) ( %o77)

ode2('diff(y, x) = a y + 1, y, x); ea x y = %c ea x a

Maxima
Si se incluye una condicin inicial apropiada, entonces no hay ninguna constante en la solucin.

( %i78) ( %o78)

ic1( %, x = 0, y = 0); ea x 1 y= a

Maxima
He aqu la solucin de la ecuacin diferencial cin

y ''(x) + y y '(x) = 0.

En esta solu-

%k1

%k2

son constantes a ser determinadas a partir de valores iniciales o

valores de frontera.

( %i79) ( %o79)

ode2('diff(y, x, 2) + y 'diff(y, x)3 = 0, y, x); y3 + 6 %k1 y = x + %k2 6

90

Cap. 7. Matemticas simblicas

Maxima
Si se incluyen las condiciones iniciales apropiadas desaparecen las constantes.

( %i80) ( %o80)

ic2( %, x = 0, y = 0, 'diff(y, x) = 1); y3 3 y (y2 1) =x 6

Maxima
Si se incluyen los valores de frontera apropiados tambin desaparecen las constantes.

( %i81) ( %o81)

bc2( %o3, x = 0, y = 0, x = 1, y = 1); y3 + 5 y =x 6

7.9 Sistemas de ecuaciones diferenciales ordinarias lineales


La funcin

desolve

resuelve sistemas de ecuaciones diferenciales

ordinarias lineales utilizando la transformada de Laplace. La dependencia funcional respecto de una variable independiente debe indicarse explcitamente, tanto en las variables como en las derivadas. Por ejemplo, para la primera derivada, a diferencia de la forma (usada en la seccin 7.8), debe usarse la forma

'diff(y, x) 'diff(y(x), x).

desolve(ecu,y (x )) desolve([ecu1 , . . . , ecun ] , [y1 (x), . . . , yn (x)]) atvalue((x), x = x0 , val)

resuelve una ecuacin diferencial para

y (x ),

tomando a

como variable in-

dependiente resuelve sistemas de ecuaciones diferenciales ordinarias lineales permite aadir la condicin inicial

(x0 ) = val
lineales

a un determinado sistema

de ecuaciones diferenciales ordinarias

Solucin de sistemas de ecuaciones diferenciales ordinarias lineales.

Sec. 7.9. Sistemas de ecuaciones diferenciales ordinarias lineales

91

Maxima
He aqu la solucin de la ecuacin diferencial

y ''(x) + y(x) = 2x.

( %i82) ( %o82)

desolve('diff(y(x), x, 2) + y(x) = 2 x, y(x)); y (x) = sin(x) ddx y (x) x=0 2 + y (0) cos(x) + 2 x

Maxima
Esto resuelve el sistema

x'(t) = y(t) y '(t) = x(t)

( %i83) ( %o83)

desolve(['diff(x(t), t) = y(t), 'diff(y(t), t) = x(t)] , [x(t), y(t)]); (y (0) + x (0)) %et (y (0) x (0)) %et x (t) = , 2 2 t t (y (0) + x (0)) %e (y (0) x (0)) %e y (t) = + 2 2

Maxima
De esta manera se aaden las las condiciones iniciales ma anterior.

x(0) = 1, y(0) = 0

al siste-

( %i84) ( %o84) ( %i85) ( %o85)

atvalue(x(t), t = 0, 1); 1 atvalue(y(t), t = 0, 0); 0

Maxima
Al volver a resolver el sistema se obtienen las soluciones con las condiciones iniciales dadas.

( %i86) ( %o86)

desolve(['diff(x(t), t) = y(t), 'diff(y(t), t) = x(t)] , [x(t), y(t)]); %et %et %et %et x (t) = + , y (t) = 2 2 2 2

92

Cap. 7. Matemticas simblicas

7.10 Series de potencias


taylor(expr, x, a, n)
expande la expresin de la variable

expr

en un desa-

rrollo de Taylor o de Laurent respecto

alrededor del punto

a,

con trminos hasta

(x a)n
en todas las va-

taylor(expr, [x1 , x2 , . . .] , a, n)

devuelve la serie en potencias truncada de grado

x1 , x2 , . . . (a, a, . . .)
riables

alrededor del punto

taylor(expr, [x1 , a1 , n1 ] , [x2 , a2 , n2 ] , . . .)

devuelve la serie en potencias truncada en las variables punto

x1 , x2 , . . . alrededor del (a1 , a2 , . . .); el truncamiento se

realiza, respectivamente, en los grados

n1 , n2 , . . .

taylor(expr, [x1 , x2 , . . .] , equivale a taylor(expr, [x1 , a1 , n1 ] , [a1 , a2 , . . .] , [n1 , n2 , . . .] , [x2 , a2 , n2 ] , . . .) . . .) taylor(expr, [x, a, n, desarrolla expr en potencias negativas 'asymp]) de x a (el trmino de mayor orden es (x a)n )
Obtencin de series de potencias.

Las operaciones matemticas de las que se ha hablado hasta ahora son exactas. Considerando la entrada exacta, sus resultados son frmulas exactas. En muchas situaciones, sin embargo, no se necesita un resultado exacto. Puede ser suciente, por ejemplo, encontrar una frmula aproximada que es vlida, digamos, cuando la cantidad pequea.

es

Maxima
Esto da una aproximacin en serie de potencias para alrededor de 0, hasta los trminos de orden 3.

( %i87) ( %o87)

taylor((1 + x)n, x, 0, 3); (n2 n) x2 (n3 3 n2 +2 n) x3 + + 1 + nx + 2 6

Sec. 7.10. Series de potencias

93

Maxima
Maxima conoce las expansiones en serie de potencias para una gran cantidad funciones matemticas.

( %i88) ( %o88)

taylor(exp(a t) (1 + sin(2 t)), t, 0, 4); (a3 6 a2 + 8) t3 (a2 4 a) t2 + 2 6 (a4 8 a3 + 32 a) t4 + 24 1 + (a + 2) t +

Maxima
Si se da una funcin no conocida, de derivadas.

taylor escribe la serie de potencias en trminos

( %i89) ( %o89)

taylor(1 + f(t), t, 0, 3); 1 + f (0) +


d3 d t3

d f (t) dt t3

t+
t=0

d2 d t2

f (t)
t=0

t2 +

f (t)
t=0

Las series de potencias son frmulas aproximadas que juegan el mismo papel con respecto a las expresiones algebraicas como los nmeros aproximados con las expresiones numricas.

Maxima

permite realizar operaciones en series de potencias y en

todos los casos mantiene el orden apropiado o el grado de precisin para las series de potencias resultantes.

Maxima
He aqu una serie de potencias simple, de orden 3.

( %i90) ( %o90)

taylor(exp(x), x, 0, 3); x2 x3 1+x+ + + 2 6

94

Cap. 7. Matemticas simblicas

Maxima
Cuando se hacen operaciones en una serie de potencias, el resultado es calculado slo en el orden apropiado en x.

( %i91) ( %o91)

%2 (1 + %); 2 2 + 5 x + 132x +

35 x3 6

Maxima
Al copiar los tres primeros trminos del desarrollo anterior se tiene una expresin ordinaria.

( %i92) ( %o92)

2 + 5 x + (13 x2)/2 + (35 x3)/6; 35 x3 13 x2 6 + 2 + 5x + 2

Maxima
Ahora el cuadrado es calculado exactamente.

( %i93) ( %o93)

%2;
35 x3 6

13 x2 2

+ 5x + 2

Maxima
Al aplicar

expand

se obtiene un resultado con once trminos.

( %i94) ( %o94)

1225 x6 36

%, expand; 5 + 455 x + 6

1207 x4 12

265 x3 3

+ 51 x2 + 20 x + 4

Maxima
He aqu una serie de potencias doble de orden 3.

( %i95) ( %o95)

taylor(sin(y + x), [x, 0, 3] , [y, 0, 3]); y


y3 6

+ + 1
y 12
2

y2 2

x + y + 2

y3 12

x2 +

1 6 +

x3 +

Sec. 7.10. Series de potencias

95

Un detalle interesante para mencionar es que serie de potencias de una funcin.

Maxima, en los casos

que sea posible, permite obtener la frmula general del desarrollo en

powerseries(expr, x, a)

devuelve la forma general del desarrollo en serie de potencias de la variable

expr

para

alrededor del punto

Obtencin de series de potencias.

Maxima
He aqu una conocida frmula.

( %i96) ( %o96)

powerseries(sin(x), x, 0); i (1) 1 x2 i1 +1 (2 i1 + 1)! i =0


1

Maxima
Esta es una frmula ms elaborada.

( %i97) ( %o97)

powerseries(cos(x2 1), x, 0); i (1) 2 x2 (2 i2 +1) sin(1) + cos(1) (2 i2 + 1)! i =0


2

i2

(1) 2 x4 i2 (2 i2 )! =0

Maxima
Una forma de eliminar los subndices de los ndices, en las sumas, es usando la funcin

niceindices.

( %i98) ( %o98)

niceindices(powerseries(cos(x2 1), x, 0)); i i (1) x2 (2 i+1) (1) x4 i sin(1) + cos(1) (2 i + 1)! (2 i)! i=0 i=0

96

Cap. 7. Matemticas simblicas

7.11 Transformada de Laplace


laplace(expr, t, s) ilt(expr, s, t)
calcula la transformada de Laplace de

expr con respecto de la variable t y parmetro de transformacin s


calcula la transformada inversa de Laplace de rmetro
Transformadas de Laplace.

expr t.

con respecto de

y pa-

Maxima
Esto calcula la transformada de Laplace.

( %i99) ( %o99)

laplace(t3 exp(a t), t, s); 6 4 (s a)

Maxima
He aqu la transformada inversa.

( %i100) ( %o100)

ilt( %, s, t); t3 %ea t

Captulo 8 Matemticas numricas


8.1 Solucin numrica de ecuaciones
algsys([ecu1 , . . . , ecum ] , [x1 , . . . , xn ]) allroots(ecu, x) find_root(ecu, x, a, b)
Bsqueda de races numricas.

resuelve el sistema de ecuaciones polinmicas bles

ecu1 , . . . , ecum x1 , . . . , x n

para las varia-

calcula aproximaciones numricas de las races reales y complejas de la ecuacin polinmica

ecu

para la variable

calcula una raz de la ecuacin el intervalo de aislamiento

ecu

en

[a, b]

Maxima
solve
devuelve la ecuacin ingresada.

( %i1) ( %o1)

solve(2 4 x + x5 = 0, x); [0 = x5 4 x + 2]

Maxima
algsys
proporciona una lista con soluciones aproximadas.

( %i2)

algsys([2 4 x + x5 = 0], [x]);


97

98

Cap. 8. Matemticas numricas

( %o2)

[[x = 1,243596445373759] , [x = 1,438447695329177 %i 0,11679186122298] , [x = 1,438447695329177 %i 0,11679186122298] , [x = 1,518512140520062] , [x = 0,50849947534103]]

Maxima
La opcin

realonly:true

proporciona nicamente las aproximaciones reales.

( %i3) ( %o3)

algsys([2 4 x + x5 = 0], [x]), realonly : true; [[x = 1,243596445373759] , [x = 0,50849947534103] , [x = 1,518512140520062]]

Si las ecuaciones involucran slo funciones lineales o polinmicas, entonces puede usarse

algsys para obtener aproximaciones numricas

de todas las soluciones. Sin embargo, cuando las ecuaciones involucran funciones ms complicadas, no hay en general ningn procedimiento sistemtico para obtener todas las soluciones, an numricamente. En tales casos, puede usarse Tngase presente que

find_root

para buscar soluciones.

find_root espera que la funcin en cuestin

tenga signos diferentes en los extremos del intervalo de aislamiento.

Maxima
Aqu Maxima devuelve la misma sentencia de entrada, pues extremos del intervalo de aislamiento:

find_root

evala los

[0, 2];

y la funcin

log

que, en este caso,

forma parte de la ecuacin no est denida en cero.

( %i4) ( %o4)

find_root(3 cos(x) = log(x), x, 0, 2); find_root(3 cos(x) = log(x), x, 0,0, 2,0)

Maxima
Variando el extremo izquierdo del intervalo de aislamiento se obtiene una solucin aproximada.

( %i5) ( %o5)

find_root(3 cos(x) = log(x), x, 0,00001, 2); 1,447258617277903

Sec. 8.2. Integrales numricas

99

Maxima
La ecuacin tiene varias soluciones. Si se da un intervalo de aislamiento diferente,

find_root

puede devolver una solucin diferente.

( %i6) ( %o6)

find_root(3 cos(x) = log(x), x, 12, 15); 13,10638768062491

8.2 Integrales numricas


quad_qags(f, x, a, b) quad_qagi(f, x, a, inf ) quad_qagi(f, x, minf, b)
calcula numricamente la integral

b a

f dx
numricamente la integral

calcula

f dx
numricamente la integral

calcula

f dx
la integral

quad_qagi(f, x, minf, inf ) calcula numricamente f dx


Integrales numricas.

Las funciones tro elementos:

quad_qags y quad_qagi devuelven una lista de cua-

1. la aproximacin a la integral, 2. el error absoluto estimado de la aproximacin, 3. el nmero de evaluaciones del integrando, 4. un

cdigo de error.
puede tener los siguientes valores:

El

cdigo de error

0 1

si no ha habido problemas; si se utilizaron demasiados intervalos;

100

Cap. 8. Matemticas numricas

2 3 4 5 6

si se encontr un nmero excesivo de errores de redondeo; si el integrando ha tenido un comportamiento extrao frente a la integracin; fallo de convergencia; la integral es probablemente divergente o de convergencia lenta; si los argumentos de entrada no son vlidos.

Maxima
quad_qags
tegracin. puede manejar singularidades en los puntos nales de la regin de in-

( %i7) ( %o7)

quad_qags(1/sqrt(x (1 x)), x, 0, 1); [3,141592653589849, 6,2063554295832546 1010 , 567, 0]

Maxima
Para resolver integrales numricas sobre regiones innitas se usa

quad_qagi.

( %i8) ( %o8)

quad_qagi(exp(x2), x, minf, inf); [1,772453850905516, 1,420263678183091 108 , 270, 0]

Captulo 9 Funciones y programas


9.1 Denicin de funciones
en

Maxima.

Hasta aqu, se ha visto muchos ejemplos de funciones incorporadas En esta seccin, se mostrar la forma en que el usuario

puede aadir sus propias funciones a

Maxima.

Maxima
Esto dene la funcin

f.

( %i1) ( %o1)

f(x) := x2; f(x) := x2

Maxima
f
eleva al cuadrado su argumento.

( %i2) ( %o2)

f(a + 1); 2 (a + 1)

Maxima
El argumento puede ser un nmero.

( %i3) ( %o3)

f(4); 16

101

102

Cap. 9. Funciones y programas

Maxima
O puede ser una expresin ms complicada.

( %i4) ( %o4)

f(x2 + 3 x); 2 (x2 + 3 x)

Maxima
Puede usarse

en un clculo.

( %i5) ( %o5)

expand(f(x + y + 1)); y2 + 2 x y + 2 y + x2 + 2 x + 1

Maxima
Esto muestra la denicin hecha para

f.

( %i6) ( %t6) ( %o6)

dispfun(f); f(x) := x2 [ %t38]

f(x) := x2

dene la funcin

f f f

dispfun(f) remfunction(f) functions

muestra la denicin de

borra todas las deniciones de

es una variable que contiene los nombres de las funciones denidas por el usuario

Denicin de una funcin en Maxima.

Maxima
Las funciones en Maxima pueden tener cualquier nmero de argumentos

( %i7) ( %o7)

hump(x, xmax) := (x xmax)2 /xmax; (x xmax)2 hump(x, xmax) := xmax

Sec. 9.1. Denicin de funciones

103

Maxima
Puede usarse la funcin

hump

tal como cualquiera de las funciones predenidas.

( %i8) ( %o8)

2 + hump(x, 3,5); 2 0,28571428571429 (x 3,5) + 2

Maxima
Esto da una nueva denicin para

hump,

que sobrescribe la anterior.

( %i9) ( %o9)

hump(x, xmax) := (x xmax)4; hump(x, xmax) := (x xmax)4

Maxima
Slo es mostrada la nueva denicin.

( %i10) ( %t10) ( %o10)

dispfun(hump); hump(x, xmax) := (x xmax)4 [ %t42]

Maxima
Esto limpia todas las deniciones para

hump.

( %i11) ( %o11)

remfunction(hump); [hump]

dispfun(f1 , . . . , fn ) remfunction(f1 , . . . , fn ) dispfun(all) remfunction(all)

muestra las deniciones de borra todas las

f1 , . . . , fn
de

deniciones

f1 , . . . , f n
muestra las deniciones de todas la funciones denidas por el usuario borra todas las deniciones de todas la funciones denidas por el usuario
Vista y borrado de varias funciones.

104

Cap. 9. Funciones y programas

Maxima
Ahora se dene la funcin

g.

( %i12) ( %o12)

g(x) := sqrt(1 x); g(x) := 1 x

Maxima
Estro muestra la denicin de todas las funciones (en este caso

g).

( %i13) ( %t13) ( %t14) ( %o14)

dispfun(all); f(x) := x2 g(x) := 1 x [ %t13, %t14]

Maxima
Esto borra la denicin de todas las funciones (en este caso

g).

( %i15) ( %o15)

remfunction(all); [f, g]

Maxima
Ya no hay funciones denidas por el usuario.

( %i16) ( %o16)

dispfun(all); [ ]

Cuando se ha terminado con una funcin particular, es bueno limpiar las deniciones que se haya hecho para ella. Si no, podra incurrirse en un conicto al usar la misma funcin para un propsito diferente en la sesin de

Maxima.

Maxima

tambin permite denir funciones con una cantidad va-

riable de argumentos (funciones de argumento variable) y funciones que se aplican directamente a listas (funciones

array ).

Sec. 9.1. Denicin de funciones

105

F [L] := (L) F [x1 , . . . , xn ] := (x1 , . . . , xn ) F [x1 , . . . , xn ] := [1 (x1 , . . . , xn ), . . . , m (x1 , . . . , xn )]

dene la funcin

F cuyo nmero de arF F


cuyo argu-

gumentos es variable dene la funcin array mento es una lista dene la funcin array lista cuyo argu-

mento es una lista y que devuelve una

Ms deniciones de funciones en Maxima.

Maxima
Aqu se dene la funcin

que admite un nmero variable de argumentos.

( %i17) ( %o17)

F([x]) := x2 + 4; F([ x ]) := x2 + 4

Maxima
Esto evala

en un solo argumento.

( %i18) ( %o18)

F(2); 8

Maxima
Esto evala

en dos argumentos.

( %i19) ( %o19)

F(2, 3); [8, 13]

Maxima
He aqu la denicin de la funcin array

G.

( %i20) ( %o20)

G [x, y] := x2 + y2; Gx,y := x2 + y2

106

Cap. 9. Funciones y programas

Maxima
Aqu se evala

en la lista

[2, 3]

( %i21) ( %o21)

G [2, 3] ; 13

Maxima
Esto dene la funcin array

que devuelve una lista.

( %i22) ( %o22)

H [x, y] := [2 x, 3 y, x y] ; Hx,y := [2 x, 3 y, x y]

Maxima
Aqu se evala la funcin

en la lista

[4, 3].

( %i23) ( %o23)

H [4, 3] ; [8, 0, 12]

Para visualizar la denicin de este tipo de funciones puede usarse la funcin usarse la funcin

dispfun, pero para borrar las respectivas deniciones debe remarray.

remarray(F ) remarray(F1 , . . . , Fn ) remarray(all)


Borrado de funciones array.

borra la funcin array

F F1 , . . . , F n

borra las funciones array

borra todas las funciones array denidas por el usuario

Maxima
Esto la denicin de todas las funciones array, hasta ahora, denidas.

( %i24) ( %t24) ( %t25)

dispfun(all); F([ x ]) := x2 + 4 Gx,y := x2 + y2

Sec. 9.1. Denicin de funciones

107

( %t26) ( %o26)

Hx,y := [2 x, 3 y, x y] [ %t24, %t25, %t26]

Maxima
Esto borra la denicin de la funcin

denida en

( %i17)

( %i27) ( %o27)

remfunction(F); [F]

Maxima
Esto borra la denicin de todas las funciones array denidas por el usuario.

( %i28) ( %o28)

remarray(all); [G, H]

Adems,

Maxima

permite denir las llamadas funciones

annimas

que son de mucha utilidad en algunos contextos en los que sea necesario un nombre de funcin y que generalmente est vinculado con la programacin. La funcin para denirlas es

lambda.

lambda([x], expr) lambda([x1 , . . . , xm ] , expr1 , . . . , exprn )


Funcin annima.

dene una funcin annima dene una funcin annima de argumentos mltiples

Maxima
Una funcin annima puede asignarse a una variable y ser evaluada como si fuese una funcin ordinaria.

( %i29) ( %o29) ( %i30) ( %o30)

f : lambda([ x ] , x2); lambda([ x ] , x2 ) f(a); a2

108

Cap. 9. Funciones y programas

Maxima
O puede aplicarse directamente.

( %i31) ( %o31)

lambda([ x ] , x2 )(a); a2

Maxima
No obstante, no es reconocida por

dispfun.

( %i32) ( %o32)

dispfun(all); [ ]

En muchas clases de clculos, el usuario puede encontrarse digitando la misma entrada a tencias de entrada.

Maxima muchas veces. Es posible ahorrarse

mucha digitacin deniendo una funcin que contiene todas las sen-

Maxima
Esto construye un producto de tres trminos, y expande el resultado.

( %i33) ( %o33)

expand(product(x + i, i, 1, 3)); x3 + 6 x2 + 11 x + 6

Maxima
Esto hace lo mismo, pero con cuatro trminos.

( %i34) ( %o34)

expand(product(x + i, i, 1, 4)); x4 + 10 x3 + 35 x2 + 50 x + 24

Maxima
Esto dene una funcin lo expande.

exprod

que construye un producto de n trminos, luego

( %i35)

exprod(n) := expand(product(x + i, i, 1, n)) $

Sec. 9.1. Denicin de funciones

109

Maxima
Siempre que usa la funcin, ejecutar las operaciones

product

expand.

( %i36) ( %o36)

exprod(5); x5 + 15 x4 + 85 x3 + 225 x2 + 274 x + 120

Las funciones que se denen en

Maxima

son esencialmente proce-

dimientos que ejecutan las sentencias dadas por el usuario. Es posible incluir varios pasos en los procedimientos, separados por comas.

Maxima
El resultado que se obtiene de la funcin es simplemente la ltima expresin en el procedimiento. Note que debe ponerse parntesis alrededor del procedimiento cuando se dene.

( %i37)

cex(n, i) := ( t : exprod(n), coeff(t, xi) )$

Maxima
Esto corre el procedimiento.

( %i38) ( %o38)

cex(5, 3); 85

(expr1 , expr2 , . . .)

una secuencia de expresiones para evaluar (procedimiento)

block([a, b, . . .] , proc)

un procedimiento con variables locales

a, b, . . .
Construccin de procedimientos.

Una buena idea es declarar, como locales, las variables que se usan dentro de los procedimientos, de modo que no intereran con clculos fuera de stos. Puede hacerse esto estableciendo los procedimientos como tratadas como locales.

bloques, en los cuales se da una lista de variables para que sean

110

Cap. 9. Funciones y programas

Maxima
La funcin

cex denida en ( %i37)

no es un bloque, as que el valor de

t escapa,

y existe incluso despus de la evaluacin de la funcin.

( %i39) ( %o39)

t; x5 + 15 x4 + 85 x3 + 225 x2 + 274 x + 120

Maxima
Esta funcin es denida como un bloque con variable local

u.

( %i40)

ncex(n, i) := block([u] , u : exprod(n), coeff(u, xi) ) $

Maxima
La funcin devuelve el mismo resultado que la anteriormente denida.

( %i41) ( %o41)

ncex(5, 3); 85

Maxima
Ahora, sin embargo, el valor de u no se escapa de la funcin.

( %i42) ( %o42)

u u

Es posible asignar un valor inicial a una o ms variables locales dentro de la lista de las mismas. Tambin se puede denir una funcin como bloque sin declarar variables locales, para lo cual debe omitirse dicha lista. Un bloque puede aparecer dentro de otro bloque. Las variables locales se inicializan cada vez que se entra dentro de un nuevo bloque. Las variables locales de un bloque se consideran globales dentro de otro anidado dentro del primero. Si una variable es no local dentro

Sec. 9.2. Reglas de transformacin para funciones

111

de un bloque, su valor es el que le corresponde en el bloque superior. Este criterio se conoce con el nombre de alcance dinmico.

9.2 Reglas de transformacin para funciones


Maxima
permite al usuario denir sus propias reglas de transformacin y patrones de comparacin.

Maxima
Denicin de la regla de transformacin que reemplaza

por

3.

( %i43) ( %o43)

defrule(regtran1, x, 3); regtran1 : x 3

Maxima
Aplicacin de la regla de transformacin

regtran1

( %i44) ( %o44)

apply1(1 + f(x) + f(y), regtran1); f (y) + f (3) + 1

Maxima
Puede denirse una regla de transformacin para

f(x). Esta regla no afecta a f(y).

( %i45) ( %o45) ( %i46) ( %o46)

defrule(regtran2, f(x), p); regtran2 : f (x) p apply1(1 + f(x) + f(y), regtran2); f (y) + p + 1

Maxima
Esto dene un patrn

f(t)

que admite cualquier argumento para f.

( %i47) ( %o47) ( %i48) ( %o48)

matchdeclare(t, true); done defrule(patron, f(t), t2 ); patron : f (t) t2

112

Cap. 9. Funciones y programas

Maxima
Aqu se aplica el patrn previamente denido.

( %i49) ( %o49)

apply1(1 + f(x) + f(y), patron); y2 + x2 + 1

Maxima
Esto muestra todas las reglas, hasta aqu, denidas.

( %i50) ( %t51) ( %t52) ( %t53) ( %o53)

disprule(all); regtran1 : x 3 regtran2 : f (x) p patron : f (t) t2 [ %t51, %t52, %t53]

Maxima
Con esta sentencia se borran todas las deniciones de las reglas y

regtran1, regtran2

patron.

( %i54) ( %o54)

clear_rules(); false

Maxima
Esto indica que todas las deniciones de las reglas han sido borradas.

( %i55) ( %o55)

disprule(all); [ ]

Probablemente, el aspecto ms potente de las reglas de transformacin en

Maxima

es que ellas pueden involucrar expresiones no

nrica f(t) para la cual se ha declarado el tipo de variable t con matchdeclare. As, una regla de transformacin para f(t) especica cmo debera ser transformada la funcin f con el tipo de argumento especicado. Ntese que, en contraste, una regla de transformacin

slo literales, sino tambin patrones. Un patrn es una expresin ge-

Sec. 9.2. Reglas de transformacin para funciones

113

para

f(x)

sin realizar la declaracin de la variable, especica slo la

transformacin de la expresin literal nada sobre la transformacin de

f(y).

f(x),

y por ejemplo, no dice

Siempre que se cumpla con la declaracin especicada, es posible establecer reglas de transformacin para expresiones de cualquier forma.

Maxima
Esto dene una funcin de predicado que dene el patrn de producto para un argumento.

( %i56) ( %o56) ( %i57) ( %o57)

prodp(expr) := not atom(expr) and op(expr) =  ; prodp(expr) := atom(expr) op(expr) =   matchdeclare(p, prodp); done

Maxima
Ahora se dene una regla que transforme una funcin aplicada a un producto como la suma de los factores a los cuales se les ha aplicado la funcin.

( %i58) ( %o58)

defrule( reg, f(p), apply(  + , map(f, args(p)) ) ); reg : f (p) apply (+, map (f, args (p)))

Maxima
Luego, al aplicar la regla recin denida se aprecia el efecto producido.

( %i59) ( %o59)

apply1(f(a b) + f(c d), reg); f (d) + f (c) + f (b) + f (a)

Maxima
Esto aplica la regla sin limitar el nmero de los factores en el argumento de

f.

( %i60) ( %o60)

apply1(f(a) + f(a b c) + f(c), reg); 2 f (c) + f (b) + 2 f (a)

114

Cap. 9. Funciones y programas

Maxima
Esto combina la regla denida por el usuario con la funcin

expand

de Maxima.

( %i61) ( %o61)

apply1(f(a) f(a b c) f(c), reg), expand; f (a) f2 (c) + f (a) f (b) f (c) + f2 (a) f (c)

9.3 Funciones denidas a partir de expresiones


En muchos casos, sobre todo en programacin, resulta bastante til poder denir una funcin a partir de una expresin dada para luego poder invocarla con facilidad y as evitar el uso reiterado de la funcin

ev

(ver seccin 6.2).

define(f (x1 , . . . , xn ), expr) define(f [x1 , . . . , xn ], expr)

dene una funcin de nombre argumentos

x1 , . . . , x n

y cuerpo

f con expr

dene una funcin array de nombre

f con expr

argumentos

x1 , . . . , x n

y cuerpo

Denicin de funciones a partir de expresiones.

Maxima
Esto almacena la expresin

x2 + 1

en la variable

ex.

( %i62) ( %o62)

ex : x2 + 1; x2 + 1

Maxima
Aqu se pretende denir la funcin

a partir de

ex.

No obstante, al realizar una

evaluacin no se obtiene el resultado esperado.

( %i63) ( %i64) ( %o64)

f(x) := ex $ f(8); x2 + 1

Sec. 9.3. Funciones denidas a partir de expresiones

115

Maxima
Por otra parte, al utilizar

define

para denir la funcin

a partir de

ex

si se

obtiene un resultado satisfactorio.

( %i65) ( %i66) ( %o66)

define(g(x), ex) $ g(8); 65

Una gran utilidad de numricos.

define se aprecia al denir funciones a par-

tir de las derivadas de otras, las cuales sern evaluadas en valores

Maxima
He aqu la denicin de la funcin

f = x2 + 1 .

( %i67)

f(x) := x2 + 1 $

Maxima
Ahora, a partir de

f,

se dene

f 

como

f  =

df . dx

( %i68)

f (x) := diff(f(x), x) $

Maxima
La evaluacin somblica de

f 

no presenta problema alguno.

( %i69) ( %o69)

f (t); 2t

Maxima
No obstante, la evaluacin numrica no esta permitida para dicha funcin.

( %i70) #0:

f (8);

di: second argument must be a variable; found 8 f '(x=8) - - an error. To debug this try: debugmode(true);

116

Cap. 9. Funciones y programas

Maxima
Aqu se vuelve a denir

f ,

pero en este caso se utiliza la funcin

define

(re-

cuerde que esta nueva denicin anula a la anterior).

( %i71)

define(f (x), diff(f(x), x)) $

Maxima
La evaluacin simblica es idntica.

( %i72) ( %o72)

f (t); 2t

Maxima
Sin embargo, ya no hay dicultad en la evaluacin numrica.

( %i73) ( %o73)

f (8); 16

Captulo 10 Listas
10.1 Juntar objetos
Las listas son bloques de construccin bsica para Maxima y Lisp 1 . Todos los tipos de datos diferentes a los arreglos, tablas mixtas o nmeros son representados como listas en Lisp. Puede decirse que, en un nivel bsico, lo que esencialmente hace una lista en

Maxima

es proporcionar una forma de agrupar varias

expresiones de cualquier clase.

Maxima
He aqu una lista de nmeros.

( %i1) ( %o1)

[2, 3, 4] ; [2, 3, 4]

Maxima
Esto da una lista de expresiones simblicas.

( %i2) ( %o2)

x % 1; [x2 1, x3 1, x4 1]

1 Lisp (List Processing )


est programado Maxima.

es el lenguaje de programacin de alto nivel en el que

117

118

Cap. 10. Listas

Maxima
Es posible derivar estas expresiones.

( %i3) ( %o3)

diff( %, x); [2 x, 3 x2 , 4 x3 ]

Maxima
Y luego encontrar los valores cuando

es reemplazado por

3.

( %i4) ( %o4)

%, x = 3; [6, 27, 108]

La mayora de funciones matemticas incorporadas en mente sobre cada elemento de una lista.

Maxima

han sido implementadas listables de modo que acten separada-

10.2 Generacin de listas


Maxima
permite crear listas de acuerdo a una cierta regla denida por el usuario. Para ello cuenta con la funcin incorporada

create_list.

create_list(f, i, imin , imax ) create_list(f, i, list) create_list(f, i, imin , imax , j, jmin , jmax , . . .) create_list(f, i, list1 , j, list2 , . . .)

da una lista de valores con de

i i

variando

imin

imax
variando

da una lista de valores con

de acuerdo a cada elemento de genera una lista con cada

list
ndice

(i, j, . . .) variando del valor mnimo al valor mximo que le han sido asociados genera una lista con cada ndice

(i, j, . . .) variando de acuerdo a cada elemento de la lista que se le ha asociado

Funciones para generar de listas.

Sec. 10.2. Generacin de listas

119

Maxima
Esto da una lista de los valores de

i2 ,

con

variando de

6.

( %i5) ( %o5)

create_list(i2, i, 1, 6); [1, 4, 9, 16, 25, 36]

Maxima
He aqu una lista de los valores de

sen

n 5

para

variando de

4.

( %i6) ( %o6)

create_list(sin(n/5), n, 0, 4); 1 2 3 0, sin , sin , sin , sin 5 5 5

4 5

Maxima
Esto da los valores numricos de la tabla generada en

( %i6)

( %i7) ( %o7)

%, numer; [0, 0,19866933079506, 0,38941834230865, 0,56464247339504, 0,71735609089952]

Maxima
Tambin puede hacerse tablas de frmulas.

( %i8) ( %o8)

create_list(xi + 2 i, i, 1, 5); [x + 2, x2 + 4, x3 + 6, x4 + 8, x5 + 10]

Maxima
create_list usa exactamente la misma notacin para el iterador nes sum y product que fueron mencionadas en la seccin 7.4.
que las funcio-

( %i9) ( %o9)

product(xi + 2 i, i, 1, 5); (x + 2) (x2 + 4) (x3 + 6) (x4 + 8) (x5 + 10)

120

Cap. 10. Listas

Maxima
Esto hace una lista con valores de

variando desde

hasta

en pasos de

0,25

( %i10) ( %o10) ( %i11) ( %o11)

create_list(i/4, i, 1, 4), numer; [0,25, 0,5, 0,75, 1] create_list(sqrt(x), x, %); [0,5, 0,70710678118655, 0,86602540378444, 1]

Maxima
Es posible realizar otras operaciones en las listas que se obtienen con

create_list.

( %i12) ( %o12)

%2 + 3; [3,25, 3,5, 3,75, 4]

Maxima
Esto hace una lista de

xi + y j

con

variando desde

hasta

variando desde

hasta

2.

( %i13) ( %o13)

create_list(xi + yj, i, 1, 3, j, 1, 2); [y + x, y2 + x, y + x2 , y2 + x2 , y + x3 , y2 + x3 ]

Maxima
Esto crea una lista conteniendo cuatro copias del smbolo

x.

( %i14) ( %o14)

create_list(x, i, 1, 4); [x, x, x, x]

Maxima
Esto da una lista de cuatro nmeros seudo aleatorios.

( %i15) ( %o15)

create_list(random(1,0), i, 1, 4); [0,25223887668538, 0,41556272272148, 0,61257388925382, 0,84181265533592]

Sec. 10.3. Eleccin de elementos de una lista

121

10.3 Eleccin de elementos de una lista


Los elementos de las listas son numerados en orden ascendente, empezando en lista en

Maxima

1.

Por lo cual, es posible elegir un elemento de una

mediante su ndice.

Para realizar la mencionada eleccin debe utilizarse adecuadamente la funcin

part.

part(list, i)

list [ i ]

el

i-simo

elemento de

list

(el primer

elemento es

list [ 1 ])

part(list, [ i, j, . . . ]) part(list, i1 , . . . , ik )

una lista formada por los elementos

i, j, . . .

de

list list que se especii1 , . . . , ik (primero i1 de list, despus

obtiene la parte de ca por los ndices se obtiene la parte sucesivamente)

la parte i2 del resultado anterior, y as

first(list), second(list), . . . , tenth(list) last(list)

devuelve el primer, segundo, ..., dcimo elemento de

list list

devuelve el ltimo elemento de

Operaciones con elementos de una lista.

Maxima
Esto extrae el tercer elemento de la lista.

( %i16) ( %o16)

part([4, 1, 8, 6] , 3); 8

Maxima
Esto extrae una lista de elementos.

( %i17) ( %o17)

part([4, 1, 8, 6] , [2, 3, 1, 2, 3, 4, 1]); [1, 8, 4, 1, 8, 6, 4]

122

Cap. 10. Listas

Maxima
Esto asigna una lista en la variable

u.

( %i18) ( %o18)

u : [7, 2, 4, 6] ; [7, 2, 4, 6]

Maxima
Puede extraerse elementos de

u.

( %i19) ( %o19)

u [3] ; 4

Maxima
Pueden realizarse operaciones diversas con

u.

( %i20) ( %o20)

(u + 1)/(u 6); 3 1 , , 6, 8 4 6

Es posible crear listas multidimensionales mediante la anidacin de listas en listas.

Maxima
Esto crea una lista

2 2,

y le da el nombre

m.

( %i21) ( %o21)

m : create_list(create_list(i j, j, 1, 2), i, 1, 2); [[0, 1] , [1, 0]]

Maxima
Esto extrae la primera sublista de la lista de listas,

( %i22) ( %o22)

m [1] ; [0, 1]

Sec. 10.3. Eleccin de elementos de una lista

123

Maxima
Esto extrae el segundo elemento de aquella sublista.

( %i23) ( %o23)

%[2]; 1

Maxima
Esto hace las dos operaciones juntas.

( %i24) ( %o24)

part(m, 1, 2); 1

Maxima
Esto genera una lista tridimensional de

2 2 2.

Es una lista de listas de listas.

( %i25) ( %o25)

create_list(create_list(create_list(i j2 k3, k, 1, 2), j, 1, 2), i, 1, 2); [[[1, 8] , [4, 32]] , [[2, 16] , [8, 64]]]

Maxima
Si no se anida

create_list

se obtiene una lista unidimensional.

( %i26) ( %o26)

create_list(i j2 k3, i, 1, 2, j, 1, 2, k, 1, 2); [1, 8, 4, 32, 2, 16, 8, 64]

Al asignar una lista a una variable, puede usarse las listas en Maxima de modo similar a los arrays en otros lenguajes de programacin. De esta manera, por ejemplo, es posible resetear un elemento de una lista asignando un valor a

u [ i ].

part(u, i) u [ i ] u [ i ] : valor
Operando listas como arrays.

extrae el i-simo elemento de la lista resetea el

i -simo

elemento de la lista

124

Cap. 10. Listas

Maxima
Aqu hay una lista.

( %i27) ( %o27)

u : [2, 1, 5, 7] ; [2, 1, 5, 7]

Maxima
Esto resetea el segundo elemento de la lista.

( %i28) ( %o28)

u [2] : 0; 0

Maxima
Ahora la lista asignada a

se ha modicado.

( %i29) ( %o29)

u; [2, 0, 5, 7]

10.4 Prueba y bsqueda de elementos de una lista


Maxima
tambin tiene funciones que buscan y prueban elementos de listas, basndose en los valores de dichos elementos.

sublist(L, P ) sublist_indices(L, P ) ?position(elem, L) member(f orm, list)

devuelve la lista de elementos lista

de la

para los cuales el predicado

P (x)

es verdadero

devuelve los ndices de los elementos de la lista

para la cual el predicado

P (x)

es verdadero

devuelve el ndice que indica la posicin que ocupa prueba si

elem

en la lista

L list

f orm

es un elemento de

Funciones para la prueba y bsqueda de elementos de una lista.

Sec. 10.4. Prueba y bsqueda de elementos de una lista

125

freeof(f orm, list) freeof(f orm1 , . . . , f ormn , list)

prueba si parte

f orm

no ocurre en ninguna

list

equivale a

freeof(f orm1 , list) and . . . and freeof(f ormn , list)

Funciones para la prueba y bsqueda de elementos de una lista.

Maxima
Esto da una lista de todos los elementos, de la lista simblico.

[a, 1, 3, b, 7],

que son de tipo

( %i30) ( %o30)

sublist([a, 1, 3, b, 7] , symbolp); [a, b]

Maxima
Esto da una lista de todas posiciones, de la lista tran elementos de tipo simblico.

[a, 1, 3, b, 7],

en las que se encuen-

( %i31) ( %o31)

sublist_indices([a, 1, 3, b, 7] , symbolp); [1, 4]

Maxima
En este caso se emplea una funcin annima para denir un predicado, el cual indica que se quiere obtener una lista de todos los elementos, de la lista que son mayores que 2.

[1, 2, 4, 7, 6, 2],

( %i32) ( %o32)

sublist([1, 2, 4, 7, 6, 2] , lambda([h] , h > 2)); [4, 7, 6]

Maxima
Esto muestra que

es un elemento de

[11, 1, 2, 4, 5, 5].

( %i33) ( %o33)

member(4, [11, 1, 2, 4, 5, 5]); true

126

Cap. 10. Listas

Maxima
Por otra parte

3,

no lo es.

( %i34) ( %o34)

member(3, [11, 1, 2, 4, 5, 5]); false

Maxima
Esto muestra que

ocurre en alguna parte de

[[1, 2] , [3, 0]].

( %i35) ( %o35)

freeof(0, [[1, 2] , [3, 0]]); false

10.5 Combinacin de listas


Maxima
permite combinar dos listas alternando sus elementos.

join(list1 , list2 )
Combinar listas.

crea una nueva lista con los elementos de las listas

list1

list2

alternados

Maxima
He aqu dos listas, de igual longitud, combinadas.

( %i36) ( %o36)

join([1, 2] , [a, b]); [1, a, 2, b]

Maxima
He aqu la combinacin de dos listas de diferente longitud (join ignora los elementos sobrantes de la lista de mayor longitud).

( %i37) ( %o37)

join([1, 2] , [a, b, c, d]); [1, a, 2, b]

Sec. 10.6. Reordenamiento de listas

127

10.6 Reordenamiento de listas


El ordenamiento de listas tambin es permitido por

Maxima.
en forma

sort(list) sort(list, P ) reverse(list) permutations(list) unique(list)


Ordenamiento de listas.

ordena los elementos de ascendente ordena los elementos de con el predicado

list

list de acuerdo

invierte el orden de los elementos de

list
devuelve un conjunto con todas las permutaciones distintas de los miembros de

list list
sin redundancias, es de-

devuelve

cir, sin elementos repetidos

Maxima
Esto ordena los elementos de una lista en forma estndar. En casos simples como ste el ordenamiento es alfabtico o numrico.

( %i38) ( %o38)

sort([d, b, c, a]); [a, b, c, d]

Maxima
Esto ordenada los elementos de la lista en forma descendente.

( %i39) ( %o39)

sort([11, 1, 2, 4, 5, 5] ,  > ); [11, 5, 5, 4, 2, 1]

Maxima
Esto invierte el orden de los elementos de la lista.

( %i40) ( %o40)

reverse([d, b, c, a]); [a, c, b, d]

128

Cap. 10. Listas

Maxima
Aqu se tienen todas las permutaciones de

[a, b, c].

( %i41) ( %o41)

permutations([a, b, c]); {[a, b, c] , [a, c, b] , [b, a, c] , [b, c, a] , [c, a, b] , [c, b, a]}

Maxima
De esta forma se eliminan los elementos repetidos en una lista.

( %i42) ( %o42)

unique([11, 1, 2, 2, 4, 5, 5]); [1, 2, 4, 5, 11]

10.7 Agregar y quitar elementos de una lista


append(list1 , list2 , . . . , listn ) cons(elem, list) endcons(elem, list) delete(elem, list) rest(list, n) deleten(list, n)
devuelve una lista cuyos elementos son los de la lista

list1

seguidos de los de

list2 , . . . , listn
agrega agrega borra

elem elem

al inicio de la lista al nal de la lista

list

list

elem

de la lista

list

borra los primeros o los ltimos la lista

n elementos (n > 0) n elementos (n < 0) de


elemento de la lista

list

borra el

n -simo

list
Agregar y quitar elementos de una lista.

Maxima
Aqu se genera una lista con los elementos de dos listas dadas.

( %i43) ( %o43)

append([1, 2, 3] , [a, b, c]); [1, 2, 3, a, b, c]

Sec. 10.8. Reorganizacin de listas

129

Maxima
Aqu se inserta

al inicio de la lista dada.

( %i44) ( %o44)

cons(x, [a, b, c]); [x, a, b, c]

Maxima
Esto devuelve una lista dada con los dos primeros elementos borrados.

( %i45) ( %o45)

rest([a, g, f, c, x] , 2); [f, c, x]

Maxima
Esto devuelve una lista dada con los dos ltimos elementos borrados.

( %i46) ( %o46)

rest([a, g, f, c, x] , 2); [a, g, f]

10.8 Reorganizacin de listas


flatten(list) partition(list, x)
elimina todos los niveles que pueda tener la lista

list list en dos listas; una

particiona la lista penden de den de

que contiene los elementos que no de-

x,

y otra, los que si depen-

Funciones para reorganizar listas anidadas.

Maxima
He aqu una lista a la que se le eliminan todos los niveles.

( %i47) ( %o47)

flatten([7, 2, [3, [5]] , 4]); [7, 2, 3, 5, 4]

130

Cap. 10. Listas

Maxima
Esto particiona la lista

[a, b, a2 + 1, c].

( %i48) ( %o48)

partition([a, b, a2 + 1, c] , a); [[b, c] , [a, a2 + 1]]

10.9 Funciones adicionales para listas


listp(expr) emptyp(list) length(list) apply(f, [x1 , . . . , xn ]) map(f, [a1 , . . . , an ]) map(f, [a1 , . . . , an ] , [b1 , . . . , bn ] , . . .) outermap(f, list1 , . . . , listn )
verica si verica si

expr list

es una lista

es una lista vaca

devuelve la longitud de evala

list

f (x1 , . . . , xn ) [f (a1 ), . . . , f (an )] [f (a1 , b1 , . . .), . . . , f


a cada uno de la lista

devuelve la lista devuelve

f (an , bn , . . .)]
aplica la funcin los elementos del producto cartesiano

list1 list2 . . . listn


Algunas funciones adicionales para listas.

Maxima
Con la funcin

length

es fcil obtener la longitud de una lista.

( %i49) ( %o49)

length([7, 9, 0]); 3

Maxima
Aqu se usa la funcin

apply

para encontrar el elemento de mayor valor.

( %i50) ( %o50)

apply(max, [11, 1, 2, 4, 5, 5]); 11

Sec. 10.9. Funciones adicionales para listas

131

Maxima
He aqu un ejemplo en el que se usa la funcin

map.

( %i51) ( %o51)

map(first, [[a, b], [c, d]]); [a, c]

Maxima
Este es otro ejemplo en el que se usa la funcin

map.

Para usos como este debe

recordarse que las listas deben tener la misma cantidad de elementos.

( %i52) ( %o52)

map( + , [1, 2, 9], [1, 3, 7]); [0, 5, 16]

Maxima
He aqu un ejemplo en el que se usa la funcin

outermap.

( %i53) ( %o53)

outermap(, [a, b], [c, d, e]); [[ac , ad , ae ], [bc , bd , be ]]

Captulo 11 Arrays

array(nombre, dim1 , . . . , dimn ) array(nombre, tipo, dim1 , . . . , dimn )


Creacin de arrays.

crea un array de dimensin ser menor o igual que 5

n, que debe

crea un array con sus elementos del tipo especicado (el tipo puede ser

fixnum

flonum)

listarray(A) arrayinfo(A) fillarray(A, B)

devuelve una lista con los elementos del array

devuelve informacin acerca del array

A
rellena el array

con los valores de

B,
Algunas funciones para arrays.

que puede ser una lista o, tambin,

otro array

Maxima
Esto dene el array

de dimensin

2.

( %i1) ( %o1)

array(u, 2); u

132

133

Maxima
Esto indica que el array no tiene valores asignados.

( %i2) ( %o2)

listarray(u); [#####, #####, #####]

Maxima
Esto asigna valores, a partir de una lista, al array.

( %i3) ( %o3)

fillarray(u, [1, 7, 8]); u

Maxima
Esto permite visualizar los valores asignados.

( %i4) ( %o4)

listarray(u); [1, 7, 8]

Maxima
Aqu se dene el array

( %i5) ( %o5)

array(phi, 1, 2);

Maxima
Esto asigna valores a

( %i6)

phi[0,0]:-1$ phi[0,1]:1$ phi[0,2]:4$ phi[1,0]:4$ phi[1,1]:7$ phi[1,2]:5$

Maxima
Aqu se tiene una lista con los valores asignados a

( %i12)

listarray(phi);

134

Cap. 11. Arrays

( %o12)

[1, 1, 4, 4, 7, 5]

Maxima
Esto da informacin acerca de

( %i13) ( %o13)

arrayinfo(phi); [declared , 2, [1, 2]]

Si el usuario asigna un valor a una variable subindicada antes de declarar el array correspondiente, entonces se construye un array no declarado. Los arrays no declarados, tambin conocidos por el nombre de arrays de claves (hashed arrays), son ms generales que los arrays declarados. El usuario no necesita declarar su tamao mximo y pueden ir creciendo de forma dinmica. Los subndices de los arrays no declarados no necesariamente deben ser nmeros.

Maxima
Esto asigna un valor a la variable

subindicada con

hola.

( %i14) ( %o14)

t [hola] : a; a

Maxima
Esto asigna un valor a la variable

subindicada con

adios.

( %i15) ( %o15)

t [adios] : b; b

Maxima
Ahora se muestran los valores asignados al array no declarado

t.

( %i16) ( %o16)

listarray(t); [b, a]

135

Maxima
Y tambin se muestra informacin con respecto a

t.

( %i17) ( %o17)

arrayinfo(t); [hashed , 1, [adios] , [hola]]

Captulo 12 Matrices
12.1 Generacin de Matrices
Las matrices en rador

matrix

Maxima

son expresiones que comprenden el ope-

indica que

Maxima

y cuyos argumentos son listas (ver seccin 17.2). Esto tiene establecida una diferencia entre una matriz

y una lista de listas.

matrix([a11 , a12 , . . . , a1n ] , . . . , [am1 , am2 , . . . , amn ]) genmatrix(f, m, n) entermatrix(m, n) ident(n) zeromatrix(m, n) diagmatrix(n, elem)

devuelve una matriz de orden

mn

devuelve una matriz partir de

mn

generada a

f m n,

devuelve una matriz de orden teractiva

cuyos elementos son leidos de forma in-

devuelve la matriz identidad de orden

n
devuelve una matriz rectangular

mn

con todos sus elementos iguales a cero devuelve una matriz diagonal de orden

n
Funciones para generar matrices.

con los elementos de la diagonal to-

dos ellos iguales a

elem

136

Sec. 12.1. Generacin de Matrices

137

diag_matrix(d1 , d2 , . . . , dn ) vandermonde_matrix ([x1 , . . . , xn ]) hilbert_matrix (n)

devuelve una matriz diagonal con los elementos de la diagonal iguales a

d1 , d2 , . . . , dn
devuelve una matriz sima la es

n por n, cuya i (n1) [1, xi , x2 , . . . , xi ] i

devuelve la matriz de Hilbert (si mensaje de error)

n por n n no es un entero positivo, emite un

Funciones para generar matrices.

Maxima
He aqu la denicin de una matriz.

( %i1) ( %o1)

matrix([3, 1] , [2, 4]); 3 1 2 4

Maxima
Una lista de listas no es interpretada como matriz.

( %i2) ( %o2)

[[3, 1] , [2, 4]] ; [[3, 1] , [2, 4]]

Maxima
Con

apply

puede convertirse una lista de listas a matriz.

( %i3) ( %o3)

apply(matrix, [[3, 1] , [2, 4]]); 3 1 2 4

Maxima
Aqu se genera una matriz

(ai,j ) M33 /ai,j = i 2j .

( %i4) ( %i5)

a[i, j] := i 2 j $ genmatrix(a, 3, 3);

138

Cap. 12. Matrices

( %o5)

1 0 1

3 2 1

5 4 3

Maxima
Esto genera una matriz de Vandermonde simblica.

( %i6) ( %o6)

vandermonde_matrix([x[0], x[1], x[2]]); 1 x0 x2 0 1 x1 x2 1 1 x2 x2 2

Maxima
Esto genera una matriz de Vandermonde numrica.

( %i7) ( %o7)

vandermonde_matrix([2, 3, 5]); 1 2 4 1 3 9 1 5 25

Maxima
He aqu una matriz de Hilbert de orden

3.

( %i8) ( %o8)

hilbert_matrix(3); 1 1 1 2 3 1 1 1
2 1 3 3 1 4 4 1 5

12.2 Elegir elementos de matrices


M[ i ] M [ i, j ]
part(M, i) part(M, i, j) devuelve la

i -sima la de la matriz M


Mi,j
de la matriz

devuelve el elemento

M
Funciones para elegir elementos de matrices.

Sec. 12.3. Operaciones matriciales

139

Maxima
Esto genera la matriz

mediante una funcin annima.

( %i9) ( %o9)

A : genmatrix(lambda([ i, j ] , i j), 3, 3); 0 1 2 1 0 1 2 1 0

Maxima
Aqu se selecciona el elemento

A1,2 .

( %i10) ( %o10)

A [1, 2] ; 1

Maxima
Esto devuelve una matriz identidad de orden

3.

( %i11) ( %o11)

ident(3); 1 0 0 0 1 0 0 0 1

Maxima
Esto selecciona la segunda la de la matriz identidad.

( %i12) ( %o12)

%[2]; [0, 1, 0]

12.3 Operaciones matriciales


A.B invert(M )
producto matricial devuelve la inversa de la matriz

Algunas operaciones matriciales.

140

Cap. 12. Matrices

M p

exponenciacin matricial no conmutativa

determinant(M ) mat_trace(M ) transpose(M ) minor(M, i, j) adjoint(M ) addcol(M, list1 , . . . , listn ) addrow(M, list1 , . . . , listn ) col(M, i) row(M, i) rank(M, i, j) setelmx(x, i, j, M )

devuelve el determinante de la matriz

M
devuelve la traza de la matriz cuadrada

M M devuelve el menor (i, j) de la matriz M


devuelve la transpuesta de la matriz devuelve la matriz adjunta de la matriz

M
aade la(s) columna(s) dada(s) por la(s) lista(s) (o matrices) a la matriz

M
aade la(s) la(s) dada(s) por la(s) lista(s) (o matrices) a la matriz devuelve la triz

i -sima columna de la mai

M.

El resultado es una matriz de

una sola columna devuelve la -sima la de la matriz la calcula el rango de la matriz asigna el valor to de la matriz actualizada

M.

El resultado es una matriz de una sola

x al (i,j )-simo elemenM y devuelve la matriz

submatrix(i1 , . . . , im , devuelve una nueva matriz formada a M, j1 , . . . , jn ) partir de la matriz M pero cuyas las submatrix(i1 , . . . , im , M ) i1 , . . . , 1m y columnas j1 , . . . , jn han sisubmatrix(M, j1 , . . . , jn ) do eliminadas echelon(M ) devuelve la forma escalonada de la matriz M , obtenida por eliminacin gaussiana

triangularize(M )

devuelve la forma triangular superior de la matriz

M,

obtenida por elimina-

cin gaussiana
Algunas operaciones matriciales.

Sec. 12.3. Operaciones matriciales

141

rowop(M, i, j, ) rowswap(M, i, j) columnop(M, i, j, )

devuelve la matriz que resulta de relizar la transformacin con las las

Fi

Fj

de la matriz

Fi Fi Fj M
y

intercambia las las

de la matriz

M
devuelve la matriz que resulta de relizar la transformacin con las columnas

Ci

Ci Ci Cj Cj de la matriz i
y

columnswap(M, i, j) kronecker_product(A, B)

intercambia las columnas matriz

de la

M A
y

devuelve el producto de Kronecker de las matrices

Algunas operaciones matriciales.

Maxima
He aqu una matriz

22

de variables simblicas.

( %i13) ( %o13)

A : matrix([a, b] , [c, d]); a b c d

Maxima
He aqu la transpuesta de

A.

( %i14) ( %o14)

transpose(A); a c b d

Maxima
Esto da la inversa de

en forma simblica.

( %i15) ( %o15)

invert(A);
d adbc c adbc b adbc a adbc

142

Cap. 12. Matrices

Maxima
Esto da el determinante de

A.

( %i16) ( %o16)

determinant(A); ad bc

Maxima
He aqu una matriz racional

3 3.

( %i17) ( %o17)

B : genmatrix(lambda([ i, j ] , 1/(i + j 1)), 3, 3); 1 1 2 1 3 1 1 1


2 1 3 3 1 4 4 1 5

Maxima
Esto da su inversa.

( %i18) ( %o18)

invert(B); 9 36 36 192 30 180

30 180 180

Maxima
Multiplicando la inversa con la matriz original se obtiene como resultado la matriz identidad.

( %i19) ( %o19)

%.B; 1 0 0 1 0 0

0 0 1

Maxima
Aqu se dene una matriz

de orden

4 5.

( %i20)

M : matrix([2, 1, 2, 1, 8], [2, 2, 3, 3, 20], [1, 1, 1, 0, 2], [1, 1, 4, 3, 4]);

Sec. 12.3. Operaciones matriciales

143

( %o20)

2 2 1 1

1 2 1 2 3 3 1 1 0 1 4 3

8 20 2 4

Maxima
Esto efecta el intercambio de las las resultante.

de la matriz

y devuelve la matriz

( %i21) ( %o21)

rowswap(M, 2, 1); 2 2 3 3 2 1 2 1 1 1 1 0 1 1 4 3

20 8 2 4

Maxima
Esto realiza la transformacin resultante.

F2 F2 + F1

en la matriz

y devuelve la matriz

( %i22) ( %o22)

rowop(M, 2, 1, 1); 2 1 2 1 8 4 3 5 4 28 1 1 1 0 2 1 1 4 3 4

Maxima
He aqu el producto de Kronecker de dos matrices.

( %i23)

( %o23)

kronecker_product( matrix([a, b], [c, d]), matrix([1, 2, 3], [4, 5, 6], [7, 8, 9]) ); a 2a 3a b 2b 3b 4a 5a 6a 4b 5b 6b 7a 8a 9a 7b 8b 9b c 2c 3c d 2d 3d 4c 5a 6a 4d 5d 6d 7c 8c 9c 7d 8d 9d

144

Cap. 12. Matrices

12.4 Funciones adicionales para matrices


matrix_size(M )
devuelve una lista con dos elementos que constituyen el nmero de las y columnas de la matriz mente

M,

respectiva-

matrixp(expr) mat_norm(M, p) addmatrices(f, A, B, . . .)

verica si

expr

es una matriz de la matriz

devuelve la

p -norma

inf

Los valores admisibles para y

frobenius

son

M. 1,

devuelve

la donde

matriz

(f (ai,j , bi,j , . . .))mn , A, B, . . .

m n

es el orden comn de las matrices

mat_unblocker(M ) outermap(f, M1 , . . . , Mn )

si

es una matriz de bloques, deshace

los bloques de un nivel aplica la funcin

a cada uno de

los elementos del producto cartesiano

M 1 M 2 . . . Mn
Ms funciones para matrices.

Maxima
He aqu la matriz

D.

( %i24) ( %i25) ( %o25)

d[i, j] := 1 + (1)(i + j) $ D : genmatrix(d, 3, 4); 2 0 2 0 0 2 0 2 2 0 2 0

Maxima
Esto devuelve una lista con el nmero de las y columnas de la matriz

D.

( %i26) ( %o26)

matrix_size(D); [3, 4]

Sec. 12.4. Funciones adicionales para matrices

145

Maxima
Utilizando la funcin tricial.

matrixp

es posible comprobar que

es una expresin ma-

( %i27) ( %o27)

matrixp(D); true

Maxima
He aqu la norma de frobenius de la matriz

B.

( %i28) ( %o28)

mat_norm(D, frobenius); 2 6

Maxima
A continuacin se denen las matrices xados.

A, B

con elementos simblicos inde-

( %i29) ( %o29) ( %i30) ( %o30) ( %i31) ( %o31)

A : genmatrix(a, 2, 3); a1,1 a1,2 a1,3 a2,1 a2,2 a2,3 B : genmatrix(b, 2, 3); b1,1 b1,2 b1,3 b2,1 b2,2 b2,3 C : genmatrix(c, 2, 3); c1,1 c1,2 c1,3 c2,1 c2,2 c2,3

Maxima
Este es el resultado obtenido al aplicar matrices

mediante la funcin

addmatrices

a las

A, B

C.

( %i32) ( %o32)

addmatrices(f, A, B, C); f (a1,1 , b1,1 , c1,1 ) f (a1,2 , b1,2 , c1,2 ) f (a1,3 , b1,3 , c1,3 ) f (a2,1 , b2,1 , c2,1 ) f (a2,2 , b2,2 , c2,2 ) f (a2,3 , b2,3 , c2,3 )

146

Cap. 12. Matrices

Maxima
Si

es +, el resultado es

A + B + C.

( %i33) ( %o33)

addmatrices( + , A, B, C); c1,1 + b1,1 + a1,1 c1,2 + b1,2 + a1,2 c2,1 + b2,1 + a2,1 c2,2 + b2,2 + a2,2

c1,3 + b1,3 + a1,3 c2,3 + b2,3 + a2,3

Maxima
Tambin puede utilizarse una funcin annima para

f.

En este caso el resultado No obstante, en casos

obtenido es el mismo que el que se obtuvo al aplicar como ste es mejor el uso de

+.

+

ya que, por ejemplo, si hubiese slo dos matrices

habra que cambiar la funcin annima por

lambda([x, y], x + y).

( %i34) ( %o34)

addmatrices(lambda([x, y, z], x + y + z), A, B, C); c1,1 + b1,1 + a1,1 c1,2 + b1,2 + a1,2 c1,3 + b1,3 + a1,3 c2,1 + b2,1 + a2,1 c2,2 + b2,2 + a2,2 c2,3 + b2,3 + a2,3

Maxima
Con

outermap

mat_unblocker

tambin es posible obtener el producto de Kro-

necker de dos matrices.

( %i35)

( %o35)

outermap(  , matrix([a, b], [c, d]), matrix([1, 2, 3], [4, 5, 6], [7, 8, 9]) ); a 2a 3a b 2b 3b 4a 5a 6a 4b 5b 6b 7a 8a 9a 7b 8b 9b c 2c 3c d 2d 3d 4c 5c 6c 4d 5d 6d 7c 8c 9c 7d 8d 9d mat_unblocker( %); a 2a 3a b 4a 5a 6a 4b 7a 8a 9a 7b c 2c 3c d 4c 5a 6a 4d 7c 8c 9c 7d 2b 3b 5b 6b 8b 9b 2d 3d 5d 6d 8d 9d

( %i36)

( %o36)

Sec. 12.5. Matrices asociadas a sistemas de ecuaciones

147

12.5 Matrices asociadas a sistemas de ecuaciones


coefmatrix([eq1 , . . . , eqm ], devuelve la matriz de coecientes para [x1 , . . . , xn ]) las variables x1 , . . . , xn del sistema de ecuaciones lineales eq1 , . . . , eqm augcoefmatrix([eq1 , . . . , devuelve la matriz aumentada de coeeqm ], [x1 , . . . , xn ]) cientes para las variables x1 , . . . , xn
del sistema de ecuaciones lineales

eq1 , . . . , eqm
Funciones para generar matrices asociadas a sistemas de ecuaciones.

Maxima
He aqu la matriz de coecientes del sistema de ecuaciones lineales, dado.

( %i37) ( %o37)

coefmatrix([2 x 3 y = 1, x + y = 3], [x, y]); 2 3 1 1

Maxima
Esta es la matriz aumentada del mismo sistema anterior.

( %i38) ( %o38)

augcoefmatrix([2 x 3 y = 1, x + y = 3], [x, y]); 2 3 1 1 1 3

Maxima
Aqu se hace la transformacin

F2 F2 1 F1 2
y

en la matriz aumentada anterior.

A partir de ste ltimo resultado se deduce que la solucin del sistema de ecuaciones lineales, dado, ser

y=1

x = 2.

( %i39) ( %o39)

rowop( %, 2, 1, 1/2); 2 3 1 5 5 0 2 2

148

Cap. 12. Matrices

12.6 Autovalores y autovectores


charpoly(M, x) eigenvalues(M )
calcula el polinomio caracterstico vinculado a la matriz la variable

M,

en trminos de

devuelve una lista con dos sublistas, la primera de stas conteniendo los valores propios de la matriz tes multiplicidades

y la se-

gunda, conteniendo sus correspondien-

eigenvectors(M )

devuelve una lista con dos elementos;

eigenvalues(M ),

el

primero

est

formado

por

el segundo es una

lista de listas de vectores propios, una por cada valor propio, pudiendo haber uno o ms vectores propios en cada lista
Obtencin de autovalores y autovectores asociados a una matriz dada.

Maxima
He aqu una matriz

3 3.

( %i40) ( %o40) ( %i41) ( %o41)

c[i, j] := i + j + 1; ci,j := i + j + 1 C : genmatrix(c, 3, 3); 3 4 5 4 5 6 5 6 7

Maxima
ste es el polinomio caracterstico, en trminos de la variable x, asociado a la matriz

C.

( %i42) ( %o42)

charpoly(C, x), expand; x3 + 15 x2 + 6 x

Sec. 12.6. Autovalores y autovectores

149

Maxima
Aqu se tienen los valores propios, y su respectiva multiplicidad, asociados a la matriz

C.

( %i43) ( %o43)

eigenvalues(C);

24915 , 2

249+15 ,0 2

, [1, 1, 1]

Maxima
Finalmente, se muestran los valores propios, con su respectiva multiplicidad, y vectores propios de la matriz

C.

( %i44) ( %o44)

eigenvectors(C);

24915 , 249+15 , 0 , [1, 1, 1] , 2 2 24919 835 1, 28 , 3 14 , 83+5 1, 249+19 , 3 14 , [[1, 2, 1]] 28

Captulo 13 Conjuntos
Maxima

Los conjuntos en rador

set

son expresiones que comprenden el opehace una diferencia entre conjun-

y cuyos argumentos son los elementos del mismo (ver sec-

cin 17.2). Esto indica que

Maxima

tos y listas, lo que permite trabajar con conjuntos cuyos elementos puedan ser tambin conjuntos o listas.

Maxima
cin.

dispone de funciones para realizar operaciones con con-

juntos, como la interseccin o la unin. No obstante, debe tenerse en cuenta que los conjuntos deben ser nitos y denidos por enumera-

13.1 Generacin de conjuntos


set(a1 , . . . , an )
{a1 , . . . , an }
construye un conjunto cuyos elementos son

a1 , . . . , an

equivale a

set(a1 , . . . , an ) set()
f, f
siendo y

set() {} makeset(f, vars, s)

genera un conjunto vaco equivale a

genera un conjunto cuyos miembros se generan a partir de o lista de listas

vars una

lista de variables de

un conjunto

Funciones para generar conjuntos.

150

Sec. 13.1. Generacin de conjuntos

151

Maxima
He aqu un conjunto formado por los elementos

a, b, c, d.

( %i1) ( %o1)

{a, b, c, d} ; {a, b, c, d}

Maxima
Al ingresar un conjunto cuyos elementos estn desordenados y repetidos, stos son ordenados y unicados de forma automtica.

( %i2) ( %o2)

{c, e, f, f, a, b, c, d, a} ; {a, b, c, d, e, f}

Maxima
La funcin

makeset

permite generar un conjunto. En este caso se considera una

funcin de dos variables, la cual es aplicada a una lista de listas.

( %i3) ( %o3)

makeset(i/j, [i, j] , [[1, a] , [2, b] , [3, c] , [4, d]]); 1 2 3 4 , , , a b c d

Maxima
He aqu otro conjunto generado con

makeset.

Ahora se considera una funcin de

una variable, la cual es aplicada a un conjunto de listas.

( %i4) ( %o4)

makeset(x/2, [ x ] , {[ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ]}); 1 3 5 , 1, , 2, 2 2 2

Maxima
Las operaciones aritmticas son listables.

( %i5) ( %o5)

x [1, 2, 3] ; [x, x2 , x3 ]

152

Cap. 13. Conjuntos

Maxima
Sin embargo, las operaciones aritmticas no son conjuntables.

( %i6) ( %o6)

x {1, 2, 3} ; x{1,2,3}

Maxima
La sustitucin si es conjuntable, aunque siempre respetando la unicacin.

( %i7) ( %o7)

{x, x2, x3, x + 1} , x = 1; {1, 2}

13.2 Conversiones entre conjuntos y listas


setify(list) fullsetify(list)
forma un conjunto a partir de los miembros de la lista

list

sustituye los operadores de lista presentes en juntos

conj

por operadores de con-

Conversiones de listas a conjuntos.

listify(conj) full_listify(conj)

forma

un

conjunto

partir

de

los

miembros del conjunto

conj

sustituye los operadores de conjunto presentes en listas

conj

por operadores de

Conversiones de conjuntos a listas.

Maxima
Esto convierte una lista en conjunto.

( %i8) ( %o8)

setify([a, c, d, e]); {a, c, d, e}

Sec. 13.3. Eleccin de elementos de un conjunto

153

Maxima
Esto convierte un conjunto en lista.

( %i9) ( %o9)

listify({a, b, c, d}); [a, b, c, d]

Maxima
Esto sustituye todos los operadores de conjuntos a operadores de listas.

( %i10) ( %o10)

fullsetify([a, [b, c] , [e, [f, g]] , k]); {a, {b, c} , {e, {f, g}} , k}

Maxima
Esto sustituye todos los operadores de listas a operadores de conjuntos.

( %i11) ( %o11)

full_listify( %); [a, [b, c] , [e, [f, g]] , k]

Considerando que, cualquier lista puede convertirse a conjunto, entonces puede usarse

create_list

para generar una lista y luego

convertir la lista obtenida a conjunto. De esta manera se tiene una forma indirecta para generar conjuntos.

13.3 Eleccin de elementos de un conjunto


part(conj, i) first(conj), second(conj), . . . , tenth(conj) last(conj)
devuelve el junto

i -simo

elemento del con-

conj

respetando el ordenamiento

y la unicacin internos devuelve el primer, segundo, ..., dcimo elemento de

conj conj

devuelve el ltimo elemento de

Seleccin de partes de un conjunto.

154

Cap. 13. Conjuntos

Maxima
Aqu se obtiene el primer elemento de un conjunto que ha sido ordenado y unicado internamente.

( %i12) ( %o12)

part({b, c, c, d, a} , 1); a

Maxima
El quinto elemento no existe.

( %i13)

part({b, c, c, d, a} , 5);

part: fell o the end. - - an error. To debug this try: debugmode(true);

13.4 Prueba y bsqueda de elementos de un conjunto


Existe una funcin especca para averiguar si un elemento pertenece a un conjunto, no obstante hay funciones genricas alternativas para ello.

subset(conj, P ) subsetp(conj1 , conj2 ) elementp(x, conj) member(x, conj) freeof(x, conj) freeof(x1 . . . , xn , conj)

extrae todos los elementos de un conjunto

conj

que satisfacen el predicado

P
devuelve devuelve

true true true

si y slo si si y slo si

con1 conj2 x es elemento x


es miembro

del conjunto devuelve

conj
si y slo si

del conjunto prueba si

conj

x no ocurre en ninguna parte

conj
equivale a

f reeof (x1 ; conj) and . . . and f reeof (xn ; conj)

Prueba de elementos de un conjunto.

Sec. 13.4. Prueba y bsqueda de elementos de un conjunto

155

Maxima
Aqu se extrae, del conjunto

{1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

tales que

t < 4.

( %i14) ( %o14)

subset( {1, 2, 3, 4, 5, 7} , lambda( [ t ] , is(t < 4) ) ); {1, 2, 3}

Maxima
Aqu se extrae, del conjunto

{1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

tales que

mod(t, 3) = 1.

( %i15) ( %o15)

subset( {1, 2, 3, 4, 5, 7} , lambda( [ t ] , is(mod(t, 3) = 1) ) ); {1, 4, 7}

Maxima
Esto verica una contencin de conjuntos.

( %i16) ( %o16)

subsetp({1, 2} , {5, 6, 7, 9, 1, 2}); true

Maxima
Esto verica que el elemento

pertenece al conjunto

{2, 4, 5, 7}.

( %i17) ( %o17)

elementp(2, {2, 4, 5, 7}); true

Maxima
La funcin genrica

member

realiza los mismo.

( %i18) ( %o18)

member(2, {2, 4, 5, 7}); true

156

Cap. 13. Conjuntos

Maxima
La funcin genrica

f reeof

indica que

forma parte del conjunto

{2, 4, 5, 7}.

( %i19) ( %o19)

freeof(2, {2, 4, 5, 7}); false

Maxima
La funcin genrica

f reeof

indica que

6 y 5 no forman parte del conjunto {1, 2, 3}.

( %i20) ( %o20)

freeof(6, 5, {1, 2, 3}); true

13.5 Agregar y quitar elementos de un conjunto


Es posible agregar y/o quitar elementos de un conjunto dado mediante dos funciones especcas de

Maxima.

adjoin(x, conj) disjoin(x, conj)

devuelve el conjunto mento

conj conj

con el ele-

x x

insertado sin el ele-

devuelve el conjunto mento

Funciones para agregar y quitar elementos de un conjunto.

Maxima
Aqu se unen

{2}

{1, 4, 7}.

( %i21) ( %o21)

adjoin(2, {1, 4, 7}); {1, 2, 4, 7}

Maxima
Esto elimina el elemento

de

{1, 4, 7}.

( %i22) ( %o22)

disjoin(4, {1, 4, 7}); {1, 7}

Sec. 13.6. Reorganizacin de conjuntos

157

13.6 Reorganizacin de conjuntos


flatten(conj) set_partitions(conj) set_partitions(conj, n)
elimina todos los niveles en

conj

devuelve el conjunto de todas las particiones de

conj conj
en

devuelve un conjunto con todas las descomposiciones de

n conjun-

tos no vacos disjuntos


Reorganizacin de conjuntos anidados.

Maxima
He aqu un conjunto al que se le eliminan todos los niveles.

( %i23) ( %o23)

flatten({4, {1, 3} , {4, {7, 8}} , 10}); {1, 3, 4, 7, 8, 10}

Maxima
Esto da todas las particiones del conjunto

{a, b, c}.

( %i24) ( %o24)

set_partitions(a, b, c); {{{a} , {b} , {c}} , {{a} , {b, c}} , {{a, b} , {c}} , {{a, b, c}} , {{a, c} , {b}}}

Maxima
He aqu todas las descomposiciones del conjunto cos disjuntos.

{a, b, c}

en dos conjuntos no va-

( %i25) ( %o25)

set_partitions(a, b, c, 2); {{{a} , {b, c}} , {{a, b} , {c}} , {{a, c} , {b}}}

13.7 Operaciones con conjuntos


Las ms comunes operaciones matemticas con conjuntos estn implementadas en

Maxima.

158

Cap. 13. Conjuntos

union(conj1 , . . . , conjn ) intersection(conj1 , . . . , conjn ) setdifference(conj1 , conj2 ) powerset(conj) subsetp(conj1 , conj2 ) setequalp(conj1 , conj2 ) symmdifference(conj1 , conj2 ) cartesian_product( conj1 , . . . , conjn ) disjointp(conj1 , conj2 ) equiv_classes(conj, F )

devuelve

la

unin

de

los

conjuntos

conj1 , . . . , conjn
devuelve la interseccin de los conjuntos

conj1 , . . . , conjn

devuelve la diferencia de los conjuntos

conj1 , conj2
devuelve el conjunto potencia de devuelve

conj

true true

si y slo si el conjunto

conj1 conj1

es un subconjunto de

conj2

devuelve y

si y slo los conjuntos son iguales

conj2

devuelve la diferencia simtrica de los conjuntos

conj1 , conj2 conj1 , . . . , conjn en forma de


si y slo si los conjuntos son disjuntos

devuelve el producto cartesiano de los conjuntos listas devuelve

true

conj1

conj2

devuelve el conjunto de las clases de equivalencia del conjunto

conj

respec-

to de la relacin de equivalencia
Operaciones con conjuntos.

Maxima
Aqu se denen los conjuntos

B.

( %i26) ( %i27)

A : {a, b, c, d} $ B : {c, d, e, f, g} $

Maxima
Esto da la unin de

B.

( %i28) ( %o28)

union(A, B); {a, b, c, d, e, f, g}

Sec. 13.7. Operaciones con conjuntos

159

Maxima
Y esto la interseccin.

( %i29) ( %o29)

intersection(A, B); {c, d}

Maxima
La diferencia

AB

se calcula as.

( %i30) ( %o30)

setdifference(A, B); {a, b}

Maxima
Esto devuelve la diferencia simtrica

A.

( %i31) ( %o31)

symmdifference(B, A); {a, b, e, f, g}

Maxima
He aqu el conjunto potencia del conjunto

A.

( %i32) ( %o32)

powerset(A); {{} , {a} , {a, b} , {a, b, c} , {a, b, c, d} , {a, b, d} , {a, c} , {a, c, d} , {a, d} , {b} , {b, c} , {b, c, d} , {b, d} , {c} , {c, d} , {d}}

Maxima
Esto da el producto cartesiano

A B.

( %i33) ( %o33)

cartesian_product(A, B); {[a, c] , [a, d] , [a, e] , [a, f] , [a, g] , [b, c] , [b, d] , [b, e] , [b, f] , [b, g] , [c, c] , [c, d] , [c, e] , [c, f] , [c, g] , [d, c] , [d, d] , [d, e] , [d, f] , [d, g]}

160

Cap. 13. Conjuntos

Maxima
Esto indica que los conjuntos

no son disjuntos.

( %i34) ( %o34)

disjointp(A, B); false

Maxima
En este ejemplo, las clases de equivalencia son nmeros que dieren en un mltiplo de

3.

( %i35) ( %o35)

equiv_classes( {1, 2, 3, 4, 5, 6, 7} , lambda( [s, t] , mod(s t, 3) = 0 ) ); {{1, 4, 7} , {2, 5} , {3, 6}}

13.8 Funciones adicionales para conjuntos


setp(expr) emptyp(conj) cardinality(conj) map(f, {a1 , . . . , an }) map(f, {a1 , . . . , an } , {b1 , . . . , bn } , . . .)
Algunas funciones adicionales.

devuelve

true

conjunto de devuelve

Maxima

si y slo si

expr

es un

true si y slo si conj

es el con-

junto vaco devuelve el nmero de elementos del conjunto devuelve devuelve

conj {f (a1 ), . . . , f (an )}


el conjunto

{f (a1 , b1 , . . .),
que los

. . . , f (an , bn , . . .)},

siempre

conjuntos estn bien ordenados

Maxima
He aqu el cardinal de un conjunto.

( %i36) ( %o36)

cardinality({a, b, c, a}); 4

Sec. 13.8. Funciones adicionales para conjuntos

161

Maxima
Para conjuntos bien ordenados, al aplicar la funcin acorde con el ordenamiento de tales conjuntos.

map,

se obtiene un resultado

( %i37) ( %o37)

map(f, {a, b, c} , {x, y, z}); {f(a, x), f(b, y), f(c, z)}

Maxima
En este caso primero son ordenados los conjuntos y luego devuelve un resultado que coincide con el de

( %o37)

( %i38) ( %o38)

map(f, {c, a, b} , {y, x, z}); {f(a, x), f(b, y), f(c, z)}

Captulo 14 Grcos
Maxima
deseado y

no ha sido programado para elaborar sus propios gr-

cos, de modo que alternativamente utiliza un programa externo que realiza esta tarea. El usuario se limita a ordenar el tipo de grco

Maxima

se encarga de comunicrselo al programa grco

que est activo en ese momento, que por defecto ser aplicacin grca que utiliza Las funciones

Maxima

es

Gnuplot. La otra Openmath 1 . Maxima

plot2d y plot3d2

son funciones para obtener gr(tngase pre-

cos que estn denidas en el propio ncleo de llamado

sente que existen otras funciones similares denidas en un paquete

draw3 ).

Lo antes mencionado ocasiona que los grcos generados con las funciones

plot2d
a

plot3d

se muestren en una ventana aparte del

cuaderno de trabajo actual. No obstante, en contraparte, niendo

wxMaxima

incorpora funciones alternativas, cuyos nombres se obtienen antepo-

wx

plot2d

plot3d,

respectivamente. La diferencia con las

anteriores es que stas funciones devuelven todos los grcos en el cuaderno de trabajo actual.

1 Tanto Gnuplot 2 Con plot2d 3 El


y

como Openmath son softwares libres y una copia de cada uno

de ellos es distribuida conjuntamente con Maxima.

plot3d

es posible dar instrucciones tanto a Gnuplot como a

Openmath sin que sea necesario tener conocimiento alguno de la sintaxis de estos
programas. paquete y

ste incorpora las funciones a

plot2d

draw (ver el captulo 15) est orientado exclusivamente a Gnuplot. draw2d y draw3d, las cuales dan resultados similares plot3d. Adems incorpora funciones para gracar funciones denidas

implcitamente.

162

Sec. 14.1. Grcos bsicos

163

14.1 Grcos bsicos


Por comodidad, la mayora de los ejemplos de esta seccin se ejecutarn con las funciones incorporadas en las funciones estndar de

wxMaxima ;

sin embargo,

todos estos ejemplos pueden ser ejecutados sin ningn problema con

Maxima.

plot2d(f, [x, xmin , xmax ]) plot2d([f1 , . . . , fn ] , [x, xmin , xmax ]) wxplot2d(f, [x, xmin , xmax ]) wxplot2d([f1 , . . . , fn ] , [x, xmin , xmax ])
Trazado bsico de funciones.

muestra un grco de

y = f (x),

con

xmin x xmax ,
dependiente muestra un

en una ventana in-

grco con

. . . , y = fn (x),

de y = f1 (x), xmin x xmax ,

en una ventana independiente muestra un grco de

y = f (x),

con

xmin x xmax ,
trabajo actual muestra un

en el cuaderno de

grco con

. . . , y = fn (x),

de y = f1 (x), xmin x xmax ,

en el cuaderno de trabajo actual

Maxima
Esto traza un grco de hasta

sen(x)

como una funcin de

x.

Para

variando desde

2 .

( %i1) ( %t1)

wxplot2d(sin(x), [x, 0, 2 %pi]);

( %o1)

164

Cap. 14. Grcos

Maxima
Puede darse una lista de funciones para que sean trazadas. Por defecto, a cada funcin se le asigna un color especco.

( %i2) ( %t2)

wxplot2d([sin(x), sin(2 x), sin(3 x)] , [x, 0, 2 %pi]);

( %o2)

Maxima
Aqu se utiliza la funcin Bessel,

create_list
1

para generar una lista de las funciones de hasta

Jn (x),

con

variando desde

4.

Luego se devuelve la grca de

dichas funciones.

( %i3) ( %t3)

wxplot2d(create_list(bessel_j(n, x), n, 1, 4), [x, 0, 10]);

( %o3)

Sec. 14.2. Opciones

165

14.2 Opciones
Hay muchas opciones para escoger en el trazado de grcos. La mayora de las veces, la aplicacin grca invocada por

Maxima

pro-

bablemente tomar opciones bastante buenas. Sin embargo, si se quiere obtener los mejores dibujos posibles para objetivos particulares, debera ayudarse a la aplicacin en particular en la eleccin de algunas de sus opciones. Hay un mecanismo general para especicar opciones en las funciones de argumentos de una funcin, como una secuencia de la forma

Maxima. Cada opcin tiene un nombre denido. Como ltimos


plot2d (wxplot2d), se puede incluir [nombre, valor] para especicar los valores

de varias opciones. A cualquier opcin para la cual no se indique un valor explcito se le asigna su valor por defecto.

plot2d(f, [x, xmin , xmax ] , [opcion, valor])

devuelve un grco, especicando un valor particular para una opcin, en otra ventana

Eleccin de una opcin para el trazado de un grco.

Opcin
y nticks

Val. por defecto


no presenta

Descripcin
rango vertical del grco nmero inicial de puntos utilizados por el procedimiento adaptativo para la representacin de funciones

29

adapt_depth

10

nmero mximo de particiones utilizado por el algoritmo adaptativo de representacin grca

xlabel ylabel

x
nombre

etiqueta del eje horizontal en grcos 2d

funcin , dada
Algunas de las opciones de

de

la

etiqueta del eje vertical en grcos 2d

plot2d (wxplot2d).

166

Cap. 14. Grcos

Opcin
logx

Val. por defecto


no presenta

Descripcin
hace que el eje horizontal en los grcos 2d se dibuje en la escala logartmica (no necesita de parmetros adicionales)

logy

no presenta

hace que el eje vertical en los grcos 2d se dibuje en la escala logartmica (no necesita de parmetros adicionales)

legend

nombre

funcin , dada

de

la

etiquetas para las expresiones de los grcos 2d. Si hay ms expresiones que etiquetas, stas se repetirn

style gnuplot_ preamble plot_format gnuplot_term

lines,1,1   gnuplot default

estilos a utilizar para las funciones o conjuntos de datos en grcos 2d introduce el dibujo determina qu programa grco se va a utilizar selecciona el terminal a utilizar minal cin mente por Gnuplot; algunos valores posibles para el terinstrucciones de

gnuplot antes de que se haga

son: dumb, png, jpg, eps, pdf, gif, etc. (la op-

gnuplot_term
puede

nicacon

plot_realpart run_viewer

false true

plot2d) si plot_realpart

utilizarse

vale

true,

se representar la parte real de un valor complejo controla si el visor apropiado para la salida grca debe ejecutarse o no
Algunas de las opciones de

plot2d (wxplot2d).

Sec. 14.2. Opciones

167

Maxima
He aqu un grco para el cual todas las opciones tienen asignados sus valores por defecto.

( %i4) ( %t5)

wxplot2d(sin(x2), [x, 0, 3]);

( %o4)

Maxima
La instruccin cin

set size ratio 1 iguala las escalas para los ejes x e y ; y la instrucset grid aade una rejilla al grco. Ambas instrucciones corresponden a la opcin gnuplot_preamble.

( %i5) ( %t5)

wxplot2d(sin(x2), [x, 0, 3] , [gnuplot_preamble, set size ratio 1; set grid]);

( %o5)

168

Cap. 14. Grcos

Maxima
Esto especica el estilo del grco y la etiqueta para el eje y.

( %i6) ( %t6)

wxplot2d(sin(x2), [x, 0, 3] , [style, [points, 3, 2, 7]] , [ylabel, y]);

( %o6)

Maxima
Las expresiones que se dan como etiquetas puede ser cualquier porcin de texto, pero sta debe ponerse entre comillas.

( %i7)

wxplot2d(sin(x2), [x, 0, 3] , [xlabel, Porcin de texto para x] , [ylabel, Porcin de texto para y]);

( %t7)

( %o7)

Sec. 14.3. Grcos de puntos y lneas

169

Maxima
Es posible trazar funciones que tienen singularidades. Para este efecto resulta bastante til la opcin

que permite indicar el rango.

( %i8) ( %t8)

wxplot2d(tan(x), [x, 3, 3] , [y, 10, 10]);

plot2d: some values were clipped.

( %o8)

14.3 Grcos de puntos y lneas


Con

plot2d (wxplot2d)

pueden gracarse puntos del plano (ais-

lados) o poligonales que unen puntos del plano.

plot2d([ discrete, [[x1 , y1 ] , . . . , [xn , yn ]] ] , [style, points]) plot2d([ discrete, [x1 , . . . , xn ] , [y1 , . . . , yn ] ] , [style, points]) plot2d([ discrete, [[x1 , y1 ] , . . . , [xn , yn ]] ] , [style, lines])

devuelve el grco de los puntos aislados

(x1 , y1 ), . . . (xn , yn )

devuelve el grco de los puntos aislados

(x1 , y1 ), . . . (xn , yn )

devuelve el grco de una poligonal que une los puntos

(x1 , y1 ), . . . (xn , yn )

Grcos de puntos aislados y poligonales.

170

Cap. 14. Grcos

plot2d([ discrete, [x1 , . . . , xn ] , [y1 , . . . , yn ] ] , [style, lines]) plot2d([ discrete, [[x1 , y1 ] , . . . , [xn , yn ]] ] ) plot2d([ discrete, [x1 , . . . , xn ] , [y1 , . . . , yn ] ] )

devuelve el grco de una poligonal que une los puntos

(x1 , y1 ), . . . (xn , yn )

devuelve el grco de una poligonal que une los puntos

(x1 , y1 ), . . . (xn , yn ) (x1 , y1 ), . . . (xn , yn )

devuelve el grco de una poligonal que une los puntos

Grcos de puntos aislados y poligonales.

Maxima
De esta forma se graca una lista de puntos aislados.

( %i9) ( %o9) ( %i10) ( %t10)

pts : create_list([i, sin(i)] , i, 0, 5); [[0, 0] , [1, sin(1)] , [2, sin(2)] , [3, sin(3)] , [4, sin(4)] , [5, sin(5)]] wxplot2d([discrete, pts] , [style, points]);

( %o10)

Cabe destacar que los estilos ros enteros positivos de la forma

points

lines

tambin aceptan (en el caso de

opciones. stas deben ingresarse como una secuencia de tres nme-

points),
segundo,

[points n1 , n2 , n3 ]

o dos nmeros enteros positivos de la forma

(en el caso de

[lines n1 , n2 ] lines). En ambos casos el primer valor, n1 , correspon azul, 2 rojo, 3 verde, 4 violeta, 5 points est el tercer valor, n3 ,

de al tamao de los puntos o grosor de la lnea, segn sea el caso; el

negro, 6 celeste ).

n2 ,

al color (1

Finalmente para

Sec. 14.3. Grcos de puntos y lneas

171

que corresponde a la forma en que se visualiza el punto (1 disco, 2 crculo, 3 cruz, 4 aspa, 5 asterisco, 6 cuadrado relleno, 7 cuadrado sin rellenar, 8 tringulo relleno, 9 tringulo sin rellenar, 10 tringulo relleno invertido, 11 tringulo sin rellenar invertido, 12 rombo relleno, 13 rombo sin rellenar ).

Maxima
Aqu se muestran los puntos de la salida o, color y forma de los mismos.

%o9

con opciones que cambian el tama-

( %i11) ( %t11)

wxplot2d([discrete, pts] , [style, [points, 3, 2, 5]]);

( %o11)

Maxima
Aqu se muestran los puntos de la salida

%o9

unidos por una lnea quebrada.

( %i12) ( %t12)

wxplot2d([discrete, pts] , [style, lines]);

( %o12)

172

Cap. 14. Grcos

14.4 Grcos paramtricos y polares


plot2d([parametric, fx , fy , [t, tmin , tmax ]]) plot2d([ [parametric, fx , fy , [t, tmin , tmax ]] , [parametric, gx , gy , [s, smin , smax ]] , . . .])
traza un grco paramtrico

traza varias curvas paramtricas juntas

Grcos de curvas denidas en forma paramtrica.

plot2d(f (t), [t, tmin , tmax ] , [gnuplot_preamble, set polar]) plot2d([f (t), g(t), . . .] [t, tmin , tmax ] , [gnuplot_preamble, set polar])

traza un grco polar

traza varias curvas polares juntas

Grcos de curvas denidas en forma polar.

Maxima
Esto devuelve la grca de la curva

t (cos(t), sen(t))

para

t [0, 2].

( %i13) ( %t13)

wxplot2d([parametric, cos(t), sin(t), [t, 0, 2 %pi]]);

( %o13)

Sec. 14.4. Grcos paramtricos y polares

173

Maxima
Utilizando las opciones adecuadas es posible mejorar la presentacin de la salida

%o12.

( %i14)

wxplot2d( [parametric, cos(t), sin(t), [t, 0, 2 %pi]] , [gnuplot_preamble, set size ratio 1] , [nticks, 100] );

( %t14)

( %o14)

Maxima
Esto devuelve la grca de

= sen(2t).

( %i15) ( %t15)

wxplot2d(sin(2 t), [t, 0, 2 %pi] , [gnuplot_preamble, setpolar] , [x, 1, 1]);

( %o15)

174

Cap. 14. Grcos

14.5 Combinacin de grcos


Adicionalmente, la funcin sistema coordenado.

plot2d (wxplot2d)

permite combinar

varios tipos de grcos (salvo los polares) y presentarlos en un mismo

Maxima
Aqu se combinan varios tipos de grcos.

( %i16) ( %i17)

pts : create_list([i, sin(i)] , i, 0, 5) $ wxplot2d([ [parametric, cos(t), sin(t)] , [t, 0, 2 %pi] , sin(x2), [discrete, pts]] , [x, 2, 6] , [y, 2, 6] , [style, lines, lines, points] , [gnuplot_preamble, set size ratio 1]);

plot2d: expression evaluates to non-numeric value everywhere in plotting range.

( %t17)

( %o17)

14.6 Grcos de supercies tridimensionales


Para gracar supercies en Es preciso mencionar que, al

R3 se utiliza la funcin plot3d (wxplot3d). utilizar la funcin wxplot3d el grco

resultante ser mostrado en el cuaderno de trabajo actual; no obstante, se pierde la interaccin en tiempo real con el grco. Esto no sucede si se utiliza la funcin

plot3d,

ya que en este caso basta con

Sec. 14.6. Grcos de supercies tridimensionales

175

hacer clic sobre la gura y, sin soltar el botn del mouse, arrastrarlo para que la supercie gire en tiempo real.

plot3d(f, [x, xmin , xmax ] , muestra un grco de z = f (x, y), con [y, ymin , ymax ]) xmin x xmax y ymin y ymax ,
en una ventana independiente; en esta ventana es posible interactuar en tiempo real con dicho grco

wxplot3d(f, [x, xmin , xmax ] , [y, ymin , ymax ])

muestra un grco de

xmin x xmax

z = f (x, y), con ymin y ymax ,

en el cuaderno de trabajo actual y no hay interaccin en tiempo real con el grco

Trazado bsico de funciones 3D.

Al igual que posibles.

plot2d (wxplot2d),

la funcin

plot3d (wxplot3d)

tambin incluye una serie de opciones para obtener los mejores dibujos

Maxima
Esto traza un grco de la funcin

f (x, y) = sen(xy).

( %i18) ( %t18)

wxplot3d(sin(x y), [x, 0, 3] , [y, 0, 3]);

( %o18)

176

Cap. 14. Grcos

Opcin
grid transform_xy gnuplot_term

Val. por defecto


30, 30

Descripcin
establece el nmero de puntos de la retcula a utilizar en las direcciones

false default

permite que se realicen transformaciones en los grcos de tres dimensiones selecciona el terminal a utilizar por Gnuplot; algunos valores posibles son:

jpg, eps, pdf, gif,


cin ciona con

dumb, png,

gnuplot_term plot3d)

etc. (la opslo fun-

gnuplot_ preamble plot_format

  gnuplot

introduce dibujo

instrucciones

de

gnuplot antes que se haga el

determina qu programa grco se va a utilizar

Algunas de las opciones de

plot3d (wxplot3d)

Maxima
Esto traza un grco de

f (x, y) = sen(xy)

con el programa grco

openmath.

( %i19) ( %o19)

plot3d(sin(x y), [x, 0, 3] , [y, 0, 3] , [plot_format, openmath]);

Sec. 14.6. Grcos de supercies tridimensionales

177

Maxima
Esto traza un grco tridimensional de la supercie denida por coordenadas cilndricas4

r033 cos( th ) 3

en

( %i20)

wxplot3d(r 33 cos(th/3), [r, 0, 1] , [th, 0, 6 %pi] , [grid, 12, 80] , [transform_xy, polar_to_xy]);

( %t20)

( %o20)

plot3d (wxplot3d)
car curvas en

tambin permite trazar la grca de una su-

percie denida en forma paramtrica; sin embargo, no permite gra-

R3 .
traza el grco de una supercie paramtrica en una ventana independiente, siendo posible la interaccin en tiempo real con dicho grco

plot3d([x(u, v), y(u, v), z(u, v)] , [u, umin , umax ] , [v, vmin , vmax ]) wxplot3d([x(u, v), y(u, v), z(u, v)] , [u, umin , umax ] , [v, vmin , vmax ])

traza el grco de una supercie paramtrica en el cuaderno de trabajo actual, siendo imposible la interaccin en tiempo real con dicho grco

Trazado bsico de supercies denidas en forma paramtrica.

4 En
El

este

caso puede

se

ha

realizado sus

una

transformacin

de

coordenadas. la funcin

make_transform(vars, fx , fy , fz ).
cin

usuario

denir

propias

transformaciones

usando

Por ejemplo, aqu se ha usado la transforma-

polar_to_xy : make_transform([r, th, z] , r cos(th), r sin(th), z).

178

Cap. 14. Grcos

Maxima
Esto devuelve la grca de la esfera unitaria denida paramtricamente mediante

(u, v) (sen u sen v, cos u sen v, cos v), 0 u 2 , v 2

. 2

( %i21) ( %t21)

wxplot3d([cos(u) cos(v), sin(u) cos(v), sin(v)] , [u, 0, 2 %pi] , [v, %pi/2, %pi/2]);

( %o21)

Maxima
Utilizando las opciones adecuadas es posible mejorar la presentacin de la salida

%o21.

( %i22)

wxplot3d([cos(u) cos(v), sin(u) cos(v), sin(v)] , [u, 0, 2 %pi] , [v, %pi/2, %pi/2] , [gnuplot_preamble, set size ratio 1]);

( %t22)

( %o22)

Sec. 14.7. Grcos de densidad y contornos

179

14.7 Grcos de densidad y contornos


Un grco de contorno le da esencialmente un mapa topogrco de una funcin. Los contornos unen puntos sobre la supercie que tienen la misma altura. El valor por defecto permite obtener contornos correspondientes a una secuencia de valores de espaciados.

igualmente

plot3d(f (x, y), [x, xmin , xmax ] , [y, ymin , ymax ] , [gnuplot_preamble, set pm3d map]) contour_plot(f (x, y), [x, xmin , xmax ] , [y, ymin , ymax ])

traza

un

grco

de

densidad

de

f (x, y) en el [ymin , ymax ]

rectngulo

[xmin , xmax ]

dibuja de

las

curvas

de

nivel

f (x, y) en el rectngulo [xmin , xmax ] [ymin , ymax ] (cualesquiera otros argumentos adicionales se tratan como en

plot3d)

Grcos de contornos.

Maxima
Esto traza un grco de densidad de la funcin

f (x, y) = sen(xy)

en el rectngulo

[0, 3] [0, 3].

( %i23) ( %t23)

wxplot3d(sin(x y), [x, 0, 3] , [y, 0, 3] , [gnuplot_preamble, set pm3d map]);

( %o23)

180

Cap. 14. Grcos

Maxima
He aqu un grco de contorno de

f (x, y) = x2 + y 2 1.

( %i24) ( %o24)

contour_plot(x2 + y2 1, [x, 1, 1] , [y, 1, 1]);

14.8 Grcos animados


Tambin es posible crear animaciones, aunque nicamente en el entorno de

wxMaxima. Para tal n se utiliza la funcin with_slider5


Comenzar animacin,

con la cual se genera un grco idntico al que se genera con do luego el botn

wxplot2d,

sin embargo dicho grco puede ser animado selecionndolo y pulsandel cuadro de controles, de la barra de herramientas.

Maxima
Cuadro de controles, ubicado en la barra de herramientas, para la animacin de grcos.

with_slider

funcin

wxplot2d

para

animar

grcos

de

Obtencin de grcos animados.

with_slider_draw y with_slider_draw3d draw3d del paquete draw.

5 Es

importante sealar que adicionalmente estan incluidas las funciones relacionadas con las funciones

draw

Sec. 14.8. Grcos animados

181

Maxima
Esto genera un grco listo para ser animado. Para conseguir la animacin primero se selecciona el grco y luego se pulsa el botn , del cuadro de controles, , y automticamente sta es generada. Para detenerla basta pulsar el botn

del mismo cuadro. Tambin es posible navegar a travs de cada cuadro de la animacin con tan slo arrastrar a voluntad el botn seleccionado el grco. , despus de haber

( %i25) ( %t25)

with_slider(a, [0, 1, 2, 3, 4, 5] , sin(x + a), [x, 2 %pi, 2 %pi] , [y, 1,5, 1,5], [color, red]);

( %o25)

Maxima
He aqu otro grco listo para animar.

( %i26) ( %t26)

with_slider(f, [x, x2, x3, x4] , f, [x, 2, 2]);

( %o26)

182

Cap. 14. Grcos

Maxima
Este es un grco ms listo para animar.

( %i27)

with_slider(a, [0, 1, 2, 3, 4, 5], [parametric, sin(t), sin(2 (t + a)), [t, 0, 2 %pi]], [x, 1 5, 1 5], [y, 1 5, 1 5], [color, red], [nticks, 50]);

( %t27)

( %o27)

Captulo 15 Grcos con draw


draw se distribuye conjuntamente con Maxima

El paquete con

tituye una interfaz que comunica de manera muy eciente

Gnuplot.

Maxima

y cons-

Este paquete incorpora una considerable variedad de

funciones y opciones que permiten obtener la representacin de un amplio nmero de objetos grcos bidimensionales y tridimensionales. Para poder utilizar el paquete

moria, y para ello se utiliza la funcin

draw es preciso cargarlo en load (ver seccin 3.7).

la me-

load(draw) $ draw(gr2d, . . . , gr3d, . . . , opciones)

carga (inicializa) el paquete

draw

representa grcamente una serie de escenas; sus argumentos son objetos

gr2d

y/o

gr3d,

junto con algunas op-

ciones. Por defecto, las escenas se representan en una columna

draw2d(opciones, objeto_grco, . . .) draw3d(opciones, objeto_grco, . . .)


Inicializacin del paquete pales.

draw(gr2d(opciones, objeto_grco, . . .)) draw(gr3d(opciones, objeto_grco, . . .))


esta funcin es un atajo

esta

funcin

es

un

atajo

para

para

draw

y descripcin de sus tres funciones princi-

183

184

Cap. 15. Grcos con

draw

15.1 Objetos grcos bidimensionales


points([[x1 , y1 ], [x2 , y2 ], . . .]) points([x1 , x2 , . . .], [y1 , y2 , . . .]) points([y1 , y2 , . . .]) points(matrix([x1 , y1 ], [x2 , y2 ], . . .) polygon([[x1 , y1 ], [x2 , y2 ], . . .]) polygon([x1 , x2 , . . .], [y1 , y2 , . . .]) rectangle([x1 , y1 ], [x2 , y2 ]) vector([p1 , p2 ], [v1 , v2 ]) label([cadena, x, y], . . .) ellipse(xc , yc , a, b, ang1 , ang2 )

puntos bidimensionales

puntos bidimensionales

equivale a

points([[1, y1 ], [2, y2 ], . . .])

puntos bidimensionales

polgono

polgono

rectngulo de vrtices opuestos y

(x1 , y1 )

(x2 , y2 )
con punto de aplicacin

vector (v1 , v2 ) (p1 , p2 )

etiquetas para grcos bidimensionales sector elptico de centro

miejes horizontal y vertical lo

(xc , yc ) con sea y b, res-

pectivamente, comenzando en el nguigual al ngulo

ang1 y trazando un arco de amplitud ang2 f cuya variable x xmin hasta xmax E
to-

explicit(f (x), x, xmin , xmax ) implicit(E(x, y), x, xmin , xmax , y, ymin , ymax ) parametric(fx , fy , t, tmin , tmax ) polar(r(), , min , max )

funcin explcita ma valores desde

expresin implcita

a ser represen-

tada en el rectngulo

[xmin , xmax ]

[ymin , ymax ]
curva paramtrica bidimensional, cuyo parmetro hasta

toma valores desde

tmin
toma

tmax r cuya variable min hasta max


draw.

funcin polar valores desde

Principales objetos grcos bidimensionales incorporados en

Sec. 15.1. Objetos grcos bidimensionales

185

Las funciones

draw, draw2d

cas en una ventana de funciones funcin

Gnuplot,

draw3d

devuelven las salidas grpermite utilizar las

aparte de la ventana de trabajo

actual. No obstante el entorno grco

wxdraw, wxdraw2d y wxdraw3d que devuelven las salidas en

wxMaxima

el cuaderno de trabajo actual. Debe tenerse presente que al utilizar la

wxdraw3d,

el punto de vista de la grca obtenida no puede

ser cambiado en tiempo real. En este captulo se van a mostrar los resultados mediante las funciones

wxdraw, wxdraw2d
y

wxdraw3d,

pero todos los ejemplos mos-

trados pueden ser ejecutados, sin ningn problema, con las funciones

draw, draw2d

draw3d,

segn sea el caso.

Maxima
Aqu se genera una lista de listas. Los elementos de la misma, generados aleatoriamente, representan las coordenadas de puntos del plano.

( %i1) ( %o1)

p : create_list([random(20), random(50)], k, 1, 10); [[9, 9], [3, 39], [6, 26], [16, 3], [0, 21], [12, 9], [9, 18], [6, 45], [13, 43], [7, 28]]

Maxima
Despus de aplicar la funcin

points

a la variable

p,

en la que se han almacenado

los puntos, se obtiene un objeto grco el cual puede gracarse con

draw2d.

( %i2) ( %t2)

wxdraw2d( points(p) );

( %o2)

[gr2d(points)]

186

Cap. 15. Grcos con

draw

Maxima
Con

gr2d

draw

siempre se obtendr el mismo resultado que con

draw2d.

( %i3) ( %t3)

wxdraw( gr2d(points(p)) );

( %o3)

[gr2d(points)]

draw no cuenta con una funcin especca, como line, para denir true a la opcin points_joined para unir los puntos dados mediante segmenel objeto geomtrico lnea; simplemente se asigna el valor tos.

Maxima
Grca de los puntos

unidos mediante segmentos.

( %i4)

wxdraw2d( points_joined = true, points(p) );

( %t4)

( %o4)

[gr2d(points)]

Sec. 15.1. Objetos grcos bidimensionales

187

Maxima
As se visualiza la grca de un hexgono.

( %i5)

wxdraw2d( polygon([ [1/2, sqrt(3)/2], [1/2, sqrt(3)/2], [1, 0], [1/2, sqrt(3)/2], [1/2, sqrt(3)/2], [1, 0] ])

( %t5)

( %o5)

[gr2d(polygon)]

Maxima
Y as, la grca de un rectngulo.

( %i6)

wxdraw2d( rectangle([0, 0], [1, 2]) );

( %t6)

( %o6)

[gr2d(rectangle)]

188

Cap. 15. Grcos con

draw

Maxima
De esta manera se obtiene la grca del vector es el origen.

(10, 10),

cuyo punto de aplicacin

( %i7)

wxdraw2d( vector([0, 0], [10, 10]) );

( %t7)

( %o7)

[gr2d(vector)]

Maxima
Para insertar texto en un punto cualquiera de un grco se utiliza la funcin

label.

En este caso el punto de insercin es

(0, 0 3).

( %i8)

wxdraw2d( label([Etiqueta, 0, 0 3]) );

( %t8)

( %o8)

[gr2d(label)]

Sec. 15.1. Objetos grcos bidimensionales

189

Maxima
Esto devuelve la grca de un sector elptico, de origen, su semieje horizontal es

1,

su semieje vertical es

360 , 2.

cuyo centro es el

( %i9)

wxdraw2d( ellipse(0, 0, 1, 2, 0, 360) );

( %t9)

( %o9)

[gr2d(ellipse)]

Maxima
De esta manera se obtiene la grca de la funcin

x x2 ,

con

1 x 1.

( %i10)

wxdraw2d( explicit(x2, x, 1, 1) );

( %t10)

( %o10)

[gr2d(explicit)]

190

Cap. 15. Grcos con

draw

Maxima
Esto muestra la grca de la ecuacin

x3 + y 3 3xy = 0

en el rectngulo

[1, 2] [1, 2].

( %i11)

wxdraw2d( implicit(x3 + y3 3 x y = 0, x, 1, 2, y, 1, 2) );

( %t11)

( %o11)

[gr2d(implicit)]

Maxima
Aqu se muestra la grca de la curva denida en forma paramtrica mediante

t (sin(t), sin(2t)),

con

0 t 2 .

( %i12)

wxdraw2d( parametric(sin(t), sin(2 t), t, 0, 2 %pi) );

( %t12)

( %o12)

[gr2d(parametric)]

Sec. 15.1. Objetos grcos bidimensionales

191

Maxima
Aqu se muestra la grca de la funcin denida en coordenadas polares mediante

t sen(t),

tal que

0 t 2 .

( %i13)

wxdraw2d( polar(sin(2 t), t, 0, 2 %pi) );

( %t13)

( %o13)

[gr2d(polar)]

Maxima
Combinar objetos grcos bidimensionales es sencillo con

draw2d.

( %i14)

wxdraw2d( parametric(t, t2 1/2, t, 1, 1), polar(sin(2 t), t, 0, 2 %pi) );

( %t14)

( %o14)

[gr2d(parametric, polar)]

192

Cap. 15. Grcos con

draw

15.2 Opciones para los objetos grcos bidimensionales


15.2.1 Opciones locales
Las opciones locales slo son relevantes para objetos grcos especcos y para tal efecto deben digitarse antes de dicho objeto. Si una opcin grca es digitada antes de un objeto grco al cual no corresponde, no se produce ningn mensaje de error, simplemente la grca se muestra sin presentar alteracin alguna.

Opcin
point_size point_type point_joined

Val. por defecto


1

Descripcin
establece el tamao de los puntos dibujados (debe ser un nmero no negativo)

indica la forma que tendrn los puntos aislados

false

indica si los puntos aislados se unen mediante segmentos o no

Opciones de

draw2d

para el objeto grco

points.

Opcin
nticks border transparent fill_color
Opciones de

Val. por defecto


29

Descripcin
indica el nmero de puntos a utilizar para generar las grcas

true false red

especica si debe dibujarse el borde o no establece si el polgono debe rellenarse o no especica el color del relleno del polgono

rectangle.

draw2d

para los objetos grcos bidimensionales

polygon

Sec. 15.2. Opciones para los objetos grcos bidimensionales

193

Opcin
head_both head_length head_angle head_type unit_vectors
Opciones de

Val. por defecto


false
2

Descripcin
indica si el vector ser bidireccional o no indica, en las unidades del eje

x, la longitud de las echas de


los vectores

45

indica el ngulo, en grados, entre la echa y el segmento del vector

filled false
para el objeto grco

especica cmo se habrn de dibujar las echas de los vectores especica si los vectores se dibujan con mdulo unidad

draw2d

vector.

Opcin
label_ alignment label_ orientation
Opciones de

Val. por defecto


center horizontal
para el objeto grco

Descripcin
especica el color que tendr el vector especica el color que tendr el vector

draw2d

label.

Opcin
nticks adapt_depth

Val. por defecto


29

Descripcin
indica el nmero de puntos a utilizar para generar las grcas

10

indica el nmero mximo de particiones utilizadas por la rutina grca adaptativa

Opciones de

draw2d

para el objeto grco

explicit.

194

Cap. 15. Grcos con

draw

Opcin
filled_func fill_color

Val. por defecto


false red

Descripcin
establece cmo se van a rellenar las regiones limitadas por las grcas especica el color para rellenar las regiones limitadas por las grcas

Opciones de

draw2d

para el objeto grco

explicit.

Opcin
ip_grid ip_grid_in
Opciones de

Val. por defecto


[50, 50] [5, 5]
para el objeto grco

Descripcin
establece la rejilla del primer muestreo para la grca establece la rejilla del segundo muestreo para la grca

draw2d

implicit.

Opcin
nticks

Val. por defecto


29

Descripcin
indica el nmero de puntos a utilizar para generar las grcas

Opciones de y

polar.

draw2d

para los objetos grcos bidimensionales

parametric

15.2.2 Opciones locales genricas


Las opciones locales genricas son opciones comunes a todos los objetos grcos bidimensionales. Aunque hay excepciones que cabe destacar, por ejemplo las opciones

line_width y line_type que, por

razones obvias, nicamente no son relevantes con los objetos grcos

point

grco

label. Tampoco la opcin color es relevante con el objeto label, esto constituye una falla que ser corregida cuando se

incorpore, a

Maxima, la versin 4.3 de Gnuplot.

Sec. 15.2. Opciones para los objetos grcos bidimensionales

195

Opcin
color line_width line_type key

Val. por defecto


black

Descripcin
especica el color para dibujar lneas, puntos y bordes de polgonos

indica el ancho de las lneas a dibujar

solid solid
draw2d.

indica cmo se van a dibujar las lneas (valores posibles son

solid

dots)

indica la clave del grco en la leyenda

Opciones locales genricas de

15.2.3 Opciones globales


Las opciones globales se caracterizan porque afectan a toda la escena y su posicin dentro de la descripcin de sta no reviste importancia.

Opcin
proportional_ axes

Val. por defecto


none

Descripcin
indica si una escena bidimensional se dibujar con los ejes proporcionales a sus longitudes relativas (valores posibles:

none xrange yrange logx auto auto false auto auto

xy)

permite especicar un intervalo para y

(valores posibles:

[xmin , xmax ])

permite especicar un intervalo para y

(valores posibles:

[ymin , ymax ])

permite especicar si el eje rtmica

se dibujar en la escala loga-

Algunas opciones globales de

draw2d.

196

Cap. 15. Grcos con

draw

Opcin
logy terminal

Val. por defecto


false screen

Descripcin
permite especicar si el eje rtmica selecciona a utilizar (valores el por posibles terminal

se dibujar en la escala loga-

Gnuplot
son:

screen, png, jpg, eps, eps_color, pdf, pdfcairo, gif, animated_gif, wxt y aquaterm) file_name maxima_out
en el que los terminales png, jpg, eps, eps_color, pdf, pdfcairo, etc. guardarn el grco indica el nombre del chero

font font grid title xlabel ylabel xtics



permite seleccionar el tipo de fuente a utilizar por el terminal

12

permite seleccionar el tamao de la fuente a utilizar por el terminal

false    auto

permite especicar si se dibujar una rejilla sobre

xy

almacena una cadena con el ttulo de la escena almacena una cadena con la etiqueta del eje

almacena una cadena con la etiqueta del eje

controla la forma en la que se dibujarn las marcas del eje (valores posibles:

auto, none, [inicio, inc, f in], {n1 , n2 , . . .} y tambin {[label1, n1 ], [label1, n1 ], . . .})
Algunas opciones globales de

draw2d.

Sec. 15.2. Opciones para los objetos grcos bidimensionales

197

Opcin
xtics_axis

Val. por defecto


false

Descripcin
indica si las marcas y sus etiquetas se dibujan sobre el propio eje largo del borde del grco

x, o se colocan a lo
xtics pero con el xtics_axis
pero

ytics ytics_axis xaxis xaxis_width xaxis_type xaxis_color yaxis yaxis_width yaxis_type yaxis_color file_bgcolor delay

auto false false


1

similar que eje

similar que con el eje

especica si se dibujar el eje

indica el ancho del eje

dots black false


1

indica cmo se debe dibujar

solid

el eje

dots)

(valores admisibles:

indica el color para el eje

especica si se dibujar el eje

indica el ancho del eje similar que con el eje

y
pero

dots black xffffff

xaxis_type

indica el color para el eje

y
gif

establece el color de fondo (en cdigo hexadecimal los terminales

png, jpg

rgb ) para
y

establece el retraso en centsimas de segundo entre imgenes en los cheros mados

gif

ani-

eps_width

12

indica el ancho (en archivo por los Postscript terminales

cm )
eps

del y

generado

eps_color

eps_height

12
draw2d.

indica el largo (en chivo Postscript

cm ) del ar-

Algunas opciones globales de

198

Cap. 15. Grcos con

draw

Opcin
pdf_width

Val. por defecto


21 0

Descripcin
especica el ancho (en do por los terminales

cm )
y

del documento PDF genera-

pdfcairo pdf_height pic_width pic_height user_preamble


29 7 640

pdf

especica el largo (en documento PDF

cm ) del

especica la anchura del chero de imagen de bits generado por los terminales

png

jpg

640

especica el largo del chero de imagen de bits


draw2d.

inserta cdigo

Gnuplot

Algunas opciones globales de

15.2.4 Ejemplos ilustrativos

Maxima
Aqu se usa

user_preamble

para insertar cdigo Gnuplot. El resultado, en este

caso, equivale a asignar el valor

xy

a la opcin

proportional_axes.

( %i15)

wxdraw2d( parametric(cos(t), sin(t), t, 0, 2 %pi), user_preamble = set size ratio 1 );

( %t15)

( %o15)

[gr2d(parametric)]

Sec. 15.2. Opciones para los objetos grcos bidimensionales

199

Maxima
He aqu la regin encerrada por las parbolas

y = x2

y = 1 x2 .

( %i16)

wxdraw2d( filled_func = x2, fill_color = yellow, explicit(1 x2, x, sqrt(2)/2, sqrt(2)/2), filled_func = false, line_width = 3, key = 1 x2 , color = blue, explicit(1 x2, x, sqrt(2)/2, sqrt(2)/2), key = x2 , color = red, explicit(x2, x, sqrt(2)/2, sqrt(2)/2) );

( %t16)

( %o16)

[gr2d(explicit, explicit, explicit)]

Maxima
Aqu se resuelve un sistema de ecuaciones para encontrar los puntos de interseccin de las curvas denidas por

x2 + y 2 = 1

y 2x2 +

3 2

= 0.

( %i17) ( %o17)

sol : solve([x2 + y2 = 1, y 2 x2 + 3/2 = 0], [x, y]); 5+5 5+5 x= , y = 51 , x = , y = 51 , 3 3 4 4 22 22 x = 5 5 , y = 5+1 , x = 5 5 , y = 5+1 3 3 4 4
22 22

200

Cap. 15. Grcos con

draw

Maxima
Esto almacena las coordenadas de los puntos de interseccin, previamente calculados, en la variable

pts.

( %i18) ( %o18)

pts : map(lambda([h], subst(h, [x, y])), sol); 5+5 5+5 , 51 , , 51 , 5 5 , 5+1 , 3 3 3 4 4 4 22 22 22 5 5 , 5+1 3 4
22

Maxima
He aqu un grco de las curvas denidas por los respectivos puntos de interseccin.

x2 + y 2 = 1

y 2x2 +

3 2

=0

( %i19)

wxdraw2d( line_width = 2, color = blue, implicit(x2 + y2 = 1, x, 1 5, 1 5, y, 1 5, 1 5), color = red, implicit(y 2 x2 + 3/2 = 0, x, 1 5, 1 5, y, 1 5, 1 5) color = black point_size = 1,5, point_type = 7, points(pts), );

( %t19)

( %o19)

[gr2d(parametric)]

Sec. 15.2. Opciones para los objetos grcos bidimensionales

201

Maxima
Aqu se dene la curva paramtrica

a.

( %i20)

a(t) := [t, sin(t)] $

Maxima
Esto dene el campo vectorial tangente asociado a la curva

a.

( %i21)

define( a (t), diff(a(t), t) ) $

Maxima
Aqu se construyen la lista

de vectores tangentes a la curva

y la lista

de

puntos de aplicacin de stos. Los valores de la lista

t0 ,

para tal construccin, son tomados

t0.

( %i22) ( %i23) ( %i24)

t0 : create_list(i %pi/4, i, 0, 8) $ T : create_list( vector(a(i), a (i)), i, t0 ) $ P : map(a, t0) $

Maxima
Este grco muestra la curva

a, un conjunto de vectores unitarios tangentes a sta

y los puntos de aplicacin de los mismos.

( %i25)

wxdraw2d( title = Campo vectorial tangente, color = red, parametric(t, sin(t), t, 0, 2 %pi), color = blue, head_length = 0 2, head_angle = 10, unit_vectors = true, T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9], color = green, point_type = 7, points(P) );

202

Cap. 15. Grcos con

draw

( %t25)

( %o25)

[gr2d(parametric, vector, vector, vector, vector, vector, vector, vector, vector, vector, points)]

Maxima
A continuacin se construye la lista

de vectores normales a la curva

a.

( %i26) ( %i27)

J(v) := [last(v), first(v)] $ N : create_list( vector(a(i), J(a (i))), i, t0 ) $

Maxima
Este grco muestra la curva

a,

un conjunto de vectores unitarios tangentes a

la curva, un conjunto de vectores unitarios normales a la misma y los puntos de aplicacin de los vectores.

( %i28)

wxdraw2d( title = Campos vectoriales tangente y normal, color = red, parametric(t, sin(t), t, 0, 2 %pi), color = blue, head_length = 0 2, head_angle = 10, unit_vectors = true, T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9], color = yellow, N[1], N[2], N[3], N[4], N[5], N[6], N[7], N[8], N[9], color = green, point_type = 7, points(P), proportional_axes = xy )$

Sec. 15.3. Objetos grcos tridimensionales

203

( %t28)

Maxima
He aqu un grco polar mejorado.

( %i29) ( %t29)

wxdraw2d( color = blue, nticks = 100, polar(sin(2 t), t, 0, 2 %pi) );

( %o29)

[gr2d(polar)]

15.3 Objetos grcos tridimensionales


points([[x1 , y1 , z1 ], [x2 , y2 , z2 ], . . .]) points([x1 , x2 , . . .], [y1 , y2 , . . .], [z1 , z2 , . . .])
puntos tridimensionales

puntos tridimensionales

Principales objetos grcos tridimensionales incorporados en

draw.

204

Cap. 15. Grcos con

draw

points(matrix( [x1 , y1 , z1 ], [x2 , y2 , z2 ], . . .) vector([p1 , p2 , p3 ], [v1 , v2 , v3 ]) label([cadena, x, y, z], . . .) explicit(f (x, y), x, xmin , xmax , y, ymin , ymax ) implicit(E(x, y, z), x, xmin , xmax , y, ymin , ymax ) z, zmin , zmax ) parametric(fx , fy , fz t, tmin , tmax ) parametric_surface( fx , fy , fz , u, umin , umax , v, vmin , vmax ) cylindrical(r(z, ), z, zmin , zmax , , min , max ) spherical(r(, ), , min , max , , min , max ) mesh(m, x0 , y0 , ancho, largo)

puntos tridimensionales

vector cin

(v1 , v2 , v3 ) (p1 , p2 , p3 )

con punto de aplica-

etiquetas para grcos tridimensionales funcin explcita tisfacen

f cuyas variables saxmin x xmax y ymin E


a ser representa-

y ymax
expresin implcita da en el paraleleppedo

[xmin , xmax ] [ymin , ymax ] [zmin , zmax ]

curva paramtrica tridimensional, cuyo parmetro

satisface

tmin t

tmax
supercie denida paramtricamente, cuyos parmetros satisfacen

umin

u umax
tisfacen

vmin v vmax

funcin cilndrica

r cuyas variables sazmin z zmax y min

max
funcin esfrica facen

r cuyas variables satismin max y min

max
dene un grco tridimensional de la matriz

m (los valores z se toman de m, las abscisas van desde x0 hasta x0 + ancho y las ordenadas desde y0 hasta y0 + largo)
supercie tubular de radio

tube(fx , fy , fz , fr , t, tmin , tmax )

fr ,

genera-

da a partir de una curva paramtrica tridimensional, cuyo parmetro face

t satis-

tmin t tmax
draw.

Principales objetos grcos tridimensionales incorporados en

Sec. 15.3. Objetos grcos tridimensionales

205

Maxima
Aqu se genera, en forma aleatoria, un conjunto de puntos tridmensionales. Luego se muestra la grca de los dichos puntos.

( %i30) ( %i31) ( %t31)

p : create_list(map(random, [20, 50, 30]), k, 1, 10) $ wxdraw3d( points( p ) );

( %o31)

[gr3d(points)]

Maxima
Asignando el valor

true

a la opcin

plot_joined

se obtiene la poligonal que une

los puntos almacenados en

p.

( %i32)

wxdraw3d( points_joined = true, points( p ) );

( %t32)

( %o32)

[gr3d(points)]

206

Cap. 15. Grcos con

draw

Maxima
Aqu se muestra la grca del vector cuyo punto de aplicacin es el origen y cuya parte vectorial es

(1, 1, 1).

( %i33)

wxdraw3d( vector([0, 0, 0], [1, 1, 1]) );

( %t33)

( %o33)

[gr3d(vector)]

Maxima
He aqu un texto insertado en el punto

(0, 0, 1).

( %i34)

wxdraw3d( label([Etiqueta, 0, 0, 1]) );

( %t34)

( %o34)

[gr3d(label)]

Sec. 15.3. Objetos grcos tridimensionales

207

Maxima
Esto muestra la grca de la funcin

(x, y) sen x + sen(xy),

con

0 x 2

0 y 2 .

( %i35)

wxdraw3d( explicit(sin(x) + sin(x y), x, 0, 2 %pi, y, 0, 2 %pi) );

( %t35)

( %o35)

[gr3d(explicit)]

Maxima
Aqu se muestra la grca de la supercie generada a partir de la ecuacin

x2 + y 2 4)2 + z 2 = 4,

con

6 x 6, 6 y 6

2 z 2.

( %i36)

wxdraw3d( implicit((sqrt(x2 + y2) 4)2 + z2 = 4, x, 6, 6, y, 6, 6, z, 2, 2) );

( %t36)

( %o36)

[gr3d(implicit)]

208

Cap. 15. Grcos con

draw

Maxima
Esta es la grca de la curva

t t (cos t, sen t, 8 ),

con

0 t 4 .

( %i37)

wxdraw3d( parametric(cos(t), sin(t), t/8, t, 0, 4 %pi) );

( %t37)

( %o37)

[gr3d(parametric)]

Maxima
Aqu se muestra la grca de la supercie denida por

(u, v) ((2+cos v) cos u, (2+

cos v) sin u, sin v),

con

0 u 2

0 v 2 .

( %i38)

wxdraw3d( parametric_surface((2 + cos(v)) cos(u), (2 + cos(v)) sin(u), sin(v), u, 0, 2 %pi, v, 0, 2 %pi) );

( %t38)

( %o38)

[gr3d(parametric_surface)]

Sec. 15.3. Objetos grcos tridimensionales

209

Maxima
Esta es la grca de la supercie denida en coordenadas cilndricas mediante

(z, t) cos z ,

con

2 z 2

0 t 2 .

( %i39)

wxdraw3d( cylindrical(cos(z), z, 2, 2, t, 0, 2 %pi) );

( %t39)

( %o39)

[gr3d(cylindical)]

Maxima
He aqu la grca de la supercie denida en coordenadas esfricas mediante

(a, t) 1,

con

0 a 2

0 t .

( %i40)

wxdraw3d( spherical(1, a, 0, 2 %pi, t, 0, %pi) );

( %t40)

( %o40)

[gr3d(spherical)]

210

Cap. 15. Grcos con

draw

Maxima
Esta es la grca de un objeto geomtrico tridimensional de tipo

mesh.

( %i41) ( %i41) ( %t41)

m : apply(matrix, create_list(create_list(k2 + i2, k, 5, 5), i, 5, 5)) $ wxdraw3d( mesh(m, 0, 0, 5, 5) );

( %o41)

[gr3d(mesh)]

Maxima
He aqu la grca de la supercie tubular, de radio curva

cos

t 2 , generada por la 10

t (cos t, t, 0),

con

0 t 4 .

( %i42)

wxdraw3d( tube(cos(t), t, 0, cos(t/10)2, t, 0, 4 %pi) );

( %t42)

( %o42)

[gr3d(tube)]

Sec. 15.4. Opciones para objetos grcos tridimensionales

211

15.4 Opciones para objetos grcos tridimensionales


15.4.1 Opciones locales
points y label las opciones locales son draw2d y draw3d. En cambio para el objeto grco vector las opciones head_length y head_angle nicamente son relevantes en draw2d (vea la subseccin 15.2.1). Por este motivo, en
Para los objetos grcos las mismas en esta seccin, no se presentan tablas de opciones para los tres objetos grcos mencionados.

Opcin
xu_grid yv_grid

Val. por defecto


30

Descripcin
indica el nmero de coordenadas de

para formar la rejilla

de puntos muestrales

30

indica el nmero de coordenadas de

para formar la rejilla

de puntos muestrales
Opciones de

spherical

draw3d tube.

para

explicit, parametric_surface, cylindrical,

Opcin
x_voxel y_voxel z_voxel

Val. por defecto


10

Descripcin
indica el nmero de voxels en la direccin

a utilizar por el

algoritmo implementado

10

indica el nmero de voxels en la direccin

y z

a utilizar por el

algoritmo implementado

10

indica el nmero de voxels en la direccin a utilizar por el algoritmo implementado

Opciones de

draw3d

para

implicit.

212

Cap. 15. Grcos con

draw

Opcin
nticks

Val. por defecto


29

Descripcin
indica el nmero de puntos a utilizar para generar las grcas

Opciones de

draw3d

para

parametric.

15.4.2 Opciones locales genricas


Vea la subseccin 15.2.2.

15.4.3 Opciones globales


proportional_axes todas las opciodraw2d son las mismas de draw3d (vea la subseccin 15.2.3). Adems draw3d incorpora opciones que complentan, de forma natural, las incorporadas en draw2d. Por ejemplo, estan las opciones zrange, logz, zlabel, ztics, zaxis, zaxis_type y zaxis_color.
A excepcin de la opcin nes globales de Otras opciones se describen a continuacin.

Opcin
xyplane

Val. por defecto


false

Descripcin
coloca el plano lor

xy

en escenas se colo-

tridimensionales (para el va-

false, el plano xy

ca automticamente; en cambio, si toma un valor real, ste intersectar con el eje nivel)

a ese

rot_vertical

60

indica el ngulo (en grados) de la rotacin vertical rededor del eje

x)

(al-

para si-

tuar el punto del observador en las escenas tridimensionales (el ngulo debe pertenecer al intervalo
Algunas opciones globales de

[0, 180])

draw3d.

Sec. 15.4. Opciones para objetos grcos tridimensionales

213

Opcin

Val. por defecto

Descripcin
indica el ngulo (en grados) de la rotacin horizontal (alrededor del eje

rot_horizontal 30

z)

para si-

tuar el punto del observador en las escenas tridimensionales (el ngulo debe pertenecer al intervalo

[0, 360])

axis_3d palette

true color

indica si los ejes sibles

x, y

z, tra-

dicionales, permanecern vi-

es un vector de longitud tres con sus componentes tomando valores enteros en el rango da ra desde valor

36
es un

+36;
ndice

capa-

seleccionar

una

frmu-

la que transforma los niveles numricos en las componentes cromticas rojo, verde y azul (palette

= gray palette = color son atajos para palette = [3,3,3] y palette = [7,5,15], resy pectivamente)

enhanced3d

false

si

enhanced3d
Si

vale

true,

los de ex-

objetos grcos se colorearn activando el modo

Gnuplot.
presin

pm3d
una

cepto en

enhanced3d (eximplicit), sta se

se

da

utilizar para asignar colores de acuerdo con el valor de

palette; las variables de esta


expresin deben ser las mis-

mas que luego se utilicen para la descripcin de la supercie


Algunas opciones globales de

draw3d.

214

Cap. 15. Grcos con

draw

Opcin
surface_hide contour

Val. por defecto


false none

Descripcin
establece si las partes ocultas se mostrarn o no en las supercies permite decidir dnde colocar las lneas de nivel (valores posibles: y

both contour_levels 5

none, base, surface, map)

controla cmo se dibujarn las lneas de nivel (valores posibles: n, [inicio, inc, f in] {n1 , n2 , . . .} y

Algunas opciones globales de

draw3d.

15.4.4 Ejemplos ilustrativos

Maxima
Aqu se han cambiado los valores por defecto de dos opciones de tado se aprecia al mostrar los puntos generados en

draw3d. El resul-

( %i30)

( %i43)

wxdraw2d( enhanced3d = true, point_type = 7, point_size = 2, points( p ) );

( %t43)

( %o43)

[gr3d(points)]

Sec. 15.4. Opciones para objetos grcos tridimensionales

215

Maxima
Esto dene una curva, algunos puntos sobre sta y algunos vectores tangentes a la misma.

( %i44) ( %i45) ( %i46) ( %i47) ( %i48)

a(t) := [cos(t), sin(t), t/8] $ define( a (t), diff(a(t), t) ) $ t0 : create_list(i %pi/4, i, 0, 8) $ T : create_list(vector(a(i), a (i)), i, t0) $ P : map(a, t0) $

Maxima
He aqu la grca de todos los objetos grcos tridimensionales previamente denidos.

( %i49)

wxdraw3d( color = red, parametric(t, sin(t), t/8, t, 0, 2 %pi), color = blue, head_angle = 10, unit_vectors = true, T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9], color = green, point_type = 7, points(P) );

( %t49)

( %o49)

[gr3d(parametric, vector, vector, vector, vector, vector, vector, vector, vector, vector, points)]

216

Cap. 15. Grcos con

draw

Maxima
Esta es la grca de

( %t35)

despus de cambiar algunas opciones.

( %i50)

wxdraw3d( xu_grid = 150, yv_grid = 150, enhanced3d = cos(x y), explicit(sin(x) + sin(x y), x, 0, 2 %pi, y, 0, 2 %pi) );

( %t50)

( %o50)

[gr3d(explicit)]

Maxima
Esta es la grca de

( %t35)

despus de ms cambios de opciones.

( %i51)

wxdraw3d( xu_grid = 150, yv_grid = 150, palette = [6, 5, 15], enhanced3d = sin(x y), explicit(sin(x) + sin(x y), x, 0, 2 %pi, y, 0, 2 %pi) );

( %t51)

( %o51)

[gr3d(explicit)]

Sec. 15.5. Fijacin de valores para opciones

217

Maxima
He aqu la supercie obtenida en

( %t36)

( %i52)

wxdraw3d( x_voxel = 17, y_voxel = 17, z_voxel = 15, palette = [12, 5, 27], enhanced3d = true, implicit((sqrt(x2 + y2 ) 4)2 + z2 = 4, x, 6, 6, y, 6, 6, z, 2, 2) );

( %t52)

( %o52)

[gr3d(implicit)]

15.5 Fijacin de valores para opciones


En algunas ocasiones se requiere dibujar varios grcos con las mismas opciones y para evitar escribirlas en cada escena puede optarse por jar, inicialmente, los valores deseados para dichas opciones. Para hacer factible esto

draw

cuenta con una funcin especca.

set_draw_defaults( opcin grca,..., opcin grca,...)


Fijando valores para opciones.

ja los valores para las opciones grcas del usuario (llamando a la funcin sin argumentos se borran las opciones jadas por el usuario)

218

Cap. 15. Grcos con

draw

Maxima
Aqu se jan los valores de algunas opciones.

( %i53)

set_draw_defaults( surface_hide = true, color = blue, grid = true, line_width = 2 );

Maxima
A continuacin se graca una parbola sin especicaciones para ninguna opcin.

( %i54)

wxdraw2d( explicit(x2 , x, 2, 2) );

( %t54)

( %o54)

[gr2d(explicit)]

15.6 Grcos mltiples


Opcin
columns

Val. por defecto


1

Descripcin
indica el nmero de columnas a considerar cuando se realizan grcos mltiples

Opcin para grcos mltiples.

Sec. 15.6. Grcos mltiples

219

Maxima
Esto dene dos escenas una bidimensional y otra tridmensional.

( %i55) ( %i56)

f1 : gr2d(explicit(sin(x), x, 0, 2 %pi)) $ f2 : gr3d(explicit(sin(x) + sin(y), x, 0, 2 %pi, y, 0, 2 %pi)) $

Maxima
Con

draw

la dos escenas previas se presentan por defecto en una sola columna.

( %i57) ( %t57)

wxdraw(f1, f2) $

Maxima
Con la opcin

columns

es posble cambiar el nmero de columnas.

( %i58) ( %t58)

wxdraw(f1, f2, columns = 2) $

220

Cap. 15. Grcos con

draw

Maxima
De esta manera se borran las opciones que fueron jadas en

( %i51)

( %i59)

set_draw_defaults() $

Maxima
El aspecto de las grcas luce ahora diferente, pues se han restituido los valores por defecto de las opciones.

( %i60) ( %t60)

wxdraw(f1, f2, columns = 2) $

15.7 Grcos animados


Del mismo modo que en la seccin 14.8 se pueden crear animaciones nicamente en el entorno de las funciones

with_slider_draw y with_slider_draw3d con las cuales se generan grcos idnticos a los que se generan con wxplot2d y wxplot3d, respectivamente, sin embargo tales grcos pueden ser animados despus de seleccionarlos y pulsar, luego, el botn Comenzar animacin, del cuadro de controles, de la barra de herramientas.

wxMaxima.

En este caso se utilizan

Maxima
Cuadro de controles, ubicado en la barra de herramientas, para la animacin de grcos.

Sec. 15.7. Grcos animados

221

with_slider_draw with_slider_draw3d

funcin

wxdraw2d
funcin

para

animar

grcos

de

wxdraw3d
draw.

para

animar

grcos

de

Obtencin de grcos animados con

Maxima
Esto genera un grco listo para ser animado. Para conseguir la animacin primero se selecciona el grco y luego se pulsa el botn , del cuadro de controles, , y automticamente sta es generada. Para detenerla basta pulsar el botn

del mismo cuadro. Tambin es posible navegar a travs de cada cuadro de la animacin con tan slo arrastrar a voluntad el botn seleccionado el grco. , despus de haber

( %i61)

with_slider_draw( a, [0, 1, 2, 3, 4, 5], color = red, line_width = 2, yrange = [1,5, 1,5], explicit(sin(x + a), x, 2 %pi, 2 %pi) );

( %t61)

( %o61)

Maxima
A continuacin se dene la funcin inja

/* para calcular el producto vectorial.

( %i62) ( %i63)

infix(/ ) $ / (a, b) := [a[2] b[3] b[2] a[3], b[1] a[3] a[1] b[3], a[1] b[2] b[1] a[2]] $

222

Cap. 15. Grcos con

draw

Maxima
Esto dene la curva

a,

su primera derivada y su segunda derivada.

( %i64) ( %i65) ( %i66)

a(t) := [cos(t), sin(t), t/8] $ define( a (t), diff(a(t), t) ) $ define( a (t), diff(a(t), t, 2) ) $

Maxima
Al animar la siguiente secuencia de cuadros se visualiza el tiedro de Frenet recorriendo la curva

a.

( %i67)

with_slider_draw3d( t, create_list(i %pi/4, i, 0, 16), color = dark red, nticks = 50, parametric(cos(u), sin(u), u/8, u, 0, 4 %pi), unit_vectors = true, color = blue, vector(a(t), a (t)), color = yellow, vector(a(t), a (t)/ a (t)), color = red, vector(a(t), (a (t)/ a (t))/ a (t)), color = green, point_type = 7, points([a(t)]), xrange = [1,5, 1,5], yrange = [1,5, 1,5], zrange = [0, 3], user_preamble = set size ratio 1);

( %t67)

( %o67)

Sec. 15.7. Grcos animados

223

Maxima
Esta es la animacin de un morsmo entre la esfera y el toro.

( %i68)

with_slider_draw3d( a, create_list(i/8, i, 0, 8), surface_hide = true, user_preamble = set size ratio 1, xtics = false, ytics = false, ztics = false, axis_3d = false, rot_vertical = 80, rot_horizontal = 100, parametric_surface( (1 a) cos(t) sin(u/2) (a sin(u))/3, (a sin(t) (2 cos(u)))/3+ (1 a) sin(t) sin(u/2), (a cos(t) (2 cos(u)))/3 + (1 a) cos(u/2), t, 0, 2 %pi, u, 0, 2 %pi) );

( %t68)

( %o68)

Captulo 16 Archivos y operaciones externas


16.1 Generacin de expresiones y archivos TEX
T X, puede encontrar conveniente usar la funcin tex para convertir E expresiones de en forma conveniente de entrada para T X. E Si el usuario quiere combinar su trabajo con material existente en

Maxima

El resultado que as se obtiene es un fragmento de cdigo que puede incluirse en un documento mayor, pero que no puede ser procesado aisladamente.

tex(expr ) tex(expr ,false) tex(expr,destino )


Salidas de Maxima para T X E

imprime en la consola la representacin en T X de E cadena aade la salida al archivo

expr

devuelven el cdigo T X en formato de E

destino

Maxima
He aqu una expresin, impresa en forma estndar de Maxima.

( %i1) ( %o1)

(x + y)2/sqrt(x y); 2 (y + x) xy

224

Sec. 16.1. Generacin de expresiones y archivos T X E

225

Maxima
He aqu la expresin previa en forma de entrada para T X. E

( %i2) ( %o2)

tex( %);

false

Maxima
Esto aade la expresin cado en

d:/maximatex/.

(y + x)2 , xy

traducida a T X, al archivo E

ejemplo.tex

ubi-

( %i3) ( %o3)

tex((x + y)2/sqrt(x y), d : /maximatex/ejemplo.tex); false

texput(a,f ) get_tex_ environment(op ) set_tex_ environment(op,antes,

mo

establece el formato, en T X, del toE , el cual puede ser un smbolo o el

nombre de un operador devuelve el entorno T X que se aplica E . Si no se ha asignado

al operador por defecto

op

ningn entorno, devolver el que tenga

asigna el entorno T X al operador E

op

despus )
devuelve el entorno T Xque se aplica E a expresiones para las cuales el operador de mayor rango no tiene entorno T Xasignado E

get_tex_environment_ default( ) set_tex_environment_ default(antes,

asigna el entorno T Xpor defecto E

despus )

Salidas de Maxima para T X E

226

Cap. 16. Archivos y operaciones externas

Maxima
De esta forma se asigna cdigo T Xpara una variable. E

( %i4) ( %o4)

texput(s, \\sqrt{2}); \sqrt{2}

Maxima
Ahora puede usarse la asignacin anterior para generar ms cdigo T X. E

( %i5) ( %o5)

tex(s + 1/2);

false

Maxima
El entorno T X aplicado, por defecto, a expresiones, en Maxima, es $$ $$. E

( %i6) ( %o6)

tex(3/4);

false

Maxima
Con la funcin set_tex_environment_default es posible cambiar el entorno T X. E En este caso se ha anulado todo entorno.

( %i7) ( %o7)

set_tex_environment_default( ,  ); []

Maxima
He aqu el resultado del nuevo cdigo T X. E

( %i8) ( %o8)

tex(3/4);

false

Sec. 16.1. Generacin de expresiones y archivos T X E

227

Adems de traducir expresiones individuales a T X, tamE A bin traduce cuadernos completos a documentos pdf L T X. Para ello E el usuario debe digitar el nombre que asignar al archivo resultante, as como la respectiva extensin, ventana men

Maxima

tex, en la casilla Nombre de la Exportar que aparece despus de elegir la opcin Exportar del Archivo.

Maxima
Primer paso para exportar un cuaderno.

Maxima
A E Exportando un cuaderno como documento pdf L T X

228

Cap. 16. Archivos y operaciones externas

16.2 Generacin de archivos HTML


Adicionalmente,

Maxima
html.

brinda capacidades para convertir cua-

dernos completos a pginas web. El proceso que debe seguirse para la traduccin es el mismo que se sigui en la pgina 227, pero en este caso la extensin ser

16.3 Generacin de expresiones Lisp y Fortran


Si el usuario tiene programas escritos en Lisp o Fortran, puede ser que quiera tomar frmulas que ha generado en en el cdigo original de sus programas.

Maxima e insertarlas Maxima permite convertir

expresiones matemticas en expresiones Lisp y Fortran.

:lisp $ %in fortran(expr )

escribe para Lisp la expresin a la que hace referencia la etiqueta %i escribe

expr

para Fortran

Salidas de Maxima para Lisp y Fortran.

Maxima
Aqu se obtienen expresiones para Lisp y Fortran.

( %i9) x2 + 2 x + 1; ( %o9) x2 + 2 x + 1 ( %i10) : lisp $ %i7; ( %i11) fortran(x2 + 2 x + 1); x 2 + 2 x + 1 ( %o11) done

Captulo 17 Programacin con

Maxima

Maxima

La elaboracin de programas con el lenguaje de programacin de permite al usuario denir sus propias funciones. De esta ma-

nera se hace posible la automatizacin de secuencias de operaciones que son tiles para abordar la solucin de un determinado tipo de problema. Adems, es posible implementar varias funciones, relacionadas con cierto tema, y guardarlas en un solo archivo que luego se pueda ejecutar sin necesidad de visualizar todo el cdigo elaborado. A tal archivo se le conoce como

paquete 1

de funciones.

17.1 Operadores relacionales y lgicos


ma
De manera similar que cualquier lenguaje de programacin

Maxi-

incluye operadores relacionales y lgicos, as como estructuras de

control (que se utilizan para controlar el ujo del programa en una rutina). En

Maxima, los operadores lgicos pueden ser injos o prejos. Un


and
cuya sintaxis es

operador recibe el nombre de injo cuando ste debe escribirse entre los operandos, por ejemplo el operador para ciertos operandos

p and q ,

q.

Por otra parte, un operador prejo es

1 Del

ingls package. Un paquete es almacenado en forma automtica por Ma-

xima como archivo de extensin


lenguaje de programacin

Lisp.

lisp

y el cdigo es convertido internamente al

229

230

Cap. 17. Programacin con Maxima

aquel que debe escribirse antes del operando, por ejemplo el operador

not

cuya sintaxis es

not p,

para cierto operando

p.

Cabe destacar que, en

Maxima,

casi todos los operadores lgicos

son injos y nicamente hay un operador lgico prejo.

Operador
menor que menor o igual que igualdad (sintctica) negacin de

Smbolo
< <= = # equal notequal >= > and or not

Tipo
operador relacional injo operador relacional injo operador relacional injo operador relacional injo operador relacional injo operador relacional injo operador relacional injo operador relacional injo operador lgico injo operador lgico injo operador lgico prejo

igualdad (por valor) negacin de

equal

mayor o igual que mayor que y o no

Operadores relacionales y lgicos.

Controlador Descripcin
if for
permite, mediante una condicin, que se ejecute o no se ejecute determinada tarea o lnea de cdigo es utilizado para generar una repeticin de instrucciones entre un nmero inicial y un nmero nal que deben ser indicados o, tambin, entre un conjunto de elementos de una lista

while unless do

repetir sin detenerse un determinado cdigo mientras se cumpla una condicin repetir sin detenerse un determinado cdigo hasta que se cumpla una condicin se utiliza para realizar iteraciones con

unless

for, while

Principales estructuras de control.

Sec. 17.1. Operadores relacionales y lgicos

231

Maxima
He aqu un ejemplo sencillo en el que se muestra la sintaxis de

if.

( %i1) ( %o1) ( %i2) ( %o2)

if 2 = 3 then 1; false if 3 = 3 then 1; 1

Maxima
En este ejemplo se aade el resultado ha obtener en caso de que la condicin sea falsa.

( %i3) ( %o3)

if 2 = 3 then 1 else 3; 3

Tngase en cuenta que las expresiones consideradas en los ejemplos de las entradas

( %i1) y ( %i2) equivalen a las expresiones: if 2 = 3 then 1 else false y if 3 = 3 then 1 else false,

respectivamente.

Maxima
Aqu se obtiene el valor ligado a la expresin verdadera ms prxima (en este caso

3 = 3). Si todas las expresiones fuesen falsas, entonces se obtendra el ltimo valor (en este caso 4).

( %i4) ( %o4)

if 2 = 3 then 1 elseif 3 = 3 then 5 else 4; 5

Maxima
Mediante este otro ejemplo se muestra la sintaxis de

for.

( %i5) 1 3 5 ( %o5)

for i : 1 thru 5 step 2 do print(i);

done

232

Cap. 17. Programacin con Maxima

Maxima
Si no se indica el paso (incremento) se asume uno, por defecto.

( %i6) 1 2 3 ( %o6)

for i : 1 thru 5 do print(i);

done

Maxima
Para inicializar el contador en

while

se utiliza

for.

( %i7) 1 2 3 ( %o7)

for i : 1 while i <= 3 do print(i);

done

Maxima
Para inicializar el contador en

unless

tambin se utiliza

for.

( %i8) 1 2 3 ( %o8)

for i : 1 unless i >= 4 do print(i);

done

17.2 Operadores y argumentos


Casi todo en

Maxima

es un objeto de la forma

fun(a1 , . . . , an ),
es decir, una expresin que comprende un operador como argumentos de ste,

a1 , . . . , an .

Las funciones

op

args

fun

y los

permiten

averiguar la estructura de las expresiones.

Sec. 17.2. Operadores y argumentos

233

op(expr) args(expr)

permite obtener el operador de la expresin

expr

permite obtener una lista cuyos elementos son los argumentos de la expresin

expr

Obtencin del operador y de los argumentos de una expresin.

Maxima
Aqu se dene la expresin

a + b,

la cual es almacenada en la variable

expr.

( %i9) ( %o9)

expr : a + b; b+a

Maxima
A continuacin, con la primera operacin se obtiene el operador de la expresin previamente denida; y en la segunda, se obtiene una lista con los argumentos de dicha expresin.

( %i10) ( %o10) ( %i11) ( %o11)

op(expr); + args(expr); [b, a]

Maxima
Es posible reconstruir la expresin usando la funcin

apply.

( %i12) ( %o12)

apply(op(expr), args(expr)); b+a

Maxima
Esto dene otra expresin.

( %i13) ( %o13)

expr : ejemplo(x, y, z); ejemplo(x, y, z)

234

Cap. 17. Programacin con Maxima

Maxima
Aqu, nuevamente, se obtienen el operador y los argumentos de la expresin.

( %i14) ( %o14) ( %i15) ( %o15)

op(expr); ejemplo args(expr); [x, y, z]

Maxima
Tambin es posible reconstruir la ltima expresin usando la funcin

apply.

( %i16) ( %o16)

apply(op(expr), args(expr)); ejemplo(x, y, z)

Maxima
Algunas expresiones (plot2d,

integrate,

etc.) requieren de una comilla simple.

( %i17) ( %o17)

expr : 'plot2d(x2 , [x, 1, 1]); plot2d(x2 , [x, 1, 1])

Maxima
Ahora si es posible obtener el operador y los argumentos de la expresin.

( %i18) ( %o18) ( %i19) ( %o19)

op(expr); plot2d args(expr); [x2, [x, 1, 1]]

Maxima
Tambin las listas y los conjuntos son objetos de la forma fun(a1 , . . . , an ). Aqu se almacena una lista cualquiera en la variable

expr.

( %i20) ( %o20)

expr : [a, b, c, d] ; [a, b, c, d]

Sec. 17.3. Programacin funcional

235

Maxima
Del mismo modo que en los ejemplos anteriores se obtienen el operador y una lista con los argumentos.

( %i21) ( %o21) ( %i22) ( %o22)

op(expr); [ args(expr); [a, b, c, d]

17.3 Programacin funcional


La el uso de funciones.

map, lambda
funcional.

programacin funcional es la programacin que pone nfasis en Maxima incluye las funciones predenidas apply,
que permiten apreciar la potencia de la programacin

apply(f, [expr1 , . . . , exprn ]) map(f, expr1 , . . . , exprn )

construye

evala

la

expresin

f (arg1 , . . . , argn )
devuelve una expresin cuyo operador principal es el mismo que aparece en las expresiones aplicar

expr1 , . . . , exprn

pero

cuyas subpartes son los resultados de

a cada una de las subpartes

de las expresiones

lambda([x1 , . . . , xm ] , expr1 , . . . , exprn ) lambda([ [L] ] , expr1 , . . . , exprn ) lambda([ x1 , . . . , xm , [L] ] , expr1 , . . . , exprn )

dene y devuelve una expresin lambda (es decir, una funcin annima) con argumentos ve el valor

x1 , . . . , xm ; la cual devuelexprn L;
la cual

dene y devuelve una expresin lambda con argumento opcional devuelve el valor

exprn x1 , . . . , x m ,
argu-

dene y devuelve una expresin lambda con argumentos mento opcional valor

L;

la cual devuelve el

exprn

Funciones predenidas para programacin funcional.

236

Cap. 17. Programacin con Maxima

Maxima
Aqu se dene la funcin

G,

la cual es aplicada luego a una lista cuyos elementos

pasan a ser los argumentos de

G.

( %i23) ( %i24) ( %o24)

G(x, y, z) := x2 + y2 + z2 $ apply(G, [x y, a + b, u]); (x y)2 + u2 + (b + a)2

Maxima
En este caso se aplica la funcin predenida

min.

( %i25) ( %o25)

apply(min, [7, 9, 3, 4]); 3

Maxima
Esto dene la funcin

y luego la mapea en una lista.

( %i26) ( %i27) ( %o27)

F(x) := x3 1 $ map(F, [2, 3, 5, a]); [7, 26, 124, a3 1]

Maxima
Aqu se muestra la denicin de una funcin lambda argumentos.

f,

la misma que posee dos

( %i28) ( %i29) ( %o29)

f : lambda([x, y], x + y) $ f(a, b); b+a

Maxima
Ahora se dene una funcin lambda con argumento opcional.

( %i30) ( %i31) ( %o31)

f : lambda([ [x] ] , x2) $ f(p); [p2 ]

Sec. 17.4. Implementacin del paquete:

ejemplo

237

( %i32) ( %o32)

f(p, q, r, s, t); [p2 , q2 , r2 , s2 , t2 ]

Maxima
En este ejemplo se dene una funcin lambda con dos argumentos y un argumento opcional. Luego esta funcin es evaluada en tres argumentos y se obtiene una lista con el resultado esperado, no obstante al evaluar la funcin en ms argumentos se obtiene una lista con tantos elementos como argumentos adicionales hay.

( %i33) ( %i34) ( %o34) ( %i35) ( %o35)

f : lambda([ x, y, [z] ] , x z + y) $ f(p, q, r); [p r + q] f(p, q, r, s, t, u, v, w); [p r + q, p s + q, p t + q, p u + q, p v + q, p w + q]

17.4 Implementacin del paquete: ejemplo


En esta seccin se implementar el paquete porar las funciones

triangulo
triangulo.

ejemplo, circunferencia.

que incor-

Maxima
Aqu se dene la funcin Esta funcin permite calcular el rea de un tringulo y el baricentro de un conjunto de puntos de

R2

, dados. Adems, si los

puntos son colineales, devuelve el mensaje: Los puntos son colineales.

( %i36)

triangulo(pts) := block([f : lambda([h], endcons(1, h)), pts1, M, d, a], pts1 : map(f, pts), M : apply(matrix, pts1), d : determinant(M), a : abs(d/2), if d = 0 then string(Los puntos son colineales) else (b : apply( + , pts)/3, [sconcat(Area,  : , a,  , u2), sconcat(Baricentro,  : , b)]) )$

238

Cap. 17. Programacin con Maxima

Maxima
Dado el conjunto de puntos del plano cin

{(1, 2), (3, 1), (2, 3)},

no colineales, la fun-

triangulo

devuelve el rea y las coordenadas del baricentro del tringulo

denido por los puntos dados.

( %i37) ( %i38) ( %o38)

p : [ [1, 2], [3, 1], [2, 3] ] $ triangulo(p); [ Area : 5/2 u2, Baricentro : [2, 4/3] ]

Maxima
Para visualizar los grcos se utilizar el paquete

draw.

( %i39)

load(draw) $

Maxima
Esto muestra la grca del tringulo previamente analizado, conjuntamente con el punto que corresponde al baricentro del mismo.

( %i40)

wxdraw2d( color = red, fill_color = white, line_width = 2, polygon(p), point_type = 6, color = blue, points([ [2, 4/3] ]), user_preamble = set size ratio 1 );

( %t40)

( %o40)

[gr2d(polygon,points)]

Sec. 17.4. Implementacin del paquete:

ejemplo

239

Maxima
Puesto que, en este caso, los puntos del conjunto les, la funcin

{(1, 1), (2, 2), (3, 3)}

son colinea-

triangulo

devuelve un mensaje indicando ste hecho.

( %i41) ( %i42) ( %o42)

p : [ [1, 1], [2, 2], [3, 3] ] $ triangulo(p); Los puntos son colineales

Maxima
Aqu se dene la funcin

circunferencia

que permite obtener la ecuacin de la

circunferencia denida por tres puntos dados.

( %i43)

circunferencia(pts) := block([f : lambda([h], endcons(1, h)), g : lambda([h], cons(h[1]2 + h[2]2 , h)), pts1, M, d, eq], pts1 : map(f, pts), M : apply(matrix, pts1), d : determinant(M), if d = 0 then string(Los puntos son colineales) else (aux : map(g, cons([x, y, 1], pts1)), M : apply(matrix, aux), d : determinant(M), eq : expand(d), expand(eq/coeff(eq, x2)) = 0) )$

Maxima
Dado el conjunto de puntos del plano cin

{(1, 2), (3, 1), (2, 3)},

no colineales, la fun-

circunferencia

devuelve la ecuacin de la circunferencia denida por estos

puntos.

( %i44) ( %i45) ( %o45)

p : [ [1, 2], [3, 1], [2, 3] ] $ circunferencia(p); y2 11 y + x2 29 x + 26 = 0 5 5 5

240

Cap. 17. Programacin con Maxima

Maxima
Esto muestra la grca de la circunferencia previamente analizada, conjunatmente con los puntos que la denen.

( %i46)

wxdraw2d( implicit(circunferencia(p), x, 0, 6, y, 2, 4), point_type = 6, color = red, point_size = 1, points(p), user_preamble = set size ratio 1 );

( %t46)

( %o46)

[gr2d(polygon,points)]

Maxima
Igual que con la funcin

triangulo,

para el conjunto de puntos del plano

{(1, 1),

(2, 2), (3, 3)}, la funcin circunferencia devuelve un mensaje indicando que stos
son colineales.

( %i47) ( %i48) ( %o48)

p : [ [1, 1], [2, 2], [3, 3] ] $ circunferencia(p); Los puntos son colineales

Hasta aqu se han denido, y se ha vericado el correcto funcionamiento de, las funciones nombre

triangulo

circunferencia.

Seguida-

mente se guardar la denicin de estas funciones en un chero de

ejemplo

y de extensin

lisp, el cual constituir un ejemplo de

un paquete de funciones denido por el usuario. Naturalmente, si el usuario desea puede copiar solamente la denicin de las citadas funciones y luego guardarlas sin necesidad de

Sec. 17.4. Implementacin del paquete:

ejemplo

241

copiar y ejecutar los ejemplos.

Maxima
Esto guarda todas las funciones denidas por el usuario en el archivo

ejemplo.lisp.

El directorio donde se guardar el chero es indicado por el usario, en este caso ste es:

d:/maximapackages.

( %i49)

save(d : /maximapackages/ejemplo.lisp, functions) $

Una vez que se ha guardado la denicin de las funciones en el mencionado chero es posible inicializarlo como si se tratara de cualquier paquete incorporado en

Maxima.

En este caso se asume que el usuario ha cerrado el cuaderno de trabajo actual de el cual inicializar el paquete

Maxima y luego ha abierto un nuevo cuaderno desde


ejemplo.lisp.

Maxima
Esto inicializa el paquete

ejemplo.lisp

desde el directorio en el que se guard.

( %i1)

load(d : /maximapackages/ejemplo.lisp) $

Maxima
Ahora es posible ejecutar cualquiera de las funciones incorporadas en el paquete

ejemplo.lisp

sin necesidad de exponer el cdigo del mismo.

( %i2) ( %i3) ( %o3)

p : [ [0, 0], [2, 0], [1, sqrt(3)] ] $ triangulo(p); [ Area : sqrt(3) u2, Baricentro : [1, 1/sqrt(3)] ]

Bibliografa

[1] Fokker,

J.

PROGRAMACIN

FUNCIONAL.

http://people.cs.uu.nl/jeroen/courses/fpsp.pdf (1996). [2] Rodrguez, WARE J. R. MAXIMA EN EL CON WXMAXIMA: DE SOFT-

LIBRE

AULA

MATEMTICAS.

http://knuth.uca.es/repos/maxima (2007). [3] Rodrguez, M. y Villate, J. MANUAL DE MAXIMA ver. 5.18. (2009). [4] Rodrguez, M. PRIMEROS PASOS EN MAXIMA. http://maxima.sourceforge.net/es/documentation.html

www.telefonica.net/web2/biomates/maxima/max.pdf (2008). [5] Rodrguez, M. SOFTWARE MATEMTICO BSICO: MAXIMA. www.telefonica.net/web2/biomates/maxima/i-math.pdf (2008). [6] Rodrguez, M. MAXIMA: UNA HERRAMIENTA DE CLCULO. (2006). http://softwarelibre.uca.es/cursos/maxima/cadiz.pdf