Está en la página 1de 303

BREVE MANUAL DE

Segunda Edicin

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

2
1.5
1
0.5
0
-0.5
0 0.5

1 1.5

2 2.5

3 0

0.5

R. Ipanaqu
e upublicaciones t
med ne

1.5

2.5

Breve Manual de Maxima


Segunda Edicin

Breve Manual de Maxima


Segunda Edicin
R. Ipanaqu

Departamento de Matemtica
Universidad Nacional de Piura

Robert Ipanaqu Chero


Departamento de Matemtica
Universidad Nacional de Piura
Urb. Miraflores s/n, Castilla, Piura
PER

https://sites.google.com/site/ripanaque
robertchero@hotmail.com

La composicin de BREVE MANUAL DE MAXIMA, Segunda Edicin,


se ha hecho en LATEX, usando el editor libre TEXMAKER 3.2.2.

Este documento es libre;


se puede redistribuir y/o modificar 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

Primera Edicin: Mayo 2010,


Segunda Edicin: Enero 2012.
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 Registro N 10/101865

ISBN-13: 978-84-693-7160-2

En memoria de mi padre,
Juan A. Ipanaqu Vargas

ndice general

Prlogo

xi

1. Obtencin de

Maxima

1.1.

Descarga . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.

Instalacin . . . . . . . . . . . . . . . . . . . . . . . . .

2. Funcionamiento de

Maxima

2.1.

Interfaz de cuaderno

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

2.2.

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

10

3. Uso del sistema

Maxima

12

Maxima

3.1.

La estructura de

3.2.

Cuadernos como documentos

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

14

3.3.

Conguracin de opciones y estilos . . . . . . . . . . .

17

3.4.

Bsqueda de ayuda . . . . . . . . . . . . . . . . . . . .

20

3.5.

Reinicio

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

23

3.6.

Comentarios . . . . . . . . . . . . . . . . . . . . . . . .

23

3.7.

Paquetes en

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

24

3.8.

Advertencias y mensajes . . . . . . . . . . . . . . . . .

25

3.9.

Interrupcin de clculos

25

Maxima

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

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

12

ndice

vi

4. Clculos numricos

26

4.1.

Aritmtica . . . . . . . . . . . . . . . . . . . . . . . . .

26

4.2.

Resultados exactos y aproximados

. . . . . . . . . . .

27

4.3.

Algunas funciones matemticas . . . . . . . . . . . . .

30

4.4.

Clculos con precisin arbitraria

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

33

4.5.

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

35

5. Generacin de clculos

37

5.1.

Uso de entradas y salidas previas . . . . . . . . . . . .

37

5.2.

Denicin de variables . . . . . . . . . . . . . . . . . .

39

5.3.

Secuencia de operaciones . . . . . . . . . . . . . . . . .

42

5.4.

Impresin de expresiones sin evaluar

44

. . . . . . . . . .

6. Clculos algebraicos

47

6.1.

Clculo simblico . . . . . . . . . . . . . . . . . . . . .

47

6.2.

Valores para smbolos

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

50

6.3.

Transformacin de expresiones algebraicas . . . . . . .

54

6.4.

Simplicacin de expresiones algebraicas . . . . . . . .

56

6.5.

Expresiones puestas en diferentes formas . . . . . . . .

58

6.6.

Simplicacin con asunciones

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

64

6.7.

Seleccin de partes de expresiones algebraicas . . . . .

66

7. Matemticas simblicas

68

7.1.

Lmites

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

68

7.2.

Diferenciacin . . . . . . . . . . . . . . . . . . . . . . .

70

7.3.

Integracin

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

73

7.4.

Sumas y Productos . . . . . . . . . . . . . . . . . . . .

78

7.5.

Operadores relacionales y lgicos

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

81

7.6.

Ecuaciones

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

84

ndice

vii

7.7.

Solucin de Ecuaciones Algebraicas . . . . . . . . . . .

85

7.8.

Solucin de Ecuaciones Trascendentales

. . . . . . . .

87

7.9.

Sistemas de Inecuaciones Lineales . . . . . . . . . . . .

92

7.10. Inecuaciones racionales . . . . . . . . . . . . . . . . . .

94

7.11. Ecuaciones diferenciales ordinarias

. . . . . . . . . . .

95

7.12. Sistemas de ecuaciones diferenciales ordinarias lineales

97

7.13. Series de potencias . . . . . . . . . . . . . . . . . . . .

99

7.14. Transformada de Laplace

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

102

7.15. Ecuaciones recurrentes . . . . . . . . . . . . . . . . . .

103

8. Matemticas numricas

105

8.1.

Solucin numrica de ecuaciones

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

105

8.2.

Integrales numricas

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

107

9. Funciones y programas

109

9.1.

Denicin de funciones . . . . . . . . . . . . . . . . . .

109

9.2.

Reglas de transformacin para funciones . . . . . . . .

118

9.3.

Funciones denidas a partir de expresiones . . . . . . .

121

9.4.

Funciones denidas a trozos . . . . . . . . . . . . . . .

124

10.Listas
10.1. Juntar objetos

129
. . . . . . . . . . . . . . . . . . . . . .

10.2. Generacin de listas

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

10.3. Eleccin de elementos de una lista

. . . . . . . . . . .

10.4. Prueba y bsqueda de elementos de una lista


10.5. Combinacin de listas

129
130
133

. . . . .

136

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

137

10.6. Reordenamiento de listas

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

10.7. Agregar y quitar elementos de una lista


10.8. Reorganizacin de listas

138

. . . . . . . .

140

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

141

10.9. Funciones adicionales para listas

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

142

ndice

viii

11.Arrays

144

12.Matrices

147

12.1. Generacin de Matrices

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

147

12.2. Elegir elementos de matrices . . . . . . . . . . . . . . .

150

12.3. Operaciones matriciales

151

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

12.4. Funciones adicionales para matrices

. . . . . . . . . .

155

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

158

12.6. Autovalores y autovectores

159

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

13.Conjuntos

161

13.1. Generacin de conjuntos . . . . . . . . . . . . . . . . .

161

13.2. Conversiones entre conjuntos y listas . . . . . . . . . .

163

13.3. Eleccin de elementos de un conjunto

164

. . . . . . . . .

13.4. Prueba y bsqueda de elementos de un conjunto

. . .

165

. . . . . .

167

13.6. Reorganizacin de conjuntos . . . . . . . . . . . . . . .

168

13.7. Operaciones con conjuntos . . . . . . . . . . . . . . . .

168

13.8. Funciones adicionales para conjuntos . . . . . . . . . .

171

13.5. Agregar y quitar elementos de un conjunto

14.Grcos

173

14.1. Grcos bsicos . . . . . . . . . . . . . . . . . . . . . .

174

14.2. Opciones . . . . . . . . . . . . . . . . . . . . . . . . . .

176

14.3. Grcos de puntos y lneas

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

180

14.4. Grcos paramtricos y polares . . . . . . . . . . . . .

183

14.5. Combinacin de grcos . . . . . . . . . . . . . . . . .

185

14.6. Grcos de supercies tridimensionales . . . . . . . . .

185

14.7. Grcos de densidad y contornos . . . . . . . . . . . .

190

14.8. Grcos animados

191

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

ndice

15.Utilidades de los menes de


15.1. El men

Archivo

15.2. El men

ix

wxMaxima

194

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

194

Editar

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

197

15.3. El men

Celda

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

200

15.4. El men

Maxima

15.5. El men

Ecuaciones

15.6. El men

lgebra

15.7. El men

Anlisis

15.8. El men

Simplificar

15.9. El men

Grficos

15.10.El men

Numrico

15.11.El men

Ayuda

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

203

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

204

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

207

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

211

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

214

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

216

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

219

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

220

16.Grcos con draw

222

16.1. Objetos grcos bidimensionales

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

16.2. Opciones para los objetos grcos bidimensionales

223

. .

234

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

234

16.2.2. Opciones locales genricas . . . . . . . . . . . .

237

16.2.3. Opciones globales . . . . . . . . . . . . . . . . .

238

16.2.4. Ejemplos ilustrativos . . . . . . . . . . . . . . .

241

16.2.1. Opciones locales

16.3. Objetos grcos tridimensionales

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

246

16.4. Opciones para objetos grcos tridimensionales . . . .

254

16.4.1. Opciones locales

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

254

16.4.2. Opciones locales genricas . . . . . . . . . . . .

255

16.4.3. Opciones globales . . . . . . . . . . . . . . . . .

255

16.4.4. Ejemplos ilustrativos . . . . . . . . . . . . . . .

257

16.5. Fijacin de valores para opciones . . . . . . . . . . . .

260

16.6. Grcos mltiples

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

261

16.7. Grcos animados

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

263

ndice

17.Campos de direcciones con plotdf

267

18.Archivos y operaciones externas

271

18.1. Generacin de expresiones y archivos TEX . . . . . . .

271

18.2. Generacin de archivos HTML

274

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

18.3. Generacin de expresiones Lisp y Fortran

19.Programacin con

. . . . . . .

Maxima

276

19.1. Operadores relacionales y lgicos


19.2. Operadores y argumentos
19.3. Programacin funcional

275

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

276

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

279

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

282

19.4. Implementacin del paquete:

ejemplo

. . . . . . . . .

284

Prlogo

Este manual da una introduccin al Software Libre

Maxima v5.25.1,

presentndolo como un potente Sistema de lgebra Computacional


(Computer Algebra 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

xi

Prlogo

xii

quedan en el tintero los borradores para la futura elaboracin de un


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

Maxima, as como de algunos paque-

tes que son de gran utilidad. Adems, 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.

Las nuevas herramientas incluidas en las ltimas versiones de

xima,

Ma-

as como la constante revisin y mejora de los aportes hechos

por diferentes usuarios ha motivado esta segunda edicin del manual.

R. Ipanaqu

Piura, Per

CAPTULO

Obtencin de

Maxima

Maxima

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

Maxima

en el sistema

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 c1

digo abierto . Debemos destacar que por el hecho de ser gratuito no


requiere de ningn password que siempre est asociado 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.25.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.25.1.exe que es

para Windows. Este instalador ocupa 29.0

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.25.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:
3. Seleccionar el idioma
(g. 1.4).

Figura 1.4:

Cuadro de vericacin.



Espaol y hacer clic sobre el botn Aceptar



Cuadro para seleccionar el idioma.



Siguiente del


al asistente de instalacin de Maxima

4. Hacer clic sobre el botn

5. Seleccionar la opcin

do de Licencia.

6. Hacer clic en el botn

Bienvenido

(g. 1.5).

Acepto el acuerdo

Acuer

Siguiente del



del cuadro

Luego hacer clic en el botn

mismo cuadro (g. 1.6).

1.7).

cuadro



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 Ma-

xima.

Figura 1.6:

Cuadro

hacer clic en el botn

Carpeta de Destino

Acuerdo de Licencia.



Siguiente del



cuadro

Seleccione la

(g. 1.8).

Seleccione los Componentes desmarcar las


Portugus y Portugus Brasileo ya que slo utilizael idioma Espaol. Esto permite, a su vez, el ahorro de

8. En el cuadro
casillas
remos

memoria (g. 1.9).


9. Seleccionar la carpeta del men Inicio en la cual se quiere ubi-

Sec. 1.2. Instalacin

Figura 1.7:

Figura 1.8:

Cuadro

Cuadro

Informacin.

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

10.



Siguiente del cuadro Seleccione la Carpeta del Men Ini

cio (g. 1.10).


Hacer clic en el botn Siguiente del cuadro seleccione las


Tareas Adicionales para que el asistente cree un icono de acceso directo a

Maxima

11. Hacer clic en el botn

en el escritorio (g. 1.11).


Instalar del

cuadro

Listo para Instalar

Cap. 1. Obtencin de Maxima

Figura 1.9:

Figura 1.10:

Cuadro

Cuadro

Seleccione la Carpeta del Men Inicio.

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

Seleccione los Componentes.



Siguiente del cuadro Informacin (g.




Finalizar del cuadro Completando la Instalacin de Maxima (g. 1.14).

13. Por ltimo, hacer clic en el botn

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

Figura 1.12:

Seleccione las Tareas Adicionales.

Cuadro

Listo para Instalar.

y permite una interfaz de texto, el entorno grco

wxMaxima que per-

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


el entorno grco

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:

Figura 1.14:

Cuadro

Figura 1.15:

Cuadro

Informacin.

Completando la Instalacin de Maxima .

Icono de acceso directo a wxMaxima.

CAPTULO

Funcionamiento de

Maxima

2.1 Interfaz de cuaderno


utilice un icono o el

formas grcas de inicializar

Maxima

men de Inicio
nalizar
texto
 con

Shift

Enter



entrada para

elegir el tem salida del

salir de

Maxima

Maxima

men

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
de

wxMaxima,

Maxima,

a travs

creando documentos interactivos. Para ello el usuario

debe hacer doble clic en el icono de inicio de

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  y Maxima

aade punto y coma al nal de tal

entrada, etiqueta la entrada con

( %in )

, la procesa y devuelve la

correspondiente salida (output) etiquetada con


9

( %on )

Cap. 2. Funcionamiento de Maxima

10

Maxima

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


punto y coma al nal de sta, la etiqueta con ( %i1) , la procesa e inmediatamente
despus devuelve la respectiva salida etiquetada con ( %o1) .

El usuario digita

( %i1) 1+1;
( %o1) 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

comando del sistema operativo para

Maxima
entrada para Maxima
inicializar

nalizar texto con ; y


Enter 
quit();

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

xima

Maxima

maxima

en una interfaz basada en texto, se digita

en el prompt del sistema operativo. Cuando

ha inicializado, imprimir el prompt

( %i1),

Ma-

esto signica que

esta lista para que el usuario haga su entrada. ste puede entonces




digitar su entrada, terminndola con ; y presionando luego Enter .

Maxima

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

cuaderno de

11

Maxima ; la salida con una interfaz basada en texto luce

similar, pero carece de caractersticas tales como caracteres especiales


y cambio de tamao de fuente.
Para salir de
entrada.

Maxima, debe digitarse Quit(); en el prompt de la

CAPTULO

Uso del sistema

Maxima

3.1 La estructura de
Maxima

Maxima
ncleo responsable de todos los clculos

wxMaxima

interfaz de cuaderno que se ocupa de


interactuar con el usuario (muy amigable)

XMaxima

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 em12

Sec. 3.1. La estructura de Maxima

Figura 3.1:

13

Un cuaderno que mezcla texto, grcos con entradas y


salidas de Maxima.

bargo, tambin tiene algunas desventajas con respecto a otras interfaces 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.

1 wxMaxima

fue desarrollada por Andrej Vodopivec y est disponible en

http://wxmaxima.sourceforge.net

Cap. 3. Uso del sistema Maxima

14

Figura 3.2:

Un dilogo con Maxima usando una interfaz basada en


texto.

interfaz de cuaderno con

documentos interactivos

interfaz basada en texto

texto desde el teclado

wxMaxima

Tipos comunes de interfaz con 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

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


al ncleo.

3.2 Cuadernos como documentos


Los cuadernos de

wxMaxima

permiten crear documentos que pueden

verse interactivamente en la pantalla o imprimirse en papel. En los

Sec. 3.2. Cuadernos como documentos

Figura 3.3:

15

Un cuaderno de wxMaxima como documento.

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.
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.
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.

As, por ejemplo, el material entendido como entrada para ser


ejecutado por el ncleo de

Maxima est en el estilo de Input (entrada),

Cap. 3. Uso del sistema Maxima

16

Figura 3.4:

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

Figura 3.5:

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.

Figura 3.6:

El recuadro muestra los menes y mtodos abreviados de


teclas para insertar celdas con diferentes estilos.

Sec. 3.3. Conguracin de opciones y estilos

Figura 3.7:

17

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.

Figura 3.8:

Primer paso para congurar las opciones y estilos.

mientras que el que se entiende para ser ledo como solamente de texto
est en estilo Text (texto).

3.3 Conguracin de opciones y estilos


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

wxMaxima

incorpora una conguracin predenida

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

Preferencias

del men

Editar.

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

ventana

Cap. 3. Uso del sistema Maxima

18

Figura 3.9:

Activando o desactivando las casillas de vericacin se


cambia la conguracin de las opciones.

Cuadro 3.1:

Valores asignados en la conguracin de Fuentes

Fuentes

Tipo

Fuente predeterminada
Fuente matemtica

Courier New (12)


Courier New (12)

Por ejemplo, cuando est activa la casilla de vericacin de la opcin

Hacer coincidir los parntesis en los controles de texto (de


Opciones), wxMaxima cierra automticamente cualquier

la pestaa

parntesis que se abra en una celda de estilo Input. Al desactivar esta

casilla, y hacer clic en

Aceptar ,

wxMaxima

no volver a cerrar au-

tomticamente ningn parntesis sino que esperar a que el usuario


lo haga.
En la pestaa

Estilo

se presenta una lista de todos los estilos que

pueden congurarse a gusto del usuario y la forma de hacerlo es bastante intuitiva.


Por ejemplo, congurando los estilos con los valores indicados en
los cuadros 3.1 y 3.2 se obtienen cuadernos con un aspecto elegante.

Sec. 3.3. Conguracin de opciones y estilos

Cuadro 3.2:

19

Valores asignados en la conguracin de Estilos

Estilos
Nombre de funciones

Color

Fuente

Aspecto

Tam.

rgb(0,0,0)

Courier New

Gruesa,

12

Itlica

Celda de texto
Celda de subseccin
Celda de seccin
Celda de ttulo
Fondo de celda
de texto
Fondo

Figura 3.10:

rgb(0,0,0)

Tahoma

Normal

12

rgb(188,73,18)

Tahoma

Gruesa

16

rgb(188,73,18)

Tahoma

Gruesa

18

rgb(54,95,145)

Tahoma

Gruesa

24

rgb(252,250,245)
rgb(252,250,245)

Un cuaderno de wxMaxima como documento, despus


de haber editado la conguracin de estilo.

Cap. 3. Uso del sistema Maxima

20

Figura 3.11:

Un ejemplo de bsqueda de informacin bsica sobre


una funcin en el

ndice

de la

Ayuda

de Maxima

3.4 Bsqueda de ayuda

Todas las funciones incorporadas en

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

formas. La ms usada es desde el men


que da acceso a la opcin

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

Maxima.

Tambin es factible buscar ayuda desde un cuaderno de trabajo.


Para ello puede utilizarse la funcin
especial

?.

2 describe

describe2

no evala su argumento. La funcin

cuentra la documentacin solicitada y

false

o tambin el smbolo

describe

devuelve

en caso contrario.

true

si en-

Sec. 3.4. Bsqueda de ayuda

describe(string )

21

encuentra el elemento, si existe, cuyo

string

ttulo coincide exactamente con

(ignorando la diferencia entre maysculas y minsculas)

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

equivale a

describe(string )

encuentra todos los elementos documentados que contengan

string

en sus

ttulos

Sintaxis de la funcin describe, la cual permite recibir informacin de las funciones


de Maxima.

?name
??name

equivale a

describe("name")

equivale a

describe("name",inexact)

Otras formas de recibir informacin.

Maxima

Esta sentencia da informacin de la funcin incorporada

max.

( %i1) describe("max");

- -Funcin: max(<x_1>,. . . ,<x_n>)


Devuelve
las

un

valor

expresiones

simplicado

desde

<x_1>

de
hasta

la

mayor

de

<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

Cap. 3. Uso del sistema Maxima

22

Maxima

Esta sentencia encuentra todos los elementos documentados que contienen


en sus ttulos. No devuelve

true

false

"plus"

hasta que el usuario seleccione las op-

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

( %i2) describe("plus",inexact);
0: doscmxplus (Funciones y variables para las matrices
y el lgebra lineal).
1: poisplus (Series de Poisson)
2: region_boundaries_plus (Funciones y variables para
worldmap)
3:

trigexpandplus (Funciones y variables para trigono-

metra)
Enter space-separated numbers, `all' or `none':

Maxima

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

true.

( %i3) describe("plus",inexact);
0: doscmxplus (Funciones y variables para las matrices
y el lgebra lineal).
1: poisplus (Series de Poisson)
2: region_boundaries_plus (Funciones y variables para
worldmap)
3:

trigexpandplus (Funciones y variables para trigono-

metra)
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>)

Sec. 3.5. Reinicio

23

Detecta los segmentos poligonales almacenados en la variable global `boundaries_array' con al menos un vrtice dentro del rectngulo denido por los extremos
(<x1>,<y1>) -superior izquierdo- y (<x2>,<y2>) inferior derecho-.
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( %))$

( %o3) true

3.5 Reinicio
La forma brusca de reiniciar

Maxima

wxMaxima. No
Maxima sin salir de
wxMaxima se elige la

es saliendo de

obstante, en muchos casos resulta til reiniciar

wxMaxima.
opcin

Para reiniciar

Reiniciar Maxima

Figura 3.12:

Maxima

sin salir de

del men

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
y

/.

Maxima

los comentarios se escriben entre las marcas

Cap. 3. Uso del sistema Maxima

24

/comentario /

con esta sintaxis

comentario

es inter-

pretado como un comentario

Escribiendo comentarios.

Maxima

Aqu se muestra un clculo y un comentario.

( %i1) 4+5 /*esto es una suma*/;


( %o1) 9

3.7 Paquetes en

Maxima

Una de las caractersticas ms importantes de

Maxima

es que es un

sistema extensible, hay una cierta cantidad de funciones incorporadas


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

Maxima

que contenga las funciones

que sean necesarias.

load(paquete )

lee un paquete de

Maxima

Leyendo paquetes 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.

( %i1) load(simplex)$

Sec. 3.8. Advertencias y mensajes

25

( %i2) minimize_lp(x+y,[3*x+2*y>2,x+4*y>3]);
9
7
( %o2) [ 10
, [y = 10
, x = 15 ]]
El hecho de que

Maxima

ca que las posibilidades de

pueda extenderse usando paquetes signi-

Maxima

son 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

Maxima

se perca-

ta de algo que se pretende hacer y que denitivamente no entiende,


imprimir un mensaje de advertencia.
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.

( %i1) sqrt(4,5);
sqrt: wrong number of arguments. - - an error. To debug
this try: debugmode(true);

3.9 Interrupcin de clculos


Probablemente habr veces en que el usuario desee detener
en medio de un clculo. Tal vez l se da cuenta que pidi a

Maxima
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

Clculos numricos

4.1 Aritmtica
Los clculos aritmticos se realizan con nmeros literales (enteros,
racionales, decimales ordinarios y decimales grandes). Excepto en el
caso de la exponenciacin, todas las operaciones aritmticas con nmeros dan lugar a resultados en forma de nmeros.
El usuario puede hacer aritmtica con

Maxima

tal y como lo hara

con una calculadora


Maxima

Aqu tenemos la suma de dos nmeros.

( %i1) 5.6+3.7;
( %o1) 9.3
Maxima

Con

indicamos el producto de dos nmeros.

( %i2) 5.6*3.7;
( %o2) 20.72
Maxima

Es posible digitar operaciones aritmticas haciendo uso de los parntesis.

( %i3) (2+3)^3-4*(6+7);
26

Sec. 4.2. Resultados exactos y aproximados

27

( %o3) 73

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

Maxima se agrupan de acuerdo con

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

las convenciones estndares de la matemtica. Como es usual,


por ejemplo, signica

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

Maxima,

en cambio, es posible obtener resultados exactos.


Maxima

Maxima da un resultado exacto para

2300 .

( %i1) 2^300;
( %o1) 20370359763344860862684456884093781610514683936
65936250636140449354381299763336706183397376
El usuario puede pedir a

Maxima que devuelva un resultado aproxi-

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

float

o la variable

numer

o una combinacin de ambos.

Maxima

Esto da un resultado numrico aproximado.

( %i2) 2^300,float;
( %o2) 2.0370359763344861 1090

28

Cap. 4. Clculos numricos

float(expr )

da un valor numrico aproximado para


ciertas

expr , float
expr , numer

float(expr )

da un valor numrico aproximado para


ciertas

float(expr ), numer

expr

equivale a

expr

da un valor numrico aproximado para cualquier

expr

que no sea una cons-

tante

Obteniendo aproximaciones numricas.

Maxima

Esta forma tambin da un resultado numrico aproximado.

( %i3) float(2^300);
( %o3) 2.0370359763344861 1090

Maxima

Para el clculo previo la constante

numer

no es til.

( %i4) 2^300,numer;
( %o4) 20370359763344860862684456884093781610514683936
65936250636140449354381299763336706183397376

Maxima

Maxima puede dar resultados en trminos de nmeros racionales.

( %i5) 1/3+2/7;
( %o5) 13
21

Maxima

En este caso, tanto con

float

como con

aproximado.

( %i6) 1/3+2/7,float;
( %o6) 0.61904761904762

numer,

se obtiene un resultado numrico

Sec. 4.2. Resultados exactos y aproximados

29

( %i7) 1/3+2/7,numer;
( %o7) 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.

( %i8) 26/78;
( %o8) 13

Maxima

Cuando el usuario digita un nmero con un punto decimal explcito, Maxima


produce un resultado numrico aproximado.

( %i9) 26.7/78;
( %o9) 0.34230769230769

Maxima

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

( %i10) 26.0/78;
( %o10) 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.

( %i11) 5.0+9/78-5/8;
( %o11) 4.490384615384615

30

Cap. 4. Clculos numricos

4.3 Algunas funciones matemticas


Maxima

incluye una gran coleccin de funciones matemticas. A con-

tinuacin 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 )

n!

( x)
(ex )

raz cuadrada
exponencial

logaritmo neperiano

(loge x)

funciones trigonomtricas (con argumentos en radianes)


funciones trigonomtricas inversas

factorial de

(producto de los enteros

1, 2, . . . , n)

n !!

13. . .n (n
(

abs(x )
round(x )
mod(n,m )

impar)

24. . .n

par)

valor absoluto
redondeo

mdulo

entre

m)

(resto de la divisin de

floor(x )

mayor entero menor o igual que

ceiling(x )

menor entero mayor o igual que

random(x )

ifactor(n )

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

nmero seudo aleatorio

r < x,
max(x,y , . . .),
min(x,y , . . .)

si

xN

mximo, mnimo de

factores primos de

x,y,. . .

Algunas de las funciones matemticas ms comunes.

Los argumentos de todas las funciones en

Maxima

se colocan

entre parntesis.

Los nombres de las funciones incorporadas en

zan con letra minscula.

Dos puntos importantes acerca de funciones en Maxima.

Maxima

empie-

Sec. 4.3. Algunas funciones matemticas

31

Maxima

Esto da

loge 15.7.

( %i1) log(15.7);
( %o1) 2.753660712354262

Maxima

Maxima no incluye una funcin para el logaritmo de base 10 u otras bases. Para
loge x
salvar esta dicultad el usuario puede hacer uso de la frmula logb x =
. As,
loge b
por ejemplo, lo siguiente devuelve un resultado numrico para

log2 1024.

( %i2) log(1024)/log(2),numer;
( %o2) 10.0

Maxima

Esto devuelve

64

como un nmero exacto.

( %i3) sqrt(64);
( %o3) 8

Maxima

Esto da un valor numrico aproximado para

6.

( %i4) sqrt(6),numer;
( %o4) 2.449489742783178

Maxima

La presencia explcita de un punto decimal seguido de un cero le indica a Maxima


que d un resultado numrico aproximado.

( %i5) sqrt(6.0);
( %o5) 2.449489742783178

Maxima

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

( %i6) sqrt(6);

32

Cap. 4. Clculos numricos

( %o6)

Maxima

Aqu tenemos un resultado entero exacto para

40 39 . . . 1.

( %i7) 40!;
( %o7) 815915283247897734345611269596115894272000000000
Maxima

Esto da un valor numrico aproximado del factorial.

( %i8) float(40!);
( %o8) 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 .

( %i9) %pi^2,numer;
( %o9) 9.869604401089358
Maxima

Esto devuelve el valor exacto para

( %i10) sin( %pi/2);


( %o10) 1

sen(/2).

Sec. 4.4. Clculos con precisin arbitraria

33

4.4 Clculos con precisin arbitraria


Cuando el usuario utiliza

float, numer

para obtener un resultado numrico,

o una combinacin de ambos

Maxima

devuelve el resultado

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


indicar a

Maxima

las cifras signicativas con las que se desea operar.

Esto permite obtener resultados numricos en

Maxima

con cualquier

grado de precisin.

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.

( %i1) float( %pi);


( %o1) 3.141592653589793

Maxima

Esto devuelve

con 50 dgitos.

( %i2) fpprec : 50$ bfloat( %pi);


( %o2) 3.141592653589793238462643383279502884197169399
3751b0

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.

34

Cap. 4. Clculos numricos

Maxima

La cantidad

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

resultado no es un entero, el usuario tiene que usar la precisin numrica suciente.

( %i3) fpprec:40$ bfloat(exp( %pi*sqrt(163)));


( %o3) 2.625374126407687439999999999992500725972b17
El usuario que desee, por ejemplo, visualizar
200 cifras signicativas, o

21000

con una precisin de

con el total de las cifras, utilizando las

sentencias aqu descritas encontrar que la salida se muestra truncada


en la parte central, en donde 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

( %i4) fpprec:200$ bfloat( %pi);


( %o4) 3.1415926535897932384626433832[443digits]885752724
8912279381830119491b0
ascii como el algoCambiar pantalla 2D del
sentencias de ( %i4) .

Para obtener una salida completa se selecciona

ritmo de salida matemtica


men

Maxima

de la opcin

y luego se ejecutan las

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.

Maxima

Despus de cambiar el algoritmo de salida matemtica se devuelve la salida


200 dgitos.

( %i5) fpprec : 200$ bfloat( %pi);


( %o5) 3.141592653589793238462643383279502884197169399
37510582097494459230781640628620899862803482534
21170679821480865132823066470938446095505822317
25359408128481117450284102701938521105559644622
948954930382b0

con

Sec. 4.5. Nmeros complejos

Figura 4.1:

Seleccionando

ascii

35

como el algoritmo de salida.

4.5 Nmeros complejos


Es posible ingresar nmeros complejos en
constante

%i,

igual a

variable llamada

i,

pero

1
. Note
no
1.

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

Maxima

que una

con slo incluir la

ordinaria signica una

el nmero complejo

x+iy

parte real
parte imaginaria
complejo conjugado
mdulo de

el argumento

en

Operaciones con nmeros complejos.

Maxima

Esto devuelve como resultado el nmero imaginario

( %i1) sqrt(-4);
( %o1) 2 %i
Maxima

Esto devuelve la divisin de dos nmeros complejos.

( %i2) (8+4* %i)/(-1+ %i),rectform;

2i.

|z|ei

36

Cap. 4. Clculos numricos

( %o2) 6 %i 2

Maxima

Aqu tenemos el valor exacto de un exponencial complejo.

( %i3) exp(11+5* %i),rectform;


( %o3) %e11 %i sin (5) + %e11 cos (5)

Maxima

Aqu tenemos el valor numrico de un exponencial complejo.

( %i4) exp(11+5* %i),numer;


( %o4) 16984.02989166794 57414.76791532402 %i

CAPTULO

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

%in

la expresin de la entrada

%on

la expresin de la salida

%th(i )

la expresin de la

%in

%on
i -sima salida ante-

rior

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) 5^3;
( %o1) 125
37

38

Cap. 5. Generacin de clculos

Maxima

Esto agrega 6 a la expresin de la ltima salida.

( %i2) %+6;
( %o2) 131
Maxima

Esto utiliza las dos expresiones de las salidas previas.

( %i3) 5+ %o1+ %;
( %o3) 261
Maxima

( %o3)

Aqu se eleva al cuadrado la expresin de la salida

( %o2)

Esto suma las expresiones de las salidas

( %o1)

( %i4) %o1+ %o3;


( %o4) 386
Maxima

( %i5) %o2^2;
( %o5) 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

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.

Sec. 5.2. Denicin de variables

39

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.

( %i1) x:6;
( %o1) 6
Maxima

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

( %i2) x^3-25
( %o2) 191
Maxima

Esto asigna un nuevo valor para x.

( %i3) x:11+5
( %o3) 16
Maxima

pi es inicializada con el valor numrico de

( %i4) fpprec:20$
( %i5) pi: %pi,bfloat;
( %o5) 3.1415926535897932385b0
Maxima

Aqu esta el valor de

sqrt(pi).

( %i6) sqrt(pi)
( %o6) 1.7724538509055160273b0

con 20 dgitos de exactitud.

40

Cap. 5. Generacin de clculos

x : valor
x : y : valor

kill(x )
kill(x ,y )
values

asigna un valor a la variable

asigna un valor a las variable

x
quita cualquier valor asignado a x
quita cualquier valor asignado a

muestra las variables a las que se les


ha asignado un valor

Manipulacin de variables.

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.

( %i7) y:9;
( %o7) 9

Maxima

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

( %i8) values;
( %o8) [x, , y]

Sec. 5.2. Denicin de variables

41

Maxima

Sentencia para quitar el valor asignado a la variable x.

( %i9) kill(x);
( %o9) done
Maxima

Sentencia para quitar el valor asignado a todas las variables.

( %i10) kill(values);
( %o10) 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.

( %i11) EstoEsUnaVariable:4/3;
4
( %o11)
3
( %i12) Esto_Es_Una_Variable:5^3;
( %o12) 125
( %i13) estoesunavariable:8;
( %o13) 8
( %i14) esto_es_una_variable:sqrt(7);

( %o14) 7
Maxima

Con

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

( %i15) values;
( %o15) [EstoEsUnaVariable,

Esto_Es_Una_Variable,

estoesunavariable, esto_es_una_variable]

42

Cap. 5. Generacin de clculos

Maxima

Es posible realizar operaciones diversas con estas variables.

( %i16) (Esto_Es_Una_Variable^2+esto_es_una_variable*
estoesunavariable)/EstoEsUnaVariable;

3(8 7 + 15625)
( %o16)
4

Maxima

Con

kill(all)

tambin se quita el valor asignado a todas las variables.

( %i17) kill(all);
( %o17) done

Maxima

Esta vez

values

no encuantra ninguan variable con valor asignado.

( %i18) values;
( %o18) [ ]

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
quiere verse las salidas en pantalla) o con signo de dolar (si no quiere
verse salida alguna).

Sec. 5.3. Secuencia de operaciones

expr1 ; expr2 ; . . . ; exprn ;

43

hace varias operaciones y da el resultado de todas ellas

expr1 $ expr2 $ . . . $
exprn $

hace varias operaciones y no muestra

expr1 $ expr2 $ . . . $
exprn ;

hace varias operaciones y da el resul-

ningn resultado

tado 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.

( %i1) x:3; y:4; z:x+y;


( %o1) 3
( %o2) 4
( %o3) 7
Maxima

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

( %i4) x:3$ y:4$ z:x+y$


Maxima

Esto realiza tres operaciones en una misma lnea y muestra el resultado de la


ltima operacin.

( %i8) x:3$ y:4$ z:x+y;


( %o10) 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


de hacer que

Maxima

calcule las operaciones especicadas, pero no

muestre la salida.

expr $

realiza una operacin, pero no muestra


la salida

Inhibiendo la salida.

44

Cap. 5. Generacin de clculos

Maxima

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


muestre la salida.

( %i11) x:47+5$
Maxima

Usando

se puede visualizar la salida anterior.

( %i12) %
( %o12) 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 hubiesen
en la expresin.
Maxima

Esto asigna valores a las variables a y b.

( %i1) a:45$ b:56$

'a
'f (x )

a
evita la evaluacin de la funcin f, pero
evita la evaluacin del smbolo

no de sus argumentos

'(expr )

evita la evaluacin de todos los smbolos y llamadas a funciones que hayan


en la expresin

Evitando la evaluacin.

expr

Sec. 5.4. Impresin de expresiones sin evaluar

45

Maxima

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

( %i3) 'a
( %o3) a

Maxima

El operador ' aplicado a la funcin

integrate

evita la evaluacin de sta.

( %i4) 'integrate(x^3,x);
Z
( %o4) x3 dx

Maxima

Un uso interesante del operador '.

( %i5) 'integrate(x^3,x)=integrate(x^3,x);
Z
x4
( %o5) x3 dx =
4

Maxima

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

( %i6) 'integrate((2+3)*x^3,x);
Z
( %o6) 5 x3 dx

Maxima

El operador ' aplicado a una expresin.

( %i7) '(2*sqrt(a)+b*integrate(x^3,x));
Z

( %o7) b x3 dx + 2 a

46

Cap. 5. Generacin de clculos

Maxima

Otro uso interesante del operador '.

( %i8) '(2*sqrt(a)+b*integrate(x^3,x))=(2*sqrt(a)+
b*integrate(x^3,x));
Z

( %o8) b x3 dx + 2 a = 14x4 + 6 5

CAPTULO

Clculos algebraicos

6.1 Clculo simblico


Una de las caractersticas importantes de

Maxima

es que puede hacer

clculos simblicos y numricos. Esto signica que puede manejar


frmulas algebraicas as como nmeros.

Maxima

He aqu un tpico clculo numrico.

( %i1) 4+36-1;
( %o1) 39

Maxima

Este es un clculo simblico.

( %i2) 7*x-3*x+6;
( %o2) 4 x + 6

Clculo numrico

4 + 36 1 39

Clculo simblico

7x 3x + 6 4x + 6

Clculo simblico y numrico.


47

48

Cap. 6. Clculos algebraicos

Maxima

El usuario puede digitar cualquier expresin algebraica en Maxima.

( %i3) x^3+2*x-1;
( %o3) x3 + 2 x 1

Maxima

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

( %i4) x^2+x-4*x^2;
( %o4) 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) x*y+2*x^2*y+y^2*x^2-2*y*x;
( %o5) x2 y 2 + 2 x2 y x y

Maxima

He aqu otra expresin algebraica.

( %i6) (x+2*y+1)*(x-2)^2;
( %o6) (x 2)2 (2 y + x + 1)

Maxima

La funcin

expand

ampla productos y potencias.

( %i7) expand( %);


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

Sec. 6.1. Clculo simblico

49

Maxima

factor

hace lo inverso de

expand.

( %i8) factor( %);


( %o8) (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

interpretar como

x4 y .

x^(4*y). Si no se colocan los parntesis, se

Maxima

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

( %i9) sqrt(2)/9801*(4*n)!*(1103+26390*n)/(n!^4+1);
( %o9)

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) sqrt(x+1)^4;
( %o10) (x + 1)2

Maxima

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

( %i11) log(cos(x)+1);
( %o11) log (cos x + 1)

50

Cap. 6. Clculos algebraicos

6.2 Valores para smbolos


Cuando

Maxima

tales casos,

x + x en 2 x,
x en forma puramente simblica o formal. En

transforma una expresin por ejemplo

est tratando la variable

x es un smbolo que puede representar cualquier expresin.

A menudo, sin embargo, se necesita sustituir un smbolo como

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


aunque puede que sea una expresin.
Para sustituir el smbolo

x,

que aparece en la expresin

1 + 2x,
ev o

con un valor determinado; el usuario puede utilizar la funcin


una sintaxis alternativa de la misma.

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

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

reemplaza

exp

por

valor

en la expresin

realiza varios reemplazos

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.

( %i1) 1+2*x,x=3;
( %o1) 7
Maxima

Tambin es posible sustituir


es sustituida por

por cualquier expresin. Aqu cada ocurrencia de

2 y.

( %i2) 1+x+x^2,x=2-y;
( %o2) y + (2 y)2 + 3
Maxima

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

( %i3) x=y+3;

Sec. 6.2. Valores para smbolos

51

( %o3) x = y + 3

Maxima

Esto aplica la regla de sustitucin ltima a la expresin

x2 9.

( %i4) x^2-9, %;
( %o4) (y + 3)2 9

Maxima

Es posible aplicar varias reglas de sustitucin juntas.

( %i5) (x+y)*(x-y)^2,x=3,y=1-a;
( %o5) (4 a) (a + 2)2
ev o su sintaxis alternativa, permiten aplicar reglas de

La funcin

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

x por 3 siempre que aparezca x. Segn

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,

x : 3, x

cuando aparezca.

Maxima

Esto asigna el valor de

x.

( %i6) x:3;
( %o6) 3
Maxima

Ahora

ser sustituido automticamente por

( %i7) x^2-1;
( %o7) 8
Maxima

Esto asigna la expresin

( %i8) x:a+1;

1+a

x.

dondequiera que aparezca.

52

Cap. 6. Clculos algebraicos

( %o8) a + 1

Maxima

Ahora

es reemplazado por

a + 1.

( %i9) x^2-1;
( %o9) (a + 1)2 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

dene un valor para

que ser utili-

zado siempre

kill(x )

remueve cualquier valor denido para

Asignando valores a smbolos.

Maxima

El smbolo

todava tiene el valor que le asign arriba.

( %i10) x+5-2*x;
( %o10) 2 (a + 1) + a + 6

Maxima

Esto quita el valor que asign a

( %i11) kill(x)
( %o11) done

x.

Sec. 6.2. Valores para smbolos

53

Maxima

Ahora

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

puramente simblica.

( %i12) x+5-2*x;
( %o12) 5 x
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

x : 3,

ser

Debe recordarse que las deniciones explcitas por ejemplo

x:3

sustituida siempre por

3,

entonces

y no sirve ms como variable formal.

tienen un efecto global. Por otra parte, un reemplazo tal como

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.

( %i13) t:x^2+1;
( %o13) x2 + 1

Maxima

Esto asigna un valor al smbolo

( %i14) t,x=2;
( %o14) 5

x.

54

Cap. 6. Clculos algebraicos

Maxima

Esto encuentra el valor de

para un valor diferente de

x.

( %i15) t,x=5*a;
( %o15) 25a2 + 1

Maxima

Esto encuentra el valor de

cuando

es sustituido por

%pi,

y luego evala el

resultado numricamente.

( %i16) t,x= %pi,numer;


( %o16) 10.86960440108936

Maxima

No obstante, el smbolo

preserva la denicin original.

( %i17) t;
( %o17) x2 + 1

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.

( %i1) expand((x+1)^2);
( %o1) x2 + 2 x + 1

Sec. 6.3. Transformacin de expresiones algebraicas

expand(expr )

55

desarrolla productos y potencias, escribiendo el resultado como suma de


trminos

expr ,expand
factor(expr )

equivale a
escribe

expand(expr )

expr

como un producto de fac-

tores mnimos

expr ,factor

equivale a

factor(expr )

Dos funciones comunes para transformar expresiones algebraicas.

Maxima

factor

recupera la forma original.

( %i2) factor( %);


( %o2) (x + 1)2

Maxima

Es fcil generar expresiones complicadas con

expand.

( %i3) (x+3*y+1)^4,expand;
( %o3) 81 y 4 + 108 x y 3 + 108 y 3 + 54 x2 y 2 + 108 x y 2 + 54 y 2 +
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.

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

Maxima

Hay algunos casos donde

factor

puede dar expresiones ms complicadas.

( %i5) x^8-1,factor;


( %o5) (x 1) (x + 1) x2 + 1 x4 + 1

56

Cap. 6. Clculos algebraicos

Maxima

En este caso,

expand

da la forma ms simple.

( %i6) %,expand;
( %o6) 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 )

convierte

expr

al formato cannico ra-

cional

ratsimp(expr )

simplica la expresin

expr

y todas

sus subexpresiones, incluyendo los argumentos de funciones no racionales

expr ,ratsimp
fullratsimp(expr )

equivale a

ratsimp(expr )
ratsimp

aplica repetidamente

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 )

Simplificacin 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

( %i1) integrate(1/(x^4-1),x);

Sec. 6.4. Simplicacin de expresiones algebraicas

( %o1) log(x+1)

arctan x
2

57

log(x1)
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.

( %i2) diff( %,x);


1
( %o2) 2 (x21+1) 4 (x+1)
+

1
4 (x1)

Maxima

ratsimp

permite volver a la forma original de la expresin.

( %i3) ratsimp( %);


( %o3) x411

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.

( %i4) sin(x/(x^2+x))=exp((log(x)+1)^2-log(x)^2);


2
2
( %o4) sen x2x+x = %e(log x+1) log x

Maxima

ratsimp

simplica los argumentos de tales funciones.

( %i5) %,ratsimp;


1
= %e x2
( %o5) sen x+1

Ante expresiones no racionales, una llamada a

ratsimp

puede no

ser suciente para conseguir un resultado simplicado. En ocasiones

58

Cap. 6. Clculos algebraicos

sern necesarias ms de una llamada a


precisamente

fullratsimp.

ratsimp,

que es lo que hace

Maxima

Esto dene la variable

expresion.

( %i6) expresion:(x^(a/2)+1)^2*(x^(a/2)-1)^2/(x^ a-1);


2
2
(xa/2 1) (xa/2 +1)
( %o6)
a
x 1

Maxima

En general,

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

cacin, divisin y exponenciacin de exponente entero.

( %i7) rat(expresion);
4
2
(xa/2 ) 2 (xa/2 ) +1
( %o7)
xa 1

Maxima

Con

ratsimp

se consigue una mejor simplicacin.

( %i8) ratsimp(expresion);
( %o8)

x2 a 2 xa +1
xa 1

Maxima

Con

fullratsimp

se consigue simplicar la expresin al mximo.

( %i9) fullratsimp(expresion);
( %o9) xa 1

6.5 Expresiones puestas en diferentes formas


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

Maxima

proporciona una variedad de fun-

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

expand, factor

ratsimp.

Sin embargo,

Sec. 6.5. Expresiones puestas en diferentes formas

59

cuando se tiene expresiones racionales que contienen cocientes, puede


ser necesario utilizar otras funciones.

expandwrt(expr,var1 , . . . ,
varn )

expande la expresin
to a las variables

expr

con respec-

var1 , . . . , varn

y por

defecto no expande los denominadores

expand(expr )
factor(expr )
partfrac(expr,var )

expr
expr
expresin expr

expande la expresin

factoriza la expresin
expande la

en fraccio-

nes parciales respecto de la variable


principal

var

Comandos para transformar expresiones algebraicas.

Maxima

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

( %i1) e:(x-1)^2*(2+x)/((1+x)*(x-3)^2);
( %o1)

(x1)2 (x+2)
(x3)2 (x+1)

Maxima

expandwrt

expande el numerador de la expresin, pero deja el denominador en

forma factorizada.

( %i2) expandwrt(e,x);
( %o2)

x3
(x3)2 (x+1)

3x
(x3)2 (x+1)

2
(x3)2 (x+1)

Maxima

expand

expande todo, incluyendo el denominador.

( %i3) expand(e);
( %o3)

x3
x3 5 x2 +3 x+9

3x
x3 5 x2 +3 x+9

2
x3 5 x2 +3 x+9

60

Cap. 6. Clculos algebraicos

Maxima

partfrac

separa la expresin en trminos con denominadores simples.

( %i4) partfrac( %,x);


19
1
+ 4 (x3)
+
( %o4) 4 (x+1)

5
(x3)2

+1

Maxima

factor

factoriza todo, en este caso reproduce la forma original.

( %i5) factor( %);


( %o5)

(x1)2 (x+2)
(x3)2 (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.

( %i6) v:expand((3+2*x)^2*(x+2*y)^2);
( %o6) 16 x2 y 2 +48 x y 2 +36 y 2 +16 x3 y+48 x2 y+36 x y+ 4 x4 +
12 x3 + 9 x2

Maxima

Esto agrupa los trminos de

afectados por la misma potencia de

x.

( %i7) collectterms(v,x);


( %o7) x 48 y 2 + 36 y + x2 16 y 2 + 48 y + 9 + 6 y 2 +
x3 (16 y + 12) + 4 x4

Maxima

Esto agrupa juntas las potencias de

y.

( %i8) collectterms(v,y);

Sec. 6.5. Expresiones puestas en diferentes formas

61



( %o8) 16 x2 + 48 x + 36 y 2 + 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 conversio1

nes . 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 la
expresin

expr ,trigexpand
trigsimp(expr )

expr

trigexpand(expr )
utiliza
las
identidades
sen(x)2 +
2
2
cos(x) = 1 y cosh(x) senh(x)2 = 1
equivale a

para simplicar expresiones que contienen

trigreduce(expr,var )

tan, sec,

etc.

combina productos y potencias de senos y cosenos trigonomtricos e hiperblicos de

var,

transformndolos en

otros que son mltiplos de

trigreduce(expr )

var

si no se introduce el argumento

var,

entonces se utilizan todas las variables


de

expr ,trigreduce

expr

equivale a

trigreduce(expr )

Algunas funciones ms para transformar expresiones.

1 Para

ms detalle al respecto consulte sobre las funciones

en la ayuda de Maxima.

scsimp

defrule

62

Cap. 6. Clculos algebraicos

trigrat(expr )

devuelve una forma cannica simplicada cuasi-lineal de una expresin trigonomtrica

exponentialize(expr )

convierte las funciones trigonomtricas e hiperblicas de

expr

a exponen-

ciales

expr ,exponentialize
demoivre(expr )

equivale a

exponentialize(expr )

convierte exponenciales complejos en


expresiones equivalentes pero en trminos de las funciones trigonomtricas

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

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

equivale a

expr,

con

polarform(expr )

simplica la expresin

expr, que puede

contener logaritmos, exponenciales y


radicales, convirtindola a una forma
cannica

expr ,radcan
prod ,radexpand:all

equivale a
las races
producto

radcan(expr )

n -simas de los factores del


prod, que sean potencias de

n, se extraen
ej.,

logcontract(expr )

del smbolo radical (p.

4x2 2x)

analiza

la

do
ma
en

expr ,logcontract

expr

expresin

cursivamente,

re-

transforman-

subexpresiones

de

la

for-

a1*log(b1)+a2*log(b2)+c

expresiones

de

la

forma

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

Algunas funciones ms para transformar expresiones.

Sec. 6.5. Expresiones puestas en diferentes formas

63

Maxima

Esto expande la expresin trigonomtrica, escribindola de modo que todas las


funciones tengan argumento x.

( %i9) tan(x)*cos(3*x),trigexpand;

( %o9) cos3 x 3 cos x sin2 x tan x

Maxima

Esto reduce la expresin usando ngulos mltiples.

( %i10) tan(x)*cos(2*x),trigreduce;
( %o10) tan x cos (3 x)

Maxima

Esto expande el seno asumiendo que

son reales.

( %i11) sin(x+ %i*y),rectform;


( %o11) %i cos x sinh y + sin x cosh y

Maxima

Con

logcontract

se contrae una expresin logartimica.

( %i12) 2*(a*log(x)+2*a*log(y)),logcontract;

( %o12) a log x2 y 4

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.

( %i13) sqrt(x^5*y/w^3);

64

Cap. 6. Clculos algebraicos

( %o13)

x5 y
w3

Maxima

radcan

hace la expansin.

( %i14) %,radcan;
( %o14)

x2

w2

Maxima

En este caso Maxima aplica una equivalencia matemtica.

( %i15) sqrt(x^6*y^2/w^10);
( %o15)

|x|3 |y|
|w|5

Maxima

Utilizando la variable opcional

radexpand con el valor asignado all, Maxima

pasa

por alto la equivalencia anterior.

( %i16) sqrt(x^6*y^2/w^10),radexpand:all;
( %o16)

x3 y
w5

6.6 Simplicacin con asunciones


assume(pred1 , . . . , predn )

aade los predicados

pred1 , . . . , predn

al contexto actual

f orget(pred1 , . . . , predn )

borra los predicados establecidos por

f acts()

devuelve una lista con los predicados

assume

asociados al contexto actual

Asuncin de predicados.

Sec. 6.6. Simplicacin con asunciones

65

Maxima

assume

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

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

Maxima

Maxima realiza simplicaciones asumiendo los predicados ingresados.

( %i2) [sqrt(x^2),sqrt(y)];
 
( %o2) x, y

Maxima

Otra simplicacin asumiendo los predicados ingresados.

( %i3) sqrt(x^2*y^2);
( %o3) x y
Maxima

facts

muestra los predicados asociadas al contexto actual.

( %i4) facts();
( %o4) [x > 0, y < 0]

Maxima

forget

borra los predicados previamente establecidos.

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

Maxima

Despus de borrar los predicados con


lista vaca.

( %i6) facts();
( %o6) [ ]

forget,

la llamada

facts()

devuelve una

66

Cap. 6. Clculos algebraicos

6.7 Seleccin de partes de expresiones algebraicas


coeff(expr,x,n )

devuelve el coeciente de
(el argumento

xn

en

expr

puede omitirse si es

igual a la unidad)

hipow(expr,x )

devuelve el mayor exponente explcito


de

en

hipow
part(expr,n1 , . . . , nk )

expr

(si

no aparece en

expr,

devuelve 0)

devuelve la parte de

expr

que se espe-

n1 , . . . , nk (priparte n1 de expr,

cica por los ndices


mero se obtiene la
despus la parte

n2

del resultado an-

terior, y as sucesivamente)

Comandos para seleccionar partes de polinomios.

Maxima

He aqu una expresin algebraica.

( %i1) e:expand((1+3*x+4*y^2)^2);
( %o1) 16 y 4 + 24 x y 2 + 8 y 2 + 9 x2 + 6 x + 1

Maxima

Esto da el coeciente de

en

e.

( %i2) coeff(e,x);
( %o2) 24 y 2 + 6

Maxima

hipow(expr ,y)

da la mayor potencia de

( %i3) hipow(e,y);
( %o3) 4
Maxima

Esto da el cuarto trmino en

( %i4) part(e,4);

e.

que aparece en expr.

Sec. 6.7. Seleccin de partes de expresiones algebraicas

67

( %o4) 9 x2

num(expr )

expr (si expr


expr )
denominador de expr (si

devuelve el numerador de

no es una fraccin, devuelve

denom(expr )

devuelve el

expr

no es una fraccin, devuelve

Comandos para seleccionar partes de expresiones racionales.

Maxima

He aqu una expresin racional.

( %i5) r:(1+x)/(2*(2-y));
x+1
( %o5) 2 (2y)

Maxima

denom

selecciona el denominador.

( %i6) denom(r);
( %o6) 2 (2 y)

Maxima

denom

da 1 para las expresiones que no son cocientes.

( %i7) denom(1/x+1/y);
( %o7) 1

1)

CAPTULO

Matemticas simblicas

La capacidad de

Maxima

de tratar con expresiones simblicas, as co-

mo numricas, le permite usarlo para muchas reas de la matemtica,


siendo la ms comn el clculo.

7.1 Lmites
limit(f,x,x0 )

el lmite

limit(f,x,x0 ,plus)

el lmite

limit(f,x,x0 ,minus)

el lmite

lm f

xx0

lm f

xx+
0

lm f

xx
0

Lmites.

Maxima

He aqu la expresin

sen x
.
x

( %i1) f:sin(x)/x;
( %o1)

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;
68

Sec. 7.1. Lmites

( %o2)

69

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

Maxima

Si se evala

sen(x)
para un
x

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

( %i3) f,x=0.01;
( %o3) 0.99998333341667

Maxima

Esto encuentra el lmite de

sen(x)
cuando x tiende a 0.
x

( %i4) limit(f,x,0);
( %o4) 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) limit(1-minf);
( %o5)

70

Cap. 7. Matemticas simblicas

Maxima

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


cero.

( %i6) limit(x+zeroa);
( %o6) x

7.2 Diferenciacin
diff(f,x )

res-

n -esima derivada de f

res-

con

devuelve la primera derivada de


pecto de la variable

diff(f,x,n )

devuelve la
pecto de

diff(f,x1 , n1 , . . . , xm , nm )

devuelve la derivada parcial de

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

respecto de

diff(f )

devuelve el diferencial total de

Diferenciacin con Maxima.

Maxima

He aqu la derivada

xn

con respecto a

x.

( %i1) diff(x^ n,x);


( %o1) n xn1
Maxima

Maxima conoce las derivadas de todas las funciones matemticas estndar.

( %i2) diff(atan(x),x);
( %o2) x21+1

Maxima

La tercera derivada con respecto a

( %i3) diff(x^ n,x,3);

x.

Sec. 7.2. Diferenciacin

71

( %o3) (n 2) (n 1) n xn3

Si no se indica la variable,

Maxima

asume que se quiere calcular

la diferencial total. En notacin matemtica,


mientras

diff(f )

es como

diff(f,x ) es como

d
dx f ,

df .

Maxima

Esto da la diferencial total

d(xn ). delx

deln

son los diferenciales

dx

dn,

respectivamente.

( %i4) diff(x^ n);


( %o4) n xn1 del (x) + xn log x del (n)

As como se trata variables simblicamente, tambin es posible


tratar funciones simblicamente en

Maxima. As, por ejemplo, puede

encontrarse frmulas para las derivadas de


forma explcita para la funcin

ma

f.

f(x),

sin especicar una

Para esto hay que indicar a

Maxi-

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

depends.
Maxima

Esto declara la dependencia

f (x2 ).

( %i5) depends(f,x^2);


( %o5) f x2

Maxima

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

( %i6) diff(2*x*f,x);

( %o6) 4 d dx2 f x2 + 2 f

72

Cap. 7. Matemticas simblicas

depends(, )
depends(1 , 1 , . . . , n ,
n )
depends([1 , . . . , n ] , )

declara la dependencia funcional


declara

la

dependencia

()

funcional

1 (1 ) , . . . , n (n )
declara

la

dependencia

funcional

1 () , . . . , n ()

depends(, [1 . . . , n ])

declara

la

dependencia

funcional

dependencia

funcional

(1 , . . . , n )

depends([1 , . . . , n ] ,
[1 , . . . , m ])
dependencies

declara

la

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

remove(, dependency)

elimina la dependencia funcional asociada con

remove([1 , . . . , n ] ,
dependency)
remove(all, dependency)

elimina la dependencia funcional asociada con

1 , . . . , n

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).

d
dx

(uv ),

( %i7) depends([u,v],x);
( %o7) [u (x) , v (x)]

Maxima

Aqu se obtiene una frmula para

( %i8) diff(u^ v,x),expand;



( %o8) uv log u ddx v + uv1

d
dx

donde

u = u(x)

v = v(x).


u v

Maxima

Esto permite apreciar todas las dependencias declaradas hasta el momento.

( %i9) dependencies;

Sec. 7.3. Integracin

73




( %o9) f x2 , u (x) , v (x)

Maxima

Con esta sentencia se borran todas las dependencias.

( %i10) remove(all,dependency);
( %o10) 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

la integral denida de una ecuacin,


equivale a

changevar('expr,(x, y),
y,x )

Rb

f dx =

gdx

hace el cambio de variable dado por

(x, y) = 0
depende de

y)

en la expresin

expr

que

(la nueva variable ser

Integracin.

integration_constant

variable del sistema cuyo valor por defecto es

integration_
constant_counter

%c

variable del sistema cuyo valor por defecto es 0

Constantes y contadores de constantes para integrar ecuaciones.

Maxima

Z
Para calcular la integral

xn dx,

Maxima, pregunta si

este caso se le ha indicado la eleccin de la opcin

( %i1) integrate(x^ n,x);

Is

n+1

zero or nonzero? n;

n+1 = 0

n + 1 = 0,

n + 1 6= 0.

es decir,

En

n 6= 1.

74

Cap. 7. Matemticas simblicas

( %o1)

xn+1
n+1

Maxima

Z
He aqu la integral

xn dx,

cuando

n = 1.

( %i2) integrate(x^ n,x);

Is

n+1

zero or nonzero? z;

( %o2) log(x)

Maxima

Este es un ejemplo ligeramente ms complicado.

( %i3) integrate(1/(x^4-a^4),x);
arctan( x )
( %o3) log(x+a)
+ log(xa)
2 a3 a
4 a3
4 a3

Maxima

Recurdese que

logcontract

contrae los logaritmos.

( %i4) integrate(1/(x^4-a^4),x),logcontract;
x+a
log( xa
)+2 arctan( xa )
( %o4)
4 a3

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.

( %i5) integrate(log(1-x^2),x),logcontract;




x+1
( %o5) x log 1 x2 2 + log x1

Sec. 7.3. Integracin

75

Maxima

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

( %i6) integrate(log(1-x^2)/x,x);

2
)
( %o6) log(x) log 1 x2 + li 2 (1x
2

Maxima

Esta integral involucra la funcin

erf2 .

( %i7) integrate(exp(1-x^2),x);
( %o7)

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.

( %i8) integrate(x^ x,x);


Z
( %o8) xx dx

Maxima

Z
He aqu la integral denida

sen2 (x) dx.

( %i9) integrate(sin(x)^2,x,a,b);
( %o9)

sin(2 a)2 a
4

sin(2 b)2 b
4

Maxima

He aqu otra integral denida.

( %i10) integrate(exp(-x^2),x,0,inf);
( %o10)

76

Cap. 7. Matemticas simblicas

Maxima

Maxima no puede darle una frmula para esta integral denida.

( %i11) integrate(x^ x,x,0,1);


Z 1
( %o11)
xx dx
0

Maxima

Esto evala la integral mltiple

(x2 + y 2 ) dy dx.

( %i12) integrate(integrate(x^2+y^2,y,0,x),x,0,1);
( %o12) 13

Cuando una constante de integracin se crea durante la integracin denida de una ecuacin, el nombre de la constante se construye
concatenando las variables (del sistema)

integration_constant_counter.

integration_constant

Maxima

Esto calcula la integral denida de una ecuacin.

( %i13) integrate(x^2=sin(x),x);
( %o13)

x3
3

= %c1 cos(x)

Maxima

integration_constant

se le puede asignar un smbolo cualquiera.

( %i14) integration_constant: 'K;


( %o14) K

Maxima

Esto calcula la integral denida de una ecuacin a la que se le ha reiniciado la


constante de integracin por defecto.

( %i15) integrate(x^2=sin(x),x);

Sec. 7.3. Integracin

( %o15)

x3
3

77

= K2 cos x

Maxima

Es posible reiniciar el contador de

integration_constant_counter.

( %i16) reset(integration_constant_counter);
( %o16) [integration _constant _counter ]

Maxima

Aqu se aprecia que el contador ha sido reiniciado.

( %i17) integrate (x^2=sin(x),x);


( %o17)

x3
3

= K1 cos x

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.

( %i18) 'integrate( %e^ sqrt(y),y);


Z

( %o18)
%e y dy

Maxima

Esto realiza un cambio de variable en una integral indenida.

( %i19) assume(z>0)$ changevar( %o34,y-z^2,z,y);


Z

( %o19)
%e y dy

78

Cap. 7. Matemticas simblicas

Maxima

Esto realiza un cambio de variable en una integral denida.

( %i20) 'changevar(integrate( %e^ sqrt(y),y,0,4),


y-z^2,z,y);
Z 0
( %o20) 2
z %ez dz
2

7.4 Sumas y Productos


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

la suma

Pimax
imin

representa la suma de
mento

en

para cada ele-

Sumas.

Maxima

Esto construye la suma

7
P

xi
.
i

i=1

( %i1) sum(x^ i/i,i,1,7);


( %o1)

x7
7

x6
6

x5
5

x4
4

x3
3

x2
2

+x

Maxima

Esto devuelve la suma

n
X

i2

sin realizar ningn cambio.

i=1

( %i2) sum(i^2,i,1,n);
n
X
( %o2)
i2
i=1

Maxima

Agregando

simpsum

la suma es calculada simblicamente como una funcin de

( %i3) sum(i^2,i,1,n),simpsum;

n.

Sec. 7.4. Sumas y Productos

( %o3)

79

2 n3 +3 n2 +n
6

Maxima

Combinando

simpsum

con

factor

se obtiene un resultado factorizado.

( %i4) sum(i^2,i,1,n),simpsum,factor;
( %o4)

n (n+1) (2 n+1)
6

Maxima

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

( %i5) sum(1/i^4,i,1,inf),simpsum;
( %o5)

4
90

Maxima

Esta es la suma mltiple

3 X
i
X

xi y j .

i=1 j=1

( %i6) sum(sum(x^ i*y^ j,j,1,i),i,1,3);


( %o6) x3 y 3 + x3 y 2 + x2 y 2 + x3 y + x2 y + x y

Maxima

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

( %i7) lsum(x^ i,i,[1,2,7]);


( %o7) x7 + x2 + x

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

el producto

Qimax
imin

Productos.

Maxima

Los productos se obtienen en forma similar a las sumas.

( %i8) prod(x+i,i,1,4);

f (i)

80

Cap. 7. Matemticas simblicas

( %o8) (x + 1) (x + 2) (x + 3) (x + 4)

Maxima

Agregando
de

simpproduct

la suma es calculada simblicamente como una funcin

n.

( %i9) product(k,k,1,n),simpproduct;
( %o9) n!

Maxima

Este es un producto que no puede ser resuelto.

( %i10) product(integrate(x^k,x,0,1),k,1,n);
( %o10)

n
Q

1
k+1

k=1

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.

( %i11) sum(f(j+2)*x^ j,j,-2,n);


( %o11)

n
P

f (j + 2) xj

j=2

Maxima

Esto realiza el cambio

j =i2

en la suma anterior.

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

Sec. 7.5. Operadores relacionales y lgicos

( %o12)

n+2
P

81

f (i) xi2

i=0

Maxima

Aqu se hace el cambio

i=k2

en un producto innito.

( %i13) product(f(i+2)*x^(i+2),i,-2,inf);
( %o13)

f (i + 2) xi+2

i=2

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


( %o14)

f (k) xk

k=0

7.5 Operadores relacionales y lgicos


=

igual (por sintaxis)

desigual (por sintaxis)

>

mayor que

>=
<
<=
equal
notequal

mayor o igual que


menor que
menor o igual que
igual (por valor)
desigual (por valor)

Operadores relacionales.

compare(x,y )

compara

devuelve

, <=, >, >=, =, #, notcomparable


unknown, segn sea el caso

Funcin para obtener operadores relacionales.

<

82

Cap. 7. Matemticas simblicas

Maxima

Esto prueba si 10 es menor que 7.

( %i1) 10<7,pred;
( %o1) f alse

Maxima

Esto prueba si 10 es diferente que 7.

( %i2) 10#7,pred;
( %o2) true
Maxima

Maxima puede determinar que esto es verdadero.

( %i3) %pi^ %e< %e^ %pi,pred;


( %o3) true
Maxima

Maxima no sabe si esto es verdadero o falso.

( %i4) x>y,pred;
( %o4) x > y

Maxima

He aqu dos comparaciones.

( %i5) compare(1,2);
( %o5) <
( %i6) compare(1/x,0);
( %o6) #

Maxima

Una diferencia notable entre

equal.

( %i7) (x+1)^2=x^2+2*x+1,pred;
( %o7) f alse

Sec. 7.5. Operadores relacionales y lgicos

83

( %i8) equal((x+1)^2,x^2+2*x+1),pred;
( %o8) 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.

( %i9) 2<3<4,pred;
( %o9) incorrect syntax:

Found logical expression where alge-

braic expression expected


incorrect syntax: Premature termination of input at ;.

not
and
or
if cond then expr1 else
expr2

negacin
conjuncin
disyuncin
devuelve

expr2

si

expr1

cond

es

cond

si

false

es

true,

Operadores lgicos.

Maxima

Una forma de ingresar expresiones del estilo


operador lgico

a < b < c,

en Maxima, es usando el

and.

( %i10) 2<3 and 3<4;


( %o10) true

Maxima

Mientras no se hayan hecho asignaciones adecuadas a


esto es verdadero o falso.

( %i11) p and q;

q,

Maxima no sabe si

84

Cap. 7. Matemticas simblicas

( %o11) p q

7.6 Ecuaciones
Maxima, una ecuacin consiste de dos expresiones vinculadas con

En

el smbolo

=. La expresin a = b representa una ecuacin sin evaluar,

la cual puede vericarse o no.

expr1 = expr2

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

representa una ecuacin


devuelve

expr1

devuelve

expr2

Ecuaciones en Maxima.

Maxima

Una ecuacin por s misma no es evaluada.

( %i1) x^4-5*x^2-3=x;
( %o1) x = x4 5 x2 3
x:y con x=y (ver
x:y es una declaracin imperativa que ori-

Es muy importante que el usuario no confunda


seccin 5.2). Mientras que
gina una asignacin,

x=y

no causa ninguna accin explcita.

Maxima

Con

lhs3

se selecciona el miembro izquierdo de la ecuacin.

( %i2) lhs(x=x^4-5*x^2-3);
( %o2) x
Maxima

Con

rhs

se selecciona el miembro derecho de la ecuacin.

( %i3) rhs(x=x^4-5*x^2-3);
( %o3) x4 5 x2 3

Sec. 7.7. Solucin de Ecuaciones Algebraicas

85

7.7 Solucin de Ecuaciones Algebraicas


solve(ecu,x )

resuelve la ecuacin algebraica


incgnita

ecu

de

Solucin de ecuaciones.

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.

( %i1) solve(x^4-5*x^2-3=0,x);


37+5
375 %i

( %o1) x = 37+5
,
x
=
,
x
=

,
2
2
2


375 %i

x=
2

Maxima

Tambin puede solucionar algunas ecuaciones que involucran potencias ms altas.

( %i2) solve(x^6=1,x);
h

( %o2) x = 3 %i+1
,x =
2

3 %i1
,x
2

= 1, x =

3 %i+1
,
2

i
x = 3 %i1
,
x
=
1
2

Maxima

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

( %i3) solve(2-4*x+x^5=0,x);

86

Cap. 7. Matemticas simblicas



( %o3) 0 = x5 4 x + 2

Tambin puede usarse

Maxima

para solucionar sistemas de ecua-

ciones simultneas.

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

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

Solucin de sistemas ecuaciones.

Maxima

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

( %i4) solve([a*x+y=0,2*x+(1-a)*y=1],[x,y]);
ii
hh
1
a
( %o4) x = a2 a+2
, y = a2 a+2

Maxima

He aqu algunas ecuaciones simultneas ms complicadas.

( %i5) solve([x^2+x*y+y^2=4,x+x*y+y=2],[x,y]);
h
h
i

%i+7
( %o5) [x = 2, y = 0] , x = 11 2%i+3 , y = 11
,
11 %i+1
h
i
i

%i7
x = 11 2%i3 , y = 11
, [x = 0, y = 2]
11 %i1

Maxima

Con

rectform

se obtiene una mejor presentacin.

( %i6) %,rectform;
h
h
i

( %o6) [x = 2, y = 0] , x = 112 %i 32 , y = 112 %i 32 ,


h
i
i

x = 112 %i 32 , y = 112 %i 32 , [x = 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

Sec. 7.8. Solucin de Ecuaciones Trascendentales

87

de una funcin denida en forma implcita.


Maxima

Esto asigna la ecuacin

y 3 3 x y + x3 = 0

a la variable

e.

( %i7) e:x^3-3*x*y+y^3=0;
( %o7) y 3 3 x y + x3 = 0

Maxima

Aqu se dene la dependencia

y(x).

( %i8) depends(y,x);
( %o8) [y (x)]

Maxima

Ahora se deriva

( %i9) diff(e,x);

( %o9) 3 y 2 ddx y 3 x

d
dx


y 3 y + 3 x2 = 0

Maxima

Finalmente se resuelve la ecuacin para la variable

d
dx

y.

( %i10) solve( %,diff(y,x));


h
i
2
( %o10) ddx y = yx
2
y x

7.8 Solucin de Ecuaciones Trascendentales


El paquete

to_poly_solver4

escrito por Barton Willis de la Univer-

sidad de Nebraska amplia la capacidad de

Maxima

para solucionar

algunas ecuaciones que implican funciones trascendentales.

4 El

paquete

to_poly_solver

es experimental, siendo posible que las especi-

caciones de sus funciones puedan cambiar en el futuro, o que algunas de estas


funciones puedan ser incorporadas a otras partes de Maxima.

88

Cap. 7. Matemticas simblicas

load(to_poly_solver)$
to_poly_solve(e, l,
[options])

inicializa el paquete

to_poly_solver

intenta resolver las ecuaciones


cgnitas

de in-

Comando para solucionar ecuaciones trascendentales.

simpfuncs

permite insertar funciones para transformar las soluciones (por ejemplo,

expand, dfloat, nicedummies,

etc.

Incluso pueden ser funciones annimas, denida por el usuario)

parameters

intenta encontrar una solucin vlida


para parmetros especicados por el
usuario

use_grobner

se aplica bases de grobner a las ecuaciones antes de intentar resolverlas

Algunas opciones de to_poly_solver.


Maxima

Inicializacin del paquete

to_poly_solver.

( %i1) load(to_poly_solver)$
Maxima

Aqu se soluciona una ecuacin algebraica.

( %i2) to_poly_solve(2*x^2-3*x+5=0,x);



( %o2) %union [x = 314i3 ], [x = 314i+3 ]

Maxima

Esto muestra la solucin de un sistema de ecuaciones lineales.

( %i3) to_poly_solve(
[2*x-y=5,x+3*y=1],
[x,y]);

3
( %o3) %union [x = 16
7 , y = 7]

Sec. 7.8. Solucin de Ecuaciones Trascendentales

89

Maxima

Esto muestra la solucin de un sistema de ecuaciones polinomiales.

( %i4) to_poly_solve(
[(x^2+1)*(y^2+1)=10,(x+y)*(x*y-1)=3],
[x,y]);
( %o4) %union ([x = 3, y = 0], [x = 2, y = 1],
[x = 0, y = 3], [x = 1, y = 2], [x = 1, y = 2],
[x = 2, y = 1])

Maxima

Este sistema de ecuaciones, en un inicio, no puede ser resuelto.

( %i5) to_poly_solve(
[x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],
[x,y]);
( %o5) %union ()

Maxima

Al asignar el valor

true

a la opcin

use_grobner,

se obtiene la solucin.

( %i6) to_poly_solve(
[x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],
[x,y],use_grobner=true);



7+1
7+1
71
( %o6) %union [x = 71
,
y
=
],
[x
=
,
y
=

]
2
2
2
2

Maxima

Esta solucin no restringe el parmetro.

( %i7) to_poly_solve(a*x=x,x);
( %o7) %union ([x = 0])

Maxima

Al indicar los parmetros con la opcin

parameters

la solucin es formal.

( %i8) to_poly_solve(a*x=x,x,parameters=[a]);

90

Cap. 7. Matemticas simblicas

( %o8) %union ( %if (a 1 = 0, [x = %c50], %union ()) ,


%if (a 1#0, [x = 0], %union ()))

Maxima

Esto muestra la solucin de la ecuacin


que siendo

p
p

x+ x x x =

3
2

x
. Note
x+ x

x = 0 el segundo miembro de la ecuacin pierde el sentido (falla debida

al algoritmo utilizado por el paquete).

( %i9) to_poly_solve(
sqrt(x+sqrt(x))-sqrt(x-sqrt(x))=
(3/2)*sqrt(x/(x+sqrt(x))),x);

( %o9) %union [x = 0], [x = 25
16 ]

Maxima

Aqu se muestra la solucin de la ecuacin

3 log( x+1+1)
log(x40)

= 3,

que involucra la

funcin trascendental logaritmo.

( %i10) to_poly_solve(
log(sqrt(x+1)+1)/log((x-40)^(1/3))=3,x);
( %o10) %union ([x = 48],
[x = 36.02856987347005 5.91047671912819 i],
[x = 5.910476719128112 i + 36.02856987347006])

Maxima

Para

convertir

cada

solucin

real

de

doble

precisin

hgase

uso

de

simpfunc=[dfloat].

( %i11) to_poly_solve(x^2+x+1=0,x,simpfuncs=[dfloat]);
( %o11) %union ([x = 0.86602540378444 i 0.5],
[x = 0.86602540378444 i 0.5])

Maxima

Solucin de la ecuacin

cos(x)
sin(x)+1

sin(x)+1
cos(x)

=4

que involucra las funciones tras-

cendentales seno y coseno.

( %i12) to_poly_solve(
cos(x)/(sin(x)+1)+(sin(x)+1)/cos(x)=4,x);

Sec. 7.8. Solucin de Ecuaciones Trascendentales

91


( %o12) %union [x = 2 %z60 3 ], [x = 2 %z62 + 3 ]

Maxima

Aqu se sustituyen las constantes de la salida previa (vea la seccin 6.2).

( %i13) %, %z 60=k, %z 62=n;



( %o13) %union [x = 2 k 3 ], [x = 2 n + 3 ]

Maxima

No obstante, la funcin

( %o12)

nicedummies

inicializa los ndices (compare

( %o14)

).

( %i14) nicedummies( %o80);



( %o14) %union [x = 2 %z0 3 ], [x = 2 %z1 + 3 ]

Maxima

He aqu la solucin de la ecuacin trascendental

sin x +

= cos x

( %i15) to_poly_solve(
sin(x+ %pi/6)=cos(x- %pi/4),x,
simpfuncs=[expand]);

( %o15) %union [x = %z65 + 724 ]

Maxima

En este caso se resuelve la ecuacin trascendental

tan x = cot x.

( %i16) to_poly_solve(tan(x)=cot(x),x,
simpfuncs=[expand,nicedummies]);



( %o16) %union [x = %z0


+
]
2
4

Maxima

Esta es la solucin de la ecuacin trascendental


sin x2 + 1 = cos (x).

( %i17) to_poly_solve(sin(x^2+1)=cos(x),x,
simpfuncs=[expand,nicedummies]);

.
4

con

92

Cap. 7. Matemticas simblicas

( %o17) %union

3
3
[x = 12 8 %z02
], [x = 8 %z02
+ 12 ],
2
2


3
3
21 ], [x = 8 %z0+2
12 ]
[x = 8 %z0+2
2
2

Maxima

Esta es la solucin de una ecuacin exponencial.

( %i18) to_poly_solve(exp(x^2-1)-1=0,x,
simpfuncs=[expand,nicedummies]);



( %o18) %union [x = 2 i %z0 + 1], [x = 2 i %z0 + 1]

Maxima

Esta es una ecuacin que no puede ser resulta por

to_poly_solve.

( %i19) to_poly_solve(exp(x^2-1)-x=0,x);
Unable to solve
Unable to solve
Unable to solve

 2

( %o19) %solve [ex 1 x = 0], [x]

7.9 Sistemas de Inecuaciones Lineales


to_poly_solve el paquete to_poly_solver
fourier_elim que permite resolver sistemas de

Adems de la funcin
incluye la funcin

inecuaciones lineales y algunas inecuaciones racionales.

load(to_poly_solver)$
fourier_elim([ineq1 ,
ineq2 , . . .], [var1 , var2 , . . .])

inicializa el paquete
aplica
cin

el
de

sistema

to_poly_solver

algoritmo
Fourier
de

para

de

inecuaciones

[ineq1 , ineq2 , . . .] respecto


variables [var1 , var2 , . . .]
Comando para solucionar inecuaciones lineales.

elimina-

resolver

el

lineales
de

las

Sec. 7.9. Sistemas de Inecuaciones Lineales

93

Maxima

(
Esto permite resolver el sistema
vale a

2 < x < ,
e < x < 4.

La solucin aqu obtenida equi-

e < x < .

( %i1) fourier_elim([-2<x,x< %pi and %e<x,x<4],[x]);


( %o1) [e < x, x < ]

Maxima

Eliminando primero respecto de

x y luego respecto de y , se obtienen lmites inferior

x que dependen de y , y lmites numricos para y . Si se eliminan en


orden inverso, se obtienen los lmites de y en funcin de x, y los de x son nmeros.
y superior para

( %i2) fourier_elim([x+y<1,y>x and x>0],[x,y]);


( %o2) [0 < x, x < min (1 y, y) , 0 < y, y < 1]
( %i3) fourier_elim([x+y<1,y>x and x>0],[y,x]);
( %o3) [x < y, y < 1 x, 0 < x, x < 12 ]

Maxima

Estas desigualdades no admiten solucin.

( %i4) fourier_elim([x+y<1,y>x and x>1],[x,y]);


( %o4) emptyset
( %i5) fourier_elim([x+y<1,y>x and x>1],[y,x]);
( %o5) emptyset

Maxima

Aqu se resuelve la inecuacin

(x2) (x1)2 (x+4)


x+3

< 0.

( %i6) fourier_elim([(x-1)^2*(x+4)*(x-2)/(x+3)<0],[x]);
( %o6) [3 < x, x < 1] [1 < x, x < 2] [x < 4]

Maxima

Esto resuelve la inecuacin

1
x

( %i7) fourier_elim([x-1/x>=0],[x]);

94

Cap. 7. Matemticas simblicas

( %o7) [x = 1] [x = 1] [1 < x] [1 < x, x < 0]

Maxima

En este caso se resuelve la inecuacin

|x+2|
|x1|

< 1.

( %i8) fourier_elim([abs((x+2)/(x-1))<1],[x]);
( %o8) [x < 2] [x = 2] [2 < x, x < 12 ]

Maxima

fourier_elim

En caso de que uno de los factores no sea lineal,

devuelve una lista

de inecuaciones simplicadas.

( %i9) fourier_elim([(x^3-1)*(x+3)<0],[x]);
( %o9) [3 < x, x < 1, x2 + x + 1 > 0]
[1 < x, x2 + x + 1 >
 0]
[x < 3, x2 + x + 1 > 0]

7.10 Inecuaciones racionales


Un paquete especializado en resolver inecuaciones racionales, escrito
por Volker van Nek, es

solve_rat_ineq.

load(solve_rat_ineq)$
solve_rat_ineq(ineq)

solve_rat_ineq
inecuacin racional ineq

inicializa el paquete
resuelve la

Comando para solucionar inecuaciones racionales.

Maxima

Aqu se resuelve la inecuacin

(x3 1)(x + 3) < 0.

( %i1) solve_rat_ineq((x^3-1)*(x+3)<0);
( %o1) [[x > 3, x < 1]]

Sec. 7.11. Ecuaciones diferenciales ordinarias

95

Maxima

En este ejemplo se resuelve la inecuacin

(y 3 1)(y + 3)2 0.

( %i2) solve_rat_ineq((y^3-1)*(y+3)^2>=0);
( %o2) [[y = 3], [y >= 1]]

Maxima

En este caso se resuelve la inecuacin

(x1)2 (x+4)(x2)
x+3

< 0.

( %i3) solve_rat_ineq((x-1)^2*(x+4)*(x-2)/(x+3)<0);
( %o3) [[x < 4], [x > 3, x < 1], [x > 1, x < 2]]

Maxima

Aqu se resuelve la inecuacin

x1>

1
.
x

( %i4) solve_rat_ineq(x-1>1/x);
( %o4) [[x >

51
2 ,x

< 0], [x >

5+1
2 ]]

7.11 Ecuaciones diferenciales ordinarias


ode2(ecu,dvar,ivar )

resuelve la ecuacin diferencial ordinaria

ecu, de variable dependiente dvar y


ivar, de primer

variable independiente
y segundo orden

ic1(sol,x = x0 , y = y0 )

resuelve el problema del valor inicial


en ecuaciones diferenciales ordinarias
de primer orden

ic2(sol,x = x0 , y =
y0 , 'dif f (y, x) = dy0 )

resuelve el problema del valor inicial


en ecuaciones diferenciales ordinarias
de segundo orden

bc2(sol,x = x0 , y =
y0 , x = x1 , y = y1 )

resuelve el problema del valor en la


frontera para ecuaciones diferenciales
ordinarias de segundo orden

Solucin de ecuaciones diferenciales ordinarias.

96

Cap. 7. Matemticas simblicas

Maxima

He aqu la solucin de la ecuacin diferencial

%c

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

En esta solucin

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

( %i1) ode2('diff(y,x)=a*y+1,y,x);


a x
ea x
( %o1) y = %c e a

Maxima

Si se incluye una condicin inicial apropiada, entonces no hay ninguna constante


en la solucin.

( %i2) ic1( %,x=0,y=0);


ax
( %o2) y = e a1

Maxima

He aqu la solucin de la ecuacin diferencial

%k1

%k2

y ''(x)+y y '(x) = 0. En esta solucin

son constantes a ser determinadas a partir de valores iniciales o valores

de frontera.

( %i3) ode2('diff(y,x,2)+y*'diff(y,x)^3=0,y,x);
( %o3)

y 3 +6 %k1 y
6

= x + %k2

Maxima

Si se incluyen las condiciones iniciales apropiadas desaparecen las constantes.

( %i4) ic2( %,x=0,y=0,'diff(y,x)=1);


y 3 3 y (y 2 1)
( %o4)
=x
6

Maxima

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

( %i5) bc2( %o96,x=0,y=0,x=1,y=1);


( %o5)

y 3 +5 y
6

=x

Sec. 7.12. Sistemas de ecuaciones diferenciales ordinarias lineales

97

7.12 Sistemas de ecuaciones diferenciales ordinarias lineales


La funcin

desolve resuelve sistemas de ecuaciones diferenciales ordi-

narias 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,

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

para la primera derivada, a diferencia de la forma


en la seccin 7.11), debe usarse la forma

desolve(ecu,y (x ))

resuelve una ecuacin diferencial para

y (x ),

tomando a

como variable

independiente

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

resuelve sistemas de ecuaciones diferenciales ordinarias lineales


permite

aadir

(x0 ) = val

la

condicin

inicial

a un determinado sistema

de ecuaciones diferenciales ordinarias


lineales

Solucin de sistemas de ecuaciones diferenciales ordinarias lineales.

Maxima

He aqu la solucin de la ecuacin diferencial

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

( %i1) desolve(diff(y(x),x,2)+y(x)=2*x,y(x));


( %o1) 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) .

( %i2) desolve([diff(x(t),t)=y(t),diff(y(t),t)=x(t)],
[x(t),y(t)]);
h
%et
%et
( %o2) x (t) = (y(0)+x(0))
(y(0)x(0))
,
2
2
i
t
t
%e
%e
y (t) = (y(0)+x(0))
+ (y(0)x(0))
2
2

98

Cap. 7. Matemticas simblicas

Maxima

De esta manera se aaden las las condiciones iniciales

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

al

sistema anterior.

( %i3) atvalue(x(t),t=0,1);
( %o3) 1
( %i4) atvalue(y(t),t=0,0);
( %o4) 0

Maxima

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

( %i5) desolve([diff(x(t),t)=y(t),diff(y(t),t)=x(t)],
[x(t),y(t)]);
h
i
t
%et
%et
%et
( %o5) x (t) = %e
+
,
y
(t)
=

2
2
2
2

Maxima

En este otro ejemplo se resuelve la ecuacin diferencial

e x x2 ,

con las condiciones iniciales

y(0)
y 0 (0)

00
y (0)

d3 y
dx3

dy
3 ddx2y + 3 dx
y =

=1
=0 .
= 2

( %i6) eq:diff(y(x),x,3)-3*diff(y(x),x,2)+3*diff(y(x),x)
-y(x)= %e^x*x^2;
 2


3
( %o6) ddx3 y (x) 3 ddx2 y (x) + 3 ddx y (x) y (x) = x2 ex
( %i7) atvalue(diff(y(x),x,2),x=0,-2)$
atvalue(diff(y(x),x),x=0,0)$
atvalue(y(x),x=0,1)$
( %i10) desolve([eq],[y(x)]);
( %o10) y (x) =

x 5 ex
60

x 2 ex
2

x ex + ex

Sec. 7.13. Series de potencias

99

7.13 Series de potencias


taylor(expr, x, a, n)

expande la expresin

expr

en un desa-

rrollo de Taylor o de Laurent respecto


de la variable

x alrededor del punto a,


(x a)n

con trminos hasta

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

devuelve la serie en potencias truncada de grado

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

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

en todas las va-

alrededor del punto

devuelve la serie en potencias trunca-

x1 , x2 , . . . alrededor
(a1 , a2 , . . .); el truncamien-

da en las variables
del punto

to se realiza, respectivamente, en los


grados

taylor(expr, [x1 , x2 , . . .] ,
[a1 , a2 , . . .] , [n1 , n2 , . . .] ,
. . .)
taylor(expr, [x, a, n,
'asymp])

n1 , n2 , . . .

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

equivale

expr en potencias negativas


x a (el trmino de mayor orden
(x a)n )

desarrolla
de
es

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

es

pequea.

Maxima

Esto da una aproximacin en serie de potencias para alrededor de


trminos de orden

3.

( %i1) taylor((1+x)^ n,x,0,3);


(n2 n) x2
(n3 3 n2 +2 n) x3
( %o1) 1 + n x +
+
+
2
6

0,

hasta los

100

Cap. 7. Matemticas simblicas

Maxima

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

( %i2) taylor(exp(-a*t)*(1+sin(2*t)),t,0,4);
(a2 4 a) t2
(a3 6 a2 +8) t3
( %o2) 1 + (a + 2) t +

+
2
6
(a4 8 a3 +32 a) t4
24

Maxima

Si se da una funcin no conocida,

taylor escribe la serie de potencias en trminos

de derivadas.

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

( %o3) 1 + f (0) + ddt f (t) t=0 t +


d3
d t3



f (t)

t3

t=0

d2
d t2



f (t)

t=0

t2

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.

( %i4) taylor(exp(x),x,0,3);
( %o4) 1 + x +

x2
2

x3
6

Maxima

Cuando se hacen operaciones en una serie de potencias, el resultado es calculado


slo en el orden apropiado en x.

( %i5) %^2*(1+ %);

Sec. 7.13. Series de potencias

( %o5) 2 + 5 x +

13 x2
2

35 x3
6

101

Maxima

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

( %i6) 2+5*x+(13*x^2)/2+(35*x^3)/6;
( %o6)

35 x3
6

13 x2
2

+ 5x + 2

Maxima

Ahora el cuadrado es calculado exactamente.

( %i7) %^2;

3
( %o7) 356x +

13 x2
2

+ 5x + 2

2

Maxima

Al aplicar

expand

se obtiene un resultado con once trminos.

( %i8) %,expand;
( %o8)

1225 x6
36

455 x5
6

1207 x4
12

265 x3
3

+ 51 x2 + 20 x + 4

Maxima

He aqu una serie de potencias doble de orden 3.

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



3
2
( %o9) y y6 + + 1 y2 + x + y2 +


2
61 + y12 + x3 +

Un detalle interesante para mencionar es que

y3
12

x2 +

Maxima, en los casos

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


serie de potencias de una funcin.

102

Cap. 7. Matemticas simblicas

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.

( %i10) powerseries(sin(x),x,0);
P
(1)i1 x2 i1 +1
( %o10)
i1 =0
(2 i1 +1)!

Maxima

Esta es una frmula ms elaborada.

( %i11) powerseries(cos(x^2-1),x,0);
P
P
(1)i2 x2 (2 i2 +1)
( %o11) sin(1)
+ cos(1) i2 =0
i2 =0
(2 i2 +1)!

(1)i2 x4 i2
(2 i2 )!

Maxima

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

niceindices.

( %i12) niceindices(powerseries(cos(x^2-1),x,0));
i 4i
P
P
(1)i x2 (2 i+1)
x
( %o12) sin(1)
+ cos(1) i=0 (1)
i=0
(2 i+1)!
(2 i)!

7.14 Transformada de Laplace


laplace(expr, t, s)

calcula la transformada de Laplace de

expr

con respecto de la variable

parmetro de transformacin

ilt(expr, s, t)

calcula la transformada inversa de Laplace de


rmetro

Transformadas de Laplace.

expr
t.

con respecto de

y pa-

Sec. 7.15. Ecuaciones recurrentes

103

Maxima

Esto calcula la transformada de Laplace.

( %i1) laplace(t^3*exp(a*t),t,s);
6
( %o1) (sa)
4

Maxima

He aqu la transformada inversa.

( %i2) ilt( %,s,t);


( %o2) t3 %ea t

7.15 Ecuaciones recurrentes


El paquete

solve_rec

resuelve expresiones recurrentes lineales con

coecientes polinomiales.
Maxima

Inicializacin del paquete

solve_rec.

( %i1) load(solve_rec)$
Maxima

Esto resuelve una ecuacin recurrente simple.

( %i2) solve_rec(a[n]=3*a[n-1]+1,a[n],a[1]=1);
n
( %o2) an = 32 12

Maxima

He aqu una solucin ms complicada de otra ecuacin recurrente.

( %i3) solve_rec(a[n+1]=(a[n]+1)/(n+1),a[n],a[1]=0);
n1
P ( %j+1)!
( %o3) an =

%j=1

%j+1

n!

104

Cap. 7. Matemticas simblicas

Maxima

He aqu la solucin de una ecuacin recurrente con dos condiciones iniciales.

( %i4) solve_rec(
a[n+2]=(3*a[n+1]-a[n])/2,
a[n],a[1]=0,a[2]=1);
( %o4) an = 2 22n

Maxima

Ejemplo de recurrencia lineal con coecientes polinomiales.

( %i5) solve_rec(
2*x*(x+1)*y[x]-(x^2+3*x-2)*y[x+1]+(x-1)*y[x+2],
y[x],y[1]=1,y[3]=3);
( %o5) yx = 3 2x2 x!
2

Maxima

Clculo de las soluciones racionales de una expresin recurrente lineal.

( %i6) solve_rec_rat(
(x+4)*a[x+3]+(x+3)*a[x+2]-x*a[x+1]+
(x^2-1)*a[x]=(x+2)/(x+1),
a[x]);
( %o6) ax = (x1)1(x+1)

CAPTULO

Matemticas numricas

8.1 Solucin numrica de ecuaciones


algsys([ecu1 , . . . , ecum ] ,
[x1 , . . . , xn ])

resuelve el sistema de ecuaciones poriables

allroots(ecu, x)

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

linmicas

para las va-

calcula aproximaciones numricas de


las races reales y complejas de la ecuacin polinmica

find_root(ecu, x, a, b)

ecu para

la variable

Bsqueda de races numricas.

Maxima

solve

devuelve la ecuacin ingresada.

( %i1) solve(2-4*x+x^5=0,x);


( %o1) 0 = x5 4 x + 2

Maxima

algsys

ecu
[a, b]

calcula una raz de la ecuacin


el intervalo de aislamiento

proporciona una lista con soluciones aproximadas.

( %i2) algsys([2-4*x+x^5=0],[x]);
105

en

106

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) algsys([2-4*x+x^5=0],[x]),realonly:true;
( %o3) [[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:

[0, 2];

y la funcin

find_root

log

evala los

que, en este caso,

forma parte de la ecuacin no est denida en cero.

( %i4) find_root(3*cos(x)=log(x),x,0,2);
( %o4) 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) find_root(3*cos(x)=log(x),x,0.00001,2);
( %o5) 1.447258617277903

Sec. 8.2. Integrales numricas

107

Maxima

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

find_root

puede devolver una solucin diferente.

( %i6) find_root(3*cos(x)=log(x),x,12,15);
( %o6) 13.10638768062491

8.2 Integrales numricas


quad_qags(f, x, a, b)

calcula

Rb
a

quad_qagi(f, x, a, inf )

calcula

R
a

quad_qagi(f, x, minf, b)

numricamente

la

integral

numricamente

la

integral

numricamente

la

integral

la

integral

f dx
f dx

calcula

Rb

f dx

quad_qagi(f, x, minf, inf ) calcula


numricamente
R
f
dx

Integrales numricas.

Las funciones

quad_qags y quad_qagi devuelven una lista de cua-

tro elementos:

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

El

cdigo de error.

cdigo de error

puede tener los siguientes valores:

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr un nmero excesivo de errores de redondeo;

108

Cap. 8. Matemticas numricas

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

puede manejar singularidades en los puntos nales de la regin de

integracin.

( %i1) quad_qags(1/sqrt(x*(1-x)),x,0,1);


( %o1) 3.141592653589849, 6.2063554295832546 1010 , 567, 0

Maxima

Para resolver integrales numricas sobre regiones innitas se usa

quad_qagi.

( %i2) quad_qagi(exp(-x^2),x,minf,inf);


( %o2) 1.772453850905516, 1.420263678183091 108 , 270, 0

CAPTULO

Funciones y programas

9.1 Denicin de funciones


Hasta aqu, se ha visto muchos ejemplos de funciones incorporadas
en

Maxima.

En esta seccin, se mostrar la forma en que el usuario

puede aadir sus propias funciones a


Maxima

Esto dene la funcin

f.

( %i1) f(x):=x^2;
( %o1) f (x) := x2

Maxima

eleva al cuadrado su argumento.

( %i2) f(a+1);
( %o2) (a + 1)2

Maxima

El argumento puede ser un nmero.

( %i3) f(4);
( %o3) 16
109

Maxima.

110

Cap. 9. Funciones y programas

Maxima

O puede ser una expresin ms complicada.

( %i4) f(x^2+3*x);
2
( %o4) x2 + 3 x

Maxima

Puede usarse

en un clculo.

( %i5) expand(f(x+y+1));
( %o5) y 2 + 2 x y + 2 y + x2 + 2 x + 1

Maxima

Esto muestra la denicin hecha para

f.

( %i6) dispfun(f);
( %t6) f (x) := x2
( %o6) [ %t6]

f(x) := x2
dispfun(f)
remfunction(f)
functions

dene la funcin

muestra la denicin de

borra todas las deniciones de

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

Definicin de una funcin en Maxima.

Maxima

Las funciones en Maxima pueden tener cualquier nmero de argumentos

( %i7) hump(x,xmax):=(x-xmax)^2/xmax;
( %o7) hump (x, xmax) :=

(xxmax)2
xmax

Sec. 9.1. Denicin de funciones

111

Maxima

Puede usarse la funcin

hump

tal como cualquiera de las funciones predenidas.

( %i8) 2+hump(x,3.5);
( %o8) 0.28571428571429 (x 3.5)2 + 2

Maxima

Esto da una nueva denicin para

hump,

que sobrescribe la anterior.

( %i9) hump(x,xmax):=(x-xmax)^4;
( %o9) hump(x, xmax) := (x xmax)4

Maxima

Slo es mostrada la nueva denicin.

( %i10) dispfun(hump);
( %t10) hump (x, xmax) :=
( %o10) [ %t10]

(xxmax)2
xmax

Maxima

Esto limpia todas las deniciones para

hump.

( %i11) remfunction(hump);
( %o11) [hump]

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

muestra las deniciones de

fi

borra todas las deniciones de

fi

muestra las deniciones de todas las


funciones denidas por el usuario

remfunction(all)

borra todas las deniciones de todas


la funciones denidas por el usuario

Vista y borrado de varias funciones

112

Cap. 9. Funciones y programas

Maxima

Ahora se dene la funcin

g.

( %i12) g(x):=sqrt(1-x);

( %o12) g(x) := 1 x

Maxima

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

g).

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

Maxima

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

g).

( %i14) remfunction(all);
( %o14) [f, g]

Maxima

Ya no hay funciones denidas por el usuario.

( %i15) dispfun(all);
( %o15) [ ]

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

F ([L]) := (L)

dene la funcin

113

F cuyo nmero de ar-

gumentos es variable

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

dene la funcin array

cuyo argu-

cuyo argu-

mento es una lista


dene la funcin array

mento es una lista y que devuelve una


lista

Ms definiciones de funciones en Maxima.

Maxima

Aqu se dene la funcin

que admite un nmero variable de argumentos.

( %i16) F([x]):=x^2+4;
( %o16) F ([ x ]) := x2 + 4

Maxima

Esto evala

en un solo argumento.

( %i17) F(2);
( %o17) 8
Maxima

Esto evala

en dos argumentos.

( %i18) F(2,3);
( %o18) [8, 13]

Maxima

He aqu la denicin de la funcin array

( %i19) G[x,y]:=x^2+y^2;
( %o19) Gx,y := x2 + y 2

Maxima

Aqu se evala

en la lista

( %i20) G[2,3];

[2, 3]

G.

114

Cap. 9. Funciones y programas

( %o20) 13
Maxima

Esto dene la funcin array

que devuelve una lista.

( %i21) H[x,y]:=[2*x,3-y,x*y];
( %o21) Hx,y := [2 x, 3 y, x y]

Maxima

Aqu se evala la funcin

en la lista

[4, 3].

( %i22) H[4,3];
( %o22) [8, 0, 12]
Para visualizar la denicin de este tipo de funciones puede usarse
la funcin

dispfun, pero para borrar las respectivas deniciones debe


remarray.

usarse la funcin

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

borra la funcin array

borra las funciones array

F1 , . . . , Fn

borra todas las funciones array denidas por el usuario

Borrado de funciones array

Maxima

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

( %i23) dispfun(all);
( %t23) F ([ x ]) := x2 + 4
( %t23) Gx,y := x2 + y 2
( %t23) Hx,y := [2 x, 3 y, x y]
( %o23) [ %t24, %t25, %t26]

Maxima

Esto borra la denicin de la funcin

( %i24) remfunction(F);

denida en

( %i17)

Sec. 9.1. Denicin de funciones

115

( %o24) [F ]

Maxima

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

( %i25) remarray(all);
( %o25) [G, H]
Adems,

Maxima

permite denir las llamadas funciones

annimas

que son de mucha utilidad en contextos vinculados con la programacin. La funcin para denirlas es

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

lambda.

dene una funcin annima


dene una funcin annima de argumentos mltiples

Funcin annima

Maxima

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

( %i26) f:lambda([ x ], x^2);


( %o26) lambda([ x ] , x2 )
( %i27) f(a);
( %o27) a2
Maxima

O puede aplicarse directamente.

( %i28) lambda([ x ], x^2)(a);


( %o28) a2
Maxima

No obstante, no es reconocida por

( %i29) dispfun(all);

dispfun.

116

Cap. 9. Funciones y programas

( %o29) [ ]

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

Maxima muchas veces. Es posible ahorrarse

mucha digitacin deniendo una funcin que contiene todas las sentencias de entrada.

Maxima

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

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

Maxima

Esto hace lo mismo, pero con cuatro trminos.

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

Maxima

Esto dene una funcin

exprod

que construye un producto de n trminos, luego

lo expande.

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

Maxima

Siempre que usa la funcin, ejecutar las operaciones

product

expand.

( %i33) exprod(5);
( %o33) 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.

Sec. 9.1. Denicin de funciones

117

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.

( %i34) cex(n,i):=(
t:exprod(n),coeff(t,x^i)
)$

Maxima

Esto corre el procedimiento.

( %i35) cex(5,3);
( %o35) 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

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

tratadas como locales.

Maxima

La funcin

cex denida en ( %i37)

no es un bloque, as que el valor de

y existe incluso despus de la evaluacin de la funcin.

( %i36) t;
( %o36) x5 + 15 x4 + 85 x3 + 225 x2 + 274 x + 120

t escapa,

118

Cap. 9. Funciones y programas

Maxima

Esta funcin es denida como un bloque con variable local

u.

( %i37) ncex(n,i):=block([u],
u:exprod(n),
coeff(u,x^ i) ) $
Maxima

La funcin devuelve el mismo resultado que la anteriormente denida.

( %i38) ncex(5,3);
( %o38) 85
Maxima

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

( %i39) u
( %o39) 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
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 transforma-

cin y patrones de comparacin.


Maxima

Denicin de la regla de transformacin que reemplaza

( %i1) defrule(regtran1,x,3);

por

3.

Sec. 9.2. Reglas de transformacin para funciones

119

( %o1) regtran1 : x 3

Maxima

Aplicacin de la regla de transformacin

regtran1

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

Maxima

Puede denirse una regla de transformacin para

f(x).

sta no afecta a

( %i3) defrule(regtran2,f(x),p);
regtran2 : f (x) p
( %i4) apply1(1+f(x)+f(y),regtran2);
( %o4) f (y) + p + 1

Maxima

Esto dene un patrn

f(t)

que admite cualquier argumento para f.

( %i5) matchdeclare(t,true);
done
( %i6) defrule(patron,f(t),t^2);
( %o6) patron : f (t) t2

Maxima

Aqu se aplica el patrn previamente denido.

( %i7) apply1(1+f(x)+f(y),patron);
( %o7) y 2 + x2 + 1

Maxima

Esto muestra todas las reglas, hasta aqu, denidas.

( %i8) disprule (all);


( %t8) regtran1 : x 3

f(y).

120

Cap. 9. Funciones y programas

( %t8) regtran2 : f (x) p


( %t8) patron : f (t) t2
( %o8) [ %t51, %t52, %t53]

Maxima

Con esta sentencia se borran todas las deniciones de las reglas

regtran2

regtran1,

patron.

( %i9) clear_rules();
( %o9) f alse

Maxima

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

( %i10) disprule (all);


( %o10) [ ]

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

Maxima

es que ellas pueden involucrar expresiones no

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

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
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.

( %i11) prodp(expr):= not atom(expr) and op(expr)=*;


( %o11) prodp(expr) := atom(expr) op(expr) =  

Sec. 9.3. Funciones denidas a partir de expresiones

121

( %i12) matchdeclare(p,prodp);
( %o12) 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.

( %i13) defrule( reg,f(p),apply( +, map(f,args(p)) )


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

Maxima

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

( %i14) apply1(f(a*b)+f(c*d),reg);
( %o14) 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.

( %i15) apply1(f(a)+f(a*b*c)+f(c),reg);
( %o15) 2 f (c) + f (b) + 2 f (a)

Maxima

Esto combina la regla denida por el usuario con la funcin

expand

de Maxima.

( %i16) apply1(f(a)*f(a*b*c)*f(c),reg),expand;
( %o16) f (a) f 2 (c) + f (a) f (b) f (c) + f 2 (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

122

Cap. 9. Funciones y programas

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

Definicin de funciones a partir de expresiones.

Maxima

Esto almacena la expresin

x2 + 1

en la variable

ex.

ex.

( %i1) ex:x^2+1;
( %o1) x2 + 1

Maxima

Aqu se pretende denir la funcin

a partir de

No obstante, al realizar una

evaluacin no se obtiene el resultado esperado.

( %i2) f(x):=ex $
( %i3) f(8);
( %o3) x2 + 1

Maxima

Por otra parte, al utilizar

define

para denir la funcin

a partir de

ex

si se

obtiene un resultado satisfactorio.

( %i4) define(g(x),ex) $
( %i5) g(8);
( %o5) 65

Una gran utilidad de

define se aprecia al denir funciones a par-

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


numricos.

Sec. 9.3. Funciones denidas a partir de expresiones

123

Maxima

He aqu la denicin de la funcin

f = x2 + 1 .

( %i6) f(x):=x^2+1 $

Maxima

Ahora, a partir de

f,

se dene

f 0 

como

f 0  =

df
.
dx

( %i7) f'(x):=diff(f(x),x) $

Maxima

La evaluacin simblica de

f 0 

no presenta problema alguno.

( %i8) f'(t);
( %o8) 2t

Maxima

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

( %i9) f'(8);
( %o9) di: second argument
#0: f '(x=8)

must be a variable; found 8

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

Maxima

Aqu se vuelve a denir

f 0 ,

pero en este caso se utiliza la funcin

cuerde que esta nueva denicin anula a la anterior).

( %i10) define(f'(x),diff(f(x),x)) $

Maxima

La evaluacin simblica es idntica.

( %i11) f'(t);
( %o11) 2t

define

(re-

124

Cap. 9. Funciones y programas

Maxima

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

( %i12) f'(8);
( %o12) 16

9.4 Funciones denidas a trozos


Maxima

no cuenta con una funcin especca para manipular ade-

cuadamente las funciones denidas a trozos. Una forma, bastante limitada, de superar esta carencia es utilizando el condicional

Maxima

Esto dene la funcin

f (x) =

(
x2 ,

x,

x < 2,
x 2.

( %i1) f(x):=block([],
if (x<2) then return(x^2),
if (x>=2) then return(sqrt(x))
)$

Maxima

Aqu se hacen dos evaluaciones numricas de la funcin.

( %i2) f(-2);
( %o2) 4
( %i3) f(9);
( %o3) 3

Maxima

No obstante, una evaluacin simblica deja mucho que desear.

( %i4) f(t);

( %o4) if t >= 2 then return
t

if.

Sec. 9.4. Funciones denidas a trozos

125

Maxima

Y ni que decir de un intento de derivar o integrar.

( %i5) diff(f(x),x);

d
( %o5)
if x >= 2 then return
x
dx
( %i6) integrate(f(x),x);
Z

( %o6)
if x >= 2 then return
x dx

Maxima

Denamos, ahora, la funcin

2,

g(x) =
x,

1 x,

2 < x < 2 ,
2 x < 3,
3 x < 5.

( %i7) g(x):=block([],
if (-2<x and x<2) then return(x^2),
if (2<=x and x<3) then return(sqrt(x)),
if (3<=x and x<5) then return(1-x) )$

Maxima

El lgebra de funciones tampoco puede efectuarse.

( %i8) f(x)+g(x);

( %o8) (if x >= 2 then return ( x)) +


(if 3 <= x and x < 5 then return (1 x))

Por otra parte, se tiene el paquete

pw elaborado por Richard Hen-

nessy , el cual est en proceso de desarrollo, que puede resultar til


en ciertos casos.

Maxima

Esto carga el paquete

pw.

( %i9) load(pw)$
1 El paquete pw (cuya versin en la actualidad es 6.4)
http://sourceforge.net/projects/piecewisefunc/

se puede descargar desde

126

Cap. 9. Funciones y programas

Maxima

Esto dene la funcin

(
x2 ,
f (x) =
x,

x < 2,
x 2.

( %i10) f(x):=piecewise(
[minf,x^2,2,sqrt(x),2,sqrt(x),inf],
x,open)$

Maxima

Aqu se hacen tres evaluaciones numricas de la funcin.

( %i11) f(-2);
( %o11) 4
( %i12) f(2);

( %o12) 2
( %i13) f(9);
( %o13) 3

Maxima

Una evaluacin simblica nos deja ver las funciones utilizadas por el autor para
manipular las funciones denidas a trozos.

( %i14) f(t);
( %o14)

t (signum(t2)unit_spike(t2)+1)
+
2
t2 (signum(t2)unit_spike(t2)+1)
+
2

t unit_spike (t 2)

Maxima

Con la funcin

pwsimp

se obtiene una presentacin matricial.

( %i15) pwsimp(f(x),x,array);

If x in ( , 2 ) then
x2
If x in [
2
, 2 ] then 2
If x in (
2
, ) then
x
( %o15) Done

Sec. 9.4. Funciones denidas a trozos

127

Maxima

No obstante, la derivacin no es correcta. Note que, de acuerdo con la denicin,


no existe

f 0 (2);

sin embargo, aqu se obtiene

3 .

22

( %i16) pwsimp(

If x
If x

If x

diff(f(x),x), x,array);
in ( , 2 ) then
in [
2
, 2 ] then
in (
2
, ) then

2x
1
3

22
1

2 x

( %o16) Done

Maxima

He aqu integracin.

( %i17) pwsimp(pwint(f(x),x),x,array),expand;

3
x3
22
4
If x in ( , 2 ) then
+

3
3
3

If x in [
22
4
2
, 2 ] then
+

3
3
3
3
2x2
22
4
If x in (
2
, ) then
3 3 + 3
( %o17) Done

Maxima

Denamos, ahora, la funcin

2,

g(x) =
x,

1 x,

2 < x < 2 ,
2 x < 3,
3 x < 5.

( %i18) g(x):=piecewise(
[-2,x^2,2,sqrt(x),2,sqrt(x),3,1-x,3,1-x,5],
x,open)$

Maxima

Observe esta operacin.

( %i19) f(3)+g(3);

( %o19) 3 2

128

Cap. 9. Funciones y programas

Maxima

No obstante, al calcular

f (x) + g(x)

se aprecia que

( %i20) pwsimp(f(x)+g(x),x,array);

If x in ( , 2
If x in [ 2 , 2

If x in ( 2 , 2

If x in [
2
, 2

If x in (
2
, 3

If x in [
3
, 3

If x in (
3
, 5

If x in [
5
, 5
If x in (
5
,
( %o20) Done

)
]
)
]
)
]
)
]
)

f (3) + g(3) = 422

then
then
then
then
then
then
then
then
then

x2
4
2 x2
3
22
2 x

42 3

x + x + 1

Es preciso anotar que el objetivo no ha sido criticar negativamente


el paquete

pw,

sino, mostrar al lector la existencia de un trabajo que

en un futuro cercano puede ser una buena alternativa para la carencia


que adolece

Maxima

en el tema de las funciones denidas a trozos.

CAPTULO

10

Listas

10.1 Juntar objetos


Las listas son bloques de construccin bsica para

Maxima

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) [2,3,4];
( %o1) [2, 3, 4]

Maxima

Esto da una lista de expresiones simblicas.

( %i2) x^ %-1;


( %o2) x2 1, x3 1, x4 1
1 Lisp (List Processing )

es el lenguaje de programacin de alto nivel en el que

est programado Maxima.

129

130

Cap. 10. Listas

Maxima

Es posible derivar estas expresiones.

( %i3) diff( %,x);




( %o3) 2 x, 3 x2 , 4 x3

Maxima

Y luego encontrar los valores cuando

es reemplazado por

3.

( %i4) %,x=3;
( %o4) [6, 27, 108]

La mayora de funciones matemticas incorporadas en

Maxima

han sido implementadas listables de modo que acten separadamente sobre cada elemento de una lista.

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(f, i, imin ,
imax )
create_list(f, i, list)

create_list.

da una lista de valores con


de

imin

variando

variando

imax

da una lista de valores con

de acuerdo a cada elemento de

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

genera

una

lista

con

cada

list
ndice

(i, j, . . .) variando del valor mnimo al


valor mximo que le han sido asociados

create_list(f, i, list1 ,
j, list2 , . . .)

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 listas.

Sec. 10.2. Generacin de listas

131

Maxima

Esto da una lista de los valores de

i2 ,

con

variando de

6.

( %i1) create_list(i^2,i,1,6);
( %o1) [1, 4, 9, 16, 25, 36]

Maxima

He aqu una lista de los valores de

sen

n
5

para

variando de

4.

( %i2) create_list(sin(n/5),n,0,4);





( %o2) 0, sin 15 , sin 25 , sin 53 , sin 45

Maxima

Esto da los valores numricos de la tabla generada en

( %i6)

( %i3) %,numer;
( %o3) [0, 0.19866933079506, 0.38941834230865,
0.56464247339504, 0.71735609089952]

Maxima

Tambin puede hacerse tablas de frmulas.

( %i4) create_list(x^ i+2*i,i,1,5);




( %o4) x + 2, x2 + 4, x3 + 6, x4 + 8, x5 + 10

Maxima

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

( %i5) product(x^ i+2*i,i,1,5);






( %o5) (x + 2) x2 + 4 x3 + 6 x4 + 8 x5 + 10

Maxima

Esto hace una lista con valores de

variando desde

( %i6) create_list(0.25*i,i,1,4)$

hasta

en pasos de

0.25

132

Cap. 10. Listas

( %i7) create_list(sqrt(x),x, %);


( %o7) [0.5, 0.70710678118655, 0.86602540378444, 1.0]

Maxima

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

create_list.

( %i8) %^2+3;
( %o8) [3.25, 3.5, 3.75, 4]

Maxima

Esto hace una lista de

hasta

xi + y j

con

variando desde

hasta

2.

( %i9) create_list(x^ i+y^ j,i,1,3,j,1,2);




( %o9) y + x, y 2 + x, y + x2 , y 2 + x2 , y + x3 , y 2 + x3

Maxima

Esto crea una lista conteniendo cuatro copias del smbolo

( %i10) create_list(x,i,1,4);
( %o10) [x, x, x, x]

Maxima

Esto da una lista de cuatro nmeros seudo aleatorios.

( %i11) create_list(random(1.0),i,1,4);
( %o11) [0.25223887668538, 0.41556272272148,
0.61257388925382, 0.84181265533592]

x.

variando desde

Sec. 10.3. Eleccin de elementos de una lista

133

10.3 Eleccin de elementos de una lista


part(list, i)

list [ i ]

el

i-simo

elemento de

elemento es

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

(el primer

una lista formada por los elementos

i, j, . . .

part(list, i1 , . . . , ik )

list

list [ 1 ])

de

list

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

list que se especii1 , . . . , ik (primero


i1 de list, despus

la parte i2 del resultado anterior, y as


sucesivamente)

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

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

list

devuelve el ltimo elemento de

Operaciones con elementos de una lista.

Maxima

Esto extrae el tercer elemento de la lista.

( %i1) part([4,-1,8,-6],3);
( %o1) 8

Maxima

Esto extrae una lista de elementos.

( %i2) part([4,-1,8,-6],[2,3,1,2,3,4,1]);
( %o2) [1, 8, 4, 1, 8, 6, 4]

Maxima

Esto asigna una lista en la variable

( %i3) u:[7,2,4,6];
( %o3) [7, 2, 4, 6]

u.

list

134

Cap. 10. Listas

Maxima

Puede extraerse elementos de

u.

( %i4) u[3];
( %o4) 4
Maxima

Pueden realizarse operaciones diversas con

u.

( %i5) (u+1)/(u-6);


( %o5) 34 , 61 , 6, 8
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.

( %i6) m:create_list(create_list(i-j,j,1,2),
i,1,2);
( %o6) [[0, 1] , [1, 0]]

Maxima

Esto extrae la primera sublista de la lista de listas,

( %i7) m[1];
( %o7) [0, 1]

Maxima

Esto extrae el segundo elemento de aquella sublista.

( %i8) %[2];
( %o8) 1
Maxima

Esto hace las dos operaciones juntas.

( %i9) part(m,1,2);

Sec. 10.3. Eleccin de elementos de una lista

135

( %o9) 1
Maxima

Esto genera una lista tridimensional de

2 2 2.

Es una lista de listas de listas.

( %i10) create_list(create_list(create_list(i*j^2*k^3,
k,1,2),j,1,2),i,1,2);
( %o10) [[[1, 8] , [4, 32]] , [[2, 16] , [8, 64]]]

Maxima

Si no se anida

create_list

se obtiene una lista unidimensional.

( %i11) create_list(i*j^2*k^3,i,1,2,j,1,2,k,1,2);
( %o11) [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

extrae el i-simo elemento de la lista


resetea el

Operando listas como arrays.

Maxima

Aqu hay una lista.

( %i12) u:[2,1,5,7];
( %o12) [2, 1, 5, 7]

Maxima

Esto resetea el segundo elemento de la lista.

( %i13) u[2]:0;
( %o13) 0

i -simo

elemento de la lista

136

Cap. 10. Listas

Maxima

Ahora la lista asignada a

se ha modicado.

( %i14) u;
( %o14) [2, 0, 5, 7]

10.4 Prueba y bsqueda de elementos de una lista


sublist(L, P )
sublist_indices(L, P )

devuelve la lista de elementos


lista

P (x)

es verdadero

P (x)

es verdadero

devuelve el ndice que indica la posi-

prueba si

elem

f orm es un

f orm
list

prueba si
parte de

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

para la cual el predicado

cin que ocupa

member(f orm, list)


freeof(f orm, list)

de la

devuelve los ndices de los elementos


de la lista

?position(elem, L)

para los cuales el predicado

en la lista

elemento de

list

no ocurre en ninguna

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

[a, 1, 3, b, 7]

que son de tipo simblico.

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

Maxima

Esto da una lista de todas posiciones, de la lista

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

en las que se encuen-

tran elementos de tipo simblico.

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

Sec. 10.5. Combinacin de listas

137

( %o2) [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

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

que son mayores que 2.

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

Maxima

Esto muestra que

es un elemento de

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

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

Maxima

Por otra parte

3,

no lo es.

( %i5) member(3,[11,1,2,4,5,5]);
( %o5) f alse

Maxima

Esto muestra que

ocurre en alguna parte de

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

( %i6) freeof(0,[[1,2],[3,0]]);
( %o6) f alse

10.5 Combinacin de listas


join(list1 , list2 )

crea una nueva lista con los elementos


de las listas

Combinar listas.

list1

list2

alternados

138

Cap. 10. Listas

Maxima

He aqu dos listas, de igual longitud, combinadas.

( %i1) join([1,2],[a,b]);
( %o1) [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).

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

10.6 Reordenamiento de listas


sort(list)

ordena los elementos de

list

en forma

list

de acuer-

ascendente

sort(list, P )

ordena los elementos de


do con el predicado

reverse(list)

invierte el orden de los elementos de

list

permutations(list)

devuelve un conjunto con todas las


permutaciones distintas de los miembros de

unique(list)

list

devuelve

list

sin redundancias, es de-

cir, sin elementos repetidos

Ordenamiento de listas.

Maxima

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

( %i1) sort([d,b,c,a]);
( %o1) [a, b, c, d]

Sec. 10.6. Reordenamiento de listas

139

Maxima

Esto ordenada los elementos de la lista en forma descendente.

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

Maxima

Aqu se ordenada los elementos de la lista segn sea la norma de cierto elemento
menor que la norma del posterior.

( %i3) sort([3+5* %i, %i-8,4+ %i,1+2* %i],


lambda([a,b],abs(a)<abs(b))
);
( %o3) [2 i + 1, i + 4, 5 i + 3, i 8]

Maxima

Esto invierte el orden de los elementos de la lista.

( %i4) reverse([d,b,c,a]);
( %o4) [a, c, b, d]

Maxima

Aqu se tienen todas las permutaciones de

[a, b, c].

( %i5) permutations([a,b,c]);
( %o5) {[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.

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

140

Cap. 10. Listas

10.7 Agregar y quitar elementos de una lista


append(list1 , list2 , . . . ,
listn )

devuelve una lista cuyos elementos son


los de la lista

list1

seguidos de los de

list2 , . . . , listn

cons(elem, list)
endcons(elem, list)
delete(elem, list)
rest(list, n)
deleten(list, n)

agrega

elem

al inicio de la lista

agrega

elem

al nal de la lista

borra

elem

de la lista

list

n elementos (n > 0)
o los ltimos n elementos (n < 0) de
la lista list
borra el

n -simo

elemento de la lista

Agregar y quitar elementos de una lista.

Maxima

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

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

Maxima

al inicio de la lista dada.

( %i2) cons(x,[a,b,c]);
( %o2) [x, a, b, c]

Maxima

En este caso se inserta

list

borra los primeros

list

Aqu se inserta

list

al nal de la lista dada.

( %i3) endcons(x,[a,b,c]);
( %o3) [a, b, c, x]

Sec. 10.8. Reorganizacin de listas

141

Maxima

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

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

Maxima

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

( %i5) rest([a,g,f,c,x],-2);
( %o5) [a, g, f ]

10.8 Reorganizacin de listas


flatten(list)

elimina todos los niveles que pueda tener la lista

partition(list, x)

list

particiona la lista

list

en dos listas;

una que contiene los elementos que no


dependen de
penden de

x,

y otra, los que si de-

Funciones para reorganizar listas anidadas.

Maxima

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

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

Maxima

Esto particiona la lista

a, b, a2 + 1, c

( %i2) partition([a,b,a^2+1,c],a);



( %o2) [b, c] , a, a2 + 1

142

Cap. 10. Listas

10.9 Funciones adicionales para listas


listp(expr)
emptyp(list)
length(list)
list1 .list2

verica si

expr

verica si

list

es una lista

es una lista vaca

devuelve la longitud de

list

devuelve el producto escalar de

list1

list2

apply(f, [x1 , . . . , xn ])
map(f, [a1 , . . . , an ])
map(f, [a1 , . . . , an ] ,
[b1 , . . . , bn ] , . . .)
outermap(f, list1 ,
. . . , listn )

evala

f (x1 , . . . , xn )

devuelve la lista
devuelve

la

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

lista

f (an , bn , . . .)]
aplica la funcin

a cada uno de

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.

( %i1) length([7,9,0]);
( %o1) 3

Maxima

Aqu se usa la funcin

apply

para encontrar el elemento de mayor valor.

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

Maxima

He aqu un ejemplo en el que se usa la funcin

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

map.

Sec. 10.9. Funciones adicionales para listas

143

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.

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

Maxima

He aqu un ejemplo en el que se usa la funcin

outermap.

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

Maxima

En este ejemplo se combina el uso de la funcin


(vase

( %i26)

( %i28)

los productos escalares de

map

con una funcin annima

de la seccin 9.1) para obtener una lista que contiene

con cada una de las sublistas de

q.

( %i6) p:[x,y,z]$
q:[[a1,b1,c1],[a2,b2,c2],[a3,b3,c3]]$
( %i8) map(lambda([h],p.h),q);
( %o8) [c1 z + b1 y + a1 x, c2 z + b2 y + a2 x, c3 z + b3 y + a3 x]

CAPTULO

11

Arrays

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

crea un array de dimensin

n,

que de-

be ser menor o igual que 5


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

fixnum

flonum)

Creacin de arrays.

listarray(A)

devuelve una lista con los elementos


del array

arrayinfo(A)

devuelve informacin acerca del array

fillarray(A, B)

rellena el array

A con los valores de B ,

que puede ser una lista u otro array

Algunas funciones para arrays.

Maxima

Esto dene el array

de dimensin

2.

( %i9) array(u,2);
( %o9) u
144

145

Maxima

Esto indica que el array no tiene valores asignados.

( %i10) listarray(u);
( %o10) [#####, #####, #####]

Maxima

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

( %i11) fillarray(u,[1,-7,8]);
( %o11) u

Maxima

Esto permite visualizar los valores asignados.

( %i12) listarray(u);
( %o12) [1, 7, 8]

Maxima

Aqu se dene el array

( %i13) array(phi,1,2);
( %o13)

Maxima

Esto asigna valores a

( %i14) 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

( %i22) listarray(phi);
( %o22) [1, 1, 4, 4, 7, 5]

146

Cap. 11. Arrays

Maxima

Esto da informacin acerca de

( %i23) arrayinfo(phi);
( %o23) [declared , 2, [1, 2]]
Si el usuario asigna un valor a una variable subindicada antes de
declarar el array correspondiente, 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.

subindicada con

adios.

( %i24) t[hola]:a;
( %o24) a
Maxima

Esto asigna un valor a la variable

( %i25) t[adios]:b;
( %o25) b
Maxima

Ahora se muestran los valores asignados al array no declarado

( %i26) listarray(t);
( %o26) [b, a]

Maxima

Y tambin se muestra informacin con respecto a

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

t.

t.

CAPTULO

12

Matrices

12.1 Generacin de Matrices


Las matrices en

matrix
que

Maxima

son expresiones que comprenden el operador

y cuyos argumentos son listas (ver seccin 19.2). Esto indica

Maxima

tiene establecida una diferencia entre una matriz y una

lista de listas.

matrix([a11 , a12 , . . . , a1n ] ,


. . . , [am1 , am2 , . . . , amn ])
genmatrix(f, m, n)

devuelve una matriz de orden

devuelve una matriz


a partir de

entermatrix(m, n)

mn

mn

generada

devuelve una matriz de orden

m n,

cuyos elementos son leidos de forma


interactiva

ident(n)

devuelve la matriz identidad de orden

zeromatrix(m, n)

devuelve una matriz rectangular

mn

con todos sus elementos iguales a cero

diagmatrix(n, elem)

devuelve una matriz diagonal de orden

n con los elementos de la diagonal


elem

todos ellos iguales a

Funciones para generar matrices.

147

148

Cap. 12. Matrices

diag_matrix(d1 , d2 , . . . ,
dn )

devuelve una matriz diagonal con los


elementos

de

la

diagonal

iguales

d1 , d2 , . . . , dn

vandermonde_matrix
([x1 , . . . , xn ])
hilbert_matrix (n)

n por n, cuya
(n1)
2
sima la es [1, xi , xi , . . . , xi
]
devuelve una matriz

devuelve la matriz de Hilbert


(si

Funciones para generar matrices.

Maxima

He aqu la denicin de una matriz.

( %i1) matrix([3,1,0],[2,4,1],[1,7,2]);

3 1 0
( %o1) 2 4 1
1 7 2

Maxima

Una lista de listas no es interpretada como matriz.

( %i2) [[3,1,0],[2,4,1],[1,7,2]];
( %o2) [[3, 1, 0], [2, 4, 1], [1, 7, 2]]

Maxima

apply

puede convertirse una lista de listas a matriz.

( %i3) apply(matrix,[[3,1,0],[2,4,1],[1,7,2]]);

3 1 0
( %o3) 2 4 1
1 7 2

Maxima

Aqu se genera una matriz

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

( %i4) a[i,j]:=i-2*j $

por

no es un entero positivo, emite

un mensaje de error)

Con

i-

Sec. 12.1. Generacin de Matrices

( %i5) genmatrix(a,3,3);

1 3 5
( %o5) 0 2 4
1 1 3

Maxima

Esto genera una matriz de Vandermonde simblica.

( %i6) vandermonde_matrix([x[0],x[1],x[2]]);

1 x0 x20
( %o6) 1 x1 x21
1 x2 x22

Maxima

Esto genera una matriz de Vandermonde numrica.

( %i7) vandermonde_matrix([2,3,5]);

1 2 4
( %o7) 1 3 9
1 5 25

Maxima

He aqu una matriz de Hilbert de orden

( %i8) hilbert_matrix(3);

1 12 13
( %o8) 1 1 1
2
1
3

3
1
4

4
1
5

3.

149

150

Cap. 12. Matrices

12.2 Elegir elementos de matrices


M[ i ]
M [ i, j ]

part(M, i)
part(M, i, j)

devuelve la -sima la de la matriz


devuelve el elemento

Mi,j

Funciones para elegir elementos de matrices.

Maxima

Esto genera la matriz

mediante una funcin annima.

( %i1) A:genmatrix(lambda([i,j],i-j),3,3);

0 1 2
( %o1) 1 0 1
2 1
0

Maxima

Aqu se selecciona el elemento

A1,2 .

( %i2) A[1,2];
( %o2) 1

Maxima

Esto devuelve una matriz identidad de orden

3.

( %i3) ident(3);

1 0 0
( %o3) 0 1 0
0 0 1

Maxima

Esto selecciona la segunda la de la matriz identidad.

( %i4) %[2];
( %o4) [0, 1, 0]

de

Sec. 12.3. Operaciones matriciales

151

12.3 Operaciones matriciales


A.B

invert(M )
M p

producto matricial
devuelve la inversa de la matriz

exponenciacin matricial no conmutativa

determinant(M )

devuelve el determinante de la matriz

mat_trace(M )

devuelve la traza de la matriz cuadrada

transpose(M )

devuelve la transpuesta de la matriz

minor(M, i, j)

devuelve el menor

(i, j)

de la matriz

adjoint(M )

devuelve la matriz adjunta de la matriz

addcol(M, list1 , . . . , listn )

aade la(s) columna(s) dada(s) por


la(s) lista(s) (o matrices) a la matriz

addrow(M, list1 , . . . , listn )

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

col(M, i)

devuelve la
triz

M.

i -sima columna de la ma-

El resultado es una matriz de

una sola columna

row(M, i)

devuelve la

M.

i -sima

la de la matriz

El resultado es una matriz de una

sola la

rank(M, i, j)
setelmx(x, i, j, M )

calcula el rango de la matriz


asigna el valor
to de la matriz

x al (i,j )-simo elemenM y devuelve la matriz

actualizada

submatrix(i1 , . . . , im ,
M, j1 , . . . , jn )
submatrix(i1 , . . . , im , M )
submatrix(M, j1 , . . . , jn )
Algunas operaciones matriciales.

devuelve una nueva matriz formada a


partir de la matriz

i1 , . . . , 1m

pero cuyas las

y columnas

sido eliminadas

j1 , . . . , j n

han

152

Cap. 12. Matrices

echelon(M )

devuelve la forma escalonada de la matriz

M , obtenida por eliminacin gaus-

siana

triangularize(M )

devuelve la forma triangular superior

M , obtenida por elimina-

de la matriz

cin gaussiana

rowop(M, i, j, )

devuelve la matriz que resulta de relizar la transformacin


con las las

rowswap(M, i, j)

Fi

Fj

intercambia las las

Fi Fi Fj
M

de la matriz

de la matriz

columnop(M, i, j, )

devuelve la matriz que resulta de relizar la transformacin


con las columnas

Ci

Ci Ci Cj
Cj de la matriz

columnswap(M, i, j)

intercambia las columnas


matriz

kronecker_product(A,
B)

las matrices

Maxima

22

de variables simblicas.

( %i1) A:matrix([a,b],[c,d]);


a b
( %o1)
c d

Maxima

He aqu la transpuesta de

A.

( %i2) transpose(A);


a c
( %o2)
b d

de la

devuelve el producto de Kronecker de

Algunas operaciones matriciales.

He aqu una matriz

M
A

Sec. 12.3. Operaciones matriciales

153

Maxima

Esto da la inversa de

en forma simblica.

( %i3) invert(A);


d
b
adbc
adbc
( %o3)
a
c
adbc
adbc

Maxima

Esto da el determinante de

A.

( %i4) determinant(A);
( %o4) a d b c
Maxima

He aqu una matriz racional

3 3.

( %i5) B:genmatrix(lambda([ i,j ],1/(i+j-1)),3,3);

1 12 13
( %o5) 12 13 14
1
3

1
4

1
5

Maxima

Esto da su inversa.

( %i6) invert(B);

9
36
30
( %o6) 36 192 180
30 180 180

Maxima

Multiplicando la inversa con la matriz original se obtiene la matriz identidad.

( %i7) %.B;

1 0 0
( %o7) 0 1 0
0 0 1

154

Cap. 12. Matrices

Maxima

Aqu se dene una matriz

de orden

4 5.

( %i8) M:matrix([2,-1,2,-1,-8],[2,-2,3,-3,-20],
[1,1,1,0,-2],[1,-1,4,3,4]);

2 1 2 1 8
2 2 3 3 20

( %o8)
1 1 1 0
2
1 1 4 3
4

Maxima

de la matriz

y devuelve la matriz

F2 F2 + F1

en la matriz

y devuelve la matriz

Esto efecta el intercambio de las las

resultante.

( %i9) rowswap(M,2,1);

2 2 3 3 20
2 1 2 1 8

( %o9)
1 1 1 0
2
1 1 4 3
4

Maxima

Esto realiza la transformacin


resultante.

( %i10) rowop(M,2,1,-1);

2 1 2 1 8
4 3 5 4 28
( %o10)
1 1 1 0
2
1 1 4 3
4

Maxima

He aqu el producto de Kronecker de dos matrices.

( %i11) kronecker_product( matrix([a,b],[c,d]),


matrix([1,2,3],[4,5,6],[7,8,9]) );

Sec. 12.4. Funciones adicionales para matrices

( %o11)

a
4a
7a
c
4c
7c

2a
5a
8a
2c
5a
8c

3a
6a
9a
3c
6a
9c

b 2b 3b
4b 5b 6b
7b 8b 9b
d 2d 3d
4d 5d 6d
7d 8d 9d

155

12.4 Funciones adicionales para matrices


matrix_size(M )

devuelve una lista con dos elementos


que constituyen el nmero de las y

M,

columnas de la matriz

respectiva-

mente

matrixp(expr)
mat_norm(M, p)

verica si

expr

devuelve la

es una matriz

p -norma

de la matriz

Los valores admisibles para

inf

addmatrices(f, A, B, . . .)

frobenius

devuelve

la

(f (ai,j , bi,j , . . .))mn ,

M.
1,

son

matriz
donde

m n

es el orden comn de las matrices

mat_unblocker(M )

A, B, . . .
si M es una matriz de bloques, deshace
los bloques de un nivel

outermap(f, M1 , . . . , Mn )

aplica la funcin

a cada uno de

los elementos del producto cartesiano

M1 M2 . . . Mn
Ms funciones para matrices.

Maxima

He aqu la matriz

D.

( %i1) d[i,j]:=1+(-1)^ (i+j) $


( %i3) D:genmatrix(d,3,4);

156

Cap. 12. Matrices

2
( %o3) 0
2

0
2
0

2
0
2

0
2
0

Maxima

Esto devuelve una lista con el nmero de las y columnas de la matriz

D.

( %i4) matrix_size(D);
( %o4) [3, 4]

Maxima

Utilizando la funcin

matrixp

es posible comprobar que

es una expresin ma-

tricial.

( %i5) matrixp(D);
( %o5) true

Maxima

He aqu la norma de frobenius de la matriz

B.

( %i6) mat_norm(D,frobenius);

( %o6) 2 6

Maxima

A continuacin se denen las matrices


xados.

( %i7) A:genmatrix(a,2,3);


a1,1 a1,2 a1,3
( %o7)
a2,1 a2,2 a2,3
( %i8) B:genmatrix(b,2,3);


b1,1 b1,2 b1,3
( %o8)
b2,1 b2,2 b2,3
( %i9) C:genmatrix(c,2,3);

A, B

con elementos simblicos inde-

Sec. 12.4. Funciones adicionales para matrices

( %o9)

c1,1
c2,1

c1,2
c2,2

c1,3
c2,3

157

Maxima

Este es el resultado obtenido al aplicar


matrices

A, B

mediante la funcin

addmatrices

a las

C.

( %i10) 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 )
( %o10)
f (a2,1 , b2,1 , c2,1 ) f (a2,2 , b2,2 , c2,2 ) f (a2,3 , b2,3 , c2,3 )

Maxima

Si

es +, el resultado es

A + B + C.

( %i11) addmatrices(+,A,B,C);

c1,1 + b1,1 + a1,1 c1,2 + b1,2 + a1,2
( %o11)
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

Con

outermap

mat_unblocker

tambin es posible obtener el producto de Kro-

necker de dos matrices.

( %i12) 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
( %o12)

c 2c 3c
d 2d 3d

4c 5c 6c 4d 5d 6d
7c 8c 9c
7d 8d 9d
( %i13) mat_unblocker( %);

158

Cap. 12. Matrices

( %o13)

a
4a
7a
c
4c
7c

2a
5a
8a
2c
5a
8c

3a
6a
9a
3c
6a
9c

b 2b 3b
4b 5b 6b
7b 8b 9b
d 2d 3d
4d 5d 6d
7d 8d 9d

12.5 Matrices asociadas a sistemas de ecuaciones


coefmatrix([eq1 , . . . , eqm ],
[x1 , . . . , xn ])

devuelve la matriz de coecientes para


las variables

x1 , . . . , xn del sistema
eq1 , . . . , eqm

de

ecuaciones lineales

augcoefmatrix([eq1 , . . . ,
eqm ], [x1 , . . . , xn ])

devuelve la matriz aumentada de coecientes para las variables


del

sistema

de

x1 , . . . , x n

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.

( %i1) coefmatrix([2*x-3*y=1,x+y=3],[x,y]);


2 3
( %o1)
1 1

Maxima

Esta es la matriz aumentada del mismo sistema anterior.

( %i2) augcoefmatrix([2*x-3*y=1,x+y=3],[x,y]);


2 3 1
( %o2)
1 1 3

Sec. 12.6. Autovalores y autovectores

159

Maxima

Aqu se hace la transformacin

F2 F2 12 F1

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.

( %i3) rowop( %,2,1,1/2);


#
"
2 3 1
5
5
( %o3)

0
2
2

12.6 Autovalores y autovectores


charpoly(M, x)

calcula el polinomio caracterstico vinculado a la matriz


la variable

eigenvalues(M )

M,

en trminos de

devuelve una lista con dos sublistas, la


primera de stas conteniendo los valores propios de la matriz

y la segun-

da, conteniendo sus correspondientes


multiplicidades

eigenvectors(M )

devuelve una lista con dos elementos;

el

primero

eigenvalues(M ),

est

formado

por

el segundo es una

lista de listas de vectores propios, una


por cada valor propio, pudiendo haber
ms de un vector propio en cada lista

Obtencin de autovalores y autovectores asociados a una matriz dada.

Maxima

He aqu una matriz

3 3.

( %i1) c[i,j]:=i+j+1$ C:genmatrix(c,3,3);

3 4 5
( %o1) 4 5 6
5 6 7

160

Cap. 12. Matrices

Maxima

ste es el polinomio caracterstico, en trminos de la variable x, asociado a la


matriz

C.

( %i2) charpoly(C,x),expand;
( %o2) x3 + 15 x2 + 6 x

Maxima

Aqu se tienen los valores propios, y su respectiva multiplicidad, asociados a la


matriz

C.

( %i3) eigenvalues(C);
hh
i
i

( %o3) 24915
, 249+15
, 0 , [1, 1, 1]
2
2

Maxima

Finalmente, se muestran los valores propios, con su respectiva multiplicidad, y


vectores propios de la matriz

C.

( %i4) eigenvectors(C);
hhh
i
i

( %o4)
24915
, 249+15
, 0 , [1, 1, 1] ,
2
2
hhh
ii


3 835
1, 24919
,

,
28
14
hh
ii
ii

3 83+5
,
,
[[1,
2,
1]]
1, 249+19
28
14

CAPTULO

13

Conjuntos

Los conjuntos en
dor

Maxima

son expresiones que comprenden el opera-

set y cuyos argumentos son los elementos del mismo (ver seccin

19.2). Esto indica que

Maxima

hace una diferencia entre conjuntos y

listas, lo que permite trabajar con conjuntos cuyos elementos puedan


ser tambin conjuntos o listas.

Maxima

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 enumeracin.

13.1 Generacin de conjuntos


set(a1 , . . . , an )

construye un conjunto cuyos elementos son

{a1 , . . . , an }

set()
{}
makeset(f, vars, s)

a1 , . . . , an

equivale a

set(a1 , . . . , an )

genera un conjunto vaco


equivale a

set()

genera un conjunto cuyos miembros se


generan a partir de

f , siendo vars una


f y s un conjunto

lista de variables de
o lista de listas

Funciones para generar conjuntos.


161

162

Cap. 13. Conjuntos

Maxima

He aqu un conjunto formado por los elementos

a, b, c, d.

( %i1) {a,b,c,d};
( %o1) {a, b, c, d}

Maxima

Al ingresar un conjunto cuyos elementos estn desordenados y repetidos, stos


son ordenados y unicados de forma automtica.

( %i2) {c,e,f,f,a,b,c,d,a};
( %o2) {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) makeset(i/j,[i,j],[[1,a],[2,b],[3,c],[4,d]]);


( %o3) a1 , 2b , 3c , d4

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) makeset(x/2,[x],{[1],[2],[3],[4],[5]});


( %o4) 12 , 1, 32 , 2, 52

Maxima

Las operaciones aritmticas son listables.

( %i5) x^[1,2,3];


( %o5) x, x2 , x3

Maxima

Sin embargo, las operaciones aritmticas no son conjuntables.

( %i6) x^{1,2,3};

Sec. 13.2. Conversiones entre conjuntos y listas

163

( %o6) x{1,2,3}
Maxima

La sustitucin si es conjuntable, aunque siempre respetando la unicacin.

( %i7) {x,x^2,x^3,x+1},x=1;
( %o7) {1, 2}

13.2 Conversiones entre conjuntos y listas


setify(list)

forma un conjunto a partir de los


miembros de la lista

fullsetify(list)

list

sustituye los operadores de lista presentes en

conj

por operadores de con-

juntos

Conversiones de listas a conjuntos.

listify(conj)

forma una lista a partir de los miembros del conjunto

full_listify(conj)

conj

sustituye los operadores de conjunto


presentes en
listas

Conversiones de conjuntos a listas.

Maxima

Esto convierte una lista en conjunto.

( %i1) setify([a,c,d,e]);
( %o1) {a, c, d, e}

Maxima

Esto convierte un conjunto en lista.

( %i2) listify({a,b,c,d});

conj

por operadores de

164

Cap. 13. Conjuntos

( %o2) [a, b, c, d]

Maxima

Esto sustituye todos los operadores de conjuntos a operadores de listas.

( %i3) fullsetify([a,[b,c],[e,[f,g]],k]);
( %o3) {a, {b, c} , {e, {f, g}} , k}

Maxima

Esto sustituye todos los operadores de listas a operadores de conjuntos.

( %i4) full_listify( %);


( %o4) [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)

devuelve el
junto

conj

i -simo

elemento del con-

respetando el ordenamien-

to y la unicacin internos

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

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

conj

devuelve el ltimo elemento de

conj

Seleccin de partes de un conjunto.

Maxima

Aqu se obtiene el primer elemento de un conjunto que ha sido ordenado y unicado internamente.

( %i1) part({b,c,c,d,a},1);

Sec. 13.4. Prueba y bsqueda de elementos de un conjunto

165

( %o1) a

Maxima

El quinto elemento no existe.

( %i2) 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 )

extrae todos los elementos de un conjunto

conj

que satisfacen el predicado

subsetp(conj1 , conj2 )
elementp(x, conj)

devuelve

true

si y slo si

con1 conj2

devuelve

true

si y slo si

x es elemento

del conjunto

member(x, conj)

devuelve

true

del conjunto

freeof(x, conj)

prueba si

conj
si y slo si

x es miembro

conj

x no ocurre en ninguna parte

conj

freeof(x1 . . . , xn , conj)

equivale a f reeof (x1 ; conj) and . . .


and f reeof (xn ; conj)

Prueba de elementos de un conjunto.

Maxima

En este ejemplo se extrae, del conjunto

{1, 2, 3, 4, 5, 7}

los elementos pares.

( %i1) subset({1,2,3,4,5,7},evenp);

, el subconjunto de todos

166

Cap. 13. Conjuntos

( %o1) {2, 4}

Maxima

Aqu se extrae, del conjunto

tales que

{1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

t < 4.

( %i2) subset({1,2,3,4,5,7},lambda([t],is(t<4)));
( %o2) {1, 2, 3}

Maxima

Aqu se extrae, del conjunto

tales que

{1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

mod(t, 3) = 1.

( %i3) subset({1,2,3,4,5,7},
lambda([t],is(mod(t,3)=1)));
( %o3) {1, 4, 7}

Maxima

Esto verica una contencin de conjuntos.

( %i4) subsetp({1,2},{5,6,7,9,1,2});
( %o4) true

Maxima

Esto verica que el elemento

pertenece al conjunto

( %i5) elementp(2,{2,4,5,7});
( %o5) true

Maxima

La funcin genrica

member

realiza los mismo.

( %i6) member(2,{2,4,5,7});
( %o6) true

{2, 4, 5, 7}.

Sec. 13.5. Agregar y quitar elementos de un conjunto

167

Maxima

La funcin genrica

f reeof

indica que

forma parte del conjunto

{2, 4, 5, 7}.

( %i7) freeof(2,{2,4,5,7});
( %o7) f alse

Maxima

La funcin genrica

f reeof

indica que

6 y 5 no forman parte del conjunto {1, 2, 3}.

( %i8) freeof(6,5,{1,2,3});
( %o8) 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

adjoin(x, conj)

Maxima.

devuelve el conjunto
mento

disjoin(x, conj)

devuelve el conjunto
mento

Funciones para agregar y quitar elementos de un conjunto.

Maxima

Aqu se inserta el elemento

en el conjunto

( %i1) adjoin(2,{1,4,7});
( %o1) {1, 2, 4, 7}

Maxima

Esto elimina el elemento

de

{1, 4, 7}.

( %i2) disjoin(4,{1,4,7});
( %o2) {1, 7}

conj

con el ele-

conj

sin el ele-

insertado

{1, 4, 7}.

168

Cap. 13. Conjuntos

13.6 Reorganizacin de conjuntos


flatten(conj)
set_partitions(conj)

elimina todos los niveles en

devuelve el conjunto de todas las particiones de

set_partitions(conj, n)

conj

conj

devuelve un conjunto con todas las


descomposiciones de

conj en n conjun-

tos no vacos disjuntos

Reorganizacin de conjuntos anidados.

Maxima

He aqu un conjunto al que se le eliminan todos los niveles.

( %i1) flatten({4,{1,3},{4,{7,8}},10});
( %o1) {1, 3, 4, 7, 8, 10}

Maxima

Esto da todas las particiones de


del mismo

{a, b, c}

{a, b, c};

y, seguidamente las descomposiciones

en dos conjuntos no vacos disjuntos.

( %i2) set_partitions({a,b,c});
( %o2) {{{a} , {b} , {c}} , {{a} , {b, c}} , {{a, b} , {c}} ,
{{a, b, c}} , {{a, c} , {b}}}
( %i3) set_partitions({a,b,c},2);
( %o3) {{{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.

Sec. 13.7. Operaciones con conjuntos

union(conj1 , . . . , conjn )

169

devuelve la unin de los conjuntos

conj1 , . . . , conjn

intersection(conj1 ,
. . . , conjn )
setdifference(conj1 ,
conj2 )
powerset(conj)
subsetp(conj1 , conj2 )

devuelve la interseccin de los conjuntos

conj1 , . . . , conjn

devuelve la diferencia de los conjuntos

conj1 , conj2
devuelve el conjunto potencia de
devuelve

conj1

setequalp(conj1 , conj2 )

true

conj1

symmdifference(conj1 ,
conj2 )
cartesian_product(
conj1 , . . . , conjn )

si y slo si el conjunto

es un subconjunto de

true

devuelve
y

conj2

conj

conj2

si y slo los conjuntos


son iguales

devuelve la diferencia simtrica de los


conjuntos

conj1 , conj2

devuelve el producto cartesiano de los


conjuntos

conj1 , . . . , conjn

en forma

de listas

disjointp(conj1 , conj2 )

devuelve

conj1

equiv_classes(conj, F )

true

conj2

si y slo si los conjuntos


son disjuntos

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.

( %i1) A:{a,b,c,d}$ B:{c,d,e,f,g}$

Maxima

Esto da la unin de

B.

( %i3) union(A,B);
( %o3) {a, b, c, d, e, f, g}

170

Cap. 13. Conjuntos

Maxima

Y esto la interseccin.

( %i4) intersection(A,B);
( %o4) {c, d}

Maxima

La diferencia

AB

se calcula as.

( %i5) setdifference(A,B);
( %o5) {a, b}

Maxima

En este caso las diferencias simtricas

A B

B A

son iguales.

( %i6) symmdifference(A,B);
( %o6) {a, b, e, f, g}

Maxima

He aqu el conjunto potencia del conjunto

A.

( %i7) powerset(A);
( %o7) {{} , {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.

( %i8) cartesian_product(A,B);
( %o8) {[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]}

Sec. 13.8. Funciones adicionales para conjuntos

171

Maxima

Esto indica que los conjuntos

no son disjuntos.

( %i9) disjointp(A,B);
( %o9) f alse

Maxima

En este ejemplo, las clases de equivalencia son nmeros que dieren en un mltiplo
de

3.

( %i10) equiv_classes({1,2,3,4,5,6,7},lambda([s,t],
mod(s-t,3)=0));
( %o10) {{1, 4, 7} , {2, 5} , {3, 6}}

13.8 Funciones adicionales para conjuntos


setp(expr)

devuelve

true

conjunto de

emptyp(conj)

devuelve

si y slo si

Maxima

true

si y slo si

expr
conj

es un

es el

conjunto vaco

cardinality(conj)
map(f, {a1 , . . . , an })
map(f, {a1 , . . . , an } ,
{b1 , . . . , bn } , . . .)

devuelve el nmero de elementos del


conjunto

conj

devuelve

{f (a1 ), . . . , f (an )}

devuelve el conjunto

. . . , f (an , bn , . . .)},

{f (a1 , b1 , . . .),

siempre

que

conjuntos estn bien ordenados

Algunas funciones adicionales.

Maxima

He aqu el cardinal de un conjunto.

( %i1) cardinality({a,b,c,a});
( %o1) 4

los

172

Cap. 13. Conjuntos

Maxima

Para conjuntos bien ordenados, al aplicar la funcin

map,

se obtiene un resultado

acorde con el ordenamiento de tales conjuntos.

( %i2) map(f,{a,b,c},{x,y,z});
( %o2) {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)

( %i3) map(f,{c,a,b},{y,x,z});
( %o3) {f (a, x), f (b, y), f (c, z)}

CAPTULO

14

Grcos

Maxima

no ha sido programado para elaborar sus propios grcos, de

modo que alternativamente utiliza un programa externo que realiza


esta tarea. El usuario se limita a ordenar el tipo de grco deseado y

Maxima

se encarga de comunicrselo al programa grco que est ac-

Gnuplot. La otra aplicacin


Openmath 1 .

tivo en ese momento, que por defecto ser


grca que utiliza
Las funciones

Maxima

es

plot2d y plot3d2

son funciones para obtener gr-

cos que estn denidas en el propio ncleo de

Maxima

(tngase pre-

sente que existen otras funciones similares denidas en un paquete


llamado

draw3 ).

Lo antes mencionado ocasiona que los grcos generados con las


funciones

plot2d

plot3d

se muestren en una ventana aparte del

cuaderno de trabajo actual. No obstante, en contraparte,

wxMaxima

incorpora funciones alternativas, cuyos nombres se obtienen anteponiendo

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

como Openmath son softwares libres y una copia de cada uno

de ellos es distribuida conjuntamente con Maxima.

2 Con plot2d

plot3d

es posible dar instrucciones tanto a Gnuplot como a

Openmath sin que sea necesario tener conocimiento alguno de la sintaxis de estos
programas.

3 El

draw (ver el captulo 16) est orientado exclusivamente a Gnuplot.


draw2d y draw3d, las cuales dan resultados similares
plot3d. Adems incorpora funciones para gracar funciones denidas

paquete

ste incorpora las funciones


a

plot2d

implcitamente.

173

174

Cap. 14. Grcos

14.1 Grcos bsicos


Por comodidad, la mayora de los ejemplos de esta seccin se ejecutarn con las funciones incorporadas en

wxMaxima ;

sin embargo,

todos estos ejemplos pueden ser ejecutados sin ningn problema con
las funciones estndar de

Maxima.

plot2d(f, [x, xmin , xmax ])

muestra un grco de

xmin x xmax ,

y = f (x),

con

en una ventana in-

dependiente

plot2d([f1 , . . . , fn ] ,
[x, xmin , xmax ])

y = f1 (x),
xmin x xmax ,

muestra un grco de

. . . , y = fn (x),

con

en una ventana independiente

wxplot2d(f, [x, xmin ,


xmax ])

muestra un grco de

xmin x xmax ,

y = f (x),

con

en el cuaderno de

trabajo actual

wxplot2d([f1 , . . . , fn ] ,
[x, xmin , xmax ])

y = f1 (x),
xmin x xmax ,

muestra un grco de

. . . , y = fn (x),

con

en el cuaderno de trabajo actual

Trazado bsico de funciones.

Maxima

Esto traza un grco de


hasta

sen(x)

como una funcin de

2 .

( %i1) wxplot2d(sin(x),[x,0,2* %pi]);

( %t1)

( %o1)

x.

Para

variando desde

Sec. 14.1. Grcos bsicos

175

Maxima

Puede darse una lista de funciones para que sean trazadas. Por defecto, a cada
funcin se le asigna un color especco.

( %i2) wxplot2d([sin(x),sin(2*x),sin(3*x)],
[x,0,2* %pi]);

( %t2)

( %o2)

Maxima

Aqu se utiliza la funcin


Bessel,

Jn (x),

con

create_list

variando desde

para generar una lista de las funciones de


hasta

4.

Luego se devuelve la grca de

dichas funciones.

( %i3) wxplot2d(create_list(bessel_j(n,x),n,1,4),
[x,0,10]);

( %t3)

( %o3)

176

Cap. 14. Grcos

14.2 Opciones
Hay muchas opciones para escoger en el trazado de grcos. La mayora de las veces, la aplicacin grca invocada por

Maxima

proba-

blemente 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

Maxima. Cada opcin tiene un nombre denido. Como ltimos


plot2d (wxplot2d), se puede incluir
[nombre, valor] para especicar los valores

argumentos de una funcin, como


una secuencia de la forma

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 grfico.

Opcin
y
nticks

Val. por defecto

Descripcin

no presenta

rango vertical del grco

29

nmero inicial de puntos utilizados por el procedimiento


adaptativo para la representacin de funciones

adapt_depth

10

nmero mximo de particiones utilizado por el algoritmo


adaptativo de representacin
grca

xlabel

ylabel

nombre

etiqueta del eje horizontal en


grcos 2d

de

la

funcin , dada

Algunas de las opciones de plot2d (wxplot2d).

etiqueta del eje vertical en


grcos 2d

Sec. 14.2. Opciones

Opcin
logx

177

Val. por defecto

Descripcin

no presenta

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

de

la

funcin , dada

etiquetas para las expresiones de los grcos 2d. Si hay


ms expresiones que etiquetas, stas se repetirn

style

lines,1,1

estilos a utilizar para las funciones o conjuntos de datos


en grcos 2d

gnuplot_
preamble

 

introduce

instrucciones

de

gnuplot antes de que se haga


el dibujo

plot_format

gnuplot

gnuplot_term

default

determina qu programa grco se va a utilizar


establece el terminal de salida para Gnuplot; algunos va-

dumb, png,
jpg, eps, pdf, gif, svg, etc. (eslores posibles son:

ta opcin nicamente puede

plot2d, y no
wxplot2d)
plot_realpart vale true,

utilizarse con
con

plot_realpart

false

si

se representar la parte real


de un valor complejo

run_viewer

true

controla si el visor apropiado para la salida grca debe


ejecutarse o no

Algunas de las opciones de plot2d (wxplot2d).

178

Cap. 14. Grcos

Maxima

He aqu un grco para el cual todas las opciones tienen asignados sus valores por
defecto.

( %i1) wxplot2d(sin(x^2),[x,0,3]);

( %t1)

( %o1)

Maxima

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.

La instruccin
cin

( %i2) wxplot2d(sin(x^2),[x,0,3],[gnuplot_preamble,
set size ratio 1; set grid]);

( %t2)

( %o2)

Sec. 14.2. Opciones

179

Maxima

Esto especica el estilo del grco y la etiqueta para el eje y.

( %i3) wxplot2d(sin(x^2),[x,0,3],[style,[points,3,2,7]],
[ylabel,y]);

( %t3)

( %o3)

Maxima

Las expresiones que se dan como etiquetas puede ser cualquier porcin de texto,
pero sta debe ponerse entre comillas.

( %i4) wxplot2d(sin(x^2),[x,0,3],
[xlabel,Porcin de texto para x],
[ylabel,Porcin de texto para y]);

( %t4)

( %o4)

180

Cap. 14. Grcos

Maxima

Es posible trazar funciones que tienen singularidades. Para este efecto resulta
bastante til la opcin

que permite indicar el rango.

( %i5) wxplot2d(tan(x),[x,-3,3],[y,-10,10]);
plot2d: some values were clipped.

( %t5)

( %o5)

14.3 Grcos de puntos y lneas


Con

plot2d (wxplot2d) pueden gracarse puntos del plano (aislados)

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

Grficos de puntos aislados y poligonales.

(x1 , y1 ), . . . (xn , yn )

Sec. 14.3. Grcos de puntos y lneas

plot2d([ discrete,
[x1 , . . . , xn ] , [y1 , . . . , yn ] ] ,
[style, lines])
plot2d([ discrete,
[[x1 , y1 ] , . . . , [xn , yn ]] ] )
plot2d([ discrete,
[x1 , . . . , xn ] , [y1 , . . . , yn ] ]
)

181

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 )

devuelve el grco de una poligonal


que une los puntos

(x1 , y1 ), . . . (xn , yn )

Grficos de puntos aislados y poligonales.

Maxima

De esta forma se graca una lista de puntos aislados.

( %i1) pts:create_list([i,sin(i)],i,0,5);
( %o1) [[0, 0] , [1, sin(1)] , [2, sin(2)] , [3, sin(3)] , [4, sin(4)] ,
[5, sin(5)]]
( %i2) wxplot2d([discrete,pts],[style,points]);

( %t2)

( %o2)
Cabe destacar que los estilos

points

lines

tambin aceptan

opciones. stas deben ingresarse como una secuencia de tres nmeros enteros positivos de la forma

points),

[points n1 , n2 , n3 ]

(en el caso de

[lines n1 , n2 ]
lines). En ambos casos el primer valor, n1 , correspon-

o dos nmeros enteros positivos de la forma

(en el caso de

de al tamao de los puntos o grosor de la lnea, segn sea el caso; el

azul, 2 rojo, 3 verde, 4 violeta, 5


points est el tercer valor, n3 ,
que corresponde a la forma en que se visualiza el punto (1 disco,
2 crculo, 3 cruz, 4 aspa, 5 asterisco, 6 cuadrado relleno,
segundo,

n2 ,

al color (1

negro, 6 celeste ).

Finalmente para

182

Cap. 14. Grcos

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

%o9 con opciones que cambian el tamao,

color y forma de los mismos.

( %i3) wxplot2d([discrete,pts],[style,[points,3,2,5]]);

( %t3)

( %o3)

Maxima

Aqu se muestran los puntos de la salida

%o9

unidos por una lnea quebrada.

( %i4) wxplot2d([discrete,pts],[style,lines]);

( %t4)

( %o4)

Sec. 14.4. Grcos paramtricos y polares

183

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

Grficos de curvas definidas 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

Grficos de curvas definidas en forma polar.

Maxima

Esto devuelve la grca de la curva

t (cos(t), sen(t))

para

t [0, 2].

( %i1) wxplot2d([parametric,cos(t),sin(t),[t,0,2* %pi]]);

( %t1)

( %o1)

184

Cap. 14. Grcos

Maxima

Utilizando las opciones adecuadas es posible mejorar la presentacin de la salida

( %t1)

( %i2) wxplot2d(
[parametric,cos(t),sin(t),[t,0,2* % pi]],
[gnuplot_preamble,set size ratio 1],
[nticks,100]
);

( %t2)

( %o2)

Maxima

Esto devuelve la grca de

= sen(2t).

( %i3) wxplot2d(sin(2*t),[t,0,2* %pi],


[gnuplot_preamble,set polar],[x,-1,1]);

( %t3)

( %o3)

Sec. 14.5. Combinacin de grcos

185

14.5 Combinacin de grcos


Adicionalmente, la funcin

plot2d (wxplot2d) permite combinar va-

rios tipos de grcos (salvo los polares) y presentarlos en un mismo


sistema coordenado.

Maxima

Aqu se combinan varios tipos de grcos.

( %i1) pts:create_list([i,sin(i)] , i, 0, 5) $
( %i2) wxplot2d([
[parametric,cos(t),sin(t)],[t,0,2* %pi]
sin(x^2),
[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.

( %t2)

( %o2)

14.6 Grcos de supercies tridimensionales


R3 se utiliza la funcin plot3d (wxplot3d).
que, al utilizar la funcin wxplot3d el grco

Para gracar supercies en


Es preciso mencionar

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

186

Cap. 14. Grcos

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 ])

z = f (x, y), con


ymin y ymax ,

muestra un grco de

xmin x xmax

en el cuaderno de trabajo actual y no


hay interaccin en tiempo real con el
grco

Trazado bsico de funciones 3D.

Al igual que

plot2d (wxplot2d),

la funcin

plot3d (wxplot3d)

tambin incluye una serie de opciones para obtener los mejores dibujos
posibles.

Maxima

Esto traza un grco de la funcin

f (x, y) = sen(xy).

( %i1) wxplot3d(sin(x*y),[x,0,3],[y,0,3]);

( %t1)

( %o1)

Sec. 14.6. Grcos de supercies tridimensionales

187

Opcin

Val. por defecto

Descripcin

grid

30, 30

establece el nmero de puntos de la rejilla en las direcciones

transform_xy

false

se usa para transformar las


tres coordenadas

gnuplot_term
gnuplot_
preamble
plot_format

default
 

similar a

plot2d
plot2d

similar a

plot2d

similar a

gnuplot

(pg. 177)
(pg. 177)

(pg. 177)

Algunas de las opciones de plot3d (wxplot3d)

Maxima

Esto traza un grco de

f (x, y) = sen(xy)

con el programa grco

( %i2) plot3d(sin(x*y),[x,0,3],[y,0,3],
[plot_format,openmath]);
( %o2)

Figura 14.1:

Grco obtenido a partir de

( %i2)

openmath.

188

Cap. 14. Grcos

Maxima

Esto traza un grco tridimensional de la supercie denida por

r033 cos( th
)
3

en

coordenadas cilndricas. En este caso se ha realizado una transformacin de coordenadas. El usuario puede denir sus propias transformaciones usando la funcin

make_transform(vars, fx , fy , fz ). Por ejemplo, aqu se ha usado la transformacin


polar_to_xy : make_transform([r, th, z] , r cos(th), r sin(th), z).

( %i3) wxplot3d(r^.33*cos(th/3),
[r,0,1],[th,0,6* %pi],
[grid,12,80],
[transform_xy,polar_to_xy]);

( %t3)

( %o3)

plot3d (wxplot3d)

tambin permite trazar la grca de una su-

percie denida en forma paramtrica; sin embargo, no permite gracar curvas en

R3 .

plot3d([x(u, v), y(u, v),


z(u, v)] , [u, umin , umax ] ,
[v, vmin , vmax ])

traza el grco de una supercie paramtrica en una ventana independiente, siendo posible la interaccin en
tiempo real con dicho grco

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 superficies definidas en forma paramtrica.

Sec. 14.6. Grcos de supercies tridimensionales

189

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 , 2 v

.
2

( %i4) wxplot3d([cos(u)*cos(v),sin(u)*cos(v),sin(v)],
[u,0,2* %pi],[v,- %pi/2, %pi/2]);

( %t4)

( %o4)

Maxima

Utilizando las opciones adecuadas es posible mejorar la presentacin de la salida

%o21.

( %i5) 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]);

( %t5)

( %o5)

190

Cap. 14. Grcos

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

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

igualmente espaciados.

grco

de

densidad

de

f (x, y) en el rectngulo [xmin , xmax ]


[ymin , ymax ]

dibuja

las

curvas

de

nivel

f (x, y)
en
el
rectngulo
[xmin , xmax ] [ymin , ymax ] (cualesde

quiera otros argumentos adicionales


se tratan como en

plot3d)

Grficos de contornos.

Maxima

Esto traza un grco de densidad de la funcin

f (x, y) = sen(xy)

[0, 3] [0, 3].

( %i1) wxplot3d(sin(x*y),[x,0,3],[y,0,3],
[gnuplot_preamble,set pm3d map]);

( %t1)

( %o1)

en el rectngulo

Sec. 14.8. Grcos animados

191

Maxima

He aqu un grco de contorno de

f (x, y) = x2 + y 2 1.

( %i2) contour_plot(x^2+y^2-1,[x,-1,1],[y,-1,1]);

( %t2)

( %o2)

14.8 Grcos animados


Tambin es posible crear animaciones, aunque nicamente en el en-

wxMaxima.

with_slider4
con la cual se genera un grco idntico al que se genera con wxplot2d,
torno de

Para tal n se utiliza la funcin

sin embargo dicho grco puede ser animado selecionndolo y pulsando luego el botn

Comenzar animacin,

del cuadro de controles,

de la barra de herramientas.

Figura 14.2:

Cuadro de controles, ubicado en la barra de herramientas, para la animacin de grcos.

with_slider

funcin

wxplot2d

para

animar

grcos

de

Obtencin de grficos animados.

4 Es

importante sealar que adicionalmente estan incluidas las funciones

with_slider_draw y with_slider_draw3d
draw3d del paquete draw.

relacionadas con las funciones

draw

192

Cap. 14. Grcos

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

, despus de haber seleccionado

el grco.

( %i1) with_slider(a,[0,1,2,3,4,5],sin(x+a),
[x,-2* %pi,2* %pi],[y,-1.5,1.5],[color,red]);

( %t1)

( %o1)

Maxima

He aqu otro grco listo para animar.

( %i2) with_slider(f,[x,x^2,x^3,x^4],f,[x,-2,2]);

( %t2)

( %o2)

Sec. 14.8. Grcos animados

193

Maxima

Este es un grco ms listo para animar.

( %i3) 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]);

( %t3)

( %o3)

CAPTULO

Utilidades de los menes de

wxMaxima

15

wxMaxima

contiene mens y cuadros de dilogo para realizar las ta-

reas ms rutinarias, facilitando as al usuario novel el explorar las

Maxima.

caractersticas de

En este captulo repasaremos las principales opciones de los menes incorporados en la barra de menes de

wxMaxima.

15.1 El men Archivo


El men

Abrir

Archivo

incluye las opciones (ver Fig. 15.1):

Permite abrir una sesin previamente guardada,

Abrir sesin reciente

Permite abrir una sesin recientemente guar-

dada,

Guardar

Permite guardar la sesin actual,

Guardar como

Permite guardar, con otro nombre, la sesin actual,

Cargar paquete

Permite inicializar un paquete indicando su ubica-

cin,

Archivo por lotes

Permite inicializar y traducir un paquete, de ex-

tensin mac, indicando su ubicacin,


194

Sec. 15.1. El men

Figura 15.1:

Figura 15.2:

Exportar

Archivo

195

Despliegue de opciones del men

Eleccin de la opcin

Archivo.

Cargar paquete.

AT X y HTML (ver Cap.


Permite exportar archivos al L
E

18),

Imprimir
Salir

Permite realizar la impresin del cuaderno actual,

Finaliza la sesin actual.

Por ejemplo, la gura 15.2 muestra la eleccin de la opcin Cargar


paquete (tambin puede hacerse presionando en simultneo Ctrl+L).
Despus de elegir tal opcin aparece el cuadro de la gura 15.3 en el
que se elegir el paquete a cargar. Luego de indicar el tipo (que puede
ser mac o lisp) y el nombre del paquete (teniendo en cuenta la ruta
especca de donde esta guardado el mismo) se da clic en el botn


Abrir . En
1 El

autor

nuestro caso elegiremos el paquete

de

ste

paquete

es

Ziga

Lenarcic

table.lisp.1
puede

descargarse

des-

http://sourceforge.net/apps/phpbb/maxima/viewtopic.php?f=3&t=5&sid=
716969b0736cc8416d959fdc5aded01e
de:

Cap. 15. Utilidades de los menes de wxMaxima

196

Figura 15.3:

Cuadro para elegir el paquete a cargar.

Maxima


Abrir .

He aqu la sentencia que aparece despus de haber elegido el paquete


y presionar

table.lisp

( %i1) load(D:/maximapackages/table.lisp)$

Maxima

Ahora es posible usar la funcin


con

variando de

table para generar una lista de los valores sen(t),

y un incremento de

.
4

( %i2) table(sin(t),[t,0,2* %pi, %pi/4]);


( %o2) [0, 12 , 1, 12 , 0, 12 , 1, 12 , 0]

Maxima

En este caso se asume que el lmite inferior es

( %i3) table(i^2,[i,5]);
( %o3) [1, 4, 9, 16, 25]

1.

Sec. 15.2. El men

Editar

197

15.2 El men Editar


El men

Editar

Deshacer

incluye las opciones (ver Fig. 15.4):

Deshace cualquier entrada previa de una celda actual,

Cortar

Corta cualquier entrada previa,

Copiar

Copia cualquier entrada previa,

Copiar como texto

Copia la seleccin de una salida (o un conjunto

de celdas) como texto,

Copiar como LaTeX

Copia la seleccin de una salida (o un con-

AT X,
junto de celdas) como cdigo L
E

Copiar como imagen

Copia la seleccin de una salida (o un con-

junto de celdas) como imagen,

Pegar

Permite pegar el contenido del portapapeles en el cuaderno

actual,

Buscar

Permite buscar una expresin en el cuaderno actual,

Seleccionar todo

Selecciona el contenido de todas las celdas del

cuaderno actual actual,

Guardar seleccin en imagen

Guarda la seleccin de una salida

(o un conjunto de celdas) como imagen,

Ampliar

Permite ampliar el tamao de los caracteres del cuaderno

actual,

Disminuir

Permite disminuir el tamao de los caracteres del cua-

derno actual,

Establecer aumento

Permite establecer el aumento del tamao de

los caracteres del cuaderno actual,

Pantalla completa

Permite realizar una vista en pantalla completa

del cuaderno actual,

Preferencias

Permite editar la conguracin de las opciones y esti-

los (ver Sec. 3.3).

Cap. 15. Utilidades de los menes de wxMaxima

198

Figura 15.4:

Despliegue de opciones del men

Editar.

A modo de ejemplo, seleccionaremos las celdas del cuaderno de la


gura 15.5 luego elegimos la opcin

Copiar como LaTeX del men

Editar (ver Fig. 15.6). Al pegar el contenido del portapapeles en algn


AT X, y compilar, se obtiene la salida que se muestra a
editor de L
E
continuacin:

Salida obtenida, con el cdigo guardado, mediante un editor de L TEX

(%i1) load("D:/maximapackages/table.lisp")$
(%i2) table(sin(t),[t,0,2*%pi,%pi/4]);
( %o2)

1
1
1
1
[0, , 1, , 0, , 1, , 0]
2
2
2
2

(%i3) table(i^2,[i,5]);
( %o3)

[1, 4, 9, 16, 25]

En cambio, si se elige la opcin

Guardar seleccin en imagen

del mismo men, y se siguen las respectivas indicaciones, se obtiene


un archivo png (ver Fig. 15.7), que puede insertarse luego en cualquier
documento.

Sec. 15.2. El men

Figura 15.5:

Figura 15.6:

199

Cuaderno para el ejemplo de esta seccin.

Eligiendo la opcin opcin


men

Figura 15.7:

Editar

Editar.

Copiar como LaTeX

Imagen guardada mediante la opcin

cin en imagen del men Editar.

del

Guardar selec-

Cap. 15. Utilidades de los menes de wxMaxima

200

15.3 El men Celda


El men

Editar

incluye las opciones (ver Fig. 15.8):

Evaluar celdas

Evala las celdas seleccionadas del cuaderno actual,

Evaluar todas las celdas

Evala todas las celdas del cuaderno ac-

tual,

Borrar todos los resultados

Borrar todas las salidas del cuaderno

actual,

Copiar entrada anterior

Copia la entrada previa en el cuaderno

actual,

Autocompletar

Muestra un conjunto de posibles trminos que com-

pletaran la entrada actual,

Mostrar plantilla

Muestra un conjunto de posibles plantillas que

completaran la entrada actual,

Nueva celda de entrada

Inserta una celda de entrada en el cua-

derno actual(ver Sec. 3.2),

Nueva celda de texto

Inserta una celda de texto el cuaderno ac-

tual (ver Sec. 3.2),

Nueva celda de subseccin

Inserta una celda de subseccin el cua-

derno actual (ver Sec. 3.2),

Nueva celda de seccin

Inserta una celda de seccin el cuaderno

actual (ver Sec. 3.2),

Nueva celda de ttulo

Inserta una celda de ttulo el cuaderno ac-

tual (ver Sec. 3.2),

Insertar salto de pgina

Inserta un salto de pgina en el cuaderno

actual,

Insertar imagen

Permite insertar una imagen en el cuaderno ac-

tual (cabe destacar que tal imagen no prevalece al guardar el


cuaderno),

Instruccin anterior

Permite navegar hacia atrs entre las instruc-

ciones dadas en el cuaderno actual (al estilo MatLab),

Sec. 15.3. El men

Figura 15.8:

Celda

201

Despliegue de opciones del men

Figura 15.9:

Siguiente instruccin

Activando la opcin

Celda.

Autocompletar.

Permite navegar hacia adelante entre las ins-

trucciones dadas en el cuaderno actual (al estilo MatLab).

Por ejemplo, si se desea calcular

cos(x) dx

y no se recuerda el

comando especco, pero si se recuerda que empieza con


puede usarse la opcin

Autocompletar

funciones entre las que gura:


cambio, si se elige la opcin
de plantillas (ver).

int, entonces

para obtener una lista de

integrate (ver Figs. 15.9 y 15.10). En

Mostrar plantilla, aparecer una lista

202

Cap. 15. Utilidades de los menes de wxMaxima

Figura 15.10:

Lista de funciones que empiezan con

int.

Figura 15.11:

Lista de plantillas que empiezan con

int.

Figura 15.12:

Plantilla para calcular una integral indenida.

Sec. 15.4. El men

Maxima

203

15.4 El men Maxima


El men

Paneles

Maxima

incluye las opciones (ver Fig. 15.13):

Permite mostrar u ocultar paneles para

rales, Estadstica, Historial, Insertar celda


mientas,

Interrumpir

Matemticas geneBarra de Herra-

Interrumpe el clculo actual,

Reiniciar Maxima
Limpiar memoria

Reinicia

Maxima

sin salir de

wxMaxima

Elimina todas las asignaciones de todas las va-

riables,

Aadir ruta

Especica listas de directorios en los que deben buscar

la funciones

load, demo

Mostrar funciones

y algunas otras,

Genera una lista que contiene los nombres de

las funciones denidas por el usuario,

Mostrar denicin

Permite obtener la denicin de una funcin

especca,

Mostrar variables

Genera una lista de todas las variables que el

usuario ha creado,

Borrar funcin

Permite borrar todas o algunas de las funciones de-

nidas por el usuario,

Borrar variable

Permite borrar todas o algunas de las variables

creadas por el usuario,

Conmutar pantalla de tiempo

Permite que el tiempo de clculo

y el tiempo de retardo se impriman junto con la salida de cada


expresin,

Cambiar pantalla 2D

Permite seleccionar el algoritmo de salida

matemtica (ver Sec. 4.4),

Mostrar formato TeX

Devuelve la expresin actual en un formato

apropiado para para ser incorporado a un documento basado en


TEX (ver Sec. 18.1).

Cap. 15. Utilidades de los menes de wxMaxima

204

Figura 15.13:

Figura 15.14:

Despliegue de opciones del men

Maxima.

Eligiendo el panel Matemticas Generales de la opcin

Paneles del men Maxima.

Por ejemplo para desplegar el panel


mos dicho panel de la opcin

Matemticas generales

elegi-

Paneles del men Maxima (ver Figs.

15.14 y 15.15)

15.5 El men Ecuaciones


El men

Ecuaciones

Resolver

Permite resolver una ecuacin algebraica,

Resolver (to_poly)
2 Eso

incluye las opciones (ver Fig. 15.16):

Permite resolver una ecuacin,

es til cuando, por ejemplo, generamos sin querer un bucle en la ejecucin

de Maxima.

Sec. 15.5. El men

Figura 15.15:

Calcular raz

Ecuaciones

205

Panel Matemticas Generales desplegado.

Permite aproximar una raz en un intervalo dado,

Races de un polinomio

Aproxima las races reales y complejas de

un polinomio ingresado en la celda de entrada actual,

Races reales grandes de un polinomio

Aproxima las races reales

y complejas, en formato bigoat, de un polinomio ingresado en


la celda de entrada actual,

Resolver sistema lineal

Permite resolver un sistema de ecuaciones

lineales,

Resolver sistema algebraico

Permite resolver un sistema de ecua-

ciones algebraicas,

Eliminar variable

Elimina variables de ecuaciones (o de expresio-

nes que se supone valen cero) tomando resultantes sucesivas,

Resolver EDO

Permite resolver ecuaciones diferenciales ordinarias

de primer y segundo orden,

Problema de valor inicial (1)

Permite aadir condiciones de va-

lor inicial a la solucin de una ecuacin diferencial ordinaria de


primer orden,

Problema de valor inicial (2)

Permite aadir condiciones de va-

lor inicial a la solucin de una ecuacin diferencial ordinaria de


segundo orden,

Cap. 15. Utilidades de los menes de wxMaxima

206

Figura 15.16:

Figura 15.17:

Despliegue de opciones del men

Uso de la opcin

Resolver EDO para dar solucin a

la ecuacin diferencial

Problema de contorno

Ecuaciones.

y0 = y.

Permite aadir condiciones de frontera a la

solucin de una ecuacin diferencial ordinaria de segundo orden,

Resolver EDO con Laplace

Permite resolver sistemas de ecuacio-

nes diferenciales ordinarias lineales utilizando la transformada


de Laplace,

Condicin inicial

Permite asignar un determinado valor a cierta

expresin dada en un punto especco.

Por ejemplo, para resolver el problema de valor inicial

y0 = y,

podemos usar las opciones Resolver EDO y Problema


de valor inicial (1) tal como se muestra en las guras .

y(0) = 1;

Maxima

Resultados obtenidos al seguir los procesos indicados en las guras 15.17 y 15.18.

( %i1) ode2('diff(y,x)=y,y,x);
( %o1) y = %c %ex

Sec. 15.6. El men

Figura 15.18:

Uso de la opcin

lgebra

207

Problema de valor inicial (1) pa-

ra aadir la condicin inicial

y(0) = 1

a la ecuacin

diferencial de la gura 15.17 (aqu se asume que tal


ecuacin gura en la entrada actual).

( %i2) ic1( %,x=0,y=1);


( %o2) y = %ex

15.6 El men lgebra


El men

lgebra

Generar matriz

incluye las opciones (ver Fig. 15.19):

Permite generar una matriz,

Generar matriz a partir de expresin

Permite generar una ma-

triz a partir de una expresin en trminos de

Introducir matriz

i, j ,

Permite generar una matriz introduciendo sus

trminos en tiempo real,

Invertir matriz

Devuelve la matriz inversa de una matriz actual-

mente denida,

Polinomio caracterstico

Permite generar el polinomio caracters-

tico de cierta matriz especicando la variable,

Determinante

Devuelve el determinante de la matriz actual,

Valores propios

Devuelve los valores propios de la matriz actual,

Vectores propios
Matriz adjunta

Devuelve los vectores propios de la matriz actual,

Devuelve la matriz adjunta de la matriz actual,

Cap. 15. Utilidades de los menes de wxMaxima

208

Figura 15.19:

Trasponer matriz
Construir lista

Despliegue de opciones del men

lgebra.

Devuelve la traspuesta de la matriz actual,

Permite construir una lista en trminos de cierta

expresin que depende de una variable,

Aplicar a lista

Permite aplicar un operador a una lista,

Distribuir sobre lista

Permite aplicar una funcin a cada uno de

los elementos de una lista,

Distribuir sobre matriz

Permite aplicar una funcin a cada uno

de los elementos de una matriz.

Maxima

Aqu se dene una funcin annima.

( %i1) lambda([i,j],1/(i+j-1))$
Maxima

A continuacin, usando la opcin

Generar matriz

datos (ver Fig. 15.20) se obtiene:

( %i2) A: genmatrix( %,3,3);

1 12 13
( %o2) 12 31 14
1
3

1
4

1
5

y llenando los respectivos

Sec. 15.6. El men

lgebra

209

Figura 15.20:

Llenando los datos del cuadro asociado a la opcin

Ge-

Figura 15.21:

Llenando los datos del cuadro asociado a la opcin

Ge-

Figura 15.22:

Llenando los datos del cuadro asociado a la opcin

narar matriz.

nerar matriz a partir de expresin.

troducir matriz.

In-

Maxima

No obstante, usando la opcin

Generar matriz a partir de expresin y lle-

nando los respectivos datos (ver Fig. 15.21) se obtiene:

( %i3) B:genmatrix(lambda([i,j],1/(i+j-1)),3,3);

1 12 13
( %o3) 12 13 14
1
3

1
4

1
5

Cap. 15. Utilidades de los menes de wxMaxima

210

Figura 15.23:

Introduciendo los elementos de la matriz, previamente


creada, en tiempo real.

Figura 15.24:

Ingresando la funcin annima que se desea aplicar a


cada uno de los elementos de la matriz actual.

Maxima

Eligiendo la opcin

Introducir matriz

y llenando los datos respectivos para

denir una matriz (15.22) es posible introducir, en tiempo real, cada uno de los
elementos de dicha matriz (15.23).

( %i4) C: matrix(
[-1,5,2],
[1,0,4],
[-2,-3,1]
);

1 5 2
0 4
( %o4) 1
2 3 1

Sec. 15.7. El men

Anlisis

211

Maxima

Si se quiere aplicar una funcin a cada uno de los elementos de la matriz actual, por
ejemplo la matriz

C,

puede usarse la opcin

Distribuir sobre matriz (15.24).

( %i5) matrixmap(lambda([h],x^h+1), %);


1

x5 + 1 x2 + 1
x +1
2
x4 + 1
( %o5) x + 1
1
1
x+1
x2 + 1
x3 + 1

15.7 El men Anlisis


El men

Anlisis

Integrar

incluye las opciones (ver Fig. 15.25):

Permite calcular la integral indenida o denida de una

expresin,

Integracin Risch

Permite calcular la integral indenida de una ex-

presin utilizando el caso trascendental del algoritmo de Risch,

Cambiar variable

Permite efectuar un cambio de variable en una

integral indenida o denida de un expresin,

Derivar

Permite calcular la derivada

Calcular lmite

n-sima

de una expresin,

Permite calcular el lmite de una expresin,

Calcular mnimo

Permite encontrar una solucin aproximada para

el problema de minimizacin sin restricciones de una funcin


objetivo dada,

Calcular serie

Permite expandir una expresin en un desarrollo de

Taylor,

Aproximacin de Pad

Permite obtener la lista de todas las fun-

ciones racionales que tienen el desarrollo de Taylor dado, en las


que la suma de los grados del numerador y denominador es menor o igual que el nivel de truncamiento de la serie de potencias,

Calcular suma

Permite calcular la suma de los valores de una ex-

presin segn la variacin del respectivo ndice,

Cap. 15. Utilidades de los menes de wxMaxima

212

Calcular producto

Permite calcular el producto de los valores de

una expresin segn la variacin del respectivo ndice,

Transformada de Laplace

Permite calcular la transformada de La-

place de una expresin dada,

Transformada inversa de Laplace

Permite calcular la transfor-

mada inversa de Laplace de una expresin dada,

Mximo comn divisor

Permite obtener el MCD de dos polino-

mios dados,

Mnimo comn mltiplo

Permite obtener el mcm de dos polino-

mios dados,

Dividir polinomios

Permite calcular el cociente y el resto de la

divisin de dos polinomios dados,

Fracciones simples Expande una expresin en fracciones parciales,


Fraccin continua Permite obtener una fraccin continua a partir
de la representacin en formato lista de la misma.

Figura 15.25:

Despliegue de opciones del men

Maxima

Aqu se introduce una integral sin evaluar.

( %i1) 'integrate(sin(x)^2*cos(x),x);
Z
( %o1) cos (x) sin (x)2 dx

Anlisis.

Sec. 15.7. El men

Anlisis

Figura 15.26:

Llenando los datos del cuadro asociado a la opcin

Figura 15.27:

Llenando los datos del cuadro asociado a la opcin

213

Cambiar variable.

Calcular suma.

Maxima

Despus de usar la opcin

Cambiar variable

(15.26) se obtiene el siguiente

resultado:

( %i2) changevar( %,y=sin(x),y,x);


Z
( %o2) y 2 dy

Maxima

Despus de usar la opcin

Calcular suma (15.27) se obtiene el siguiente resul-

tado:

( %i3) sum(1/k^2,k,1,inf),simpsum;
( %o3)

2
6

Cap. 15. Utilidades de los menes de wxMaxima

214

15.8 El men Simplificar


El men

Simplificar

incluye las opciones (ver Fig. 15.28):

Simplicar expresin

Simplica una expresin actual y todas sus

subexpresiones, incluyendo los argumentos de funciones no racionales,

Simplicar radicales

Simplica una expresin actual, que puede

contener logaritmos, exponenciales y radicales, convirtindola a


una forma cannica,

Factorizar expresin

Factoriza una expresin actual, que puede

contener cualquier nmero de variables o funciones, en factores irreducibles respecto de los enteros,

Factorizar complejo

Factoriza un polinomio actual sobre los ente-

ros gaussianos (un entero gaussiano es de la forma

a + ib

donde

a y b son nmeros enteros),

Expandir expresin

Expande la expresin actual,

Expandir logaritmos

Activa el valor

Contraer logaritmos

Realizar contracciones en una expresin ac-

logexpand,

super

de la variable opcional

tual logartmica,

Factoriales y gamma

Permite mostrar u ocultar paneles para Convertir a factoriales, Convertir a gamma, Simplicar factoriales
y Combinar factoriales,

Simplicacin trigonomtrica

Permite mostrar u ocultar paneles

Simplicar trigonometra, Reducir trigonometra, Expandir


trigonometra y Forma cannica,

para

Simplicacin compleja

Permite mostrar u ocultar paneles para

Convertir a forma cartesiana, Convertir a forma polar, Calcular parte real, Calcular parte imaginaria, Demoivre y Exponencializar,

Sustituir

Permite realizar sustituciones en expresiones,

Sec. 15.8. El men

Figura 15.28:

Simplificar

Despliegue de opciones del men

Evaluar formas nominales

215

Simplificar.

Permite evaluar formas cuya evalua-

cin a sido evitada por el operador comilla simple ',

Conmutar lgebra
opcional

Permite conmutar el valor actual de la variable

algebraic para que se pueda hacer o no la simplica-

cin de enteros algebraicos,

Aadir igualdad algebraica

Permite aadir al anillo de enteros

algebraicos conocidos por

los elementos que son solu-

Maxima

ciones de los polinomios ingresados,

Clculo del mdulo

Permite indicar el mdulo mediante el cual se

realizan las operaciones con nmeros racionales.

Maxima

Usando la opcin

Aadir igualdad algebraica e ingresando la respectiva igual-

dad en el cuadro asociado a dicha opcin (15.28) obtenemos:

( %i1) tellrat(a+1/a=sqrt(3));

( %o1) [a2 3 a + 1]

Cap. 15. Utilidades de los menes de wxMaxima

216

Figura 15.29:

Llenando los datos del cuadro asociado a la opcin

Aadir igualdad algebraica.

Maxima

Ahora, es preciso incluir la siguiente sentencia para poder arribar al resultado que
se desea mostrar.

( %i2) algebraic:true;
( %o2) true

Maxima

Finalmente, averiguamos el valor para


implica : a4

1
a4

a+


1 2
a

2

1
. Tngase presente que
a4
2
= ( 3 2)2 2 = 1.

a4 +

a+

1
a

( %i3) ratsimp(a^4+1/a^4);
( %o3) 1

15.9 El men Grficos


El men

Grficos

incluye las opciones (ver Fig. 15.30):

Grcos 2D

Permite realizar grcos bidimensionales,

Grcos 3D

Permite realizar grcos tridimensionales,

Formato de grcos

Permite establecer el formato de los grcos.

Sec. 15.9. El men

Figura 15.30:

Figura 15.31:

Grficos

217

Despliegue de opciones del men

Grficos.

Llenando los datos del cuadro asociado a la opcin

Grficos.

Maxima

Llenando los datos del cuadro asociado a la opcin

Grcos 2D (ver Fig. 15.31)

se genera la sentencia adecuada para obtener la grca de

( %i1) wxplot2d([x*sin(x)],[x,-5,5])$

( %t1)

x x sen(x).

Cap. 15. Utilidades de los menes de wxMaxima

218

Figura 15.32:

Eligiendo, adicionalmente, el formato

openmath.

Maxima

Si se elije el formato

openmath

para obtener la grca de

(ver Fig. 15.32) se genera la sentencia adecuada

x x sen(x)

con el programa grco

openmath

Fig. 15.33).

( %i2) wxplot2d([x*sin(x)],[x,-5,5])$

Figura 15.33:

Grco obtenido a partir de

( %i2)

(ver

Sec. 15.10. El men

Numrico

219

15.10 El men Numrico


El men

Numrico

incluye las opciones (ver Fig. 15.34):

Conmutar salida numrica

Activa la variable

float para obtener

resultado numricos,

A real

Devuelve el valor numrico de la expresin actual,

A real grande (bigoat)

Convierte todos los nmeros y funciones

numricas a nmeros decimales de punto otante grandes,

Establecer precisin

Permite establecer el nmero de dgitos sig-

nicativos en la aritmtica con nmeros decimales de punto otante grandes .

Figura 15.34:

Despliegue de opciones del men

Numrico.

Maxima

Por defecto los resultados son simblicos.

( %i1) sqrt(2)+sqrt(3);

( %o1) 3 + 2

Maxima

Despus de activar la opcin

Conmutar salida numrica se obtiene el cdigo

adecuado para obtener resultados en forma numrica.

( %i2) if numer#false then numer:false else


numer:true;
( %o2) true

Cap. 15. Utilidades de los menes de wxMaxima

220

Maxima

Ahora se obtienen resultados numricos.

( %i3) sqrt(2)+sqrt(3);
( %o3) 3.146264369941973

Figura 15.35:

Despliegue de opciones del men

Ayuda.

15.11 El men Ayuda


El men

Ayuda

incluye las opciones (ver Fig. 15.35):

Ayuda de Maxima

Muestra los libros de ayuda de

Maxima

que

estn disponibles en el sistema. Estos libros se pueden navegar


de forma interactiva y en cada uno de ellos se pueden realizar
bsquedas de palabras clave,

Ejemplo
ma,

Muestra un ejemplo de uso de cualquier funcin de

A propsito

Muestra funciones de

Mostrar sugerencias
wxMaxima,

Tutoriales

Maxima

similares a una palabra,

Muestra una idea relacionada con el uso de

Carga la pgina ocial de

Informacin de compilacin

wxMaxima,

Imprime un resumen de los parme-

tros que se usaron para construir la versin de


est usando,

Maxi-

Maxima

que se

Sec. 15.11. El men

Informar de error

Ayuda

Imprime las versiones de

221

Maxima

y de

Lisp

proporciona un enlace a la pgina web sobre informe de fallos


del proyecto

Maxima,

Comprueba actualizaciones
wxMaxima,

Acerca de...

Permite comprobar actualizaciones de

Muestra informacin tcnica relacionada con el funcio-

namiento del programa.

CAPTULO

16

Grcos con draw

El paquete

draw

se distribuye conjuntamente con

Maxima y constiMaxima con

tuye una interfaz que comunica de manera muy eciente

Gnuplot. Este paquete incorpora una considerable variedad de funcio-

nes y opciones que permiten obtener la representacin de un amplio


nmero de objetos grcos bidimensionales y tridimensionales.
Para poder utilizar el paquete

draw es preciso cargarlo en


load (ver seccin 3.7).

la me-

moria, y para ello se utiliza la funcin

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, . . .)

esta

funcin

es

un

atajo

para

esta

funcin

es

un

atajo

para

draw(gr2d(opciones, objeto_grco,
. . .))
draw(gr3d(opciones, objeto_grco,
. . .))

Inicializacin del paquete draw y descripcin de sus tres funciones principales.

222

Sec. 16.1. Objetos grcos bidimensionales

223

16.1 Objetos grcos bidimensionales


points([[x1 , y1 ], [x2 , y2 ],
. . .])
points([x1 , x2 , . . .],
[y1 , y2 , . . .])
points([y1 , y2 , . . .])
points(matrix([x1 , y1 ],
[x2 , y2 ], . . .)
bars([x1 , h1 , w1 ], . . .)

puntos bidimensionales

puntos bidimensionales

puntos bidimensionales

dibuja barras verticales centradas en

xi ,

polygon([[x1 , y1 ], [x2 , y2 ],
. . .])
polygon([x1 , x2 , . . .],
[y1 , y2 , . . .])
rectangle([x1 , y1 ],
[x2 , y2 ])
quadrilateral([x1 , y1 ],
[x2 , y2 ], [x3 , y3 ], [x4 , y4 ])
triangle([x1 , y1 ],
[x2 , y2 ], [x3 , y3 ])
image(im, x0 , y0 , width,
height)
vector([p1 , p2 ], [v1 , v2 ])
label([cadena, x, y], . . .)

points([[1, y1 ], [2, y2 ], . . .])

equivale a

de alturas

hi

wi

y anchos

polgono

polgono

rectngulo

(x1 , y1 )

de

vrtices

opuestos

(x2 , y2 )

cuadriltero

tringulo

imagen

im

en la regin rectangular

(x0 , y0 )
width, y0 + height)

desde el vrtice

hasta

(x0 +

(v1 , v2 ) con punto de aplicacin


(p1 , p2 )

vector

etiquetas para grcos bidimensionales

ellipse(xc , yc , a, b,
ang1 , ang2 )

sector elptico de centro

(xc , yc ) con
a y b,

semiejes horizontal y vertical


respectivamente,
ngulo
plitud

comenzando

en

el

ang1 y trazando un arco de amigual al ngulo ang2

Principales objetos grficos bidimensionales incorporados en draw.

224

Cap. 16. Grcos con

explicit(f (x), x, xmin ,


xmax )
implicit(E(x, y),
x, xmin , xmax ,
y, ymin , ymax )
parametric(fx , fy ,
t, tmin , tmax )

draw

funcin explcita
ma valores desde

f cuya variable x toxmin hasta xmax


E

a ser represen-

tada en el rectngulo

[xmin , xmax ]

expresin implcita

[ymin , ymax ]
curva paramtrica bidimensional, cu-

t
tmax

yo parmetro

tmin

polar(r(), ,
min , max )
region(expr, x, xmin ,
xmax , y, ymin , ymax )

hasta

funcin polar
valores desde

toma valores desde

r cuya variable
min hasta max

toma

regin del plano denida por desigualdades a ser representada en el rectngulo

[xmin , xmax ] [ymin , ymax ]

Principales objetos grficos bidimensionales incorporados en draw.

Las funciones

draw, draw2d

Gnuplot,

cas en una ventana de

draw3d

actual. No obstante el entorno grco


funciones

wxdraw, wxdraw2d

devuelven las salidas gr-

aparte de la ventana de trabajo

wxMaxima

wxdraw3d

permite utilizar las

que s devuelven las salidas

en el cuaderno de trabajo actual. Debe tenerse presente que al utilizar


la funcin

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

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) p:create_list([random(20),random(50)],k,1,10);
( %o1) [[9, 9], [3, 39], [6, 26], [16, 3], [0, 21], [12, 9], [9, 18], [6, 45],
[13, 43], [7, 28]]

Sec. 16.1. Objetos grcos bidimensionales

225

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) wxdraw2d( points(p) );

( %t2)

( %o2)

Maxima

Con

gr2d

draw

siempre se obtendr el mismo resultado que con

draw2d.

( %i3) wxdraw( gr2d(points(p)) );

( %t3)

( %o3)

draw no cuenta con una funcin especca, como line, para denir
true a la opcin
points_joined para unir los puntos dados mediante segmentos.
el objeto grco lnea; simplemente se asigna el valor

226

Cap. 16. Grcos con

draw

Maxima

Grca de los puntos

unidos mediante segmentos.

( %i4) wxdraw2d(
points_joined=true,
points( p ) );

( %t4)

( %o4)

Maxima

De esta forma se visualiza la grca de barras verticales.

( %i5) wxdraw2d(
bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4])
);

( %t5)

( %o5)

Sec. 16.1. Objetos grcos bidimensionales

Maxima

As se visualiza la grca de un hexgono.

( %i6) 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]
])
);

( %t6)

( %o6)

Maxima

De esta forma se visualiza la grca de un rectngulo.

( %i7) wxdraw2d(
rectangle([0,0],[1,2])
);

( %t7)

( %o7)

227

228

Cap. 16. Grcos con

draw

Maxima

As se visualiza la grca de un cuadriltero.

( %i8) wxdraw2d(
quadrilateral([1,1],[2,2],[3,-1],[2,-2])
);

( %t8)

( %o8)

Maxima

Y as, la grca de un tringulo.

( %i9) wxdraw2d(
triangle([1,1],[2,2],[3,-1])
);

( %t9)

( %o9)

Sec. 16.1. Objetos grcos bidimensionales

229

Maxima

Aqu se obtiene la grca de una imagen.

( %i10) im:apply(matrix,
makelist(makelist(random(200),i,1,30),i,1,30))$
( %i11) wxdraw2d(
image(im,0,0,30,30)
);

( %t11)

( %o11)

Maxima

De esta manera se obtiene la grca del vector


es el origen.

( %i12) wxdraw2d(
vector([0,0],[10,10])
);

( %t12)

( %o12)

(10, 10),

cuyo punto de aplicacin

230

Cap. 16. Grcos con

draw

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).

( %i13) wxdraw2d(
label([Etiqueta,0,0.3])
);

( %t13)

( %o13)

Maxima

Esto devuelve la grca de un sector elptico, de


origen, su semieje horizontal es

1,

( %o14)

su semieje vertical es

( %i14) wxdraw2d(
ellipse(0,0,1,2,0,360)
);

( %t14)

360 ,

2.

cuyo centro es el

Sec. 16.1. Objetos grcos bidimensionales

231

Maxima

De esta manera se obtiene la grca de la funcin

x x2 ,

con

1 x 1.

( %i15) wxdraw2d(
explicit(x^2,x,-1,1)
);

( %t15)

( %o15)

Maxima

Esto muestra la grca de la ecuacin

x3 + y 3 3xy = 0

en el rectngulo

[1, 2].

( %i16) wxdraw2d(
implicit(x^3+y^3-3*x*y=0,x,-1,2,y,-1,2)
);

( %t16)

( %o16)

[1, 2]

232

Cap. 16. Grcos con

draw

Maxima

Aqu se muestra la grca de la curva denida en forma paramtrica mediante

t (sin(t), sin(2t)),

con

0 t 2 .

( %i17) wxdraw2d(
parametric(sin(t),sin(2*t),t,0,2* %pi)
);

( %t17)

( %o17)

Maxima

Aqu se muestra la grca de la funcin denida en coordenadas polares mediante

t sen(t),

tal que

0 t 2 .

( %i18) wxdraw2d(
polar(sin(2*t),t,0,2* %pi)
);

( %t18)

( %o18)

Sec. 16.1. Objetos grcos bidimensionales

233

Maxima

Esto muestra la grca de los puntos de la regin


satisfacen

1
2

1 x 1, 1 y 1

< x2 + y 2 < 1.

( %i19) wxdraw2d(
region(1/2<x^2+y^2 and x^2+y^2<1,
x,-1,1,y,-1,1)
);

( %t19)

( %o19)

Maxima

Combinar objetos grcos bidimensionales es sencillo con

( %i20) wxdraw2d(
parametric(t,t^2-1/2,t,-1,1),
polar(sin(2*t),t,0,2* %pi)
);

( %t20)

( %o20)

draw2d.

que

234

Cap. 16. Grcos con

draw

16.2 Opciones para los objetos grcos bidimensionales


16.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

Val. por defecto

Descripcin

point_size

establece el tamao de los


puntos dibujados (debe ser
un nmero no negativo)

point_type

indica la forma que tendrn


los puntos aislados

points_joined

false

indica si los puntos aislados


se unen mediante segmentos
o no

Opciones de draw2d para el objeto grfico points.

Opcin

Val. por defecto

Descripcin

fill_color

red

especica el color del relleno

fill_density

del polgono
especica

la

transparencia

del color del relleno del polgono (asume valores entre


y

Opciones de draw2d para el objeto grfico bars.

1,

incluidos)

Sec. 16.2. Opciones para los objetos grcos bidimensionales

235

Opcin

Val. por defecto

Descripcin

nticks

29

indica el nmero de puntos a


utilizar para generar las grcas

border

true

especica si debe dibujarse el


borde o no

transparent

false

establece si el polgono debe


rellenarse o no

fill_color

red

especica el color del relleno


del polgono

Opciones de draw2d para los objetos grficos bidimensionales polygon,


rectangle, quadrilateral y triangle.

Opcin

Val. por defecto

Descripcin

palette

[7, 5, 15]

vector con sus componentes


tomando valores enteros en el
rango desde

36

+36

Opciones de draw2d para el objeto grfico bidimensional image.

Opcin

Val. por defecto

Descripcin

head_both

false

indica si el vector ser bidireccional o no

head_length

indica, en las unidades del eje

x, la longitud de las echas de


los vectores

head_angle

45

indica el ngulo, en grados,


entre la echa y el segmento
del vector

head_type

filled

especica cmo se habrn de


dibujar las echas de los vectores

unit_vectors

false

especica si los vectores se dibujan con mdulo unidad

Opciones de draw2d para el objeto grfico vector.

236

Cap. 16. Grcos con

draw

Opcin

Val. por defecto

Descripcin

label_
alignment
label_
orientation

center

especica el color que tendr


el vector

horizontal

especica el color que tendr


el vector

Opciones de draw2d para el objeto grfico label.

Opcin

Val. por defecto

Descripcin

nticks

29

indica el nmero de puntos a


utilizar para generar las grcas

adapt_depth

10

indica el nmero mximo de


particiones utilizadas por la
rutina grca adaptativa

Opciones de draw2d para el objeto grfico explicit.

Opcin

Val. por defecto

Descripcin

filled_func

false

establece cmo se van a rellenar las regiones limitadas por


las grcas

fill_color

red

especica el color para rellenar las regiones limitadas por


las grcas

Opciones de draw2d para el objeto grfico explicit.

Opcin

Val. por defecto

Descripcin

ip_grid

[50, 50]

establece la rejilla del primer

ip_grid_in

[5, 5]

muestreo para la grca


establece la rejilla del segundo muestreo para la grca

Opciones de draw2d para el objeto grfico implicit.

Sec. 16.2. Opciones para los objetos grcos bidimensionales

237

Opcin

Val. por defecto

Descripcin

nticks

29

indica el nmero de puntos a


utilizar para generar las grcas

Opciones de draw2d para los objetos grficos bidimensionales parametric y


polar.

Opcin

Val. por defecto

Descripcin

fill_color

red

especica el color del relleno

x_voxel

10

del polgono
es el nmero de particiones
en la direccin

a utilizar

por el algoritmo utilizado para gracar regiones denidas


por desigualdades y operadores booleanos

y_voxel

10

es el nmero de particiones
en la direccin

a utilizar

por el algoritmo utilizado para gracar regiones denidas


por desigualdades y operadores booleanos

Opciones de draw2d para el objeto grfico bidimensional region.

16.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

line_type

que, por

razones obvias, nicamente no son relevantes con los objetos grcos

point

label.

238

Cap. 16. Grcos con

draw

Opcin

Val. por defecto

Descripcin

color

black

especica el color para dibujar lneas, puntos y bordes de


polgonos

line_width

indica el ancho de las lneas a


dibujar

line_type

solid

indica cmo se van a dibujar las lneas (valores posibles


son

key



solid

dots)

indica la clave del grco en


la leyenda

Opciones locales genricas de draw2d.

16.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

Val. por defecto

Descripcin

proportional_
axes

none

indica si una escena bidimensional se dibujar con los ejes


proporcionales

sus

longi-

tudes relativas (valores posibles:

xrange

auto

none

auto

auto

(valores posibles:

permite especicar un inter-

auto

false

[xmin , xmax ])

valo para

logx

xy)

permite especicar un intervalo para

yrange

(valores posibles:

[ymin , ymax ])

permite especicar si el eje

se dibujar en la escala logartmica

Algunas opciones globales de draw2d.

Sec. 16.2. Opciones para los objetos grcos bidimensionales

239

Opcin

Val. por defecto

Descripcin

logy

false

permite especicar si el eje

se dibujar en la escala logartmica

terminal

screen

selecciona

el

por

utilizar

(valores

terminal

Gnuplot

posibles

son:

screen, png, jpg, eps,


eps_color, pdf, pdfcairo,
gif, animated_gif, wxt y
aquaterm)
file_name

maxima_out

indica el nombre del chero

png,
jpg, eps, eps_color, pdf,
pdfcairo, etc. guardarn el
en el que los terminales

grco

font



permite seleccionar el tipo de


fuente a utilizar por el terminal

font_size

12

permite seleccionar el tamao de la fuente a utilizar por


el terminal

grid

false

permite especicar si se dibujar una rejilla sobre

title



xlabel



xy

almacena una cadena con el


ttulo de la escena
almacena una cadena con la
etiqueta del eje

ylabel



almacena una cadena con la


etiqueta del eje

xtics

auto

controla la forma en la que se


dibujarn las marcas del eje

auto, none,
[inicio, inc, f in], {n1 , n2 , . . .}
y tambin {[label1, n1 ],
[label1, n1 ], . . .})
(valores posibles:

Algunas opciones globales de draw2d.

240

Cap. 16. Grcos con

draw

Opcin

Val. por defecto

Descripcin

xtics_axis

false

indica si las marcas y sus


etiquetas se dibujan sobre el
propio eje

x, o se colocan a lo

largo del borde del grco

ytics

auto

similar que
eje

ytics_axis

false

similar que
con el eje

xtics pero con el


xtics_axis

pero

xaxis

false

especica si se dibujar el eje

xaxis_width
xaxis_type

indica el ancho del eje

dots

indica cmo se debe dibujar

el eje

solid

(valores admisibles:

dots)

xaxis_color
yaxis

black
false

yaxis_width
yaxis_type

indica el ancho del eje

dots

similar que

indica el color para el eje

black
xffffff

xaxis_type

pero

indica el color para el eje

para los terminales


y

establece el color de fondo


(en cdigo hexadecimal

delay

especica si se dibujar el eje

con el eje

yaxis_color
file_bgcolor

gif

rgb )

png, jpg

establece el retraso en centsimas de segundo entre imgenes en los cheros

gif

ani-

cm )

del

mados

eps_width

12

indica el ancho (en

archivo Postscript generado


por

los

terminales

eps_color
eps_height

12

indica el largo (en


chivo Postscript

Algunas opciones globales de draw2d.

eps

cm ) del ar-

Sec. 16.2. Opciones para los objetos grcos bidimensionales

241

Opcin

Val. por defecto

Descripcin

pdf_width

21 0

especica el ancho (en

cm )

del documento PDF generado por los terminales

pdfcairo
pdf_height

29 7

especica el largo (en

pdf

cm ) del

documento PDF

pic_width

640

especica la anchura del chero de imagen de bits generado por los terminales

jpg
pic_height

640

user_preamble



png y

especica el largo del chero


de imagen de bits
inserta cdigo

Gnuplot

Algunas opciones globales de draw2d.

16.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.

( %i1) wxdraw2d(
parametric(cos(t),sin(t),t,0,2* %pi),
user_preamble=set size ratio 1
);

( %t1)

( %o1)

242

Cap. 16. Grcos con

draw

Maxima

He aqu la regin encerrada por las parbolas

y = x2

y = 1 x2 .

( %i2) wxdraw2d(
fill_color=yellow,
region(x^2<y and y<1-x^2,x,-1,1,y,0,1),
line_width=3,
key=1-x^2,
explicit(1-x^2,x,-sqrt(2)/2,sqrt(2)/2),
key=x^2,
color=red,
explicit(x^2,x,-sqrt(2)/2,sqrt(2)/2)
);

( %t2)

( %o2)

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.

( %i3) sol:solve([x^2+y^2=1,y-2*x^2+3/2=0],[x,y]);

 


5+5
5+5
51
51
( %o3) x =
,y = 4
, x=
,y = 4
,
3
3
22
22

 


5 5
5 5
5+1
5+1
x=
,y = 4
, x=
,y = 4
3
3
22

22

Sec. 16.2. Opciones para los objetos grcos bidimensionales

243

Maxima

Esto almacena las coordenadas de los puntos de interseccin, previamente calculados, en la variable

pts.

( %i4) pts:map(lambda([h],subst(h,[x,y])),sol);

 
 


5+5
5+5
5 5
51
51
5+1
( %o4)
, 4
,
, 4
,
, 4
,
3
3
3
22
22
 2 2

5 5
, 5+1
3
4
22

Maxima

He aqu un grco de las curvas denidas por

x2 + y 2 = 1

y 2x2 +

3
2

los respectivos puntos de interseccin.

( %i5) wxdraw2d(
line_width=2,
color=blue,
implicit(x^2+y^2=1,x,-1.5,1.5,y,-1.5,1.5),
color=red,
implicit(y-2*x^2+3/2=0,x,-1.5,1.5,
y,-1.5,1.5)
color=black
point_size=1.5,
point_type=7,
points(pts),
);

( %t5)

( %o5)

=0

244

Cap. 16. Grcos con

draw

Maxima

Aqu se dene la curva paramtrica

a.

( %i6) a(t):=[t,sin(t)] $

Maxima

Esto dene el campo vectorial tangente asociado a la curva

a.

( %i7) define( a (t),diff(a(t),t) ) $


0

Maxima

Aqu se construyen la lista

de vectores tangentes a la curva

puntos de aplicacin de stos. Los valores


de la lista

t0 ,

y la lista

de

para tal construccin, son tomados

t0.

( %i8) t0:create_list(i* %pi/4,i,0,8) $


( %i9) T:create_list( vector(a(i),a0 (i)),i,t0 ) $
( %i10) P:map(a,t0) $

Maxima

Aqu se denen los objetos grcos curva, a partir de

a,

un conjunto de vectores

unitarios tangentes a sta y los puntos de aplicacin de los mismos.

( %i11) objetos: [
color=red,
apply( parametric,append(a(t),[t,0,2* %pi]) ),
color=blue,head_length=0.2,
head_angle=10,
unit_vectors=true,T,
color=green,
point_type=7,points(P),
proportional_axes=xy,
title=Campo vectorial tangente
]$

Sec. 16.2. Opciones para los objetos grcos bidimensionales

245

Maxima

De esta manera se gracan los objetos grcos previamente denidos.

( %i12) wxdraw2d(objetos);

( %t12)

( %o12)

Maxima

A continuacin se construye la lista

de vectores normales a la curva

a.

( %i13) J(v):=[-last(v),first(v)] $
( %i14) N:create_list( vector(a(i),J(a0 (i))),i,t0 ) $

Maxima

Aqu se denen los objetos grcos curva, a partir de

a,

un conjunto de vectores

unitarios tangentes a sta, un conjunto de vectores unitarios normales a la misma


y los puntos de aplicacin de los vectores.

( %i15) objetos: [
color=red,
apply(parametric,append(a(t),[t,0,2* %pi])),
head_length=0.2,head_angle=10,
unit_vectors=true,
color=blue,T, color=yellow,N,
color=green,point_type=7,points(P),
proportional_axes=xy,
title=Campos vectoriales tangente y normal
]$

246

Cap. 16. Grcos con

draw

Maxima

De esta manera se gracan los objetos grcos previamente denidos.

( %i16) wxdraw2d(objetos);

( %t16)

( %o16)
Maxima

He aqu un grco polar mejorado.

( %i17) wxdraw2d(color=blue,nticks=100,
polar(sin(2*t),t,0,2* %pi)) $

( %t17)

16.3 Objetos grcos tridimensionales


points([[x1 , y1 , z1 ], . . .])

puntos tridimensionales

Principales objetos grficos tridimensionales incorporados en draw.

Sec. 16.3. Objetos grcos tridimensionales

points([x1 , x2 , . . .],
[y1 , y2 , . . .], [z1 , z2 , . . .])
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 )

247

puntos tridimensionales

puntos tridimensionales

(v1 , v2 , v3 ) con punto de aplica(p1 , p2 , p3 )

vector
cin

etiquetas para grcos tridimensionales

f cuyas variables saxmin x xmax y ymin

funcin explcita
tisfacen

y ymax
expresin implcita

a ser representa-

[xmin , xmax ]
[ymin , ymax ] [zmin , zmax ]
da en el paraleleppedo

curva paramtrica tridimensional, cuyo parmetro

satisface

tmin t

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)

supercie denida paramtricamente,


cuyos parmetros satisfacen

u umax

r cuyas variables sazmin z zmax y min

funcin cilndrica
tisfacen

max
r cuyas variables samin max y min

funcin esfrica
tisfacen

max
dene un grco tridimensional de la

m (los valores z se toman de m,


x0 hasta x0 +
ancho y las ordenadas desde y0 hasta
y0 + largo)

matriz

las abscisas van desde

tube(fx , fy , fz ,
fr , t, tmin , tmax )

umin

vmin v vmax

supercie tubular de radio

Principales objetos grficos tridimensionales incorporados en draw.

fr

248

Cap. 16. Grcos con

draw

Maxima

Aqu se genera, en forma aleatoria, un conjunto de puntos tridmensionales. Luego


se muestra la grca de los dichos puntos.

( %i1) p:create_list(map(random,[20,50,30]),k,1,10) $
( %i2) wxdraw3d(
points( p )
);

( %t2)

( %o2)

Maxima

Asignando el valor

true

a la opcin

los puntos almacenados en

plot_joined

p.

( %i3) wxdraw3d(
points_joined=true,
points( p )
);

( %t3)

( %o3)

se obtiene la poligonal que une

Sec. 16.3. Objetos grcos tridimensionales

249

Maxima

Aqu se muestra la grca del vector cuyo punto de aplicacin es el origen y cuya
parte vectorial es

(1, 1, 1).

( %i4) wxdraw3d(
vector([0,0,0],[1,1,1])
);

( %t4)

( %o4)

Maxima

He aqu un texto insertado en el punto

(0, 0, 1).

( %i5) wxdraw3d(
label([Etiqueta,0,0,1])
);

( %t5)

( %o5)

250

Cap. 16. Grcos con

draw

Maxima

Esto muestra la grca de la funcin

(x, y) sen x + sen(xy),

con

0 x 2

0 y 2 .

( %i6) wxdraw3d(
explicit(sin(x)+sin(x*y),x,0,2* %pi,y,0,2* %pi)
);

( %t6)

( %o6)

Maxima

Aqu se muestra la grca de la supercie generada a partir de la ecuacin

p
x2 + y 2 4)2 + z 2 = 4,

con

6 x 6, 6 y 6

2 z 2.

( %i7) wxdraw3d(
implicit((sqrt(x^2+y^2)-4)^2+z^2=4,x,-6,6,
y,-6,6,z,-2,2) );

( %t7)

( %o7)

Sec. 16.3. Objetos grcos tridimensionales

251

Maxima

Esta es la grca de la curva

t (cos t, sen t, 8t ),

con

0 t 4 .

( %i8) wxdraw3d(
parametric(cos(t),sin(t),t/8,t,0,4* %pi)
);

( %t8)

( %o8)

Maxima

Aqu

se

muestra

la

grca

de

cos v) cos u, (2 + cos v) sin u, sin v),

la
con

supercie

por (u, v) ((2 +


0 v 2 .

denida

0 u 2

( %i9) wxdraw3d(
parametric_surface((2+cos(v))*cos(u),
(2+cos(v))*sin(u),sin(v),
u,0,2* %pi,v,0,2* %pi) );

( %t9)

( %o9)

252

Cap. 16. Grcos con

draw

Maxima

Esta es la grca de la supercie denida en coordenadas cilndricas mediante

(z, t) cos z ,

con

2 z 2

0 t 2 .

( %i10) wxdraw3d(
cylindrical(cos(z),z,-2,2,t,0,2* %pi)
);

( %t10)

( %o10)

Maxima

He aqu la grca de la supercie denida en coordenadas esfricas mediante

(a, t) 1,

con

0 a 2

0 t .

( %i11) wxdraw3d(
spherical(1,a,0,2* %pi,t,0, %pi)
);

( %t11)

( %o11)

Sec. 16.3. Objetos grcos tridimensionales

253

Maxima

Esta es la grca de un objeto geomtrico tridimensional de tipo

mesh.

( %i12) m:apply(matrix,create_list(create_list(k^2+i^2,
k,-5,5),i,-5,5)) $
( %i13) wxdraw3d(
mesh(m,0,0,-5,5)
);

( %t13)

( %o13)

Maxima

He aqu la grca de la supercie tubular, de radio


curva

t (cos t, t, 0),

con

cos


t 2
, generada por la
10

0 t 4 .

( %i14) wxdraw3d(
tube(cos(t),t,0,cos(t/10)^2,t,0,4* %pi)
);

( %t14)

( %o14)

254

Cap. 16. Grcos con

draw

16.4 Opciones para objetos grcos tridimensionales


16.4.1 Opciones locales
points y label las opciones locales son las
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 16.2.1). Por este motivo, en esta sec-

Para los objetos grcos


mismas en

cin, no se presentan tablas de opciones para los tres objetos grcos


mencionados.

Opcin

Val. por defecto

Descripcin

xu_grid

30

indica el nmero de coordenadas de

para formar la re-

jilla de puntos muestrales

yv_grid

30

indica el nmero de coordenadas de

para formar la re-

jilla de puntos muestrales

Opciones de draw3d para explicit, parametric_surface, cylindrical,


spherical y tube.

Opcin

Val. por defecto

Descripcin

x_voxel

10

indica el nmero de voxels en


la direccin

a utilizar por el

algoritmo implementado

y_voxel

10

indica el nmero de voxels en


la direccin

a utilizar por el

algoritmo implementado

z_voxel

10

indica el nmero de voxels en


la direccin

a utilizar por el

algoritmo implementado

Opciones de draw3d para implicit.

Sec. 16.4. Opciones para objetos grcos tridimensionales

255

Opcin

Val. por defecto

Descripcin

nticks

29

indica el nmero de puntos a


utilizar para generar las grcas

Opciones de draw3d para parametric.

16.4.2 Opciones locales genricas


Vea la subseccin 16.2.2.

16.4.3 Opciones globales


proportional_axes todas las opciones glodraw2d son las mismas de draw3d (vea la subseccin 16.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
bales de

Otras opciones se describen a continuacin.

Opcin

Val. por defecto

Descripcin

xyplane

false

coloca el plano

xy

en escenas

tridimensionales (para el valor

false, el plano xy

se colo-

ca automticamente; en cambio, si toma un valor real, ste intersectar con el eje

ese nivel)

rot_vertical

60

indica el ngulo (en grados)


de la rotacin vertical (alrededor del eje

x)

para situar

el punto del observador en


las escenas tridimensionales
(el ngulo debe pertenecer al
intervalo

Algunas opciones globales de draw3d.

[0, 180])

256

Opcin

Cap. 16. Grcos con

Val. por defecto

rot_horizontal 30

draw

Descripcin
indica el ngulo (en grados)
de la rotacin horizontal (al-

z)

rededor del eje

para si-

tuar el punto del observador


en las escenas tridimensionales (el ngulo debe pertenecer
al intervalo

axis_3d

true

[0, 360])

indica si los ejes

x, y

z, tra-

dicionales, permanecern visibles

palette

color

es un vector de longitud tres


con sus componentes tomando valores enteros en el ran-

36

go

desde

da

valor

ra

seleccionar

es

+36;

ca-

ndice

pa-

un

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

vale

true,

los

objetos grcos se colorearn


activando el modo

Gnuplot.
presin

cepto en

pm3d

de

Si se da una ex-

enhanced3d (eximplicit), sta se

utilizar para asignar colores


de acuerdo con el valor de

palette; las variables de esta


expresin deben ser las mismas que luego se utilicen para la descripcin de la supercie

Algunas opciones globales de draw3d.

Sec. 16.4. Opciones para objetos grcos tridimensionales

257

Opcin

Val. por defecto

Descripcin

surface_hide

false

establece si las partes ocultas


se mostrarn o no en las supercies

contour

none

permite decidir dnde colocar las lneas de nivel (valores

posibles:

surface, both
contour_levels 5

none, base,
map)

controla cmo se dibujarn


las lneas de nivel (valores po-

n, [inicio, inc, f in]


{n1 , n2 , . . .}
sibles:

Algunas opciones globales de draw3d.

16.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

( %i1) wxdraw2d(
enhanced3d=true,
point_type=7,point_size=2,
points( p )
);

( %t1)

( %o1)

( %i30)

draw3d. El resul-

258

Cap. 16. Grcos con

draw

Maxima

Esto dene una curva, algunos puntos sobre sta y algunos vectores tangentes a
la misma.

( %i2)
( %i3)
( %i4)
( %i5)
( %i6)

a(t):=[cos(t),sin(t),t/8] $
define( a0 (t),diff(a(t),t) ) $
t0:create_list(i* %pi/4,i,0,16) $
T:create_list( vector(a(i),a0 (i)),i,t0 ) $
P:map(a,t0) $

Maxima

He aqu la grca de todos los objetos grcos tridimensionales previamente denidos.

( %i7) objetos: [
nticks=100,color=red,
apply(parametric, append(a(t),[t,0,4* %pi]) ),
color=blue,unit_vectors=true,T,
color=green,point_type=7,points(P),
user_preamble=set size ratio 1,
title=Campo vectorial tangente
xyplane=0,axis_3d=false,
xtics=false,ytics=false,ztics=false,
xaxis=true,yaxis=true,zaxis=true,
xlabel=x,ylabel=y,zlabel=z
]) $
( %i8) wxdraw3d(objetos);

( %t8)

( %o8)

Sec. 16.4. Opciones para objetos grcos tridimensionales

259

Maxima

Esta es la grca de

( %t35)

despus de cambiar algunas opciones.

( %i9) 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)
);

( %t9)

( %o9)

Maxima

Esta es la grca de

( %t35)

despus de ms cambios de opciones.

( %i10) 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)
);

( %t10)

( %o10)

260

Cap. 16. Grcos con

draw

Maxima

He aqu la supercie obtenida en

( %t36)

( %i11) wxdraw3d(
x_voxel=17,y_voxel=17,
z_voxel=15,
palette=[12,5,27],
enhanced3d=true,
implicit((sqrt(x^2+y^2)-4)^2+z^2=4,x,-6,6,
y,-6,6,z,-2,2)
);

( %t11)

( %o11)

16.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,...)

ja los valores para las opciones grcas del usuario (llamando a la funcin
sin argumentos se borran las opciones
jadas por el usuario)

Fijando valores para opciones.

Sec. 16.6. Grcos mltiples

261

Maxima

Aqu se jan los valores de algunas opciones.

( %i1) 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.

( %i2) wxdraw2d(
explicit(x^2,x,-2,2)
);

( %t2)

( %o2)

16.6 Grcos mltiples


Opcin

Val. por defecto

Descripcin

columns

indica el nmero de columnas


a considerar cuando se realizan grcos mltiples

Opcin para grficos mltiples.

262

Cap. 16. Grcos con

draw

Maxima

Esto dene dos escenas una bidimensional y otra tridmensional.

( %i1) f1:gr2d(explicit(sin(x),x,0,2* %pi)) $


( %i2) 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.

( %i3) wxdraw(f1,f2) $

( %t3)

( %o3)

Maxima

Con la opcin

columns

es posble cambiar el nmero de columnas.

( %i4) wxdraw(f1,f2,columns=2) $

( %t4)

( %o4)

Sec. 16.7. Grcos animados

263

Maxima

De esta manera se borran las opciones que fueron jadas en

( %i51)

( %i5) set_draw_defaults() $

Maxima

El aspecto de las grcas luce ahora diferente, pues se han restituido los valores
por defecto de las opciones.

( %i6) wxdraw(f1,f2,columns=2) $

( %t6)

( %o6)

16.7 Grcos animados


Del mismo modo que en la seccin 14.8 se pueden crear animaciones nicamente en el entorno de

wxMaxima.

En este caso se utilizan

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.
las funciones

Figura 16.1:

Cuadro de controles, ubicado en la barra de herramientas, para la animacin de grcos.

264

Cap. 16. Grcos con

draw

with_slider_draw

funcin

para

animar

grcos

de

with_slider_draw3d

funcin

para

animar

grcos

de

wxdraw2d
wxdraw3d

Obtencin de grficos animados con draw.

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

, despus de haber seleccionado

el grco.

( %i1) 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)
);

( %t1)

( %o1)

Maxima

A continuacin se dene la funcin inja

/* para calcular el producto vectorial.

( %i2) infix(/*) $
( %i3) /*(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]] $

Sec. 16.7. Grcos animados

265

Maxima

Esto dene la curva

a,

su primera derivada y su segunda derivada.

( %i4) a(t):=[cos(t),sin(t),t/8] $
( %i5) define( a0 (t),diff(a(t),t) ) $
( %i6) define( a00 (t),diff(a(t),t,2) ) $

Maxima

Al animar la siguiente secuencia de cuadros se visualiza el tiedro de Frenet recorriendo la curva

a.

( %i7) 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),a0 (t)),
color=yellow,
vector(a(t),a0 (t)/*a00 (t)),
color=red,
vector(a(t),(a0 (t)/*a00 (t))/*a0 (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);

( %t7)

( %o7)

266

Cap. 16. Grcos con

draw

Maxima

Esta es la animacin de un morsmo entre la esfera y el toro.

( %i8) 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)
);

( %t8)

( %o8)

CAPTULO

17

Campos de direcciones con plotdf

El paquete

plotdf

permite crear grcos de campos de direcciones

para Ecuaciones Diferenciales Ordinarias (EDO) de primer orden, o


para un sistema de dos EDO's autnomas, de primer orden.
Como se trata de un paquete adicional, para poder usarlo debe
cargarlo primero con el comando
cesario que

Xmaxima

load(plotdf).

Tambin es ne-

Maxima
wxMaxima

est instalado, a pesar de que ejecute

desde otra interface diferente (esto quiere decir que con


no puede usarse una funcin como

wxplotdf).

Maxima

Inicializacin del paquete

plotdf.

( %i9) load(plotdf)$

Maxima

Campo de direcciones de la ecuacin diferencial


pasa por

y 0 = ex + y

y la solucin que

(2, 0.1).

( %i10) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
( %o10) 0

267

268

Cap. 17. Campos de direcciones con

Figura 17.1:

Grco obtenido con

plotdf

( %i10)

Maxima

Campo de direcciones de la ecuacin diferencial


condicin inicial

y0 = x y2

y la solucin de

y(1) = 3.

( %i11) plotdf(x-y^2,[xfun,sqrt(x);-sqrt(x)],
[trajectory_at,-1,3], [direction,forward],
[yradius,5],[xcenter,6]);
( %o11) 0

Maxima

dx
dt

=y
(x, y) = (6, 0), con una barra de
deslizamiento que permitir cambiar el valor de m interactivamente (k permanece
jo a 2.)
Campo de direcciones de un oscilador armnico, denido por las ecuaciones

dy
y
dt

kx
, y la curva integral que pasa por
m

( %i12) plotdf([y,-k*x/m],[parameters,m=2,k=2],
[sliders,m=1:5], [trajectory_at,6,0]);
( %o12) 0

269

Figura 17.2:

Grco obtenido con

( %i11)

Figura 17.3:

Grco obtenido con

( %i12)

270

Cap. 17. Campos de direcciones con

Figura 17.4:

Grcos obtenido con

plotdf

( %i13)

Maxima

Campo de direcciones de un pndulo amortiguado, incluyendo la solucin para


condiciones iniciales dadas, con una barra de deslizamiento que se puede utilizar
para cambiar el valor de la masa, m, y con el grco de las dos variables de estado
como funciones del tiempo

( %i13) plotdf([y,-g*sin(x)/l - b*y/m/l],


[parameters,g=9.8,l=0.5,m=0.3,b=0.05],
[trajectory_at,1.05,-9],[tstep,0.01],
[xradius,6],[yradius,14],[xcenter,-4],
[direction,forward],[nsteps,300],
[sliders,m=0.1:1], [versus_t,1]);
( %o13) 0

CAPTULO

18

Archivos y operaciones externas

18.1 Generacin de expresiones y archivos TEX


Si el usuario quiere combinar su trabajo con material existente en

TEX, puede encontrar conveniente usar la funcin tex para convertir


expresiones de
en forma conveniente de entrada para TEX.

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)

imprime en la consola la representacin en TEX de

expr

devuelven el cdigo TEX en formato


de cadena

tex(expr,destino )

aade la salida al archivo

Salidas de Maxima para TEX

Maxima

He aqu una expresin, impresa en forma estndar de Maxima.

( %i1) (x+y)^2/sqrt(x*y);
( %o1)

(y+x)2

xy

271

destino

272

Cap. 18. Archivos y operaciones externas

Maxima

He aqu la expresin previa en forma de entrada para TEX.

( %i2) tex( %);


$${{\left(y+x\right)^2}\over{\sqrt{x\,y}}}$$
( %o2) f alse

Maxima

Esto aade la expresin


cado en

d:/maximatex/.

(y + x)2
,

xy

traducida a TEX, al archivo

ejemplo.tex

ubi-

( %i3) tex((x+y)^2/sqrt(x*y),
d:/maximatex/ejemplo.tex);
( %o3) f alse

texput(a,f )

establece el formato, en TEX, del tomo , el cual puede ser un smbolo o

el nombre de un operador

get_tex_
environment(op )

devuelve el entorno TEX que se aplica


al operador
. Si no se ha asignado

op

ningn entorno, devolver el que tenga


por defecto

set_tex_
environment(op,antes,

asigna el entorno TEX al operador

op

despus )

get_tex_environment_
default( )

devuelve el entorno TEXque se aplica


a expresiones para las cuales el operador de mayor rango no tiene entorno
TEXasignado

set_tex_environment_
default(antes,

despus )

Salidas de Maxima para TEX

asigna el entorno TEXpor defecto

Sec. 18.1. Generacin de expresiones y archivos TEX

273

Maxima

De esta forma se asigna cdigo TEXpara una variable.

( %i4) texput(s,\\sqrt{2});
( %o4) \sqrt{2}

Maxima

Ahora puede usarse la asignacin anterior para generar ms cdigo TEX.

( %i5) tex(s+1/2);
$$\sqrt{2}+{{1}\over{2}}$$
( %o5) f alse

Maxima

El entorno TEX aplicado, por defecto, a expresiones, en Maxima, es $$ $$.

( %i6) tex(3/4);
$${{3}\over{4}}$$
( %o6) f alse

Maxima

Con la funcin set_tex_environment_default es posible cambiar el entorno TEX.


En este caso se ha anulado todo entorno.

( %i7) set_tex_environment_default( ,  );


( %o7) [ , ]

Maxima

He aqu el resultado del nuevo cdigo TEX.

( %i8) tex(3/4);
{{3}\over{4}}
( %o8) f alse

Maxima

Adems de traducir expresiones individuales a TEX,


tamAT X. Para ello
bin traduce cuadernos completos a documentos pdf L
E
el usuario debe digitar el nombre que asignar al archivo resultante,

274

Cap. 18. Archivos y operaciones externas

as como la respectiva extensin,

Exportar que
men Archivo.

ventana
del

Figura 18.1:

Figura 18.2:

tex,

en la casilla

Nombre de la
Exportar

aparece despus de elegir la opcin

Primer paso para exportar un cuaderno.

ATEX
Exportando un cuaderno como documento pdf L

18.2 Generacin de archivos HTML


Adicionalmente,

Maxima

brinda capacidades para convertir cuader-

nos completos a pginas web. El proceso que debe seguirse para la


traduccin es el mismo que se sigui en la pgina 273, pero en este
caso la extensin ser

html.

Sec. 18.3. Generacin de expresiones Lisp y Fortran

275

18.3 Generacin de expresiones Lisp y Fortran


Si el usuario tiene programas escritos en Lisp o Fortran, puede ser

Maxima e insertarlas
Maxima permite convertir

que quiera tomar frmulas que ha generado en


en el cdigo original de sus programas.

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.

( %i1) x^2+2*x+1;
( %o1) x2 + 2 x + 1
( %i2) :lisp $ %i9;
((MPLUS) ((MEXPT) $X 2) ((MTIMES) 2 $X) 1)
( %i3) fortran(x^2+2*x+1);
x 2 + 2 x + 1
( %o3) done

CAPTULO

Programacin con

Maxima

19

La elaboracin de programas con el lenguaje de programacin de

xima

Ma-

permite al usuario denir sus propias funciones. De esta manera

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.

19.1 Operadores relacionales y lgicos


De manera similar que cualquier lenguaje de programacin

Maxima

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

operador recibe el nombre de injo cuando ste debe escribirse entre


los operandos, por ejemplo el operador
para ciertos operandos

1 Del

q.

and

cuya sintaxis es

p and q ,

Por otra parte, un operador prejo es

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

276

Sec. 19.1. Operadores relacionales y lgicos

277

aquel que debe escribirse antes del operando, por ejemplo el operador

not

cuya sintaxis es

not p,

Cabe destacar que, en

para cierto operando

Maxima,

p.

casi todos los operadores lgicos

son injos y nicamente hay un operador lgico prejo.

Operador

Smbolo

Tipo

menor que

<

operador relacional injo

menor o igual que

<=
=

operador relacional injo

operador relacional injo

igualdad (sintctica)
negacin de

igualdad (por valor)


negacin de

equal

mayor o igual que


mayor o igual que
y
o
no

equal
notequal
>=
>=
and
or
not

operador relacional injo

operador relacional injo


operador relacional injo
operador relacional injo
operador relacional injo
operador lgico injo
operador lgico injo
operador lgico prejo

Operadores relacionales y lgicos.

Controlador

Descripcin

if

permite, mediante una condicin, que se ejecute o no se ejecute determinada tarea o lnea de
cdigo

for

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

repetir sin detenerse un determinado cdigo


mientras se cumpla una condicin

unless

repetir sin detenerse un determinado cdigo


hasta que se cumpla una condicin

do

se utiliza para realizar iteraciones con


y

unless

Principales estructuras de control.

for, while

Cap. 19. Programacin con Maxima

278

Maxima

He aqu un ejemplo sencillo en el que se muestra la sintaxis de

if.

( %i1) if 2=3 then 1;


( %o1) f alse
( %i2) if 3=3 then 1;
( %o2) 1

Maxima

En este ejemplo se aade el resultado ha obtener en caso de que la condicin sea


falsa.

( %i3) if 2=3 then 1 else 3;


( %o3) 3

Tngase en cuenta que las expresiones consideradas en los ejemplos

( %i1) y ( %i2) equivalen a las expresiones:


if 2 = 3 then 1 else false y if 3 = 3 then 1 else false,

de las entradas

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) if 2=3 then 1 elseif 3=3 then 5 else 4;


( %o4) 5

Maxima

Mediante este otro ejemplo se muestra la sintaxis de

for.

( %i5) for i:1 thru 5 step 2 do print(i);


1
3
5
( %o5) done

Sec. 19.2. Operadores y argumentos

279

Maxima

Si no se indica el paso (incremento) se asume uno, por defecto.

( %i6) for i:1 thru 5 do print(i);


1
2
3
( %o6) done

Maxima

Para inicializar el contador en

while

se utiliza

for.

( %i7) for i:1 while i<=3 do print(i);


1
2
3
( %o7) done

Maxima

Para inicializar el contador en

unless

tambin se utiliza

for.

( %i8) for i:1 unless i>=4 do print(i);


1
2
3
( %o8) done

19.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

averiguar la estructura de las expresiones.

op

args

fun

y los

permiten

Cap. 19. Programacin con Maxima

280

op(expr)

permite obtener el operador de la expresin

args(expr)

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.

( %i1) expr:a+b;
( %o1) 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.

( %i2) op(expr);
( %o2) +
( %i3) args(expr);
( %o3) [b, a]

Maxima

Es posible reconstruir la expresin usando la funcin

( %i4) apply(op(expr),args(expr));
( %o4) b + a

Maxima

Esto dene otra expresin.

( %i5) expr:ejemplo(x,y,z);
( %o5) ejemplo(x, y, z)

apply.

Sec. 19.2. Operadores y argumentos

281

Maxima

Aqu, nuevamente, se obtienen el operador y los argumentos de la expresin.

( %i6) op(expr);
( %o6) ejemplo
( %i7) args(expr);
( %o7) [x, y, z]

Maxima

Tambin es posible reconstruir la ltima expresin usando la funcin

apply.

( %i8) apply(op(expr),args(expr));
( %o8) ejemplo(x, y, z)

Maxima

Algunas expresiones (plot2d,

integrate,

etc.) requieren de una comilla simple.

( %i9) expr:'plot2d(x^2,[x,-1,1]);
( %o9) plot2d(x2 , [x, 1, 1])

Maxima

Ahora si es posible obtener el operador y los argumentos de la expresin.

( %i10) op(expr);
( %o10) plot2d
( %i11) args(expr);


( %o11) x2 , [x, 1, 1]

Maxima

Tambin las listas y los conjuntos son objetos de la forma


se almacena una lista cualquiera en la variable

( %i12) expr:[a,b,c,d];
( %o12) [a, b, c, d]

expr.

fun(a1 , . . . , an ). Aqu

Cap. 19. Programacin con Maxima

282

Maxima

Aqu tambin se obtienen el operador y una lista con los argumentos.

( %i13) op(expr);
( %o13) [
( %i14) args(expr);
( %o14) [a, b, c, d]

19.3 Programacin funcional


La

programacin funcional
Maxima

uso de funciones.

map, lambda

es la programacin que pone nfasis en el


incluye las funciones predenidas

apply,

que permiten apreciar la potencia de la programacin

funcional.

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

expr1 , . . . , exprn

pero

cuyas subpartes son los resultados de


aplicar

a cada una de las subpartes

de las expresiones

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

dene y devuelve una expresin lambda (es decir, una funcin annima) con

x1 , . . . , xm ; la cual devuelexprn

argumentos
ve el valor

lambda([ [L] ] ,
expr1 , . . . , exprn )

dene y devuelve una expresin lambda con argumento opcional


devuelve el valor

lambda([ x1 , . . . , xm , [L] ] ,
expr1 , . . . , exprn )

L;

la cual

exprn

dene y devuelve una expresin lambda con argumentos


mento opcional
valor

exprn

Funciones predefinidas para programacin funcional.

L;

x1 , . . . , x m ,

argu-

la cual devuelve el

Sec. 19.3. Programacin funcional

283

Maxima

Aqu se dene la funcin

G,

la cual es aplicada luego a una lista cuyos elementos

pasan a ser los argumentos de

G.

( %i1) G(x,y,z):=x^2+y^2+z^2 $
( %i2) apply(G,[x-y,a+b,u]);
( %o2) (x y)2 + u2 + (b + a)2

Maxima

En este caso se aplica la funcin predenida

min.

( %i3) apply(min,[7,9,3,4]);
( %o3) 3

Maxima

Esto dene la funcin

y luego la mapea en una lista.

( %i4) F(x):=x^3-1 $
( %i5) map(F,[2,3,5,a]);


( %o5) 7, 26, 124, a3 1

Maxima

Aqu se muestra la denicin de una funcin lambda

f,

la misma que posee dos

argumentos.

( %i6) f:lambda([x,y],x+y) $
( %i7) f(a,b);
( %o7) b+a

Maxima

Ahora se dene una funcin lambda con argumento opcional.

( %i8) f:lambda([ [x] ],x^2) $


( %i9) f(p);
 
( %o9) p2
( %i10) f(p,q,r,s,t);

Cap. 19. Programacin con Maxima

284



( %o10) p2 , q 2 , 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.

( %i11) f:lambda([ x,y,[z] ],x*z+y) $


( %i12) f(p,q,r);
( %o12) [p r + q]
( %i13) f(p,q,r,s,t,u,v,w);
( %o13) [p r + q, p s + q, p t + q, p u + q, p v + q, p w + q]

19.4 Implementacin del paquete: ejemplo


ejemplo, que incorporar
circunferencia.

En esta seccin se implementar el paquete


las funciones

triangulo

Maxima

Aqu se dene la funcin

triangulo.

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.

( %i1) 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, ,u^2),
sconcat(Baricentro,: ,b)])
)$

Sec. 19.4. Implementacin del paquete:

ejemplo

285

Maxima

Dado el conjunto de puntos del plano


cin

triangulo

{(1, 2), (3, 1), (2, 3)},

no colineales, la fun-

devuelve el rea y las coordenadas del baricentro del tringulo

denido por los puntos dados.

( %i2) p:[ [1,2],[3,-1],[2,3] ] $


( %i3) triangulo(p);
( %o3) [ Area : 5/2 u2, Baricentro : [2, 4/3] ]

Maxima

Para visualizar los grcos se utilizar el paquete

draw.

( %i4) load(draw) $

Maxima

Esto muestra la grca del tringulo previamente analizado, conjuntamente con


el punto que corresponde al baricentro del mismo.

( %i5) 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
);

( %t5)

( %o5)

Cap. 19. Programacin con Maxima

286

Maxima

Puesto que, en este caso, los puntos del conjunto


les, la funcin

triangulo

{(1, 1), (2, 2), (3, 3)}

son colinea-

devuelve un mensaje indicando ste hecho.

( %i6) p:[ [1,1],[2,2],[3,3] ] $


( %i7) triangulo(p);
( %o7) Los puntos son colineales00

Maxima

Aqu se dene la funcin

circunferencia

que permite obtener la ecuacin de la

circunferencia denida por tres puntos dados.

( %i8) 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,x^2))=0)
)$

Maxima

Dado el conjunto de puntos del plano


cin

circunferencia

{(1, 2), (3, 1), (2, 3)},

no colineales, la fun-

devuelve la ecuacin de la circunferencia denida por estos

puntos.

( %i9) p:[ [1,2],[3,-1],[2,3] ] $


( %i10) circunferencia(p);
( %o10) y 2 115 y + x2 295 x + 26
5 =0

Sec. 19.4. Implementacin del paquete:

ejemplo

287

Maxima

Esto muestra la grca de la circunferencia previamente analizada, conjunatmente


con los puntos que la denen.

( %i11) 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
);

( %t11)

( %o11)

Maxima

triangulo, para el conjunto de puntos del plano {(1, 1),


(2, 2), (3, 3)}, la funcin circunferencia devuelve un mensaje indicando que stos

Igual que con la funcin

son colineales.

( %i12) p:[ [1,1],[2,2],[3,3] ] $


( %i13) circunferencia(p);
( %o13) Los puntos son colineales00

Hasta aqu se han denido, y se ha vericado el correcto funcionamiento de, las funciones

triangulo

circunferencia.

Seguida-

mente se guardar la denicin de estas funciones en un chero de


nombre

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
copiar y ejecutar los ejemplos.

Cap. 19. Programacin con Maxima

288

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 usuario,


en este caso ste es: d:/maximapackages.

( %i14) 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

Maxima y luego ha abierto un nuevo cuaderno desde

el cual inicializar el paquete

ejemplo.lisp.

Maxima

Esto inicializa el paquete

ejemplo.lisp

desde el directorio en el que se guard

(vea 15.1).

( %i15) 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.

( %i16) p:[ [0,0],[2,0],[1,sqrt(3)] ] $


( %i17) triangulo(p);
( %o17) [ Area : sqrt(3) u2, Baricentro : [1, 1/sqrt(3)] ]

Bibliografa

[1] Fokker,

J.

PROGRAMACIN

FUNCIONAL.

//people.cs.uu.nl/jeroen/courses/fpsp.pdf

http:

(1996).

[2] Rodrguez, J. R. MAXIMA CON WXMAXIMA: SOFTWARE


LIBRE EN EL AULA DE MATEMTICAS.

uca.es/repos/maxima

http://knuth.

(2007).

[3] Rodrguez, M. y Villate, J. MANUAL DE MAXIMA ver.


5.18.

html

http://maxima.sourceforge.net/es/documentation.

(2009).

[4] Rodrguez,

M.

PRIMEROS

PASOS

EN

MAXIMA.

telefonica.net/web2/biomates/maxima/max.pdf

www.

(2008).

[5] Rodrguez, M. SOFTWARE MATEMTICO BSICO: MAXIMA.

pdf

www.telefonica.net/web2/biomates/maxima/i-math.

(2008).

[6] Rodrguez, M. MAXIMA: UNA HERRAMIENTA DE CLCULO.

pdf

http://softwarelibre.uca.es/cursos/maxima/cadiz.

(2006).

289

También podría gustarte