Maxima

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 1063

Ver. 5.

34

Manual de Maxima
Traduccion espa~
nola

Maxima es un sistema de c
alculo simbolico escrito en Lisp.
Maxima desciende del sistema Macsyma, desarrollado en el MIT (Massachusetts Institute
of Technology) entre los a~
nos 1968 y 1982 como parte del proyecto MAC. El MIT paso una
copia del c
odigo fuente al DOE (Department of Energy) en 1982, en una version conocida
como DOE-Macsyma. Una de estas copias fue mantenida por el Profesor William F. Schelter
de la Universidad de Texas desde el a~
no 1982 hasta su fallecimiento en 2001. En 1998
Schelter haba obtenido del Departamento de Energa permiso para distribuir el codigo
fuente de DOE-Macsyma bajo licencia GNU-GPL, iniciando en el a~
no 2000 el proyecto
Maxima en SourceForge con el fin de mantener y seguir desarrollando DOE-Macsyma,
ahora con el nombre de Maxima.
Los usuarios de habla hispana disponen de una lista de correos en la que podran participar
para recabar informaci
on, proponer ideas y comentar sus experiencias con Maxima:
https://lists.sourceforge.net/lists/listinfo/maxima-lang-es
Nota de la traducci
on: Este manual es una traduccion de la version original en ingles. En
la version 5.25 se han introducido cambios sustanciales que afectan, fundamentalmente, a
una reordenaci
on de los contenidos, a la desaparicion de algunas secciones y a la aparicion
de otras nuevas. Adem
as, se han a~
nadido introducciones a algunas secciones provenientes
de la versi
on alemana; me ha parecido conveniente incorporarlas a la version espa~
nola por
ser clarificadoras de algunos conceptos basicos de Maxima, aunque todava no forman parte
de la versi
on inglesa de referencia.
Mario Rodrguez Riotorto. (mario ARROBA edu PUNTO xunta PUNTO es)

Resumen del Contenido


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Introduccion a Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Deteccion e informe de fallos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Lnea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Tipos de datos y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Simplificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Funciones matematicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Base de datos de Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Lectura y escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Funciones Especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Funciones elpticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Diferenciacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Integracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Ecuaciones Diferenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Metodos numericos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Matrices y Algebra
Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Afines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
itensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
ctensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
atensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Sumas productos y series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Teora de N
umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Simetras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Entorno de Ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Miscelanea de opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Reglas y patrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

ii
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

Manual de Maxima
Definicion de Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Depurado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
augmented lagrangian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bernstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
descriptive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
distrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
drawdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dynamics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ezunits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
f90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
finance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ggf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
grobner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
impdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
interpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lapack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lbfgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lindstedt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
linearalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lsquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
makeOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
minpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
mnewton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
numericalio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
opsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
orthopoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
simplification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
solve rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

559
587
601
609
611
613
617
621
629
659
669
707
773
777
787
805
807
813
817
819
849
857
859
867
875
881
883
897
907
909
911
913
919
921
933
937
939
949

iii
74
75
76
77
78
79
80
A

stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
stirling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
stringproc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
to poly solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
zeilberger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
Indice de Funciones y Variables . . . . . . . . . . . . . . . . . . . . . . . 1021
Indice de Funciones y Variables . . . . . . . . . . . . . . . . . . . . . . . 1023

Tabla de Contenidos
1

Introducci
on a Maxima . . . . . . . . . . . . . . . . . . . . . . . . 1

Detecci
on e informe de fallos . . . . . . . . . . . . . . . . . . 7
2.1

Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1
3.2

Documentaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Funciones y variables para la ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Lnea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.1
4.2
4.3

Funciones y variables para la deteccion e informe de fallos . . . . . . 7

Introducci
on a la lnea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Funciones y variables para la lnea de comandos . . . . . . . . . . . . . . . 17
Funciones y variables para la impresion . . . . . . . . . . . . . . . . . . . . . . . . 28

Tipos de datos y estructuras . . . . . . . . . . . . . . . . . 39


5.1

N
umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Introducci
on a los n
umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 Funciones y variables para los n
umeros . . . . . . . . . . . . . . . . . . .
5.2 Cadenas de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Introducci
on a las cadenas de texto . . . . . . . . . . . . . . . . . . . . . . .
5.2.2 Funciones y variables para las cadenas de texto . . . . . . . . . . .
5.3 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Funciones y variables para Constantes . . . . . . . . . . . . . . . . . . . .
5.4 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Introducci
on a las listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.2 Funciones y variables para listas . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1 Introducci
on a los arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5.2 Funciones y variables para los arrays . . . . . . . . . . . . . . . . . . . . .
5.6 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.1 Introducci
on a las estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.2 Funciones y variables para las estructuras . . . . . . . . . . . . . . . . .

39
39
40
46
46
47
49
49
52
52
52
63
63
64
73
73
73

Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.1
6.2
6.3
6.4
6.5
6.6
6.7

Introducci
on a los operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores aritmeticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores l
ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores para ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores de asignaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operadores definidos por el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77
79
83
84
85
87
92

vi

Manual de Maxima

Evaluaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.1
7.2

Introducci
on a la evaluaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Funciones y variables para la evaluacion . . . . . . . . . . . . . . . . . . . . . . . 98

Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.1
8.2
8.3
8.4
8.5

Introducci
on a las expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombres y verbos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Desigualdades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para expresiones. . . . . . . . . . . . . . . . . . . . . . . .

111
111
112
113
113

Simplificaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
9.1
9.2

10

Introducci
on a la simplificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Funciones y variables para simplificacion . . . . . . . . . . . . . . . . . . . . . 136

Funciones matem
aticas . . . . . . . . . . . . . . . . . . . . . 149

10.1 Funciones para los n


umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Funciones para los n
umeros complejos . . . . . . . . . . . . . . . . . . . . . . .
10.3 Funciones combinatorias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4 Funciones radicales, exponenciales y logartmicas . . . . . . . . . . . .
10.5 Funciones trigonometricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.1 Introducci
on a la trigonometra. . . . . . . . . . . . . . . . . . . . . . . . .
10.5.2 Funciones y variables para trigonometra . . . . . . . . . . . . . . .
10.6 N
umeros aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Base de datos de Maxima . . . . . . . . . . . . . . . . . . 173

11.1
11.2
11.3
11.4

12

Introducci
on a la base de datos de Maxima . . . . . . . . . . . . . . . . . .
Funciones y variables para las propiedades . . . . . . . . . . . . . . . . . .
Funciones y variables para los hechos . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para los predicados . . . . . . . . . . . . . . . . . . . .

173
174
183
190

Gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

12.1
12.2
12.3
12.4
12.5
12.6

13

149
153
156
159
163
163
163
170

Introducci
on a los gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formatos gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para graficos . . . . . . . . . . . . . . . . . . . . . . . . . .
Opciones gr
aficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Opciones para Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones para el formato Gnuplot pipes . . . . . . . . . . . . . . . . . . . .

195
195
196
210
215
216

Lectura y escritura . . . . . . . . . . . . . . . . . . . . . . . . . 217

13.1
13.2
13.3
13.4
13.5

Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para lectura y escritura. . . . . . . . . . . . . . . .
Funciones y variables para salida TeX . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para salida Fortran . . . . . . . . . . . . . . . . . . . .

217
217
218
225
230

vii

14

Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

14.1
14.2

15

Funciones Especiales . . . . . . . . . . . . . . . . . . . . . . . . 259

15.1
15.2
15.3
15.4
15.5
15.6
15.7
15.8
15.9
15.10

16

Introducci
on a las funciones e integrales elpticas . . . . . . . . . . . . 283
Funciones y variables para funciones elpticas . . . . . . . . . . . . . . . . 284
Funciones y variables para integrales elpticas . . . . . . . . . . . . . . . 286

Funciones y variables para lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Diferenciaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

18.1

19

Funciones y variables para la diferenciacion. . . . . . . . . . . . . . . . . . 291

Integraci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

19.1 Introducci
on a la integracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.2 Funciones y variables para integracion . . . . . . . . . . . . . . . . . . . . . . .
19.3 Introducci
on a QUADPACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.3.1 Perspectiva general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.4 Funciones y variables para QUADPACK . . . . . . . . . . . . . . . . . . . .

20

303
303
313
313
314

Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

20.1

21

259
259
262
263
276
276
277
278
279
279

Lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

17.1

18

Introducci
on a las funciones especiales. . . . . . . . . . . . . . . . . . . . . . .
Funciones de Bessel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones de Airy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones Gamma y factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Integral exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funci
on de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones de Struve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones hipergeometricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones de cilindro parabolico . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para las funciones especiales . . . . . . . . . .

Funciones elpticas . . . . . . . . . . . . . . . . . . . . . . . . . . 283

16.1
16.2
16.3

17

Introducci
on a los polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Funciones y variables para polinomios . . . . . . . . . . . . . . . . . . . . . . . 233

Funciones y variable para las ecuaciones . . . . . . . . . . . . . . . . . . . . . 325

Ecuaciones Diferenciales. . . . . . . . . . . . . . . . . . . . 343

21.1
21.2

Introducci
on a las ecuaciones diferenciales . . . . . . . . . . . . . . . . . . . 343
Funciones y variables para ecuaciones diferenciales. . . . . . . . . . . 343

viii

Manual de Maxima

22

M
etodos num
ericos . . . . . . . . . . . . . . . . . . . . . . . . . 347

22.1
22.2
22.3

Introducci
on a la transformada rapida de Fourier . . . . . . . . . . . . 347
Funciones para la resolucion numerica de ecuaciones . . . . . . . . . 350
Introducci
on a la resolucion numerica de ecuaciones diferenciales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
22.4 Funciones para la resolucion numerica de ecuaciones diferenciales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

23

Matrices y Algebra
Lineal. . . . . . . . . . . . . . . . . . 361

23.1 Introducci
on a las matrices y el algebra lineal . . . . . . . . . . . . . . .
23.1.1 Operador punto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23.1.2 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23.1.3 Paquete eigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23.2 Funciones y variables para las matrices y el algebra lineal . . . .

24

Afines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

24.1

25

Funciones y variables para Afines . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

itensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

25.1 Introducci
on a itensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.1.1 Notaci
on tensorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.1.2 Manipulaci
on indexada de tensores . . . . . . . . . . . . . . . . . . . . .
25.2 Funciones y variables para itensor . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.1 Trabajando con objetos indexados . . . . . . . . . . . . . . . . . . . . . .
25.2.2 Simetras de tensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.3 C
alculo tensorial indexado . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.4 Tensores en espacios curvos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.5 Sistemas de referencia moviles . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.6 Torsi
on y no metricidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25.2.7 Algebra
exterior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.8 Exportando expresiones en TeX . . . . . . . . . . . . . . . . . . . . . . . .
25.2.9 Interactuando con ctensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25.2.10 Palabras reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

361
361
361
361
362

387
388
388
391
391
400
402
406
409
412
415
418
419
420

ctensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

26.1 Introducci
on a ctensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2 Funciones y variables para ctensor . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.1 Inicializaci
on y preparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.2 Los tensores del espacio curvo . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.3 Desarrollo de Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.4 Campos del sistema de referencia . . . . . . . . . . . . . . . . . . . . . . .
26.2.5 Clasificaci
on algebraica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.6 Torsi
on y no metricidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.7 Otras funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.8 Utilidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26.2.9 Variables utilizadas por ctensor . . . . . . . . . . . . . . . . . . . . . . .
26.2.10 Nombres reservados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

421
423
423
425
428
431
431
433
434
437
441
445

ix

27

atensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

27.1
27.2

28

Sumas productos y series . . . . . . . . . . . . . . . . . . 451

28.1
28.2
28.3
28.4
28.5
28.6

29

Introducci
on al entorno de ejecucion . . . . . . . . . . . . . . . . . . . . . . . . 507
Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Funciones y variables para el entorno de ejecucion . . . . . . . . . . . 507

Introducci
on a la miscel
anea de opciones . . . . . . . . . . . . . . . . . . . . 511
Share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Funciones y variables para la miscelanea de opciones . . . . . . . . 511

Reglas y patrones . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

34.1
34.2

35

Funciones y variables para grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . 505

Miscel
anea de opciones . . . . . . . . . . . . . . . . . . . . . 511

33.1
33.2
33.3

34

Funciones y variables para simetras . . . . . . . . . . . . . . . . . . . . . . . . . 487

Entorno de Ejecuci
on . . . . . . . . . . . . . . . . . . . . . . . 507

32.1
32.2
32.3

33

Funciones y variables para teora de n


umeros . . . . . . . . . . . . . . . . 471

Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505

31.1

32

451
456
456
468
468
469

Simetras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

30.1

31

Funciones y variables para sumas y productos . . . . . . . . . . . . . . .


Introducci
on a las series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para las series . . . . . . . . . . . . . . . . . . . . . . . . .
Introducci
on a las series de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para series de Fourier . . . . . . . . . . . . . . . . .
Funciones y variables para series de Poisson . . . . . . . . . . . . . . . . .

Teora de N
umeros . . . . . . . . . . . . . . . . . . . . . . . . . 471

29.1

30

Introducci
on a atensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Funciones y variables para atensor . . . . . . . . . . . . . . . . . . . . . . . . . . 448

Introducci
on a reglas y patrones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Funciones y variables sobre reglas y patrones . . . . . . . . . . . . . . . . 515

Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

35.1 Introducci
on a los conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35.1.1 Utilizaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35.1.2 Iteraciones con elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35.1.3 Fallos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35.1.4 Autores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35.2 Funciones y variables para los conjuntos . . . . . . . . . . . . . . . . . . . . .

531
531
533
534
535
535

Manual de Maxima

36

Definici
on de Funciones . . . . . . . . . . . . . . . . . . . . 559

36.1 Introducci
on a la definici
on de funciones. . . . . . . . . . . . . . . . . . . . .
36.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36.2.1 Funciones ordinarias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36.2.2 Funciones array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36.3 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36.4 Funciones y variables para la definicion de funciones . . . . . . . . .

37

Programaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587

37.1
37.2
37.3
37.4

38

Funciones y variables para bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

Introducci
on a cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Funciones y variables para cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Ejemplos para cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618

contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621

43.1
43.2
43.3
43.4
43.5

44

Funciones y variables para Bernstein . . . . . . . . . . . . . . . . . . . . . . . . 611

cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617

42.1
42.2
42.3

43

Funciones y variables para augmented lagrangian. . . . . . . . . . . . 609

bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

41.1

42

Depuraci
on del c
odigo fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Claves de depuraci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Funciones y variables para depurado . . . . . . . . . . . . . . . . . . . . . . . . 604

Bernstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611

40.1

41

587
588
588
588

augmented lagrangian . . . . . . . . . . . . . . . . . . . . . . 609

39.1

40

Lisp y Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Recolector de basura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introducci
on a la programacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para la programacion . . . . . . . . . . . . . . . . . .

Depurado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

38.1
38.2
38.3

39

559
559
559
560
561
564

Introducci
on a contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para contrib ode . . . . . . . . . . . . . . . . . . . . . .
Posibles mejoras a contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pruebas realizadas con contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias para contrib ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

621
623
626
626
626

descriptive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629

44.1
44.2
44.3
44.4

Introducci
on a descriptive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para el tratamiento de datos. . . . . . . . . . .
Funciones y variables de parametros descriptivos . . . . . . . . . . . .
Funciones y variables para graficos estadsticos . . . . . . . . . . . . . .

629
631
636
650

xi

45

diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659

45.1

46

distrib. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669

46.1
46.2
46.3

47

Funciones y variables para diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659

Introducci
on a distrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Funciones y variables para distribuciones continuas . . . . . . . . . . 671
Funciones y variables para distribuciones discretas . . . . . . . . . . . 695

draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707

47.1 Introducci
on a draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.2 Funciones y variables para draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.2.1 Escenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.2.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.2.3 Opciones gr
aficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.2.4 Objetos gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.3 Funciones y variables para picture . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.4 Funciones y variables para worldmap . . . . . . . . . . . . . . . . . . . . . . . .
47.4.1 Variables y Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47.4.2 Objetos gr
aficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

707
707
707
707
710
751
766
767
767
770

drawdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773

48.1 Introducci
on a drawdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
48.2 Funciones y variables para drawdf . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
48.2.1 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773

49

dynamics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777

49.1
49.2

50

ezunits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787

50.1
50.2
50.3

51

Introducci
on a ezunits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
Introducci
on a physical constants . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
Funciones y variables para ezunits . . . . . . . . . . . . . . . . . . . . . . . . . . . 790

f90. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805

51.1

52

Introducci
on a dynamics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
Funciones y variables para dynamics . . . . . . . . . . . . . . . . . . . . . . . . 777

Funciones y variables para f90. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805

finance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807

52.1
52.2

Introducci
on a finance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
Funciones y Variables para finance . . . . . . . . . . . . . . . . . . . . . . . . . . 807

xii

Manual de Maxima

53

fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813

53.1
53.2
53.3
53.4
53.5

54

Funciones y variables para ggf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817

graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819

55.1 Introducci
on a graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2 Funciones y variables para graphs . . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2.1 Construyendo grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2.2 Propiedades de los grafos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2.3 Modificaci
on de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2.4 Lectura y escritura de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . .
55.2.5 Visualizaci
on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

Introducci
on a interpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Funciones y variables para interpol . . . . . . . . . . . . . . . . . . . . . . . . . . 859

lapack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867

59.1
59.2

60

Funciones y variables para impdiff . . . . . . . . . . . . . . . . . . . . . . . . . . 857

interpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859

58.1
58.2

59

849
849
849
850
850
851
852
853

impdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857

57.1

58

819
819
819
825
840
842
843

grobner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849

56.1 Introducci
on a grobner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56.1.1 Notas sobre el paquete grobner . . . . . . . . . . . . . . . . . . . . . . . . .
56.1.2 Implementaciones de ordenes admisibles de monomios . .
56.2 Funciones y variables para grobner . . . . . . . . . . . . . . . . . . . . . . . . . .
56.2.1 Variables opcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56.2.2 Operadores simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56.2.3 Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56.2.4 Postprocesamiento estandar de bases de Groebner . . . . . .

57

813
813
814
815
815

ggf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817

54.1

55

Introducci
on a fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definiciones para IFS fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definiciones para fractales complejos . . . . . . . . . . . . . . . . . . . . . . . .
Definiciones para cops de Koch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definiciones para curvas de Peano . . . . . . . . . . . . . . . . . . . . . . . . . . .

Introducci
on a lapack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
Funciones y variables para lapack . . . . . . . . . . . . . . . . . . . . . . . . . . . 867

lbfgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875

60.1
60.2

Introducci
on a lbfgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
Funciones y variables para lbfgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875

xiii

61

lindstedt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881

61.1

62

linearalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883

62.1
62.2

63

Introducci
on a minpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
Funciones y variables para minpack . . . . . . . . . . . . . . . . . . . . . . . . . 909

mnewton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911

66.1

67

Funciones y variables para makeOrders . . . . . . . . . . . . . . . . . . . . . . 907

minpack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909

65.1
65.2

66

Funciones y variables para lsquares . . . . . . . . . . . . . . . . . . . . . . . . . . 897

makeOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907

64.1

65

Introducci
on a linearalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
Funciones y variables para linearalgebra . . . . . . . . . . . . . . . . . . . . . 885

lsquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897

63.1

64

Funciones y variables para lindstedt . . . . . . . . . . . . . . . . . . . . . . . . . 881

Funciones y variables para mnewton . . . . . . . . . . . . . . . . . . . . . . . . 911

numericalio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913

67.1 Introducci
on a numericalio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
67.1.1 Entrada y salida en formato texto . . . . . . . . . . . . . . . . . . . . . . 913
67.1.2 Separadores v
alidos para lectura . . . . . . . . . . . . . . . . . . . . . . . 913
67.1.3 Separadores v
alidos para escritura . . . . . . . . . . . . . . . . . . . . . . 913
67.1.4 Entrada y salida de decimales en formato binario . . . . . . . 914
67.2 Funciones y variables para entrada y salida en formato texto
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
67.3 Funciones y variables para entrada y salida en formato binario
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916

68

opsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919

68.1

69

Funciones y variables para opsubst . . . . . . . . . . . . . . . . . . . . . . . . . . 919

orthopoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921

69.1 Introducci
on a polinomios ortogonales . . . . . . . . . . . . . . . . . . . . . . .
69.1.1 Inici
andose con orthopoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.1.2 Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.1.3 Evaluaci
on numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.1.4 Gr
aficos y orthopoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.1.5 Miscel
anea de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.1.6 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69.2 Funciones y variables para polinomios ortogonales . . . . . . . . . . .

921
921
923
925
926
927
928
928

xiv

Manual de Maxima

70

romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933

70.1

71

simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937

71.1
71.2

72

955
955
957
972

Funciones y variables para stirling . . . . . . . . . . . . . . . . . . . . . . . . . . . 973

Introducci
on al procesamiento de cadenas . . . . . . . . . . . . . . . . . . .
Funciones y variables para entrada y salida . . . . . . . . . . . . . . . . . .
Funciones y variables para caracteres . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para cadenas . . . . . . . . . . . . . . . . . . . . . . . . . .

975
976
981
982

to poly solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989

77.1

78

Introducci
on a stats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para inference result . . . . . . . . . . . . . . . . . .
Funciones y variables para stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funciones y variables para distribuciones especiales . . . . . . . . . .

stringproc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975

76.1
76.2
76.3
76.4

77

Introducci
on a solve rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
Funciones y variables para solve rec . . . . . . . . . . . . . . . . . . . . . . . . . 949

stirling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973

75.1

76

939
939
939
941
944
945
946
946

stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955

74.1
74.2
74.3
74.4

75

Introducci
on a simplification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete absimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete facexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete functs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete ineq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete rducon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete scifac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Paquete sqdnst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

solve rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949

73.1
73.2

74

Introducci
on a simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
Funciones y variables para simplex . . . . . . . . . . . . . . . . . . . . . . . . . . 937

simplification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939

72.1
72.2
72.3
72.4
72.5
72.6
72.7
72.8

73

Funciones y variables para romberg . . . . . . . . . . . . . . . . . . . . . . . . . 933

Funciones y variables para to poly solve . . . . . . . . . . . . . . . . . . . . 989

unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007

78.1
78.2

Introducci
on a units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
Funciones y variables para units . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008

xv

79

zeilberger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017

79.1 Introducci
on a zeilberger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79.1.1 El problema de la suma indefinida. . . . . . . . . . . . . . . . . . . . .
79.1.2 El problema de la suma definida . . . . . . . . . . . . . . . . . . . . . .
79.1.3 Niveles de informaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79.2 Funciones y variables para zeilberger . . . . . . . . . . . . . . . . . . . . . . .

80

1017
1017
1017
1017
1018

Indice de Funciones y Variables . . . . . . . . . . 1021

Ap
endice A Indice de Funciones y Variables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023

Captulo 1: Introducci
on a Maxima

1 Introducci
on a Maxima
Se puede iniciar Maxima con el comando "maxima". Maxima desplegara alguna informacion
importante acerca de la versi
on que se esta usando y un prompt. Cada comando que vaya
a ser ejecutado por Maxima debe terminar con un punto y coma. Para finalizar una sesion
en Maxima se emplea el comando "quit();". A continuacion se presenta un breve ejemplo
de sesion:
[wfs@chromium]$ maxima
Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp CMU Common Lisp 19a
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) factor(10!);
8 4 2
(%o1)
2 3 5 7
(%i2) expand ((x + y)^6);
6
5
2 4
3 3
4 2
5
6
(%o2) y + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + x
(%i3) factor (x^6 - 1);
2
2
(%o3)
(x - 1) (x + 1) (x - x + 1) (x + x + 1)
(%i4) quit();
[wfs@chromium]$
Maxima puede hacer consultas en la documentacion. La instruccion describe mostrar
a
informaci
on sobre una funci
on o la lista de todas las funciones y variables que contengan
el texto pasado a describe. La interrogacion ? (b
usqueda exacta) y la doble interrogacion
?? (b
usqueda aproximada) son abreviaturas de la instruccion describe:
(%i1) ?? integ
0: Functions and Variables for Elliptic Integrals
1: Functions and Variables for Integration
2: Introduction to Elliptic Functions and Integrals
3: Introduction to Integration
4: askinteger (Functions and Variables for Simplification)
5: integerp (Functions and Variables for Miscellaneous Options)
6: integer_partitions (Functions and Variables for Sets)
7: integrate (Functions and Variables for Integration)
8: integrate_use_rootsof (Functions and Variables for Integration)
9: integration_constant_counter (Functions and Variables for
Integration)
10: nonnegintegerp (Functions and Variables for linearalgebra)
Enter space-separated numbers, all or none: 5 4
-- Function: integerp (<expr>)
Returns true if <expr> is a literal numeric integer, otherwise

Manual de Maxima

false.
integerp returns false if its argument is a symbol, even if the
argument is declared integer.
Examples:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)
(%i9)
(%o9)
-----

integerp (0);
true
integerp (1);
true
integerp (-17);
true
integerp (0.0);
false
integerp (1.0);
false
integerp (%pi);
false
integerp (n);
false
declare (n, integer);
done
integerp (n);
false

Function: askinteger (<expr>, integer)


Function: askinteger (<expr>)
Function: askinteger (<expr>, even)
Function: askinteger (<expr>, odd)
askinteger (<expr>, integer) attempts to determine from the
assume database whether <expr> is an integer. askinteger
prompts the user if it cannot tell otherwise, and attempt to
install the information in the database if possible. askinteger
(<expr>) is equivalent to askinteger (<expr>, integer).
askinteger (<expr>, even) and askinteger (<expr>, odd)
likewise attempt to determine if <expr> is an even integer or odd
integer, respectively.

(%o1)

true

Para usar posteriormente un resultado, se puede asignar dicho resultado a una variable
o referirse a el por medio de la etiqueta asociada (%i* o %o*). Ademas, se puede utilizar %
para referirse al u
ltimo resultado obtenido.
(%i1) u: expand ((x + y)^6);
6
5
2 4

Captulo 1: Introducci
on a Maxima

(%o1) y + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + x
(%i2) diff (u, x);
5
4
2 3
3 2
4
5
(%o2) 6 y + 30 x y + 60 x y + 60 x y + 30 x y + 6 x
(%i3) factor (%o2);
5
(%o3)
6 (y + x)
Maxima manipula sin ning
un problema n
umeros complejos y constantes numericas:
(%i1) cos(%pi);
(%o1)
- 1
(%i2) exp(%i*%pi);
(%o2)
- 1
Maxima puede hacer derivadas e integrales:
(%i1) u: expand ((x + y)^6);
6
5
2 4
3 3
4 2
5
6
(%o1) y + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + x
(%i2) diff (%, x);
5
4
2 3
3 2
4
5
(%o2) 6 y + 30 x y + 60 x y + 60 x y + 30 x y + 6 x
(%i3) integrate (1/(1 + x^3), x);
2 x - 1
2
atan(-------)
log(x - x + 1)
sqrt(3)
log(x + 1)
(%o3)
- --------------- + ------------- + ---------6
sqrt(3)
3
Maxima puede resolver sistemas de ecuaciones lineales y c
ubicas:
(%i1) linsolve ([3*x + 4*y = 7, 2*x + a*y = 13], [x, y]);
7 a - 52
25
(%o1)
[x = --------, y = -------]
3 a - 8
3 a - 8
(%i2) solve (x^3 - 3*x^2 + 5*x = 15, x);
(%o2)
[x = - sqrt(5) %i, x = sqrt(5) %i, x = 3]
Maxima puede resolver sistemas de ecuaciones no lineales. Tenga en cuenta que si usted
no desea que el resultado sea impreso, puede finalizar el comando con $ en vez de ;.
(%i1) eq_1: x^2 + 3*x*y + y^2 = 0$
(%i2) eq_2: 3*x + y = 1$
(%i3) solve ([eq_1, eq_2]);
3 sqrt(5) + 7
sqrt(5) + 3
(%o3) [[y = - -------------, x = -----------],
2
2
3 sqrt(5) - 7
sqrt(5) - 3
[y = -------------, x = - -----------]]
2
2
Maxima puede generar gr
aficos de una o mas funciones:

Manual de Maxima

(%i1) plot2d (sin(x)/x, [x, -20, 20])$

1
0.8

sin(x)/x

0.6
0.4
0.2
0
-0.2
-0.4
-20

-15

-10

-5

0
x

10

15

20

(%i2) plot2d ([atan(x), erf(x), tanh(x)], [x, -5, 5], [y, -1.5, 2])$

atan(x)
erf(x)
tanh(x)

1.5
1

0.5
0
-0.5
-1
-1.5
-4

-2

0
x

Captulo 1: Introducci
on a Maxima

(%i3) plot3d (sin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2),


[x, -12, 12], [y, -12, 12])$

sin(sqrt(y2+x2))/sqrt(y2+x2)

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4

-10

-5
x

10

-10

-5

10
y

Captulo 2: Detecci
on e informe de fallos

2 Detecci
on e informe de fallos
2.1 Funciones y variables para la detecci
on e informe de
fallos
run_testsuite ([options ])

[Funcion]
Ejecuta el conjunto de pruebas de Maxima. Los tests que producen las respuestas
deseadas son considerados como pruebas superadas, como los tests que no producen
las respuestas deseadas, son marcados como fallos conocidos.
run_testsuite admite las siguientes opciones:
display_all
Muestra todas las pruebas. Normalmente no se muestran las pruebas, a
menos que produzcan fallos. (Su valor por defecto es false).
display_known_bugs
Muestra las pruebas marcadas como fallos ya conocidos. (Su valor por
defecto es false).
tests

Esta es la lista de las pruebas que se deben ejecutar. Cada prueba se puede
especificar, tanto mediante una cadena de texto como por un smbolo. Por
defecto, todas las pruebas se ejecutan. El conjunto completo de pruebas
est
a especificado en testsuite_files.

time

Muestra informacion sobre tiempos de ejecucion. Si vale true, se muestran los tiempos de los ficheros de prueba. Si vale all, se muestran los
tiempos de cada prueba individual si display_all vale true. El valor
por defecto es false, por lo que no se muestra informacion temporal
alguna.

Por ejemplo, run_testsuite(display_known_bugs = true, tests=[rtest5]) ejecuta la prueba rtest5 y muestra si esta marcada como fallo conocido.
run_testsuite(display_all = true, tests=["rtest1", rtest1a]) ejecutara las
pruebas rtest1 y rtest2, mostrando cada una de ellas.
run_testsuite cambia el entorno de Maxima. Tpicamente un script de test ejecuta
kill para establecer un entorno conocido (llamese uno sin funciones ni variables
definidas por el usuario) y entonces define una serie de funciones y variables apropiadas
para el test.
run_testsuite retorna done.
[Variable opcional]
testsuite_files es el conjunto de tests a ejecutar por run_testsuite. Se trata de
una lista con los nombres de los ficheros que contienen los tests a ejecutar. Si se sabe
que alguno de los tests de un fichero falla, entonces en lugar de listar el nombre del
fichero, se utiliza una lista que contiene el nombre del fichero y los n
umeros de los
tests que fallan.

testsuite_files

Por ejemplo, esta es una parte de los tests por defecto:

Manual de Maxima

["rtest13s", ["rtest14", 57, 63]]


Con esto se especifica que el conjunto de tests esta formado por los ficheros "rtest13s"
y "rtest14", pero que "rtest14" contiene dos tests que se sabe que causan fallos, el 57
y el 63.

bug_report ()

[Funcion]
Imprime las versiones de Maxima y de Lisp y proporciona un enlace a la pagina web
sobre informe de fallos del proyecto Maxima. La informacion respecto a las versiones
es la misma que reporta la funcion build_info.
Cuando se informa sobre un fallo, es de gran ayuda que se copie la informacion
relacionada con la versi
on de Maxima y de Lisp usada, dentro del propio informe.
bug_report retorna una cadena vaca "".

build_info ()

[Funcion]
~
Devuelve un resumen de los parAmetros
con los que se ha compilado Maxima
en formato de estructura defstruct. Los campos de la estructura son: version,
timestamp, host, lisp_name y lisp_version. Cuando display2d toma el valor
true, la estructura se muestra como una peque~
na tabla.
Vease tambien bug_report.
Ejemplos:
(%i1) build_info ();
(%o1)
Maxima version: "5.26.0_16_gb72c64c_dirty"
Maxima build date: "2012-01-29 12:29:04"
Host type: "i686-pc-linux-gnu"
Lisp implementation type: "CMU Common Lisp"
Lisp implementation version: "CVS release-19a 19a-release-20040728 + minimal debia
(%i2) x : build_info ()$
(%i3) x@version;
(%o3)
5.26.0_16_gb72c64c_dirty
(%i4) x@timestamp;
(%o4)
2012-01-29 12:29:04
(%i5) x@host;
(%o5)
i686-pc-linux-gnu
(%i6) x@lisp_name;
(%o6)
CMU Common Lisp
(%i7) x@lisp_version;
(%o7)
CVS release-19a 19a-release-20040728 + minimal debian patches
(%i8) x;
(%o8)
Maxima version: "5.26.0_16_gb72c64c_dirty"
Maxima build date: "2012-01-29 12:29:04"
Host type: "i686-pc-linux-gnu"
Lisp implementation type: "CMU Common Lisp"
Lisp implementation version: "CVS release-19a 19a-release-20040728 + minimal debia

Captulo 3: Ayuda

3 Ayuda
3.1 Documentaci
on
El manual en lnea del usuario de Maxima puede ser visto en diferentes formas. Desde el
prompt interactivo de Maxima, el manual de usuario es visto como texto plano por medio
del comando ? (i.e., la funci
on describe). El manual de usuario tambien puede ser visto
como hipertexto tipo info por medio del programa info y como una pagina web a traves
de cualquier navegador.
El comando example muestra ejemplos para muchas funciones Maxima. Por ejemplo:
(%i1) example (integrate);
produce:
(%i2) test(f):=block([u],u:integrate(f,x),ratsimp(f-diff(u,x)))
(%o2) test(f) := block([u], u : integrate(f, x),
ratsimp(f - diff(u, x)))
(%i3) test(sin(x))
(%o3)
(%i4) test(1/(x+1))
(%o4)
(%i5) test(1/(x^2+1))
(%o5)
y salidas adicionales.

0
0
0

3.2 Funciones y variables para la ayuda


apropos (string )

[Funcion]
Busca los smbolos de Maxima en los cuales aparezca cadena en cualquier lugar dentro de su nombre. As, apropos (exp) devuelve una lista con todas las variables
y funciones que tengan exp formando parte de sus nombres, como expand, exp y
exponentialize. De esta forma, si el usuario tan solo recuerda parte del nombre de
algo, puede utilizar este comando para encontrar el resto del nombre. De manera semejante, tambien se puede hacer apropos (tr_) para encontrar una lista de muchas
de las variables relacionadas con el traductor, buena parte de las cuales comienzan
con tr_.
apropos("") devuelve una lista con todos los nombres de Maxima.
En caso de no encontrar informacion relevante, apropos devuelve la lista vaca [].
Ejemplo:
Devuelve todos los smbolos de Maxima que contienen la subcadena "gamma" en su
nombre:
(%i1) apropos("gamma");
(%o1) [%gamma, gamma, gammalim, gamma_expand, gamma_greek,
gamma_incomplete, gamma_incomplete_generalized,
gamma_incomplete_regularized, Gamma, log_gamma, makegamma,

10

Manual de Maxima

prefer_gamma_incomplete,
gamma_incomplete_generalized_regularized]

demo (archivo )

[Funcion]
Evalua las expresiones Maxima contenidas en archivo y muestra los resultados. demo
hace pausas despues de evaluar cada expresion y continua despues de que el usuario
ingrese un retorno de carro. (Si se ejecuta en Xmaxima, demo puede que necesite un
punto y coma ; a continuaci
on del retorno de carro.)
demo busca la lista de directorios file_search_demo para encontrar archivo. Si el
archivo tiene el sufijo dem, el sufijo puede ser omitido. Ver tambien file_search.
demo evalua su argumento. demo retorna el nombre del archivo demostracion.
Ejemplo:
(%i1) demo ("disol");
batching /home/wfs/maxima/share/simplification/disol.dem
At the _ prompt, type ; followed by enter to get next demo
(%i2)
load(disol)
_
(%i3)
(%o3)

exp1 : a (e (g + f) + b (d + c))
a (e (g + f) + b (d + c))

_
(%i4)
(%t4)

disolate(exp1, a, b, e)
d + c

(%t5)

g + f

(%o5)

a (%t5 e + %t4 b)

_
(%i5) demo ("rncomb");
batching /home/wfs/maxima/share/simplification/rncomb.dem
At the _ prompt, type ; followed by enter to get next demo
(%i6)
load(rncomb)
_
(%i7)

(%o7)

z
x
exp1 : ----- + --------y + x
2 (y + x)
z
x
----- + --------y + x
2 (y + x)

Captulo 3: Ayuda

(%i8)
(%o8)

_
(%i9)
(%o9)

11

combine(exp1)
z
x
----- + --------y + x
2 (y + x)

rncombine(%)
2 z + x
--------2 (y + x)

_
(%i10)

(%o10)

_
(%i11)
(%o11)

_
(%i12)
(%o12)

d
c
b
a
exp2 : - + - + - + 3
3
2
2
d
c
b
a
- + - + - + 3
3
2
2

combine(exp2)
2 d + 2 c + 3 (b + a)
--------------------6

rncombine(exp2)
2 d + 2 c + 3 b + 3 a
--------------------6

_
(%i13)

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

[Funcion]
[Funcion]
[Funcion]

La sentencia describe(string ) equivale a describe(string, exact).


La sentencia describe(string, exact) encuentra el elemento, si existe, cuyo
ttulo coincide exactamente con string (ignorando la diferencia entre may
usculas y
min
usculas).
La sentencia describe(string, inexact) encuentra todos los elementos documentados que contengan string en sus ttulos.
Si hay m
as de una opci
on, Maxima preguntara al usuario para que seleccione las
opciones que desee consultar.

12

Manual de Maxima

La sentencia ? foo (con espacio entre ? y foo) equivale a describe("foo", exact),


mientras que ?? foo equivale a describe("foo", inexact).
describe ("", inexact) produce una lista de todos los temas documentados en el
manual en lnea.
describe no eval
ua su argumento. La funcion describe devuelve true si encuentra
la documentaci
on solicitada y false en caso contrario.
Vease tambien Documentaci
on.
Ejemplo:
(%i1) ?? integ
0: Functions and Variables for Elliptic Integrals
1: Functions and Variables for Integration
2: Introduction to Elliptic Functions and Integrals
3: Introduction to Integration
4: askinteger (Functions and Variables for Simplification)
5: integerp (Functions and Variables for Miscellaneous Options)
6: integer_partitions (Functions and Variables for Sets)
7: integrate (Functions and Variables for Integration)
8: integrate_use_rootsof (Functions and Variables for
Integration)
9: integration_constant_counter (Functions and Variables for
Integration)
10: nonnegintegerp (Functions and Variables for linearalgebra)
Enter space-separated numbers, all or none: 7 8
-- Function: integrate (<expr>, <x>)
-- Function: integrate (<expr>, <x>, <a>, <b>)
Attempts to symbolically compute the integral of <expr> with
respect to <x>. integrate (<expr>, <x>) is an indefinite
integral, while integrate (<expr>, <x>, <a>, <b>) is a
definite integral, [...]
-- Option variable: integrate_use_rootsof
Default value: false
When integrate_use_rootsof is true and the denominator of
a rational function cannot be factored, integrate returns
the integral in a form which is a sum over the roots (not yet
known) of the denominator.
[...]
En este ejemplo fueron seleccionadas las opciones 7 y 8 (la salida ha sido recortada,
tal como indica [...]). Todas o ninguna de las opciones pueden ser seleccionadas
escribiendo all o none, las cuales pueden ser abreviadas por a o n, respectivamente.

Captulo 3: Ayuda

13

example (topic )
example ()

[Funcion]
[Funcion]
example (topic ) muestra algunos ejemplos sobre topic, el cual debe ser un smbolo
o cadena de texto. Para ver ejemplos sobre operadores como if, do o lambda el
argumento debe ser necesariamente una cadena de texto, como example ("do"). La
funci
on example no distingue entre min
usculas y may
usculas. La mayor parte de
ejemplos versan sobre funciones.
La sentencia example () devuelve la lista de todos los ejemplos existentes.
El nombre del fichero que contine los ejemplos existentes se guarda en la variable
global manual_demo, cuyo valor por defecto es "manual.demo".
La funci
on example no eval
ua su argumento.
Ejemplos:
(%i1) example(append);
(%i2) append([x+y,0,-3.2],[2.5E+20,x])
(%o2)
[y + x, 0, - 3.2, 2.5E+20, x]
(%o2)
done
(%i3) example("lambda");
(%i4) lambda([x,y,z],z^2+y^2+x^2)
2
2
2
(%o4)
lambda([x, y, z], z + y + x )
(%i5) %(1,2,a)
2
(%o5)
a + 5
(%i6) a+2+1
(%o6)
a + 3
(%o6)
done
(%i7) example("allROOTS");
(%i8) (1+2*x)^3 = 13.5*(1+x^5)
3
5
(%o8)
(2 x + 1) = 13.5 (x + 1)
(%i9) allroots(%)
(%o9) [x = .8296749902129361, x = - 1.015755543828121,
x = .9659625152196369 %i - .4069597231924075,
x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
(%o9)
done

[Variable opcional]
Valor por defecto: "manual.demo"
manual_demo especifica el nombre del fichero que contiene los ejemplo para la funcion
example.
Vease example.

manual_demo

Captulo 4: Lnea de comandos

15

4 Lnea de comandos
4.1 Introducci
on a la lnea de comandos
Consola
Existen distintos interfaces para Maxima, tales como wxMaxima, Xmaxima, Imaxima y la
consola o terminal de texto.
La consola trabaja en modo texto, al tiempo que para introducir instrucciones con ayuda
de un men
u y obtener resultados en modo grafico es necesario instalar otros interfaces.
A lo largo de este manual se utilizara la consola, la cual esta disponible en cualquiera
de los sistemas operativos en los que trabaja Maxima. El usuario puede introducir todas
las funciones de Maxima desde la consola; en el modo texto, los resultados se devolveran
normalmente en un formato ASCII bidimensional, mientras que los graficos necesitan de un
programa adicional tal como Gnuplot.

Entrada, Evaluaci
on, Simplificaci
on y Salida
Desde que el usuario introduce una solicitud de calculo hasta que obtiene el resultado en la
consola, se desarrolla un proceso que consta de cuatro fases:
1. Bien sea desde un teclado o desde un fichero se lee una expresion que el analizador
sint
actico se encargar
a de transformar en una cierta representacion interna. En esta
primera fase, se utilizan principalmente operadores tales como "+", "/" o "do".
2. La expresi
on leda por el analizador sintactico es evaluada durante la segunda fase. Las
variables se substituyen por sus valores y se ejecutan funciones tales como la derivacion
o la integraci
on. El resultado de esta fase es una expresion evaluada.
3. La expresi
on evaluada de la fase anterior se simplifica en esta tercera fase, en la que
una expresi
on tal como a+a se reduce a 2*a, o sin(%pi/2) se simplifica a 1.
4. Tras la tercera fase se dispone de una expresion que ha sido evaluada y posteriormente
simplificada. Ya en la cuarta y u
ltima fase, se prepara el resultado para ser mostrado
a traves de la consola.
El usuario puede tomar el control en cualquiera de las cuatro fases recien descritas. En
diferentes captulos de este manual se detallan estas posibilidades, pero en este se describen
aquellas instrucciones relacionadas con las fases primera y cuarta, relacionadas con la entrada y salida a traves de la consola. Los captulos sobre Evaluacion y Simplificacion tratan
de las otras dos fases intermedias.

Marcas
Maxima almacena todas las entradas con la marca %i seguida de un n
umero entero en orden
creciente, as como las salidas o resultados con la marca %o tambien seguida de un n
umero
de orden. Adem
as, ciertas funciones utilizan la marca intermedia %t. Otras variables del
sistema almacenan el u
ltimo resultado devuelto por Maxima o la u
ltima entrada efectuada
por el usuario. Los siguientes smbolos indican variables y funciones para la gestion de las
marcas:
__

16

Manual de Maxima

%
inchar
linenum

%%
linechar
nolabels

%th
outchar

Listas informativas
Maxima gestiona listas informativas, cuyos nombres se guardan en la variable del sistema
infolists. En el presente captulo se describen las listas labels, values y myoptions.
Los siguientes smbolos indican variables y funciones relacionadas con las listas informativas
y variables opcionales.
infolists
myoptions

labels
optionset

values

Otras listas informativas, que se describiran en otros captulos, son:


functions
rules
gradefs
structures

arrays
aliases
props
namespaces

macros
dependencies
let_rule_packages

Borrado y reiniciaci
on
A fin de establecer el contexto en el que trabaje Maxima, en el que no haya variables o
funciones definidas, o en el que se eliminen hipotesis, propiedades o definiciones concretas,
se dispone de las siguientes funciones:
kill

reset

reset_verbosely

Otras instrucciones
Se puede acceder a la documentaci
on con los smbolos ? y ??. En caso de que se utilice ? a
modo de prefijo de un smbolo, este se interpretara como smbolo de Lisp. Hay instrucciones
para terminar una sesi
on de Maxima o para cambiar a una sesion de Lisp. Tambien es
posible conocer el tiempo que ha necesitado Maxima para realizar un calculo. Para este
tipo de cuestiones, Maxima dispone de las siguientes instrucciones:
?
playback
quit

??
prompt
to_lisp

showtime

Las funciones read und readonly imprimen texto en la consola y leen la informacion
introducida por el usuario.

Salida por consola


Antes de mostrar un resultado, se transforma su representacion interna a otra externa. Por
ejemplo, la representaci
on interna de sqrt(x) es x^(1/2), y ambos formatos pueden ser
devueltos por Maxima en funci
on del valor que guarde la variable opcional sqrtdispflag.
Los siguientes smbolos y variables opcionales controlan la salida de resultados por consola:
%edispflag
absboxchar
display_format_internal
expt
nexpt

display2d
exptdispflag
ibase

Captulo 4: Lnea de comandos

linel
obase
sqrtdispflag

lispdisp
pfeformat
stardisp

17

negsumdispflag
powerdisp
ttyoff

Con las siguientes funciones es posible formatear los resultados:


disp
grind
print

display
ldisp

dispterms
ldisplay

4.2 Funciones y variables para la lnea de comandos


__

[Variable del sistema]


__ es la expresi
on de entrada que esta siendo actualmente evaluada. Esto es, mientras
se est
a evaluando una expresion de entrada, __ es igual a expr.
A __ se le asigna la expresi
on de entrada antes de que esta sea simplificada o evaluada.
Sin embargo, el valor de __ es simplificado, pero no evaluado, cuando su valor es
mostrado en el terminal.
La variable __ es reconocida por batch y por load. Cuando un fichero es procesado
por batch, la variable __ tiene el mismo significado que en el modo interactivo.
Cuando un fichero es procesado por load, a la variable __ se le asigna la u
ltima
expresi
on introducida, bien desde el modo interactivo, bien en un fichero por lotes;
en ning
un caso se le asigna a __ una expresion de entrada del fichero que esta siendo
procesado. En particular, si load (filename ) es ejecutado desde el modo interactivo,
entonces __ almacena la expresion load (filename ) mientras el fichero esta siendo
procesado.
Veanse tambien _ y %.
Ejemplos:
(%i1)
I was
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)

print ("I was called as", __);


called as print(I was called as, __)
print(I was called as, __)
foo (__);
foo(foo(__))
g (x) := (print ("Current input expression =", __), 0);
g(x) := (print("Current input expression =", __), 0)
[aa : 1, bb : 2, cc : 3];
[1, 2, 3]
(aa + bb + cc)/(dd + ee + g(x));
cc + bb + aa
Current input expression = -------------g(x) + ee + dd
6
(%o5)
------ee + dd

[Variable del sistema]


El smbolo _ representa la u
ltima expresion de entrada (esto es, %i1, %i2, %i3, ...).

18

Manual de Maxima

Al smbolo _ se le asigna la expresion de entrada antes de que esta sea simplificada


o evaluada. Sin embargo, el valor de _ se simplifica (pero no se eval
ua) cuando se
muestra en el terminal.
La variable _ es reconocida por batch y por load. Cuando un fichero es procesado por
batch, la variable _ tiene el mismo significado que en el modo interactivo. Cuando
un fichero es procesado por load, a la variable _ se le asigna la u
ltima expresion
introducida, bien desde el modo interactivo, bien en un fichero por lotes; en ning
un
caso se le asigna a _ una expresion de entrada del fichero que esta siendo procesado.
Veanse tambien __ y %.
Ejemplos:
(%i1) 13 + 29;
(%o1)
42
(%i2) :lisp $_
((MPLUS) 13 29)
(%i2) _;
(%o2)
42
(%i3) sin (%pi/2);
(%o3)
1
(%i4) :lisp $_
((%SIN) ((MQUOTIENT) $%PI 2))
(%i4) _;
(%o4)
1
(%i5) a: 13$
(%i6) b: 29$
(%i7) a + b;
(%o7)
42
(%i8) :lisp $_
((MPLUS) $A $B)
(%i8) _;
(%o8)
b + a
(%i9) a + b;
(%o9)
42
(%i10) ev (_);
(%o10)
42

[Variable del sistema]


El smbolo % representa la expresion de salida (esto es, %o1, %o2, %o3, ...) mas reciente
calculada por Maxima, independientemente de que la haya mostrado o no.
La variable % es reconocida por batch y por load. Cuando un fichero es procesado por
batch, la variable % tiene el mismo significado que en el modo interactivo. Cuando
un fichero es procesado por load, a la variable % se le asigna la u
ltima expresion
introducida, bien desde el modo interactivo, bien en un fichero por lotes; en ning
un
caso se le asigna a % una expresion de entrada del fichero que esta siendo procesado.
Veanse tambien _, %% y %th.

Captulo 4: Lnea de comandos

%%

19

[Variable del sistema]


En una sentencia compuesta, como block, lambda o (s_1, ..., s_n ), %% es el valor
de la sentencia previa.
~ definida cuando se utiliza en la primera sentencia, o fuera de
La variable %% no estA
una sentencia compuesta.
%% se puede utilizar con batch y load, manteniendo en ambos casos el mismo significado que en el modo interactivo.
Vease tambien %
Ejemplos:
Los siguientes dos ejemplos devuelven el mismo resultado.
(%i1) block (integrate (x^5, x), ev (%%, x=2) - ev (%%, x=1));
21
(%o1)
-2
(%i2) block ([prev], prev: integrate (x^5, x),
ev (prev, x=2) - ev (prev, x=1));
21
(%o2)
-2
Una sentencia compuesta puede contener otras sentencias compuestas. Independientemente de que una sentencia sea simple o compuesta, %% es el valor de la sentencia
previa.
(%i3) block (block (a^n, %%*42), %%/6);
n
(%o3)
7 a
Dentro de una sentencia compuesta, el valor de %% puede inspeccionarse en un punto
de interrupci
on que se abra ejecutando la funcion break. Por ejemplo, escribiendo
%%; en el siguiente ejemplo se obtiene 42.
(%i4) block (a: 42, break ())$
Entering a Maxima break point. Type exit; to resume.
_%%;
42
_

%th (i )

[Funcion]
Es el valor de la expresi
on de la i-esima salida anterior. Esto es, si la siguiente
expresi
on a calcular es la salida n-esima, %th (m ) es la salida (n - m)-esima.
%th es reconocido por batch y load, interpretandose de la misma manera que se acaba
de indicar. Cuando un fichero es procesado por load, %th se refiere a los calculos m
as
recientes; %th no hace referencia a las expresiones de salida incluidas en el propio
fichero que se est
a procesando.
Veanse tambien % y %%

20

Manual de Maxima

Ejemplo:
%th es u
til en ficheros batch para hacer referencia a grupos de resultados recien
obtenidos. En este ejemplo se asigna a s la suma de los cinco resultados.
(%i1) 1;2;3;4;5;
(%o1)
1
(%o2)
2
(%o3)
3
(%o4)
4
(%o5)
5
(%i6) block (s: 0, for i:1 thru 5 do s: s + %th(i), s);
(%o6)
15

[Smbolo especial]
Como prefijo de una funci
on o nombre de variable, ? significa que el nombre es de
Lisp, no de Maxima. Por ejemplo, ?round representa la funcion de Lisp ROUND. Vease
Lisp y Maxima para m
as informacion.
La notaci
on ? word (un smbolo de interrogacion seguido de una palabra y separados
por un espacio) equivale a describe ("word"). El smbolo de interrogacion debe
escribirse al comienzo de la lnea de entrada; en caso contrario no se reconoce como
una solicitud de documentacion.

??

[Smbolo especial]
La notaci
on ?? palabra (?? seguido de un espacio y una palabra) equivale a
describe("palabra", inexact). El smbolo de interrogacion debe escribirse al
comienzo de la lnea de entrada; en caso contrario no se reconoce como una solicitud
de documentaci
on.
[Variable opcional]

inchar
Valor por defecto: %i

La variable inchar es el prefijo de las etiquetas de las expresiones introducidas por el


usuario. Maxima crea automaticamente una etiqueta para cada expresion de entrada
concatenando inchar y linenum.
A inchar se le puede asignar cualquier smbolo o cadena, no necesariamente un
carac
acter sencillo. Puesto que internamente Maxima solo tiene en cuenta el primer
car
acter del prefijo, los prefijos inchar, outchar y linechar deben comenzar con
caracteres diferentes; en caso contrario, sentencias como kill(inlables) pueden dar
resultados inesperados.
Vease tambien labels.
Ejemplo:
(%i1) inchar: "input";
(%o1)
input
(input2) expand((a+b)^3);
3
2
2
3
(%o2)
b + 3 a b + 3 a b + a
(input3)

Captulo 4: Lnea de comandos

21

[Variable del sistema]

infolists

Valor por defecto: []


La variable infolists es una lista con los nombres de todas las listas que guardan
informaci
on sobre Maxima. Estas son:
labels

Todas las etiquetas %i, %o y %t con valores asignados.

values

Todos los
atomos que son variables de usuario, no opciones de Maxima
creadas con : o ::.

functions
Todas las funciones de usuario creadas con := o define.
arrays

Arreglos declarados y no declarados, creados por :, :: o :=.

macros

Cualquier macro definida por el usuario.

myoptions
Todas las opciones inicializadas por el usuario, independientemente de
que posteriormente hayan sido devueltas a sus valores por defecto.
rules
aliases

Reglas de patrones y simplificacion definidas por el usuario, creadas con


tellsimp, tellsimpafter, defmatch o defrule.

Atomos
que tienen un "alias" definido por el usuario, creado por las funciones alias, ordergreat o orderless o por haber declarado el atomo
como noun (nombre) con declare.

dependencies

Atomos
que tienen dependencias funcionales, creados por las funciones
depends o gradef.
gradefs

Funciones que tienen derivadas definidas por el usuario, creadas por la


funci
on gradef.

props

Todos los
atomos que tengan cualquier propiedad que no sea de las mencionadas hasta ahora, como las establecidas por atvalue, matchdeclare,
etc., as como propiedadas especificadas en la funcion declare.

let_rule_packages
Todos los paquetes de reglas let definidos por el usuario, junto con
el paquete especial default_let_rule_package; default_let_rule_
package es el nombre del paquete de reglas utilizado cuando no se use
ning
un otro especificado por el usuario.

kill
kill
kill
kill
kill
kill
kill
kill

(a_1, ..., a_n )


[Funcion]
(labels)
[Funcion]
(inlabels, outlabels, linelabels)
[Funcion]
(n )
[Funcion]
([m, n ])
[Funcion]
(values, functions, arrays, ...)
[Funcion]
(all)
[Funcion]
(allbut (a_1, ..., a_n ))
[Funcion]
Elimina todas las asignaciones (valor, funcion, arreglo o regla) hechas a los argumentos
a 1, ..., a n. Un argumento a k puede ser un smbolo o el elemento de un array. Si

22

Manual de Maxima

a k es elemento de un array, kill elimina la asignacion hecha a este elemento sin


afectar al resto del array.
Se reconocen varios argumentos especiales. Se pueden combinar diferentes clases de
argumentos, como por ejemplo, kill (inlabels, functions, allbut (foo, bar)).
La instrucci
on kill (labels) borra todas las asignaciones asociadas a las etiquetas de entrada, de salida e intermedias creadas hasta el momento. La instruccion
kill (inlabels) elimina u
nicamente las asignaciones de las etiquetas de entrada
que comienzan con el valor actual de inchar. Del mismo modo, kill (outlabels)
elimina u
nicamente las asignaciones de las etiquetas de salida que comienzan con el
valor actual de outchar. Finalmente, kill (linelabels) elimina u
nicamente las
asignaciones de las etiquetas de las expresiones intermedias que comienzan con el
valor actual de linechar.
La instrucci
on kill (n ), siendo n un entero, elimina las asignaciones de las u
ltimas
n etiquetas, tanto de entrada como de salida.
La instrucci
on kill ([m, n ]) elimina las asignaciones hechas a las etiquetas de entrada y salida desde la m hasta lan.
La instrucci
on kill (infolist ), siendo infolist cualquier elemento de infolists
(como values, functions o arrays), elimina todas las asignaciones hechas a los
elementos de infolist. Vease tambien infolists.
La instrucci
on kill (all) elimina todas las asignaciones de todas las variables, pero
no reinicia las variables globales a sus valores por defecto. Vease tambien reset.
La instrucci
on kill (allbut (a_1, ..., a_n )) elimina las asignaciones hechas a
todas las variables, excepto a a 1, ..., a n; la instruccion kill (allbut (infolist ))
elimina todas las asignaciones, excepto las de los elementos de infolist, pudiendo ser
infolist igual a values, functions, arrays, etc.
La memoria reservada para una asignacion no se libera hasta que no se vacen todos
los smbolos asociados con esta asignacion; por ejemplo, para liberar la memoria del
valor de un smbolo es necesario eliminar tanto la asignacion de la etiqueta de salida
que muestra el resultado, como la del propio smbolo.
La funci
on kill no evalua sus argumentos. El operador comilla-comilla, , obliga a
que se realice la evaluaci
on.
La llamada kill (symbol ) elimina todas las propiedades de symbol. Por el contrario,
remvalue, remfunction, remarray y remrule eliminan propiedades especficas.
kill siempre devuelve done, incluso cuando alguno de sus argumentos careca de
asignaci
on previa.

labels (symbol )
labels

[Funcion]
[Variable del sistema]
Retorna la lista de etiquetas de entrada, salida o de expresiones intermedias las
cuales empiezan con symbol. Tpicamente symbol es el valor de las variables inchar,
outchar o linechar. El caracter de etiqueta puede ser pasado con o sin signo de
porcentaje, as, por ejemplo, i y %i producen el mismo resultado.
Si ninguna etiqueta empieza con symbol, labels retorna a una lista vaca.

Captulo 4: Lnea de comandos

23

La funci
on labels no evalua su argumento. El operador comilla-comilla, , obliga a
que se realice la evaluaci
on. Por ejemplo, labels (inchar) devuelve las etiquetas
de entrada que empiezan con el caracter de etiqueta de entrada actual.
La variable labels es una lista de las etiquetas de entrada, salida y expresiones intermedias, incluyendo todas las etiquetas anteriores en el caso de que inchar, outchar
o linechar hayan sido redefinidas.
Por defecto, Maxima muestra el resultado de cada expresion introducida por el
usuario, asignando al resultado una etiqueta de salida. La salida (es decir el resultado) puede ser suprimida terminando la expresion de entrada con un $ (signo de
dolar) en vez de un ; (punto y coma). En este caso, se crea la etiqueta de salida
y se le asigna el resultado, aunque este no se muestre; a
un as, la etiqueta puede
ser referenciada de la misma forma que se hace con aquellas cuyos resultados s son
mostrados.
Veanse tambien: %, %% y %th.
Las etiquetas de expresiones intermedias pueden ser generadas por algunas funciones.
El interruptor programmode controla si solve y algunas otras funciones generan etiquetas de expresiones intermedias en vez de retornar una lista de expresiones. Algunas otras funciones, tales como ldisplay, siempre generan etiquetas de expresiones
intermedias.
Vease tambien: inchar, outchar, linechar y infolists.
[Variable opcional]
Valor por defecto: %t
La variable linechar es el prefijo de las etiquetas que genera Maxima para expresiones
intermedias. Cuando sea necesario, Maxima creara una etiqueta para cada expresion
intermedia concatenando linechar y linenum.
A linechar se le puede asignar cualquier smbolo o cadena, no necesariamente un
carac
acter sencillo. Puesto que internamente Maxima solo tiene en cuenta el primer
car
acter del prefijo, los prefijos inchar, outchar y linechar deben comenzar con
caracteres diferentes; en caso contrario, sentencias como kill(inlables) pueden dar
resultados inesperados.
Las expresiones intermedias pueden ser mostradas o no. Veanse tambien programmode
y labels.

linechar

[Variable del sistema]


El n
umero de la lnea del par de expresiones de entrada y salida actuales.

linenum

[Variable del sistema]


Valor por defecto: []
myoptions es la lista de todas las opciones que nunca fueron reconfiguradas por el
usuario, aunque estas hayan sido reconfiguradas a su valor por defecto.

myoptions

[Variable opcional]
Valor por defecto: false
Cuando nolabels vale true, las etiquetas de entrada y salida (%i y %o, respectivamente) son mostradas, pero a estas no se les asignan los resultados; ademas, las

nolabels

24

Manual de Maxima

etiquetas no se incorporan a la lista labels. Puesto que a las etiquetas no se les


asignan resultados, el colector de basura puede recuperar la memoria ocupada por
estos.
En el caso contrario, a las etiquetas de entrada y salida se les asignan los resultados
correspondientes y son a~
nadidas a la lista labels.
Las etiquetas de expresiones intermedias (%t) no se ven afectadas por la variable
nolabels; independientemente de que nolabels valga true o false, a las etiquetas
de expresiones intermedias se les asignan siempre valores, ademas de ser a~
nadidas a
la lista labels.
Veanse tambien batch, batchload y labels.
[Variable opcional]

optionset
Valor por defecto: false

Cuando optionset tiene como valor true, Maxima imprime un mensaje cada vez
que una opci
on de Maxima es reconfigurada. Esto es muy u
til si el usuario duda con
frecuencia de la correctitud de alguna opcion y quiere estar seguro de la variable a la
que el asign
o un valor fue verdaramente una variable opcion (o interruptor).
Ejemplo:
(%i1) optionset:true;
assignment: assigning to option optionset
(%o1)
true
(%i2) gamma_expand:true;
assignment: assigning to option gamma_expand
(%o2)
true
[Variable opcional]

outchar
Valor por defecto: %o

La variable outchar es el prefijo de las etiquetas de las expresiones calculadas por


Maxima. Maxima crea automaticamente una etiqueta para cada expresion calculada
concatenando outchar y linenum.
A outchar se le puede asignar cualquier smbolo o cadena, no necesariamente un
carac
acter sencillo. Puesto que internamente Maxima solo tiene en cuenta el primer
car
acter del prefijo, los prefijos inchar, outchar y linechar deben comenzar con
caracteres diferentes; en caso contrario, sentencias como kill(inlables) pueden dar
resultados inesperados.
Vease tambien labels.
Ejemplo:
(%i1) outchar: "output";
(output1)
output
(%i2) expand((a+b)^3);
3
2
2
3
(output2)
b + 3 a b + 3 a b + a
(%i3)

Captulo 4: Lnea de comandos

25

()
[Funcion]
(n )
[Funcion]
([m, n ])
[Funcion]
([m ])
[Funcion]
(input)
[Funcion]
(slow)
[Funcion]
(time)
[Funcion]
(grind)
[Funcion]
Muestra las entradas, salidas y expresiones intermedias sin recalcularlas. playback
solo muestra las expresiones asociadas con etiquetas; cualquier otra salida (tal como
texto impreso por print o describe, o mensajes de error) no es mostrada. Vease
tambien: labels.
playback no evalua sus argumentos. El operador comilla-comilla, , obliga a que se
realice la evaluaci
on. playback siempre devuelve done.
playback () (sin argumentos) muestra todas las entradas, salidas y expresiones intermedias generadas hasta el momento. Una expresion de salida es mostrada incluso
si esta fue suprimida por el caracter de terminacion $, cuando fue originalmente calculada.
playback (n ) muestra las n expresiones mas recientes. Cada entrada, salida y expresi
on intermedia cuenta como una.
playback ([m, n ]) muestra entradas, salidas y expresiones intermedias con los
n
umeros desde m hasta n, ambos inclusive.
playback ([m ]) es equivalente a playback ([m, m ]); esto usualmente imprime un
par de expresiones de entrada y salida.
playback (input) muestra todas las expresiones de entrada generadas hasta el momento.
playback (slow) hace pausas entre expresiones y espera a que el usuario pulse la
tecla enter para continuar. Esto es un comportamiento similar a demo.
playback (slow) es muy u
til en conjuncion con save o stringout cuando se crea
un archivo secundario de almacenamiento con el objetivo de elegir cuidadosamente
las expresiones realmente u
tiles.
playback (time) muestra el tiempo de computo por cada expresion.
playback (grind) muestra las expresiones de entrada en el mismo formato como la
funci
on grind. Las expresiones de salida no se ven afectadas por la opcion grind.
Vea grind. Los argumentos pueden ser combinados, por ejemplo, playback ([5,
10], grind, time, slow).

playback
playback
playback
playback
playback
playback
playback
playback

[Variable opcional]
Valor por defecto: _
prompt es el smbolo del prompt de la funcion demo, del modo playback (slow) y
del bucle de interrupci
on de Maxima (el que se invoca con break).

prompt

quit ()

[Funcion]
Termina una sesi
on de Maxima. Notese que la funcion debe ser invocada como
quit(); o quit()$, no como quit.

26

Manual de Maxima

Para parar un c
alculo muy demorado pulse Control-C. La accion por defecto es
retornar a prompt de Maxima. Si *debugger-hook* tiene como valor nil, pulsar
Control-C abrir
a el depurador de Lisp. Vea tambien: debugging.

read (expr_1, ..., expr_n )

[Funcion]
Imprime expr 1, ..., expr n y a continuacion lee una expresion desde la consola y
devuelve la expresi
on evaluada. La expresion termina con un punto y coma ; o con
el smbolo de d
olar $.
Vease tambien readonly.
(%i1) foo: 42$
(%i2) foo: read ("foo vale", foo, " -- nuevo valor.")$
foo vale 42 -- nuevo valor.
(a+b)^3;
(%i3) foo;
3
(%o3)
(b + a)

readonly (expr_1, ..., expr_n )

[Funcion]
Imprime expr 1, ..., expr n y a continuacion lee una expresion desde la consola y
devuelve la expresi
on sin evaluar. La expresion termina con un punto y coma ; o con
el smbolo de d
olar $.
(%i1) aa: 7$
(%i2) foo: readonly ("Introducir expresion:");
Introducir expresion:
2^aa;
aa
(%o2)
2
(%i3) foo: read ("Introducir expresion:");
Introducir expresion:
2^aa;
(%o3)
128
Vease tambien read.

reset ()

[Funcion]
Reconfigura muchas variables y opciones globales y algunas otras variables a sus
valores por defecto.

reset procesa las variables que se encuentran en la lista Lisp *variable-initialvalues*. La macro Lisp defmvar pone las variables en esta lista (entre otras acciones). Muchas, pero no todas, las variables y opciones globales son definidas por
defmvar, y algunas variables definidas por defmvar no son ni variables ni opciones
globales.

showtime

[Variable opcional]

Valor por defecto: false


Cuando showtime tiene como valor true, el tiempo de calculo y el tiempo de retardo
se imprimen junto con la salida de cada expresion.

Captulo 4: Lnea de comandos

27

El tiempo de c
alculo se almacena siempre, de manera que time y playback puedan
mostrar el tiempo de c
alculo incluso cuando showtime vale false.
Vease tambien timer.

to_lisp ()

[Function]
Entra en el interprete Lisp bajo Maxima. (to-maxima) retorna de nuevo a Maxima.
Ejemplo:
Define una funci
on y entra en el nivel Lisp. La definicion se consulta en la lista de
propiedades, luego se extrae la definicion de la funcion, se factoriza y almacena el
resultado en la variable $result. Esta variable se puede utilizar luego una vez se
haya vuelto al nivel de Maxima.
(%i1) f(x):=x^2+x;
2
f(x) := x + x

(%o1)
(%i2) to_lisp();
Type (to-maxima) to restart, ($quit) to quit Maxima.
MAXIMA> (symbol-plist $f)
(MPROPS (NIL MEXPR ((LAMBDA) ((MLIST) $X) ((MPLUS) ((MEXPT) $X 2) $X))))
MAXIMA> (setq $result ($factor (caddr (mget $f mexpr))))
((MTIMES SIMP FACTORED) $X ((MPLUS SIMP IRREDUCIBLE) 1 $X))
MAXIMA> (to-maxima)
Returning to Maxima
(%o2)
true
(%i3) result;
(%o3)
x (x + 1)
[Variable del sistema]

values
Valor inicial: []

values es una lista de todas las variables que el usuario ha creado (no incluye las
opciones de Maxima ni los interruptores). La lista comprende los smbolos a los que
se ha asignado un valor mediante : o ::.
Si el valor de una variable se borra con cualquiera de las instrucciones kill, remove
o remvalue, dicha variable desaparece de la lista values.
Vease functions para una lista de funciones definidas por el usuario.
Ejemplos:
Primero, values muestra los smbolos a, b y c, pero no d, pues no tiene valor asignado,
ni la funci
on de usuario f. Luego los valores de las variables se borran y values queda
como una lista vaca.
(%i1) [a:99, b::a-90, c:a-b, d, f(x):= x^2];
2
(%o1)
[99, 9, 90, d, f(x) := x ]
(%i2) values;
(%o2)
[a, b, c]
(%i3) [kill(a), remove(b,value), remvalue(c)];

28

Manual de Maxima

(%o3)
(%i4) values;
(%o4)

[done, done, [c]]


[]

4.3 Funciones y variables para la impresi


on
[Variable opcional]

%edispflag
Valor por defecto: false

Si %edispflag vale true, Maxima muestra %e elevado a un exponente negativo


como un cociente. Por ejemplo, %e^-x se muestra como 1/%e^x. Vease tambien
exptdispflag.
Ejemplo:
(%i1) %e^-10;
(%o1)
(%i2) %edispflag:true$
(%i3) %e^-10;
(%o3)

- 10
%e

1
---10
%e
[Variable opcional]

absboxchar
Valor por defecto: !

La variable absboxchar es el caracter utilizado para representar el valor absoluto de


una expresi
on que ocupa m
as de una lnea de altura.
Ejemplo:
(%i1) abs((x^3+1));
(%o1)

! 3
!
!x + 1!

disp (expr_1, expr_2, ...)

[Funcion]
Es como display pero s
olo se muestran los valores de los argumentos, no las ecuaciones. Es u
til para argumentos complicados que no tienen nombre o en situaciones
en las que solamente es de interes el valor del argumento pero no su nombre.
Veanse tambien ldisp y print.
Ejemplos:
(%i1) b[1,2]:x-x^2$
(%i2) x:123$
(%i3) disp(x, b[1,2], sin(1.0));
123
2
x - x

Captulo 4: Lnea de comandos

29

.8414709848078965
(%o3)

done

display (expr_1, expr_2, ...)

[Funcion]
Muestra las ecuaciones cuyos miembros izquierdos son expr i sin evaluar y cuyos
miembros derechos son los valores de las expresiones. Esta funcion es u
til en los
bloques y en las sentencias for para mostrar resultados intermedios. Los argumentos
de display suelen ser
atomos, variables subindicadas o llamadas a funciones.
Veanse tambien ldisplay, disp y ldisp.
Ejemplos:
(%i1) b[1,2]:x-x^2$
(%i2) x:123$
(%i3) display(x, b[1,2], sin(1.0));
x = 123
2
= x - x

b
1, 2

sin(1.0) = .8414709848078965
(%o3)

display2d

done
[Variable opcional]

Valor por defecto: true


Si display2d vale false, la salida por consola es una cadena unidimensional, en lugar
de una expresi
on bidimensional.
Vease tambien leftjust para cambiar la justificacion a la izquierda o el centrado de
la ecuaci
on.
Ejemplo:
(%i1) x/(x^2+1);
x
(%o1)
-----2
x + 1
(%i2) display2d:false$
(%i3) x/(x^2+1);
(%o3) x/(x^2+1)
[Variable opcional]
Valor por defecto: false
Si display_format_internal vale true, las expresiones se muestran sin ser transformadas de manera que oculten su representacion matematica interna. Se representa
lo que la funci
on inpart devolvera, en oposicion a part.
Ejemplos:

display_format_internal

30

Manual de Maxima

User
a-b;

part
a - b

a/b;

a
b

sqrt(x);

sqrt(x)

X*4/3;

4 X
--3

inpart
a + (- 1) b
- 1
a b
1/2
x
4
- X
3

dispterms (expr )

[Funcion]
Muestra expr en partes, una debajo de la otra. Esto es, primero se muestra el operador
de expr, luego cada termino si se trata de una suma, o cada factor si es un producto,
o si no se muestra separadamente la parte de una expresion mas general. Es u
til
si expr es demasiado grande para representarla de otra forma. Por ejemplo, si P1,
P2, ... son expresiones muy grandes, entonces el programa de representacion puede
superar el espacio de almacenamiento tratando de mostrar P1 + P2 + ... todo junto.
Sin embargo, dispterms (P1 + P2 + ...) muestra P1, debajo P2, etc. Cuando una
expresi
on exponencial es demasiado ancha para ser representada como A^B, si no se
utiliza dispterms, entonces aparecera como expt (A, B) (o como ncexpt (A, B), en
lugar de A^^B).
Ejemplo:
(%i1) dispterms(2*a*sin(x)+%e^x);
+
2 a sin(x)
x
%e
(%o1)

done

expt (a, b )
ncexpt (a, b )

[Smbolo especial]
[Smbolo especial]
Si una expresi
on exponencial es demasiado ancha para ser mostrada como a ^b aparecer
a como expt (a, b ) (o como ncexpt (a, b ) en lugar de a ^^b ).
Las funciones expt y ncexpt no se reconocen en una entrada.
[Variable opcional]
Valor por defecto: true
Si exptdispflag vale true, Maxima muestra las expresiones con exponentes negativos como cocientes. Vease tambien %edispflag.
Ejemplo:

exptdispflag

Captulo 4: Lnea de comandos

(%i1) exptdispflag:true;
(%o1)
(%i2) 10^-x;
(%o2)

(%i3) exptdispflag:false;
(%o3)
(%i4) 10^-x;
(%o4)

grind (expr )
grind

31

true
1
--x
10
false
- x
10

[Funcion]
[Variable opcional]
La funci
on grind imprime expr en la consola en un formato admisible como entrada
para Maxima. La funci
on grind devuelve siempre done.
Cuando expr es el nombre de una funcion o macro, grind muestra la definicion de la
funci
on o de la macro en lugar de solo su nombre.
Vease tambien string, que devuelve una cadena en lugar de imprimir la salida. La
funci
on grind intenta imprimir la expresion de forma que sea lago mas sencilla de
leer que la salida de string.
Cuando la variable grind vale true, la salida de string y stringout tienen el mismo
formato que la de grind; en caso contrario no se formatea la salida de esas funciones.
El valor por defecto de la variable grind es false.
La variable grind tambien se puede utilizar como argumento en playback. Si grind
est
a presente, playback imprime las expresiones de entrada en el mismo formato que
lo hace la funci
on grind; en caso contrario no se formatean la expresiones de entrada.
La funci
on grind eval
ua sus argumentos.
Ejemplos:
(%i1) aa + 1729;
(%o1)
aa + 1729
(%i2) grind (%);
aa+1729$
(%o2)
done
(%i3) [aa, 1729, aa + 1729];
(%o3)
[aa, 1729, aa + 1729]
(%i4) grind (%);
[aa,1729,aa+1729]$
(%o4)
done
(%i5) matrix ([aa, 17], [29, bb]);
[ aa 17 ]
(%o5)
[
]
[ 29 bb ]
(%i6) grind (%);
matrix([aa,17],[29,bb])$

32

Manual de Maxima

(%o6)
done
(%i7) set (aa, 17, 29, bb);
(%o7)
{17, 29, aa, bb}
(%i8) grind (%);
{17,29,aa,bb}$
(%o8)
done
(%i9) exp (aa / (bb + 17)^29);
aa
----------29
(bb + 17)
(%o9)
%e
(%i10) grind (%);
%e^(aa/(bb+17)^29)$
(%o10)
done
(%i11) expr: expand ((aa + bb)^10);
10
9
2
8
3
7
4
6
(%o11) bb
+ 10 aa bb + 45 aa bb + 120 aa bb + 210 aa bb
5
5
6
4
7
3
8
2
+ 252 aa bb + 210 aa bb + 120 aa bb + 45 aa bb
9
10
+ 10 aa bb + aa
(%i12) grind (expr);
bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6
+252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2
+10*aa^9*bb+aa^10$
(%o12)
done
(%i13) string (expr);
(%o13) bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6\
+252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2+10*aa^9*\
bb+aa^10
(%i14) cholesky (A):= block ([n : length (A), L : copymatrix (A),
p : makelist (0, i, 1, length (A))], for i thru n do
for j : i thru n do
(x : L[i, j], x : x - sum (L[j, k] * L[i, k], k, 1, i - 1),
if i = j then p[i] : 1 / sqrt(x) else L[j, i] : x * p[i]),
for i thru n do L[i, i] : 1 / p[i],
for i thru n do for j : i + 1 thru n do L[i, j] : 0, L)$
(%i15) grind (cholesky);
cholesky(A):=block(
[n:length(A),L:copymatrix(A),
p:makelist(0,i,1,length(A))],
for i thru n do
(for j from i thru n do
(x:L[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),
if i = j then p[i]:1/sqrt(x)
else L[j,i]:x*p[i])),

Captulo 4: Lnea de comandos

33

for i thru n do L[i,i]:1/p[i],


for i thru n do (for j from i+1 thru n do L[i,j]:0),L)$
(%o15)
done
(%i16) string (fundef (cholesky));
(%o16) cholesky(A):=block([n:length(A),L:copymatrix(A),p:makelis\
t(0,i,1,length(A))],for i thru n do (for j from i thru n do (x:L\
[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),if i = j then p[i]:1/sqrt(x\
) else L[j,i]:x*p[i])),for i thru n do L[i,i]:1/p[i],for i thru \
n do (for j from i+1 thru n do L[i,j]:0),L)
[Variable opcional]

ibase
Valor por defecto: 10
ibase es la base en la que Maxima lee valores enteros.

A ibase se le puede asignar cualquier entero entre 2 y 36 (base decimal), ambos


inclusive. Si ibase es mayor que 10, las cifras a utilizar seran los dgitos de 0 a 9, junto
con las letras del alfabeto A, B, C, ..., tantas como sean necesarias para completar
la base ibase. Las letras se interpretaran como cifras solo cuando el primer dgito
sea un valor entre 9. Es indiferente hacer uso de letras may
usculas o min
usculas. Las
cifras para la base 36, la mayor posible, son los dgitos numericos de 0 a 9 y las letras
desde la A hasta la Z.
Cualquiera que sea el valor de ibase, si un entero termina con un punto decimal, se
interpretar
a en base 10.
Vease tambien obase.
Ejemplos:
ibase menor que 10.
(%i1) ibase : 2 $
(%i2) obase;
(%o2)
(%i3) 1111111111111111;
(%o3)

10
65535

ibase mayor que 10. Las letras se interpretan como dgitos solo si el primer dgito es
una cifra entre 0 y 9.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)

ibase : 16 $
obase;
10
1000;
4096
abcd;
abcd
symbolp (abcd);
true
0abcd;
43981
symbolp (0abcd);
false

34

Manual de Maxima

Independientemente del valor de ibase, si el entero termina con un punto decimal,


se interpretar
a en base diez.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

ibase : 36 $
obase;
10
1234;
49360
1234.;
1234

ldisp (expr_1, ..., expr_n )

[Funcion]
Muestra las expresiones expr 1, ..., expr n en la consola con el formato de salida;
ldisp asigna una etiqueta a cada argumento y devuelve la lista de etiquetas.
Veanse tambien disp, display y ldisplay.
(%i1) e: (a+b)^3;
(%o1)
(%i2) f: expand (e);

3
(b + a)

3
2
2
3
(%o2)
b + 3 a b + 3 a b + a
(%i3) ldisp (e, f);
3
(%t3)
(b + a)

(%t4)

3
2
2
3
b + 3 a b + 3 a b + a

(%o4)
(%i4) %t3;

[%t3, %t4]
3
(b + a)

(%o4)
(%i5) %t4;
(%o5)

3
2
2
3
b + 3 a b + 3 a b + a

ldisplay (expr_1, ..., expr_n )

[Funcion]
Muestra las expresiones expr 1, ..., expr n en la consola con el formato de salida. Cad
expresi
on se muestra como una ecuacion de la forma lhs = rhs en la que lhs es uno
de los argumentos de ldisplay y rhs su valor. Normalmente, cada argumento ser
a
el nombre de una variable. La funcion ldisp asigna una etiqueta a cada ecuacion y
devuelve la lista de etiquetas.
Veanse tambien disp, display y ldisp.
(%i1) e: (a+b)^3;
(%o1)
(%i2) f: expand (e);

3
(b + a)

Captulo 4: Lnea de comandos

35

3
2
2
3
(%o2)
b + 3 a b + 3 a b + a
(%i3) ldisplay (e, f);
3
(%t3)
e = (b + a)

(%t4)
(%o4)
(%i4) %t3;
(%o4)
(%i5) %t4;
(%o5)

3
2
2
3
f = b + 3 a b + 3 a b + a
[%t3, %t4]
3
e = (b + a)
3
2
2
3
f = b + 3 a b + 3 a b + a

linel

[Variable opcional]

Valor por defecto: 79


La variable linel es la anchura (medida en n
umero de caracteres) de la consola que
se le da a Maxima para que muestre las expresiones. A linel se le puede asignar
cualquier valor, pero si este es muy peque~
no o grande resultara de poca utilidad. El
texto que impriman las funciones internas de Maxima, como los mensajes de error y
las salidas de la funci
on describe, no se ve afectado por el valor de linel.
[Variable opcional]
Valor por defecto: false
Si lispdisp vale true, los smbolos de Lisp se muestran precedidos del caracter de
interrogaci
on ?. En caso contrario, los smbolos de Lisp se muestran sin esta marca.
Ejemplos:
(%i1) lispdisp: false$
(%i2) ?foo + ?bar;
(%o2)
foo + bar
(%i3) lispdisp: true$
(%i4) ?foo + ?bar;
(%o4)
?foo + ?bar

lispdisp

[Variable opcional]
Valor por defecto: true
Si negsumdispflag vale true, x - y se muestra como x - y en lugar de - y + x.
Dandole el valor false se realiza un analisis adicional para que no se representen de
forma muy diferente dos expresiones similares. Una aplicacion puede ser para que a
+ %i*b y a - %i*b se representen ambas de la misma manera.

negsumdispflag

obase
Valor por defecto: 10
obase es la base en la que Maxima imprime los n
umeros enteros.

[Variable opcional]

36

Manual de Maxima

A obase se le puede asignar cualquier entero entre 2 y 36 (base decimal), ambos


inclusive. Si obase es mayor que 10, las cifras a utilizar seran los dgitos de 0 a
9, junto con las letras del alfabeto A, B, C, ..., tantas como sean necesarias para
completar la base obase. Si el primer dgito resulta ser una letra, se le a~
nadira el cero
como prefijo. Las cifras para la base 36, la mayor posible, son los dgitos numericos
de 0 a 9 y las letras desde la A hasta la Z.
Vease tambien ibase.
Ejemplos:
(%i1) obase : 2;
(%o1)
(%i2) 2^8 - 1;
(%o10)
(%i3) obase : 8;
(%o3)
(%i4) 8^8 - 1;
(%o4)
(%i5) obase : 16;
(%o5)
(%i6) 16^8 - 1;
(%o6)
(%i7) obase : 36;
(%o7)
(%i8) 36^8 - 1;
(%o8)

10
11111111
10
77777777
10
0FFFFFFFF
10
0ZZZZZZZZ
[Variable opcional]

pfeformat
Valor por defecto: false

Si pfeformat vale true, una fraccion de enteros sera mostrada con el caracter de
barra inclinada / entre ellos.
(%i1) pfeformat: false$
(%i2) 2^16/7^3;
(%o2)

65536
----343

(%i3) (a+b)/8;
(%o3)
(%i4) pfeformat: true$
(%i5) 2^16/7^3;
(%o5)
(%i6) (a+b)/8;
(%o6)

powerdisp
Valor por defecto: false

b + a
----8

65536/343
1/8 (b + a)
[Variable opcional]

Captulo 4: Lnea de comandos

37

Si powerdisp vale true, se muestran las sumas con sus terminos ordenados de menor
a mayor potencia. As, un polinomio se presenta como una serie de potencias truncada
con el termino constante al principio y el de mayor potencia al final.
Por defecto, los terminos de una suma se muestran en el orden de las potencias
decrecientes.
Ejemplo:
(%i1) powerdisp:true;
(%o1)
true
(%i2) x^2+x^3+x^4;
2
3
4
(%o2)
x + x + x
(%i3) powerdisp:false;
(%o3)
false
(%i4) x^2+x^3+x^4;
4
3
2
(%o4)
x + x + x

print (expr_1, ..., expr_n )

[Funcion]
Eval
ua y muestra las expresiones expr 1, ..., expr n secuencialmente de izquierda a
derecha, comenzando la impresion por el borde izquierdo de la consola.
El valor devuelto por print es el valor de su u
ltimo argumento. La funcion print no
genera etiquetas para las expresiones intermedias.
Veanse tambien display, disp, ldisplay y ldisp, que muestran una expresion por
lnea, mientras que print trata de mostrar dos o mas expresiones por lnea.
Para mostrar el contenido de un archivo vease printfile.
(%i1) r: print ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
radcan (log (a^10/b)))$
3
2
2
3
(a+b)^3 is b + 3 a b + 3 a b + a log (a^10/b) is
10 log(a) - log(b)
(%i2) r;
(%o2)
10 log(a) - log(b)
(%i3) disp ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
radcan (log (a^10/b)))$
(a+b)^3 is
3
b

2
+ 3 a b

2
+ 3 a

3
b + a

log (a^10/b) is
10 log(a) - log(b)

sqrtdispflag
Valor por defecto: true

[Variable opcional]

38

Manual de Maxima

Si sqrtdispflag vale false, hara que sqrt se muestre con el exponente 1/2.
[Variable opcional]
Valor por defecto: false
Si stardisp vale true, la multiplicacion se muestra con un asterisco * entre los
operandos.

stardisp

[Variable opcional]
Valor por defecto: false
Si ttyoff vale true, no se muestran las expresiones resultantes, pero estas se calculan
de todos modos y se les asignan etiquetas. Vease labels.
El texto que escriban las funciones internas de Maxima, tales como los mensajes de
error y las salidas de describe, no se ven afectadas por ttyoff.

ttyoff

Captulo 5: Tipos de datos y estructuras

39

5 Tipos de datos y estructuras


5.1 N
umeros
5.1.1 Introducci
on a los n
umeros
N
umeros enteros y racionales
Los calculos aritmeticos con n
umeros enteros y racionales son exactos. En principio, los
n
umeros enteros y racionales admiten una cantidad arbitraria de cifras, con la u
nica limitacion que impongan las capacidades de memoria del sistema.
(%i1) 1/3+5/4+3;
55
-12

(%o1)

(%i2) 100!;
(%o2) 9332621544394415268169923885626670049071596826438162146859\
2963895217599993229915608941463976156518286253697920827223758251\
185210916864000000000000000000000000
(%i3) 100!/101!;
1
(%o3)
--101
Funciones disponibles para los n
umeros enteros y racionales:
integerp
oddp
ratnump

numberp
evenp
rationalize

nonnegintegerp

N
umeros decimales en coma flotante
Maxima hace los c
alculos con n
umeros decimales en coma flotante en doble precision.

Ademas, Maxima puede hacer clculos con n


umeros decimales grandes en coma flotante
(bigfloats, en ingles), que, en principio, admiten precision arbitraria.
La coma de los n
umeros decimales en coma flotante se escribe con un punto y el exponente
se puede indicar con "f", "e" o "d". Por defecto, Maxima hace los calculos en doble precision
y muestra el exponente como "e" en el resultado, mientras que representa el exponente con
la letra "b" en el caso de decimales grandes de precision arbitraria. Maxima no distingue
si la letra del exponente se escribe en min
uscula o may
uscula.
(%i1) [2.0,1f10,1,e10,1d10,1d300];
(%o1)
[2.0, 1.e+10, 1, e10, 1.e+10, 1.e+300]
(%i2) [2.0b0,1b10,1b300];
(%o2)
[2.0b0, 1.0b10, 1.0b300]
Si en un c
alculo aritmetico aparece un n
umero decimal en coma flotante, se producir
a
un efecto de contagio que har
a que el resultado se devuelva tambien como decimal. Esto
tambien es cierto para el caso de decimales grandes de precision arbitraria.

40

Manual de Maxima

(%i1) 2.0+1/2+3;
(%o1)
5.5
(%i2) 2.0b0+1/2+3;
(%o2)
5.5b0
Con las funciones float y bfloat se puede convertir un n
umero en decimal de doble
precision, o de precisi
on arbitraria, respectivamente:
(%i1) float([2,1/2,1/3,2.0b0]);
(%o1)
[2.0, 0.5, .3333333333333333, 2.0]
(%i2) bfloat([2,1/2,1/3,2.0b0]);
(%o2)
[2.0b0, 5.0b-1, 3.333333333333333b-1, 2.0b0]
Funciones y variables disponibles para n
umeros decimales:
float
floatnump
bfloat
bfloatp
fpprec
float2bf
bftorat
ratepsilon
number_pbranch
m1pbranch

N
umeros complejos
Maxima no tiene un tipo de dato especco para n
umeros complejos; estos se representan
internamente como la suma de la parte real y la imaginaria multiplicada por el smbolo %i,
que hace las veces de unidad imaginaria. Por ejemplo, las races de la ecuacion x^2 - 4*x
+ 13 = 0 se representan como 2 + 3*%i y 2 - 3*%i.
Maxima no simplifica autom
aticamente productos, cocientes, races y otras expresiones
con n
umeros complejos. Por ejemplo, para hacer la multiplicacion de n
umeros complejos se
puede utilizar la funci
on expand.
Funciones disponibles para los n
umeros complejos:
realpart
imagpart
rectform
polarform
cabs
carg
conjugate
csign

5.1.2 Funciones y variables para los n


umeros
bfloat (expr )

[Funcion]
Convierte todos los n
umeros y funciones numericas a n
umeros decimales de punto
flotante grandes ("bigfloats"). El n
umero de dgitos significativos de los "bigfloats"
resultantes se especifica mediante la variable global fpprec.
Si float2bf vale false se mostrara un mensaje de aviso cuando un n
umero en punto
flotante se convierte a decimal de tipo "bigfloats", puesto que tal transformacion
puede conllevar perdida de precision.

bfloatp (expr )

[Funcion]
Devuelve true si expr es un n
umero decimal en punto flotante grande ("bigfloats"),
en caso contrario devuelve false.

bftorat
Valor por defecto: false

[Variable optativa]

Captulo 5: Tipos de datos y estructuras

41

La variable bftorat controla la conversion de n


umeros decimales de punto flotante
grandes ("bigfloats") a n
umeros racionales. Si bftorat vale false, se utilizar
a
ratepsilon para controlar la conversion (lo cual resulta en n
umeros racionales relativamente peque~
nos). Si bftorat vale true, el n
umero racional generado representar
a
exactamente al n
umero decimal de punto flotante grande ("bigfloat").
[Variable optativa]
Valor por defecto: true
La variable bftrunc provoca la eliminacion de ceros en n
umeros decimales grandes
no nulos para que no se muestren. As, si bftrunc vale false, bfloat (1) se muestra
como 1.000000000000000B0. En otro caso, se mostrara como 1.0B0.

bftrunc

evenp (expr )

[Funcion]

Devuelve true si expr es un entero par y false en cualquier otro caso.

float (expr )

[Funcion]
Convierte los enteros, n
umeros racionales y los decimales de punto flotante grandes
("bigfloats") que est
an presentes en expr a n
umeros de punto flotante. Tambien act
ua
como smbolo evflag.

float2bf

[Variable optativa]

Valor por defecto: true


Si float2bf vale false se mostrara un mensaje de aviso cuando un n
umero en punto
flotante se convierte a decimal de tipo "bigfloats", puesto que tal transformacion
puede conllevar perdida de precision.

floatnump (expr )

[Funcion]
Devuelve true si expr es un n
umero de punto flotante, en caso contario retorna false.

fpprec

[Variable optativa]

Valor por defecto: 16


La variable fpprec guarda el n
umero de dgitos significativos en la aritmetica con
n
umeros decimales de punto flotante grandes ("bigfloats"). La variable fpprec no
afecta a los c
alculos con n
umeros decimales de punto flotante ordinarios.
Veanse tambien bfloat y fpprintprec.
[Variable optativa]
Valor por defecto: 0
La variable fpprintprec guarda el n
umero de dgitos a imprimir de los n
umeros decimales en coma flotante, tanto los ordinarios como los de precision ilimitada (bigfloats).
En el caso de los decimales ordinarios, si fpprintprec toma un valor entre 2 y 16
(inclusive), el n
umero de dgitos que se imprimen es igual a fpprintprec. En caso
contrario, fpprintprec es 0 o mayor que 16, siendo el n
umero de dgitos a imprimir
en todos loa casos igual a 16.
En el caso de los decimales de precision ilimitada (bigfloats), si fpprintprec toma
un valor entre 2 y 16 (inclusive), el n
umero de dgitos que se imprimen es igual a
fpprintprec. En caso contrario, fpprintprec es 0 o mayor que fpprec, siendo el
n
umero de dgitos a imprimir igual a fpprec.
La variable fpprintprec no admite el valor 1.

fpprintprec

42

Manual de Maxima

integerp (expr )

[Funcion]
Devuelve true si expr es un n
umero entero y false en cualquier otro caso.
La funci
on integerp devuelve false si su argumento es un smbolo, incluso cuando
este ha sido declarado como entero.
Ejemplos:
(%i1) integerp (0);
(%o1)
true
(%i2) integerp (1);
(%o2)
true
(%i3) integerp (-17);
(%o3)
true
(%i4) integerp (0.0);
(%o4)
false
(%i5) integerp (1.0);
(%o5)
false
(%i6) integerp (%pi);
(%o6)
false
(%i7) integerp (n);
(%o7)
false
(%i8) declare (n, integer);
(%o8)
done
(%i9) integerp (n);
(%o9)
false
[Variable opcional]
Valor por defecto: false
La variable m1pbranch es la rama principal de -1 elevado a una potencia. Cantidades
como (-1)^(1/3) (esto es, un exponente racional impar) y (-1)^(1/4) (esto es, un
exponente racional par) son tratados como sigue:
dominio real

m1pbranch

(-1)^(1/3):
(-1)^(1/4):

-1
(-1)^(1/4)

dominio complejo
m1pbranch:false
m1pbranch:true
(-1)^(1/3)
1/2+%i*sqrt(3)/2
(-1)^(1/4)
sqrt(2)/2+%i*sqrt(2)/2

nonnegintegerp (n )

[Funcion]

Devuelve true si y solo si n >= 0, siendo n un entero.

numberp (expr )

[Funcion]
Devuelve true si expr es un en
umero entero, racional, de coma flotante o "bigfloat",
en caso contrario devuelve false.
La funci
on numberp devuelve false si su argumento es un smbolo, incluso cuando
el argumento es un n
umero simbolico como %pi o %i, o aunque haya sido declarado

Captulo 5: Tipos de datos y estructuras

43

como even (par), odd (impar), integer (entero), rational (racional), irrational
(irracional), real (real), imaginary (imaginario) o complex (complejo).
Ejemplos:
(%i1) numberp (42);
(%o1)
true
(%i2) numberp (-13/19);
(%o2)
true
(%i3) numberp (3.14159);
(%o3)
true
(%i4) numberp (-1729b-4);
(%o4)
true
(%i5) map (numberp, [%e, %pi, %i, %phi, inf, minf]);
(%o5)
[false, false, false, false, false, false]
(%i6) declare (a, even, b, odd, c, integer, d, rational,
e, irrational, f, real, g, imaginary, h, complex);
(%o6)
done
(%i7) map (numberp, [a, b, c, d, e, f, g, h]);
(%o7) [false, false, false, false, false, false, false, false]
[Variable opcional]
La variable numer hace algunas funciones matematicas con argumentos numericos se
eval
uen como decimales de punto flotante. Tambien hace que las variables de una
expresi
on a las cuales se les ha asignado un n
umero sean sustituidas por sus valores.
Adem
as, activa la variable float.
Vease tambien %enumer.
Ejemplos:
(%i1) [sqrt(2), sin(1), 1/(1+sqrt(3))];
1
(%o1)
[sqrt(2), sin(1), -----------]
sqrt(3) + 1
(%i2) [sqrt(2), sin(1), 1/(1+sqrt(3))],numer;
(%o2) [1.414213562373095, .8414709848078965, .3660254037844387]

numer

[Variable opcional]
Valor por defecto: false
La variable opcional numer_pbranch controla la evaluacion numerica de las potencias
de n
umeros enteros, racionales y decimales negativos. Si numer_pbranch vale true
y el exponente es decimal o la variable opcional numer vale true, Maxima eval
ua el
resultado numerico utilizando la rama principal. En caso contrario, se devuleve un
resultado simplificado pero no evaluado.
Ejemplos:
(%i1) (-2)^0.75;
(%o1) (-2)^0.75

numer_pbranch

(%i2) (-2)^0.75,numer_pbranch:true;
(%o2) 1.189207115002721*%i-1.189207115002721

44

Manual de Maxima

(%i3) (-2)^(3/4);
(%o3) (-1)^(3/4)*2^(3/4)
(%i4) (-2)^(3/4),numer;
(%o4) 1.681792830507429*(-1)^0.75
(%i5) (-2)^(3/4),numer,numer_pbranch:true;
(%o5) 1.189207115002721*%i-1.189207115002721

numerval (x_1, expr_1, ..., var_n, expr_n )

[Funcion]
Declara las variables x_1, ..., x n asignandoles los valores numericos expr_1, ..., expr_
n. El valor numerico se eval
ua y sustituye a la variable en cualquier expresion en la
que esta aparezca si numer toma el valor true. Vease tambien ev.
Las expresiones expr_1, ..., expr_n pueden ser expresiones no necesariamente
numericas.

oddp (expr )

[Funcion]

Devuelve true si expr es un entero impar y false en caso contrario.


[Variable opcional]

ratepsilon
Valor por defecto: 2.0e-8

La variable ratepsilon guarda la tolerancia utilizada en la conversion de n


umeros
decimales en coma flotante a n
umeros racionales.

rationalize (expr )

[Funcion]
Convierte todos los n
umeros en coma flotante de doble precision y grandes (big float)
presentes en una expresi
on expr de Maxima a sus formas racionales exactas equivalentes. Si el usuario no est
a familiarizado con la representacion binaria de n
umeros en
coma flotante, le puede extra~
nar que rationalize (0.1) no sea igual que 1/10. Este
comportamiento no es u
nico de Maxima, ya que el n
umero 1/10 en su forma binaria
es peri
odico y no exacto.
(%i1) rationalize (0.5);
(%o1)

1
2

(%i2) rationalize (0.1);


(%o2)

1
-10

(%i3) fpprec : 5$
(%i4) rationalize (0.1b0);
(%o4)
(%i5) fpprec : 20$
(%i6) rationalize (0.1b0);

209715
------2097152

Captulo 5: Tipos de datos y estructuras

45

236118324143482260685
(%o6)
---------------------2361183241434822606848
(%i7) rationalize (sin (0.1*x + 5.6));
x
28
(%o7)
sin(-- + --)
10
5

ratnump (expr )

[Funcion]
Devuelve true si expr es un entero literal o una fraccion de enteros literales, en caso
contrario devuelve false.

46

Manual de Maxima

5.2 Cadenas de texto


5.2.1 Introducci
on a las cadenas de texto
Las cadenas de caracteres deben ir acotadas por comillas dobles (") al ser introducidas en
Maxima, siendo luego mostradas con o sin ellas, dependiendo del valor de la variable global
stringdisp.
Las cadenas pueden contener todo tipo de caracteres, incluyendo tabulaciones, caracteres
de nueva lnea y de retorno. La secuencia \" se reconoce literalmente como una comilla
doble, al tiempo que \\ se interpreta como una barra invertida. Cuando la barra invertida
aparece al final de una lnea, tanto la barra como el final de lnea (representado este bien por
el caracter de nueva lnea o el de retorno) son ignorados, de forma que la cadena contin
ua
en el siguiente rengl
on. No se reconocen mas combinaciones especiales de la barra invertida
con otros caracteres aparte de las comentadas; de modo que si la barra invertida aparece
antes de cualquier otro car
acter distinto de ", \, o de un final de lnea, dicha barra ser
a
ignorada. No hay manera de representar los caracteres especiales (tabulacion, nueva lnea
o retorno) de otra forma que no sea incluyendolos literalmente en la cadena.
No existe en Maxima el tipo de variable caracter, debiendose representar un caracter
simple como una cadena de un solo caracter.
El paquete adicional stringproc contiene muchas funciones que permiten trabajar con
cadenas.
Ejemplos:
(%i1) s_1 : "This is a string.";
(%o1)
This is a string.
(%i2) s_2 : "Embedded \"double quotes\" and backslash \\ characters.";
(%o2) Embedded "double quotes" and backslash \ characters.
(%i3) s_3 : "Embedded line termination
in this string.";
(%o3) Embedded line termination
in this string.
(%i4) s_4 : "Ignore the \
line termination \
characters in \
this string.";
(%o4) Ignore the line termination characters in this string.
(%i5) stringdisp : false;
(%o5)
false
(%i6) s_1;
(%o6)
This is a string.
(%i7) stringdisp : true;
(%o7)
true
(%i8) s_1;
(%o8)
"This is a string."

Captulo 5: Tipos de datos y estructuras

47

5.2.2 Funciones y variables para las cadenas de texto


concat (arg_1, arg_2, ...)

[Funcion]
Concatena sus argumentos, que deben ser todos atomos. El valor devuelto es un
smbolo si el primer argumento es a su vez un smbolo, o una cadena en caso contrario.
La funci
on concat eval
ua sus argumentos. El apatrofo evita la evaluacion.
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

y: 7$
z: 88$
concat (y, z/2);
744
concat (y, z/2);
y44

A un smbolo construido por concat se le puede asignar un valor y ser utilizado


posteriormente en expresiones. La asignacion con el operador :: eval
ua su expresion
izquierda.
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)

a: concat (y, z/2);


y44
a:: 123;
123
y44;
123
b^a;

(%o8)
(%i9) %, numer;
(%o9)

y44
b
123
b

Notese que aunque concat (1, 2) parezca un n


umero, se trata de una cadena.
(%i10) concat (1, 2) + 3;
(%o10)

12 + 3

sconcat (arg_1, arg_2, ...)

[Funcion]
Concatena sus argumentos para producir una cadena. Al contrario que concat, sus
argumentos no necesitan ser atomos.
El resultado es una cadena.
(%i1) sconcat ("xx[", 3, "]:", expand ((x+y)^3));
(%o1)
xx[3]:y^3+3*x*y^2+3*x^2*y+x^3

string (expr )

[Funcion]

Convierte expr a la notaci


on lineal de Maxima, tal como si fuese tecleada.
El valor que retorna la funci
on string es una cadena, por lo que no puede ser utilizada
en los c
alculos.

stringdisp
Valor por defecto: false

[Variable opcional]

48

Manual de Maxima

Si stringdisp vale true, las cadenas alfanumericas se muestran encerradas entre


comillas dobles. En caso contrario, no se nuestran las comillas.
La variable stringdisp vale siempre true cuando se muestra la definicion de una
funci
on.
Ejemplos:
(%i1) stringdisp: false$
(%i2) "This is an example string.";
(%o2)
This is an example string.
(%i3) foo () :=
print ("This is a string in a function definition.");
(%o3) foo() :=
print("This is a string in a function definition.")
(%i4) stringdisp: true$
(%i5) "This is an example string.";
(%o5)
"This is an example string."

Captulo 5: Tipos de datos y estructuras

49

5.3 Constantes
5.3.1 Funciones y variables para Constantes
%e

[Constante]
El smbolo %e representa a la base de los logaritmos naturales, tambien conocido
como n
umero de Euler. El valor numerico de %e es el n
umero decimal en coma
flotante 2.718281828459045d0.

%i

[Constante]
El smbolo %i representa la unidad imaginaria, sqrt(1).
[Constante]
El smbolo false representa al valor logico "falso". Maxima implementa false con
el valor NIL de Lisp.

false

%gamma

[Constante]

Es la constante de Euler-Mascheroni, 0.5772156649015329 ....


[Constante]

ind
ind representa un resultado acotado indeterminado.
Vease tambien limit.
Ejemplo:
(%i1) limit (sin(1/x), x, 0);
(%o1)
ind

[Constante]

inf
El smbolo inf representa al infinito real positivo.

infinity

[Constante]

El smbolo infinity representa al infinito complejo.


[Constante]

minf
El smbolo minf representa al infinito real negativo.

%phi

[Constante]
El smbolo %phi representa a la llamada raz
on
aurea, (1 + sqrt(5))/2. El valor
numerico de %phi es el n
umero decimal en coma flotante 1.618033988749895d0.
La funci
on fibtophi expresa los n
umeros de Fibonacci fib(n) en terminos de %phi.
Por defecto, Maxima desconoce las propiedades algebraicas de %phi. Tras evaluar
tellrat(%phi^2 - %phi - 1) y algebraic: true, ratsimp puede simplificar algunas
expresiones que contengan %phi.
Ejemplos:
fibtophi expresa el n
umero de Fibonacci fib(n) en terminos de %phi.
(%i1) fibtophi (fib (n));
n
n
%phi - (1 - %phi)
(%o1)
-------------------

50

Manual de Maxima

(%i2)
(%o2)
(%i3)

(%o3)

(%i4)
(%o4)

2 %phi - 1
fib (n-1) + fib (n) - fib (n+1);
- fib(n + 1) + fib(n) + fib(n - 1)
fibtophi (%);
n + 1
n + 1
n
n
%phi
- (1 - %phi)
%phi - (1 - %phi)
- --------------------------- + ------------------2 %phi - 1
2 %phi - 1
n - 1
n - 1
%phi
- (1 - %phi)
+ --------------------------2 %phi - 1
ratsimp (%);
0

Por defecto, Maxima desconoce las propiedades algebraicas de %phi. Despues de


evaluar tellrat (%phi^2 - %phi - 1) y algebraic: true, ratsimp puede simplificar
algunas expresiones que contengan %phi.
(%i1) e : expand ((%phi^2 - %phi - 1) * (A + 1));
2
2
(%o1)
%phi A - %phi A - A + %phi - %phi - 1
(%i2) ratsimp (e);
2
2
(%o2)
(%phi - %phi - 1) A + %phi - %phi - 1
(%i3) tellrat (%phi^2 - %phi - 1);
2
(%o3)
[%phi - %phi - 1]
(%i4) algebraic : true;
(%o4)
true
(%i5) ratsimp (e);
(%o5)
0

%pi

[Constante]
El smbolo %pi representa la razon entre la longitud de una circunferencia y su radio.
El valor numerico de %pi es el n
umero decimal en coma flotante 3.141592653589793d0.

true

[Constante]
El smbolo true representa al valor logico "verdadero". Maxima implementa true
con el valor T de Lisp.
[Constante]

und
und representa un resultado indefinido.
Vease tambien limit.
Ejemplo:
(%i1) limit (x*sin(x), x, inf);
(%o1)
und

Captulo 5: Tipos de datos y estructuras

51

[Constante]
zeroa representa un infinitesimal mayor que cero. zeroa puede utilizarse en expresiones. limit simplifica expresiones que contienen infinitesimales.
Veanse tambien zerob y limit.
Ejemplo:
limit simplifica expresiones que contienen infinitesimales:
(%i1) limit(zeroa);
(%o1)
0
(%i2) limit(x+zeroa);
(%o2)
x

zeroa

[Constante]
zerob representa un infinitesimal menor que cero. zerob puede utilizarse en expresiones. limit simplifica expresiones que contienen infinitesimales.
Veanse tambien zeroa y limit.

zerob

52

Manual de Maxima

5.4 Listas
5.4.1 Introducci
on a las listas
Las listas son bloques de construccion basica para Maxima y Lisp. Todos los tipos de datos
diferentes a los arreglos, tablas mixtas o n
umeros son representados como listas Lisp, estas
listas Lisp tienen la forma
((MPLUS) $A 2)
para indicar la expresi
on a+2. Al nivel de Maxima se observara la notacion infija a+2.
Maxima tambien tiene listas con el formato
[1, 2, 7, x+y]
para una lista de 4 elementos. Internamente esto se corresponde con una lista Lisp de la
forma
((MLIST) 1

((MPLUS)

$X $Y ))

El elemento que denota el tipo de expresion en Maxima es tambien una lista, la cual tras
ser analizada y simplificada tomar
a la forma
((MLIST SIMP) 1 2 7 ((MPLUS SIMP) $X $Y))

5.4.2 Funciones y variables para listas


[Operador]
[Operador]

[
]
[ y ] marcan, respectivamente, el comienzo y el final de una lista.

[ y ] tambien se utilizan para indicar los subndices de una lista o de un array.


Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

x: [a, b, c];
[a, b, c]
x[3];
c
array (y, fixnum, 3);
y
y[2]: %pi;
%pi
y[2];
%pi
z[foo]: bar;
bar
z[foo];
bar
g[k] := 1/(k^2+1);
1
g := -----k
2
k + 1

Captulo 5: Tipos de datos y estructuras

53

(%i9) g[10];
(%o9)

1
--101

append (lista_1, ..., lista_n )

[Funcion]
Devuelve una lista cuyos elementos son los de la lista lista 1 seguidos de los de lista 2,
... La funci
on append tambien opera con expresiones generales, como la llamada
append (f(a,b), f(c,d,e));, de la que se obtiene f(a,b,c,d,e).
Tecleese example(append); para ver un ejemplo.

assoc (clave, lista, valor_por_defecto )


assoc (clave, lista )

[Funcion]
[Function]
Esta funci
on busca la clave en el lado derecho de la lista, la cual es de la forma
[x,y,z,...], donde cada elemento es una expresion formada por un operador binario
y dos elementos. Por ejemplo, x=1, 2^3, [a,b] etc. La clave se compara con el primer
operando. La funci
on assoc devuelve el segundo operando si se encuentra con que la
clave coincide. Si la clave no coincide entonces devuelve el valor valor por defecto.
El argumento valor por defecto es opcional; en caso de no estar presente, se devolver
a
false.

cons (expr, lista )

[Funcion]
Devuelve una nueva lista en la que el elemento expr ocupa la primera posicion, seguido
de los elementos de lista. La funcion cons tambien opera con otro tipo de expresiones,
como cons(x, f(a,b,c)); -> f(x,a,b,c).

copylist (lista )

[Funcion]

Devuelve una copia de la lista.

create_list (form, x_1, list_1, ..., x_n, list_n )

[Funcion]
Crea una lista mediante la evaluacion de form con x 1 tomando cada uno de los
valores de list 1, para cada uno de estos valores liga x 2 con cada elemento de list 2,
.... El n
umero de elementos en el resultado sera el producto del n
umero de elementos
en cada lista. Cada variable x i debe ser un smbolo y no sera evaluado. La lista de
argumentos ser
a evaluada una vez al comienzo de la iteracion.
Ejemplos:
(%i1) create_list (x^i, i, [1, 3, 7]);
3
7
(%o1)
[x, x , x ]
Con una doble iteraci
on:
(%i1) create_list ([i, j], i, [a, b], j, [e, f, h]);
(%o1)
[[a, e], [a, f], [a, h], [b, e], [b, f], [b, h]]
En lugar de list i se pueden suministrar dos argumentos cada uno de los cuales debera
poder evaluarse a un n
umero, los cuales seran los lmites inferior y superior, ambos
inclusive, para cada iteraci
on.
(%i1) create_list ([i, j], i, [1, 2, 3], j, 1, i);
(%o1)
[[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]]

54

Manual de Maxima

Notese que los lmites o lista para la variable j pueden depender del valor actual de
i.

delete (expr_1, expr_2 )


delete (expr_1, expr_2, n )

[Funcion]
[Funcion]
delete(expr_1, expr_2 ) elimina de expr 2 cualesquiera argumentos del operador
del nivel superior que sean iguales a expr 1. Notese que los argumentos de las subexpresiones no se ven afectados por esta funcion.
expr 1 puede ser un
atomo o una expresion no atomica. expr 2 puede ser cualquier
expresi
on no at
omica. La funcion delete devuelve una nueva expresion sin modificar
expr 2.
delete(expr_1, expr_2, n ) elimina de expr 2 los primeros n argumentos del operador del nivel superior que sean iguales a expr 1. Si hay menos de n argumentos
iguales, entonces se eliminan todos ellos.
Ejemplos:
Eliminando elementos de una lista.
(%i1) delete (y, [w, x, y, z, z, y, x, w]);
(%o1)
[w, x, z, z, x, w]
Eliminando terminos de una suma.
(%i1) delete (sin(x), x + sin(x) + y);
(%o1)
y + x
Eliminando factores de un producto.
(%i1) delete (u - x, (u - w)*(u - x)*(u - y)*(u - z));
(%o1)
(u - w) (u - y) (u - z)
Eliminando argumentos de una expresion arbitraria.
(%i1) delete (a, foo (a, b, c, d, a));
(%o1)
foo(b, c, d)
Limitando el n
umero de argumentos a eliminar.
(%i1) delete (a, foo (a, b, a, c, d, a), 2);
(%o1)
foo(b, c, d, a)
Los argumentos se comparan respecto de "=". Aquellos argumentos que verifiquen
la condici
on equal, pero no "=" no seran eliminados.
(%i1) [is (equal (0, 0)), is (equal (0, 0.0)), is (equal (0, 0b0))];
rat: replaced 0.0 by 0/1 = 0.0
rat replaced 0.0B0 by 0/1 = 0.0B0
(%o1)
[true, true, true]
(%i2) [is (0 = 0), is (0 = 0.0), is (0 = 0b0)];
(%o2)
[true, false, false]
(%i3) delete (0, [0, 0.0, 0b0]);
(%o3)
[0.0, 0.0b0]
(%i4) is (equal ((x + y)*(x - y), x^2 - y^2));
(%o4)
true
(%i5) is ((x + y)*(x - y) = x^2 - y^2);
(%o5)
false

Captulo 5: Tipos de datos y estructuras

55

(%i6) delete ((x + y)*(x - y), [(x + y)*(x - y), x^2 - y^2]);
2
2
(%o6)
[x - y ]

eighth (expr )

[Funcion]
Devuelve el octavo elemento de la lista o expresion expr. Vease first para m
as
detalles.

endcons (expr, lista )

[Funcion]
Devuelve una nueva lista formada por los elementos de lista seguidos de los de expr.
La funci
on endcons tambien opera con expresiones generales, por ejemplo endcons(x,
f(a,b,c)); -> f(a,b,c,x).

fifth (expr )

[Funcion]
Devuelve el quinto elemento de la lista o expresion expr. Vease first para m
as
detalles.

first (expr )

[Funcion]
Devuelve la primera parte de expr, que puede consistir en el primer elemento de una
lista, la primera fila de una matriz, el primer termino de una suma, etc. Notese que
tanto first como sus funciones relacionadas, rest y last, operan sobre la forma en
la que expr es mostrada por Maxima, no sobre la forma en la que es introducida la
expresi
on. Sin embargo, cuando la variable inflag toma el valor true estas funciones
tendr
an en cuenta el formato interno de expr. Tengase en cuenta que el simplificador
reordena las expresiones. As, first(x+y) devolvera x si inflag vale true y y cuando
inflag tome el valor false (first(y+x) devuelve el mismo resultado). Las funciones
second ... tenth devuelven desde el segundo hasta el decimo elemento del argumento
de entrada.

fourth (expr )

[Funcion]
Devuelve el cuarto elemento de la lista o expresion expr. Vease first para m
as
detalles.

join (l, m )

[Funcion]
Crea una nueva lista con los elementos de las listas l y m alternados. El resultado tiene
como elementos [l [1], m [1], l [2], m [2], ...]. Las listas l y m pueden contener
cualquier tipo de elementos.
Si las listas son de diferente longitud, join ignora los elementos sobrantes de la lista
mas larga.
Maxima da error si o bien l o m no son listas.
Ejemplos:
(%i1) L1: [a, sin(b), c!, d - 1];
(%o1)
[a, sin(b), c!,
(%i2) join (L1, [1, 2, 3, 4]);
(%o2)
[a, 1, sin(b), 2, c!,
(%i3) join (L1, [aa, bb, cc, dd, ee,
(%o3)
[a, aa, sin(b), bb, c!,

d - 1]
3, d - 1, 4]
ff]);
cc, d - 1, dd]

56

Manual de Maxima

last (expr )

[Funcion]

Devuelve la u
ltima parte (termino, fila, elemento, etc.) de expr.

length (expr )

[Funcion]
Devuelve (por defecto) el n
umero de partes de que consta expr en la version correspondiente a la que muestra. En el caso de listas, se devuelve el n
umero de elementos,
si se trata de matrices el n
umero de filas y se se trata de sumas el n
umero de terminos
o sumandos (vease dispform).

La funci
on length se ve afectada por el valor de la variable inflag. As,
length(a/(b*c)); devuelve 2 si inflag vale false (dando por hecho que
exptdispflag vale true), pero devuelve 3 si inflag vale true (ya que la
representaci
on interna es a*b^-1*c^-1).
[Variable opcional]

listarith
Valor por defecto: true

Cuando vale false provoca que no se realicen operaciones aritmeticas con listas;
cuando vale true, las operaciones con listas y matrices son contagiosas, en el sentido
de que las listas se transforman en matrices, retornando resultados de este u
ltimo
tipo. Sin embargo, operaciones que involucren listas con listas devolveran tambien
listas.

listp (expr )

[Funcion]

Devuelve el valor true si expr es una lista, y false en caso contrario.


()
[Funcion]
(expr, n )
[Funcion]
(expr, i, i_max )
[Funcion]
(expr, i, i_0, i_max )
[Funcion]
(expr, i, i_0, i_max, step )
[Funcion]
(expr, x, list )
[Funcion]
El primer formato, makelist (), crea una lista vaca. El segundo formato, makelist
(expr ), crea una lista con expr como u
nico elemento. makelist (expr, n ) crea una
lista de n elementos generados a partir de expr.

makelist
makelist
makelist
makelist
makelist
makelist

El formato m
as general, makelist (expr, i, i_0, i_max, step ), devuelve la lista
de elementos obtenidos al aplicar ev (expr, i =j ) a los elementos j de la secuencia
i 0, i 0 + step, i 0 + 2*step, ..., siendo |j| menor o igual que |i max|.
El incremento step puede ser un n
umero (positivo o negativo) o una expresion. En
caso de omitirse, se utilizar
a 1 como valor por defecto. Si se omiten i 0 y step, se le
asignar
a a ambos 1 como valor por defecto.
makelist (expr, x, list ) devuelve una lista, cuyo j-esimo elemento es igual a ev
(expr, x =list [j]) tomando j valores desde 1 hasta length (list ).
Ejemplos:
(%i1) makelist (concat (x,i), i, 6);
(%o1)
[x1, x2, x3, x4, x5, x6]
(%i2) makelist (x=y, y, [a, b, c]);
(%o2)
[x = a, x = b, x = c]

Captulo 5: Tipos de datos y estructuras

(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

57

makelist (x^2, x, 3, 2*%pi, 2);


[9, 25]
makelist (random(6), 4);
[2, 0, 2, 5]
flatten (makelist (makelist (i^2, 3), i, 4));
[1, 1, 1, 4, 4, 4, 9, 9, 9, 16, 16, 16]
flatten (makelist (makelist (i^2, i, 3), 4));
[1, 4, 9, 1, 4, 9, 1, 4, 9, 1, 4, 9]

member (expr_1, expr_2 )

[Funcion]
Devuelve true si is(expr_1 = a ) para alg
un elemento a de args(expr_2 ), en caso
contrario devuelve false.
Normalmente, expr_2 ser
a una lista, en cuyo caso args(expr_2 ) = expr_2 , y la
comprobaci
on ser
a si is(expr_1 = a ) para alg
un elemento a de expr_2.
La funci
on member no inspecciona las partes de los argumentos de expr_2, por lo que
puede devolver false si expr_1 es parte de alguno de los argumentos de expr_2.
Vease tambien elementp.
Ejemplos:
(%i1) member (8, [8, 8.0, 8b0]);
(%o1)
true
(%i2) member (8, [8.0, 8b0]);
(%o2)
false
(%i3) member (b, [a, b, c]);
(%o3)
true
(%i4) member (b, [[a, b], [b, c]]);
(%o4)
false
(%i5) member ([b, c], [[a, b], [b, c]]);
(%o5)
true
(%i6) F (1, 1/2, 1/4, 1/8);
1 1 1
(%o6)
F(1, -, -, -)
2 4 8
(%i7) member (1/8, %);
(%o7)
true
(%i8) member ("ab", ["aa", "ab", sin(1), a + b]);
(%o8)
true

ninth (expr )

[Funcion]
Devuelve el noveno elemento de la lista o expresion expr. Vease first para m
as
detalles.

pop (list )

[Funcion]
Borra el primer elemento de la lista list y devuelve este mismo elemento.
Si el argumento list es una lista vaca, o simplemente no es una lista, Maxima devuelve
un mensaje de error.
Vease push para los ejemplos.
Ejec
utese load(basic) antes de utilizar esta funcion.

58

Manual de Maxima

push (item, list )

[Funcion]
A~
nade al comienzo de la lista list el elemento item, devolviendo este mismo elemento.
El argumento list debe ser necesariamente una lista, mientras que item puede ser
cualquier smbolo o expresi
on.
Si el argumento list no es una lista, Maxima devuelve un mensaje de error.
Vease pop para eliminar el primer elemento de una lista.
Ejec
utese load(basic) antes de utilizar esta funcion.
Ejemplos:
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load ("basic")$
ll: [];
[]
push (x, ll);
[x]
push (x^2+y, ll);

2
(%o4)
[y + x , x]
(%i5) a: push ("string", ll);
2
(%o5)
[string, y + x , x]
(%i6) pop (ll);
(%o6)
string
(%i7) pop (ll);
2
(%o7)
y + x
(%i8) pop (ll);
(%o8)
x
(%i9) ll;
(%o9)
[]
(%i10) a;
2
(%o10)
[string, y + x , x]

rest (expr, n )
rest (expr )

[Funcion]
[Funcion]
Devuelve expr sin sus primeros n elementos si n es positivo, o sus u
ltimos - n elementos si n es negativo. En caso de que n tome el valor 1 puede ser omitido. La
expresi
on expr puede ser una lista, una matriz o cualquier otra expresion.

reverse (lista )

[Funcion]
Invierte el orden de los elementos de la lista (no los propios elementos). La funcion
reverse tambien opera sobre expresiones generales, como en reverse(a=b); gives
b=a.

second (expr )

[Funcion]
Devuelve el segundo elemento de la lista o expresion expr. Vease first para m
as
detalles.

Captulo 5: Tipos de datos y estructuras

59

seventh (expr )

[Funcion]
Devuelve el septimo elemento de la lista o expresion expr. Vease first para m
as
detalles.

sixth (expr )

[Funcion]
Devuelve el sexto elemento de la lista o expresion expr. Vease first para mas detalles.

sort (L, P )
sort (L )

[Funcion]
[Funcion]
sort(L, P ) ordena la lista L de acuerdo con el predicado P de dos argumentos, el
cual define un preorden total sobre los elementos de L. Si P (a, b) vale true, entonces
a aparece antes que b en el resultado. Si ninguna de las expresiones P (a, b) y P (b,
a) valen true, entonces a y b son equivalentes y aparecen en el resultado en el mismo
orden que a la entrada; esto es, sort es un orden estable.
Si tanto P (a, b) como P (b, a) valen ambos true para algunos elementos de L, entonces P no es un predicado de orden correcto, siento entonces el resultado indefinido.
Si P (a, b) toma un valor diferente a true o false, entonces sort devuelve un error.
El predicado puede especificarse como el nombre de una funcion, de una operacion
binaria infija o como una expresion lambda. Si se especifica con el nombre de un
operador, dicho nombre debe encerrarse con comillas dobles.
La lista ordenada se devuelve como un nuevo objeto, no modificandose el argumento
L.
sort(L ) equivale a sort(L, orderlessp).
La ordenaci
on por defecto es ascendente, tal como queda determinada por
orderlessp. El predicado ordergreatp ordena las listas en orden descendente.
Todos los
atomos y expresiones de Maxima son comparables respecto de los predicados
orderlessp y ordergreatp.
Los operadores < y > ordenan n
umeros, constantes y expresiones constantes por magnitud. N
otese que orderlessp y ordergreatp no ordenan n
umeros, constantes y
expresiones constantes por magnitud.
ordermagnitudep ordena n
umeros, constantes y expresiones constantes de igual modo
que lo hace <, y cualesquiera otros elementos lo hace igual que orderlessp.
Ejemplos:
sort ordena una lista respecto de un predicado de dos argumentos que define un
preorden total en los elementos de la lista.
(%i1) sort ([1, a, b, 2, 3, c], orderlessp);
(%o1)
[1, 2, 3, a, b, c]
(%i2) sort ([1, a, b, 2, 3, c], ordergreatp);
(%o2)
[c, b, a, 3, 2, 1]
El predicado puede especificarse con el nombre de una funcion, de un operador binario
infijo o una expresi
on lambda. Si se especifica con el nombre de un operador, dicho
nombre debe encerrarse con comillas dobles.

60

Manual de Maxima

(%i1) L : [[1, x], [3, y], [4, w], [2, z]];


(%o1)
[[1, x], [3, y], [4, w], [2, z]]
(%i2) foo (a, b) := a[1] > b[1];
(%o2)
foo(a, b) := a > b
1
1
(%i3) sort (L, foo);
(%o3)
[[4, w], [3, y], [2, z], [1, x]]
(%i4) infix (">>");
(%o4)
>>
(%i5) a >> b := a[1] > b[1];
(%o5)
a >> b := a > b
1
1
(%i6) sort (L, ">>");
(%o6)
[[4, w], [3, y], [2, z], [1, x]]
(%i7) sort (L, lambda ([a, b], a[1] > b[1]));
(%o7)
[[4, w], [3, y], [2, z], [1, x]]
sort(L ) equivale a sort(L, orderlessp).
(%i1) L : [a, 2*b, -5, 7, 1 + %e, %pi];
(%o1)
[a, 2 b, - 5, 7, %e + 1, %pi]
(%i2) sort (L);
(%o2)
[- 5, 7, %e + 1, %pi, a, 2 b]
(%i3) sort (L, orderlessp);
(%o3)
[- 5, 7, %e + 1, %pi, a, 2 b]
La ordenaci
on por defecto es ascendente, tal como queda determinada por
orderlessp. El predicado ordergreatp ordena las listas en orden descendente.
(%i1) L : [a, 2*b, -5, 7, 1 + %e,
(%o1)
[a, 2 b,
(%i2) sort (L);
(%o2)
[- 5, 7,
(%i3) sort (L, ordergreatp);
(%o3)
[2 b, a,

%pi];
- 5, 7, %e + 1, %pi]
%e + 1, %pi, a, 2 b]
%pi, %e + 1, 7, - 5]

Todos los
atomos y expresiones de Maxima son comparables respecto de los predicados
orderlessp y ordergreatp.
(%i1) L : [11, -17, 29b0, 9*c, 7.55, foo(x, y), -5/2, b + a];
5
(%o1) [11, - 17, 2.9b1, 9 c, 7.55, foo(x, y), - -, b + a]
2
(%i2) sort (L, orderlessp);
5
(%o2) [- 17, - -, 7.55, 11, 2.9b1, b + a, 9 c, foo(x, y)]
2
(%i3) sort (L, ordergreatp);
5
(%o3) [foo(x, y), 9 c, b + a, 2.9b1, 11, 7.55, - -, - 17]
2

Captulo 5: Tipos de datos y estructuras

61

Los operadores < y > ordenan n


umeros, constantes y expresiones constantes por magnitud. N
otese que orderlessp y ordergreatp no ordenan n
umeros, constantes y
expresiones constantes por magnitud.
(%i1) L : [%pi, 3, 4, %e, %gamma];
(%o1)
[%pi, 3, 4, %e, %gamma]
(%i2) sort (L, ">");
(%o2)
[4, %pi, 3, %e, %gamma]
(%i3) sort (L, ordergreatp);
(%o3)
[%pi, %gamma, %e, 4, 3]
ordermagnitudep ordena n
umeros, constantes y expresiones constantes de igual modo
que lo hace <, y cualesquiera otros elementos lo hace igual que orderlessp.
(%i1) L : [%i, 1+%i, 2*x, minf, inf, %e, sin(1), 0, 1, 2, 3, 1.0, 1.0b0];
(%o1) [%i, %i + 1, 2 x, minf, inf, %e, sin(1), 0, 1, 2, 3, 1.0,
1.0b0]
(%i2) sort (L, ordermagnitudep);
(%o2) [minf, 0, sin(1), 1, 1.0, 1.0b0, 2, %e, 3, inf, %i,
%i + 1, 2 x]
(%i3) sort (L, orderlessp);
(%o3) [0, 1, 1.0, 2, 3, %e, %i, %i + 1, inf, minf, sin(1),
1.0b0, 2 x]

sublist (list, p )

[Funcion]
Devuelve la lista de elementos de list para los cuales el predicado p retorna true.
Ejemplo:
(%i1) L: [1, 2, 3, 4, 5, 6];
(%o1)
[1, 2, 3, 4, 5, 6]
(%i2) sublist (L, evenp);
(%o2)
[2, 4, 6]

sublist_indices (L, P )

[Funcion]
Devuelve los ndices de los elementos x de la lista L para la cual el predicado
maybe(P (x)) devuelve true, lo que excluye a unknown y a false. P puede ser el
nombre de una funci
on o de una expresion lambda. L debe ser una lista literal.
Ejemplos:
(%i1) sublist_indices ([a, b, b, c, 1, 2, b, 3, b],
lambda ([x], x=b));
(%o1)
[2, 3, 7, 9]
(%i2) sublist_indices ([a, b, b, c, 1, 2, b, 3, b], symbolp);
(%o2)
[1, 2, 3, 4, 7, 9]
(%i3) sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0],
identity);
(%o3)
[1, 4, 5]
(%i4) assume (x < -1);
(%o4)
[x < - 1]
(%i5) map (maybe, [x > 0, x < 0, x < -2]);
(%o5)
[false, true, unknown]

62

Manual de Maxima

(%i6) sublist_indices ([x > 0, x < 0, x < -2], identity);


(%o6)
[2]

unique (L )

[Funcion]

Devuelve la lista L sin redundancias, es decir, sin elementos repetidos


Cuando ninguno de los elementos de L esta repetido, unique devuelve una replica de
L, no la propia L.
Si L no es una lista, unique devuelve L.
Ejemplo:
(%i1) unique ([1, %pi, a + b, 2, 1, %e, %pi, a + b, [1]]);
(%o1)
[1, 2, %e, %pi, [1], b + a]

tenth (expr )

[Funcion]
Devuelve el decimo elemento de la lista o expresion expr. Vease first para m
as
detalles.

third (expr )

[Funcion]
Devuelve el tercer elemento de la lista o expresion expr. Vease first para m
as
detalles.

Captulo 5: Tipos de datos y estructuras

63

5.5 Arrays
5.5.1 Introducci
on a los arrays
Los arrays m
as flexibles son aquellos que no necesitan ser declarados, llamados tambien,
en ingles, hashed-arrays, y se basan en que a una variable subindicada se le puede asignar
un valor cualquiera. Los ndices no necesitan ser n
umeros enteros, admitiendose smbolos
o expresiones. Los arrays no declarados crecen dinamicamente seg
un se le van asignando
valores a sus elementos. En el siguiente ejemplo se muestra como se va construyendo un
array no declarado a. Para obtener un listado de los elementos de un array se utiliza la
funcion listarray.
(%i1) a[1,2]: 99;
(%o1)
(%i2) a[x,y]: x^y;

99
y
x

(%o2)
(%i3) listarray(a);
(%o3)

y
[99, x ]

Otro tipo de arrays son los declarados, los cuales admiten hasta cinco dimensiones y
pueden guardar valores de un tipo concreto, como fixnum para enteros o flonum para
reales de coma flotante. Maxima distingue dos tipos de arrays declarados; los primeros
se pueden definir declarando un smbolo como array, haciendo uso de la funcion array;
los segundos son arrays de Lisp, en los que un smbolo se declara como tal con la funcion
make_array.
En el primer ejemplo se declara el smbolo a como array, mientras que en el segundo se
declara b como array de Lisp.
(%i1) array(a, fixnum, 2, 2);
(%o1)
a
(%i2) b: make_array(fixnum, 2, 2);
(%o2)
{Array: #2A((0 0) (0 0))}
Cuando a la variable opcional use_fast_arrays se le asigna el valor true, la funcion
array tambien generar
a un array de Lisp. Tal es lo que sucede en el ejemplo siguiente, en
el que el smbolo c queda declarado como array de Lisp. Tengase en cuenta que por este
metodo no se puede asignar el tipo de array, ya que al introducirle el tipo fixnum se genera
un mensaje de error.
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)

use_fast_arrays: true;
true
array(c, 2, 2);
#2A((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL))
c;
#2A((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL))
array(c, fixnum, 2, 2);

make_array: dimensions must be integers; found [fixnum + 1, 3, 3]


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

64

Manual de Maxima

Maxima tambien dispone de funciones array, que pueden almacenar valores de funciones,
y de funciones subindicadas.
Se puede encontrar m
as informacion en las descripciones de las funciones. Los siguientes
smbolos y funciones de Maxima permiten trabajar con arrays:
array
arrayapply
arraymake
arrays
listarray
make_array
remarray
subvar
use_fast_arrays

arrayinfo
fillarray
rearray
subvarp

5.5.2 Funciones y variables para los arrays


array (nombre, dim_1, ..., dim_n )
array (nombre, type, dim_1, ..., dim_n )
array ([nombre_1, ..., nombre_m ], dim_1, ..., dim_n )

[Funcion]
[Funcion]
[Funcion]
Crea un array de dimensi
on n, que debe ser menor o igual que 5. Los subndices de
la i-esima dimensi
on son enteros que toman valores entre 0 y dim i.
La llamada array (nombre, dim_1, ..., dim_n ) crea un array de tipo general.
La llamada array (nombre, type, dim_1, ..., dim_n ) crea un array con sus elementos del tipo especificado. El tipo type puede ser fixnum para enteros de tama~
no
limitado o flonum para n
umeros decimales en coma flotante.
La llamada array ([nombre_1, ..., nombre_m ], dim_1, ..., dim_n ) crea m arrays, todos ellos de igual dimension.
Si el usuario asigna un valor a una variable subindicada antes de declarar el array correspondiente, entonces se construye un array no declarado. Los arrays no declarados,
tambien conocidos por el nombre de "arrays de claves" (hashed arrays), son mas generales que los arrays declarados. El usuario no necesita declarar su tama~
no maximo
y pueden ir creciendo de forma dinamica. Los subndices de los arrays no declarados
no necesitan ser necesariamente n
umeros. Sin embargo, a menos que un array tenga
sus elementos dispersos, probablemente sea mas eficiente declararlo siempre que sea
posible antes que dejarlo como no declarado. La funcion array puede utilizarse para
transformar un array no declarado a a uno declarado.

arrayapply (A, [i_1, ..., i_n ])

[Funcion]

Eval
ua A [i_1, ..., i_n ], donde A es un array y i 1, ..., i n son enteros.
Esto es como apply, excepto por el hecho de que el primer argumento es un array en
lugar de una funci
on.

arrayinfo (A )

[Funcion]
Devuelve informaci
on sobre el arrayA. El argumento A puede ser un array declarado
o no declarado, una funci
on array o una funcion subindicada.
En el caso de arrays declarados, arrayinfo devuelve una lista que contiene el atomo
declared, el n
umero de dimensiones y el tama~
no de cada dimension. Los elementos
del array, tanto los que tienen valores asignados como los que no, son devueltos por
listarray.

Captulo 5: Tipos de datos y estructuras

65

En el caso de arrays no declarados (hashed arrays), arrayinfo devuelve una lista


que contiene el
atomo hashed, el n
umero de subndices y los subndices de aquellos
elementos que guarden un valor. Los valores son devueltos por listarray.
En el caso de funciones array, arrayinfo devuelve una lista que contiene el atomo
hashed, el n
umero de subndices y los subndices para los que la funcion tiene valores almacenados. Los valores almacenados de la funcion array son devueltos por
listarray.
En el caso de funciones subindicadas, arrayinfo devuelve una lista que contiene el
atomo hashed, el n
umero de subndices y los subndices para los que hay expresiones
lambda. Las expresiones lambda son devueltas por listarray.
Ejemplos:
arrayinfo y listarray aplicadas a una array declarado.
(%i1) array (aa, 2, 3);
(%o1)
aa
(%i2) aa [2, 3] : %pi;
(%o2)
%pi
(%i3) aa [1, 2] : %e;
(%o3)
%e
(%i4) arrayinfo (aa);
(%o4)
[declared, 2, [2, 3]]
(%i5) listarray (aa);
(%o5) [#####, #####, #####, #####, #####, #####, %e, #####,
#####, #####, #####, %pi]
arrayinfo y listarray aplicadas a una array no declarado (hashed arrays).
(%i1) bb [FOO] : (a + b)^2;
2
(%o1)
(b + a)
(%i2) bb [BAR] : (c - d)^3;
3
(%o2)
(c - d)
(%i3) arrayinfo (bb);
(%o3)
[hashed, 1, [BAR], [FOO]]
(%i4) listarray (bb);
3
2
(%o4)
[(c - d) , (b + a) ]
arrayinfo y listarray aplicadas a una funcion array.
(%i1) cc [x, y] := y / x;
y
(%o1)
cc
:= x, y
x
(%i2) cc [u, v];
v
(%o2)
u
(%i3) cc [4, z];

66

Manual de Maxima

(%o3)

z
4

(%i4) arrayinfo (cc);


(%o4)
[hashed, 2, [4, z], [u, v]]
(%i5) listarray (cc);
z v
(%o5)
[-, -]
4 u
arrayinfo y listarray aplicadas a una funcion subindicada.
(%i1) dd [x] (y) := y ^ x;
x
(%o1)
dd (y) := y
x
(%i2) dd [a + b];
b + a
(%o2)
lambda([y], y
)
(%i3) dd [v - u];
v - u
(%o3)
lambda([y], y
)
(%i4) arrayinfo (dd);
(%o4)
[hashed, 1, [b + a], [v - u]]
(%i5) listarray (dd);
b + a
v - u
(%o5)
[lambda([y], y
), lambda([y], y
)]

arraymake (name, [i_1, ..., i_n ])

[Funcion]

El resultado es una referencia a array no evaluada.


Devuelve la expresi
on name [i_1, ..., i_n ].
Esta funci
on es similar a funmake, excepto que el valor retornado es referencia a un
array no evaluado, en lugar de una llamada a una funcion no evaluada.
Ejemplos:
(%i1) arraymake (A, [1]);
(%o1)
A
1
(%i2) arraymake (A, [k]);
(%o2)
A
k
(%i3) arraymake (A, [i, j, 3]);
(%o3)
A
i, j, 3
(%i4) array (A, fixnum, 10);
(%o4)
A
(%i5) fillarray (A, makelist (i^2, i, 1, 11));
(%o5)
A
(%i6) arraymake (A, [5]);

Captulo 5: Tipos de datos y estructuras

(%o6)

67

A
5

(%i7) %;
(%o7)
36
(%i8) L : [a, b, c, d, e];
(%o8)
[a, b, c, d, e]
(%i9) arraymake (L, [n]);
(%o9)
L
n
(%i10) %, n = 3;
(%o10)
c
(%i11) A2 : make_array (fixnum, 10);
(%o11)
{Array: #(0 0 0 0 0 0 0 0 0 0)}
(%i12) fillarray (A2, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
(%o12)
{Array: #(1 2 3 4 5 6 7 8 9 10)}
(%i13) arraymake (A2, [8]);
(%o13)
A2
8
(%i14) %;
(%o14)
9
[Variable del sistema]
Valor por defecto: [] La variable arrays es una lista con todos los arrays que han
sido alojados, lo que comprende a los arrays declarados por array, a los no declarados
(hashed arrays) construidos implcitamente (asignando algo al elemento de un array)
y a las funciones array definidas mediante := y define. Los arrays definidos mediante
make_array no se incluyen en este grupo.
Veanse tambien array, arrayapply, arrayinfo, arraymake, fillarray, listarray
y rearray.
Ejemplos:
(%i1) array (aa, 5, 7);
(%o1)
aa
(%i2) bb [FOO] : (a + b)^2;
2
(%o2)
(b + a)
(%i3) cc [x] := x/100;
x
(%o3)
cc := --x
100
(%i4) dd : make_array (any, 7);
(%o4)
{Array: #(NIL NIL NIL NIL NIL NIL NIL)}
(%i5) arrays;
(%o5)
[aa, bb, cc]

arrays

arraysetapply (A, [i_1, . . . , i_n ], x )


Asigna x a A [i_1, ..., i_n ], siendo A un array y i 1, . . . , i n enteros.
arraysetapply eval
ua sus argumentos.

[Funcion]

68

Manual de Maxima

fillarray (A, B )

[Funcion]

Rellena el array A con los valores de B, que puede ser una lista o array.
Si se ha declarado A de un determinado tipo en el momento de su creacion, solo podr
a
contener elementos de ese tipo, produciendose un error en caso de intentar asignarle
un elemento de tipo distinto.
Si las dimensiones de los arrays A y B son diferentes, A se rellena seg
un el orden de
las filas. Si no hay suficientes elementos en B el u
ltimo elemento se utiliza para cubrir
el resto de A. Si hay demasiados, los elementos sobrantes son ignorados.
La funci
on fillarray devuelve su primer argumento.
Ejemplos:
Creaci
on de un array de 9 elementos y posterior relleno a partir de una lista.
(%i1) array (a1, fixnum, 8);
(%o1)
a1
(%i2) listarray (a1);
(%o2)
[0, 0, 0, 0, 0, 0, 0, 0, 0]
(%i3) fillarray (a1, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
(%o3)
a1
(%i4) listarray (a1);
(%o4)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Si no hay suficientes elementos para cubrir el array, se repite el u
ltimo elemento. Si
hay demasiados, los elementos sobrantes son ignorados.
(%i1) a2 : make_array (fixnum, 8);
(%o1)
{Array: #(0 0 0 0 0 0 0 0)}
(%i2) fillarray (a2, [1, 2, 3, 4, 5]);
(%o2)
{Array: #(1 2 3 4 5 5 5 5)}
(%i3) fillarray (a2, [4]);
(%o3)
{Array: #(4 4 4 4 4 4 4 4)}
(%i4) fillarray (a2, makelist (i, i, 1, 100));
(%o4)
{Array: #(1 2 3 4 5 6 7 8)}
Arrays multidimensionales se rellenan seg
un el orden de las filas.
(%i1) a3 : make_array (fixnum, 2, 5);
(%o1)
{Array: #2A((0 0 0 0 0) (0 0 0 0 0))}
(%i2) fillarray (a3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
(%o2)
{Array: #2A((1 2 3 4 5) (6 7 8 9 10))}
(%i3) a4 : make_array (fixnum, 5, 2);
(%o3)
{Array: #2A((0 0) (0 0) (0 0) (0 0) (0 0))}
(%i4) fillarray (a4, a3);
(%o4)
{Array: #2A((1 2) (3 4) (5 6) (7 8) (9 10))}

listarray (A )

[Funcion]
Devuelve una lista con los elementos del array A. El argumento A puede ser un array
declarado o no declarado, una funcion array o una funcion subindicada.
Los elementos se ordenan en primera instancia respecto del primer ndice, despues
respecto del segundo ndice y as sucesivamente. La ordenacion de los ndices es la
misma que la establecida por orderless.

Captulo 5: Tipos de datos y estructuras

69

En el caso de arrays no declarados, funciones array y funciones subindicadas, los


elementos corresponden a los ndices devueltos por arrayinfo.
Los elementos de los arrays declarados que no tienen valores asignados (excepto
fixnum y flonum) se devuelven como #####. Los elementos sin valores asignados
de los arrays fixnum y flonum son devueltos como 0 y 0.0, respectivamente. Los
elementos sin valor asignado de los arrays no declarados, funciones array y funciones
subindicadas no son devueltos.
Ejemplos:
listarray y arrayinfo aplicadas a un array declarado.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

array (aa, 2, 3);


aa
aa [2, 3] : %pi;
%pi
aa [1, 2] : %e;

%e
listarray (aa);
[#####, #####, #####, #####, #####, #####, %e, #####,
#####, #####, #####, %pi]
(%i5) arrayinfo (aa);
(%o5)
[declared, 2, [2, 3]]
listarray y arrayinfo aplicadas a un array no declarado (hashed array).
(%i1) bb [FOO] : (a + b)^2;
2
(%o1)
(b + a)
(%i2) bb [BAR] : (c - d)^3;
3
(%o2)
(c - d)
(%i3) listarray (bb);
3
2
(%o3)
[(c - d) , (b + a) ]
(%i4) arrayinfo (bb);
(%o4)
[hashed, 1, [BAR], [FOO]]
listarray y arrayinfo aplicadas a una funcion array.
(%i1) cc [x, y] := y / x;
(%o1)

y
cc
:= x, y
x

(%i2) cc [u, v];


(%o2)

v
u

(%i3) cc [4, z];


(%o3)

z
4

70

Manual de Maxima

(%i4) listarray (cc);


z v
[-, -]
4 u

(%o4)

(%i5) arrayinfo (cc);


(%o5)
[hashed, 2, [4, z], [u, v]]
listarray y arrayinfo aplicadas a una funcion subindicada.
(%i1) dd [x] (y) := y ^ x;
x
dd (y) := y
x

(%o1)
(%i2) dd [a + b];
(%o2)
(%i3) dd [v - u];
(%o3)
(%i4) listarray (dd);

b + a
lambda([y], y
)
v - u
lambda([y], y
)

b + a
v - u
(%o4)
[lambda([y], y
), lambda([y], y
)]
(%i5) arrayinfo (dd);
(%o5)
[hashed, 1, [b + a], [v - u]]

make_array (tipo, dim_1, ..., dim_n )

[Funcion]
Construye y devuelve un array de Lisp. El argumento tipo puede ser any, flonum,
fixnum, hashed o functional. Hay n ndices, y el ndice i-esimo va de 0 a dim i 1.
La ventaja de make_array sobre array estriba en que el valor retornado no tiene
nombre, y una vez que un puntero deja de referenciarlo, el valor desaparece. Por
ejemplo, si y: make_array (...) entonces y apunta a un objeto que ocupa cierto
espacio en la memoria, pero despues de y: false, y ya no apunta al objeto, por lo
que este puede ser considerado basura y posteriormente eliminado.
Ejemplos:
(%i1) A1 : make_array (fixnum, 10);
(%o1)
{Array: #(0 0 0 0 0 0 0 0 0 0)}
(%i2) A1 [8] : 1729;
(%o2)
1729
(%i3) A1;
(%o3)
{Array: #(0 0 0 0 0 0 0 0 1729 0)}
(%i4) A2 : make_array (flonum, 10);
(%o4) {Array: #(0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)}
(%i5) A2 [2] : 2.718281828;
(%o5)
2.718281828
(%i6) A2;
(%o6)
{Array: #(0.0 0.0 2.718281828 0.0 0.0 0.0 0.0 0.0 0.0 0.0)}
(%i7) A3 : make_array (any, 10);

Captulo 5: Tipos de datos y estructuras

71

(%o7) {Array: #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)}
(%i8) A3 [4] : x - y - z;
(%o8)
- z - y + x
(%i9) A3;
(%o9) {Array: #(NIL NIL NIL NIL ((MPLUS SIMP) $X ((MTIMES SIMP)\
-1 $Y) ((MTIMES SIMP) -1 $Z))
NIL NIL NIL NIL NIL)}
(%i10) A4 : make_array (fixnum, 2, 3, 5);
(%o10) {Array: #3A(((0 0 0 0 0) (0 0 0 0 0) (0 0 0 0 0)) ((0 0 \
0 0 0) (0 0 0 0 0) (0 0 0 0 0)))}
(%i11) fillarray (A4, makelist (i, i, 1, 2*3*5));
(%o11) {Array: #3A(((1 2 3 4 5) (6 7 8 9 10) (11 12 13 14 15))
((16 17 18 19 20) (21 22 23 24 25) (26 27 28 29 30)))}
(%i12) A4 [0, 2, 1];
(%o12)
12

rearray (A, dim_1, ..., dim_n )

[Funcion]
Cambia las dimensiones de un array. El nuevo array sera rellenado con los elementos
del viejo seg
un el orden de las filas. Si el array antiguo era demasiado peque~
no, los
elementos restantes se rellenan con false, 0.0 o 0, dependiendo del tipo del array.
El tipo del array no se puede cambiar.

remarray (A_1, ..., A_n )


remarray (all)

[Funcion]
[Funcion]
Borra los arrays y las funciones relacionadas con ellos, liberando el espacio de memoria
ocupado. Los argumentos pueden ser arrays declarados, arrays no declarados (hashed
arrays), funciones array y funciones subindicadas.
La llamada remarray (all) borra todos los elementos de la lista global arrays.
La funci
on remarray devuelve la lista de los arrays borrados.
La funci
on remarray no eval
ua sus argumentos.

subvar (x, i )

[Funcion]

Eval
ua la expresi
on subindicada x [i ].
La funci
on subvar eval
ua sus argumentos.
La instrucci
on arraymake (x, [i ]) construye la expresion x [i ], pero no la eval
ua.
Ejemplos:
(%i1) x : foo $
(%i2) i : 3 $
(%i3) subvar (x, i);
(%o3)

foo
3
(%i4) foo : [aa, bb, cc, dd, ee]$
(%i5) subvar (x, i);

72

Manual de Maxima

(%o5)
(%i6) arraymake (x, [i]);
(%o6)
(%i7) %;
(%o7)

cc
foo
3
cc

subvarp (expr )

[Funcion]

Devuelve true si expr es una variable subindicada, como a[i].

use_fast_arrays

[Variable opcional]

Valor por defecto: false


Si use_fast_arrays vale true entonces tan solo se reconocen dos tipos de arrays.

Captulo 5: Tipos de datos y estructuras

73

5.6 Estructuras
5.6.1 Introducci
on a las estructuras
Maxima dispone de estructuras para la agregacion de datos. Una estructura es una expresion
en la que los argumentos se definen con un nombre (nombre del campo) y la estructura en
su conjunto se define por medio de su operador (nombre de la estructura). Los valores
dados a los campos pueden ser expresiones cualesquiera.
Una estructura se define con la funcion defstruct, guardando la variable structures
la lista de todas las estructuras definidas por el usuario. El operador @ permite hacer
referencias a los campos de la estructura. Con kill(S ) se borra la estructura S completa
y kill(x @ a ) elimina la asignaci
on actual del campo a en la estructura x.
En la impresi
on por consola (con display2d igual a true), las estructuras se representan
con las asignaciones de los campos en forma de ecuacion, con el nombre del campo a la
izquierda y su valor asociado a la derecha. En la impresion unidimensional (mediante
grind o d
andole a display2d el valor false), las estructuras se escriben sin los nombres
de los campos.
No es posible utilizar el nombre de un campo como nombre de funcion, pero el valor de
un campo s puede ser una expresi
on lambda. Tampoco es posible restringir los valores de
los campos a tipos de datos concretos, siendo el caso que a cada campo se le puede asignar
cualquier tipo de expresi
on. Por u
ltimo, no es posible hacer que ciertos campos sean o no
accesibles desde determinados contextos, ya que todos los campos son siempre visibles.

5.6.2 Funciones y variables para las estructuras


[Variable global]
structures es la lista que contiene las estructuras definidas por el usuario con
defstruct.

structures

defstruct (S (a_1, ..., a_n ))


defstruct (S (a_1 = v_1, ..., a_n = v_n ))

[Funcion]
[Funcion]
Define una estructura, la cual es una lista de nombres de campos a 1, ..., a n asociados
a un smbolo S. Todo individuo de una estructura dada consiste en una expresion
con operador S y exactamente n argumentos. La sentencia new(S ) crea un nuevo
individuo con estructura S.
Un argumento consistente en un smbolo a especifica el nombre de un campo. Un
argumento consistente en una ecuacion a = v especifica el nombre del campo a junto
con su valor por defecto v. El valor por defecto puede ser cualquier tipo de expresion.

La llamada a defstruct a~
nade S a la lista de estructuras definidas por el usuario,
structures.
La sentencia kill(S ) borra S de la lista de estructuras definidas por el usuario y
elimina la definici
on de la estructura.
Ejemplos:
(%i1) defstruct (foo (a, b, c));
(%o1)
[foo(a, b, c)]
(%i2) structures;

74

Manual de Maxima

(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

[foo(a, b, c)]
new (foo);
foo(a, b, c)
defstruct (bar (v, w, x = 123, y = %pi));
[bar(v, w, x = 123, y = %pi)]
structures;
[foo(a, b, c), bar(v, w, x = 123, y = %pi)]
new (bar);
bar(v, w, x = 123, y = %pi)
kill (foo);
done
structures;
[bar(v, w, x = 123, y = %pi)]

new (S )
new (S (v_1, ..., v_n ))

[Funcion]
[Funcion]

new crea nuevos individuos de estructuras declaradas.


La sentencia new(S ) crea un nuevo individuo de estructura S en el que cada campo
toma su valor por defecto, si este fue definido, o sin valor alguno en caso de que no
se haya fijado un valor por defecto en la definicion de la estructura.
La sentencia new(S (v_1, ..., v_n )) crea un nuevo individuo de estructura S en el
que los campos adquieren los valores v 1, ..., v n.
Ejemplos:
(%i1) defstruct (foo (w, x = %e, y
(%o1)
[foo(w, x = %e,
(%i2) new (foo);
(%o2)
foo(w, x = %e,
(%i3) new (foo (1, 2, 4, 8));
(%o3)
foo(w = 1, x = 2,

= 42, z));
y = 42, z)]
y = 42, z)
y = 4, z = 8)
[Operador]

@
@ es el operador para acceder a los campos de las estructuras.

La expresi
on x @ a hace referencia al valor del campo a del individuo x de una estructura dada. El nombre del campo no se eval
ua.
Si el campo a de x no tiene valor asignado, x @ a se eval
ua a s mismo; es decir,
devuelve la propia expresi
on x @ a tal cual.
La sentencia kill(x @ a ) elimina el valor del campo a de x.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

defstruct (foo (x, y, z));


[foo(x, y, z)]
u : new (foo (123, a - b, %pi));
foo(x = 123, y = a - b, z = %pi)
u@z;
%pi
u@z : %e;

Captulo 5: Tipos de datos y estructuras

(%o4)
(%i5) u;
(%o5)
foo(x =
(%i6) kill (u@z);
(%o6)
(%i7) u;
(%o7)
foo(x
(%i8) u@z;
(%o8)
El nombre del campo no se eval
ua.
(%i1) defstruct (bar (g,
(%o1)
(%i2) x : new (bar);
(%o2)
(%i3) x@h : 42;
(%o3)
(%i4) h : 123;
(%o4)
(%i5) x@h;
(%o5)
(%i6) x@h : 19;
(%o6)
(%i7) x;
(%o7)
(%i8) h;
(%o8)

75

%e
123, y = a - b, z = %e)
done
= 123, y = a - b, z)
u@z
h));
[bar(g, h)]
bar(g, h)
42
123
42
19
bar(g, h = 19)
123

Captulo 6: Operadores

77

6 Operadores
6.1 Introducci
on a los operadores
Maxima reconoce los operadores aritmeticos, relacionales y logicos usuales de la matematica.
Ademas, Maxima dispone de operadores para la asignacion de valores a variables y la
definicion de funciones. La siguiente tabla muestra los operadores que se describen en este
captulo, en la que se incluye el nombre del operador, el rango de enlace por la izquierda
lbp, el rango de enlace por la derecha rbp, el tipo de operador y un ejemplo, para finalizar,
en cada caso, con su formato interno tal como es leda por el analizador sintactico.
Operador

lbp rbp

Tipo

Ejemplo

Formato interno

+
*
/
^
**
^^
.

100
100
120
120
140
140
140
130

134
134
120
139
139
139
129

nary
prefix
nary
infix
infix
infix
infix
infix

a+b
-a
a*b
a/b
a^b
a**b
a^^b
a.b

((mplus) $A $B)
((mminus) $A)
((mtimes) $A $B)
((mquotient) $A $B)
((mexpt) $A $B)
((mexpt) $A $B)
((mncexpt) $A $B)
((mnctimes) $A $B)

<
<=
>
>=

80
80
80
80

80
80
80
80

infix
infix
infix
infix

a<b
a<=b
a>b
a>=b

((mlessp) $A $B)
((mleqp) $A $B)
((mqreaterp) $A $B)
((mgeqp) $A $B)

not
and
or

70
65
60

prefix
nary
nary

not a
a and b
a or b

((mnot) $A)
((mand) $A $B)
((mor) $A $B)

#
=

80
80

80
80

infix
infix

a#b
a=b

((mnotequal) $A $B)
((mequal) $A $B)

180
180
180
180

20
20
20
20

infix
infix
infix
infix

a:b
a::b
a:=b
a::=b

((msetq) $A $B)
((mset) $A $B)
((mdefine) $A $B)
((mdefmacro) $A $B)

:
::
:=
::=

Con los rangos de enlace de los operadores se definen las reglas de prioridad de calculo
de los mismos. As, por ejemplo, el analizador sintactico interpreta la expresion a + b * c
como a + (b * c) , pues el rango de enlace por la izquierda de la multiplicacion es mayor
que rango de enlace por la izquierda de la suma.
Maxima clasifica los operadores de la siguiente manera:

78

Manual de Maxima

Prefijo (prefix)
Los operadores prefijos son unarios con un u
nico operando que se escribe a
continuaci
on del operando. Ejemplos son - y not.
Sufijo (postfix)
Los operadores sufijos son unarios con un u
nico operando que se escribe precediendo al operando. Un ejemplo es el factorial !.
Infijo (infix)
Los operadores infijos son operadores binarios que necesitan dos operandos, los
cuales se colocan uno a cada lado del operador. Ejemplos son el operador para
la exponenciaci
on, ^, y el operador de asignacion, :.
N-ario (n-ary)
Los operadores n-arios admiten un n
umero arbitrario de operandos. Son ejemplos la multiplicaci
on, *, y la suma, +.
Acotador (matchfix)
Los acotadores son operadores que se utilizan para establecer el comienzo y final
de una lista de operandos. Los operadores [ y ] son ejemplos de acotadores,
que se utilizan para definir una lista tal como [a, b, ...].
No-fijo (nofix)
Un operador no-fijo carece de operandos. Maxima no tiene operadores internos
no-fijos, pero se pueden crear como cuando se escribe nofix(quit), lo que
permite obviar el uso de parentesis, y utilizar simplemente quit en lugar de
quit(), para cerrar una sesion de Maxima.
En la secci
on dedicada a los operadores definidos por el usuario se describe como redefinir
los operadores internos de Maxima y como crear otros nuevos.
El mecanismo para definir un nuevo operador es sencillo. Tan solo es necesario declarar
una funci
on como operador; la funcion operador puede estar definida o no.
Un ejemplo de operador definido por el usuario es el siguiente. Notese que la llamada a
funcion "dd" (a) equivale a dd a, de igual manera que "<-" (a, b) tambien equivale a a
<- b. Notese tambien que las funciones "dd" y "<-" no estan definidas en este ejemplo.
(%i1) prefix ("dd");
(%o1)
dd
(%i2) dd a;
(%o2)
dd a
(%i3) "dd" (a);
(%o3)
dd a
(%i4) infix ("<-");
(%o4)
<(%i5) a <- dd b;
(%o5)
a <- dd b
(%i6) "<-" (a, "dd" (b));
(%o6)
a <- dd b
La tabla anterior no incluye todos los operadores definidos en Maxima, ya que tambien
lo son ! para el factorial, for, do y while para programar bucles, o if, then y else para
definir condicionales.

Captulo 6: Operadores

79

Las funciones remove y kill eliminan propiedades de operadores de un atomo. La


llamada remove ("a ", op) s
olo elimina las propiedades de operador de a. La llamada kill
("a ") elimina todas las propiedades de a, incluidas las propiedades de operador. Notese
que el nombre del operador debe ir entre comillas.
(%i1) infix ("##");
(%o1)
(%i2) "##" (a, b) := a^b;

##

b
(%o2)
a ## b := a
(%i3) 5 ## 3;
(%o3)
125
(%i4) remove ("##", op);
(%o4)
done
(%i5) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
^
(%i5) "##" (5, 3);
(%o5)
125
(%i6) infix ("##");
(%o6)
##
(%i7) 5 ## 3;
(%o7)
125
(%i8) kill ("##");
(%o8)
done
(%i9) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
^
(%i9) "##" (5, 3);
(%o9)
##(5, 3)

6.2 Operadores aritm


eticos
+
*
/
^

[Operador]
[Operador]
[Operador]
[Operador]
[Operador]
Los smbolos + * / y ^ representan la suma, resta, multiplicacion, division y exponenciaci
on, respectivamente. Los nombres de estos operadores son "+" "*" "/" y "^",
que pueden aparecer all
a donde se requiera el nombre de una funcion u operador.
Los smbolos + y - representan el positivo y negativo unario, siendo los nombres de
estos operadores "+" y "-", respectivamente.

80

Manual de Maxima

En Maxima, la resta a - b se representa como la suma a + (- b). Expresiones tales


como a + (- b) se muestran como restas. Maxima reconoce "-" tan solo como el
operador de negaci
on unaria, no como el nombre del operador de resta binaria.
La divisi
on a / b se representa en maxima como la multiplicacion a * b^(- 1). Expresiones tales como a * b^(- 1) se muestran como divisiones. Maxima reconoce "/"
como el nombre del operador de division.
La suma y la multiplicaci
on son operadores conmutativos n-arios. La division y la
exponenciaci
on son operadores no conmutativos binarios.
Maxima ordena los operandos de los operadores conmutativos para formar lo que
se conoce como representaci
on canonica. A efectos de almacenamiento interno, la
ordenaci
on viene determinada por orderlessp. A efectos de presentacion de las
expresiones, la ordenaci
on de la suma la determina ordergreatp, y en el caso de la
multiplicaci
on, la ordenaci
on coincide con la del almacenamiento interno.
Los c
alculos aritmeticos se realizan con n
umeros literales (enteros, racionales, decimales ordinarios y decimales grandes). Excepto en el caso de la exponenciacion, todas
las operaciones aritmeticas con n
umeros dan lugar a resultados en forma de n
umeros.
La exponenciaci
on da como resultado un n
umero si alguno de los operandos es decimal ordinario o grande (bigfloat), o si el resultado es un entero o racional; en caso
contrario, la exponenciaci
on puede expresarse como una raz cuadrada (sqrt), como
otra potencia, o simplemente no sufre cambios.
Se produce contagio de los decimales en coma flotante en los calculos aritmeticos: si
alg
un operando es un n
umero decimal grande (bigfloat), el resultado sera tambien
un n
umero decimal grande; no habiendo decimales grandes, pero s ordinarios, el
resultado sr
a tambien un decimal ordinario; de no haber operandos decimales, el
resultado ser
a un n
umero racional o entero.
Los c
alculos aritmeticos son simplificaciones, no evaluaciones, por lo que se realizan
en expresiones comentadas.
Las operaciones aritmeticas se aplican elemento a elemento en el caso de las listas
cuando la variable global listarith vale true; pero en el caso de las matrices, siempre
se aplican elemento a elemento. Cuando un operando es una lista o matriz y otro
operando lo es de otro tipo cualquiera, este se combina con cada uno de los elementos
de la lista o matriz.
Ejemplos:
La suma y la multiplicaci
on son operadores conmutativos n-arios. Maxima ordena los
operandos para formar lo que se conoce como representacion canonica. Los nombres
de estos operadores son "+" y "-".
(%i1) c + g + d + a + b + e + f;
(%o1)
g + f + e + d + c + b + a
(%i2) [op (%), args (%)];
(%o2)
[+, [g, f, e, d, c, b, a]]
(%i3) c * g * d * a * b * e * f;
(%o3)
a b c d e f g
(%i4) [op (%), args (%)];
(%o4)
[*, [a, b, c, d, e, f, g]]
(%i5) apply ("+", [a, 8, x, 2, 9, x, x, a]);

Captulo 6: Operadores

81

(%o5)
3 x + 2 a + 19
(%i6) apply ("*", [a, 8, x, 2, 9, x, x, a]);
2 3
(%o6)
144 a x
La divisi
on y la exponenciaci
on son operadores no conmutativos binarios. Los nombres
de estos operadores son "/" y "^".
(%i1) [a / b, a ^ b];
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)

a
b
[-, a ]
b
[map (op, %), map (args, %)];
[[/, ^], [[a, b], [a, b]]]
[apply ("/", [a, b]), apply ("^", [a, b])];
a
b
[-, a ]
b

La resta y la divisi
on se representan internamente en terminos de la suma y multiplicaci
on, respectivamente.
(%i1) [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
(%o1)
[+, a, - b]
(%i2) [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
1
(%o2)
[*, a, -]
b
Los c
alculos se realizan con n
umeros literales. Se produce el contagio de los n
umeros
decimales.
(%i1) 17 + b - (1/2)*29 + 11^(2/4);
5
b + sqrt(11) + 2
(%i2) [17 + 29, 17 + 29.0, 17 + 29b0];
(%o2)
[46, 46.0, 4.6b1]
(%o1)

Los c
alculos aritmeticos son una simplificacion, no una evaluacion.
(%i1) simp : false;
(%o1)
(%i2) (17 + 29*11/7 - 5^3);
(%o2)

false

29 11
3
17 + ----- - 5
7

(%i3) simp : true;


(%o3)
(%i4) (17 + 29*11/7 - 5^3);

true

(%o4)

437
- --7

82

Manual de Maxima

Los c
alculos aritmeticos se realizan elemento a elemento en las listas (seg
un sea el
valor de listarith) y matrices.
(%i1) matrix ([a, x], [h,
[
(%o1)
[
[
(%i2) 5 * matrix ([a, x],
(%o2)

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


a - 1 x - 2 ]
]
h - 3 u - 4 ]
[h, u]);
[ 5 a 5 x ]
[
]
[ 5 h 5 u ]

(%i3) listarith : false;


(%o3)
false
(%i4) [a, c, m, t] / [1, 7, 2, 9];
[a, c, m, t]
(%o4)
-----------[1, 7, 2, 9]
(%i5) [a, c, m, t] ^ x;
x
(%o5)
[a, c, m, t]
(%i6) listarith : true;
(%o6)
true
(%i7) [a, c, m, t] / [1, 7, 2, 9];
c m t
(%o7)
[a, -, -, -]
7 2 9
(%i8) [a, c, m, t] ^ x;
x
x
x
x
(%o8)
[a , c , m , t ]

**

[Operador]
Operador de exponenciaci
on. Maxima identifica ** con el operador ^ en la
entrada de expresiones, pero se representa como ^ en las salidas no formateadas
(display2d=false), o colocando un superndice en la salida formateada
(display2d=true).
La funci
on fortran representa el operador de exponenciacion con **, tanto si se ha
introducido como ** o como ^.
Ejemplos:
(%i1) is (a**b = a^b);
(%o1)
(%i2) x**y + x^z;
(%o2)
(%i3) string (x**y + x^z);
(%o3)
(%i4) fortran (x**y + x^z);
x**z+x**y

true
z
y
x + x
x^z+x^y

Captulo 6: Operadores

(%o4)

83

done

^^

[Operator]
Operador de exponenciaci
on no conmutativa. Se trata del operador de exponenciacion
correspondiente a la multiplicacion no conmutativa ., del mismo modo que el operador
de exponenciaci
on ordinario ^ se corresponde con la multiplicacion conmutativa *.
La exponenciaci
on no conmutativa se representa como ^^ en las salidas no formateadas
(display2d=false), o colocando un superndice entre angulos (< >) en la salida formateada (display2d=true).
Ejemplos:
(%i1) a . a . b . b . b + a * a * a * b * b;
3 2
<2>
<3>
(%o1)
a b + a
. b
(%i2) string (a . a . b . b . b + a * a * a * b * b);
(%o2)
a^3*b^2+a^^2 . b^^3

[Operador]
El operador punto, para multiplicacion de matrices (no-conmutativo). Cuando "."
se usa de esta forma, se dejaran espacios a ambos lados de este, como en A . B. As
se evita que se confunda con el punto decimal de los n
umeros.
Veanse: dot, dot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules,
dotdistrib, dotexptsimp, dotident y dotscrules.

6.3 Operadores relacionales


<
<=
>=
>

[Operator]
[Operator]
[Operator]
[Operator]
Los smbolos <, <=, >= y > representan menor que, menor o igual que, mayor o igual
que y mayor que, respectivamente. Los nombres de estos operadores son "<" "<="
">=" y ">", que pueden aparecer alla donde se requiera el nombre de una funcion u
operador.
Estos operadores relacionales son todos operadores binarios. Maxima no reconoce
expresiones del estilo a < b < c.
Las expresiones relacionales devuelven valores booleanos haciendo uso de las funciones
is o maybe, as como de las sentencias condicionales if, while y unless. Las expresiones relacionales no se eval
uan de otra manera, aunque sus argumentos s sean
evaluados.
Cuando una expresi
on relacional no pueda ser evaluada a true o false, el comportamiento de is y de if estara controlado por la variable global prederror. Si
prederror toma el valor true, is y if emiten un mensaje de error. Si prederror
toma el valor false, is devuelve unknown y if devuelve una expresion condicional
parcialmente evaluada.
maybe se comporta siempre como si prederror fuese false, al tiempo que while y
unless se comportan siempre como si prederror fuese true.

84

Manual de Maxima

Los operadores relacionales no se distribuyen sobre listas ni sobre cualesquiera otros


tipos de estructuras de datos.
Veanse tambien =, #, equal y notequal.
Ejemplos:
Las expresiones relacionales se reducen a valores booleanos a traves de ciertas funciones y sentencias condicionales.
(%i1) [x, y, z] : [123, 456, 789];
(%o1)
[123, 456, 789]
(%i2) is (x < y);
(%o2)
true
(%i3) maybe (y > z);
(%o3)
false
(%i4) if x >= z then 1 else 0;
(%o4)
0
(%i5) block ([S], S : 0,
for i:1 while i <= 100 do S : S + i, return (S));
(%o5)
5050
Las expresiones relacionales no se eval
uan de otra manera, aunque sus argumentos s
sean evaluados.
(%o1)
[123, 456, 789]
(%i2) [x < y, y <= z, z >= y, y > z];
(%o2)
[123 < 456, 456 <= 789, 789 >= 456, 456 > 789]
(%i3) map (is, %);
(%o3)
[true, true, true, false]

6.4 Operadores l
ogicos
and

[Operador]
Operador de conjunci
on l
ogica. El operador and es un operador infijo n-ario; sus
operandos son expresiones booleanas y su resultado es un valor logico.
El operador and impone la evaluacion (igual que is) de uno o mas operandos, y puede
forzar la evaluaci
on de todos los operandos.
Los operandos se eval
uan en el orden en el que aparecen; solo eval
ua tantos operandos
como sean necesarios para determinar el resultado. Si alg
un operando vale false, el
resultado es false y ya no se eval
uan mas operandos.
La variable global prederror controla el comportamiento de and cuando la evaluacion
de un operando no da como resultado true o false; and imprime un mensaje de error
cuando prederror vale true. Cuando los operandos devuelven un valor diferente a
true o false al ser evaluados, el resultado es una expresion booleana.
El operador and no es conmutativo: a and b puede no ser igual a b and a debido al
tratamiento de operandos indeterminados.

not

[Operador]
Operador de negaci
on l
ogica. El operador not es un operador prefijo; su operando es
una expresi
on booleana y su resultado es un valor logico.

Captulo 6: Operadores

85

El operador not impone la evaluacion (igual que is) de su operando.


La variable global prederror controla el comportamiento de not cuando la evaluacion
de su operando no da como resultado true o false; not imprime un mensaje de error
cuando prederror vale true. Cuando los operandos devuelven un valor diferente a
true o false al ser evaluados, el resultado es una expresion booleana.

or

[Operador]
Operador de disyunci
on l
ogica. El operador or es un operador infijo n-ario; sus
operandos son expresiones booleanas y su resultado es un valor logico.
El operador or impone la evaluacion (igual que is) de uno o mas operandos, y puede
forzar la evaluaci
on de todos los operandos.
Los operandos se eval
uan en el orden en el que aparecen; or solo eval
ua tantos operandos como sean necesarios para determinar el resultado. Si un operando vale true, el
resultado es true y ya no se eval
uan mas operandos.
La variable global prederror controla el comportamiento de or cuando la evaluacion
de un operando no da como resultado true o false; or imprime un mensaje de error
cuando prederror vale true. Cuando los operandos devuelven un valor diferente a
true o false al ser evaluados, el resultado es una expresion booleana.
El operador or no es conmutativo: a or b puede no ser igual a b or a debido al
tratamiento de operandos indeterminados.

6.5 Operadores para ecuaciones


[Operador]

#
Representa la negaci
on de la igualdad sintactica =.

Notese que debido a las reglas de evaluacion de expresiones de tipo predicado (en
concreto debido a que not expr obliga a la evaluacion previa de expr), not a = b
equivale a is(a # b ), pero no a a # b .
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

a = b;
a = b
is (a = b);
false
a # b;
a # b
not a = b;
true
is (a # b);
true
is (not a = b);
true
[Operador]

=
Operador de ecuaci
on.

86

Manual de Maxima

La expresi
on a = b representa una ecuacion sin evaluar, la cual puede verificarse o
no. Las ecuaciones sin evaluar pueden aparecer como argumentos de solve, algsys
y de algunas otras funciones.
La funci
on is eval
ua el operador = a un resultado booleano; is(a = b ) asigna un
valor de verdad a a = b , siendo true si a y b son identicos, lo cual acontece si ambos
a y b son
atomos identicos, o si no siendo atomos, sus operadores y argumentos
respectivos son identicos; en caso contrario, is(a = b ) devuelve el valor false. Nunca
se devuelve el valor unknown. Cuando is(a = b ) toma el valor true, se dice que a y b
son sint
acticamente iguales, no expresiones equivalentes, para las cuales is(equal(a,
b )) devuelve true. Las expresiones pueden ser equivalentes, pero no sintacticamente
iguales.
La negaci
on de = se representa por #. Como en el caso de =, la expresion a # b no
est
a evaluada; sin embargo, is(a # b ) eval
ua a # b a true o false.
Adem
as de is, hay otros operadores que eval
uan = y # a true o false; a saber, if,
and, or y not.
Notese que debido a las reglas de evaluacion de expresiones de tipo predicado (en
concreto debido a que not expr obliga a la evaluacion previa de expr), not a = b
equivale a is(a # b ), pero no a a # b .
Las funciones rhs y lhs devuelven los miembros derecho e izquierdo, respectivamente,
de una ecuaci
on o inecuaci
on.
Veanse tambien equal y notequal.
Ejemplos:
La expresi
on a = b representa una ecuacion sin evaluar, la cual puede verificarse o
no.
(%i1) eq_1 : a * x - 5 * y = 17;
(%o1)
a x - 5 y = 17
(%i2) eq_2 : b * x + 3 * y = 29;
(%o2)
3 y + b x = 29
(%i3) solve ([eq_1, eq_2], [x, y]);
196
29 a - 17 b
(%o3)
[[x = ---------, y = -----------]]
5 b + 3 a
5 b + 3 a
(%i4) subst (%, [eq_1, eq_2]);
196 a
5 (29 a - 17 b)
(%o4) [--------- - --------------- = 17,
5 b + 3 a
5 b + 3 a
196 b
3 (29 a - 17 b)
--------- + --------------- = 29]
5 b + 3 a
5 b + 3 a
(%i5) ratsimp (%);
(%o5)
[17 = 17, 29 = 29]
is(a = b ) eval
ua a = b a true si a y b son sintacticamente iguales (es decir,
identicas). Las expresiones pueden ser equivalentes, pero no sintacticamente iguales.
(%i1) a : (x + 1) * (x - 1);

Captulo 6: Operadores

(%o1)
(%i2) b : x^2 - 1;

87

(x - 1) (x + 1)

2
(%o2)
x - 1
(%i3) [is (a = b), is (a # b)];
(%o3)
[false, true]
(%i4) [is (equal (a, b)), is (notequal (a, b))];
(%o4)
[true, false]
Algunos operadores eval
uan = y # a true o false.
(%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2
then FOO else BAR;
(%o1)
FOO
(%i2) eq_3 : 2 * x = 3 * x;
(%o2)
2 x = 3 x
(%i3) eq_4 : exp (2) = %e^2;
2
2
(%o3)
%e = %e
(%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
(%o4)
[false, true, true]
Debido a que not expr obliga a la evaluacion previa de expr, not a = b equivale a
is(a # b ).
(%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
(%o1)
[2 x # 3 x, true]
(%i2) is (2 * x # 3 * x);
(%o2)
true

6.6 Operadores de asignaci


on
:

[Operador]
Operador de asignaci
on.
Cuando el miembro de la izquierda es una variable simple (no subindicada), : eval
ua
la expresi
on de la derecha y asigna ese valor a la variable del lado izquierdo.
Cuando en el lado izquierdo hay un elemento subindicado correspondiente a una lista,
matriz, array declarado de Maxima o array de Lisp, la expresion de la derecha se asigna
a ese elemento. El subndice debe hacer referencia a un elemento ya existente, ya que
los objetos anteriores no pueden ampliarse nombrando elementos no existentes.
Cuando en el lado izquierdo hay un elemento subindicado correspondiente a un array
no declarado de Maxima, la expresion de la derecha se asigna a ese elemento en caso
de que ya exista, o a un nuevo elemento, si este todava no existe.
Cuando el miembro de la izquierda es una lista de atomos y/o variables subindicadas,
el miembro derecho debe evaluar tambien a una lista, cuyos elementos seran asignados
en paralelo a las variables de la lista de la izquierda.
Veanse tambien kill y remvalue, que deshacen las asociaciones hechas por el operador :.
Ejemplos:

88

Manual de Maxima

Asignaci
on a una variable simple.
(%i1) a;
(%o1)
(%i2) a : 123;
(%o2)
(%i3) a;
(%o3)

a
123
123

Asignaci
on a un elemento de una lista.
(%i1) b : [1, 2, 3];
(%o1)
(%i2) b[3] : 456;
(%o2)
(%i3) b;
(%o3)

[1, 2, 3]
456
[1, 2, 456]

La asignaci
on crea un array no declarado.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

c[99] : 789;
789
c[99];
789
c;
c
arrayinfo (c);
[hashed, 1, [99]]
listarray (c);
[789]

Asignaci
on m
ultiple.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

[a, b, c] : [45, 67, 89];


[45, 67, 89]
a;
45
b;
67
c;
89

La asignaci
on m
ultiple se hace en paralelo. Los valores de a y b se intercambian en
este ejemplo.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

[a, b] : [33, 55];


[33, 55]
[a, b] : [b, a];
[55, 33]
a;
55
b;
33

Captulo 6: Operadores

::

89

[Operador]
Operador de asignaci
on.
El operador :: es similar a :, excepto que :: eval
ua ambos miembros, tanto el derecho
como el izquierdo.
Ejemplos:
(%i1) x : foo;
(%o1)
foo
(%i2) x :: 123;
(%o2)
123
(%i3) foo;
(%o3)
123
(%i4) x : [a, b, c];
(%o4)
[a, b, c]
(%i5) x :: [11, 22, 33];
(%o5)
[11, 22, 33]
(%i6) a;
(%o6)
11
(%i7) b;
(%o7)
22
(%i8) c;
(%o8)
33

::=

[Operador]
El operador de definici
on de macros ::= define una funcion (llamada macro por
razones hist
oricas) que no eval
ua sus argumentos, siendo la expresion que retorna
(llamada "macroexpansi
on") evaluada dentro del contexto desde el cual se ha invocado la macro. En cualquier otro sentido, una funcion macro es igual que una funcion
ordinaria.
macroexpand devuelve la expresion que a su vez fue devuelta por una macro (sin
evaluar la expresi
on); macroexpand (foo (x)) seguida de % es equivalente a foo
(x) si foo es una funci
on macro.
::= coloca el nombre de la nueva funcion macro en la lista global macros. Por
otro lado, las funciones kill, remove y remfunction borran las definiciones de las
funciones macro y eliminan sus nombres de la lista macros.
Las funciones fundef y dispfun devuelven la definicion de una funcion macro y le
asignan una etiqueta, respectivamente.
Las funciones macro normalmente contienen expresiones buildq y splice para construir una expresi
on, que luego sera evaluada.
Ejemplos:
Una funci
on macro no eval
ua sus argumentos, por lo que el mensaje (1) muestra y - z,
no el valor de y - z. La macroexpansion (es decir, la expresion no evaluada (print
("(2) x is equal to", x))) se eval
ua en el contexto desde el cual se produjo la
llamada a la macro, imprimiendo el mensaje (2).
(%i1) x: %pi$

90

Manual de Maxima

(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) printq1 (x) ::= block (print ("(1) x is equal to", x),
(print ("(2) x is equal to", x)))$
(%i5) printq1 (y - z);
(1) x is equal to y - z
(2) x is equal to %pi
(%o5)

%pi

Una funci
on ordinaria eval
ua sus argumentos, por lo que el mensaje (1) muestra el
valor de y - z. El valor de retorno no se eval
ua, por lo que el mensaje (2) no se
imprime hasta la evaluaci
on explcita %.
(%i1) x: %pi$
(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) printe1 (x) := block (print ("(1) x is equal to", x),
(print ("(2) x is equal to", x)))$
(%i5)
(1) x
(%o5)
(%i6)
(2) x
(%o6)

printe1 (y - z);
is equal to 1234 - 1729 w
print((2) x is equal to, x)
%;
is equal to %pi
%pi

macroexpand devuelve la macroexpansion; macroexpand (foo (x)) seguida de %


es equivalente a foo (x) si foo es una funcion macro.
(%i1) x: %pi$
(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) g (x) ::= buildq ([x], print ("x is equal to", x))$
(%i5) macroexpand (g (y (%o5)
(%i6) %;
x is equal to 1234 - 1729
(%o6)
(%i7) g (y - z);
x is equal to 1234 - 1729

z));
print(x is equal to, y - z)
w
1234 - 1729 w
w

Captulo 6: Operadores

(%o7)

:=

91

1234 - 1729 w

[Operador]
El operador de definici
on de funciones. La expresion f (x_1, ..., x_n ) := expr
define una funci
on de nombre f con argumentos x 1, ..., x n y cuerpo expr. El
operador := no eval
ua el cuerpo de la funcion (a menos que se indique lo contrario
mediante el operador comilla-comilla ). La funcion as definida puede ser una
funci
on ordinaria de Maxima (con argumentos encerrados entre parentesis) o una
funci
on array (con argumentos encerrados entre corchetes).
Cuando el u
ltimo o u
nico argumento x n es una lista de un solo elemento, la funcion
definida por := acepta un n
umero variable de argumentos. Los valores de los argumentos se asignan uno a uno a los argumentos formales x 1, ..., x (n - 1), y cualesquiera
otros valores de argumentos, si existen, se asignan a x n en forma de lista.
Todas las definiciones de funciones aparecen en el mismo espacio de nombres;
definiendo una funci
on f dentro de otra funcion g no limita automaticamente el
alcance de f a g. No obstante, local(f) hace que la funcion f sea efectiva solamente
dentro del bloque o empaquetado de expresiones en la que aparece local.
Si un argumento formal x k es un smbolo afectado por el operador comilla (expresion
nominal), la funci
on definida por := no eval
ua el correspondiente valor de argumento.
En cualquier otro caso, los argumentos que se pasan son evaluados.
Veanse tambien define y ::=.
Ejemplos:
:= no eval
ua el cuerpo de la funcion (a menos que se indique lo contrario mediante el
operador comilla-comilla ).
(%i1) expr : cos(y) - sin(x);
(%o1)
cos(y) - sin(x)
(%i2) F1 (x, y) := expr;
(%o2)
F1(x, y) := expr
(%i3) F1 (a, b);
(%o3)
cos(y) - sin(x)
(%i4) F2 (x, y) := expr;
(%o4)
F2(x, y) := cos(y) - sin(x)
(%i5) F2 (a, b);
(%o5)
cos(b) - sin(a)
La funci
on as definida puede ser una funcion ordinaria de Maxima o una funcion
array.
(%i1) G1 (x, y) := x.y - y.x;
(%o1)
G1(x, y) := x . y - y . x
(%i2) G2 [x, y] := x.y - y.x;
(%o2)
G2
:= x . y - y . x
x, y
Cuando el u
ltimo o u
nico argumento x n es una lista de un solo elemento, la funcion
definida por := acepta un n
umero variable de argumentos.
(%i1) H ([L]) := apply ("+", L);
(%o1)
H([L]) := apply("+", L)

92

Manual de Maxima

(%i2) H (a, b, c);


(%o2)
c + b + a
local define una funci
on como local.
(%i1) foo (x) := 1 - x;
(%o1)
foo(x) := 1 - x
(%i2) foo (100);
(%o2)
- 99
(%i3) block (local (foo), foo (x) := 2 * x, foo (100));
(%o3)
200
(%i4) foo (100);
(%o4)
- 99

6.7 Operadores definidos por el usuario


infix (op )
infix (op, lbp, rbp )
infix (op, lbp, rbp, lpos, rpos, pos )

[Funcion]
[Funcion]
[Funcion]
Declara op como operador infijo. Un operador infijo es una funcion de dos argumentos,
con el nombre de la funci
on escrito entre sus argumentos. Por ejemplo, el operador
de sustracci
on - es un operador infijo.
infix (op ) declara op como operador infijo con fuerzas de ligadura por la izquierda
y por la derecha iguales a 180, que es el valor por defecto, y partes izquierda y derecha
iguales a any.
infix (op, lbp, rbp ) declara op como operador infijo con fuerzas de ligadura por la
izquierda y por la derecha declaradas en los argumentos, siendo las partes izquierda
y derecha iguales a any.
infix (op, lbp, rbp, lpos, rpos, pos ) declara op como operador infijo con
fuerzas de ligadura por la izquierda y por la derecha, junto con los tipos de
expresiones correspondientes a lpos, rpos y pos, que son el operando de la izquierda,
el de la derecha y el operador del resultado; los tipos reconocidos son: expr, clause
y any, que indican expresion algebraica, expresion booleana o cualquier otra,
respectivamente. Maxima puede detectar algunos errores sintacticos comparando los
tipos declarados con los de la expresion actual.
La precedencia de op con respecto a otros operadores deriva de las fuerzas de ligadura
de los operadores en cuesti
on. Si las fuerzas de ligadura a izquierda y derecha de op
son ambas mayores que las fuerzas de ligadura a izquierda y derecha de otro operador,
entonces op tiene preferencia sobre el otro operador. Si las fuerzas de ligadura no son
ambas mayores o menores, se aplican otras relaciones mas complejas.
La asociatividad de op depende de las fuerzas de ligadura. Una mayor fuerza de
ligadura a la izquierda (lbp) implica que op sea evaluado antes que otros operadores
a su izquierda en la expresi
on, mientras que mayor fuerza de ligadura a la derecha
(rbp) implica que op sea evaluado antes que otros operadores a su derecha en la
expresi
on. As, si lbp es mayor, op es asociativo por la derecha, mientras que si rbp
es mayor, op es asociativo por la izquierda.
Vease tambien Syntax.

Captulo 6: Operadores

93

Ejemplos:
Si las fuerzas de ligadura a izquierda y derecha de op son ambas mayores que las
fuerzas de ligadura a izquierda y derecha de otro operador, entonces op tiene preferencia sobre el otro operador.
(%i1) :lisp (get $+ lbp)
100
(%i1) :lisp (get $+ rbp)
100
(%i1) infix ("##", 101, 101);
(%o1)
##
(%i2) "##"(a, b) := sconcat("(", a, ",", b, ")");
(%o2)
(a ## b) := sconcat("(", a, ",", b, ")")
(%i3) 1 + a ## b + 2;
(%o3)
(a,b) + 3
(%i4) infix ("##", 99, 99);
(%o4)
##
(%i5) 1 + a ## b + 2;
(%o5)
(a+1,b+2)
Mayor lbp hace a op asociativo por la derecha, mientras que mayor rbp hace a op
asociativo por la izquierda.
(%i1) infix ("##", 100, 99);
(%o1)
##
(%i2) "##"(a, b) := sconcat("(", a, ",", b, ")")$
(%i3) foo ## bar ## baz;
(%o3)
(foo,(bar,baz))
(%i4) infix ("##", 100, 101);
(%o4)
##
(%i5) foo ## bar ## baz;
(%o5)
((foo,bar),baz)
Maxima puede detectar algunos errores sintacticos comparando los tipos declarados
con los de la expresi
on actual.
(%i1) infix ("##", 100, 99, expr, expr, expr);
(%o1)
##
(%i2) if x ## y then 1 else 0;
Incorrect syntax: Found algebraic expression where logical expression expected
if x ## y then
^
(%i2) infix ("##", 100, 99, expr, expr, clause);
(%o2)
##
(%i3) if x ## y then 1 else 0;
(%o3)
if x ## y then 1 else 0

matchfix (ldelimiter, rdelimiter )


matchfix (ldelimiter, rdelimiter, arg_pos, pos )

[Funcion]
[Funcion]
Declara un operador "matchfix" con delimitadores a la izquierda y derecha, ldelimiter
y rdelimiter, respectivamente. Los delimitadores son cadenas alfanumericas.

94

Manual de Maxima

Un operador "matchfix" es una funcion con un n


umero arbitrario de argumentos,
de manera que los argumentos se presentan entre los delimitadores de la izquierda
y derecha. Los delimitadores pueden ser cualquier tipo de cadena, en tanto que
el analizador sint
actico pueda distinguirlos de los operandos y de expresiones con
operadores. En la pr
actica esto excluye delimitadores como %, ,, $ y ;, necesitando
aislar los delimitadores con espacios en blanco. El delimitador de la derecha puede
ser igual o diferente del de la izquierda.
Un delimitador de la izquierda solo puede asociarse con un u
nico delimitador de la
derecha; dos operadores "matchfix" diferentes no pueden tener el mismo delimitador
por la izquierda.
Un operador ya existente puede declararse como operador "matchfix" sin necesidad
de que cambie el resto de propiedades. En particular, los operadores de Maxima tales
como la suma + pueden ser declarados como "matchfix".
La llamada matchfix (ldelimiter, rdelimiter, arg_pos, pos ) declara el argumento arg pos y el resultado pos, as como los delimitadores ldelimiter y rdelimiter.
Los argumentos arg pos y pos son tipos de funciones, reconociendose como tales:
expr, clause y any, los cuales hacen referencia a una expresion algebraica, booleana
o de cualquier otro tipo, respectivamente. Maxima puede detectar ciertos errores
sint
acticos comparando el tipo de expresion declarado con el de la expresion actual.
La funci
on que ejecutar
a una operacion "matchfix" sera una tpica funcion definida
por el usuario. La funci
on de operador se define por el metodo habitual con := o
define. Los argumentos pueden escribirse entre los delimitadores, o con el delimitador izquierdo como una cadena precedida de apostrofo y seguidamente los argumentos entre parentesis. La llamada dispfun (ldelimiter ) muestra la definicion de la
funci
on.
El u
nico operador "matchfix" de Maxima es el constructor de listas [ ]. Los parentesis
( ) y las comillas dobles " " act
uan como operadores "matchfix", pero son tratados
como operadores "matchfix" por el analizador sintactico de Maxima.
Ejemplos:
Los delimitadores pueden ser practicamente cualquier cadena.
(%i1) matchfix ("@@", "~");
(%o1)
@@
(%i2) @@ a, b, c ~;
(%o2)
@@a, b, c~
(%i3) matchfix (">>", "<<");
(%o3)
>>
(%i4) >> a, b, c <<;
(%o4)
>>a, b, c<<
(%i5) matchfix ("foo", "oof");
(%o5)
foo
(%i6) foo a, b, c oof;
(%o6)
fooa, b, coof
(%i7) >> w + foo x, y oof + z << / @@ p, q ~;
>>z + foox, yoof + w<<
(%o7)
----------------------

Captulo 6: Operadores

95

@@p, q~
Los operadores "matchfix" son funciones definidas por el usuario.
(%i1) matchfix ("!-", "-!");
(%o1)
"!-"
(%i2) !- x, y -! := x/y - y/x;
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%t5)

x
y
!-x, y-! := - - y
x
define (!-x, y-!, x/y - y/x);
x
y
!-x, y-! := - - y
x
define ("!-" (x, y), x/y - y/x);
x
y
!-x, y-! := - - y
x
dispfun ("!-");
x
y
!-x, y-! := - - y
x

(%o5)
(%i6) !-3, 5-!;
(%o6)

done
16
- -15

(%i7) "!-" (3, 5);


(%o7)

16
- -15

nary (op )
nary (op, bp, arg_pos, pos )

[Funcion]
[Funcion]
Un operador n-ario denota una funcion con un n
umero arbitrario de argumentos
entre los que se intercal el smbolo del operador, como en A+B+C. La instruccion
nary("x") declara x como operador n-ario. Las funciones se pueden declarar como
n-arias; de modo que si se ejecuta declare(j,nary), el simplificador transforma
j(j(a,b),j(c,d)) en j(a, b, c, d).

nofix (op )
nofix (op, pos )

[Funcion]
[Funcion]
Los operadores no-fijos se utilizan para definir funciones sin argumentos. La mera
presencia de tal operador en una instruccion hara que se eval
ue la funcion correspondiente. Por ejemplo, cuando se teclea exit; para salir de una interrupcion de
Maxima, exit se comporta como una funcion no-fija. La instruccion nofix("x")
declara x como operador no-fijo.

96

Manual de Maxima

postfix (op )
postfix (op, lbp, lpos, pos )

[Funcion]
[Funcion]
Los operadores sufijos son funciones de un u
nico argumento en las que este precede al
operador, como en 3!. La instruccion postfix("x") declara x como operador sufijo.

prefix (op )
prefix (op, rbp, rpos, pos )

[Funcion]
[Funcion]
Los operadores prefijos son funciones de un u
nico argumento en las que este se coloca
a continuaci
on del operador. La instruccion prefix("x") declara x como operador
prefijo.

Captulo 7: Evaluaci
on

97

7 Evaluaci
on
7.1 Introducci
on a la evaluaci
on
Las fases que se suceden desde que el usuario solicita un calculo hasta que obtiene el resultado son: la propia solicitud del c
alculo, la evaluacion, la simplificacion y la respuesta.
Toda expresi
on expr que se introduzca en Maxima sera evaluada, de manera que los
smbolos que no tengan asociado ning
un valor y los n
umeros eval
uan a s mismos; en cambio,
aquellos smbolos que tengan un valor asociado seran sustitudos por tales valores.
Dos ejemplos. En el primero, los smbolos y los n
umeros se eval
uan a s mismos; en el
segundo ejemplo, al asignarle a la variable a el valor 2, alla donde se escriba a sera sustituido
por dicho valor.
(%i1) [a, b, 2, 1/2, 1.0];
1
(%o1)
[a, b, 2, -, 1.0]
2
(%i2) a:2$
(%i3) [a, sin(a), a^2];
(%o3)
[2, sin(2), 4]
Maxima distingue entre funciones en forma verbal y funciones en forma nominal. Las
funciones en forma verbal son evaluadas tomando en cuenta los valores dados a sus argumentos; en cambio, las funciones nominales no son evaluadas, aunque sus argumentos
tengan valores asignados. Las funciones son susceptibles de ser tratadas de ambos modos;
ejemplos tpicos son la funci
on de diferenciacion diff y la de integracion integrate.
En el siguiente ejemplo se le asigna a la variable a cierto valor, a continuacion se invoca
la funcion diff en su forma verbal con sus argumentos tomando los valores a*x^2 y x.
Seguidamente se invoca a la misma funcion diff en su forma nominal, lo cual se consigue
mediante el operador de comilla simple (); en este caso la funcion no es evaluada y devuelve
una expresi
on simb
olica en la que los argumentos s han sido evaluados, pues la variable a
es sustituida por el valor 1/2.
(%i1) a:1/2;
1
(%o1)
2
(%i2) diff(a*x^2, x);
(%o2)
x
(%i3) diff(a*x^2, x);
2
d
x
(%o3)
-- (--)
dx 2
Sin embargo, no todas las funciones de Maxima sustituyen sus argumentos por sus
valores. La documentaci
on para cada funcion informara si sus argumentos son evaluados o
no.

98

Manual de Maxima

Por ejemplo, la funci


on properties no eval
ua sus argumentos, lo cual resulta practico
para el usuario, ya que en caso contrario debera utilizar el operador de comilla simple a
fin de poder mostrar las propiedades del smbolo a. A continuacion se muestra como en el
primer caso se devuelve una lista vaca, ya que no se le ha encontrado ninguna propiedad
al smbolo a; una vez se le ha asignado el valor 2, la funcion properties nos dice que la
variable guarda un valor y esto es as porque no ha sustituido el smbolo a por su valor 2.
En consecuencia, la funci
on properties muestra las propiedades de a.
(%i1) properties(a);
(%o1)
[]
(%i2) a:2$
(%i3) properties(a);
(%o3)
[value]
La evaluaci
on de smbolos, funciones y expresiones se puede controlar con los operadores
de comilla simple () y de doble comilla simple (). La evaluacion se suprime con la comilla
simple y se fuerza con la doble comilla simple (que no comilla doble).
Con la funci
on ev se eval
ua una expresion dentro de un contexto determinado controlado
por el valor de ciertas variables evflag y funciones de evaluacion evfun.

7.2 Funciones y variables para la evaluaci


on

[Operador]
El operador comilla simple evita la evaluacion.
Aplicado a un smbolo, la comilla simple evita la evaluacion del smbolo.
Aplicado a la llamada de una funcion, la comilla simple evita la evaluacion de la
funci
on llamada, aunque los argumentos de la funcion son evaluados (siempre y cuando
la evaluaci
on no se evite de otra manera). El resultado es una forma de nombre de la
funci
on llamada.
Aplicado a una expresi
on con parentesis, la comilla simple evita la evaluacion de
todos los smbolos y llamadas a funciones que hayan en la expresion. E.g., (f(x))
significa que no se evalua la expresion f(x). f(x) (con la comilla simple aplicada
a f en cambio de a f(x)) significa el retorno de la forma de nombre de f aplicada a
[x].
La comilla simple no evita la simplificacion.
Cuando el interruptor global noundisp es true, los nombres se muestran con una
comilla simple. Este interruptor siempre tiene como valor true cuando se muestran
definiciones de funciones.
Ver tambien los operadores comilla-comilla y nouns.
Ejemplos:
Aplicado a un smbolo, la comilla simple evita la evaluacion del smbolo.
(%i1) aa: 1024;
(%o1)
1024
(%i2) aa^2;
(%o2)
1048576

Captulo 7: Evaluaci
on

99

(%i3) aa^2;
(%o3)
(%i4) %;
(%o4)

2
aa
1048576

Aplicado a la llamada de una funcion, la comilla simple evita la evaluacion de la


funci
on llamada, aunque los argumentos de la funcion son evaluados (siempre y cuando
la evaluaci
on no se evite de otra manera). El resultado es una forma de nombre de la
funci
on llamada.
(%i1) x0: 5;
(%o1)
5
(%i2) x1: 7;
(%o2)
7
(%i3) integrate (x^2, x, x0, x1);
218
(%o3)
--3
(%i4) integrate (x^2, x, x0, x1);
7
/
[
2
(%o4)
I x dx
]
/
5
(%i5) %, nouns;
218
(%o5)
--3
Aplicado a una expresi
on con parentesis, la comilla simple evita la evaluacion de todos
los smbolos y llamadas a funciones que haya dentro en la expresion.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

aa: 1024;
1024
bb: 19;
19
sqrt(aa) + bb;
51
(sqrt(aa) + bb);
bb + sqrt(aa)
%;
51

La comilla simple no evita la simplificacion.


(%i1) sin (17 * %pi) + cos (17 * %pi);
(%o1)
- 1
(%i2) (sin (17 * %pi) + cos (17 * %pi));

100

Manual de Maxima

(%o2)
- 1
Internamente, Maxima considera que las operaciones con n
umeros decimales de coma
flotante son simples simplificaciones.
(%i1) sin(1.0);
(%o1)
.8414709848078965
(%i2) (sin(1.0));
(%o2)
.8414709848078965

[Operador]
El operador comilla-comilla (dos comillas simples) modifica la evaluacion en las
expresiones de entrada.
Aplicado a cualquier expresion general expr, las dos comillas simples hacen que el
valor de expr sea sustituido por expr en la expresion de entrada.
Aplicado al operador de una expresion, el operador comilla-comilla hace que el operador pase de ser un nombre a ser un verbo, a menos que ya sea un verbo.
El operador comilla-comilla es aplicado por el analizador sintactico de entrada; no
se almacena como una parte de la expresion de entrada analizada. Este operador
se aplica siempre tan pronto como es detectado y no puede ser comentado con una
comilla simple. De esta manera, el operador comilla-comilla provoca la evaluacion de
una expresi
on cuando esta no estaba previsto que fuese evaluada, como en la definicion
de funciones, expresiones lambda y expresiones comentadas con una comilla simple .
El operador comilla-comilla es reconocido tanto por batch como por load.
Veanse tambien el operador comilla simple y nouns.
Ejemplos:
Aplicado a cualquier expresion general expr, las dos comillas simples hacen que el
valor de expr sea sustituido por expr en la expresion de entrada.
(%i1) expand ((a + b)^3);
3
2
2
3
(%o1)
b + 3 a b + 3 a b + a
(%i2) [_, _];
3
3
2
2
3
(%o2)
[expand((b + a) ), b + 3 a b + 3 a b + a ]
(%i3) [%i1, %i1];
3
3
2
2
3
(%o3)
[expand((b + a) ), b + 3 a b + 3 a b + a ]
(%i4) [aa : cc, bb : dd, cc : 17, dd : 29];
(%o4)
[cc, dd, 17, 29]
(%i5) foo_1 (x) := aa - bb * x;
(%o5)
foo_1(x) := aa - bb x
(%i6) foo_1 (10);
(%o6)
cc - 10 dd
(%i7) %;
(%o7)
- 273
(%i8) (foo_1 (10));
(%o8)
- 273

Captulo 7: Evaluaci
on

101

(%i9) foo_2 (x) := aa - bb * x;


(%o9)
foo_2(x) := cc - dd x
(%i10) foo_2 (10);
(%o10)
- 273
(%i11) [x0 : x1, x1 : x2, x2 : x3];
(%o11)
[x1, x2, x3]
(%i12) x0;
(%o12)
x1
(%i13) x0;
(%o13)
x2
(%i14) x0;
(%o14)
x3
Aplicado al operador de una expresion, la doble comilla simple hace que el operador
pase de ser nominal a verbal, a menos que ya sea un verbo.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

declare (foo, noun);


done
foo (x) := x - 1729;
foo(x) := x - 1729
foo (100);
foo(100)
foo (100);
- 1629

El operador comilla-comilla es aplicado por el analizador sintactico de entrada; no se


almacena como una parte de la expresion de entrada analizada.
(%i1) [aa : bb, cc : dd, bb : 1234, dd : 5678];
(%o1)
[bb, dd, 1234, 5678]
(%i2) aa + cc;
(%o2)
dd + bb
(%i3) display (_, op (_), args (_));
_ = cc + aa
op(cc + aa) = +
args(cc + aa) = [cc, aa]
(%o3)
done
(%i4) (aa + cc);
(%o4)
6912
(%i5) display (_, op (_), args (_));
_ = dd + bb
op(dd + bb) = +
args(dd + bb) = [dd, bb]
(%o5)

done

102

Manual de Maxima

El operador comilla-comilla provoca la evaluacion de una expresion cuando esta no


estaba previsto que fuese evaluada, como en la definicion de funciones, expresiones
lambda y expresiones comentadas con una comilla simple .
(%i1) foo_1a (x) := (integrate (log (x), x));
(%o1)
foo_1a(x) := x log(x) - x
(%i2) foo_1b (x) := integrate (log (x), x);
(%o2)
foo_1b(x) := integrate(log(x), x)
(%i3) dispfun (foo_1a, foo_1b);
(%t3)
foo_1a(x) := x log(x) - x
(%t4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%t8)

foo_1b(x) := integrate(log(x), x)
[%t3, %t4]
integrate (log (x), x);
x log(x) - x
foo_2a (x) := %;
foo_2a(x) := x log(x) - x
foo_2b (x) := %;
foo_2b(x) := %
dispfun (foo_2a, foo_2b);
foo_2a(x) := x log(x) - x

(%t9)

foo_2b(x) := %

(%o9)
[%t7, %t8]
(%i10) F : lambda ([u], diff (sin (u), u));
(%o10)
lambda([u], diff(sin(u), u))
(%i11) G : lambda ([u], (diff (sin (u), u)));
(%o11)
lambda([u], cos(u))
(%i12) (sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
(%o12)
sum(b , k, 1, 3) + sum(a , k, 1, 3)
k
k
(%i13) ((sum (a[k], k, 1, 3)) + (sum (b[k], k, 1, 3)));
(%o13)
b + a + b + a + b + a
3
3
2
2
1
1

ev (expr, arg_1, . . . , arg_n )

[Funcion]
Evalua la expresi
on expr en el entorno especificado por los argumentos arg 1, ...,
arg n. Los argumentos son interruptores (Variables Booleanas), variables de asignaci
on, ecuaciones y funciones. ev retorna el resultado (otra expresion) de la evaluaci
on.
La evaluaci
on se realiza por etapas, como sigue:
1. Primero se configura el entorno de acuerdo a los argumentos los cuales pueden
ser algunos o todos de la siguiente lista:
simp causa que expr sea simplificada sin importar el valor de la variable
interruptor simp la cual inhibe la simplificacion cuando su valor es false.

Captulo 7: Evaluaci
on

103

noeval suprime la fase de evaluacion de ev (Vea el paso (4) mas adelante).


Esto es muy u
til en conjuncion con otras variables interruptor y causan en
expr que sea resimplificada sin ser reevaluada.
nouns causa la evaluacion de las formas nominales (tpicamente funciones
sin evaluar tales como integrate or diff) en expr.
expand causa expansion.
expand (m, n ) causa expansion, asignando los valores de maxposex y
maxnegex a m y n, respectivamente.
detout hace que cualesquiera matrices inversas calculadas en expr conserven
su determinante fuera de la inversa, en vez de que divida a cada elemento.
diff realiza todas las diferenciaciones indicadas en expr.
derivlist (x, y, z, ...) realiza solo las diferenciaciones con respecto a
las variables indicadas.
risch hace que las integrales presentes en expr se eval
uen mediante el algoritmo de Risch. Vease tambien risch. Cuando se utiliza el smbolo especial
nouns, se aplica la rutina estandar de integracion.
float provoca la conversion de los n
umeros racionales no-enteros a n
umeros
decimales de coma flotante.
numer causa que algunas funciones matematicas (incluyendo potenciacion)
con argumentos numericos sean evaluados como punto flotante. Esto causa
que las variables en expr las cuales hayan sido declaradas como variables
numericas sean reemplazadas por sus respectivos valores. Esto tambien configura la variable interruptor float a true.
pred provoca la evaluacion de los predicados (expresiones las cuales se evaluan a true o false).
eval provoca una post-evaluacion extra de expr (vease el paso (5) mas adelante), pudiendo aparecer eval varias veces; por cada aparicion de eval, la
expresi
on es reevaluada.
A, donde A es un
atomo declarado como una variable de tipo interruptor,
(Vea evflag) causa que A tenga como valor true durante la evaluacion de
expr.
V: expresion (o alternativamente V=expresion) causa que V tenga el valor
de expresion durante la evaluacion de expr. Notese que si V es una opcion
Maxima, entonces expresion se usa como su valor durante la evaluacion de
expr. Si m
as de un argumento de ev es de este tipo entonces el vnculo se
hace en paralelo. Si V es una expresion no atomica entonces se hace una
sustituci
on m
as que un vnculo.
F donde F, un nombre de funcion, ha sido declarado para ser una funcion de
evaluaci
on (Vea evfun) causa que F sea aplicada a expr.
Cualquier otro nombre de funcion (e.g., sum) causa la evaluacion de las
ocurrencias de esos nombres en expr como si ellos fueran verbos.
En adici
on de que una funcion ocurra en expr (digamos F(x)) puede ser
definida localmente para el proposito de esta evaluacion de expr pasando
F(x) := expresion como un argumento a ev.

104

Manual de Maxima

Si un
atomo no mencionado anteriormente o una variable o expresion con
subndices fueran pasadas como un argumento, esta es evaluada y si el resultado es una ecuacion o una asignacion entonces el vnculo o sustitucion se
llevar
a a cabo. Si el resultado es una lista entonces los miembros de la lista
tratados como si ellos fueran argumentos adicionales pasados a ev. Esto
permite que una lista de argumentos sea pasada (e.g., [X=1, Y=A**2]) o
una lista de nombres de ecuaciones (e.g., [%t1, %t2] donde %t1 y %t2 son
ecuaciones) tal como lo que es retornado por solve.
Los argumentos de ev pueden ser pasados en cualquier orden con excepcion de la
sustituci
on de ecuaciones las cuales son manipuladas en secuencia, de izquierda a
derecha y las funciones de evaluacion las cuales son compuestas, e.g., ev (expr,
ratsimp, realpart) es manipulada como realpart (ratsimp (expr )).
Los interruptores simp, numer y float pueden tambien ser configurados localmente en una sentencia block, o globalmente en Maxima para que su efecto
permanezca hasta que sean reconfiguradas.
Si expr es una Expresi
on Racional Canonica (CRE, por sus siglas en ingles),
entonces la expresi
on retornada por ev es tambien de tipo CRE, siempre que los
interruptores numer y float no sean true.
2. Durante el paso (1), se fabrica una lista de las variables que no contienen
subndices que aparecen en el lado izquierdo de las ecuaciones en los argumentos
o en el valor de algunos argumentos si el valor es una ecuacion. Las variables
(variables que contienen subndices las cuales no tienen asociado un arreglo
de funciones como tambien las variables que no contienen subndices) en la
expresi
on expr son reemplazadas por sus valores globales, excepto por aquellos
que aparezcan en esa lista. Usualmente, expr es solo una etiqueta o un % (como
en %i2 en el ejemplo de mas abajo) as que este paso simplemente recupera la
expresi
on a la que hace referencia la etiqueta y as ev puede trabajarla.
3. Si algunas sustituciones son indicadas por los argumentos, ellas seran llevadas a
cabo ahora.
4. La expresi
on resultante es tambien reevaluada (a menos que uno de los argumentos fuese noeval) y simplificada de acuerdo a los argumentos. Notese que
cualquier llamada a una funcion en expr sera llevada a cabo despues de que
las variables sean evaluadas en ella y que ev(F(x)) pueda comportarse como
F(ev(x)).
5. Por cada aparici
on de eval en los argumentos, se repetiran los pasos (3) y (4).
Ejemplos:
(%i1) sin(x) + cos(y) + (w+1)^2 + diff (sin(w), w);
d
2
(%o1)
cos(y) + sin(x) + -- (sin(w)) + (w + 1)
dw
(%i2) ev (%, numer, expand, diff, x=2, y=1);
2
(%o2)
cos(w) + w + 2 w + 2.449599732693821

Captulo 7: Evaluaci
on

105

Una sintaxis alternativa de alto nivel ha sido desarrollada para ev por medio de la
cual se pueden escribir solamente sus argumentos, sin el comando ev(); se trata de
una forma de escritura simplificada:
expr, arg_1, ..., arg_n
Esta sintaxis no est
a permitida dentro de otras expresiones, como funciones, bloques,
etc.
Notese el proceso de vnculo en paralelo en el siguiente ejemplo:
(%i3) programmode: false;
(%o3)
false
(%i4) x+y, x: a+y, y: 2;
(%o4)
y + a + 2
(%i5) 2*x - 3*y = 3$
(%i6) -3*x + 2*y = -4$
(%i7) solve ([%o5, %o6]);
Soluci
on
1
y = - 5

(%t7)

(%t8)
(%o8)
(%i8) %o6, %o8;
(%o8)
(%i9) x + 1/x > gamma (1/2);
(%o9)
(%i10) %, numer, x=1/2;
(%o10)
(%i11) %, pred;
(%o11)

eval

6
x = 5
[[%t7, %t8]]
- 4 = - 4
1
x + - > sqrt(%pi)
x

2.5 > 1.772453850905516


true

[Smbolo especial]
Como argumento en una llamada a ev (expr ), eval fuerza una evaluacion extra de
expr.
Vease tambien ev.
Ejemplo:
(%i1) [a:b,b:c,c:d,d:e];
(%o1)
[b, c, d, e]
(%i2) a;
(%o2)
b
(%i3) ev(a);
(%o3)
c

106

Manual de Maxima

(%i4) ev(a),eval;
(%o4)
(%i5) a,eval,eval;
(%o5)

e
e

[Propiedad]
Cuando un smbolo x goza de la propiedad evflag, las expresiones ev(expr, x ) y
expr, x (en modo interactivo) equivalen a ev(expr, x = true). Esto es, a x se le
asigna true al tiempo que se eval
ua expr.

evflag

La expresi
on declare(x, evflag) dota a la variable x de la propiedad evflag.
Los interruptores que tienen la propiedad evflag son:
algebraic
dotscrules
exponentialize
float
isolate_wrt_times
listarith
logexpand
m1pbranch
radexpand
ratmx
simpproduct
trigexpand

cauchysum
%emode
exptisolate
halfangles
keepfloat
logabs
lognegint
numer_pbranch
ratalgdenom
ratsimpexpons
simpsum

demoivre
%enumer
factorflag
infeval
letrat
logarc
programmode
ratfac
simp
sumexpand

Ejemplos:
(%i1) sin (1/2);
1
sin(-)
2

(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)

sin (1/2), float;

0.479425538604203
sin (1/2), float=true;
0.479425538604203
simp : false;
false
1 + 1;
1 + 1
1 + 1, simp;
2
simp : true;
true
sum (1/k^2, k, 1, inf);
inf
====
\
1
(%o8)
>
-/
2

Captulo 7: Evaluaci
on

107

==== k
k = 1
(%i9) sum (1/k^2, k, 1, inf), simpsum;
2
%pi
(%o9)
---6
(%i10) declare (aa, evflag);
(%o10)
done
(%i11) if aa = true then YES else NO;
(%o11)
NO
(%i12) if aa = true then YES else NO, aa;
(%o12)
YES
[Propiedad]
Cuando la funci
on F goza de la propiedad evfun, las expresiones ev(expr, F ) y
expr, F (en modo interactivo) equivalen a F (ev(expr )).
Si se especifican dos o m
as funciones, F, G, etc., como poseedoras de la propiedad
evfun, estas se aplican en el mismo orden en el que han sido especificadas como tales.
La expresi
on declare(F, evfun) dota a la funcion F de la propiedad evfun.
Las funciones que tienen la propiedad evfun por defecto son:
bfloat
factor
fullratsimp
logcontract
polarform
radcan
ratexpand
ratsimp
rectform
rootscontract
trigexpand
trigreduce
Ejemplos:
(%i1) x^3 - 1;
3
(%o1)
x - 1
(%i2) x^3 - 1, factor;
2
(%o2)
(x - 1) (x + x + 1)
(%i3) factor (x^3 - 1);
2
(%o3)
(x - 1) (x + x + 1)
(%i4) cos(4 * x) / sin(x)^4;
cos(4 x)
(%o4)
-------4
sin (x)
(%i5) cos(4 * x) / sin(x)^4, trigexpand;
4
2
2
4
sin (x) - 6 cos (x) sin (x) + cos (x)
(%o5)
------------------------------------4
sin (x)

evfun

108

Manual de Maxima

(%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;


2
4
6 cos (x)
cos (x)
(%o6)
- --------- + ------- + 1
2
4
sin (x)
sin (x)
(%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
2
4
6 cos (x)
cos (x)
(%o7)
- --------- + ------- + 1
2
4
sin (x)
sin (x)
(%i8) declare ([F, G], evfun);
(%o8)
done
(%i9) (aa : bb, bb : cc, cc : dd);
(%o9)
dd
(%i10) aa;
(%o10)
bb
(%i11) aa, F;
(%o11)
F(cc)
(%i12) F (aa);
(%o12)
F(bb)
(%i13) F (ev (aa));
(%o13)
F(cc)
(%i14) aa, F, G;
(%o14)
G(F(cc))
(%i15) G (F (ev (aa)));
(%o15)
G(F(cc))
[Variable opcional]
Habilita el modo de "evaluacion infinita". ev repetidamente evalua una expresion
hasta que se pare de hacer cambios. Para prevenir que una variable, digamos X,
sea evaluada sin parar en este modo, simplemente incluya X=X como argumento de
ev. Esta claro que expresiones como ev (X, X=X+1, infeval) generaran un bucle
infinito.

infeval

[Smbolo especial]
El smbolo noeval evita la fase de evaluacion de ev. Es u
til conjuntamente con otras
variables globales y para poder volver a simplificar expresiones sin tener que evaluarlas
otra vez.

noeval

[Smbolo especial]
El smbolo nouns es una evflag, lo que significa que cuando se utilice como una opcion
de la instrucci
on ev, todas las formas nominales que aparezcan en una expresion las
convierte en verbales, esto es, las eval
ua. Veanse tambien noun, nounify, verb y
verbify.

nouns

Captulo 7: Evaluaci
on

pred

109

[Smbolo especial]
Cuando se utiliza como argumento en una llamada a ev (expr ), pred provoca que
los predicados (expresiones que se reducen a true o false) se eval
uen.
Vease ev.
Ejemplo:
(%i1) 1<2;
(%o1)
1 < 2
(%i2) 1<2,pred;
(%o2)
true

Captulo 8: Expresiones

111

8 Expresiones
8.1 Introducci
on a las expresiones
Existe un cierto n
umero de palabras reservadas que no deberan utilizarse como nombres
de variables. Su uso podra causar errores sintacticos.
integrate
next
from
diff
in
at
limit
sum
for
and
elseif
then
else
do
or
if
unless
product
while
thru
step
La mayora de los objetos en Maxima son expresiones. Una secuencia de expresiones
puede constituir una expresi
on, separandolas por comas y colocando parentesis alrededor
de ellas. Esto es similar a las expresiones con coma en C.
(%i1) x: 3$
(%i2) (x: x+1, x: x^2);
(%o2)
16
(%i3) (if (x > 17) then 2 else 4);
(%o3)
4
(%i4) (if (x > 17) then x: 2 else y: 4, y+x);
(%o4)
20
Incluso los bucles en Maxima son expresiones, aunque el valor que retornan (done) no
es muy u
til.
(%i1) y: (x: 1, for i from 1 thru 10 do (x: x*i))$
(%i2) y;
(%o2)
done
pero quiz
as se quiera incluir un tercer termino en la expresi
on con coma para que devuelva el valor de interes.
(%i3) y: (x: 1, for i from 1 thru 10 do (x: x*i), x)$
(%i4) y;
(%o4)
3628800

8.2 Nombres y verbos


Maxima distingue entre operadores que son "nombres" y operadores que son "verbos". Un
verbo es un operador que puede ser ejecutado. Un nombre es un operador que aparece como
un smbolo en una expresi
on pero sin ser ejecutado. Por defecto, los nombres de funciones
son verbos. Un verbo puede transformarse en nombre utilizando el apostrofo o aplicando la
funcion nounify. Un nombre puede transformarse en verbo aplicando la funcion verbify.
La variable nouns hace que ev eval
ue los nombres presentes en una expresion.
La forma verbal se distingue mediante la precedencia del caracter dolar $ al correspondiente smbolo de Lisp. Por otro lado, la forma nominal se distingue mediante la precedencia
del caracter porcentaje % al correspondiente smbolo de Lisp. Algunos nombres gozan de
propiedades especiales para su representacion, como integrate o derivative (devuelto

112

Manual de Maxima

por diff), pero la mayora no. Por defecto, las formas nominal y verbal de una funcion
son identicas cuando se muestran en un terminal. La variable global noundisp hace que
Maxima muestre los nombres precedidos del apostrofo .
Veanse tambien noun, nouns, nounify y verbify.
Ejemplos:
(%i1) foo (x) := x^2;
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)

2
foo(x) := x
foo (42);
1764
foo (42);
foo(42)
foo (42), nouns;
1764
declare (bar, noun);
done
bar (x) := x/17;

(%o6)
(%i7) bar (52);
(%o7)
(%i8) bar (52), nouns;

x
bar(x) := -17
bar(52)

52
(%o8)
-17
(%i9) integrate (1/x, x, 1, 42);
(%o9)
log(42)
(%i10) integrate (1/x, x, 1, 42);
42
/
[
1
(%o10)
I
- dx
]
x
/
1
(%i11) ev (%, nouns);
(%o11)
log(42)

8.3 Identificadores
En Maxima, los identificadores pueden contener caracteres alfabeticos, n
umeros del 0 al 9
y cualquier otro car
acter precedido de la barra invertida \.
Un identificador puede comenzar con un caracter numerico si este va precedido de la
barra invertida \. Los caracteres numericos que ocupen la segunda posicion o posterior no
necesitan ir precedidos de la barra invertida.

Captulo 8: Expresiones

113

Los caracteres pueden declararse como alfabeticos con la funcion declare. As declarados, no necesitan ir precedidos de la barra invertida en un identificador. En principio, los
caracteres alfabeticos son las letras de A a Z y a a z, junto con % y _.
Maxima distingue min
usculas y may
usculas. Los identificadores foo, FOO y Foo son
distintos. Vease Secci
on 37.1 [Lisp y Maxima], pagina 587 para mas informacion.
Un identificador en Maxima es un smbolo Lisp que comienza con el smbolo dolar
$. Cualquier otro smbolo de Lisp va precedido de la interrogacion ? cuando aparece en
Maxima. Vease Secci
on 37.1 [Lisp y Maxima], pagina 587 para mas informacion.
Ejemplos:
(%i1) %an_ordinary_identifier42;
(%o1)
%an_ordinary_identifier42
(%i2) embedded\ spaces\ in\ an\ identifier;
(%o2)
embedded spaces in an identifier
(%i3) symbolp (%);
(%o3)
true
(%i4) [foo+bar, foo\+bar];
(%o4)
[foo + bar, foo+bar]
(%i5) [1729, \1729];
(%o5)
[1729, 1729]
(%i6) [symbolp (foo\+bar), symbolp (\1729)];
(%o6)
[true, true]
(%i7) [is (foo\+bar = foo+bar), is (\1729 = 1729)];
(%o7)
[false, false]
(%i8) baz\~quux;
(%o8)
baz~quux
(%i9) declare ("~", alphabetic);
(%o9)
done
(%i10) baz~quux;
(%o10)
baz~quux
(%i11) [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
(%o11)
[false, false, false]
(%i12) :lisp (defvar *my-lisp-variable* $foo)
*MY-LISP-VARIABLE*
(%i12) ?\*my\-lisp\-variable\*;
(%o12)
foo

8.4 Desigualdades
Maxima dispone de los operadores de desigualdad <, <=, >=, >, # y notequal. Vease if
para una descripci
on de las expresiones condicionales.

8.5 Funciones y variables para expresiones


alias (new_name_1, old_name_1, ..., new_name_n, old_name_n )

[Funcion]
provee un nombre alternativo para una (bien sea definida por el usuario o por el
sistema) funci
on, variable, arreglo, etc. Cualquier n
umero par de argumentos puede
ser usado.

114

Manual de Maxima

[Variable del sistema]

aliases
Valor por defecto: []

La variable aliases es la lista de atomos que tienen un "alias" definido por el usuario
(establecido mediante las funciones alias, ordergreat o orderless o declarando el
atomo como un noun (nombre) con declare.
[Clave]
Opera con los comandos part (como part, inpart, substpart, substinpart, dpart
y lpart). Por ejemplo:

allbut

(%i1) expr : e + d + c + b + a;
(%o1)
e + d + c + b + a
(%i2) part (expr, [2, 5]);
(%o2)
d + a
mientras que:
(%i1) expr : e + d + c + b + a;
(%o1)
e + d + c + b + a
(%i2) part (expr, allbut (2, 5));
(%o2)
e + c + b
La funci
on kill tambien reconoce a allbut.
(%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
(%o1)
[11, 22, 33, 44, 55]
(%i2) kill (allbut (cc, dd));
(%o0)
done
(%i1) [aa, bb, cc, dd];
(%o1)
[aa, bb, 33, 44]
La sentencia kill(allbut(a_1, a_2, ...)) tiene el mismo efecto que kill(all),
excepto que no elimina los smbolos a 1, a 2, ... .

args (expr )

[Funcion]
Devuelve la lista de argumentos de expr, que puede ser cualquier tipo de expresion a
excepci
on de un
atomo. Tan solo se muestran los argumentos del operador principal;
subexpresiones de expr aparecen como elementos o subexpresiones de elementos de
la lista de argumentos.
El orden de los miembros de la lista puede depender de la variable global inflag.

La llamada args (expr ) es equivalente a substpart ("[", expr, 0).


Veanse tambien substpart y op.

atom (expr )

[Funcion]
Devuelve true si expr es un atomo (n
umero, nombre o cadena alfanumerica) y
false en caso contario. As, atom(5) devolvera true, mientras que atom(a[1])
y atom(sin(x)) dar
an como resultado false (dando por hecho que tanto a[1] como
x no tienen valores asignados).

Captulo 8: Expresiones

115

box (expr )
box (expr, a )

[Funcion]
[Funcion]
Devuelve expr encerrada en una caja. El valor devuelto es una expresion con box
como operador y expr como argumento. Se dibujara una caja cuando display2d
valga true.
La llamada box (expr, a ) encierra expr en una caja etiquetada con el smbolo a. La
etiqueta se recorta si es m
as larga que el ancho de la caja.
La funci
on box eval
ua su argumento. Sin embargo, la expresion encerrada no se
eval
ua, siendo excluda de los calculos.
La variable boxchar guarda el caracter a utilizar para dibujar la caja en las funciones
box, dpart y lpart.
Ejemplos:
(%i1) box (a^2 + b^2);
"""""""""
" 2
2"
(%o1)
"b + a "
"""""""""
(%i2) a : 1234;
(%o2)
1234
(%i3) b : c - d;
(%o3)
c - d
(%i4) box (a^2 + b^2);
""""""""""""""""""""
"
2
"
(%o4)
"(c - d) + 1522756"
""""""""""""""""""""
(%i5) box (a^2 + b^2, term_1);
term_1""""""""""""""
"
2
"
(%o5)
"(c - d) + 1522756"
""""""""""""""""""""
(%i6) 1729 - box (1729);
""""""
(%o6)
1729 - "1729"
""""""
(%i7) boxchar: "-";
(%o7)
(%i8) box (sin(x) + cos(y));
----------------(%o8)
-cos(y) + sin(x)-----------------

[Variable opcional]
Valor por defecto: "
La variable boxchar guarda el caracter a utilizar para dibujar la caja en las funciones
box, dpart y lpart.

boxchar

116

Manual de Maxima

Todas las cajas en una expresion se dibujan con el valor actual de boxchar, caracter
que no se almacena con las expresion encerrada.

collapse (expr )

[Funcion]
Colapsa expr haciendo que todas las subexpresiones que sean iguales compartan las
mismas celdas, ahorrando espacio. collapse es una subrutina utilizada por la instrucci
on optimize. El uso de collapse puede ser u
til despues de cargar un fichero
creado con save. Se pueden colapsar varias expresiones de forma conjunta utilizando
collapse ([expr_1, ..., expr_n ]). Tambien se pueden colapsar los elementos del
array A haciendo collapse (listarray (A)).

disolate (expr, x_1, ..., x_n )

[Funcion]
Es similar a isolate (expr, x ), excepto que permite al usuario aislar mas de una
variable simult
aneamente. Puede ser u
til para hacer un cambio de variables en integrales m
ultiples en las que tales variables dependan de de dos o mas variables de integraci
on. Esta funci
on se carga automaticamente desde simplification/disol.mac.
Se dispone de una demostyracion en demo("disol")$.

dispform (expr )
dispform (expr, all)

[Funcion]
[Function]
dispform(expr ) devuelve la representacion externa de expr respecto del operador
del nivel superior. dispform(expr, all) devuelve la representacion externa respecto
de todos los operadores que haya en expr.
Vease tambien part, inpart y inflag.
Ejemplos:
La representaci
on interna de - x es "menos uno multiplicado por x", mientras que la
representaci
on externa es "menos x".
(%i1) - x;
(%o1)
- x
(%i2) ?format (true, "~S~%", %);
((MTIMES SIMP) -1 $X)
(%o2)
false
(%i3) dispform (- x);
(%o3)
- x
(%i4) ?format (true, "~S~%", %);
((MMINUS SIMP) $X)
(%o4)
false

La representaci
on interna de sqrt(x) es "x elevado a 1/2", mientras que su representaci
on externa es "raz de x".
(%i1) sqrt (x);
(%o1)
(%i2) ?format (true, "~S~%",
((MEXPT SIMP) $X ((RAT SIMP)
(%o2)
(%i3) dispform (sqrt (x));
(%o3)

sqrt(x)
%);
1 2))
false
sqrt(x)

Captulo 8: Expresiones

117

(%i4) ?format (true, "~S~%", %);


((%SQRT SIMP) $X)
(%o4)
false
Utilizaci
on del argumento opcional all.
(%i1) expr : sin (sqrt (x));
(%o1)
sin(sqrt(x))
(%i2) freeof (sqrt, expr);
(%o2)
true
(%i3) freeof (sqrt, dispform (expr));
(%o3)
true
(%i4) freeof (sqrt, dispform (expr, all));
(%o4)
false

dpart (expr, n_1, ..., n_k )

[Funcion]
Selecciona la misma expresi
on que part, pero en lugar de devolver esa expresion como
su valor, devuelve la expresi
on completa con la subexpresion seleccionada dentro de
una caja. La caja es parte de la expresion.
(%i1) dpart (x+y/z^2, 1, 2, 1);
y
(%o1)
---- + x
2
"""
"z"
"""

exptisolate

[Variable opcional]

Valor por defecto: false


Vease isolate.
[Variable opcional]
Valor por defecto: false
Si exptsubst vale true permite la sustitucion y por %e^x en %e^(a x).

exptsubst

freeof (x_1, ..., x_n, expr )

[Funcion]
freeof (x_1, expr ) devuelve true si ninguna subexpresion de expr coincide con x 1,
o si x 1 aparece como variable muda en expr, o si x 1 no es ni una forma nominal ni
verbal de cualesquiera operadores presentes en expr, devolviendo false en otro caso.
La llamada freeof (x_1, ..., x_n, expr ) equivale a freeof (x_1, expr ) and ...
and freeof (x_n, expr ).
Los argumentos x 1, ..., x n pueden seer nombres de funciones y variables, nombres
subindicados, operadores (encerrados entre comillas dobles) o expresiones generales.
La funci
on freeof eval
ua sus argumentos.
Una variable es una variable muda en una expresion si no tiene valor asignado fuera
de la expresi
on. Variable mudas reconocidas por freeof son el ndice de una suma
o producto, la variable lmite en limit, la variable de integracion en la version de
integral definida de integrate, la variable original en laplace, variables formales en
expresiones at y los argumentos de las expresiones lambda.

118

Manual de Maxima

La versi
on indefinida de integrate no esta libre de su variable de integracion.
Ejemplos:
Los argumentos son nombres de funciones, variables, nombres subindicados, operaores
y expresiones. La llamada freeof (a, b, expr) equivale a freeof (a, expr) and
freeof (b, expr).
(%i1) expr: z^3 * cos (a[1]) * b^(c+d);
d + c 3
(%o1)
cos(a ) b
z
1
(%i2) freeof (z, expr);
(%o2)
false
(%i3) freeof (cos, expr);
(%o3)
false
(%i4) freeof (a[1], expr);
(%o4)
false
(%i5) freeof (cos (a[1]), expr);
(%o5)
false
(%i6) freeof (b^(c+d), expr);
(%o6)
false
(%i7) freeof ("^", expr);
(%o7)
false
(%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
(%o8)
true
freeof eval
ua sus argumentos.
(%i1) expr: (a+b)^5$
(%i2) c: a$
(%i3) freeof (c, expr);
(%o3)

false

freeof no considera funciones equivalentes. La simplificacion puede dar una expresi


on equivalente pero diferente.
(%i1) expr: (a+b)^5$
(%i2) expand (expr);
5
4
2 3
3 2
4
5
(%o2)
b + 5 a b + 10 a b + 10 a b + 5 a b + a
(%i3) freeof (a+b, %);
(%o3)
true
(%i4) freeof (a+b, expr);
(%o4)
false
(%i5) exp (x);
x
(%o5)
%e
(%i6) freeof (exp, exp (x));
(%o6)
true
Un sumatorio o integral definida esta libre de su variable muda. Una integral indefinida de integrate no esta libre de su variable de integracion.

Captulo 8: Expresiones

119

(%i1) freeof (i, sum (f(i), i, 0, n));


(%o1)
true
(%i2) freeof (x, integrate (x^2, x, 0, 1));
(%o2)
true
(%i3) freeof (x, integrate (x^2, x));
(%o3)
false
[Variable opcional]

inflag
Valor por defecto: false

Si inflag vale true, las funciones para la extraccion de partes inspeccionan la forma
interna de expr.
Notese que el simplificador reordena expresiones. As, first (x + y) devuelve x si
inflag vale true y y si inflag vale false. (first (y + x) devuelve el mismo resultado.)
Adem
as, d
andole a inflag el valor true y llamando a part o a substpart es lo
mismo que llamar a inpart o a substinpart.
Las funciones que se ven afectadas por el valor de inflag son: part, substpart,
first, rest, last, length, la construccion for ... in, map, fullmap, maplist,
reveal y pickapart.

inpart (expr, n_1, ..., n_k )

[Funcion]
Similar a part, pero trabaja con la representacion interna de la expresion, siendo m
as
rapida. Se debe tener cuidado con el orden de subexpresiones en sumas y productos,
pues el orden de las variables en la forma interna es normalmente diferente al que se
muestra por el terminal, y cuando se trata con el signo menos unario, resta y division,
pues estos operadores desaparecen de la expresion. Las llamadas part (x+y, 0) o
inpart (x+y, 0) devuelven +, siendo necesario encerrar el operador entre comillas
dobles cuando se haga referencia ael. Por ejemplo, ... if inpart (%o9,0) = "+"
then ....
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

x + y + w*z;
w z + y + x
inpart (%, 3, 2);
z
part (%th (2), 1, 2);

z
limit (f(x)^g(x+1), x, 0, minus);
g(x + 1)
(%o4)
limit
f(x)
x -> 0(%i5) inpart (%, 1, 2);
(%o5)
g(x + 1)

isolate (expr, x )

[Funcion]
Devuelve expr con subexpresiones que son sumas y que no contienen variables
reemplazadas por etiquetas de expresiones intermedias (tales etiquetas son smbolos

120

Manual de Maxima

at
omicos como %t1, %t2, ...). Esta funcion es de utilidad para evitar la expansion
innecesaria de subexpresiones que no contienen la variable de interes. Puesto que las
etiquetas intermedias toman el valor de subexpresiones pueden ser todas sustituidas
evaluando la expresi
on en la que aparecen.
Si la variable exptisolate, cuyo valor por defecto es false, vale true hara que
isolate busque exponentes de atomos (como %e) que contengan la variable.
Si isolate_wrt_times vale true, entonces isolate tambien aislara respecto de los
productos. Vease isolate_wrt_times.
Para ejemplos, ejec
utese example (isolate).
[Variable opcional]
Valor por defecto: false
Si isolate_wrt_times vale true, entonces isolate tambien aislara respecto de los
productos. Comp
arese el comportamiento de isolate al cambiar el valor de esta
variable global en el siguiente ejemplo,
(%i1) isolate_wrt_times: true$
(%i2) isolate (expand ((a+b+c)^2), c);

isolate_wrt_times

(%t2)

2 a

(%t3)

2 b

(%t4)

2
2
b + 2 a b + a

2
(%o4)
c + %t3 c + %t2 c + %t4
(%i4) isolate_wrt_times: false$
(%i5) isolate (expand ((a+b+c)^2), c);
2
(%o5)
c + 2 b c + 2 a c + %t4

listconstvars

[Variable opcional]

Valor por defecto: false


Si listconstvars vale true, hara que listofvars incluya %e, %pi, %i y cualquier
otra variable que sea declarada constante de las que aparezcan en el argumento de
listofvars. Estas constantes se omiten por defecto.

listdummyvars

[Variable opcional]

Valor por defecto: true


Si listdummyvars vale false, las "variables mudas" de la expresion no seran includas
en la lista devuelta por listofvars. (La definicion de "variables mudas" se encuentra
en la descripci
on de freeof. "Variables mudas" son objetos matematicos como el
ndice de un sumatorio o producto, una variable lmite o la variable de una integracion
definida.) Ejemplo:

Captulo 8: Expresiones

(%i1)
(%i2)
(%o2)
(%i3)
(%i4)
(%o4)

121

listdummyvars: true$
listofvars (sum(f(i), i, 0, n));
[i, n]
listdummyvars: false$
listofvars (sum(f(i), i, 0, n));
[n]

listofvars (expr )

[Funcion]

Devuelve una lista con las variables presentes en expr.


Si la variable listconstvars vale true entonces listofvars incluira %e, %pi, %i
y cualquier otra variable declarada constante de las que aparezcan en expr. Estas
constantes se omiten por defecto.
Vease tambien la variable opcional listdummyvars para excluir o incluir variables
ficticias en la lista de variables.
Ejemplo:
(%i1) listofvars (f (x[1]+y) / g^(2+a));
(%o1)
[g, a, x , y]
1

lfreeof (list, expr )

[Funcion]
Para cada miembro m de list, realiza la llamada freeof (m, expr ). Devuelve false
si alguna de estas llamadas a freeof retorno false, y true en caso contrario.

lpart (label, expr, n_1, ..., n_k )

[Funcion]
Similar a dpart pero utiliza una caja etiquetada. Una caja etiquetada es similar a la
que produce dpart, pero con un nombre en la lnea superior.

[Propiedad]
Se pueden declarar variables de tipo mainvar. El orden de los atomos es: n
umeros <
constantes (como %e o %pi) < escalares < otras variables < "mainvars". Por ejemplo,
comp
arese expand ((X+Y)^4) con (declare (x, mainvar), expand ((x+y)^4)).
(Nota: Se debe tener cuidado si se quiere hacer uso de esta declaracion. Por ejemplo,
si se resta una expresi
on en la que x ha sido declarada como mainvar de otra en la
que x no es mainvar, puede ser necesario volver a simplificar, ev (expr, simp), a
fin de obtener cancelaciones. Ademas, si se guarda una expresion en la que x es
mainvar, quiz
as sea necesario guardar tambien x.)

mainvar

noun

[Propiedad]
El smbolo noun es una de las opciones de la instruccion declare. Hace que
una funci
on se declare como "nombre", lo que significa que no se evaluar
a
autom
aticamente.

noundisp

[Variable opcional]

Valor por defecto: false


Si noundisp vale true, los nombres se muestran precedidos de un apostrofo. Siempre
debe valer true cuando se quiera representar la definicion de funciones.

122

Manual de Maxima

nounify (f )

[Funcion]
Devuelve la forma nominal de la funcion cuyo nombre es f. Puede ser u
til cuando se
quiera hacer referencia al nombre de una funcion sin que esta se ejecute. Notese que
algunas funciones verbales devolveran su forma nominal si no pueden ser evaluadas
para ciertos argumentos. Esta es tambien la expresion que se obtiene cuando la
llamada a una funci
on va precedida por del apostrofo.

nterms (expr )

[Funcion]
Devuelve el n
umero de terminos que expr llegara a tener si fuese completamente expandida y no hubiesen cancelaciones ni combinaciones de terminos semejantes. Notese
que expresiones como sin (expr ), sqrt (expr ), exp (expr ), etc. cuentan como un
solo termino, independientemente de cuantos terminos tenga a su vez expr en caso
de tratarse de una suma.

op (expr )

[Funcion]
Devuelve el operador principal de la expresion expr. La llamada op (expr ) equivale
a part (expr, 0).

La funci
on op devuelve una cadena si el operador principal es un operador prefijo,
infijo (binario o n-ario), postfijo, "bi-fijo" o "no-fijo" ("bi-fijo" se refiere a un par
de smbolos que encierran su o sus argumentos, y "no-fijo" es un operador que no
necesita argumentos). Si expr es la expresion de una funcion subindicada, op devuelve
la funci
on subindicada; en cuyo caso el valor devuelto no es un atomo. En otro caso,
expr es la expresi
on de una funcion array u ordinaria, y entonces op devuelve un
smbolo.
La funci
on op observa el valor de la variable global inflag.
La funci
on op eval
ua sus argumentos.
Vease tambien args.
Ejemplos:
(%i1) stringdisp: true$
(%i2) op (a * b * c);
(%o2)
"*"
(%i3) op (a * b + c);
(%o3)
"+"
(%i4) op (sin (a + b));
(%o4)
sin
(%i5) op (a!);
(%o5)
"!"
(%i6) op (-a);
(%o6)
"-"
(%i7) op ([a, b, c]);
(%o7)
"["
(%i8) op ((if a > b then c else d));
(%o8)
"if"
(%i9) op (foo (a));
(%o9)
foo
(%i10) prefix (foo);

Captulo 8: Expresiones

123

(%o10)
"foo"
(%i11) op (foo a);
(%o11)
"foo"
(%i12) op (F [x, y] (a, b, c));
(%o12)
F
x, y
(%i13) op (G [u, v, w]);
(%o13)
G

operatorp (expr, op )
operatorp (expr, [op_1, ..., op_n ])

[Funcion]
[Funcion]
La llamada operatorp (expr, op ) devuelve true si op es igual al operador de expr.

La llamada operatorp (expr, [op_1, ..., op_n ]) devuelve true si alg


un elemento
op 1, ..., op n es igual al operador de expr.

opsubst

[Variable opcional]

Valor por defecto: true


Si opsubst vale false, subst no sustituye el operdor de una expresion, de manera
que (opsubst: false, subst (x^2, r, r+r[0])) trabajara correctamente.

optimize (expr )

[Funcion]
Devuelve una expresi
on que produce el mismo valor y efectos secundarios que expr,
pero de forma m
as eficiente al evitar recalcular subexpresiones comunes. La funcion
optimize tambien tiene el efecto secundario de colapsar su argumento de manera que
se compartan todas sus subexpresiones comunes. Hagase example (optimize) para
ver ejemplos.

optimprefix

[Variable opcional]

Valor por defecto: %


La variable optimprefix es el prefijo utilizado para los smbolos generados por la
instrucci
on optimize.

ordergreat (v_1, ..., v_n )


orderless (v_1, ..., v_n )

[Funcion]
[Funcion]
ordergreat cambia el orden canonico de las expresiones de Maxima, de manera que
v 1 prevalece sobre v 2, que prevalece sobre ..., que prevalece sobre v n, que prevalece
sobre cualquier otro smbolo no presente en la lista de argumentos.
orderless cambia el orden canonico de las expresiones de Maxima, de manera que
v 1 precede a v 2, que precede a ..., que precede a v n, que precede a cualquier otra
variable no presente en la lista de argumentos.
El orden impuesto por ordergreat y orderless se destruye con unorder.
ordergreat y orderless s
olo se pueden llamar una vez, a menos que se invoque
a unorder. La u
ltima llamada a ordergreat y orderless es la que se mantiene
activa.
Vease tambien ordergreatp.

124

Manual de Maxima

ordergreatp (expr_1, expr_2 )


orderlessp (expr_1, expr_2 )

[Funcion]
[Funcion]
ordergreatp devuelve true si expr 1 prevalece sobre expr 2 en el orden canonico de
las expresiones de Maxima, o false en caso contrario.
orderlessp devuelve true si expr 1 precede a expr 2 en el orden canonico de las
expresiones de Maxima, o false en caso contrario.

Todos los
atomos y expresiones de Maxima son comparables bajo ordergreatp y
orderlessp, aunque existen ejemplos aislados de expresiones para los que estos predicados no son transitivos.
La ordenaci
on can
onica de
atomos (smbolos, n
umeros literales y cadenas) es la siguiente: (enteros y decimales en coma flotante) preceden a (n
umeros decimales grandes
o bigfloats), que preceden a (constantes declaradas), que preceden a (cadenas), que
preceden a (escalares declarados), que preceden a (primer argumento de orderless),
que precede a ..., que precede a (
ultimo argumento de orderless), que precede a
(otros smbolos), que preceden a (
ultimo argumento de ordergreat), que precede
a ..., que precede a (primer argumento de ordergreat), que precede a (variables
principales declaradas).
Para las expresiones no at
omicas, la ordenacion canonica se deriva de la ordenacion
de
atomos. Para los operadores nativos +, * y ^, los criterios de ordenacion no son
sencillos de resumir. Para otros operadores nativos, y todas las demas funciones y operadores, las expresiones se ordenan por sus argumentos (empezando por el primero),
despues por el nombre del operador o funcion. En caso de expresiones con subndices,
el smbolo subindicado se considera operador y el subndice un argumento del mismo.
El orden can
onico de expresiones se modifica mediante las funciones ordergreat y
orderless, as como por las declaraciones mainvar, constant y scalar.
Vease tambien sort.
Ejemplos:
Ordenaci
on de smbolos comunes y constantes. Notese que %pi no se ordena en
funci
on de su valor numerico.
(%i1) stringdisp : true;
(%o1)
true
(%i2) sort ([%pi, 3b0, 3.0, x, X, "foo", 3, a, 4, "bar", 4.0, 4b0]);
(%o2) [3, 3.0, 4, 4.0, 3.0b0, 4.0b0, %pi, "bar", "foo", a, x, X]
Efecto producido por las funciones ordergreat y orderless.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

sort ([M, H, K, T, E, W, G, A, P, J, S]);


[A, E, G, H, J, K, M, P, S, T, W]
ordergreat (S, J);
done
orderless (M, H);
done
sort ([M, H, K, T, E, W, G, A, P, J, S]);
[M, H, A, E, G, K, P, T, W, J, S]

Efecto producido por las declaraciones mainvar, constant y scalar.

Captulo 8: Expresiones

(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

125

sort ([aa, foo, bar, bb, baz, quux, cc, dd,


[aa, bar, baz, bb, cc, dd, foo, quux, A1,
declare (aa, mainvar);
done
declare ([baz, quux], constant);
done
declare ([A1, B1], scalar);
done
sort ([aa, foo, bar, bb, baz, quux, cc, dd,
[baz, quux, A1, B1, bar, bb, cc, dd, foo,

A1, B1, C1]);


B1, C1]

A1, B1, C1]);


C1, aa]

Ordenaci
on de expresiones no atomicas.
(%i1) sort ([1, 2, n, f(1), f(2), f(2, 1), g(1), g(1, 2), g(n), f(n, 1)]);
(%o1) [1, 2, f(1), g(1), g(1, 2), f(2), f(2, 1), n, g(n),
f(n, 1)]
(%i2) sort ([foo(1), X[1], X[k], foo(k), 1, k]);
(%o2)
[1, foo(1), X , k, foo(k), X ]
1
k

part (expr, n_1, ..., n_k )

[Funcion]
Devuelve partes de la forma mostrada de expr. Obtiene la parte de expr que se
especifica por los ndices n 1, ..., n k. Primero se obtiene la parte n 1 de expr,
despues la parte n 2 del resultado anterior, y as sucesivamente. El resultado que se
obtiene es la parte n k de ... la parte n 2 de la parte n 1 de expr. Si no se especifican
ndices, devuelve expr.
La funci
on part se puede utilizar para obtener un elemento de una lista, una fila de
una matriz, etc.
Si el u
ltimo argumento de la funcion part es una lista de ndices, entonces se toman
varias subexpresiones, cada una de las cuales correspondiente a un ndice de la lista.
As, part (x + y + z, [1, 3]) devuelve z+x.
La variable piece guarda la u
ltima expresion seleccionada con la funcion part. Se
actualiza durante la ejecuci
on de la funcion, por lo que puede ser referenciada en la
misma funci
on.
Si partswitch vale true entonces de devuelve end cuando no exista la parte seleccionada de una expresi
on, si vale false se mostrara un mensaje de error.
Veanse tambien inpart, substpart, substinpart, dpart y lpart.
Ejemplos:
(%i1) part(z+2*y+a,2);
(%o1)
(%i2) part(z+2*y+a,[1,3]);
(%o2)
(%i3) part(z+2*y+a,2,1);
(%o3)

2 y
z + a
2

La instrucci
on example (part) muestra mas ejemplos.

126

Manual de Maxima

partition (expr, x )

[Funcion]
Devuelve una lista con dos expresiones, que son: (1) los factores de expr si es un
producto, los terminos de expr si es una suma, o los elementos de expr, si es una lista,
que no contengan a x, (2) los factores, terminos o lista que contengan a x.
(%i1) partition (2*a*x*f(x), x);
(%o1)
[2 a, x f(x)]
(%i2) partition (a+b, x);
(%o2)
[b + a, 0]
(%i3) partition ([a, b, f(a), c], a);
(%o3)
[[b, c], [a, f(a)]]
[Variable opcional]

partswitch
Valor por defecto: false

Si partswitch vale true entonces de devuelve end cuando no exista la parte seleccionada de una expresi
on, si vale false se mostrara un mensaje de error.

pickapart (expr, n )

[Funcion]
Asigna etiquetas de expresiones intermedias a subexpresiones de expr al nivel de
profundidad n, que es un entero. A las subexpresiones a un nivel de profundidad
mayor o menor no se les asignan etiquetas. La funcion pickapart devuelve una
expresi
on en terminos de expresiones intermedias equivalente a la expresion original
expr.
Veanse tambien part, dpart, lpart, inpart y reveal.
Ejemplos:
(%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
2
sin(x )
b + a
(%o1)
- log(sqrt(x + 1) + 1) + ------- + ----3
2
(%i2) pickapart (expr, 0);

(%t2)

2
sin(x )
b + a
- log(sqrt(x + 1) + 1) + ------- + ----3
2

(%o2)
(%i3) pickapart (expr, 1);
(%t3)

(%t4)

%t2

- log(sqrt(x + 1) + 1)

2
sin(x )
------3

Captulo 8: Expresiones

(%t5)

127

b + a
----2

(%o5)
%t5 + %t4 + %t3
(%i5) pickapart (expr, 2);
(%t6)

log(sqrt(x + 1) + 1)

(%t7)

2
sin(x )

(%t8)

b + a

%t8
%t7
--- + --- - %t6
2
3
(%i8) pickapart (expr, 3);
(%o8)

(%t9)

sqrt(x + 1) + 1

(%t10)

2
x

b + a
sin(%t10)
----- - log(%t9) + --------2
3
(%i10) pickapart (expr, 4);
(%o10)

(%t11)

sqrt(x + 1)

2
sin(x )
b + a
(%o11)
------- + ----- - log(%t11 + 1)
3
2
(%i11) pickapart (expr, 5);
(%t12)

x + 1

(%o12)

2
sin(x )
b + a
------- + ----- - log(sqrt(%t12) + 1)

128

Manual de Maxima

3
2
(%i12) pickapart (expr, 6);
2
sin(x )
b + a
(%o12)
------- + ----- - log(sqrt(x + 1) + 1)
3
2
[Variable del sistema]
Guarda la u
ltima expresi
on seleccionada por las funciones part.

piece

psubst (list, expr )


psubst (a, b, expr )

[Funcion]
[Funcion]

psubst(a, b, expr ) es simliar a subst. Vease subst.


A diferencia de subst, la funcion psubst hace sustituciones en paralelo si su primer
argumento es una lista de ecuaciones.
Vease tambien sublis para hacer sustituciones en paralelo.
Ejemplo:
El primer ejemplo muestra la sustitucion en paralelo con psubst. El segundo ejemplo
muestra el resultado de la funcion subst, que realiza la sustitucion en serie.
(%i4) psubst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o4)
sin(b) + sin(a)
(%i5) subst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o5)
2 sin(a)

rembox (expr, unlabelled)


rembox (expr, label )
rembox (expr )

[Funcion]
[Funcion]
[Funcion]

Elimina cajas de expr.


La llamada rembox (expr, unlabelled) elimina todas las cajas no etiquetadas de
expr.
La llamada rembox (expr, label ) solo elimina las cajas etiquetadas con label.
La llamada rembox (expr ) elimina todas las caajs, independientemente de que esten
etiquetadas o no.
Las cajas son dibujadas por las funciones box, dpart y lpart.
Ejemplos:
(%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
a d - b c
(%o1)
sin(%pi x) + --------2
h
(%i2) dpart (dpart (expr, 1, 1), 2, 2);
"""""""
a d - b c
(%o2)
sin("%pi x") + --------"""""""
""""
" 2"

Captulo 8: Expresiones

(%i3) expr2:

(%o3)

(%i4) rembox

(%o4)

(%i5) rembox

(%o5)

(%i6) rembox

(%o6)

(%i7) rembox
(%o7)

reveal (expr, nivel )

129

"h "
""""
lpart (BAR, lpart (FOO, %, 1), 2);
FOO"""""""""""
BAR""""""""
"
""""""" "
"a d - b c"
"sin("%pi x")" + "---------"
"
""""""" "
" """"
"
""""""""""""""
" " 2"
"
" "h "
"
" """"
"
"""""""""""
(expr2, unlabelled);
BAR""""""""
FOO"""""""""
"a d - b c"
"sin(%pi x)" + "---------"
""""""""""""
"
2
"
"
h
"
"""""""""""
(expr2, FOO);
BAR""""""""
"""""""
"a d - b c"
sin("%pi x") + "---------"
"""""""
" """"
"
" " 2"
"
" "h "
"
" """"
"
"""""""""""
(expr2, BAR);
FOO"""""""""""
"
""""""" "
a d - b c
"sin("%pi x")" + --------"
""""""" "
""""
""""""""""""""
" 2"
"h "
""""
(expr2);
a d - b c
sin(%pi x) + --------2
h

[Funcion]
Reemplaza partes de expr al nivel especificado y las sutituye por descripciones cortas.
Las sumas y restas se reemplazan por Sum(n ), siendo n el n
umero de terminos
de la suma.
Los productos se reemplazan por Product(n ), siendo n el n
umero de factores
del producto.

130

Manual de Maxima

Las potencias se reemplazan por Expt.


Los cocientes se reemplazan por Quotient.
El smbolo negativo se reemplaza por Negterm.
Las listas se reemplazan por List(n ), siendo n el n
umero de elementos de la
lista.
Si el entero depth es mayor o igual que la profundidad maxima de expr, reveal
(expr, depth ) devuelve expr sin modificar.
La funci
on reveal eval
ua sus argumentos y devuelve la expresion con las modificaciones solicitadas.
Ejemplo:
(%i1) e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
2
2
b - 2 a b + a
(%o1)
------------------------b + a
2 b
2 a
2 %e
+ %e
+ %e
(%i2) reveal (e, 1);
(%o2)
Quotient
(%i3) reveal (e, 2);
Sum(3)
(%o3)
-----Sum(3)
(%i4) reveal (e, 3);
Expt + Negterm + Expt
(%o4)
-----------------------Product(2) + Expt + Expt
(%i5) reveal (e, 4);
2
2
b - Product(3) + a
(%o5)
-----------------------------------Product(2)
Product(2)
2 Expt + %e
+ %e
(%i6) reveal (e, 5);
2
2
b - 2 a b + a
(%o6)
-------------------------Sum(2)
2 b
2 a
2 %e
+ %e
+ %e
(%i7) reveal (e, 6);
2
2
b - 2 a b + a
(%o7)
------------------------b + a
2 b
2 a
2 %e
+ %e
+ %e

Captulo 8: Expresiones

131

sublis (list, expr )

[Funcion]
Hace sustituciones m
ultiples en paralelo dentro de las expresiones. list es una lista de
ecuaciones, cuyos miembros izquierdos deben ser atomos.
La variable sublis_apply_lambda controla la simplificacion despues de sublis.
Vease tambien psubst para hacer sustituciones en paralelo.
Ejemplo:
(%i1) sublis ([a=b, b=a], sin(a) + cos(b));
(%o1)
sin(b) + cos(a)

[Variable opcional]
Valor por defecto: true
Controla si los lambda sustituidos son aplicados en la simplificacion despues de invocar
a sublis, o si se tiene que hacer un ev para hacerlo. Si sublis_apply_lambda vale
true, significa que se ejecute la aplicacion.

sublis_apply_lambda

[Variable opcional]
Valor por defecto: false
Si vale true, las funciones subst y psubst puede sustituir una variable subindicada
f[x] por un n
umero simplemente utilizando el smbolo f.
Vease tambien subst.
(%i1) subst(100,g,g[x]+2);

subnumsimp

subst: cannot substitute 100 for operator g in expression g


x
-- an error. To debug this try: debugmode(true);
(%i2) subst(100,g,g[x]+2),subnumsimp:true;
(%o2)
102

subst (a, b, c )

[Funcion]
Sustituye a por b en c. El argumento b debe ser un atomo o una subexpresion
completa de c. Por ejemplo, x+y+z es una subexpresion completa de 2*(x+y+z)/w
mientras que x+y no lo es. Cuando b no cumple esta caracterstica, se puede utilizar
en algunos casos substpart o ratsubst (ver mas abajo). Alternativamente, si b no
es de la forma e/f entonces se puede usar subst (a*f, e, c), pero si b es de la forma
e^(1/f) se debe usar subst (a^f, e, c). La instruccion subst tambien reconoce x^y
en x^-y, de manera que subst (a, sqrt(x), 1/sqrt(x)) da 1/a. Los argumentos a
y b tambien pueden ser operadores de una expresion acotados por comillas dobles " o
nombres de funciones. Si se quiere sustituir la variable independiente en expresiones
con derivadas se debe utilizar la funcion at (ver mas abajo).
La funci
on subst es sin
onimo de substitute.
La llamada subst (eq_1, expr ) o subst ([eq_1, ..., eq_k ], expr ) estan permitidas. Las eq i son ecuaciones que indican las sustituciones a realizar. Para cada
ecuaci
on, el miembro izquierdo sera sustituido por la expresion del miembro derecho
en expr. Las ecuaciones se sustituyen secuencialmente de izquierda a derecha en expr.
Veanse las funciones sublis y psubst para sustituciones en paralelo.

132

Manual de Maxima

Si la variable exptsubst vale true se permiten ciertas sustituciones de exponentes;


por ejemplo, sustituir y por %e^x en %e^(a*x).
Si opsubst vale false, subst no intentara sustituir un operador de una expresion.
Por ejemplo, (opsubst: false, subst (x^2, r, r+r[0])) trabajara sin problemas.
Ejemplos:
(%i1) subst (a, x+y, x + (x+y)^2 + y);
2
(%o1)
y + x + a
(%i2) subst (-%i, %i, a + b*%i);
(%o2)
a - %i b
La sustituci
on se hace secuencialmente seg
un una lista de ecuaciones. Comparese con
la sustituci
on en paralelo.
(%i3) subst([a=b, b=c], a+b);
(%o3)
(%i4) sublis([a=b, b=c], a+b);
(%o4)

2 c
c + b

Para m
as ejemplos, ejec
utese example (subst).

substinpart (x, expr, n_1, . . . , n_k )

[Funcion]
Es similar a substinpart, pero trabaja con la representacion interna de expr.
Ejemplos:
(%i1) x . diff (f(x), x, 2);
2
d
(%o1)
x . (--- (f(x)))
2
dx
(%i2) substinpart (d^2, %, 2);
2
(%o2)
x . d
(%i3) substinpart (f1, f[1](x + 1), 0);
(%o3)
f1(x + 1)
Si el u
ltimo argumento pasado a la funcion part es una lista de ndices, se obtendr
a
la lista de subexpresiones correspondientes a cada uno de los ndices.
(%i1) part (x + y + z, [1, 3]);
(%o1)
z + x
La variable piece guarda el valor de la u
ltima expresion seleccionada al utilizar las
funciones part. El valor es asignado durante la ejecucion de la funcion y puede ser
utilizada tal como se muestra mas abajo. Si a partswitch se le asigna el valor true
entonces se devolver
a end cuando no existe la parte solicitada; con otro valor devuelve
un mensaje de error.
(%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
3
2
2
3
(%o1)
27 y + 54 x y + 36 x y + y + 8 x + x + 1

Captulo 8: Expresiones

133

(%i2) part (expr, 2, [1, 3]);


2
(%o2)
54 y
(%i3) sqrt (piece/54);
(%o3)
abs(y)
(%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
3
(%o4)
(3 y + 2 x) + y + x + 1
(%i5) expr: 1/x + y/x - 1/z;
1
y
1
(%o5)
- - + - + z
x
x
(%i6) substpart (xthru (piece), expr, [2, 3]);
y + 1
1
(%o6)
----- - x
z
Adem
as, d
andole a inflag el valor true y llamando a part o substpart es lo mismo
que invocar a inpart o substinpart.

substpart (x, expr, n_1, . . . , n_k )

[Funcion]
Sustituye por x la subexpresion que se obtiene de aplicar el resto de argumentos a
la funci
on part, devolviendo el nuevo valor de expr. x puede ser un operador que
sustituya otro operador de expr. En ciertos casos, x necesita estar entrecomillado por
comillas dobles ("); por ejemplo, de substpart ("+", a*b, 0) se obtiene b + a.

Ejemplo:
(%i1) 1/(x^2 + 2);
(%o1)

(%i2)
(%o2)

(%i3)
(%o3)
(%i4)
(%o4)

1
-----2
x + 2
substpart (3/2, %, 2, 1, 2);
1
-------3/2
x
+ 2
a*x + f(b, y);
a x + f(b, y)
substpart ("+", %, 1, 0);
x + f(b, y) + a

Adem
as, d
andole a inflag el valor true y llamando a part o substpart es lo mismo
que invocar a inpart o substinpart.

symbolp (expr )
Devuelve true si expr es un smbolo y false en caso contrario.
symbolp(x) equivale al predicado atom(x) and not numberp(x).
Vease tambien Identifiers.

[Funcion]
La llamada

134

Manual de Maxima

unorder ()

[Funcion]
Desactiva las asociaciones creadas por la u
ltima utilizacion de los comandos de ordenaci
on ordergreat y orderless, los cuales no pueden ser utilizados mas de una vez
sin invocar a unorder.
unorder no sustituye en expresiones los smbolos originales por los alias introducidos
~ 3 n de unorder los alias
por ordergreat y orderless. Es por ello que tras la ejecuciA
aparecen en expresiones anteriores.
Vease tambien ordergreat y orderless.
Ejemplos:
ordergreat(a) introduce un alias para el smbolo a, razon por la cual la diferencia
de %o2 y %o4 no se anula. unorder no restablece el smbolo a y el alias aparece en el
resultado %o7.
(%i1)
(%o1)
[]
(%i2) b*x+a^2;
2
(%o2)
b x + a
(%i3) ordergreat(a);
(%o3)
done
(%i4) b*x+a^2;
2
(%o4)
a + b x
(%i5) %th(1)-%th(3);
2
2
(%o5)
a - a
(%i6) unorder();
(%o6)
[a]
(%i7) %th(2);
2
2
(%o7)
_101a - a

verbify (f )
Devuelve la forma verbal del nombre de funcion f.
Veanse tambien verb, noun y nounify.
Ejemplos:
(%i1) verbify (foo);
(%o1)
foo
(%i2) :lisp $%
$FOO
(%i2) nounify (foo);
(%o2)
foo
(%i3) :lisp $%
%FOO

[Funcion]

Captulo 9: Simplificaci
on

135

9 Simplificaci
on
9.1 Introducci
on a la simplificaci
on
Tras la evaluaci
on de una expresion se procede a su simplificacion. Las funciones
matematicas que involucran c
alculos simbolicos y las expresiones con operadores
aritmeticos no son evaluadas, sino simplificadas, para lo cual Maxima las representa
internamente en forma nominal; de ah que el calculo numerico de una suma o de una
multiplicaci
on no se considera una evaluacion, sino una simplificacion. La evaluacion de
una expresi
on puede inhibirse con el operador de comilla simple () y su simplificacion se
puede controlar con el valor asignado a la variable opcional simp.
En el siguiente ejemplo, se evita la simplificacion con el operador de comilla simple,
siendo el resultado una expresi
on nominal. A continuacion, se inhibe la simplificacion tras
la evaluaci
on de la derivada, dejando sin reducir el resultado a 2*x.
(%i1) diff(x*x,x);
d
2
(%o1)
-- (x )
dx
(%i2) simp:false;
(%o2)
false
(%i3) diff(x*x,x);
(%o3)
1 x + 1 x
Para cada funci
on u operador matematico dispone Maxima de una rutina interna que
sera utilizada para su simplificaci
on siempre que se la encuentre en una expresion. Estas
rutinas implementan propiedades simetricas, valores especiales de las funciones y otras
propiedades y reglas. La gran cantidad de variables opcionales permiten mantener bajo
control la simplificaci
on de funciones y operadores.
Veamos un ejemplo. La simplificacion de la funcion exponencial exp se controla con
las siguientes variables opcionales: %enumer, %emode, %e_to_numlog, code, logsimp y
demoivre. En el primer caso la expresion con la funcion exponencial no se simplifica,
pero en el segundo se reduce a %i*%pi/2.
(%i1) exp(x+%i*%pi/2), %emode:false;
%i %pi
x + -----2
(%o1)
%e
(%i2) exp(x+%i*%pi/2), %emode:true;
x
(%o2)
%i %e
Junto con la simplificaci
on aislada de funciones y operadores que Maxima realiza de
forma autom
atica, existen tambien funciones como expand o radcan que realizan sobre las
expresiones simplificaciones especiales. Sigue un ejemplo:
(%i1) (log(x+x^2)-log(x))^a/log(1+x)^(a/2);
2
a
(log(x + x) - log(x))

136

Manual de Maxima

(%o1)

----------------------a/2
log(x + 1)

(%i2) radcan(%);
a/2
(%o2)
log(x + 1)
A un operador o funci
on se le pueden asignar propiedades tales como la linealidad, la
simetra u otras. Maxima tiene en cuenta estas propiedades durante la simplificacion. Por
ejemplo, la instrucci
on declare(f, oddfun) declara la funcion como impar, con lo que
Maxima sabr
a que las formas f(-x) y -f(x) son equivalentes, llevando a cabo la reduccion
oportuna.
Las siguientes propiedades est
an en la lista opproperties y controlan la simplificacion
de funciones y operadores:
additive
lassociative
oddfun
antisymmetric
linear
outative
commutative
multiplicative
rassociative
evenfun
nary
symmetric
Tanto las propiedades como los hechos (o hipotesis) establecidos por el usuario dentro de
un contexto influyen sobre el proceso de simplificacion. Para mas detalles vease el captulo
sobre la base de datos de Maxima.
La funci
on seno reduce los m
ultiplos enteros de %pi al valor cero. En este ejemplo se
muestra c
omo al dotar al smbolo n de la propiedad de ser entero, la funcion se simplifica
de la forma apropiada.
(%i1) sin(n*%pi);
(%o1)
sin(%pi n)
(%i2) declare(n, integer);
(%o2)
done
(%i3) sin(n*%pi);
(%o3)
0
Si las tecnicas anteriores no devuelven el resultado esperado por el usuario, este puede
extender a voluntad las reglas que pueda aplicar Maxima; para mas informacion al respecto,
vease el captulo dedicado a las reglas y patrones.

9.2 Funciones y variables para simplificaci


on
[Propiedad]
Si declare(f,additive) ha sido ejecutado, entonces:
(1) Si f es univariado, cada vez que el simplificador encuentre f aplicada a una suma,
f ser
a distribuida bajo esta suma. Por ejemplo, f(x+y) se simplificara a f(x)+f(y).
(2) Si f es una funci
on de 2 o mas argumentos, aditivamente es definida como
aditiva en el primer argumento de f, como en el caso de sum o integrate. Por
ejemplo, f(h(x)+g(x),x) se simplificara a f(h(x),x)+f(g(x),x). Esta simplificaci
on no ocurre cuando f se aplica a expresiones de la forma sum(x[i],i,lowerlimit,upper-limit).
Ejemplo:

additive

Captulo 9: Simplificaci
on

137

(%i1) F3 (a + b + c);
(%o1)
F3(c + b + a)
(%i2) declare (F3, additive);
(%o2)
done
(%i3) F3 (a + b + c);
(%o3)
F3(c) + F3(b) + F3(a)
[Propiedad]
Si declare(h,antisymmetric) es ejecutado, esto dice al simplificador que h es antisimetrico. E.g. h(x,z,y) sera simplificado a -h(x,y,z). Que es, el producto de
(-1)^n por el resultado dado por symmetric o commutative, donde n es el n
umero de
intercambios necesarios de dos argumentos para convertirle a esta forma.

antisymmetric

Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

S (b, a);
S(b, a)
declare (S, symmetric);
done
S (b, a);
S(a, b)
S (a, c, e, d, b);
S(a, b, c, d, e)
T (b, a);
T(b, a)
declare (T, antisymmetric);
done
T (b, a);
- T(a, b)
T (a, c, e, d, b);
T(a, b, c, d, e)

combine (expr )

[Funcion]
Simplifica la suma expr combinando terminos de con igual denominador reduciendolos
a un u
nico termino.
[Propiedad]
Si declare(h,commutative) es ejecutado, le dice al simplificador que h es una funcion
conmutaiva. Por ejemplo, h(x,z,y) se simplificara a h(x,y,z). Esto es lo mismo
que symmetric.

commutative

demoivre (expr )
demoivre

[Funcion]
[Variable opcional]
La funci
on demoivre (expr) convierte una expresion sin modificar la variable global
demoivre.

Cuando demoivre vale true, los exponenciales complejos se convierten en expresiones


equivalentes pero en terminos de las funciones trigonometricas: exp (a + b*%i) se
reduce a %e^a * (cos(b) + %i*sin(b)) si b no contiene a %i. Las expresiones a y b
no se expanden.

138

Manual de Maxima

El valor por defecto de demoivre es false.


La funci
on exponentialize convierte funciones trigonometricas e hiperbolicas a la
forma exponencial, por lo que demoivre y exponentialize no pueden valer true al
mismo tiempo.

distrib (expr )

[Funcion]
Distribuye sumas sobre productos. Difiere de expand en que trabaja solo al nivel
superior de una expresi
on, siendo mas rapida que expand. Difiere de multthru en
que expande todas las sumas del nivel superior.
Ejemplos:
(%i1) distrib ((a+b) * (c+d));
(%o1)
b d + a d + b c + a c
(%i2) multthru ((a+b) * (c+d));
(%o2)
(b + a) d + (b + a) c
(%i3) distrib (1/((a+b) * (c+d)));
1
(%o3)
--------------(b + a) (d + c)
(%i4) expand (1/((a+b) * (c+d)), 1, 0);
1
(%o4)
--------------------b d + a d + b c + a c
[Variable opcional]
Valor por defecto: true
distribute_over controla la distribucion de funciones sobre estructuras como listas,
matrices y ecuaciones. Actualmente, no todas las funciones de Maxima tienen esta
propiedad. Es posible consultar si una funcion tiene esta propiedad con la instruccion
properties.
La propiedad distributiva se desactiva asignandole a distribute_over el valor false.
Ejemplos:
La funci
on sin se distribuye sobre una lista:
(%i1) sin([x,1,1.0]);
(%o1)
[sin(x), sin(1), .8414709848078965]
mod es una funci
on de dos argumentos que se distribuye sobre listas. La distribucion
sobre listas anidadas tambien es posible.
(%i2) mod([x,11,2*a],10);
(%o2)
[mod(x, 10), 1, 2 mod(a, 5)]
(%i3) mod([[x,y,z],11,2*a],10);
(%o3)
[[mod(x, 10), mod(y, 10), mod(z, 10)], 1, 2 mod(a, 5)]
Distribuci
on de la funci
on floor sobre una matriz y una ecuacion.
(%i4) floor(matrix([a,b],[c,d]));
[ floor(a) floor(b) ]
(%o4)
[
]
[ floor(c) floor(d) ]

distribute_over

Captulo 9: Simplificaci
on

139

(%i5) floor(a=b);
(%o5)
floor(a) = floor(b)
Funciones con m
as de un argumento se distribuyen sobre cualquiera de sus argumentos, o sobre todos ellos.
(%i6) expintegral_e([1,2],[x,y]);
(%o6) [[expintegral_e(1, x), expintegral_e(1, y)],
[expintegral_e(2, x), expintegral_e(2, y)]]
Comprueba si una funci
on tiene la propiedad distribute_over:
(%i7) properties(abs);
(%o7) [integral, distributes over bags, noun, rule, gradef]
[Variable opcional]
Valor por defecto: real
Si domain vale complex, sqrt (x^2) permanecera como sqrt (x^2) en lugar de devolver abs(x).

domain

[Propiedad]
[Propiedad]
declare(f, evenfun o declare(f, oddfun) indican a Maxima que reconozca la
funci
on f como par o impar, respectivamente.
Ejemplos:
(%i1) o (- x) + o (x);
(%o1)
o(x) + o(- x)
(%i2) declare (o, oddfun);
(%o2)
done
(%i3) o (- x) + o (x);
(%o3)
0
(%i4) e (- x) - e (x);
(%o4)
e(- x) - e(x)
(%i5) declare (e, evenfun);
(%o5)
done
(%i6) e (- x) - e (x);
(%o6)
0

evenfun
oddfun

expand (expr )
expand (expr, p, n )

[Funcion]
[Funcion]
Expande la expresi
on expr. Los productos de sumas y de sumas con exponentes se
multiplican, los numeradores de las expresiones racionales que son sumas se separan
en sus respectivos terminos, y las multiplicaciones (tanto las que son conmutativas
como las que no) se distribuyen sobre las sumas en todos los niveles de expr.
En el caso de los polinomios es mas aconsejable utilizar ratexpand, que utiliza un
algoritmo m
as eficiente.
Las variables maxnegex y maxposex controlan los maximos exponentes negativos y
positivos que se van a expandir.
La llamada expand (expr, p, n ) expande expr asignando a maxposex el valor p y a
maxnegex el n. Esto es u
til para expandir solo parte de la expresion.

140

Manual de Maxima

La variable expon guarda el mayor exponente negativo que sera expandido


autom
aticamente, independientemente de expand. Por ejemplo, si expon vale 4
entonces (x+1)^(-5) no se expandira automaticamente.
La variable expop guarda el mayor exponente positivo que sera expandido
autom
aticamente. As, (x+1)^3 se expandira automaticamente solo si expop es
mayor o igual que 3. Si se quiere expandir (x+1)^n, siendo n mayor que expop,
entonces expand ((x+1)^n) se desarrollara solo si maxposex no es menor que n.
expand(expr, 0, 0) provoca que se vuelva a simplificar expr. expr no se vuelve a
evaluar. A diferencia de ev(expr, noeval), se elimina la representacion canonica de
la expresi
on. Vease tambien ev.
La variable expand utilizada con ev provocara una expansion.
El fichero share/simplification/facexp.mac contiene algunas funciones
relacionadas con expand (en concreto, facsum, factorfacsum y collectterms,
que se cargan autom
aticamente) y variables (nextlayerfactor y facsum_combine)
que permiten al usuario estructurar las expresiones controlando la expansion. En
simplification/facexp.usg se pueden encontrar breves descripciones de estas
funciones. Se acceder
a a una demostracion con la instruccion demo("facexp").
Ejemplo:
(%i1) expr:(x+1)^2*(y+1)^3;
2
3
(%o1)
(x + 1) (y + 1)
(%i2) expand(expr);
2 3
3
3
2 2
2
2
2
(%o2) x y + 2 x y + y + 3 x y + 6 x y + 3 y + 3 x y
2
+ 6 x y + 3 y + x + 2 x + 1
(%i3) expand(expr,2);
(%o3)

2
3
3
3
x (y + 1) + 2 x (y + 1) + (y + 1)

(%i4) expr:(x+1)^-2*(y+1)^3;
3
(%o4)

(y + 1)
-------2
(x + 1)

(%i5) expand(expr);
3
2
y
3 y
3 y
1
(%o5)
------------ + ------------ + ------------ + -----------2
2
2
2
x + 2 x + 1
x + 2 x + 1
x + 2 x + 1
x + 2 x + 1
(%i6) expand(expr,2,2);

Captulo 9: Simplificaci
on

141

3
(y + 1)
-----------2
x + 2 x + 1

(%o6)

Vuelve a simplificar una expresion pero sin expansion:


(%i7) expr:(1+x)^2*sin(x);
(%o7)
(%i8) exponentialize:true;
(%o8)
(%i9) expand(expr,0,0);

(%o9)

2
(x + 1) sin(x)
true

2
%i x
- %i x
%i (x + 1) (%e
- %e
)
- ------------------------------2

expandwrt (expr, x_1, ..., x_n )

[Funcion]
Expande la expresi
on expr con respecto a las variables x 1, ..., x n. Todos los productos que contengan a las variables aparecen explcitamente. El resultado que se
obtenga no tendra productos de sumas de expresiones que contengan a las variables.
Los argumentos x 1, ..., x n pueden ser variables, operadores o expresiones.
Por defecto, no se expanden los denominadores, pero esto puede cambiarse mediante
el uso de la variable expandwrt_denom.
Esta funci
on se carga autom
aticamente de simplification/stopex.mac.

expandwrt_denom

[Variable opcional]

Valor por defecto: false


La variable expandwrt_denom controla el tratamiento de las expresiones racinales por
parte de expandwrt. Si vale true, se expandiran tanto el numerador como el denominador de la expresi
on respecto de los argumentos de expandwrt, pero si expandwrt_
denom vale false, s
olo se expandira el numerador.

expandwrt_factored (expr, x_1, ..., x_n )

[Funcion]
Es similar a expandwrt, pero trata a las expresiones que son productos de una forma
algo diferente. La funci
on expandwrt_factored expande solo aquellos factores de
expr que contienen a las variables x 1, ..., x n.

Esta funci
on se carga autom
aticamente de simplification/stopex.mac.

expon

[Variable opcional]

Valor por defecto: 0


La variable expon guarda el mayor exponente negativo que sera expandido
autom
aticamente, independientemente de expand. Por ejemplo, si expon vale 4
entonces (x+1)^(-5) no se expandira automaticamente.

142

Manual de Maxima

exponentialize (expr )
exponentialize

[Funcion]
[Variable opcional]
La funci
on exponentialize (expr) convierte las funciones trigonometricas e
hiperb
olicas de expr a exponenciales, sin alterar la variable global exponentialize.
Cuando la variable exponentialize vale true, todas las funciones trigonometricas e
hiperb
olicas se convierten a forma exponencial. El valor por defecto es false.
La funci
on demoivre convierte funciones trigonometricas e hiperbolicas a la forma
exponencial, por lo que demoivre y exponentialize no pueden valer true al mismo
tiempo.
[Variable opcional]
Valor por defecto: 0
La variable expop guarda el mayor exponente positivo que sera expandido
autom
aticamente. As, (x+1)^3 se expandira automaticamente solo si expop es
mayor o igual que 3. Si se quiere expandir (x+1)^n, siendo n mayor que expop,
entonces expand ((x+1)^n) se desarrollara solo si maxposex no es menor que n.

expop

[Propiedad]
La instrucci
on declare (g, lassociative) le indica al simplificador de Maxima que
g es asociativo por la izquierda. Por ejemplo, g (g (a, b), g (c, d))se reduce a g
(g (g (a, b), c), d).

lassociative

[Propiedad]
Es una de las propiedades de operadores de Maxima. Si la funcion univariante f
se declara lineal, la expansi
on de f(x + y) produce f(x) + f(y), f(a*x) produce
a*f(x) si a es una constante. Si la funcion tiene dos o mas argumentos, la linealidad
se interpreta como la de sum o integrate, esto es, f (a*x + b, x) produce a*f(x,x)
+ b*f(1,x) si a y b no contienen a x.
linear equivale a additive y outative. Vease tambien opproperties.
Ejemplo:
(%i1) sum (F(k) + G(k), k, 1, inf);
inf
====
\
(%o1)
>
(G(k) + F(k))
/
====
k = 1
(%i2) declare (nounify (sum), linear);
(%o2)
done
(%i3) sum (F(k) + G(k), k, 1, inf);
inf
inf
====
====
\
\
(%o3)
>
G(k) + >
F(k)
/
/
====
====
k = 1
k = 1

linear

Captulo 9: Simplificaci
on

maxnegex

143

[Variable opcional]

Valor por defecto: 1000


La variable maxnegex es el mayor exponente negativo que expandira la funcion
expand. Vease tambien maxposex.

maxposex

[Variable opcional]

Valor por defecto: 1000


La variable maxposex es el mayor exponenteque expandira la funcion expand. Vease
tambien maxnegex.
[Propiedad]
La instrucci
on declare (f, multiplicative) indica al simplificador de Maxima que
f is multiplicativa.
1. Si f es univariante, cada vez que el simplificador encuentre a f aplicad a un
producto, f se distribuira sobre ese producto. Por ejemplo, f(x*y) se reducira
a f(x)*f(y).
2. Si f es una funci
on de 2 o mas argumentos, la multiplicabilidad se define como
multiplicabilidad para el primer argumento de f, de modo que f (g(x) * h(x),
x) se reducira a f (g(x) ,x) * f (h(x), x).

multiplicative

Esta transformaci
on no se realiza cuando f se aplica a expresiones de la forma product
(x[i], i, m, n).
Ejemplo:
(%i1) F2 (a * b * c);
(%o1)
F2(a b c)
(%i2) declare (F2, multiplicative);
(%o2)
done
(%i3) F2 (a * b * c);
(%o3)
F2(a) F2(b) F2(c)

multthru (expr )
multthru (expr_1, expr_2 )

[Funcion]
[Funcion]
Multiplica un factor (que debera ser una suma) de expr por los otros factores de expr.
Esto es, expr es f_1 f_2 ... f_n , donde al menos un factor, por ejemplo f i, es una
suma de terminos. Cada termino en esta suma se multiplica por los otros factores
del producto, excepto el propio f i. La funcion multthru no expande sumas elevadas
a exponentes, siendo el metodo mas rapido para distribuir productos (sean o no
conmutativos) sobre sumas. Puesto que los cocientes se representan como productos,
puede utilizarsemultthru para dividir sumas entre productos.
La llamada multthru (expr_1, expr_2 ) multiplica cada termino de expr 2 (que
debera ser una suma o una ecuacion) por expr 1. Si expr 1 no es ella misma una
suma, entonces la llamada es equivalente a multthru (expr_1 *expr_2 ).
(%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
1
x
f(x)
(%o1)
- ----- + -------- - -------x - y
2
3
(x - y)
(x - y)

144

Manual de Maxima

(%i2) multthru ((x-y)^3, %);


2
(%o2)
- (x - y) + x (x - y) - f(x)
(%i3) ratexpand (%);
2
(%o3)
- y + x y - f(x)
(%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
10 2
2 2
(b + a)
s + 2 a b s + a b
(%o4)
-----------------------------2
a b s
(%i5) multthru (%); /* note that this does not expand (b+a)^10 */
10
2
a b
(b + a)
(%o5)
- + --- + --------s
2
a b
s
(%i6) multthru (a.(b+c.(d+e)+f));
(%o6)
a . f + a . c . (e + d) + a . b
(%i7) expand (a.(b+c.(d+e)+f));
(%o7)
a . f + a . c . e + a . c . d + a . b

nary

[Propiedad]
declare(f, nary) le indica a Maxima que reconozca la funcion f como n-aria.
La declaraci
on nary no equivale a invocar la funcion function_nary, nary. El u
nico
efecto de declare(f, nary) es indicar al simplificador de Maxima que aplane expresiones anidadas, como simplificar foo(x, foo(y, z)) a foo(x, y, z). Vease tambien
declare.
Ejemplo:
(%i1) H (H (a, b), H (c, H (d, e)));
(%o1)
H(H(a, b), H(c, H(d, e)))
(%i2) declare (H, nary);
(%o2)
done
(%i3) H (H (a, b), H (c, H (d, e)));
(%o3)
H(a, b, c, d, e)

negdistrib

[Variable opcional]

Valor por defecto: true


Si negdistrib vale true, -1 se distribuye sobre una expresion. Por ejemplo, -(x + y)
se transforma en - y - x. D
andole el valor false se mostrara - (x + y) tal cual. Esto
puede ser u
til, pero tambien peligroso; al igual que el indicador simp, no conviene
asignarle el valor false.
[Variable del sistema]
La variable opproperties es la lista con las propiedades especiales de los operadores
reconocidas por el simplificador de Maxima: linear, additive, multiplicative,

opproperties

Captulo 9: Simplificaci
on

145

outative, evenfun, oddfun, commutative, symmetric, antisymmetric, nary,


lassociative, rassociative.
[Propiedad]
La instrucci
on declare (f, outative) le indica al simplificador de Maxima que los
factores constantes del argumento de la funcion f pueden ser extrados.

outative

1. Si f es univariante, cada vez que el simplificador se encuentra con f aplicada a


un producto, este ser
a particionado en factores que son constantes y factores que
no lo son, siendo entonces los constantes extrados de la funcion. Por ejemplo,
f(a*x) se reducir
a a a*f(x) siendo a una constante. Las constantes no atomicas
no ser
an extradas.
2. Si f es una funci
on de 2 o mas argumentos, esta propiedad se define como en
sum o integrate, esto es, f (a*g(x), x) se reducira a a * f(g(x), x) si a no
contiene a x.
Las funciones sum, integrate y limit han sido todas declaradas con la propiedad
outative.
Ejemplo:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

F1 (100 * x);
F1(100 x)
declare (F1, outative);
done
F1 (100 * x);
100 F1(x)
declare (zz, constant);
done
F1 (zz * y);
zz F1(y)

radcan (expr )

[Funcion]
Simplifica la expresi
on expr, que puede contener logaritmos, exponenciales y radicales, convirtiendola a una forma canonica, lo que significa que todas las expresiones
funcionalmente equivalentes se reducen a una forma u
nica. Ciertas expresiones, sin
embargo, son reducidas por radcan a una forma regular, lo que significa que dos expresiones equivalentes no tienen necesariamente el mismo aspecto, pero su diferencia
puede ser reducida por radcan a cero.
Con algunas expresiones radcan puede consunir mucho tiempo. Este es el coste por
explorar ciertas relaciones entre las componentes de la expresion para simplificaciones
basadas en factorizaciones y expansiones parciales de fracciones de exponentes.
Ejemplos:
(%i1) radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
a/2
(%o1)
log(x + 1)
(%i2) radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
(%o2)
2

146

Manual de Maxima

(%i3) radcan((%e^x-1)/(1+%e^(x/2)));
(%o3)

x/2
%e
- 1

radexpand

[Variable opcional]

Valor por defecto: true


La variable radexpand controla algunas simplificaciones de radicales.
Si radexpand vale all, las races n-esimas de los factores de un producto que sean
potencias de n se extraen del smbolo radical. Por ejemplo, si radexpand vale all,
sqrt (16*x^2) se reduce a 4*x.
M
as concretamente, considerese sqrt (x^2).
Si radexpand vale all o se ha ejecutado assume (x > 0), sqrt(x^2) se reduce a
x.
Si radexpand vale true y domain es real (su valor por defecto), sqrt(x^2) se
reduce a abs(x).
Si radexpand vale false o radexpand vale true y domain es complex, sqrt(x^2)
no se simplifica.
Notese que domain s
olo se tiene en cuenta si radexpand vale true.
[Propiedad]
La instrucci
on declare (g, rassociative) le indica al simplificador de Maxima que
g es asociativa por la derecha. Por ejemplo, g(g(a, b), g(c, d)) se reduce a g(a,
g(b, g(c, d))).

rassociative

scsimp (expr, rule_1, ..., rule_n )

[Funcion]
Es el "Sequential Comparative Simplification" (metodo debido a Stoute). La funcion
scsimp intenta simplificar expr de acuerdo con las reglas rule 1, ..., rule n. Si se
obtiene una expresi
on m
as peque~
na, el proceso se repite. En caso contrario, despues
de que se hayan intentado todas las simplificaciones, devuelve la respuesta original.
La instrucci
on example (scsimp) muestra algunos ejemplos.
[Variable opcional]

simp
Valor por defecto: true

La variable simp activa y desactiva la simplificacion. La simplificacion esta activada


por defecto. La variable simp tambien es reconocida por la funcion ev como variable
de entorno. Vease tambien ev.
Cuando simp se utiliza en un entorno ev con el valor false, la simplificacion se
evita s
olo durante la fase de evaluacion de una expresion. La variable no evita la
simplificaci
on que sigue a la fase de evaluacion.
Ejemplos:
La simplificaci
on se suspende globalmente. La expresion sin(1.0) no se simplifica a
su valor numerico. La variable de entorno simp conmuta el estado de la simplificacion.

Captulo 9: Simplificaci
on

147

(%i1) simp:false;
(%o1)
false
(%i2) sin(1.0);
(%o2)
sin(1.0)
(%i3) sin(1.0),simp;
(%o3)
.8414709848078965
La simplificaci
on se vuelve a activar. La variable de entorno simp no puede suprimir
totalmente la simplificaci
on. El resultado muestra una expresion simplificada, pero
la variable x guarda como valor una expresion sin simplificar, porque la asignacion se
realiz
o durante la fase de evaluacion de la expresion.
(%i4) simp:true;
(%o4)
true
(%i5) x:sin(1.0),simp:false;
(%o5)
.8414709848078965
(%i6) :lisp $X
((%SIN) 1.0)
[Propiedad]
La instrucci
on declare (h, symmetric) le indica al simplificador de Maxima que h
es una funci
on simetrica. Por ejemplo, h (x, z, y) se reduce a h (x, y, z).
El nombre commutative es sinonimo de symmetric.

symmetric

xthru (expr )

[Funcion]
Combina todos los terminos de expr (la cual debe ser una suma) sobre un com
un
denominador sin expandir productos ni sumas elevadas a exponentes al modo que
lo hace ratsimp. La funci
on xthru cancela factores comunes en el numerador y
denominador de expresiones racionales, pero solo si los factores son explcitos.
En ocasiones puede ser u
til el uso de xthru antes de la llamada a ratsimp a fin de
cancelar factores explcitos del maximo com
un divisor del numerador y denominador
y as simplificar la expresi
on a la que se va a aplicar ratsimp.
(%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
xthru (%);
20
1
(x + 2)
- 2 y
x
(%o1)
--------- + --------------- - --------19
20
20
(y + x)
(y + x)
(y + x)

Captulo 10: Funciones matem


aticas

149

10 Funciones matem
aticas
10.1 Funciones para los n
umeros
abs (z )

[Funcion]
La funci
on abs representa el valor absoluto y se puede aplicar tanto a argumentos
numericos como simb
olicos. Si el argumento z es un n
umero real o complejo, abs
devuelve el valor absoluto de z. Si es posible, las expresiones simbolicas que utilizan
la funci
on del valor absoluto tambien se simplifican.
Maxima puede derivar, integrar y calcular lmites de expresiones que contengan a
abs. El paquete abs_integrate extiende las capacidades de Maxima para calcular
integrales que contengan llamadas a abs. Vease (%i12) en el ejemplo de mas abajo.
Cuando se aplica a una lista o matriz, abs se distribuye automaticamente sobre sus elementos. De forma similar, tambien se distribuye sobre los dos miembros de una igualdad. Para cambiar este comportamiento por defecto, vease la variable distribute_
over.
Ejemplos:
Calculo del valor absoluto de n
umeros reales y complejos, incluyendo constantes
numericas e infinitos. El primer ejemplo muestra como abs se distribuye sobre los
elementos de una lista.
(%i1) abs([-4, 0, 1, 1+%i]);
(%o1)
[4, 0, 1, sqrt(2)]
(%i2) abs((1+%i)*(1-%i));
(%o2)
(%i3) abs(%e+%i);

2
(%o3)
sqrt(%e + 1)
(%i4) abs([inf, infinity, minf]);
(%o4)
[inf, inf, inf]
Simplificaci
on de expresiones que contienen abs:
(%i5) abs(x^2);
2
(%o5)
x
(%i6) abs(x^3);
2
(%o6)
x abs(x)
(%i7) abs(abs(x));
(%o7)
abs(x)
(%i8) abs(conjugate(x));
(%o8)
abs(x)
Integrando y derivando con la funcion abs. Notese que se pueden calcular mas integrales que involucren la funcion abs si se carga el paquete abs_integrate. El u
ltimo
ejemplo muestra la transformada de Laplace de abs. Vease laplace.

150

Manual de Maxima

(%i9) diff(x*abs(x),x),expand;
(%o9)
2 abs(x)
(%i10) integrate(abs(x),x);
(%o10)

x abs(x)
-------2

(%i11) integrate(x*abs(x),x);
/
[
(%o11)
I x abs(x) dx
]
/
(%i12) load(abs_integrate)$
(%i13) integrate(x*abs(x),x);
2
3
x abs(x)
x signum(x)
(%o13)
--------- - -----------2
6
(%i14) integrate(abs(x),x,-2,%pi);
2
%pi
(%o14)
---- + 2
2
(%i15) laplace(abs(x),x,s);
(%o15)

ceiling (x )

1
-2
s

[Funcion]
Si x es un n
umero real, devuelve el menor entero mayor o igual que x.
Si x es una expresi
on constante (por ejemplo, 10 * %pi), ceiling eval
ua x haciendo uso de n
umeros grandes en coma flotante (big floats), aplicando a continuacion
ceiling al n
umero decimal obtenido. Puesto que ceiling hace evaluaciones en coma
flotante, es posible, pero improbable, que esta funcion devuelva un valor erroneo para
entradas constantes. Para evitar estos errores, la evaluacion en punto flotante se lleva
a cabo utilizando tres valores para fpprec.
Para argumentos no constantes, ceiling intenta devolver un valor simplificado. Aqu
se presentan algunos ejemplos sobre las simplificaciones que ceiling es capaz de
hacer:
(%i1) ceiling (ceiling (x));
(%o1)
ceiling(x)

Captulo 10: Funciones matem


aticas

151

(%i2) ceiling (floor (x));


(%o2)
floor(x)
(%i3) declare (n, integer)$
(%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
(%o4)
[n, abs(n), max(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) ceiling (x);
(%o6)
1
(%i7) tex (ceiling (a));
$$\left \lceil a \right \rceil$$
(%o7)
false
La funci
on ceiling no se extiende automaticamente a los elementos de listas y matrices. Por u
ltimo, para todos los argumentos que tengan una forma compleja, ceiling
devuelve una forma nominal.
Si el rango de una funci
on es subconjunto de los n
umeros enteros, entonces puede
ser declarada como integervalued. Tanto ceiling como floor son funciones que
hacen uso de esta informaci
on; por ejemplo:
(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)
f(x)
(%i3) ceiling (f(x) - 1);
(%o3)
f(x) - 1
Ejemplo de uso:
(%i1) unitfrac(r) := block([uf : [], q],
if not(ratnump(r)) then
error("unitfrac: argument must be a rational number"),
while r # 0 do (
uf : cons(q : 1/ceiling(1/r), uf),
r : r - q),
reverse(uf))$
(%i2) unitfrac (9/10);
1 1 1
(%o2)
[-, -, --]
2 3 15
(%i3) apply ("+", %);
9
(%o3)
-10
(%i4) unitfrac (-9/10);
1
(%o4)
[- 1, --]
10
(%i5) apply ("+", %);
9
(%o5)
- -10

152

Manual de Maxima

(%i6) unitfrac (36/37);


(%o6)

1 1 1 1
1
[-, -, -, --, ----]
2 3 8 69 6808

(%i7) apply ("+", %);


(%o7)

36
-37

entier (x )

[Funcion]
Devuelve el mayor entero menor o igual a x, siendo x numerico. La funcion fix (como
en fixnum) es un sin
onimo, de modo que fix(x ) hace justamente lo mismo.

floor (x )

[Funcion]
Si x es un n
umero real, devuelve el mayor entero menor o igual que x.
Si x es una expresi
on constante (por ejemplo, 10 * %pi), floor eval
ua x haciendo uso
de n
umeros grandes en coma flotante (big floats), aplicando a continuacion floor al
n
umero decimal obtenido. Puesto que floor hace evaluaciones en coma flotante, es
posible, pero improbable, que esta funcion devuelva un valor erroneo para entradas
constantes. Para evitar estos errores, la evaluacion en punto flotante se lleva a cabo
utilizando tres valores para fpprec.
Para argumentos no constantes, floor intenta devolver un valor simplificado. Aqu
se presentan algunos ejemplos sobre las simplificaciones que floor es capaz de hacer:
(%i1) floor (ceiling (x));
(%o1)
ceiling(x)
(%i2) floor (floor (x));
(%o2)
floor(x)
(%i3) declare (n, integer)$
(%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
(%o4)
[n, abs(n), min(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) floor (x);
(%o6)
0
(%i7) tex (floor (a));
$$\left \lfloor a \right \rfloor$$
(%o7)
false
La funci
on floor no se extiende automaticamente a los elementos de listas y matrices. Por u
ltimo, para todos los argumentos que tengan una forma compleja, floor
devuelve una forma nominal.
Si el rango de una funci
on es subconjunto de los n
umeros enteros, entonces puede
ser declarada como integervalued. Tanto ceiling como floor son funciones que
hacen uso de esta informaci
on; por ejemplo:
(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)
f(x)
(%i3) ceiling (f(x) - 1);
(%o3)
f(x) - 1

Captulo 10: Funciones matem


aticas

fix (x )

153

[Funcion]

Es un sin
onimo de entier (x ).

lmax (L )

[Funcion]
Si L es una lista o conjunto, devuelve apply (max, args (L )). Si L no es una lista
o conjunto, enva un mensaje de error.

lmin (L )

[Funcion]
Si L es una lista o conjunto, devuelve apply (min, args (L )). Si L no es una lista
o conjunto, enva un mensaje de error.

max (x_1, ..., x_n )

[Funcion]
Devuelve un valor simplificado de la mayor de las expresiones desde x 1 hasta x n.
Si get (trylevel, maxmin) es 2 o mas, max aplica la simplificacion max (e, -e) -->
|e|. Si get (trylevel, maxmin) es 3 o mas, max intenta eliminar las expresiones
que esten entre otros 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).

min (x_1, ..., x_n )

[Funcion]
Devuelve un valor simplificado de la menor de las expresiones desde x 1 hasta x n.
Si get (trylevel, maxmin) es 2 o mas, min aplica la simplificacion min (e, -e) -->
|e|. Si get (trylevel, maxmin) es 3 o mas, min intenta eliminar las expresiones que
esten entre otros dos de los argumentos dados; por ejemplo, min (x, 2*x, 3*x) -->
min (x, 3*x). Para asignar el valor 2 a trylevel se puede hacer put (trylevel,
2, maxmin).

round (x )

[Funcion]
Si x es un n
umero real, la funcion devuelve el entero mas proximo a x. Los m
ultiplos
de 1/2 se redondean al entero par mas proximo. La evaluacion de x es similar a floor
y ceiling.

signum (x )

[Funcion]
Tanto sea x real o complejo, la funcion signum devuelve 0 si x es cero. Para un valor
no nulo de x, la funci
on devuelve x/abs(x).

Para valores no numericos de x, Maxima intenta determinar el signo del argumento.


Cuando es negativo, cero o positivo, signum devuelve -1, 0 o 1, respectivamente. En
caso de no poder determinarse, signum devuelve una forma simplificada equivalente.
Estas simplificaciones incluyen la transformacion de signum(-x) en -signum(x) y la
de signum(x*y) en signum(x) * signum(y).
La funci
on signum es distributiva respecto de listas, matrices o ecuaciones. Vease
distribute_over.

10.2 Funciones para los n


umeros complejos
cabs (expr )

[Funcion]
Calcula el valor absoluto de una expresion que representa a un n
umero complejo. Al
contrario que abs, la funci
on cabs siempre descompone su argumento en sus partes

154

Manual de Maxima

real e imaginaria. Si x e y representan variables o expresiones reales, la funcion cabs


calcula el valor absoluto de x + %i*y como
2
2
sqrt(y + x )
La funci
on cabs puede utilizar propiedades como la simetra de funciones complejas
para calcular el valor absoluto de una expresion.
cabs no es una funci
on apropiada para calculos simbolicos; en tales casos, que incluyen
la integraci
on, diferenciaci
on y lmites que contienen valores absolutos, es mejor utilizar abs.
El resultado devuelto por cabs puede incluir la funcion de valor absoluto, abs, y el
arco tangente, atan2.
Cuando se aplica a una lista o matriz, cabs automaticamente se distribuye sobre sus
elementos. Tambien se distribuye sobre los dos miembros de una igualdad.
Para otras formas de operar con n
umeros complejos, veanse las funciones rectform,
realpart, imagpart, carg, conjugate y polarform.
Ejemplos:
Ejemplos con sqrt and sin:
(%i1) cabs(sqrt(1+%i*x));
2
1/4
(%o1)
(x + 1)
(%i2) cabs(sin(x+%i*y));
2
2
2
2
(%o2)
sqrt(cos (x) sinh (y) + sin (x) cosh (y))
La simetra especular de la funcion de error erf se utiliza para calcular el valor
absoluto del argumento complejo:
(%i3) cabs(erf(x+%i*y));
2
(erf(%i y + x) - erf(%i y - x))
(%o3) sqrt(-------------------------------4
2
(erf(%i y + x) + erf(%i y - x))
- --------------------------------)
4
Dado que Maxima reconoce algunas identidades complejas de las funciones de Bessel,
le permite calcular su valor absoluto cuando tiene argumentos complejos. Un ejemplo
para bessel_j:
(%i4) cabs(bessel_j(1,%i));
(%o4)
abs(bessel_j(1, %i))

carg (z )

[Funcion]
Devuelve el argumento complejo de z. El argumento complejo es un angulo theta en
(-%pi, %pi] tal que r exp (theta %i) = z donde r es la magnitud de z.
La funci
on carg es computacional, no simplificativa.

Captulo 10: Funciones matem


aticas

155

Veanse tambien abs (m


odulo complejo), polarform, rectform, realpart y
imagpart.
Ejemplos:
(%i1) carg (1);
(%o1)
(%i2) carg (1 + %i);

0
%pi
--4

(%o2)

(%i3) carg (exp (%i));


(%o3)
1
(%i4) carg (exp (%pi * %i));
(%o4)
%pi
(%i5) carg (exp (3/2 * %pi * %i));
%pi
(%o5)
- --2
(%i6) carg (17 * exp (2 * %i));
(%o6)
2

conjugate (x )

[Funcion]

Devuelve el conjugado complejo de x.


(%i1) declare ([aa, bb], real, cc, complex, ii, imaginary);
(%o1)
done
(%i2) conjugate (aa + bb*%i);
(%o2)
(%i3) conjugate (cc);

aa - %i bb

(%o3)
(%i4) conjugate (ii);

conjugate(cc)

(%o4)
(%i5) conjugate (xx + yy);
(%o5)

- ii

conjugate(yy) + conjugate(xx)

imagpart (expr )

[Funcion]

Devuelve la parte imaginaria de la expresion expr.


La funci
on imagpart es computacional, no simplificativa.
Veanse tambien abs, carg, polarform, rectform y realpart.

polarform (expr )

[Funcion]
Devuelve una expresi
on de la forma r %e^(%i theta) equivalente a expr, con r y
theta son reales.

156

Manual de Maxima

realpart (expr )

[Funcion]
Devuelve la parte real de expr. La funciones realpart y imagpart operan tambien
con expresiones que contengan funciones trigonometricas e hiperbolicas, races
cuadradas, logaritmos y exponentes.

rectform (expr )

[Funcion]
Devuelve una expresi
on de la forma a + b %i equivalente a expr, con a y b reales.

10.3 Funciones combinatorias


[Operador]

!!
El operador doble factorial.

Para un n
umero entero, de punto flotante o racional n, n!! se evaluara como el producto de n (n-2) (n-4) (n-6) ... (n - 2 (k-1)) donde k es igual a entier(n/2),
que es, el mayor entero menor o igual a n/2. Note que esta definicion no coincide con
otras definciones publicadas para argumentos, los cuales no son enteros.
Para un entero par (o impar) n, n! se evalua el producto de todos los enteros pares
(o impares) consecutivos desde 2 (o 1) por n inclusive.
Para un argumento n el cual no es un n
umero entero, punto flotante o racional, n!!
produce una forma de nombre genfact (n, n/2, 2).

binomial (x, y )

[Funcion]
Es el coeficiente binomial x !/(y ! (x - y )!). Si x y y son enteros, entonces se calcula
el valor numerico del coeficiente binomial. Si y o x - y son enteros, el coeficiente
binomial se expresa como un polinomio.
Ejemplos:
(%i1) binomial (11, 7);
(%o1)
330
(%i2) 11! / 7! / (11 - 7)!;
(%o2)
330
(%i3) binomial (x, 7);
(x - 6) (x - 5) (x - 4) (x - 3) (x - 2) (x - 1) x
(%o3)
------------------------------------------------5040
(%i4) binomial (x + 7, x);
(x + 1) (x + 2) (x + 3) (x + 4) (x + 5) (x + 6) (x + 7)
(%o4) ------------------------------------------------------5040
(%i5) binomial (11, y);
(%o5)
binomial(11, y)

factcomb (expr )

[Funcion]
Trata de combinar los coeficientes de los factoriales de expr con los mismos factoriales,
convirtiendo, por ejemplo, (n + 1)*n! en (n + 1)!.
Si la variable sumsplitfact vale false hara que minfactorial se aplique despues
de factcomb.

Captulo 10: Funciones matem


aticas

factorial (x )
!

157

[Funcion]
[Operador]
Maxima considera factorial (x ) y x ! como

Representa la funci
on factorial.
sin
onimos.
Para cualquier n
umero complejo x, excepto para enteros negativos, x! se define como
gamma(x+1).
Para un entero x, x! se reduce al producto de los enteros desde 1 hasta x inclusive.
0! se reduce a 1. Para un n
umero real o complejo en formato de coma flotante x,
x! se reduce al valor de gamma(x+1). Cuando x es igual a n/2, siendo n un entero
impar, entonces x! se reduce a un factor racional multiplicado por sqrt(%pi) (pues
gamma(1/2)) es igual a sqrt(%pi)).
Las variables opcionales factlim y gammalim controlan la evaluacion numerica de
factoriales de argumentos enteros y racionales.
Las funciones minfactorial y factcomb simplifican expresiones que contiene factoriales.
Veanse tambien factlim, gammalim, minfactorial y factcomb.
Las funciones gamma, bffac y cbffac son variaciones de la funcion matematica
gamma. Las funciones bffac y cbffac son llamadas internamente desde gamma para
evaluar la funci
on gamma de n
umeros reales y complejos decimales con precision de
reales grandes (bigfloats).
Las funciones makegamma substituye a gamma para factoriales y funciones relacionadas.
Maxima reconoce la derivada de la funcion factorial y los lmites para ciertos valores
especficos, tales como los enteros negativos.
La variable opcional factorial_expand controla la simplificacion de expresiones
como (n+x)!, para n entero.
Vease tambien binomial.
Ejemplos:
El factorial de un entero se reduce a un n
umero exacto, a menos que el argumento sea
mayor que factlim. Los factoriales de n
umeros reales o complejos se eval
uan como
decimales de coma flotante.
(%i1) factlim:10;
(%o1)
10
(%i2) [0!, (7/2)!, 8!, 20!];
105 sqrt(%pi)
(%o2)
[1, -------------, 40320, 20!]
16
(%i3) [4.77!, (1.0+%i)!];
(%o3)
[81.44668037931197,
.3430658398165454 %i + .6529654964201665]
(%i4) [2.86b0!, (1.0b0+%i)!];
(%o4) [5.046635586910012b0,
3.430658398165454b-1 %i + 6.529654964201667b-1]
El factorial de una constante conocida o de una expresion general no se calcula. Pero
puede ser posible reducir el factorial despues de evaluado el argumento.

158

Manual de Maxima

(%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];


(%o1)
[(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
(%i2) ev (%, numer, %enumer);
(%o2) [.3430658398165454 %i + .6529654964201665,
7.188082728976031,
4.260820476357003, 1.227580202486819]
Los factoriales son simplificados o reducidos, no evaluados. As x! puede ser reemplazado en una expresi
on nominal.
(%i1) ([0!, (7/2)!, 4.77!, 8!, 20!]);
105 sqrt(%pi)
(%o1) [1, -------------, 81.44668037931199, 40320,
16
2432902008176640000]
Maxima reconoce la derivada de la funcion factorial.
(%i1) diff(x!,x);
(%o1)
x! psi (x + 1)
0
La variable opcional factorial_expand controla la simplificacion de expresiones con
la funci
on factorial.
(%i1) (n+1)!/n!,factorial_expand:true;
(%o1)
n + 1

factlim

[Variable opcional]

Valor por defecto: -1


La variable factlim especifica el mayor factorial que sera expandido
autom
aticamente. Si su valor es -1, entonces se expandiran todos los enteros.

factorial_expand

[Variable opcional]

Valor por defecto: false


La variable factorial_expand controla la simplificacion de expresiones tales como
(n+1)!, siendo n un entero.
Vease ! para un ejemplo.

genfact (x, y, z )

[Funcion]
Devuelve el factorial generalizado, definido como x (x-z) (x - 2 z) ... (x - (y - 1)
z). As, para el entero x, genfact (x, x, 1) = x! y genfact (x, x/2, 2) = x!!.

minfactorial (expr )

[Funcion]
Busca en expr la presencia de dos factoriales que solo se diferencien en una unidad;
en tal caso, minfactorial devuelve una expresion simplificada.
(%i1) n!/(n+2)!;
n!
(%o1)
-------(n + 2)!
(%i2) minfactorial (%);
1

Captulo 10: Funciones matem


aticas

(%o2)

sumsplitfact

159

--------------(n + 1) (n + 2)
[Variable opcional]

Valor por defecto: true


Si sumsplitfact vale false, minfactorial se aplica despues de factcomb.

10.4 Funciones radicales, exponenciales y logartmicas


[Variable opcional]
Valor por defecto: false
Si %e_to_numlog vale true, r es un n
umero racional y x una expresion,
%e^(r*log(x)) se reduce a x^r . Tengase en cuenta que la instruccion radcan
tambien hace este tipo de transformaciones, as como otras mas complicadas. La
instrucci
on logcontract "contrae" expresiones que contienen alg
un log.

%e_to_numlog

%emode

[Variable opcional]

Valor por defecto: true


Si %emode vale true, %e^(%pi %i x) se simplifica como sigue.
%e^(%pi %i x) se simplifica a cos (%pi x) + %i sin (%pi x) si x es un n
umero decimal de coma flotante, un entero o un m
ultiplo de 1/2, 1/3, 1/4 o 1/6, y luego se sigue
simplificando.
Para otros valores numericos de x, %e^(%pi %i x) se simplifica a %e^(%pi %i y) donde
y es x - 2 k para alg
un entero k tal que abs(y) < 1.
Si %emode vale false, no se realizan simplificaciones especiales a %e^(%pi %i x).
[Variable opcional]
Valor por defecto: false
Si la variable %enumer vale true hace que %e se reemplace por 2.718... siempre que
numer valga true.
Si %enumer vale false, esta sustitucion se realiza solo si el exponente en %e^x tiene
un valor numerico.
Veanse tambien ev y numer.

%enumer

exp (x )

[Funcion]
Representa la funci
on exponencial. La expresion exp (x ) en la entrada se simplifica
en %e^x ; exp no aparece en expresiones simplificadas.
Si la variable demoivre vale true hace que %e^(a + b %i) se simplifique a %e^(a
(cos(b) + %i sin(b))) si b no contiene a %i. Vease demoivre.
Si la variable %emode vale true, hace que %e^(%pi %i x) se simplifique. Vease %emode.
Si la variable %enumer vale true hace que %e se reemplace por 2.718... siempre que
numer valga true. Vease %enumer.

li [s ] (z )

[Funcion]
Representa la funci
on polilogartmica de orden s y argumento z, definida por la serie
infinita

160

Manual de Maxima

Lis (z) =

X
zk
k=1

ks

li [1] es - log (1 - z). li [2] y li [3] son las funciones di- y trilogaritmo, respectivamente.
Cuando el orden es 1, el polilogaritmo se simplifica a - log (1 - z), el cual a su vez
se reduce a un valor numerico si z es un n
umero real o complejo en coma flotante o
si est
a presente el termino numer.
Cuando el orden es 2
o 3, el polilogaritmo se reduce a un valor numerico si z es un
n
umero real en coma flotante o si esta presente el termino numer.
Ejemplos:
(%i1) assume (x > 0);
(%o1)
[x > 0]
(%i2) integrate ((log (1 - t)) / t, t, 0, x);
(%o2)
- li (x)
2
(%i3) li [2] (7);
(%o3)
li (7)
2
(%i4) li [2] (7), numer;
(%o4)
1.24827317833392 - 6.113257021832577 %i
(%i5) li [3] (7);
(%o5)
li (7)
3
(%i6) li [2] (7), numer;
(%o6)
1.24827317833392 - 6.113257021832577 %i
(%i7) L : makelist (i / 4.0, i, 0, 8);
(%o7)
[0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
(%i8) map (lambda ([x], li [2] (x)), L);
(%o8) [0, .2676526384986274, .5822405249432515,
.9784693966661848, 1.64493407, 2.190177004178597
- .7010261407036192 %i, 2.374395264042415
- 1.273806203464065 %i, 2.448686757245154
- 1.758084846201883 %i, 2.467401098097648
- 2.177586087815347 %i]
(%i9) map (lambda ([x], li [3] (x)), L);
(%o9) [0, .2584613953442624, 0.537213192678042,
.8444258046482203, 1.2020569, 1.642866878950322
- .07821473130035025 %i, 2.060877505514697
- .2582419849982037 %i, 2.433418896388322
- .4919260182322965 %i, 2.762071904015935
- .7546938285978846 %i]

log (x )
Representa el logaritmo natural (en base e) de x.

[Funcion]

Captulo 10: Funciones matem


aticas

161

Maxima no tiene definida una funcion para el logaritmo de base 10 u otras bases. El
usuario puede hacer uso de la definicion log10(x) := log(x) / log(10).
La simplificaci
on y evaluaci
on de logaritmos se controla con ciertas variables globales:
logexpand
hace que log(a^b) se convierta en b*log(a). Si toma el valor all,
log(a*b) tambien se reducira a log(a)+log(b). Si toma el valor super,
entonces log(a/b) tambien se reducira a log(a)-log(b), siendo a/b
racional con a#1, (la expresion log(1/b), para b entero, se simplifica
siempre). Si toma el valor false, se desactivaran todas estas simplificaciones.
logsimp

si vale false, entonces no se transforma %e a potencias que contengan


logaritmos.

lognegint
si vale true se aplica la regla log(-n) -> log(n)+%i*%pi, siendo n un
entero positivo.
%e_to_numlog
si vale true, r es un n
umero racional y x una expresion, %e^(r*log(x))
se reduce a x^r. Tengase en cuenta que la instruccion radcan tambien
hace este tipo de transformaciones, as como otras mas complicadas. La
instrucci
on logcontract "contrae" expresiones que contengan alg
un log.

logabs

[Variable opcional]

Valor por defecto: false


Cuando se calculan integrales indefinidas en las que se generan logaritmos, como en
integrate(1/x,x), el resultado se devuelve de la forma log(abs(...)) si logabs
vale true, o de la forma log(...) si logabs vale false. En la integracion definida
se hace la asignaci
on logabs:true, ya que aqu es normalmente necesario evaluar la
integral indefinida en los extremos del intervalo de integracion.
[Variable opcional]
[Funcion]
Si la variable global logarc toma el valor true, las funciones circulares e hiperbolicas
inversas se reemplazan por funciones logartmicas equivalentes. El valor por defecto
de logarc es false.

logarc
logarc (expr )

La funci
on logarc(expr ) realiza la anterior transformacion en la expresion expr sin
necesidad de alterar el valor de la variable global logarc.

logconcoeffp

[Variable opcional]

Valor por defecto: false


Controla que coeficientes se contraen cuando se utiliza logcontract.
Se
le puede asignar el nombre de una funcion de predicado de un argumento; por ejemplo, si se quiere introducir races cuadradas, se puede
hacer
logconcoeffp:logconfun$ logconfun(m):=featurep(m,integer) or
ratnump(m)$ . Entonces logcontract(1/2*log(x)); devolvera log(sqrt(x)).

162

Manual de Maxima

logcontract (expr )

[Funcion]
Analiza la expresi
on expr recursivamente, transformando subexpresiones de la forma
a1*log(b1) + a2*log(b2) + c en log(ratsimp(b1^a1 * b2^a2)) + c
(%i1) 2*(a*log(x) + 2*a*log(y))$
(%i2) logcontract(%);
2 4
a log(x y )

(%o2)

Si se hace declare(n,integer); entonces logcontract(2*a*n*log(x));


da a*log(x^(2*n)).
Los coeficientes que se contraen de esta manera son
aquellos que como el 2 y el n satisfacen featurep(coeff,integer).
El
usuario puede controlar que coeficientes se contraen asignandole a la variable global logconcoeffp el nombre de una funcion de predicado de un
argumento; por ejemplo, si se quiere introducir races cuadradas, se puede
hacer
logconcoeffp:logconfun$ logconfun(m):=featurep(m,integer) or
ratnump(m)$ . Entonces logcontract(1/2*log(x)); devolvera log(sqrt(x)).
[Variable opcional]

logexpand
Valor por defecto: true

Si logexpand vale true hace que log(a^b) se convierta en b*log(a). Si toma el


valor all, log(a*b) tambien se reducira a log(a)+log(b). Si toma el valor super,
entonces log(a/b) tambien se reducira a log(a)-log(b), siendo a/b racional con
a#1, (la expresi
on log(1/b), para b entero, se simplifica siempre). Si toma el valor
false, se desactivar
an todas estas simplificaciones.
[Variable opcional]

lognegint
Valor por defecto: false

Si lognegint vale true se aplica la regla log(-n) -> log(n)+%i*%pi siendo n un


entero positivo.

logsimp

[Variable opcional]

Valor por defecto: true


Si logsimp vale false, entonces no se transforma %e a potencias que contengan
logaritmos.

plog (x )

[Funcion]
Representa la rama principal del logaritmo natural complejo con -%pi < carg(x ) <=
+%pi .

sqrt (x )
Raz cuadrada de x.
rootscontract.

Se representa internamente por x ^(1/2).

[Funcion]
Vease tambien

Si la variable radexpand vale true hara que las races n-esimas de los factores
de un producto que sean potencias de n sean extradas del radical; por ejemplo,
sqrt(16*x^2) se convertir
a en 4*x solo si radexpand vale true.

Captulo 10: Funciones matem


aticas

163

10.5 Funciones trigonom


etricas
10.5.1 Introducci
on a la trigonometra
Maxima reconoce muchas funciones trigonometricas. No estan programadas todas las identidades trigonometricas, pero el usuario puede a~
nadir muchas de ellas haciendo uso de las
tecnicas basadas en patrones. Las funciones trigonometricas definidas en Maxima son: acos,
acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cos, cosh, cot,
coth, csc, csch, sec, sech, sin, sinh, tan y tanh. Hay tambien un determinado n
umero
de instrucciones especiales para manipular funciones trigonometricas; veanse a este respecto
trigexpand, trigreduce y la variable trigsign. Dos paquetes adicionales amplan las reglas de simplificaci
on de Maxima, ntrig y atrig1. Ejec
utese describe(command ) para
mas detalles.

10.5.2 Funciones y variables para trigonometra


[Variable opcional]
Valor por defecto: true
Cuando %piargs vale true, las funciones trigonometricas se simplifican a constantes
algebraicas cuando el argumento es m
ultiplo entero de , /2, /3, /4 o /6.
Maxima conoce algunas identidades aplicables cuando , etc., se multiplican por una
variable entera (esto es, un smbolo declarado como entero).
Ejemplo:
(%i1) %piargs : false$
(%i2) [sin (%pi), sin (%pi/2), sin (%pi/3)];
%pi
%pi
(%o2)
[sin(%pi), sin(---), sin(---)]
2
3
(%i3) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
%pi
%pi
%pi
(%o3)
[sin(---), sin(---), sin(---)]
4
5
6
(%i4) %piargs : true$
(%i5) [sin (%pi), sin (%pi/2), sin (%pi/3)];
sqrt(3)
(%o5)
[0, 1, -------]
2
(%i6) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
1
%pi
1
(%o6)
[-------, sin(---), -]
sqrt(2)
5
2
(%i7) [cos (%pi/3), cos (10*%pi/3), tan (10*%pi/3),
cos (sqrt(2)*%pi/3)];
1
1
sqrt(2) %pi
(%o7)
[-, - -, sqrt(3), cos(-----------)]
2
2
3
Se aplican ciertas identidades cuando o /2 se multiplican por una variable entera.

%piargs

164

Manual de Maxima

(%i1) declare (n, integer, m, even)$


(%i2) [sin (%pi * n), cos (%pi * m), sin (%pi/2 * m),
cos (%pi/2 * m)];
m/2
(%o2)
[0, 1, 0, (- 1)
]
[Variable opcional]

%iargs
Valor por defecto: true

Cuando %iargs vale true, las funciones trigonometricas se simplifican a funciones


hiperb
olicas si el argumento es aparentemente un m
ultiplo de la unidad imaginaria i.
La simplificaci
on se lleva a cabo incluso cuando el argumento es manifiestamente real;
Maxima s
olo se fija en si el argumento es un m
ultiplo literal de i.
Ejemplos:
(%i1)
(%i2)
(%o2)
(%i3)
(%i4)
(%o4)

%iargs : false$
[sin (%i * x), cos (%i * x), tan (%i * x)];
[sin(%i x), cos(%i x), tan(%i x)]
%iargs : true$
[sin (%i * x), cos (%i * x), tan (%i * x)];
[%i sinh(x), cosh(x), %i tanh(x)]

La simplificaci
on se aplica incluso en el caso de que el argumento se reduzca a un
n
umero real.
(%i1) declare (x, imaginary)$
(%i2) [featurep (x, imaginary), featurep (x, real)];
(%o2)
[true, false]
(%i3) sin (%i * x);
(%o3)
%i sinh(x)

acos (x )

[Function]

Arco coseno.

acosh (x )

[Funcion]

Arco coseno hiperb


olico.

acot (x )

[Funcion]

Arco cotangente.

acoth (x )

[Funcion]

Arco cotangente hiperb


olica.

acsc (x )

[Funcion]

Arco cosecante.

acsch (x )

[Funcion]

Arco cosecante hiperb


olica.

asec (x )
Arco secante.

[Funcion]

Captulo 10: Funciones matem


aticas

asech (x )

165

[Funcion]

Arco secante hiperb


olica.

asin (x )

[Funcion]

Arco seno.

asinh (x )

[Funcion]

Arco seno hiperb


olico.

atan (x )

[Funcion]

Arco tangente.

atan2 (y, x )

[Funcion]

Calcula el valor de atan(y /x ) en el intervalo de -%pi a %pi.

atanh (x )

[Funcion]

Arco tangente hiperb


olica.
[Paquete]
El paquete atrig1 contiene ciertas reglas de simplificacion adicionales para las funciones trigonometricas inversas. Junto con las reglas que ya conoce Maxima, los siguientes
angulos est
an completamente implementados: 0, %pi/6, %pi/4, %pi/3 y %pi/2.
Los
angulos correspondientes en los otros tres cuadrantes tambien estan disponibles.
Para hacer uso de estas reglas, ejec
utese load(atrig1);.

atrig1

cos (x )

[Funcion]

Coseno.

cosh (x )

[Funcion]

Coseno hiperb
olico.

cot (x )

[Funcion]

Cotangente.

coth (x )

[Funcion]

Cotangente hiperb
olica.

csc (x )

[Funcion]

Cosecante.

csch (x )

[Funcion]

Cosecante hiperb
olica.

halfangles

[Variable opcional]

Valor por defecto: false


Si halfangles vale true, las funciones trigonometricas con argumentos del tipo
expr /2 se simplifican a funciones con argumentos expr.
Para un argumento real x en el intervalo 0 < x < 2*%pi el seno del semiangulo se
simplifica como

166

Manual de Maxima

sqrt(1 - cos(x))
---------------sqrt(2)
Se necesita un factor relativamente complicado para que esta formula sea tambien
valida para cualquier argumento complejo z:
realpart(z)
floor(-----------)
2 %pi
(- 1)
(1 - unit_step(- imagpart(z))
realpart(z)
realpart(z)
floor(-----------) - ceiling(-----------)
2 %pi
2 %pi
((- 1)
+ 1))
Maxima reconoce este factor y otros similares para las funciones sin, cos, sinh y
cosh. Para valores especiales del argumento z, estos factores se simplifican de forma
apropiada.
Ejemplos:
(%i1) halfangles:false;
(%o1)
(%i2) sin(x/2);

x
sin(-)
2

(%o2)
(%i3) halfangles:true;
(%o3)
(%i4) sin(x/2);

(%o4)
(%i5)
(%i6)
(%o6)

false

true

x
floor(-----)
2 %pi
sqrt(1 - cos(x)) (- 1)
---------------------------------sqrt(2)
assume(x>0, x<2*%pi)$
sin(x/2);
sqrt(1 - cos(x))
---------------sqrt(2)

[Paquete]
El paquete ntrig contiene un conjunto de reglas de simplificacion que se pueden usar
para simplificar funciones trigonometricas cuyos argumentos son de la forma f (n
%pi/10) donde f es cualquiera de las funciones sin, cos, tan, csc, sec o cot.

ntrig

sec (x )
Secante.

[Funcion]

Captulo 10: Funciones matem


aticas

167

sech (x )

[Funcion]

Secante hiperb
olica.

sin (x )

[Funcion]

Seno.

sinh (x )

[Funcion]

Seno hiperb
olico.

tan (x )

[Funcion]

Tangente.

tanh (x )

[Funcion]

Tangente hiperb
olica.

trigexpand (expr )

[Funcion]
Expande funciones trigonometricas e hiperbolicas de sumas de angulos y de m
ultiplos
de
angulos presentes en expr. Para mejorar los resultados, expr debera expandirse.
Para facilitar el control por parte del usuario de las simplificaciones, esta funcion tan
solo expande un nivel de cada vez, expandiendo sumas de angulos o de m
ultiplos de
angulos. A fin de obtener una expansion completa en senos y coseno, se le dara a la
variable trigexpand el valor true.
La funci
on trigexpand est
a controlada por las siguientes variables:
trigexpand
Si vale true, provoca la expansion de todas las expresiones que contengan
senos y cosenos.
trigexpandplus
Controla la regla de la suma para trigexpand, la expansion de una suma
como sin(x + y) se llevara a cabo solo si trigexpandplus vale true.
trigexpandtimes
Controla la regla del producto para trigexpand, la expansion de un producto como sin(2 x) se llevara a cabo solo si trigexpandtimes vale
true.
Ejemplos:
(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
2
2
(%o1)
- sin (x) + 3 cos (x) + x
(%i2) trigexpand(sin(10*x+y));
(%o2)
cos(10 x) sin(y) + sin(10 x) cos(y)

trigexpandplus

[Variable optativa]

Valor por defecto: true


La variable trigexpandplus controla la regla de la suma para trigexpand. As, si la
instrucci
on trigexpand se utiliza o si la variable trigexpand vale true, se realizar
a
la expansi
on de sumas como sin(x+y) solo si trigexpandplus vale true.

168

Manual de Maxima

trigexpandtimes

[Variable optativa]

Valor por defecto: true


La variable trigexpandtimes controla la regla del producto para trigexpand. As, si
la instrucci
on trigexpand se utiliza o si la variable trigexpand vale true, se realizar
a
la expansi
on de productos como sin(2*x) solo si trigexpandtimes vale true.

triginverses

[Variable optativa]

Valor por defecto: true


La variable triginverses controla la simplificacion de la composicion de funciones
trigonometricas e hiperb
olicas con sus funciones inversas.
Si vale all, tanto atan(tan(x )) como tan(atan(x )) se reducen a x.
Si vale true, se desactiva la simplificacion de arcfun (fun (x )).
Si vale false, se desactivan las simplificaciones de arcfun (fun (x )) y
fun (arcfun (x )).

trigreduce (expr, x )
trigreduce (expr )

[Funcion]
[Funcion]
Combina productos y potencias de senos y cosenos trigonometricos e hiperbolicos de
x, transform
andolos en otros que son m
ultiplos de x. Tambien intenta eliminar estas
funciones cuando aparecen en los denominadores. Si no se introduce el argumento x,
entonces se utilizan todas las variables de expr.
Vease tambien poissimp.
(%i1) trigreduce(-sin(x)^2+3*cos(x)^2+x);
cos(2 x)
cos(2 x)
1
1
(%o1)
-------- + 3 (-------- + -) + x - 2
2
2
2

Las rutinas de simplificaci


on trigonometrica utilizan informacion declarada en algunos casos sencillos. Las declaraciones sobre variables se utilizan como se indica a
continuaci
on:
(%i1) declare(j, integer, e, even, o, odd)$
(%i2) sin(x + (e + 1/2)*%pi);
(%o2)
cos(x)
(%i3) sin(x + (o + 1/2)*%pi);
(%o3)
- cos(x)

trigsign

[Variable optativa]

Valor por defecto: true


Si trigsign vale true, se permite la simplificacion de argumentos negativos en funciones trigonometricas, como en sin(-x), que se transformara en -sin(x) solo si
trigsign vale true.

trigsimp (expr )

[Funcion]
2
2
2
2
Utiliza las identidades sin (x) +cos (x) = 1 y cosh (x) sinh (x) = 1 para simplificar
expresiones que contienen tan, sec, etc., en expresiones con sin, cos, sinh, cosh.

Captulo 10: Funciones matem


aticas

169

Las funciones trigreduce, ratsimp y radcan puden seguir siendo u


tiles para continuar el proceso de simplificacion.
La instrucci
on demo ("trgsmp.dem") muestra algunos ejemplos de trigsimp.

trigrat (expr )

[Funcion]
Devuelve una forma canonica simplificada cuasi-lineal de una expresion
trigonometrica; expr es una fraccion racional que contiene sin, cos o tan, cuyos
argumentos son formas lineales respecto de ciertas variables (o kernels) y %pi/n
(n entero) con coeficientes enteros. El resultado es una fraccion simplificada con el
numerador y denominador lineales respecto de sin y cos. As, trigrat devuelve
una expresi
on lineal siempre que sea posible.
(%i1) trigrat(sin(3*a)/sin(a+%pi/3));
(%o1)
sqrt(3) sin(2 a) + cos(2 a) - 1
El siguiente ejemplo se ha tomado de Davenport, Siret y Tournier, Calcul Formel,
Masson (o en ingles, Addison-Wesley), seccion 1.5.5, teorema de Morley.
(%i1) c : %pi/3 - a - b$
(%i2) bc : sin(a)*sin(3*c)/sin(a+b);
%pi
sin(a) sin(3 (- b - a + ---))
3
(%o2)
----------------------------sin(b + a)
(%i3) ba : bc, c=a, a=c;
%pi
sin(3 a) sin(b + a - ---)
3
(%o3)
------------------------%pi
sin(a - ---)
3

170

Manual de Maxima

(%i4) ac2 : ba^2 + bc^2 - 2*bc*ba*cos(b);


2
2
%pi
sin (3 a) sin (b + a - ---)
3
(%o4) --------------------------2
%pi
sin (a - ---)
3
%pi
- (2 sin(a) sin(3 a) sin(3 (- b - a + ---)) cos(b)
3
%pi
%pi
sin(b + a - ---))/(sin(a - ---) sin(b + a))
3
3
2
2
%pi
sin (a) sin (3 (- b - a + ---))
3
+ ------------------------------2
sin (b + a)
(%i5) trigrat (ac2);
(%o5) - (sqrt(3) sin(4 b + 4 a) - cos(4 b + 4 a)
- 2 sqrt(3) sin(4 b + 2 a) + 2 cos(4 b + 2 a)
- 2 sqrt(3) sin(2 b + 4 a) + 2 cos(2 b + 4 a)
+ 4 sqrt(3) sin(2 b + 2 a) - 8 cos(2 b + 2 a) - 4 cos(2 b - 2 a)
+ sqrt(3) sin(4 b) - cos(4 b) - 2 sqrt(3) sin(2 b) + 10 cos(2 b)
+ sqrt(3) sin(4 a) - cos(4 a) - 2 sqrt(3) sin(2 a) + 10 cos(2 a)
- 9)/4

10.6 N
umeros aleatorios
(n )
[Funcion]
(s )
[Funcion]
(true)
[Funcion]
(false)
[Funcion]
Un objeto de estado aleatorio representa el estado del generador de n
umeros aleatorios. El estado consiste en 627 cadenas binarias de 32 bits.

make_random_state
make_random_state
make_random_state
make_random_state

La llamada make_random_state (n ) devuelve un nuevo objeto de estado aleatorio


creado a partir de una semilla entera igual a n modulo 2^32. El argumento n puede
ser negativo.
La llamada make_random_state (s ) devuelve una copia del estado aleatorio s.
La llamada make_random_state (true) devuelve un nuevo objeto de estado aleatorio,
cuya semilla se genera a partir de la hora actual del reloj del sistema como semilla.
La llamada make_random_state (false) devuelve una copia del estado actual del
generador de n
umeros aleatorios.

Captulo 10: Funciones matem


aticas

set_random_state (s )

171

[Funcion]

Establece s como estado del generador de n


umeros aleatorios.
La funci
on set_random_state devuelve done en todo caso.

random (x )

[Funcion]
Devuelve un n
umero seudoaleatorio. Si x es un entero, random (x ) devuelve un
entero entre 0 y x - 1, ambos inclusive. Si x es un decimal en punto flotante, random
(x ) devuelve un decimal no negativo en punto flotante menor que x. La funcion
random emite un mensaje de error si x no es ni entero ni de punto flotante, o si x no
es positivo.
Las funciones make_random_state y set_random_state permiten controlar el estado
del generador de n
umeros aleatorios.
El generador de n
umeros aleatorios de Maxima implementa el algoritmo de Mersenne
twister MT 19937.
Ejemplos:
(%i1) s1: make_random_state (654321)$
(%i2) set_random_state (s1);
(%o2)
done
(%i3) random (1000);
(%o3)
768
(%i4) random (9573684);
(%o4)
7657880
(%i5) random (2^75);
(%o5)
11804491615036831636390
(%i6) s2: make_random_state (false)$
(%i7) random (1.0);
(%o7)
.2310127244107132
(%i8) random (10.0);
(%o8)
4.394553645870825
(%i9) random (100.0);
(%o9)
32.28666704056853
(%i10) set_random_state (s2);
(%o10)
done
(%i11) random (1.0);
(%o11)
.2310127244107132
(%i12) random (10.0);
(%o12)
4.394553645870825
(%i13) random (100.0);
(%o13)
32.28666704056853

Captulo 11: Base de datos de Maxima

173

11 Base de datos de Maxima


11.1 Introducci
on a la base de datos de Maxima
Propiedades
A las variables y funciones se les puede asignar propiedades con la funcion declare. Estas
propiedades son almacenadas en un banco de datos o registradas en una lista de propiedades
que proporciona Lisp. Con la funcion featurep se puede comprobar si un smbolo tiene
una determinada propiedad y con la funcion properties se pueden obtener todas las
propiedades asociadas a el. A su vez, la funcion remove elimina una propiedad de la base
de datos o de la lista de propiedades. En caso de utilizar kill para borrar el valor asignado
a una variable, tambien ser
an borradas todas las propiedades asociadas a la misma.
El usuario tiene la facultad de a~
nadirle propiedades a un smbolo con las funciones put
y qput. Con la funci
on get podr
a leer sus propiedades y borrarlas con rem.
Las variables pueden tener las siguientes propiedades a almacenar en el banco de datos:
constant
integer
noninteger
even
odd
rational
irrational
real
imaginary
complex
Las funciones pueden tener las siguientes propiedades a almacenar en el banco de datos:
increasing
decreasing
posfun
integervalued
Las siguientes propiedades se pueden aplicar a funciones y se utilizan para su correcta
simplificaci
on. Estas propiedades se describen en el captulo dedicado a la simplificacion:
linear
additive
multiplicative
outative
commutative
symmetric
antisymmetric nary
lassociativ
rassociative
evenfun
oddfun
Otras propiedades aplicables a variables y funciones, y que se almacenan en la lista de
propiedades de Lisp, son:
bindtest
feature
alphabetic
scalar
nonscalar
nonarray

Contextos
Maxima administra contextos en los que se almacenan tanto las propiedades de las variables
y funciones como hechos o hip
otesis sobre las mismas. Los hechos se establecen con la
funcion assume y se almacenan en el contexto actual. Por ejemplo, con assume(a>10)
guarda Maxima la informaci
on sobre el hecho de que la variable a es mayor que 10. Con
la funcion forget se borran los hechos de la base de datos. Cuando Maxima pregunta al
usuario sobre las propiedades de una variable, estas son almacenadas en un contexto.
Cada contexto se identifica por un nombre. Al iniciarse Maxima, el contexto actual recibe
el nombre de initial y se puede definir un n
umero arbitrario de contextos adicionales

174

Manual de Maxima

que pueden organizarse de forma jerarquica. As, el contexto initial esta incluido en
el contexto global. Los hechos definidos en un contexto dado estan siempre activos en
los contextos de nivel inferior. Por ejemplo, el contexto global contiene hechos que se
inicializan por el propio Maxima y estaran activos, por tanto, en el contexto initial.
Los contextos pueden almacenar un n
umero arbitrario de hechos y pueden desactivarse
con la funci
on deactivate. Desactivar un contexto no implica la perdida de los hechos
almacenados, pudiendo ser posteriormente reactivado con la funcion activate, estando los
hechos siempre a disposici
on del usuario.

11.2 Funciones y variables para las propiedades


[Propiedad]
alphabetic es un tipo de propiedad reconocida por declare. La expresion
declare(s, alphabetic) le indica a Maxima que reconozca como alfabeticos todos
los caracteres que haya en s, que debe ser una cadena de texto.
Vease tambien Identifiers.
Ejemplo:
(%i1) xx\~yy\\@ : 1729;
(%o1)
1729
(%i2) declare ("~@", alphabetic);
(%o2)
done
(%i3) xx~yy@ + @yyxx + xx@@yy~;
(%o3)
xx@@yy~ + @yyxx + 1729
(%i4) listofvars (%);
(%o4)
[@yyxx, xx@@yy~]

alphabetic

[Propiedad]
La sentencia declare(x, bindtest le indica a Maxima que devuelva un mensaje de
error cuando el smbolo x no tenga asociado valor alguno.
Ejemplo:
(%i1) aa + bb;
(%o1)
bb + aa
(%i2) declare (aa, bindtest);
(%o2)
done
(%i3) aa + bb;
aa unbound variable
-- an error. Quitting. To debug this try debugmode(true);
(%i4) aa : 1234;
(%o4)
1234
(%i5) aa + bb;
(%o5)
bb + 1234

bindtest

[Propiedad]
declare(a, constant) declara a como constante. La declaracion de un smbolo como
constante no impide que se le asigne un valor no constante al smbolo.
Veanse constantp y declare

constant

Captulo 11: Base de datos de Maxima

Ejemplo:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

175

declare(c, constant);
done
constantp(c);
true
c : x;
x
constantp(c);
false

constantp (expr )

[Funcion]
Devuelve true si expr es una expresion constante y false en caso contrario.
Una expresi
on se considera constante si sus argumentos son n
umeros (incluidos los
n
umeros racionales que se muestran con /R/), constantes simbolicas como %pi, %e o
%i, variables con valor constante o declarada como constante por declare, o funciones
cuyos argumentos son constantes.
La funci
on constantp eval
ua sus argumentos.
Ejemplos:
(%i1) constantp (7 * sin(2));
(%o1)
true
(%i2) constantp (rat (17/29));
(%o2)
true
(%i3) constantp (%pi * sin(%e));
(%o3)
true
(%i4) constantp (exp (x));
(%o4)
false
(%i5) declare (x, constant);
(%o5)
done
(%i6) constantp (exp (x));
(%o6)
true
(%i7) constantp (foo (x) + bar (%e) + baz (2));
(%o7)
false
(%i8)

declare (a_1, f_1, a_2, f_2, ...)

[Funcion]
Asigna al
atomo o lista de
atomos a i la propiedad o lista de propiedadesp i. Si a i
y/o p i son listas, cada uno de los atomos adquiere todas las propiedades.
La funci
on declare no eval
ua sus argumentos y siempre devuelve la expresion done.
La llamada featurep (object, feature ) devuelve true si object ha sido previamente declarado como poseedor de la propiedad feature.
Vease tambien features.
La funci
on declare reconoce las siguientes propiedades:
additive

Hace que Maxima simplifique las expresiones a i haciendo uso de la sustituci


on a_i (x + y + z + ...) --> a_i (x) + a_i (y) + a_i (z) + .... Tal
sustituci
on se aplica u
nicamente al primer argumento.

176

Manual de Maxima

alphabetic
Indica a Maxima que reconozca todos los caracteres de la cadena alfanumerica a i como caracteres alfabeticos.
antisymmetric, commutative, symmetric
Hace que Maxima reconozca a a i como una funcion simetrica o antisimetrica. La propiedad commutative equivale a symmetric.
bindtest

Hace que Maxima enve un error si a i es evaluado sin habersele asignado


un valor.

constant

Hace que Maxima considere a a i como una constante simbolica.

even, odd Hace que Maxima reconozca a a i como una variable entera par o impar.
evenfun, oddfun
Hace que Maxima reconozca a a i como una funcion par o impar.
evflag

Hace que a i sea reconocida por ev, de manera que a a i se le asigne el


valor true durante la ejecucion de ev cuando a i aparezca como argumento de control de ev. Vease tambien evflag.

evfun

Hace que a i sea reconocida por ev, de manera que la funcion nombrada
por a i se aplique cuando a i aparezca como argumento de control de ev.
Vease tambien evfun.

feature

Hace que Maxima considere a a i como el nombre de una propiedad.


Otros
atomos podran ser declarados entonces como poseedores de la
propiedad a i.

increasing, decreasing
Hace que Maxima reconozca a a i como una funcion creciente o decreciente.
integer, noninteger
Hace que Maxima reconozca a a i como una variable entera o no entera.
integervalued
Hace que Maxima reconozca a a i como una funcion de valor entero.
lassociative, rassociative
Hace que Maxima reconozca a a i como una funcion asociativa por la
derecha o por la izquierda.
linear

Equivale a declarar a i conjuntamente como outative y additive.

mainvar

Hace que Maxima considere a a i como una "variable principal",


d
andole prioridad frente a cualesquiera otras constantes o variables en
la ordenaci
on canonica de expresiones de Maxima, tal como determina
ordergreatp.

multiplicative
Hace que Maxima simplifique las expresiones a i haciendo uso de la sustituci
on a_i (x * y * z * ...) --> a_i (x) * a_i (y) * a_i (z) * .... Tal
sustituci
on se aplica u
nicamente al primer argumento.

Captulo 11: Base de datos de Maxima

177

nary

Hace que Maxima reconozca a a i como una funcion n-aria.


La declaraci
on nary no es equivalente a la funcion nary. El u
nico efecto
de declare(foo, nary) consiste en hacer que el simplificador de Maxima reduzca expresiones anidadas; por ejemplo, para transformar foo(x,
foo(y, z)) a foo(x, y, z).

nonarray

Indica que Maxima no debe considerar a i como un array. Esta


declaraci
on evita la evaluacion m
ultiple de variables subindicadas.

nonscalar
Hace que Maxima considere a a i como una variable no escalar. Se aplica
com
unmente para declarar una variable como un vector simbolico o una
matriz simb
olica.
noun

Hace que Maxima considere a a i como un nombre. El efecto que se


obtiene es que se reemplazan todas las expresiones a i por a_i o nounify
(a_i ), dependiendo del contexto.

outative

Hace que Maxima simplifique las expresiones a i extrayendo los factores


constantes del primer argumento.
Cuando a i tenga un u
nico argumento, un factor se considerara constante
si es una constante literal o declarada.
Cuando a i tenga dos o mas argumentos, un factor se considerara constante si el segundo argumento es un smbolo y el factor no contiene al
segundo argumento.

posfun

Hace que Maxima reconozca a a i como una funcion positiva.

rational, irrational
Hace que Maxima reconozca a a i como una variable real racional o irracional.
real, imaginary, complex
Hace que Maxima reconozca a a i como una variable real, imaginaria o
compleja.
scalar

Hace que Maxima considere a a i como una variable escalar.

Ejemplos sobre el uso de estas propiedades estan disponibles en la documentacion


correspondiente a cada propiedad por separado.
[Propiedad]
[Propiedad]
Las instrucciones declare(f, decreasing) y declare(f, increasing le indican a
Maxima que reconozca la funcion f como una funcion decreciente o creciente.
Vease tambien declare para mas propiedades.
Ejemplo:
(%i1) assume(a > b);
(%o1)
[a > b]
(%i2) is(f(a) > f(b));
(%o2)
unknown

decreasing
increasing

178

Manual de Maxima

(%i3) declare(f, increasing);


(%o3)
done
(%i4) is(f(a) > f(b));
(%o4)
true

even
odd

[Propiedad]
[Propiedad]
declare(a, even) y declare(a, odd) le indican a Maxima que reconozca el smbolo
a como entero par o impar. Las propiedades even y odd no son reconocidas por las
funciones evenp, oddp y integerp.
Veanse tambien declare y askinteger.
Ejemplo:
(%i1) declare(n, even);
(%o1)
done
(%i2) askinteger(n, even);
(%o2)
yes
(%i3) askinteger(n);
(%o3)
yes
(%i4) evenp(n);
(%o4)
false
[Propiedad]
Maxima interpreta dos tipos diferentes de propiedades, del sistema y las que se
aplican a expresiones matematicas. Vease status para obtener informacion sobre
propiedades del sistema, as como features y featurep para propiedades de las
expresiones matem
aticas.
feature no es el nombre de ninguna funcion o variable.

feature

featurep (a, f )

[Funcion]
Intenta determinar si el objeto a tiene la propiedad f en base a los hechos almacenados
en la base de datos. En caso afirmativo, devuelve true, o false en caso contrario.
Notese que featurep devuelve false cuando no se puedan verificar ni f ni su negaci
on.
featurep eval
ua su argumento.
Veanse tambien declare y features.
Ejemplos:
(%i1) declare (j, even)$
(%i2) featurep (j, integer);
(%o2)
true
[Declaracion]
Maxima reconoce ciertas propiedades matematicas sobre funciones y variables.
La llamada declare (x, foo ) asocia la propiedad foo a la funcion o variable x.
La llamada declare (foo, feature) declara una nueva propiedad foo. Por ejemplo,
declare ([rojo, verde, azul], feature) declara tres nuevas propiedades, rojo,
verde y azul.

features

Captulo 11: Base de datos de Maxima

179

El predicado featurep (x, foo ) devuelve true si x goza de la propiedad foo, y false
en caso contrario.
La lista features contiene las propiedades que reconoce Maxima; a saber,
integer
odd
real
analytic
oddfun
commutative
symmetric

noninteger
rational
imaginary
increasing
evenfun
lassociative
antisymmetric

even
irrational
complex
decreasing
posfun
rassociative

junto con las definidas por el usuario.


La lista features s
olo contiene propiedades matematicas.
propiedades no matem
aticas; Vease status.

Hay otra lista con

Ejemplo:
(%i1) declare (FOO, feature);
(%o1)
done
(%i2) declare (x, FOO);
(%o2)
done
(%i3) featurep (x, FOO);
(%o3)
true

get (a, i )

[Funcion]
Recupera la propiedad de usuario indicada por i asociada al atomo a o devuelve false
si a no tiene la propiedad i.

La funci
on get eval
ua sus argumentos.
Veanse tambien put y qput.
(%i1)
(%o1)
(%i2)
(%i3)
(%i4)

put (%e, transcendental, type);


transcendental
put (%pi, transcendental, type)$
put (%i, algebraic, type)$
typeof (expr) := block ([q],
if numberp (expr)
then return (algebraic),
if not atom (expr)
then return (maplist (typeof, expr)),
q: get (expr, type),
if q=false
then errcatch (error(expr,"is not numeric.")) else q)$
(%i5) typeof (2*%e + x*%pi);
x is not numeric.
(%o5) [[transcendental, []], [algebraic, transcendental]]
(%i6) typeof (2*%e + %pi);
(%o6)
[transcendental, [algebraic, transcendental]]

180

Manual de Maxima

[Propiedad]
[Propiedad]
declare(a, integer) o declare(a, noninteger) indica a Maxima que reconozca a
como una variable entera o no entera.
Vease tambien declare.
Ejemplo:
(%i1) declare(n, integer, x, noninteger);
(%o1)
done
(%i2) askinteger(n);
(%o2)
yes
(%i3) askinteger(x);
(%o3)
no

integer
noninteger

[Propiedad]
declare(f, integervalued) indica a MAxima que reconozca f como una funcion
que toma valores enteros.
Vease tambien declare.
Ejemplo:
(%i1) exp(%i)^f(x);
%i f(x)
(%o1)
(%e )
(%i2) declare(f, integervalued);
(%o2)
done
(%i3) exp(%i)^f(x);
%i f(x)
(%o3)
%e

integervalued

[Propiedad]
La instrucci
on declare(a, nonarray) le indica a Maxima que no considere a como
un array. Esta declaraci
on evita la evaluacion m
ultiple de a, si esta es una variable
subindicada.
Vease tambien declare.
Ejemplo:
(%i1) a:b$ b:c$ c:d$

nonarray

(%i4) a[x];
(%o4)
(%i5) declare(a, nonarray);
(%o5)
(%i6) a[x];
(%o6)

d
x
done
a
x

[Propiedad]
Hace que los
atomos se comporten como hace una lista o matriz con respecto del
operador . del la multiplicacion no conmutativa.

nonscalar

Captulo 11: Base de datos de Maxima

181

Vease tambien declare.

nonscalarp (expr )

[Funcion]
Devuelve true si expr no es escalar, es decir, si contiene atomos declarados como no
escalares, listas o matrices.
[Declaracion]
La instrucci
on declare (f, posfun) declara a f como funcion positiva, de forma que
is (f(x) > 0) devolver
a true.
Vease tambien declare.

posfun

printprops (a, i )
printprops ([a_1, ..., a_n ], i )
printprops (all, i )

[Funcion]
[Funcion]
[Funcion]
Muestra la propiedad con el indicador i asociado con el atomo a. a puede ser tambien
una lista de
atomos o el
atomo all en cuyo caso todos los atomos a los cuales se les
haya dado esa propiedad ser
an usados. Por ejemplo, printprops ([f, g], atvalue).
printprops es para propiedades que no pueden ser mostradas de otra manera, i.e.
para atvalue, atomgrad, gradef, y matchdeclare.

properties (a )

[Funcion]
Devuelve una lista con los nombres de todas las propiedades asociadas al tomo a.

props

[Variable del sistema]

Valor por defecto: []


props son tomos que tienen asociadas otras propiedades ademas de las explcitamente
mencionadas en infolists, tales como las especificadas por atvalue, matchdeclare
y la funci
on declare.

propvars (prop )

[Funcion]
Devuelve la lista con los
atomos de la lista props que tienen la propiedad indicada
por prop. As, propvars (atvalue) devuelve la lista con los atomos a los que se les
ha asociado valores con atvalue.

put (
atomo, valor, indicador )

[Funcion]
Asigna el valor a la propiedad (especificada por indicador) de atomo; indicador puede
ser el nombre de cualquier propiedad y no solamente de aquellas definidas por el
sistema.
rem deshace la asignaci
on realizada por put.
La funci
on put eval
ua sus argumentos y devuelve valor.
Ejemplos:
(%i1) put (foo, (a+b)^5, expr);
5
(%o1)
(b + a)
(%i2) put (foo, "Hello", str);
(%o2)
Hello
(%i3) properties (foo);
(%o3)
[[user properties, str, expr]]

182

Manual de Maxima

(%i4) get (foo, expr);


(%o4)
(%i5) get (foo, str);
(%o5)

5
(b + a)
Hello

qput (a
tomo, valor, indicador )

[Funcion]
Asigna valor a la propiedad de atomo que especifique indicador. Act
ua del mismo
modeo que put, excepto que sus argumentos no son evaluados.
Vease tambien get.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)
(%i9)
(%o9)

foo: aa$
bar: bb$
baz: cc$
put (foo, bar, baz);
bb
properties (aa);
[[user properties, cc]]
get (aa, cc);
bb
qput (foo, bar, baz);
bar
properties (foo);
[value, [user properties, baz]]
get (foo, baz);
bar

[Propiedad]
[Propiedad]
declare(a, rational) o declare(a, irrational) indica a Maxima que reconozca
a como una variable real racional o irracional.

rational
irrational

Vease tambien declare.


[Propiedad]
[Propiedad]
[Propiedad]
declare(a, real), declare(a, imaginary) o declare(a, complex) indican a Maxima que reconozca a como variable real, imaginaria puro o compleja, respectivamente.

real
imaginary
complex

Vease tambien declare.

rem (
atomo, indicador )

[Funcion]
Elimina del
atomo la propiedad indicada por indicador. rem deshace la asignacion
realizada por put.
rem devuelve done si
atomo tena la propiedad indicador cuando rem fue invocado,
devolviendo false si careca tal propiedad.

Captulo 11: Base de datos de Maxima

183

(a_1, p_1, ..., a_n, p_n )


[Funcion]
([a_1, ..., a_m ], [p_1, ..., p_n ], ...)
[Funcion]
("a ", operator)
[Funcion]
(a, transfun)
[Funcion]
(all, p )
[Funcion]
Elimina propiedades asociadas con atomos.
La llamada remove (a_1, p_1, ..., a_n, p_n ) elimina la propiedad p_k del atomo
a_k.
La llamada remove ([a_1, ..., a_m ], [p_1, ..., p_n ], ...) elimina las
propiedades p_1, ..., p_n de los atomos a 1, ..., a m. Puede tener mas de un par
de listas.
La llamada remove (all, p ) elimina la propiedad p de todos los atomos que la
tengan.
Las propiedades eliminadas pueden ser de las que define el sistema, como function,
macro o mode_declare; remove no elimina las propiedades definidas por put.
La llamada remove ("a ", operator) o su equivalente remove ("a ", op) elimina
de a las propiedades de operador declaradas por prefix, infix, nary, postfix,
matchfix o nofix. N
otese que el nombre del operador debe escribirse como cadena
precedida de ap
ostrofo.
La funci
on remove devuelve siempre done independientemente que haya alg
un atomo
con la propiedad especificada.
La funci
on remove no eval
ua sus argumentos.

remove
remove
remove
remove
remove

[Propiedad]
declare(a, scalar) indica a Maxima que considere a a como una variable escalar.
Vease tambien declare.

scalar

scalarp (expr )

[Funcion]
Devuelve true si expr es un n
umero, constante o variable declarada como scalar
con declare, o compuesta completamente de tales n
umeros, constantes o variables,
pero que no contengan matrices ni listas.

11.3 Funciones y variables para los hechos


activate (context_1, ..., context_n )

[Funcion]
Activa los contextos context 1, ..., context n. Los hechos en estos contextos estan
disponibles para hacer deducciones y extraer informacion. Los hechos en estos contextos no se listan al invocar facts ().
La variable activecontexts es la lista de contextos que se han activado por medio
de la funci
on activate.
[Variable del sistema]
Valor por defecto: []
La variable activecontexts es la lista de contextos que se han activado por medio de
la funci
on activate, pero que no se han activado por ser subcontextos del contexto
actual.

activecontexts

184

Manual de Maxima

(expr, integer)
[Funcion]
(expr )
[Funcion]
(expr, even)
[Funcion]
(expr, odd)
[Funcion]
La llamada askinteger (expr, integer) intenta determinar a partir de la base de
datos de assume si expr es un entero. La funcion askinteger pide mas informacion al
usuario si no encuentra la respuesta, tratando de almacenar la nueva informacion en
la base de datos si es posible. La llamada askinteger (expr ) equivale a askinteger
(expr, integer).

askinteger
askinteger
askinteger
askinteger

La llamadas askinteger (expr, even) ay askinteger (expr, odd) intentan determinar si expr es un entero par o impar, respectivamente.

asksign (expr )

[Funcion]
Primero intenta determinar si la expresion especificada es positiva, negativa o cero. Si
no lo consigue, plantear
a al usuario preguntas que le ayuden a conpletar la deduccion.
Las respuestas del usuario son almacenadas en la base de datos durante el tiempo que
dure este c
alculo. El valor que al final devuelva asksign sera pos, neg o zero.

assume (pred_1, ..., pred_n )

[Funcion]
A~
nade los predicados pred 1, ..., pred n al contexto actual. Si un predicado es inconsistente o redundante con los otros predicados del contexto actual, entonces no
es a~
nadido al contexto. El contexto va acumulando predicados con cada llamada a
assume.
La funci
on assume devuelve una lista cuyos miembros son los predicados que han sido
a~
nadidos al contexto, o los
atomos redundant o inconsistent si fuere necesario.
Los predicados pred 1, ..., pred n tan solo pueden ser expresiones formadas con los
operadores relacionales < <= equal notequal >= y >. Los predicados no pueden estar
formados por expresiones que sean del tipo igualdad = ni del tipo desigualdad #, ni
tampoco pueden ser funciones de predicado como integerp.
En cambio, s se reconocen predicados compuestos de la forma pred_1 and ... and
pred_n , pero no pred_1 or ... or pred_n . Tambien se reconoce not pred_k si
pred k es un predicado relacional. Expresiones de la forma not (pred_1 and pred_
2 ) y not (pred_1 or pred_2 ) no son reconocidas.
El mecanismo deductivo de Maxima no es muy potente; existen muchas consecuencias que, siendo obvias, no pueden ser obtenidas por is. Se trata de una debilidad
reconocida.
assume no gestiona predicados con n
umeros complejos. Si un predicado contiene un
n
umero complejo, assume devuelve inconsistent o redunant.
La funci
on assume eval
ua sus argumentos.
Veanse tambien is, facts, forget, context y declare.
Ejemplos:
(%i1) assume (xx > 0, yy < -1, zz >= 0);
(%o1)
[xx > 0, yy < - 1, zz >= 0]
(%i2) assume (aa < bb and bb < cc);
(%o2)
[bb > aa, cc > bb]

Captulo 11: Base de datos de Maxima

185

(%i3) facts ();


(%o3)
[xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
(%i4) is (xx > yy);
(%o4)
true
(%i5) is (yy < -yy);
(%o5)
true
(%i6) is (sinh (bb - aa) > 0);
(%o6)
true
(%i7) forget (bb > aa);
(%o7)
[bb > aa]
(%i8) prederror : false;
(%o8)
false
(%i9) is (sinh (bb - aa) > 0);
(%o9)
unknown
(%i10) is (bb^2 < cc^2);
(%o10)
unknown
[Variable opcional]
Valor por defecto: true
La variable assumescalar ayuda a controlar si una expresion expr para la cual
nonscalarp (expr) es false va a tener un comportamiento similar a un escalar
bajo ciertas transformaciones.
Sea expr cualquier expresi
on distinta de una lista o matriz, y sea tambien [1, 2, 3]
una lista o una matriz. Entonces, expr . [1, 2, 3] dara como resultado [expr, 2
expr, 3 expr] si assumescalar es true, o si scalarp (expr) es true, o si constantp
(expr) es true.
Si assumescalar vale true, la expresion se comportara como un escalar solo en
operaciones conmutativas, pero no en el caso de la multiplicacion no conmutativa o
producto matricial ..
Si assumescalar vale false, la expresion se comportara como un no escalar.
Si assumescalar vale all, la expresion se comportara como un escalar para todas las
operaciones.

assumescalar

[Variable opcional]
Valor por defecto: false
Si assume_pos vale true y el signo de un parametro x no puede ser determinado a
partir del contexto actual o de otras consideraciones, sign y asksign (x ) devolveran
true. Con esto se pueden evitar algunas preguntas al usuario que se generan autom
aticamente, como las que hacen integrate y otras funciones.
By default, a parameter is x such that symbolp (x ) or subvarp (x ).
Por defecto, un par
ametro x es aquel para el que symbolp (x ) o subvarp (x ) devuelven true. La clase de expresiones que se consideran parametros se puede extender
mediante la utilizaci
on de la variable assume_pos_pred.
Las funciones sign y asksign intentan deducir el signo de una expresion a partir de
los signos de los operandos que contiene. Por ejemplo, si a y b son ambos positivos,
entonces a + b tambien es positivo.

assume_pos

186

Manual de Maxima

Sin embargo, no es posible obviar todas las preguntas que hace asksign. En particular, cuando el argumento de asksign es una diferencia x - y o un logaritmo log(x ),
asksign siempre solicita una respuesta por parte del usuario, incluso cuando assume_
pos vale true y assume_pos_pred es una funcion que devuelve true para todos los
argumentos.
[Variable opcional]
Valor por defecto: false
Cuando a assume_pos_pred se le asigna el nombre de una funcion o una expresion
lambda de un u
nico argumento x, esta sera invocada para determinar si x se considera un par
ametro por assume_pos. La variable assume_pos_pred se ignora cuando
assume_pos vale false.
La funci
on assume_pos_pred es invocada por sign y por asksign con un argumento
x, el cual puede ser un
atomo, una variable subindicada o una expresion de llamada a
una funci
on. Si la funci
on assume_pos_pred devuelve true, x sera considerada como
un par
ametro por assume_pos.
Por defecto, un par
ametro x es aquel para el que symbolp (x ) o subvarp (x ) devuelven true.
Veanse tambien assume y assume_pos.
Ejemplos:
(%i1) assume_pos: true$
(%i2) assume_pos_pred: symbolp$
(%i3) sign (a);
(%o3)
pos
(%i4) sign (a[1]);
(%o4)
pnz
(%i5) assume_pos_pred: lambda ([x], display (x), true)$
(%i6) asksign (a);
x = a

assume_pos_pred

(%o6)
(%i7) asksign (a[1]);

pos
x = a
1

(%o7)
(%i8) asksign (foo (a));

pos
x = foo(a)

(%o8)
pos
(%i9) asksign (foo (a) + bar (b));
x = foo(a)
x = bar(b)
(%o9)

pos

Captulo 11: Base de datos de Maxima

187

(%i10) asksign (log (a));


x = a
Is

a - 1

positive, negative, or zero?

p;
(%o10)
(%i11) asksign (a - b);

pos
x = a
x = b
x = a
x = b

Is

b - a

positive, negative, or zero?

p;
(%o11)

context

neg
[Variable opcional]

Valor por defecto: initial


La variable context da nombre al conjunto de hechos establecidos desde assume y
forget. La funci
on assume a~
nade nuevos hechos al conjunto nombrado por context,
mientras que forget los va eliminando. Asignando a context un nuevo nombre
foo cambia el contexto actual a foo. Si el contexto foo no existe todava, se crea
autom
aticamente mediante una llamada a newcontext.
Vease contexts para una descripcion general del mecanismo que siguen los contextos.

contexts

[Variable opcional]

Valor por defecto: [initial, global]


La variable contexts es una lista que contiene los contextos existentes, incluyendo el
actualmente activo.
El mecanismo que siguen los contextos permiten al usuario agrupar y nombrar un
conjunto de hechos, que recibe el nombre de contexto. Una vez hecho esto, el usuario
puede hacer que Maxima tenga en cuenta o que olvide cualquier n
umero de hechos
sin m
as que activar o desactivar su contexto.
Cualquier
atomo simb
olico puede ser el nombre de un contexto, y los hechos contenidos
en tal contexto pueden ser almacenados hasta que se destruyan uno a uno mediante
llamadas a la funci
on forget, o que se destruyan conjuntamente invocando a kill
para eliminar el contexto al que pertenecen.
Los contextos tienen estructura jerarquica, siendo su raz el contexto global, el cual
contiene informaci
on sobre Maxima que necesitan algunas funciones. Cuando en un
contexto todos los hechos estan activos (lo que significa que estan siendo utilizados
en deducciones) lo estar
an tambien en cualquier subcontexto del contexto actual.

188

Manual de Maxima

Cuando se comienza una sesion de Maxima, el usuario estara trabajando en un contexto llamado initial, el cual tiene un subcontexto de nombre global.
Veanse tambien facts, newcontext,
deactivate, assume y forget.

supcontext,

killcontext,

deactivate (contexto_1, ..., contexto_n )

activate,
[Funcion]

Desactiva los contextos especificados contexto 1, ..., contexto n.

facts (item )
facts ()

[Funcion]
[Funcion]
Si item es el nombre de un contexto, facts (item ) devuelve una lista con los hechos
asociados al contexto especificado.
Si item no es el nombre de un contexto, facts (item ) devuelve una lista con los
hechos conocidos acerca de item en el contexto actual. Los hechos que esten activos
en contextos diferentes no aparecen en la lista.
La llamada facts (), sin argumentos, muestra el contexto actual.

forget (pred_1, ..., pred_n )


forget (L )

[Funcion]
[Funcion]
Borra los predicados establecidos por assume. Los predicados pueden ser expresiones
equivalentes, pero no necesariamente identicas, a las establecidas por assume.
La llamada forget (L ), siendo L una lista de predicados, borra todos los predicados
contenidos en ella.

is (expr )

[Funcion]
Intenta determinar si el predicado expr se puede deducir de los hechos almacenados
en la base de datos gestionada por assume.
Si el predicado se reduce a true o false, is devuelve true o false, respectivamente.
En otro caso, el valor devuelto esta controlado por la variable global prederror. Si
prederror vale true, is emite un mensaje de error; en caso contrario, is devuelve
unknown.
La instrucci
on ev(expr, pred) (que puede escribirse como expr, pred en el modo
interactivo) equivale a is(expr ).
Veanse tambien assume, facts y maybe.
Ejemplos:
is eval
ua los predicados,
(%i1) %pi > %e;
(%o1)
(%i2) is (%pi > %e);
(%o2)

%pi > %e
true

is intenta evaluar predicados a partir del conocimiento almacenado en la base de


datos de assume.
(%i1) assume (a > b);
(%o1)
(%i2) assume (b > c);

[a > b]

Captulo 11: Base de datos de Maxima

(%o2)
(%i3) is (a < b);
(%o3)
(%i4) is (a > c);
(%o4)
(%i5) is (equal (a, c));
(%o5)

189

[b > c]
false
true
false

Si is no puede evaluar el valor logico del predicado a partir de la base de datos


gestionada por assume, la variable global prederror controla el comportamiento de
is.
(%i1) assume (a > b);
(%o1)
[a > b]
(%i2) prederror: true$
(%i3) is (a > 0);
Maxima was unable to evaluate the predicate:
a > 0
-- an error. Quitting. To debug this try debugmode(true);
(%i4) prederror: false$
(%i5) is (a > 0);
(%o5)
unknown

killcontext (contexto_1, ..., contexto_n )

[Funcion]

Elimina los contextos contexto 1, ..., contexto n.


Si alguno de estos contextos es el actual, el nuevo contexto activo sera el primer
subcontexto disponible del actual que no haya sido eliminado. Si el primer contexto
no eliminado disponible es global entonces initial sera usado en su lugar. Si el
contexto initial es eliminado, se creara un nuevo contexto initial completamente
vaco.
La funci
on killcontext no elimina un contexto actualmente activo si es un subcontexto del contexto actual, o si se hace uso de la funcion activate.
La funci
on killcontext eval
ua sus argumentos y devuelve done.

maybe (expr )

[Funcion]
Intenta determinar si el predicado expr se puede deducir de los hechos almacenados
en la base de datos gestionada por assume.
Si el predicado se reduce a true o false, maybe devuelve true o false, respectivamente. En otro caso, maybe devuelve unknown.

La funci
on maybe es funcionalmente equivalente a is con prederror: false, pero el
resultado se calcula sin asignar valor alguno a prederror.
Veanse tambien assume, facts y is.
Ejemplos:
(%i1) maybe (x > 0);
(%o1)
(%i2) assume (x > 1);
(%o2)

unknown
[x > 1]

190

Manual de Maxima

(%i3) maybe (x > 0);


(%o3)

true

newcontext (nombre )

[Funcion]
Crea un nuevo contexto vaco nombre, el cual tiene a global como su u
nico subcontexto. El recien creado contexto pasa a ser el contexto actualmente activo.
La funci
on newcontext eval
ua sus argumentos y devuelve nombre.

sign (expr )

[Funcion]
Intenta determinar el signo de expr en base a los hechos almacenados en la base
de datos. Devuelve una de las siguientes respuestas: pos (positivo), neg (negativo),
zero (cero), pz (positivo o cero), nz (negativo o cero), pn (positivo o negativo), o pnz
(positivo, negativo o cero, lo que significa que el signo es desconocido).

supcontext (nombre, contexto )


supcontext (nombre )

[Funcion]
[Funcion]
Crea un nuevo contexto nombre, que tiene a contexto como subcontexto. El argumento contexto debe existir ya.
Si no se especifica context, se tomara como tal el actual.

11.4 Funciones y variables para los predicados


charfun (p )

[Funcion]
Devuelve 0 cuando el predicado p toma el valor false, y devuelve 1 cuando vale
true. Si el predicado toma un valor diferente de true y false (desconocido), entonces
devuelve una forma nominal.
Ejemplos:
(%i1) charfun(x<1);
(%o1) charfun(x<1)
(%i2) subst(x=-1,%);
(%o2) 1
(%i3) e : charfun("and"(-1 < x, x < 1))$
(%i4) [subst(x=-1,e), subst(x=0,e), subst(x=1,e)];
(%o4) [0,1,0]

compare (x, y )

[Funcion]
Devuelve un operador de comparacion op (<, <=, >, >=, = o #) de manera que is (x
op y ) tome el valor true; cuando tanto x como y dependan de %i y x # y , devuelve
notcomparable; cuando no exista tal operador o Maxima sea incapaz de determinarlo,
devolver
a unknown.
Ejemplos:
(%i1) compare(1,2);
(%o1) <
(%i2) compare(1,x);
(%o2) unknown
(%i3) compare(%i,%i);
(%o3) =

Captulo 11: Base de datos de Maxima

(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

191

compare(%i,%i+1);
notcomparable
compare(1/x,0);
#
compare(x,abs(x));
<=

La funci
on compare no intenta determinar si los dominios reales de sus argumentos
son conjuntos no vacos; as,
(%i1) compare(acos(x^2+1), acos(x^2+1) + 1);
(%o1) <
Aqu, el dominio real de acos (x^2 + 1) es el conjunto vaco.

equal (a, b )

[Funcion]

Representa la equivalencia, esto es, la igualdad de los valores.


Por s misma, equal no eval
ua ni simplifica. La funcion is intenta evaluar equal
a un resultado booleano. La instruccion is(equal(a, b )) devuelve true (o false)
si y s
olo si a y b son iguales (o no iguales) para todos los posibles valores de sus
variables, tal como lo determina ratsimp(a - b ); si ratsimp devuelve 0, las dos
expresiones se consideran equivalentes. Dos expresiones pueden ser equivalentes sin
ser sint
acticamente iguales (es decir, identicas).
Si is no consigue reducir equal a true o false, el resultado esta controlado por la
variable global prederror. Si prederror vale true, is emite un mensaje de error;
en caso contrario, is devuelve unknown.
Adem
as de is, otros operadores eval
uan equal y notequal a true o false; a saber,
if, and, or y not.
La negaci
on de equal es notequal.
Ejemplos:
Por s misma, equal no eval
ua ni simplifica.
(%i1) equal (x^2 - 1, (x + 1) * (x - 1));
2
(%o1)
equal(x - 1, (x - 1) (x + 1))
(%i2) equal (x, x + 1);
(%o2)
equal(x, x + 1)
(%i3) equal (x, y);
(%o3)
equal(x, y)
La funci
on is intenta evaluar equal a un resultado booleano. La instruccion
is(equal(a, b )) devuelve true si ratsimp(a - b ) devuelve 0. Dos expresiones
pueden ser equivalentes sin ser sintacticamente iguales (es decir, identicas).
(%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
(%o1)
0
(%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
(%o2)
true
(%i3) is (x^2 - 1 = (x + 1) * (x - 1));
(%o3)
false

192

Manual de Maxima

(%i4) ratsimp (x - (x + 1));


(%o4)
- 1
(%i5) is (equal (x, x + 1));
(%o5)
false
(%i6) is (x = x + 1);
(%o6)
false
(%i7) ratsimp (x - y);
(%o7)
x - y
(%i8) is (equal (x, y));
(%o8)
unknown
(%i9) is (x = y);
(%o9)
false
Si is no consigue reducir equal a true o false, el resultado esta controlado por la
variable global prederror.
(%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
2
2
(%o1)
[x + 2 x + 1, x - 2 x - 1]
(%i2) ratsimp (aa - bb);
(%o2)
4 x + 2
(%i3) prederror : true;
(%o3)
true
(%i4) is (equal (aa, bb));
Maxima was unable to evaluate the predicate:
2
2
equal(x + 2 x + 1, x - 2 x - 1)
-- an error. Quitting. To debug this try debugmode(true);
(%i5) prederror : false;
(%o5)
false
(%i6) is (equal (aa, bb));
(%o6)
unknown
Otros operadores eval
uan equal y notequal a true o false.
(%i1) if equal (y, y - 1) then FOO else BAR;
(%o1)
BAR
(%i2) eq_1 : equal (x, x + 1);
(%o2)
equal(x, x + 1)
(%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
2
2
(%o3)
equal(y + 2 y + 1, (y + 1) )
(%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
(%o4)
[false, true, true]
Debido a que not expr obliga a la evaluacion previa de expr, not equal(a, b ) equivale a is(notequal(a, b )).
(%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
(%o1)
[notequal(2 z, 2 z - 1), true]
(%i2) is (notequal (2*z, 2*z - 1));
(%o2)
true

Captulo 11: Base de datos de Maxima

notequal (a, b )

193

[Funcion]

Representa la negaci
on de equal (a, b ).
Ejemplos:
(%i1) equal (a, b);
(%o1)
equal(a, b)
(%i2) maybe (equal (a, b));
(%o2)
unknown
(%i3) notequal (a, b);
(%o3)
notequal(a, b)
(%i4) not equal (a, b);
(%o4)
notequal(a, b)
(%i5) maybe (notequal (a, b));
(%o5)
unknown
(%i6) assume (a > b);
(%o6)
[a > b]
(%i7) equal (a, b);
(%o7)
equal(a, b)
(%i8) maybe (equal (a, b));
(%o8)
false
(%i9) notequal (a, b);
(%o9)
notequal(a, b)
(%i10) maybe (notequal (a, b));
(%o10)
true

unknown (expr )

[Funcion]
Devuelve true si y s
olo si expr contiene un operador o funcion no reconocido por el
simplificador de Maxima.

zeroequiv (expr, v )

[Funcion]
Analiza si la expresi
on expr de variable v equivale a cero, devolviendo true, false o
dontknow.
La funci
on zeroequiv tiene estas restricciones:
1. No utilizar funciones que Maxima no sepa derivar y evaluar.
2. Si la expresi
on tiene polos en la recta real, pueden aparecer errores en el resultado,
aunque es poco probable.
3. Si la expresi
on contiene funciones que no son soluciones de ecuaciones diferenciales ordinarias de primer orden (como las funciones de Bessel) pueden presentarse resultados incorrectos.
4. El algoritmo utiliza evaluaciones en puntos aleatoriamente seleccionados. Esto
conlleva un riesgo,aunque el algoritmo intenta minimizar el error.

Por ejemplo, zeroequiv (sin(2*x) - 2*sin(x)*cos(x), x) devuelve true y


zeroequiv (%e^x + x, x) devuelve false. Por otro lado zeroequiv (log(a*b) log(a) - log(b), a) devuelve dontknow debido a la presencia del parametro b.

Captulo 12: Gr
aficos

195

12 Gr
aficos
12.1 Introducci
on a los gr
aficos
Maxima utiliza un programa gr
afico externo para hacer figuras (vease la seccion Formatos
graficos). Las funciones gr
aficas calculan un conjunto de puntos y se los pasa al programa
grafico, junto con una serie de instrucciones. Estas instrucciones pueden pasarse al programa
grafico, bien a traves de una tubera (pipe, en ingles), bien llamando al programa, junto
con el nombre del fichero en el que se almacenan los datos. Al fichero de datos se le da
el nombre maxout.interface, donde interface es el nombre del intefaz a ser utilizado
(gnuplot, xmaxima, mgnuplot o gnuplot pipes).
El fichero maxout.interface, si se utiliza, se almacena en la carpeta especificada por
la variable maxima tempdir, cuyo valor se puede cambiar por una cadena de texto que
represente la ruta a una carpeta v
alida, en la que Maxima pueda guardar nuevos ficheros.
Una vez creado el gr
afico, el fichero maxout.interface puede ejecutarse nuevamente
con el programa externo adecuado. Si una instruccion grafica de Maxima falla, este fichero
puede ser inspeccionado a fin de encontrar el origen del problema.
Junto con las funciones gr
aficas descritas en esta seccion, el paquete draw a~
nade otras
funcionalidades. N
otese que algunas opciones graficas se llaman igual en ambos contextos
graficos, pero con diferente sintaxis; para acceder a la informacion de estas opciones en el
ambito de draw, es necesario teclear ?? opc, donde opc es el nombre de la opcion.

12.2 Formatos gr
aficos
Actualmente, Maxima utiliza dos programas graficos externos: Gnuplot y Xmaxima. Existen varios formatos diferentes para estos programas, que pueden seleccionarse con la opcion
plot_format (vease la secci
on Opciones graficas).
Los formatos gr
aficos se listan a continuacion:
gnuplot (formato por defecto para Windows)
Se utiliza para ejecutar el programa externo Gnuplot, el cual debe estar instalado
en el sistema. Las instrucciones graficas y los datos se almacenan en el fichero
maxout.gnuplot.
gnuplot pipes (formato por defecto para plataformas distintas de Windows)
Este formato no est
a disponible en plataformas Windows. Es similar al formato
gnuplot, excepto por el hecho de que las instrucciones son enviadas a Gnuplot por una
tubera, mientras que los datos se almacenan en el fichero maxout.gnuplot_pipes.
Mediante esta tecnica, un u
nico proceso de Gnuplot se mantiene activo y sucesivos
graficos son enviados al mismo proceso, a menos que la tubera a Gnuplot se cierre
con la funci
on gnuplot_close(). Cuando se utiliza este formato, se puede utilizar
la funci
on gnuplot_replot para modificar un grafico que ya haba sido representado
previamente en la pantalla (vease gnuplot_replot).
Este formato debera ser utilizado u
nicamente cuando se representen los graficos por
pantalla; para gr
aficos almacenados en ficheros, mejor utilizar el formato gnuplot.

196

Manual de Maxima

mgnuplot
Mgnuplot es una interfaz para Gnuplot basada en Tk. Se incluye en la distribucion
de Maxima. Mgnuplot ofrece una interface grafica de usuario rudimentaria para gnuplot, pero tiene algunas mejoras respecto de la interface propia de gnuplot. Mgnuplot
requiere de una instalaci
on externa de Gnuplot y de Tcl/Tk.
xmaxima
Xmaxima es un interfaz gr
afico Tcl/Tk de Maxima, que tambien se puede utilizar para
representar gr
aficos cuando Maxima se ejecuta desde la consola o desde otros interfaces.
Para utilizar este formato, debe estar instalado junto con Maxima. Si Maxima se
ejecuta desde el propio Xmaxima, las instrucciones graficas y los datos se envan por el
mismo canal de comunicaci
on que se establece entre Maxima y Xmaxima (un socket).
Cuando Maxima se ejecuta desde una consola o desde otro interfaz, las instrucciones
graficas y los datos se almacenan en un fichero de nombre maxout.xmaxima, que le es
pasado a Xmaxima como argumento
En versiones anteriores, este formato se llamaba openmath, cuyo nombre se sigue aceptando como sin
onimo de xmaxima.

12.3 Funciones y variables para gr


aficos
contour_plot (expr, x_range, y_range, options, . . . )

[Funcion]
Dibuja las curvas de nivel de expr en el rectangulo x range por y range. Cualesquiera
otros argumentos adicionales se tratan como en plot3d.
contour_plot s
olo trabaja con los metodos gnuplot o gnuplot_pipes.
Vease tambien implicit_plot.
Ejemplos:
(%i1) contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4])$

Se pueden a~
nadir cualesquiera opciones que acepte plot3d; por ejemplo, la opcion
legend con un valor false, para eliminar la leyenda. Gnuplot muestra por defecto
tres lneas de contorno, pero para aumentar el n
umero de niveles es necesario a~
nadir
alg
un c
odigo nativo de Gnuplot:

Captulo 12: Gr
aficos

197

(%i1) contour_plot (u^3 + v^2, [u, -4, 4], [v, -4, 4],
[legend,false],
[gnuplot_preamble, "set cntrparam levels 12"])$

get_plot_option (keyword, index )

[Funcion]
Devuelve el valor actual de la opcion keyword almacenada en la variable global plot_
options. Si index toma el valor 1, devuelve el propio valor de keyword; si vale 2 le
a~
nade el primer par
ametro, y as sucesivamente.
Veanse tambien plot_options, set_plot_option y la seccion Opciones graficas.

make_transform ([var1, var2, var3 ], fx, fy, fz )

[Funcion]
Devuelve una funci
on que se puede utilizar con la opcion transform_xy de plot3d.
Las tres variables ficticias var1, var2 y var3 representan las tres variables de la funcion
plot3d, las dos primeras independientes y la tercera dependiente. Las tres funciones
fx, fy y fz deben depender solo de las tres variables anteriores y retornar las correspondientes x, y, z que se deben dibujar. Hay dos transformaciones predefinidas:
polar_to_xy y spherical_to_xyz.
Veanse polar_to_xy y spherical_to_xyz.
[Smbolo del sistema]
Cuando a la opci
on transform_xy de plot3d se le pasa el valor polar_to_xy, se interpretar
an las dos primeras variables independientes como polares, transformandolas
luego a coordenadas cartesianas.

polar_to_xy

plot2d (plot, x_range, . . . , options, . . . )


plot2d ([plot_1, . . . , plot_n ], . . . , options, . . . )
plot2d ([plot_1, . . . , plot_n ], x_range, . . . , options, . . . )

[Funcion]
[Funcion]
[Funcion]
Donde plot, plot 1, . . . , plot n pueden ser expresiones, nombres de funciones o una
lista de cualquiera de las siguientes formas: [discrete, [x1, ..., xn ], [y1, ...,
yn ]], [discrete, [[x1, y1 ], ..., [xn, ..., yn ]] o [parametric, x_expr, y_
expr, t_range ].
Muestra un gr
afico de una o mas expresiones como funcion de una variable.
La funci
on plot2d representa uno o mas graficos en dos dimensiones. Las expresiones
o nombres de funciones que se utilicen para definir curvas deben depender todas ellas

198

Manual de Maxima

de una u
nica variable var, siendo obligatorio utilizar x range para nombrar la variable
y darle sus valores mnimo y maximo usando la siguiente sintaxis: [variable, min,
max ].
Un gr
afico tambien se puede definir de forma discreta o parametrica. La forma discreta se utiliza para dibujar un conjunto de puntos de coordenadas dadas. Un grafico
discreto se define como una lista que empiezan con la palabra clave discrete seguida
de una o dos listas de valores numericos. Cuando haya dos listas, ambas deben ser de
igual longitud, la primera se interpreta como la de abscisas y la segunda de ordenadas.
Cuando haya una lista siguiendo la clave discrete, cada uno de sus elementos debe ser
a su vez una lista de solo dos valores, correspondientes a las coordenadas x e y.
Un gr
afico parametrico se define como una lista que empieza con la palabra clave parametric, seguida de dos expresiones o nombres de funciones y un rango parametrico.
El rango parametrico debe ser una lista formada con el nombre del parametro seguido
de sus valores mnimo y m
aximo: [param, min, max ]. El grafico se formara con los
puntos cuyas coordenadas devuelvan las dos expresiones o funciones, seg
un param
aumente desde min hasta max.
La especificaci
on del rango para el eje vertical es opcional y toma la forma [y, min,
max ] (y se utiliza siempre para el eje vertical). En caso de utilizar esta opcion, el
gr
afico mostrar
a exactamente ese rango vertical, independientemente de los valores
alcanzados por los elementos graficos. Si no se especifica el rango vertical, se ajustar
a
a los valores extremos alcanzados por las ordenadas de los puntos que aparezcan en
el gr
afico.
Cualesquiera otras opciones deben ser listas, comenzando con el nombre de la opcion
seguido de uno o m
as valores. Vease plot_options.
Si hay varias expresiones para ser dibujadas, se mostrara una leyenda que identifique a
cada una de ellas. Las etiquetas a utilizar pueden especificarse con la opcion legend.
Si no se utiliza esta opci
on, Maxima creara etiquetas a partir de las expresiones o
nombres de funciones.
Ejemplos:
Dibujando la funci
on sinusoidal:
(%i1) plot2d (sin(x), [x, -%pi, %pi])$

Captulo 12: Gr
aficos

199

Si la funci
on crece r
apidamente puede ser necesario limitar los valores del eje vertical:
(%i1) plot2d (sec(x), [x, -2, 2], [y, -20, 20])$
plot2d: some values were clipped.

El aspecto del gr
afico puede ser diferente dependiendo del programa grafico utilizado.
Por ejemplo, cuando se desactiva el marco, Xmaxima dibuja los ejes como flechas:
(%i1) plot2d ( x^2-1, [x, -3, 3], [y, -2, 10],
[box, false], [plot_format, xmaxima])$

Gr
afico con escala logartmica:

200

Manual de Maxima

(%i1) plot2d (exp(3*s), [s, -2, 2], [logy])$

Dibujando funciones especificadas por su nombre:


(%i1)
(%i2)
$g
(%i2)
(%i3)

F(x) := x^2 $
:lisp (defun |$g| (x) (m* x x x))
H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$

Ejemplo de funci
on parametrica. Curva de la mariposa:
(%i1) r: (exp(cos(t))-2*cos(4*t)-sin(t/12)^5)$
(%i2) plot2d([parametric, r*sin(t), r*cos(t),

Captulo 12: Gr
aficos

201

[t, -8*%pi, 8*%pi], [nticks, 2000]])$

Una circunferencia de dos vueltas y solo siete puntos:


(%i1) plot2d ([parametric, cos(t), sin(t),
[t, -2*%pi, 2*%pi], [nticks, 8]])$

Dibujo de una funci


on junto con la representacion parametrica de una circunferencia.
El tama~
no del gr
afico se ha ajustado con las opciones x e y para que la circunferencia
no se vea como una elipse. Estos valores son aceptables para el terminal Postscript
utilizado para producir este grafico, y puede seer necesario adaptar los valores para
otros terminales:

202

Manual de Maxima

(%i1) plot2d([[parametric, cos(t), sin(t),


[t,0,2*%pi], [nticks, 80]],
abs(x)], [x,-2,2], [y, -1.5, 1.5])$
plot2d: some values were clipped.

Puntos discretos definiendo separadamente las coordenadas x e y:


(%i1) plot2d ([discrete, [10, 20, 30, 40, 50],
[.6, .9, 1.1, 1.3, 1.4]])$

Los mismos puntos del ejemplo anterior, pero definiendo una a una las coordenadas
y sin segmentos que unan los puntos:

Captulo 12: Gr
aficos

203

(%i1) plot2d([discrete, [[10, .6], [20, .9], [30, 1.1],


[40, 1.3], [50, 1.4]]],
[style, points])$

En este ejemplo, se guarda una tabla de tres columnas en el archivo data.txt, que
luego ser
a ledo para representar las dos u
ltimas columnas:
(%i1) with_stdout ("data.txt", for x:0 thru 10 do
print (x, x^2, x^3))$
(%i2) data: read_matrix ("data.txt")$
(%i3) plot2d ([discrete, transpose(data)[2], transpose(data)[3]],
[style,points], [point_type,diamond], [color,red])$

Un gr
afico de datos empricos junto con su modelo teorico:
(%i1) xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$

204

Manual de Maxima

(%i2) plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],


[style, points, lines], [color, red, blue],
[point_type, asterisk],
[legend, "experiment", "theory"],
[xlabel, "pendulums length (cm)"],
[ylabel, "period (s)"])$

plot3d (expr, x_range, y_range, . . . , options, . . . )


plot3d ([expr_1, . . . , expr_n ], x_range, y_range, . . . , options, . . . )

[Funcion]
[Funcion]
Dibuja una o m
as superficies definidas como funciones de dos variables o en forma
parametrica
Las funciones a dibujar se pueden especificar como expresiones o nombres de funciones. Puede utilizarse el raton para hacer girar el grafico y observarlo desde distintos
angulos.
Ejemplos:
Representaci
on de una funci
on:
(%i1) plot3d (2^(-u^2 + v^2), [u, -3, 3], [v, -2, 2])$

Captulo 12: Gr
aficos

205

Uso de la opci
on z para acotar una funcion que tiende a infinito (en este caso, la
funci
on tiende a menos infinito en los ejes x e y):
(%i1) plot3d ( log ( x^2*y^2 ), [x, -2, 2], [y, -2, 2], [z, -8, 4],
[palette, false], [color, magenta, blue])$

Los valores infinitos de z se pueden obviar eligiendo una retcula que no coincida con
las asntotas; este ejemplo tambien muestra como seleccionar las paletas predefinidas,
en este caso la n
umero 4:
(%i1) plot3d (log (x^2*y^2), [x, -2, 2], [y, -2, 2],
[grid, 29, 29],
[palette, get_plot_option(palette,5)])$

Dos superficies en el mismo grafico, compartiendo el mismo dominio; en Gnuplot,


ambas superfifies comparten la misma paleta:
(%i1) plot3d ([2^(-x^2 + y^2), 4*sin(3*(x^2+y^2))/(x^2+y^2),

206

Manual de Maxima

[x, -3, 3], [y, -2, 2]])$

Las mismas superficies, pero con diferentes dominios; en Xmaxima cada superficies
usa una paleta diferente, elegida de la lista definida por la opcion palette:
(%i1) plot3d ([[2^(-x^2 + y^2),[x,-2,2],[y,-2,2]],
4*sin(3*(x^2+y^2))/(x^2+y^2),
[x, -3, 3], [y, -2, 2]], [plot_format,xmaxima])$

La botella de Klein, definida parametricamente:


(%i1) expr_1:5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3.0)-10.0$
(%i2) expr_2:-5*sin(x)*(cos(x/2)*cos(y) + sin(x/2)*sin(2*y) + 3.0)$
(%i3) expr_3: 5*(-sin(x/2)*cos(y) + cos(x/2)*sin(2*y))$

Captulo 12: Gr
aficos

207

(%i4) plot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],


[y, -%pi, %pi], [grid, 40, 40])$

Gr
afico de un arm
onico esferico, utilizando las transformaciones predefinidas
spherical_to_xyz:
(%i1) plot3d (sin(2*theta)*cos(phi), [theta, 0, %pi],
[phi, 0, 2*%pi],
[transform_xy, spherical_to_xyz], [grid,30,60])$

Uso de la transformaci
on predefinida polar_to_xy. Este ejemplo tambien muestra
como eliminar el marco y la leyenda:

208

Manual de Maxima

(%i1) plot3d (r^.33*cos(th/3), [r, 0, 1], [th, 0, 6*%pi],


[grid, 12, 80],
[transform_xy, polar_to_xy], [box, false],
[legend,false])$

Dibujo de una esfera utilizando la transformacion esferica. En Xmaxima, los tres


ejes utilizan escalas proporcionales, manteniendo la forma simetrica de la esfera. Se
utiliza una paleta con color degradado:
(%i1) plot3d ( 5, [theta, 0, %pi], [phi, 0, 2*%pi],
[plot_format,xmaxima],
[transform_xy, spherical_to_xyz],
[palette,[value,0.65,0.7,0.1,0.9]])$

Definici
on de una funci
on con dos variables utilizando una matriz. Notese la comilla
simple en la definici
on de la funcion para prevenir que plot3d falle al detectar que la
matriz necesita ndices enteros:
(%i1) M: matrix([1, 2, 3, 4], [1, 2, 3, 2], [1, 2, 3, 4],
[1, 2, 3, 3])$
(%i2) f(x, y) := float(M [round(x), round(y)])$

Captulo 12: Gr
aficos

209

(%i3) plot3d (f(x,y), [x, 1, 4], [y, 1, 4], [grid, 4, 4])$


apply: subscript must be an integer; found: round(x)

Asignando a la opci
on elevation el valor cero, una superficie puede verse como una
aplicaci
on en la que cada color representa un nivel diferente. La opcion colorbox se
utiliza para mostrar la correspondencia entre colores y niveles; las lneas de la retcula
se desactivan para facilitar la visualizacion de los colores:
(%i1) plot3d (cos (-x^2 + y^3/4), [x, -4, 4], [y, -4, 4],
[mesh_lines_color, false], [elevation, 0], [azimuth, 0],
[colorbox, true], [grid, 150, 150])$

Vease tambien la secci


on Opciones graficas.
[Variable global]
Los elementos de esta lista establecen las opciones por defecto para los graficos. Si
una opci
on est
a presente en una llamada a plot2d o a plot3d, este valor adquiere
prevalencia sobre las opciones por defecto. En otro caso se utilizara el valor que
tenga en plot_options. Las opciones por defecto se asignan mediante la funcion
set_plot_option.

plot_options

210

Manual de Maxima

Cada elemento de plot_options es una lista de dos o mas elementos, el primero


de los cuales es el nombre de la opcion, siendo los siguientes los valores que toma.
En algunos casos el valor asignado es a su vez una lista, que puede contener varios
elementos.
Veanse tambien set_plot_option, get_option y la seccion Opciones graficas.

set_plot_option (option )

[Funcion]
Acepta la mayor parte de opciones listadas en la seccion Opciones graficas y las
almacena en la variable global plot_options.
La funci
on set_plot_option eval
ua su argumento y devuelve la lista completa plot_
options tal como queda despues de la actualizacion.
Veanse tambien plot_options, get_option y la seccion Opciones graficas.

Ejemplos:
Modificaci
on de los valores para grid.
(%i1) set_plot_option ([grid, 30, 40]);
(%o1) [[t, - 3, 3], [grid, 30, 40], [transform_xy, false],
[run_viewer, true], [axes, true], [plot_format, gnuplot_pipes],
[color, blue, red, green, magenta, black, cyan],
[point_type, bullet, circle, plus, times, asterisk, box, square,
triangle, delta, wedge, nabla, diamond, lozenge],
[palette, [hue, 0.25, 0.7, 0.8, 0.5],
[hue, 0.65, 0.8, 0.9, 0.55], [hue, 0.55, 0.8, 0.9, 0.4],
[hue, 0.95, 0.7, 0.8, 0.5]], [gnuplot_term, default],
[gnuplot_out_file, false], [nticks, 29], [adapt_depth, 5],
[gnuplot_preamble, ], [gnuplot_default_term_command,
set term pop], [gnuplot_dumb_term_command, set term dumb 79 22],
[gnuplot_ps_term_command, set size 1.5, 1.5;set term postscript \
eps enhanced color solid 24], [plot_realpart, false]]
[Smbolo del sistema]
Cuando a la opci
on transform_xy de plot3d se le pasa el valor spherical_to_xyz,
se interpretar
an las variables independientes como esfericas, transformandolas luego
a coordenadas cartesianas.

spherical_to_xyz

12.4 Opciones gr
aficas
Todas las opciones consisten en una lista que comienza con una palabra clave seguida de uno
o mas valores. La mayor parte de las opciones pueden utilizarse con cualquiera de las funciones gr
aficas plot2d, plot3d, contour plot y implicit plot, o en la funcion set plot option.
Las excepciones se indican en la lista siguiente.

adapt_depth [adapt depth, integer ]

[Opcion para plot]

Valor por defecto: 5


N
umero m
aximo de particiones utilizado por el algoritmo adaptativo de
representaci
on gr
afica.

Captulo 12: Gr
aficos

211

axes [axes, symbol ]

[Opcion para plot]

Valor por defecto: true


El argumento symbol puede valer true, false, x o y. Si vale false, no se mostraran
los ejes; si es igual a x o y, solo ese eje sera el que se representa; si vale true, se
mostrar
an ambos ejes.
Esta opci
on solo es relevante para plot2d y implicit_plot.

azimuth [azimuth, number ]

[Opcion para plot]

Valor por defecto: 30


Un gr
afico plot3d se puede interpretar como comenzando horizontalmente en el plano
xy; a partir de ah, la coordenada z se eleva perpendicularmente al papel. El eje z
gira entonces alrededor del eje x un angulo igual a elevation, luego gira el plano
xy alrededor del nuevo eje z un angulo azimuth. Esta opcion establece el valor para
azimuth en grados sexagesimales.
Vease tambien elevation.

box [box, symbol ]

[Opcion para plot]


Valor por defecto: true
Si vale true, se representar
a el marco para el grafico; si vale false, no.

color [color, color_1, . . . , color_n ]

[Opcion para plot]


Valor por defecto: blue, red, green, magenta, black, cyan
Define el color para las curvas en plot2d y implicit_plot. En plot3d define los
colores para el enrejado de las superficies si no se utiliza la paleta; una cara de la
superficie tendr
a color 1 y la otra color 2, o el mismo color si se especifica solo uno.
Si hay m
as curvas o superficies que caras, los colores se repetiran secuencialmente.
Con Gnuplot, los colores pueden ser: azul, rojo, verde, magenta, negro y cian; con
Xmaxima, los colores pueden ser esos mismos, o una cadena de texto que comienza
con el car
acter # seguido de seis dgitos hexadecimales: dos para la componente roja,
otros dos para la verde y otros dos para la azul. Si se introduce un nombre de color
no reconocido, en su lugar se utilizara el negro.

colorbox [colorbox, symbol ]

[Opcion para plot]


Valor por defecto: false
El argumento symbol puede valer true o false. Si vale true y plot3d utiliza la
paleta de colores para representar diferentes valores de z, se dibujara un rectangulo
en la parte derecha, indicando los colores utilizados para los diferentes valores de z.
Esta opci
on no funciona en Xmaxima.

elevation [elevation, number ]

[Opcion para plot]

Valor por defecto: 60


Un gr
afico plot3d se puede interpretar como comenzando horizontalmente en el plano
xy; a partir de ah, la coordenada z se eleva perpendicularmente al papel. El eje z
gira entonces alrededor del eje x un angulo igual a elevation, luego gira el plano
xy alrededor del nuevo eje z un angulo azimuth. Esta opcion establece el valor para
elevation en grados sexagesimales.
Vease tambien azimuth.

212

Manual de Maxima

grid [grid, integer, integer ]

[Opcion para plot]

Valor por defecto: 30, 30


Establece el n
umero de puntos para los puntos de la rejilla en las direcciones x e y en
escenas 3D.

legend [legend, string_1, . . . , string_n ]


legend [legend, false ]

[Opcion para plot]


[Opcion para plot]
Especifica las etiquetas para los graficos en los que aparecen varios objetos. Si hay
mas expresiones que etiquetas, estas se repetiran. Con el valor false no se mostraran
etiquetas. Por defecto se pasaran los nombres de las expresiones o funciones, o las
palabras discrete1, discrete2, . . . , para graficos de puntos. Esta opcion no se
puede utilizar con set plot option.

logx [logx]

[Opcion para plot]


Hace que el eje de abscisas se dibuje en la escala logartmica. Esta opcion no se puede
utilizar con set plot option.

logy [logy]

[Opcion para plot]


Hace que el eje de ordenadas se dibuje en la escala logartmica. Esta opcion no se
puede utilizar con set plot option.

mesh_lines_color [mesh lines color, color ]

[Opcion para plot]


Valor por defecto: black
Establece el color del enrejado en los graficos creados por plot3d cuando se utiliza
una paleta. Acepta los mismos colores que la opcion color. Tambien se le puede dar
el valor false para eliminar el enrejado.

nticks [nticks, integer ]

[Opcion para plot]


Valor por defecto: 29
Cuando se dibujan funciones con plot2d, establece el n
umero inicial de puntos utilizado por la rutina gr
afica adaptativa. Cuando se dibujan funciones con plot3d o
parametricas con plot2d, su valor es igual al n
umero de puntos que se representaran
en el gr
afico.

palette [palette, [palette_1 ], . . . , [palette_n ]]


palette [palette, false ]

[Opcion para plot]


[Opcion para plot]
Valor por defecto: [hue, 0.25, 0.7, 0.8, 0.5], [hue, 0.65, 0.8, 0.9, 0.55], [hue, 0.55, 0.8,
0.9, 0.4], [hue, 0.95, 0.7, 0.8, 0.5]
Puede consistir en una paleta o en una lista de varias paletas. Cada paleta es una
lista con una palabra clave seguida de cuatro n
umeros. Los tres primeros n
umeros,
que deben tomar valores entre 0 y 1, definen el matiz, la saturacion y el valor de un
color b
asico a asignar al mnimo valor de z. La palabra clave especifica cual de los
tres atributos (hue, saturation o value) incrementara de acuerdo con los valores de
z. El u
ltimo n
umero se corresponde con el incremento del maximo valor de z. Este
u
ltimo n
umero puede ser mayor que 1 o negativo.
Gnuplot solo utiliza la primera paleta de la lista; Xmaxima utilizara las paletas de la
lista secuencialmente cuando haya que representar varias superficies conjuntamente;
si el n
umero de paletas no es suficiente, se repetiran tambien de forma secuencial.

Captulo 12: Gr
aficos

213

El color del enrrejado de la superficie se establece con mesh_lines_color. Si palette


tiene el valor false, las superficies se representan solo con el enrrejado; en tal caso,
el color de las lneas ser
a el determinado por color.

plot_format [plot format, format ]

[Opcion para plot]


Valor por defecto: en sistemas Windows, gnuplot; en otros, gnuplot_pipes
Establece el formato a utlizar por las rutinas graficas.
Debe tomar uno de los siguientes valores: gnuplot, xmaxima, mgnuplot o gnuplot_
pipes.

plot_realpart [plot realpart, symbol ]

[Opcion para plot]

Valor por defecto: false


Cuando vale true, se representa graficamente la parte real de las funciones; equivale a
ejecutar realpart(funci
on ). Si vale false, no se representa nada cuando la funcion
no devuelva un valor real. Por ejemplo, si x es negativo, log(x) devuelve un valor
negativo cuya parte real es log(abs(x)); en tal caso, si plot_realpart vale true,
log(-5) se representa como log(5), mientras que no se representa nada si plot_
realpart vale false.

point_type [point type, type_1, . . . , type_n ]

[Opcion para plot]


Valor por defecto: bullet, circle, plus, times, asterisk, box, square, triangle,
delta, wedge, nabla, diamond, lozenge
En Gnuplot, cada conjunto de puntos que vaya a ser representado con los estilos
points o linespoints se hara con objetos tomados de esta lista en orden secuencial.
Si hay m
as conjuntos de puntos que objetos en la lista, se iran repitiendo de forma
secuencial. Los objetos que pueden ser utilizados son: bullet, circle, plus, times,
asterisk, box, square, triangle, delta, wedge, nabla, diamond o lozenge

psfile [psfile, string ]

[Opcion para plot]


Guarda el gr
afico en formato Postscript con nombre string en lugar de mostrarlo
en pantalla. Por defecto, el fichero se creara en la carpeta definida en la variable
maxima tempdir, cuyo valor se podra cambiar para almacenar el fichero en otra
carpeta.

run_viewer [run viewer, symbol ]

[Opcion para plot]

Valor por defecto: true


Controla si el visor apropiado para la salida grafica debe ejecutarse o no.

style [style, type_1, . . . , type1_n ]


style [style, [style_1 ], . . . , [style_n ]]

[Opcion para plot]


[Opcion para plot]
Valor por defecto: lines (dibuja todos los puntos unidos por lneas de ancho 1 y con
el primer color de la lista de la opcion color).

Estilos a utilizar para las funciones o conjuntos de datos en graficos 2d. A la palabra
style debe seguirle uno o mas estilos. Si hay mas funciones o conjuntos de datos
que estilos, estos se repetir
an. Los estilos que se admiten son: lines para segmentos
lineales, points para puntos aislados, linespoints para segmentos y puntos, dots para
peque~
nos puntos aislados. Gnuplot tambien acepta el estilo impulses.

214

Manual de Maxima

Los estilos se pueden escribir como elementos de una lista, junto con algunos
par
ametros adicionales. lines acepta uno o dos n
umeros: el ancho de la lnea y
un entero que identifica el color. Los codigos de color por defecto son: 1, azul; 2,
rojo; 3, magenta; 4, naranja; 5, marron; 6, verde lima; 7, aguamarina. En caso de
utilizar Gnuplot con un terminal diferente de X11, estos colores pueden cambiar; por
ejemplo, bajo la opci
on [gnuplot term,ps], el ndice 4 se corresponde con el negro en
lugar del naranja.
points acepta uno, dos o tres parametros; el primer parametro es el radio de los
puntos, el segundo es un entero para seleccionar el color, con igual codificacion que
en lines y el tercer par
ametro solo es utilizado por Gnuplot y hace referencia a varios
objetos para representar los puntos. Los tipos de objetos disponibles son: 1, crculos
rellenos; 2, circunferencias; 3, +; 4, x; 5, *; 6, cuadrados rellenos; 7, cuadrados huecos;
8, tri
angulos rellenos; 9, triangulos huecos; 10, triangulos rellenos invertidos; 11,
tri
angulos huecos invertidos; 12, rombos rellenos; 13, rombos huecos.
linesdots acepta hasta cuatro parametros: ancho de lnea, radio de los puntos, color
y tipo de objetos para representar puntos.
Veanse tambien color y point_type.

transform_xy [transform xy, symbol ]

[Opcion para plot]

Valor por defecto: false


La variable symbol puede ser false o el resultado devuelto por la funcion transform_
xy. Si es distinto de false, se utiliza para transformar las tres coordenadas en plot3d.
Veanse make_transform, polar_to_xy y spherical_to_xyz.

x [x, min, max ]

[Opcion para plot]


Cuando se utiliza como primera opcion en una instruccion para un grafico 2D (o
cualquiera de las dos primeras en un grafico 3D), indica que su primera variable
independiente es x y ajusta su rango. Tambien se puede utilizar despues de la primera
opci
on (o despues de la segunda opcion en un grafico 3D) para definir el dominio
horizontal que se representara en el grafico.

xlabel [xlabel, string ]

[Opcion para plot]


Especifica la etiqueta para el primer eje. Si no se utiliza esta opcion, la etquieta ser
a
el nombre de la variable independiente, cuando se utilicen plot2d o implicit_plot,
o el nombre de la primera variable cuando se utilicen plot3d o contour_plot, o
la primera expresi
on en el caso de una curva parametrica. No puede utilizarse con
set plot option.

y [y, min, max ]

[Opcion para plot]


Cuando se utiliza como una de las dos primeras opciones en plot3d, indica que una de
las variables independientes es y y ajusta su rango. En otro caso, define el dominio
de la segunda variable que se mostrara en el grafico.

ylabel [ylabel, string ]

[Opcion para plot]


Especifica la etiqueta para el segundo eje. Si no se utiliza esta opcion, la etiqueta ser
a
y, cuando se utilicen plot2d o implicit_plot, o el nombre de la segunda variable
cuando se utilicen plot3d o contour_plot, o la segunda expresion en el caso de una
curva parametrica. No puede utilizarse con set plot option.

Captulo 12: Gr
aficos

215

z [z, min, max ]

[Opcion para plot]


Se utiliza en plot3d para ajustar el rango de valores de z que se mostrara en el gafico.

zlabel [zlabel, string ]

[Opcion para plot]


Especifica la etiqueta para el tercer eje cuando se utiliza plot3d. Si no se utiliza esta
opci
on, la etiqueta ser
a z en el caso de superficies, o la tercera expresion en el caso
de una curva parametrica. No puede utilizarse con set plot option y se ignora en
plot2d y implicit_plot.

12.5 Opciones para Gnuplot


Hay varias opciones gr
aficas que son especficas de Gnuplot. Algunas de ellas son comandos
propios de Gnuplot que se especifican como cadenas de texto. Cons
ultese la documentacion
de Gnuplot para m
as detalles.
[Opcion para plot]
Establece el terminal de salida para Gnuplot.
default (valor por defecto)
Gnuplot muestra el gr
afico en una ventana grafica.
dumb
Gnuplot muestra el gr
afico en la consola de Maxima en estilo ASCII artstico.
ps
Gnuplot genera c
odigo en lenguaje PostScript. Si a la opcion gnuplot_out_file
se le da el valor filename, Gnuplot escribe el codigo PostScript en filename. En
caso contrario, se guarda en el archivo maxplot.ps.
Cualquier otro terminal admitido por Gnuplot.
Gnuplot puede generar graficos en otros muchos formatos, tales como png, jpeg,
svg etc. Para crear gr
aficos en cualquera de estos formatos, a la opcion gnuplot_
term se le puede asignar cualquiera de los terminales admitidos por Gnuplot,
bien por su nombre (smbolo) bien con la especificacion completa del terminal (cadena). Por ejemplo, [gnuplot_term,png] guarda el grafico en formato
PNG (Portable Network Graphics), mientras que [gnuplot_term,"png size
1000,1000"] lo hace con dimensiones 1000x1000 pxeles. Si a la opcion gnuplot_
out_file se le da el valor filename, Gnuplot escribe el codigo PostScript en filename. En caso contrario, se guarda en el archivo maxplot.term , siendo term el
nombre del terminal.

gnuplot_term

[Opcion para plot]


Cuando se utiliza conjuntamente con la opcion gnuplot_term, puede utilizarse para
almacenar el gr
afico en un fichero en uno de los formatos aceptados por Gnuplot. Si
se quiere crear un fichero Postscript se puede utilizar la opcion psfile, que tambien
funciona con Openmath.
[gnuplot_term, png], [gnuplot_out_file, "graph3.png"]

gnuplot_out_file

[Opcion para plot]


Controla la utilizaci
on del modo PM3D, que tiene capacidades avanzadas para graficos
tridimensionales. PM3D s
olo esta disponible en versiones de Gnuplot posteriores a la
3.7. El valor por defecto de gnuplot_pm3d es false.

gnuplot_pm3d

216

Manual de Maxima

[Opcion para plot]


Introduce instrucciones de Gnuplot antes de que se haga el grafico. Puede utilizarse
cualquier comando v
alido de Gnuplot. Si interesa introducir varios comandos se
separar
an con punto y coma. El valor por defecto de gnuplot_preamble es la cadena
vaca "".

gnuplot_preamble

gnuplot_curve_titles

[Opcion para plot]

Opci
on obsoleta que ha sido sustituida por legend.

gnuplot_curve_styles

[Opcion para plot]

Opci
on obsoleta que ha sido sustituida por style.
[Opcion para plot]
Comando de Gnuplot para establecer el tipo de terminal por defecto. El valor por
defecto es set term pop.

gnuplot_default_term_command

[Opcion para plot]


Comando de Gnuplot para establecer el tipo de terminal para el terminal oculto. El
valor por defecto es "set term dumb 79 22", que da una salida de texto de 79 por 22
caracteres.

gnuplot_dumb_term_command

[Opcion para plot]


Comando de Gnuplot para establecer el tipo de terminal para el terminal PostScript.
El valor por defecto es "set size 1.5, 1.5;set term postscript eps enhanced
color solid 24", que establece un tama~
no de 1.5 veces el valor por defecto de
gnuplot, junto con un tama~
no de fuente de 24, entre otras cosas. Cons
ultese la
documentaci
on de gnuplot para mas informacion sobre set term postscript.

gnuplot_ps_term_command

12.6 Funciones para el formato Gnuplot pipes


gnuplot_start ()

[Funcion]
Inicializa una tubera hacia Gnuplot, con el fin de ser utilizada para utilizar el formato
gnuplot_pipes. No es necesario inicializarla manualmente antes de hacer graficos.

gnuplot_close ()

[Funcion]
Cierra la tubera hacia Gnuplot que haya sido utilizada para hacer graficos.

gnuplot_restart ()

[Funcion]
Cierra la tubera hacia Gnuplot que haya sido utilizada para hacer graficos e inicializa
una nueva.

gnuplot_replot ()
gnuplot_replot (s )

[Funcion]
[Funcion]
Actualiza la ventana de Gnuplot. Si gnuplot_replot es invocada con un comando
de Gnuplot en la cadena s, entonces s es enviada a Gnuplot antes de redibujar la
ventana.

gnuplot_reset ()

[Funcion]
Resetea Gnuplot cuando se utiliza el formato gnuplot_pipes. Para actualizar la
ventana de Gnuplot inv
oquese a gnuplot_replot despues de gnuplot_reset.

Captulo 13: Lectura y escritura

217

13 Lectura y escritura

13.1 Comentarios
En Maxima, un comentario es cualquier texto encerrado entre las marcas /* y */.
El analizador sint
actico de Maxima trata los comentarios como espacios en blanco a
efectos de encontrar tokens en el flujo de entrada. Una entrada tal como a/* foo */b
contiene dos tokens, a y b, no un u
nico token ab. En cualquier otro contexto, los comentarios
son ignorados por Maxima; no se almacenan ni sus contenidos ni sus localizaciones.
Los comentarios pueden anidarse hasta una profundidad arbitraria. Las marcas /* y */
deben emparejarse y debe haber igual n
umero de ambos.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

/* aa is a variable of interest */ aa : 1234;


1234
/* Value of bb depends on aa */ bb : aa^2;
1522756
/* User-defined infix operator */ infix ("b");
b
/* Parses same as a b c, not abc */ a/* foo */b/* bar */c;
a b c
/* Comments /* can be nested /* to any depth */ */ */ 1 + xyz;
xyz + 1

13.2 Archivos
Un archivo no es m
as que una
area de un cierto dispositivo de almacenamiento que contiene
datos o texto. Los archivos se agrupan en los discos en "directorios", que son listas de
archivos. Instrucciones que operan con archivos son:
appendfile
closefile
file_search
file_search_demo
file_type
load
loadprint
pathname_type
stringout

batch
file_output_append
file_search_maxima
file_search_usage
file_type_lisp
load_pathname
pathname_directory
printfile
with_stdout

batchload
filename_merge
file_search_lisp
file_search_tests
file_type_maxima
loadfile
pathname_name
save
writefile

Cuando el nombre de un fichero se pasa a funciones como plot2d, save o writefile y en


el no se incluye la ruta de acceso, Maxima almacena el fichero en la carpeta de trabajo actual.
La ubicaci
on de la carpeta de trabajo depende del sistema operativo y de la instalacion.

218

Manual de Maxima

13.3 Funciones y variables para lectura y escritura


appendfile (filename )

[Funcion]
A~
nade informaci
on de la consola a filename, de igual manera que lo hace writefile,
pero con la salvedad de que si el archivo ya existe la informacion queda a~
nadida al
final de su contenido.
La funci
on closefile cierra los archivos abiertos por appendfile o writefile.

batch (filename )
batch (filename, option)

[Funcion]
[Function]
batch(filename ) lee expresiones de Maxima desde filename y las eval
ua. La funcion
batch busca filename en la lista file_search_maxima. Vease file_search.
batch(filename, test) es como run_testsuite con la opcion display_all=true.
En este caso batch busca filename en la lista file_search_maxima y no en file_
search_tests como hace run_testsuite. Ademas, run_testsuite ejecuta tests que
est
an en la lista testsuite_files. Con batch es posible ejecutar cualquier fichero
que se encuentre en file_search_maxima en modo de prueba.
El contenido de filename debe ser una secuencia de expresiones de Maxima, cada una
de las cuales termina en ; o $. La variable especial % y la funcion %th se refieren a
resultados previos dentro del archivo. El archivo puede incluir construcciones del tipo
:lisp. Espacios, tabulaciones y saltos de lnea en el archivo se ignoran. Un archivo
de entrada v
alido puede crearse con un editor de texto o con la funcion stringout.
La funci
on batch lee las expresiones del archivo filename, muestra las entradas en la
consola, realiza los c
alculos solicitados y muestra las expresiones de los resultados. A
las expresiones de entrada se les asignan etiquetas, as como a las de salida. La funcion
batch eval
ua todas las expresiones de entrada del archivo a menos que se produzca
un error. Si se le solicita informacion al usuario (con asksign o askinteger, por
ejemplo) batch se detiene para leer la nueva informacion para luego continuar.
Es posible detener batch tecleando control-C desde la consola. El efecto de controlC depende del entorno Lisp instalado.
La funci
on batch tiene diversas aplicaciones, tales como servir de almacen de codigo
escrito por el usuario, suministrar demostraciones libres de errores o ayudar a organizar el trabajo del usuario en la resolucion de problemas complejos.
La funci
on batch eval
ua su argumento y devuelve la ruta hacia filename en formato
cadena cuando es invocada sin segundo argumento o con la opcion demo. Cuando es
llamada con la opci
on test, devuelve la lista vaca [] o una lista con filename y los
n
umeros de tests que han fallado.
Veanse tambien load, batchload y demo.

batchload (filename )

[Funcion]
Lee expresiones de Maxima desde filename y las eval
ua sin mostrar las entradas ni
las salidas y sin asignarles etiquetas. Sin embargo, las salidas producidas por print
o describe s se muestran.
La variable especial % y la funcion %th se refieren a resultados previos del interprete
interactivo, no a los del propio archivo. El archivo no puede incluir construcciones
del tipo :lisp.

Captulo 13: Lectura y escritura

219

La funci
on batchload devuelve la ruta de filename en formato de cadena.
La funci
on batchload eval
ua sus argumentos.
Veanse tambien batch y load.

closefile ()

[Funcion]
La funci
on closefile cierra los archivos abiertos por appendfile o writefile.

file_output_append

[Variable opcional]

Valor por defecto: false


La variable file_output_append controla si las funciones de escritura de ficheros
a~
naden informaci
on o sustituyen el fichero de salida. Cuando file_output_append
toma el valor true, estas funciones amplan el contenido de sus ficheros de salida;
en otro caso, sustituyen el fichero anterior de igual nombre por otro con el nuevo
contenido.
Las funciones save, stringout y with_stdout se ven afectadas por el valor que
tome la variable file_output_append. Otras funciones que tambien escriben en
ficheros de salida no tienen en cuenta este valor; en concreto, las funciones para la
representaci
on de gr
aficos y las de traduccion siempre sustituyen el fichero anterior
por uno nuevo de igual nombre, mientras que las funciones tex y appendfile siempre
a~
naden informaci
on al fichero de salida sin eliminar la informacion anterior.

filename_merge (path, filename )

[Funcion]
Construye una ruta modificada a partir de path y filename. Si la componente final de path es de la forma ###.something , la componente se reemplaza con filename.something . En otro caso, la componente final se reemplaza simplemente por
filename.
El resultado es un objeto Lisp de tipo pathname.

file_search (filename )
file_search (filename, pathlist )

[Funcion]
[Funcion]
La funci
on file_search busca el archivo filename y devuelve su ruta como una
cadena; si no lo encuentra, file_search devuelve false. La llamada file_search
(filename ) busca en los directorios de b
usqueda por defecto, que son los especificados
por las variables file_search_maxima, file_search_lisp y file_search_demo.
La funci
on file_search analiza primero si el nombre del argumento existe antes de
hacerlo coincidir con los comodines de los patrones de b
usqueda de archivos. Vease
file_search_maxima para mas informacion sobre patrones de b
usqueda de archivos.
El argumento filename puede ser una ruta con nombre de archivo, o simplemente el
nombre del archivo, o, si el directorio de b
usqueda de archivo incluye un patron de
b
usqueda, es suficiente con el nombre de archivo sin extension. Por ejemplo,
file_search ("/home/wfs/special/zeta.mac");
file_search ("zeta.mac");
file_search ("zeta");
todos buscan el mismo archivo, dando por hecho que el archivo existe y que
/home/wfs/special/###.mac esta en file_search_maxima.

220

Manual de Maxima

La llamada file_search (filename, pathlist ) busca solamente en los directorios


especificados por pathlist, que es una lista de cadenas. El argumento pathlist ignora
los directorios de b
usqueda por defecto, de manera que si se da la lista de rutas,
file_search busca solamente en ellas y no en los directorios por defecto. Incluso si
hay un u
nico directorio en pathlist, debe ser suministrado como una lista de un u
nico
elemento.
El usuario puede modificar los directorios de b
usqueda por defecto; vease para ello
See file_search_maxima.
La funci
on file_search es llamada por load con los directorios de b
usqueda file_
search_maxima y file_search_lisp.
[Variable opcional]
[Variable opcional]
[Variable opcional]
[Variable opcional]
[Variable opcional]
Estas variables especifican listas de directorios en los que deben buscar la funciones
load, demo y algunas otras. Los valores por defecto de estas variables nombran
directorios de la instalaci
on de Maxima.
El usuario puede modificar estas variables, bien reemplazando los valores por defecto,
bien a~
nadiendo nuevos directorios. Por ejemplo,
file_search_maxima: ["/usr/local/foo/###.mac",
"/usr/local/bar/###.mac"]$
reemplaza el valor por defecto de file_search_maxima, mintras que
file_search_maxima: append (file_search_maxima,
["/usr/local/foo/###.mac", "/usr/local/bar/###.mac"])$
a~
nade dos directorios m
as. Puede ser conveniente colocar una expresion como esta en
el archivo maxima-init.mac, de manera que la ruta de b
usqueda de ficheros se asigne
autom
aticamente cada vez que arranca Maxima.
Se pueden especificar varias extensiones de archivos y rutas con comodines especiales.
La cadena ### representa el nombre del archivo buscado y una lista separada de comas
y encerrada entre llaves, {foo,bar,baz} representa m
ultiples cadenas. Por ejemplo,
suponiendo que se busca el nombre neumann,
"/home/{wfs,gcj}/###.{lisp,mac}"
se interpreta como /home/wfs/neumann.lisp,
/home/gcj/neumann.lisp,
/home/wfs/neumann.mac y /home/gcj/neumann.mac.

file_search_maxima
file_search_lisp
file_search_demo
file_search_usage
file_search_tests

file_type (filename )

[Funcion]
Devuelve una descripci
on del contenido de filename basada en la extension, sin intentar abrir el archivo para inspeccionar su contenido.
El valor devuelto es un smbolo object, lisp o maxima. Si la extension es "mac",
"mc", "demo", "dem", "dm1", "dm2", "dm3" o "dmt", file_type devuelve maxima.
Si la extensi
on es "l", "lsp" o "lisp", file_type devuelve lisp. Si la extension no es
ninguna de las anteriores, file_type devuelve object.
Vease tambien pathname_type.

Captulo 13: Lectura y escritura

221

Ejemplos:
(%i2) map(file_type,["test.lisp", "test.mac", "test.dem", "test.txt"]);
(%o2)
[lisp, maxima, maxima, object]
[Variable opcional]

file_type_lisp
Valor por defecto: [l, lsp, lisp]

file_type_lisp es una lista con extensiones de ficheros que Maxima reconoce como
fuente de Lisp.
Vease tambien file_type
[Variable opcional]

file_type_maxima
Valor por defecto: [mac, mc, demo, dem, dm1, dm2, dm3, dmt]

file_type_maxima es una lista con extensiones de ficheros que Maxima reconoce


como fuente de Maxima.
Vease tambien file_type

load (filename )

[Funcion]
Eval
ua las expresiones del archivo filename, trayendo variables, funciones y otros
objetos a Maxima. Una asignacion hecha previamente a una variable en Maxima
ser
a destruida por otra asignacion que se le haga en filename. Para encontrar el
fichero, load llama a file_search con file_search_maxima y file_search_lisp
como directorios de b
usqueda. Si la llamada a load funciona correctamente, devuelve
el nombre del fichero; en caso contrario, load muestra un mensaje de error.
La funci
on load trabaja indistintamente con codigo Lisp y Maxima. Los ficheros creados con save, translate_file y compile_file, que crea codigo Lisp, y stringout,
que crea c
odigo Maxima, todos ellos pueden ser procesados por load. La funcion load
llama a loadfile para cargar archivos en Lisp y a batchload para cargar archivos
en Maxima.
La funci
on load no reconoce las construcciones de tipo :lisp en ficheros de Maxima.
Adem
as, mientras se est
a procesando filename, las variables globales _, __, % y %th
mantienen los valores que tenan cuando se realizo la llamada a load.
Veanse tambien loadfile, batch, batchload y demo; loadfile procesa archivos en
Lisp; batch, batchload y demo procesan archivos en Maxima.
Vease file_search para m
as detalles sobre el mecanismo de b
usqueda de archivos.
La funci
on load eval
ua sus argumentos.

load_pathname

[Variable del sistema]

Valor por defecto: false


Cuando se carga un fichero con las funciones load, loadfile o batchload, a la
variable load_pathname se le asigna la ruta al fichero en cuestion.
Se puede acceder a la variable load_pathname mientras se esta cargando el fichero.
Ejemplo:
Sup
ongase que se tiene el fichero test.mac en la carpeta "/home/usuario/workspace/mymaxima/temp/"
con las siguientes instrucciones:

222

Manual de Maxima

print("The value of load_pathname is: ", load_pathname)$


print("End of batchfile")$
Entonces se obtiene el siguiente resultado:
(%i1) load("/home/usuario/workspace/mymaxima/temp/test.mac")$
The value of load_pathname is:
/home/usuario/workspace/mymaxima/temp/test.mac
End of batchfile

loadfile (filename )

[Funcion]
Eval
ua las expresiones Lisp del archivo filename. La funcion loadfile no llama a
file_search, de manera que filename debe incluir la extension del archivo y su ruta
completa.
La funci
on loadfile puede procesar ficheros creados por save, translate_file y
compile_file. Puede ser m
as conveniente utilizar load en lugar de loadfile.

[Variable opcional]
Valor por defecto: true
La variable loadprint indica si mostrar un mensaje cuando se carga un archivo.
Si loadprint vale true, se muestra siempre un mensaje.
Si loadprint vale loadfile, muestra un mensaje solo si el archivo es cargado
con la funci
on loadfile.
Si loadprint vale autoload, muestra un mensaje solo cuandi un archivo se
carga autom
aticamente. Vease setup_autoload.
Si loadprint vale false, nunca mostrara mensajes.

loadprint

[Variable opcional]
Valor por defecto: false
Los desarrolladores de paquetes que utilizan save o translate para crear paquetes
(ficheros) que van a ser utilizados por terceros pueden hacer packagefile: true para
evitar que se a~
nada informacion a la listas de informacion de Maxima, como values
o functions.

packagefile

pathname_directory (pathname )
pathname_name (pathname )
pathname_type (pathname )

[Funcion]
[Funcion]
[Funcion]

Estas funciones devuelven las componentes de pathname.


Ejemplos:
(%i1) pathname_directory("/home/usuario/maxima/changelog.txt");
(%o1)
/home/usuario/maxima/
(%i2) pathname_name("/home/usuario/maxima/changelog.txt");
(%o2)
changelog
(%i3) pathname_type("/home/usuario/maxima/changelog.txt");
(%o3)
txt

printfile (path )

[Funcion]
Enva el fichero al que hace referncia la ruta path a la consola. path puede ser una
cadena o un smbolo, en cuyo caso se convertira en una cadena.

Captulo 13: Lectura y escritura

223

Si path hace referencia a un fichero accesible desde el directorio actual de trabajo,


entonces se enviar
a a la consola; en caso contrario, printfile intentara localizar el
fichero a~
nadiendole path a cada uno de los elementos de file_search_usage a traves
de filename_merge.
printfile devuelve la ruta del fichero encontado.

save
save
save
save
save
save

(filename, name_1, name_2, name_3, ...)


[Funcion]
(filename, values, functions, labels, ...)
[Funcion]
(filename, [m, n ])
[Funcion]
(filename, name_1 =expr_1, ...)
[Funcion]
(filename, all)
[Funcion]
(filename, name_1 =expr_1, name_2 =expr_2, ...)
[Funcion]
Alamacena los valores actuales de name 1, name 2, name 3, ..., en el archivo filename.
Los argumentos son nombres de variables, funciones u otros objetos. Si un nombre
no tiene un valor o una funcion asociado a el, entonces se ignora.
La funci
on save devuelve filename.
La funci
on save almacena datos en forma de expresiones Lisp. Los datos almacenados
por save pueden recuperarse con load (filename ). El resultado de ejecutar save
cuando filename ya existe depende del soporte Lisp implementado; el archivo puede
ser sobreescrito o que save enve un mesaje de error.
La llamada save (filename, values, functions, labels, ...) almacena los elementos cuyos nombres son values, functions, labels, etc. Los nombres pueden ser
cualesquiera de los especificados por la variable infolists; values incluye todas las
variables definidas por el usuario.
La llamada save (filename, [m, n ]) almacena los valores de las etiquetas de entrada y salida desde m hasta n. Notese que m y n deben ser n
umeros. Las etiquetas
de entrada y salida tambien se pueden almacenar una a una, por ejemplo, save
("foo.1", %i42, %o42). La llamada save (filename, labels) almacena todas las
etiquetas de entrada y salida. Cuando las etiquetas almacenadas en el archivo sean
posteriormente recuperadas, se sobreescribiran las activas en ese momento.
La llamada save (filename, name_1 =expr_1, name_2 =expr_2, ...) almacena los
til hacer este
valores de expr 1, expr 2, ..., con los nombres name 1, name 2, .... Es u
tipo de llamada para con etiquetas de entrada y salida, por ejemplo, save ("foo.1",
aa=%o88). El miembro derecho de la igualdad puede ser cualquier expresion, que ser
a
evaluada. Esta llamada a la funcion save no incorpora nuevos nombres a la sesion
actual de Maxima, simplemente los almacena en el archivo filename.
Todas estas formas de llamar a la funcion save se pueden combinar a voluntad. Por
ejemplo, save (filename, aa, bb, cc=42, functions, [11, 17]).
La llamada save (filename, all) almacena el estado actual de Maxima, lo que incluye todas las variables definidas por el usuario, funciones, arreglos, etc., as como
algunos objetos definidos automaticamente. Los elementos almacenados incluyen variables del sistema, como file_search_maxima o showtime, si han sido modificadas
por el usuario. Vease myoptions.
save eval
ua filename pero no el resto de argumentos.

224

Manual de Maxima

(filename, expr_1, expr_2, expr_3, ...)


[Funcion]
(filename, [m, n ])
[Funcion]
(filename, input)
[Funcion]
(filename, functions)
[Funcion]
(filename, values)
[Funcion]
La funci
on stringout escribe expresiones en un archivo de la misma forma en que
se escribiran como expresiones de entrada. El archivo puede ser utilizado entonces
como entrada a las funciones batch o demo, y puede ser editado para cualquier otro
prop
osito.
La forma general de stringout escribe los valores de una o mas expresiones en el
archivo de salida. N
otese que si una expresion es una variable, solamente se escribir
a
el valor de la variable y no el nombre de esta. Como caso especial, y muy u
til en
algunas ocasiones, las expresiones pueden ser etiquetas de entrada (%i1, %i2, %i3, ...)
o de salida (%o1, %o2, %o3, ...).
Si grind vale true, stringout formatea la salida utilizando grind. En caso contrario,
se utilizar
a el formato string. Veanse grind y string.
La forma especial stringout (filename, [m, n ]) escribe los valores de las etiquetas
de entrada desde la m hasta la n, ambas inclusive.
La forma especial stringout (filename, input) escribe todas las etiquetas de entrada en el archivo.
La forma especial stringout (filename, functions) escribe todas las funciones
definidas por el usuario, contenidas en la lista global functions, en el archivo.
La forma especial stringout (filename, values) escribe todas las variables asignadas por el usuario, contenidas en la lista global values, en el archivo. Cada variable
se escribe como una sentencia de asignacion, con el nombre de la variable seguida de
dos puntos y a continuaci
on su valor. Notese que la forma general de stringout no
escribe las variables como sentencias de asignacion.

stringout
stringout
stringout
stringout
stringout

with_stdout (f, expr_1, expr_2, expr_3, ...)


with_stdout (s, expr_1, expr_2, expr_3, ...)

[Funcion]
[Funcion]
Eval
ua expr 1, expr 2, expr 3, ... y escribe los resultados en el fichero f o flujo de
salida s. Las expresiones que se eval
uan no se escriben. La salida puede generarse
por medio de print, display, grind entre otras funciones.
La variable global file_output_append controla si with_stdout a~
nade o reinicia el
contenido del fichero de salida f. Si file_output_append vale true, with_stdout
a~
nade contenido al fichero de salida. En cualquier caso, with_stdout crea el fichero
si este no existe.
La funci
on with_stdout devuelve el valor de su u
ltimo argumento.
Vease tambien writefile.
(%i1) with_stdout ("tmp.out",
for i:5 thru 10 do print (i, "! yields", i!))$
(%i2) printfile ("tmp.out")$
5 ! yields 120
6 ! yields 720
7 ! yields 5040

Captulo 13: Lectura y escritura

225

8 ! yields 40320
9 ! yields 362880
10 ! yields 3628800

writefile (filename )

[Funcion]
Comienza escribiendo una transcripcion de la sesion de Maxima en el archivo filename.
Cualquier interacci
on entre Maxima y el usuario se almacena tambien en este archivo,
tal como aparece en la consola.
Puesto que la transcripci
on se escribe en el formato de salida a la consola, su contenido
no es interpretable por Maxima. Para hacer un archivo que contenga expresiones que
puedan ser nuevamente cargadas en Maxima, veanse save y stringout; la funcion
save almacena expresiones en formato Lisp, mientras que stringout lo hace en formato Maxima.
El resultado de ejecutar writefile cuando el archivo filename ya existe depende del
entorno Lisp operativo; el contenido anterior puede ser sobreescrito o ampliado con
la sesi
on actual. La funci
on appendfile siempre a~
nade la sesion al contenido actual.

Puede ser u
til ejecutar playback despues de writefile para guardar las interacciones
previas de la sesi
on. Puesto que playback muestra solamente las variables de entrada
y salida (%i1, %o1, etc.), cualquier salida generada por una sentencia de impresion
desde dentro de una funci
on no es mostrada por playback.
La funci
on closefile cierra los archivos abiertos por writefile o appendfile.

13.4 Funciones y variables para salida TeX


tex
tex
tex
tex
tex
tex

(expr )
[Funcion]
(expr, destination )
[Funcion]
(expr, false)
[Funcion]
(label )
[Funcion]
(label, destination )
[Funcion]
(label, false)
[Funcion]
Devuelve la expresi
on en un formato apropiado para para ser incorporado a un documento basado en TeX. El resultado que se obtiene es un fragmento de codigo que
puede incluirse en un documento mayor, pero que no puede ser procesado aisladamente.
La instrucci
on tex (expr ) imprime en la consola la representacion en TeX de expr.
La instrucci
on tex (label ) imprime en la consola la representacion en TeX de la
expresi
on a la que hace referencia la etiqueta label, asignandole a su vez una etiqueta
de ecuaci
on que ser
a mostrada al lado izquierdo de la misma. La etiqueta de la
expresi
on en TeX es la misma que la de Maxima.
destination puede ser tanto un flujo de salida como el nombre de un fichero.
Si destination es el nombre de un fichero, tex a~
nade la salida al fichero. Las funciones
openw y opena crean flujos de salida.
Las instrucciones tex (expr, false) y tex (label, false) devuelven el codigo TeX
en formato de cadena.

226

Manual de Maxima

La funci
on tex eval
ua su primer argumento tras comprobar si se trata de una etiqueta. La doble comilla simple fuerza la evaluacion del argumento, anulando la
comprobaci
on sobre la etiqueta.
Vease tambien texput.
Ejemplos:
(%i1) integrate (1/(1+x^3), x);
2 x - 1
2
atan(-------)
log(x - x + 1)
sqrt(3)
log(x + 1)
(%o1)
- --------------- + ------------- + ---------6
sqrt(3)
3
(%i2) tex (%o1);
$$-{{\log \left(x^2-x+1\right)}\over{6}}+{{\arctan \left({{2\,x-1
}\over{\sqrt{3}}}\right)}\over{\sqrt{3}}}+{{\log \left(x+1\right)
}\over{3}}\leqno{\tt (\%o1)}$$
(%o2)
(\%o1)
(%i3) tex (integrate (sin(x), x));
$$-\cos x$$
(%o3)
false
(%i4) tex (%o1, "foo.tex");
(%o4)
(\%o1)
tex (expr, false) devuelve el codigo TeX en formato de cadena.
(%i1)
(%o1)
(%i2)
(%o2)

S : tex (x * y * z, false);
$$x\,y\,z$$
S;
$$x\,y\,z$$

tex1 (e )

[Funcion]
Devuelve una cadena con el c
odigo TeX de la expresion e. El codigo TeX no se encierra
entre delimitadores para una ecuacion ni cualesquiera otros entornos.
Ejemplo:
(%i1) tex1 (sin(x) + cos(x));
(%o1)
\sin x+\cos x
(a, s )
(a, f )
(a, s, operator_type )
(a, [s_1, s_2 ], matchfix)
(a, [s_1, s_2, s_3 ], matchfix)
Establece el formato en TeX del atomo a, el cual puede ser un smbolo o
de un operador.

texput
texput
texput
texput
texput

[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
el nombre

La instrucci
on texput (a, s ) hace que la funcion tex introduzca s en la salida TeX
en el lugar de a.
La instrucci
on texput (a, f ) hace que tex llame a la funcion f para que genere
codigo TeX. La funci
on f debe aceptar un u
nico argumento, el cual es una expresion

Captulo 13: Lectura y escritura

227

que tenga como operador a y que devuelva una cadena con el codigo TeX. Esta funcion
puede llamar a tex1 para generar el codigo TeX para los argumentos de la expresion
de entrada.
La instrucci
on texput (a, s, operator_type ), en la que operator type es prefix,
infix o postfix, nary o nofix,hace que la funcion tex introduzca s en la salida TeX
en el lugar de a, coloc
andolo en el lugar correcto.
La instrucci
on texput (a, [s_1, s_2 ], matchfix) hace que la funcion tex introduzca s 1 y s 2 en la salida TeX a los lados de los argumentos de a. Si son mas de
uno, los argumentos se separan por comas.
La instrucci
on texput (a, [s_1, s_2, s_3 ], matchfix) hace que la funcion tex
introduzca s 1 y s 2 en la salida TeX a los lados de los argumentos de a, con s 3
separando los argumentos.
Ejemplos:
Asigna c
odigo TeX para una variable.
Llama a una funci
on que genera codigo TeX.
(%i1) texfoo (e) := block ([a, b], [a, b] : args (e),
concat ("\\left[\\stackrel{", tex1 (b),
"}{", tex1 (a), "}\\right]"))$
(%i2) texput (foo, texfoo);
(%o2)
texfoo
(%i3) tex (foo (2^x, %pi));
$$\left[\stackrel{\pi}{2^{x}}\right]$$
(%o3)
false
(%i1) texput (me,"\\mu_e");
(%o1)
(%i2) tex (me);
$$\mu_e$$
(%o2)

\mu_e

false

Asigna c
odigo TeX para una funcion ordinaria (no para un operador).
(%i1) texput (lcm, "\\mathrm{lcm}");
(%o1)
\mathrm{lcm}
(%i2) tex (lcm (a, b));
$$\mathrm{lcm}\left(a , b\right)$$
(%o2)
false
Asigna c
odigo TeX para un operador prefijo.
(%i1) prefix ("grad");
(%o1)
grad
(%i2) texput ("grad", " \\nabla ", prefix);
(%o2)
\nabla
(%i3) tex (grad f);
$$ \nabla f$$
(%o3)
false
Asigna c
odigo TeX para un operador infijo.

228

Manual de Maxima

(%i1) infix ("~");


(%o1)
~
(%i2) texput ("~", " \\times ", infix);
(%o2)
\times
(%i3) tex (a ~ b);
$$a \times b$$
(%o3)
false
Asigna c
odigo TeX para un operador postfijo..
(%i1) postfix ("##");
(%o1)
##
(%i2) texput ("##", "!!", postfix);
(%o2)
!!
(%i3) tex (x ##);
$$x!!$$
(%o3)
false
Asigna c
odigo TeX para un operador n-ario.
(%i1) nary ("@@");
(%o1)
@@
(%i2) texput ("@@", " \\circ ", nary);
(%o2)
\circ
(%i3) tex (a @@ b @@ c @@ d);
$$a \circ b \circ c \circ d$$
(%o3)
false
Asigna c
odigo TeX para un operador "no-fijo".
(%i1) nofix ("foo");
(%o1)
foo
(%i2) texput ("foo", "\\mathsc{foo}", nofix);
(%o2)
\mathsc{foo}
(%i3) tex (foo);
$$\mathsc{foo}$$
(%o3)
false
Asigna c
odigo TeX para un operador "bi-fijo" (matchfix).
(%i1) matchfix ("<<", ">>");
(%o1)
<<
(%i2) texput ("<<", [" \\langle ", " \\rangle "], matchfix);
(%o2)
[ \langle , \rangle ]
(%i3) tex (<<a>>);
$$ \langle a \rangle $$
(%o3)
false
(%i4) tex (<<a, b>>);
$$ \langle a , b \rangle $$
(%o4)
false
(%i5) texput ("<<", [" \\langle ", " \\rangle ", " \\, | \\,"],
matchfix);
(%o5)
[ \langle , \rangle , \, | \,]

Captulo 13: Lectura y escritura

229

(%i6) tex (<<a>>);


$$ \langle a \rangle $$
(%o6)
false
(%i7) tex (<<a, b>>);
$$ \langle a \, | \,b \rangle $$
(%o7)
false

get_tex_environment (op )
set_tex_environment (op, before, after )

[Funcion]
[Funcion]
Gestiona el entorno de las salidas TeX que se obtienen de la funcion tex. El entorno
TeX est
a formado por dos cadenas: una que se escribe antes que cualquier salida en
TeX, y otra que se escribe despues.
get_tex_environment devuelve el entorno TeX que se aplica al operador op. Si no
se ha asignado ning
un entorno, devolvera el que tenga por defecto.
set_tex_environment asigna el entorno TeX al operador op.
Ejemplos:
(%i1) get_tex_environment (":=");
(%o1) [
\begin{verbatim}
, ;
\end{verbatim}
]
(%i2) tex (f (x) := 1 - x);
\begin{verbatim}
f(x):=1-x;
\end{verbatim}
(%o2)
false
(%i3) set_tex_environment (":=", "$$", "$$");
(%o3)
[$$, $$]
(%i4) tex (f (x) := 1 - x);
$$f(x):=1-x$$
(%o4)
false

get_tex_environment_default ()
set_tex_environment_default (before, after )

[Funcion]
[Funcion]
Gestiona el entorno de las salidas TeX que se obtienen de la funcion tex. El entorno
TeX est
a formado por dos cadenas: una que se escribe antes que cualquier salida en
TeX, y otra que se escribe despues.
get_tex_environment_default devuelve el entorno TeX que se aplica a expresiones
para las cuales el operador de mayor rango no tiene entorno TeX asignado (mediante
set_tex_environment).
set_tex_environment_default asigna el entorno TeX por defecto.
Ejemplos:

230

Manual de Maxima

(%i1) get_tex_environment_default ();


(%o1)
[$$, $$]
(%i2) tex (f(x) + g(x));
$$g\left(x\right)+f\left(x\right)$$
(%o2)
false
(%i3) set_tex_environment_default ("\\begin{equation}
", "
\\end{equation}");
(%o3) [\begin{equation}
,
\end{equation}]
(%i4) tex (f(x) + g(x));
\begin{equation}
g\left(x\right)+f\left(x\right)
\end{equation}
(%o4)
false

13.5 Funciones y variables para salida Fortran


fortindent

[Variable opcional]

Valor por defecto: 0


La variable fortindent controla el margen izquierdo de las expresiones que escribe la
instrucci
on fortran. El valor 0 escribe con un margen normal de 6 espacios; valores
positivos har
an que las expresiones se escriban mas a la derecha.

fortran (expr )

[Funcion]
Escribe expr en c
odigo Fortran. La salida se escribe con margenes, y si esta es
demasiado larga fortran sigue escribiendo en lneas sucesivas. La funcion fortran
escribe el operador de exponenciacion ^ como **, e imprime un n
umero complejo a
+ b %i como (a,b).
El argumento expr puede ser una ecuacion. En tal caso, fortran escribe una sentencia de asignaci
on, d
andole el valor del miembro derecho de la expresion al miembro
izquierdo. En particular, si el miembro derecho de expr es el nombre de una matriz, entonces fortran escribe una sentencia de asignacion para cada elemento de la
matriz.
Si expr no es reconozida por fortran, la expresion se escribe en formato grind sin
avisos. La funci
on fortran no reconoce listas, arreglos ni funciones.
La variable fortindent controla el margen izquierdo de las expresiones que escribe la
instrucci
on fortran. El valor 0 escribe con un margen normal de 6 espacios; valores
positivos har
an que las expresiones se escriban mas a la derecha.
Si fortspaces vale true, fortran rellena las lneas con espacios de 80 columnas.
La funci
on fortran eval
ua sus argumentos; un argumento precedido de apostrofo
previene de la evaluaci
on. La funcion fortran siempre devuelve done.
Ejemplos:
(%i1) expr: (a + b)^12$

Captulo 13: Lectura y escritura

231

(%i2) fortran (expr);


(b+a)**12
(%o2)
done
(%i3) fortran (x=expr);
x = (b+a)**12
(%o3)
done
(%i4) fortran (x=expand (expr));
x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792
1
*a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b
2
**3+66*a**10*b**2+12*a**11*b+a**12
(%o4)
done
(%i5) fortran (x=7+5*%i);
x = (7,5)
(%o5)
done
(%i6) fortran (x=[1,2,3,4]);
x = [1,2,3,4]
(%o6)
done
(%i7) f(x) := x^2$
(%i8) fortran (f);
f
(%o8)
done
[Variable opcional]
Valor por defecto: false
Si fortspaces vale true, fortran rellena las lneas con espacios de 80 columnas.

fortspaces

Captulo 14: Polinomios

233

14 Polinomios
14.1 Introducci
on a los polinomios
Los polinomios se almacenan en Maxima, bien en un formato general, bien en una forma
conocida como can
onica (Cannonical Rational Expressions, CRE). La u
ltima corresponde al
formato est
andar y se utiliza internamente para realizar operaciones como factor, ratsimp
y demas.
Las Expresiones Racionales Canonicas (CRE) constituyen un tipo de representacion que
es especialmente apropiado para expandir polinomios y funciones racionales (as como para
polinomios parcialmente factorizados y funciones racionales cuando a la variable ratfac se
le asigna el valor true). En esta forma CRE las variables se ordenan de mayor a menor.
Los polinomios se representan recursivamente como una lista compuesta por la variable
principal seguida por una serie de pares de expresiones, una por cada termino del polinomio.
El primer miembro de cada par es el exponente de la variable principal en ese termino y
el segundo miembro es el coeficiente de ese termino, el cual puede ser un n
umero o un
polinomio en otra variable representado tambien de esta forma. As, la parte principal de
la forma CRE de 3*X^2-1 es (X 2 3 0 -1) y la de 2*X*Y+X-3 es (Y 1 (X 1 2) 0 (X 1 1 0
-3)) asumiendo que Y es la variable principal, y sera (X 1 (Y 1 2 0 1) 0 -3) si se asume que
la variable principal es X. Que variable se considera "principal" se determinada en orden
alfabetico inverso. Las "variables" de la expresion CRE no son necesariamente atomicas.
De hecho cualquier subexpresi
on cuyo operador principal no es + - * / ni ^ con potencia
entera puede ser considerada como una "variable" de la expresion (en forma CRE) en el
cual aparezca. Por ejemplo las variables CRE de la expresion X+SIN(X+1)+2*SQRT(X)+1
son X, SQRT(X) y SIN(X+1). Si el usuario no especifica una ordenacion de las variables
mediante la funci
on ratvars Maxima escogera una alfabeticamente. En general, laa CRE
representan expresiones racionales, esto es, fracciones de polinomios, donde el numerador y
el denominador no tienen factores comunes, siendo el denominador es positivo. La forma
interna es esencialmente un par de polinomios (el numerador y el denominador) precedida
por la lista de variables ordenadas. Si una expresion a ser mostrada esta en la forma CRE o
contiene alguna subexpresi
on en forma de CRE, el simbolo /R/ sera seguido por la etiqueta
de la lnea de comando. Vease la funcion rat para convertir una expresion a la forma
CRE. Una extensi
on de la forma CRE se utiliza para la representacion de las series de
Taylor. La noci
on de una expresi
on racional se extiende de manera que los exponentes de
las variables pueden ser n
umeros racionales positivos o negativos y no solo enteros positivos
y los coeficientes pueden ser tambien expresiones racionales y no solo polinomios. Estas
expresiones se representan internamente por una forma polinomial recursiva que es similar
a la forma CRE, pero que la generaliza, aportando informacion adicional como el grado
de truncamiento. Como con la forma CRE, el smbolo /T/ sigue la etiqueta de lnea de
comando en la que se encuentra dicha expresion.

14.2 Funciones y variables para polinomios


algebraic
Valor por defecto: false

[Variable opcional]

234

Manual de Maxima

La variable algebraic debe valer true para que se pueda hacer la simplificacion de
enteros algebraicos.
[Variable opcional]

berlefact
Valor por defecto: true

Si berlefact vale false entonces se utiliza el algoritmo de factorizacion de Kronecker,


en caso contrario se utilizar
a el algoritmo de Berlekamp, que es el que se aplica por
defecto.

bezout (p1, p2, x )

[Funcion]

Es una alternativa a la funci


on resultant. Devuelve una matriz.
(%i1) bezout(a*x+b, c*x^2+d, x);
[ b c - a d ]
(%o1)
[
]
[ a
b
]
(%i2) determinant(%);
2
2
(%o2)
a d + b c
(%i3) resultant(a*x+b, c*x^2+d, x);
2
2
(%o3)
a d + b c

bothcoef (expr, x )

[Funcion]
Devuelve una lista cuyo primer miembro es el coeficiente de x en expr (que coincide
con el que devuelve ratcoef si expr esta en formato CRE, o el que devuelve coeff si
no est
a en este formato) y cuyo segundo miembro es la parte restante de expr. Esto
es, [A, B] donde expr = A*x + B.
Ejemplo:
(%i1) islinear (expr, x) := block ([c],
c: bothcoef (rat (expr, x), x),
is (freeof (x, c) and c[1] # 0))$
(%i2) islinear ((r^2 - (x - r)^2)/x, x);
(%o2)
true

coeff (expr, x, n )
coeff (expr, x )

[Funcion]
[Funcion]
Devuelve el coeficiente de x ^n en expr, donde expr es un polinomio o monomio en x.

coeff(expr, x ^n ) es equivalente a coeff(expr, x, n ). coeff(expr, x, 0) devuelve el resto de expr, el cual no contiene a x. En caso de omision, se entiende
que n es igual a 1.
x puede ser tanto el nombre de una variable simple como el de una variable con
subndice, o tambien una subexpresion de expr que contenga un operador junto con
todos sus argumentos.
En ocasiones, es posible calcular los coeficientes de expresiones equivalentes a expr
aplicando expand o factor. coeff no aplica ni expand, ni factor, ni ninguna otra
funci
on.

Captulo 14: Polinomios

235

coeff se distribuye sobre listas, matrices y ecuaciones.


Ejemplos:
coeff devuelve el coeficiente de x ^n en expr.
(%i1) coeff (b^3*a^3 + b^2*a^2 + b*a + 1, a^3);
3
(%o1)
b
coeff(expr, x ^n ) es equivalente a coeff(expr, x, n ).
(%i1) coeff (c[4]*z^4 - c[3]*z^3 - c[2]*z^2 + c[1]*z, z, 3);
(%o1)
- c
3
(%i2) coeff (c[4]*z^4 - c[3]*z^3 - c[2]*z^2 + c[1]*z, z^3);
(%o2)
- c
3
coeff(expr, x, 0) devuelve el resto de expr, el cual no contiene a x.
(%i1) coeff (a*u + b^2*u^2 + c^3*u^3, b, 0);
3 3
(%o1)
c u + a u
x puede ser tanto el nombre de una variable simple como el de una variable con
subndice, o tambien una subexpresion de expr que contenga un operador junto con
todos sus argumentos.
(%i1) coeff (h^4 - 2*%pi*h^2 + 1, h, 2);
(%o1)
- 2 %pi
(%i2) coeff (v[1]^4 - 2*%pi*v[1]^2 + 1, v[1], 2);
(%o2)
- 2 %pi
(%i3) coeff (sin(1 + x)*sin(x) + sin(1 + x)^3*sin(x)^3, sin(1 + x)^3);
3
(%o3)
sin (x)
(%i4) coeff ((d - a)^2*(b + c)^3 + (a + b)^4*(c - d), a + b, 4);
(%o4)
c - d
coeff no aplica ni expand, ni factor, ni ninguna otra funcion.
(%i1) coeff (c*(a + b)^3, a);
(%o1)
0
(%i2) expand (c*(a + b)^3);
3
2
2
3
(%o2)
b c + 3 a b c + 3 a b c + a c
(%i3) coeff (%, a);
2
(%o3)
3 b c
(%i4) coeff (b^3*c + 3*a*b^2*c + 3*a^2*b*c + a^3*c, (a + b)^3);
(%o4)
0
(%i5) factor (b^3*c + 3*a*b^2*c + 3*a^2*b*c + a^3*c);
3
(%o5)
(b + a) c
(%i6) coeff (%, (a + b)^3);

236

Manual de Maxima

(%o6)
c
coeff se distribuye sobre listas, matrices y ecuaciones.
(%i1) coeff ([4*a, -3*a, 2*a], a);
(%o1)
[4, - 3, 2]
(%i2) coeff (matrix ([a*x, b*x], [-c*x, -d*x]), x);
[ a
b ]
(%o2)
[
]
[ - c - d ]
(%i3) coeff (a*u - b*v = 7*u + 3*v, u);
(%o3)
a = 7

content (p_1, x_1, ..., x_n )

[Funcion]
Devuelve una lista cuyo primer miembro es el maximo com
un divisor de los coeficientes
de los terminos del polinomio p 1 de variable x n (este es el contenido) y cuyo segundo
miembro es el polinomio p 1 dividido por el contenido.
Ejemplos:
(%i1) content (2*x*y + 4*x^2*y^2, y);
2
(%o1)
[2 x, 2 x y + y]

denom (expr )

[Funcion]

Devuelve el denominador de la expresion racional expr.

divide (p_1, p_2, x_1, ..., x_n )

[Funcion]
Calcula el cociente y el resto del polinomio p 1 dividido por el polinomio p 2, siendo
la variable principal x n. Las otras funciones son como en la funcion ratvars. El
resultado es una lista cuyo primer miembro es el cociente y el segundo miembro el
resto.
Ejemplos:
(%i1) divide (x + y, x - y, x);
(%o1)
[1, 2 y]
(%i2) divide (x + y, x - y);
(%o2)
[- 1, 2 x]
Notese que y es la variable principal en el segundo ejemplo.

eliminate ([eqn_1, ..., eqn_n ], [x_1, ..., x_k ])

[Funcion]
Elimina variables de ecuaciones (o de expresiones que se supone valen cero) tomando
resultantes sucesivas. Devuelve una lista con n - k expresiones y k variables x 1, ...,
x k eliminadas. Primero se elimina x 1 dando n - 1 expresiones, despues se elimina
x_2, etc. Si k = n entonces se devuelve una lista con una u
nica expresion, libre de las
variables x 1, ..., x k. En este caso se llama a solve para resolver la u
ltima resultante
para la u
ltima variable.
Ejemplo:
(%i1) expr1: 2*x^2 + y*x + z;
2
(%o1)
z + x y + 2 x

Captulo 14: Polinomios

237

(%i2) expr2: 3*x + 5*y - z - 1;


(%o2)
- z + 5 y + 3 x - 1
(%i3) expr3: z^2 + x - y^2 + 5;
2
2
(%o3)
z - y + x + 5
(%i4) eliminate ([expr3, expr2, expr1], [y, z]);
8
7
6
5
4
(%o4) [7425 x - 1170 x + 1299 x + 12076 x + 22887 x
3
2
- 5154 x - 1291 x + 7688 x + 15376]

ezgcd (p_1, p_2, p_3, ...)

[Funcion]
Devuelve una lista cuyo primer elemento es el maximo com
un divisor (mcd) de los
polinomios p 1, p 2, p 3, . . . , siendo los miembros restantes los mismos polinomios
divididos por el mcd. Se utiliza siempre el algoritmo ezgcd.
Veanse tambien gcd, gcdex, gcdivide y poly_gcd.
Ejemplos:

Los tres polinomios tiene como maximo com


un divisor 2*x-3, el cual se calcula
primero con la funci
on gcd y luego con ezgcd.
(%i1) p1 : 6*x^3-17*x^2+14*x-3;
3
2
(%o1)
6 x - 17 x + 14 x - 3
(%i2) p2 : 4*x^4-14*x^3+12*x^2+2*x-3;
4
3
2
(%o2)
4 x - 14 x + 12 x + 2 x - 3
(%i3) p3 : -8*x^3+14*x^2-x-3;
3
2
(%o3)
- 8 x + 14 x - x - 3
(%i4) gcd(p1, gcd(p2, p3));
(%o4)

2 x - 3

(%i5) ezgcd(p1, p2, p3);


2
3
2
2
(%o5) [2 x - 3, 3 x - 4 x + 1, 2 x - 4 x + 1, - 4 x + x + 1]

facexpand

[Variable opcional]

Valor por defecto: true


La variable facexpand controla si los factores irreducibles devueltos por factor estan
en formato expandido (por defecto) o recursivo (CRE normal).

factor (expr )
factor (expr, p )

[Funcion]
[Funcion]
Factoriza la expresi
on expr, que puede contener cualquier n
umero de variables o funciones, en factores irreducibles respecto de los enteros. La llamada factor (expr, p )

238

Manual de Maxima

factoriza expr en el campo de los racionales con un elemento a~


nadido cuyo polinomio
mnimo es p.
La funci
on factor utiliza a ifactors para factorizar enteros.
Si la variable factorflag vale false suprime la factorizacion de los factores enteros
en las expresiones racionales.
La variable dontfactor puede contener una lista de variables con respecto a las
cuales no se factorizar
a (inicialmente esta vaca). Tampoco se factorizara respecto de
cualesquiera otra variables que sean menos importantes (seg
un la ordenacion que se
sigue en el formato CRE) que aquellas que se encuentran en la lista dontfactor.
Si la variable savefactors vale true, los factores de una expresion en forma de producto se guardar
an por ciertas funciones a fin de acelerar posteriores factorizaciones
de expresiones que contengan algunos de estos mismos factores.
Si berlefact vale false entonces se utiliza el algoritmo de factorizacion de Kronecker,
en caso contrario se utilizar
a el algoritmo de Berlekamp, que es el que se aplica por
defecto.
Si la variable intfaclim vale true, Maxima desistira de factorizar enteros si no
encuentra ning
un factor despues de las divisiones tentativas y de aplicar el metodo
rho de Pollard. Si vale false (este es el caso cuando el usuario invoca explcitamente
a factor), se intentar
a la factorizacion completa del entero. El valor asignado a
intfaclim se utiliza en llamadas internas a factor. As, se puede cambiar el valor
de intfaclim para evitar que Maxima dedique un tiempo prohibitivo a factorizar
n
umeros enteros grandes.
Ejemplos:
(%i1) factor (2^63 - 1);
2
(%o1)
7 73 127 337 92737 649657
(%i2) factor (-8*y - 4*x + z^2*(2*y + x));
(%o2)
(2 y + x) (z - 2) (z + 2)
(%i3) -1 - 2*x - x^2 + y^2 + 2*x*y^2 + x^2*y^2;
2 2
2
2
2
(%o3)
x y + 2 x y + y - x - 2 x - 1
(%i4) block ([dontfactor: [x]], factor (%/36/(1 + 2*y + y^2)));
2
(x + 2 x + 1) (y - 1)
(%o4)
---------------------36 (y + 1)
(%i5) factor (1 + %e^(3*x));
x
2 x
x
(%o5)
(%e + 1) (%e
- %e + 1)
(%i6) factor (1 + x^4, a^2 - 2);
2
2
(%o6)
(x - a x + 1) (x + a x + 1)
(%i7) factor (-y^2*z^2 - x*z^2 + x^2*y^2 + x^3);
2
(%o7)
- (y + x) (z - x) (z + x)

Captulo 14: Polinomios

239

(%i8) (2 + x)/(3 + x)/(b + x)/(c + x)^2;


x + 2
(%o8)
-----------------------2
(x + 3) (x + b) (x + c)
(%i9) ratsimp (%);
4
3
(%o9) (x + 2)/(x + (2 c + b + 3) x
2
2
2
2
+ (c + (2 b + 6) c + 3 b) x + ((b + 3) c + 6 b c) x + 3 b c )
(%i10) partfrac (%, x);
2
4
3
(%o10) - (c - 4 c - b + 6)/((c + (- 2 b - 6) c
2
2
2
2
+ (b + 12 b + 9) c + (- 6 b - 18 b) c + 9 b ) (x + c))
c - 2
- --------------------------------2
2
(c + (- b - 3) c + 3 b) (x + c)
b - 2
+ ------------------------------------------------2
2
3
2
((b - 3) c + (6 b - 2 b ) c + b - 3 b ) (x + b)
1
- ---------------------------------------------2
((b - 3) c + (18 - 6 b) c + 9 b - 27) (x + 3)
(%i11) map (factor, %);
2
c - 4 c - b + 6
c - 2
(%o11) - ------------------------- - -----------------------2
2
2
(c - 3) (c - b) (x + c)
(c - 3) (c - b) (x + c)
b - 2
1
+ ------------------------ - -----------------------2
2
(b - 3) (c - b) (x + b)
(b - 3) (c - 3) (x + 3)
(%i12) ratsimp ((x^5 - 1)/(x - 1));
4
3
2
(%o12)
x + x + x + x + 1
(%i13) subst (a, x, %);

240

Manual de Maxima

(%o13)
(%i14)
(%o14)
(%i15)
(%o15)
(%i16)
(%o16)

4
3
2
a + a + a + a + 1
factor (%th(2), %);
2
3
3
2
(x - a) (x - a ) (x - a ) (x + a + a + a + 1)
factor (1 + x^12);
4
8
4
(x + 1) (x - x + 1)
factor (1 + x^99);
2
6
3
(x + 1) (x - x + 1) (x - x + 1)

10
(x

9
- x

20
(x

19
+ x

4
- x

+ x

- x
17

- x

6
- x

16

14

- x

3
- x

30
- x

+ x
60

+ x + 1) (x
27

- x

+ x

21
+ x

13

57

11

- x + 1)
10

- x

51

48
- x

9
- x

2
+ x

- x

- x
12

- x

3
- x

+ x

+ x
18

+ x

4
+ x

9
- x

42
+ x

7
+ x

6
+ x

39
+ x

33
- x

3
+ x

+ 1)

[Variable opcional]
Valor por defecto: false
Si factorflag vale false se evita la factorizacion de factores enteros de expresiones
racionales.

factorflag

factorout (expr, x_1, x_2, ...)

[Funcion]
Reorganiza la suma expr como una suma de terminos de la forma f (x_1, x_2,
...)*g, donde g es un producto de expresiones que no contienen ning
un x i y f se
factoriza.
Notese que factorout ignora la variable opcional keepfloat.
Ejemplo:
(%i1) expand (a*(x+1)*(x-1)*(u+1)^2);
2 2
2
2
2
(%o1)
a u x + 2 a u x + a x - a u - 2 a u - a
(%i2) factorout(%,x);
2
(%o2) a u (x - 1) (x + 1) + 2 a u (x - 1) (x + 1)
+ a (x - 1) (x + 1)

factorsum (expr )

[Funcion]
Intenta agrupar terminos en los factores de expr que son sumas en grupos de terminos
tales que su suma sea factorizable. La funcion factorsum puede restablecer el recuperar de expand ((x + y)^2 + (z + w)^2) pero no puede recuperar expand ((x +
1)^2 + (x + y)^2) porque los terminos tienen variables comunes.

Captulo 14: Polinomios

241

Ejemplo:
(%i1) expand ((x + 1)*((u + v)^2 + a*(w + z)^2));
2
2
2
2
(%o1) a x z + a z + 2 a w x z + 2 a w z + a w x + v x
2
2
2
2
+ 2 u v x + u x + a w + v + 2 u v + u
(%i2) factorsum (%);
(%o2)

2
2
(x + 1) (a (z + w) + (v + u) )

fasttimes (p_1, p_2 )

[Funcion]
Calcula el producto de los polinomios p 1 y p 2 utilizando un algoritmo especial. Los
polinomios p_1 y p_2 deben ser multivariantes, densos y aproximadamente del mismo
tama~
no. La multiplicaci
on clasica es de orden n_1 n_2 donde n_1 es el grado de p_1
y n_2 el grado de p_2. La funcion fasttimes es de orden max (n_1, n_2)^1.585.

fullratsimp (expr )

[Funcion]
Aplica repetidamente ratsimp a una expresion, seguida de simplificaciones no
racionales, hasta que no se obtienen mas transformaciones; entonces devuelve el
resultado.
En presencia de expresiones no racionales, una llamada a ratsimp seguida de una
simplificaci
on no racional ("general") puede no ser suficiente para conseguir un resultado simplificado. En ocasiones seran necesarias mas de una llamada a ratsimp, que
es lo que hace precisamente fullratsimp.
Ejemplo:
(%i1) expr: (x^(a/2) + 1)^2*(x^(a/2) - 1)^2/(x^a - 1);
a/2
2
a/2
2
(x
- 1) (x
+ 1)
(%o1)
----------------------a
x - 1
(%i2) ratsimp (expr);
2 a
a
x
- 2 x + 1
(%o2)
--------------a
x - 1
(%i3) fullratsimp (expr);
a
(%o3)
x - 1
(%i4) rat (expr);
a/2 4
a/2 2
(x
) - 2 (x
) + 1
(%o4)/R/
----------------------a
x - 1

242

Manual de Maxima

fullratsubst (a, b, c )

[Funcion]
Similar a ratsubst excepto por el hecho de que se llama a misma recursivamente
hasta que el resultado deja de cambiar. Esta funcion es u
til cuando la expresion a
sustituir y la que la sustituye tienen variables comunes.
La funci
on fullratsubst tambien acepta sus argumentos en el formato de lratsubst.
Es necesario ejecutar load ("lrats") para cargar fullratsubst y lratsubst.
Ejemplos:
(%i1) load ("lrats")$
subst puede hacer sustituciones m
ultiples; lratsubst es analoga a subst.
(%i2) subst ([a = b, c = d], a + c);
(%o2)
d + b
(%i3) lratsubst ([a^2 = b, c^2 = d], (a + e)*c*(a + c));
(%o3)
(d + a c) e + a d + b c
Si s
olo se quiere una sustitucion, entonces se puede dar una u
nica ecuacion como
primer argumento.
(%i4) lratsubst (a^2 = b, a^3);
(%o4)
a b
fullratsubst equivale a ratsubst, excepto por el hecho de que se llama a
misma recursivamente hasta que el resultado deja de cambiar.
(%i5) ratsubst (b*a, a^2, a^3);
2
(%o5)
a b
(%i6) fullratsubst (b*a, a^2, a^3);
2
(%o6)
a b
fullratsubst tambien acepta una lista de ecuaciones o una sola ecuacion como
primer argumento.
(%i7) fullratsubst ([a^2 = b, b^2 = c, c^2 = a], a^3*b*c);
(%o7)
b
(%i8) fullratsubst (a^2 = b*a, a^3);
2
(%o8)
a b
fullratsubst puede caer en una recursion infinita.
(%i9) errcatch (fullratsubst (b*a^2, a^2, a^3));
*** - Lisp stack overflow. RESET

gcd (p_1, p_2, x_1, ...)

[Funcion]
Devuelve el m
aximo com
un divisor de p 1 y p 2. La variable gcd determiona que
algoritmo se va a utilizar. Asignandole a gcd los valores ez, subres, red o spmod,
se seleccionan los algoritmos ezgcd, subresultante prs, reducido o modular, respectivamente. Si gcd vale false entonces gcd(p_1, p_2, x ) devolvera siempre 1 para
cualquier x. Muchas funciones (por ejemplo, ratsimp, factor, etc.) hacen uso de
gcd implcitamente. En caso de polinomios homogeneos se recomienda darle a gcd el

Captulo 14: Polinomios

243

valor subres. Para calcular un maximo com


un divisor en presencia de races, como en
gcd (x ^2 - 2*sqrt(2)*x + 2, x - sqrt(2)), la variable algebraic debe igualarse
a true y gcd no puede ser ez.
Se recomienda utilizar el algoritmo subres en lugar de red, por ser aquel mas moderno.
Si la variable gcd, cuyo valor por defecto es spmod, vale false, no se calculara el
maximo com
un divisor cuando las expresiones se conviertan a su forma canonica
(CRE), lo que redundar
a en ocasiones en mayor rapidez de calculo.

gcdex (f, g )
gcdex (f, g, x )

[Funcion]
[Funcion]
Devuelve una lista [a, b, u ] en la que u es el maximo com
un divisor (mcd) de f y
g, e igual a a f + b g . Los argumentos f y g deben ser polinomios univariantes, o
indicarles la variable principal x en caso de ser multivariantes.
La funci
on gcdex implementa el algoritmo de Euclides, en el que tenemos una secuencia de L[i]: [a[i], b[i], r[i]] todos ellos ortogonales a [f, g, -1] siendo
el siguiente calculado a partir de q = quotient(r[i]/r[i+1]) y L[i+2]: L[i] - q
L[i+1]; el proceso termina en L[i+1] cuando el resto r[i+2] se anula.
(%i1) gcdex (x^2 + 1, x^3 + 4);
2
x + 4 x - 1 x + 4
(%o1)/R/
[- ------------, -----, 1]
17
17
(%i2) % . [x^2 + 1, x^3 + 4, -1];
(%o2)/R/
0

gcfactor (n )

[Funcion]
Factoriza el entero gaussiano n como producto, a su vez, de enteros gaussianos, (un
entero gaussiano es de la formaa + b %i donde a y b son n
umeros enteros). Los
factores se normalizan de manera que tanto la parte real como imaginaria sean no
negativas.

gfactor (expr )

[Funcion]
Factoriza el polinomio expr sobre los enteros gaussianos (un entero gaussiano es de la
formaa + b %i donde a y b son n
umeros enteros). Es como factor (expr, a ^2+1)
donde a vale %i.
Ejemplo:
(%i1) gfactor (x^4 - 1);
(%o1)
(x - 1) (x + 1) (x - %i) (x + %i)

gfactorsum (expr )

[Funcion]
Esta funci
on es similar a factorsum pero aplica gfactor en lugar de factor.

hipow (expr, x )

[Funcion]
Devuelve el mayor exponente explcito de x en expr. El argumentox puede ser una
variable o una expresi
on general. Si x no aparece en expr, hipow devuelve 0.

244

Manual de Maxima

La funci
on hipow no tiene en cuenta expresiones equivalentes a expr. En particular,
hipow no expande expr, de manera que hipow (expr, x ) y hipow (expand (expr,
x )) pueden dar resultados diferentes.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

hipow (y^3 * x^2 + x * y^4, x);


2
hipow ((x + y)^5, x);
1
hipow (expand ((x + y)^5), x);
5
hipow ((x + y)^5, x + y);
5
hipow (expand ((x + y)^5), x + y);
0
[Variable opcional]

intfaclim
Valor por defecto: true

Si vale true, Maxima desistira de factorizar enteros si no encuentra ning


un factor
despues de las divisiones tentativas y de aplicar el metodo rho de Pollard, por lo que
la factorizaci
on puede quedar incompleta.
Si vale false (este es el caso cuando el usuario invoca explcitamente a factor),
se intentar
a la factorizaci
on completa del entero. El valor asignado a intfaclim se
utiliza en llamadas internas a factor. A la variable intfaclim se le asigna el valor
false cuando se calculan factores desde las funciones divisors, divsum y totient.
Las llamadas internas a factor respetan el valor dado por el usuario a intfaclim.
Asignando a intfaclim el valor true se puede reducir el tiempo que Maxima dedica
a factorizar enteros grandes.
[Variable opcional]

keepfloat
Valor por defecto: false

Si keepfloat vale true, los n


umeros decimales en coma flotante no se racionalizan
cuando las expresiones que los contienen se convierten al formato canonico racional
(CRE).
Notese que la funci
on solve y todas aquellas otras que la invocan (por ejemplo,
eigenvalues) ignoran esta variable, por lo que hacen la conversion de los n
umeros
decimales.
Ejemplos:
(%i1) rat(x/2.0);
rat replaced 0.5 by 1/2 = 0.5
(%o1)/R/
(%i2) rat(x/2.0), keepfloat;

x
2

Captulo 14: Polinomios

(%o2)/R/

245

0.5 x

solve ignora keepfloat:


(%i3) solve(1.0-x,x), keepfloat;
rat replaced 1.0 by 1/1 = 1.0
(%o3)

[x = 1]

lopow (expr, x )

[Funcion]

Devuelve el menor exponente de x que aparece explcitamente en expr.


(%i1) lopow ((x+y)^2 + (x+y)^a, x+y);
(%o1)
min(a, 2)

lratsubst (L, expr )

[Funcion]
Esta funci
on es similar a subst (L, expr ), excepto por el hecho de que utiliza
ratsubst en lugar de subst.
El primer argumento de lratsubst es una ecuacion o lista de ecuaciones identicas en
formato a las aceptadas por subst. Las sustituciones se hacen en el orden dado por
la lista de ecuaciones, esto es, de izquierda a derecha.
La instrucci
on load ("lrats") carga fullratsubst y lratsubst.
Ejemplos:
(%i1) load ("lrats")$
subst can carry out multiple substitutions. lratsubst is analogous to subst.
(%i2) subst ([a = b, c = d], a + c);
(%o2)
d + b
(%i3) lratsubst ([a^2 = b, c^2 = d], (a + e)*c*(a + c));
(%o3)
(d + a c) e + a d + b c
If only one substitution is desired, then a single equation may be given as first
argument.
(%i4) lratsubst (a^2 = b, a^3);
(%o4)
a b

modulus

[Variable opcional]

Valor por defecto: false


Si modulus es un n
umero positivo p, las operaciones con n
umeros racionales (como
los devueltos por rat y funciones relacionadas) se realizan modulo p, utilizando el
llamado sistema de m
odulo balanceado, en el que n m
odulo p se define como un entero
k de [-(p -1)/2, ..., 0, ..., (p -1)/2] si p es impar, o de [-(p /2 - 1), ..., 0,
...., p /2] si p es par, de tal manera que a p + k es igual a n para alg
un entero a.
Normalmente a modulus se le asigna un n
umero primo. Se acepta que a modulus se
le asigne un entero positivo no primo, pero se obtendra un mensaje de aviso. Maxima
responder
a con un mensaje de error cuando se le asigne a modulus cero o un n
umero
negativo.
Ejemplos:

246

Manual de Maxima

(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

modulus:7;
7
polymod([0,1,2,3,4,5,6,7]);
[0, 1, 2, 3, - 3, modulus:false;
false
poly:x^6+x^2+1;
6
2
x + x +
factor(poly);
6
2
x + x +
modulus:13;
13
factor(poly);
2
4
(x + 6) (x - 6
polymod(%);
6
2
x + x +

2, - 1, 0]

2
x - 2)

num (expr )

[Funcion]
Devuelve el numerador de expr si se trata de una fraccion. Si expr no es una fraccion,
se devuelve expr.
La funci
on num eval
ua su argumento.

polydecomp (p, x )

[Funcion]
Descompone el polinomio p de variable x en una composicion funcional de polinomios
en x. La funci
on polydecomp devuelve una lista [p_1, ..., p_n ] tal que
lambda([x],p_1)(lambda ([x],p_2)(...(lambda([x],p_n)(x))...))
es igual a p. El grado de p i es mayor que 1 para i menor que n.
Esta descomposici
on no es u
nica.
Ejemplos:
(%i1) polydecomp (x^210, x);
7
5
3
2
(%o1)
[x , x , x , x ]
(%i2) p : expand (subst (x^3 - x - 1, x, x^2 - a));
6
4
3
2
(%o2)
x - 2 x - 2 x + x + 2 x - a + 1
(%i3) polydecomp (p, x);
2
3
(%o3)
[x - a, x - x - 1]
La siguiente funci
on compone L = [e_1, ..., e_n] como funciones de x; se trata de
la inversa de polydecomp:
compose (L, x) :=
block ([r : x], for e in L do r : subst (e, x, r), r) $

Captulo 14: Polinomios

247

Se vuelve a obtener el resultado del ejemplo de mas arriba haciendo uso de compose:
(%i3) polydecomp (compose ([x^2 - a, x^3 - x - 1], x), x);
2
3
(%o3)
[x - a, x - x - 1]
Notese que aunque compose (polydecomp (p, x ), x ) devuelve siempre p (sin expandir), polydecomp (compose ([p_1, ..., p_n ], x ), x ) no devuelve necesariamente [p_1, ..., p_n ]:
(%i4) polydecomp (compose ([x^2 + 2*x + 3, x^2], x), x);
2
2
(%o4)
[x + 2, x + 1]
(%i5) polydecomp (compose ([x^2 + x + 1, x^2 + x + 1], x), x);
2
2
x + 3 x + 5
(%o5)
[------, ------, 2 x + 1]
4
2

polymod (p )
polymod (p, m )

[Funcion]
[Funcion]
Convierte el polinomio p a una representacion modular respecto del modulo actual,
que es el valor almacenado en la variable modulus.
La llamada polymod (p, m ) especifica un modulo m para ser utilizado en lugar de
valor almacenado en modulus.
Vease modulus.

powers (expr, x )

[Funcion]

Devuelve las potencias de x dentro de expr.


La instrucci
on load (powers) carga esta funcion.

quotient (p_1, p_2 )


quotient (p_1, p_2, x_1, ..., x_n )

[Funcion]
[Funcion]
Devuelve el polinomio p 1 dividido por el polinomio p 2. Los argumentos x 1, ...,
x n se interpretan como en la funcion ratvars.
La funci
on quotient devuelve el primer elemento de la lista devuelta por divide.

rat (expr )
rat (expr, x_1, ..., x_n )

[Funcion]
[Funcion]
Convierte expr al formato canonico racional (canonical rational expression o CRE)
expandiendo y combinando todos los terminos sobre un denominador com
un y cancelando el m
aximo com
un divisor del numerador y denominador, as como convirtiendo
n
umeros decimales en coma flotante a n
umeros racionales dentro de la tolerancia indicada por ratepsilon. Las variables se ordenan de acuerdo a x 1, ..., x n si se han
especificado, como en la funcion ratvars.
En general, rat no simplifica otras funciones que no sean la suma +, resta -, multiplicaci
on *, divisi
on / y exponenciacion de exponente entero, mientras que ratsimp
s lo hace. N
otese que los
atomos (n
umeros y variables) en expresiones en formato
CRE no son los mismos que en el formato general. Por ejemplo, rat(x)- x devuelve
rat(0), que tiene una representacion interna diferente de 0.

248

Manual de Maxima

Si ratprint vale false no apareceran mensajes informando al usuario sobre la conversi


on de n
umeros decimales en coma flotante a n
umeros racionales.
Si keepfloat vale true no se convertiran n
umeros decimales en coma flotante a
n
umeros racionales.
Veanse tambien ratexpand y ratsimp.
Ejemplos:
(%i1) ((x - 2*y)^4/(x^2 - 4*y^2)^2 + 1)*(y + a)*(2*y + x)
/ (4*y^2 + x^2);
4
(x - 2 y)
(y + a) (2 y + x) (------------ + 1)
2
2 2
(x - 4 y )
(%o1)
-----------------------------------2
2
4 y + x
(%i2) rat (%, y, a, x);
2 a + 2 y
(%o2)/R/
--------x + 2 y
[Variable opcional]
Valor por defecto: true
Si ratalgdenom vale true, se permite la racionalizacion de denominadores eliminando
radicales. La variable ratalgdenom solo tiene efecto cuando expresiones en formato
can
onico (CRE) est
an siendo utilizadas en modo algebraico.

ratalgdenom

ratcoef (expr, x, n )
ratcoef (expr, x )

[Funcion]
[Funcion]
Devuelve el coeficiente de la expresion x ^n dentro de la expresion expr. Si se omite,
n se considera igual a 1.
El valor devuelto est
a libre de las variables en x, excepto quizas en un sentido no
racional. Si no existe un coeficiente de este tipo se devuelve 0.
La funci
on ratcoef expande y simplifica racionalmente su primer argumento, por lo
que puede dar una respuesta diferente a la dada por la funcion coeff, la cual tiene un
car
acter puramente sint
actico. As, ratcoef ((x + 1)/y + x, x) devuelve (y + 1)/y,
mientras que coeff devuelve 1.
La llamada ratcoef (expr, x, 0), siendo expr una suma, devuelve una suma formada por los terminos que no contienen x.
Puesto que expr se simplifica racionalmente antes de ser examinada, algunos coeficientes puede que no aparezcan como en la expresion original.
Ejemplo:
(%i1) s: a*x + b*x + 5$
(%i2) ratcoef (s, a + b);
(%o2)
x

Captulo 14: Polinomios

249

ratdenom (expr )

[Funcion]
Devuelve el denominador de expr, despues de transformar expr al formato canonico
(CRE). El valor retornado esta tambien en formato CRE.
El argumento expr se transforma al formato CRE por la funcion rat, a menos que
ya este en este formato. Esta conversion puede cambiar la forma de expr colocando
todos sus terminos sobre un denominador com
un.
La funci
on denom es parecida, pero devuelve una expresion general en lugar de una
CRE. Tampoco denom intenta colocar todos sus terminos sobre un denominador
com
un, de manera que algunas expresiones que son consideradas como divisiones
por ratdenom, no son tales para denom.

ratdenomdivide

[Variable opcional]

Valor por defecto: true


Si ratdenomdivide vale true, la funcion ratexpand expande una fraccion en la que
el numerador es una suma en una suma de divisiones. En otro caso, ratexpand
reduce una suma de divisiones a una u
nica fraccion, cuyo numerador es la suma de
los denominadores de cada fraccion.
Ejemplos:
(%i1) expr: (x^2 + x + 1)/(y^2 + 7);
2
x + x + 1
(%o1)
---------2
y + 7
(%i2) ratdenomdivide: true$
(%i3) ratexpand (expr);
2
x
x
1
(%o3)
------ + ------ + -----2
2
2
y + 7
y + 7
y + 7
(%i4) ratdenomdivide: false$
(%i5) ratexpand (expr);
2
x + x + 1
(%o5)
---------2
y + 7
(%i6) expr2: a^2/(b^2 + 3) + b/(b^2 + 3);
2
b
a
(%o6)
------ + -----2
2
b + 3
b + 3
(%i7) ratexpand (expr2);
2

250

Manual de Maxima

(%o7)

b + a
-----2
b + 3

ratdiff (expr, x )

[Funcion]
Deriva la expresi
on racional expr con respecto a x. El argumento expr debe ser una
fracci
on algebraica o un polinomio en x. El argumento x puede ser una variable o
una subexpresi
on de expr.
El resultado equivale al devuelto por diff, aunque es posible que se obtenga en una
forma diferente. La funci
on ratdiff puede ser mas rapida que diff en expresiones
racionales.
La funci
on ratdiff devuelve una expresion en formato canonico o CRE si expr es
tambien una expresi
on CRE. En otro caso, ratdiff devuelve una expresion general.
La funci
on ratdiff considera u
nicamente la dependencia de expr respecto de x,
ignorando cualquier dependencia establecida por depends.
Ejemplo:
(%i1) expr: (4*x^3 + 10*x - 11)/(x^5 + 5);
3
4 x + 10 x - 11
(%o1)
---------------5
x + 5
(%i2) ratdiff (expr, x);
7
5
4
2
8 x + 40 x - 55 x - 60 x - 50
(%o2)
- --------------------------------10
5
x
+ 10 x + 25
(%i3) expr: f(x)^3 - f(x)^2 + 7;
3
2
(%o3)
f (x) - f (x) + 7
(%i4) ratdiff (expr, f(x));
2
(%o4)
3 f (x) - 2 f(x)
(%i5) expr: (a + b)^3 + (a + b)^2;
3
2
(%o5)
(b + a) + (b + a)
(%i6) ratdiff (expr, a + b);
2
2
(%o6)
3 b + (6 a + 2) b + 3 a + 2 a

ratdisrep (expr )

[Funcion]
Devuelve su argumento como una expresion general. Si expr es una expresion general,
se devuelve sin cambios.
Normalmente se invoca a ratdisrep a fin de convertir una expresion en formato
can
onico (CRE) al formato general, lo que puede ser utilizado si se quiere parar el

Captulo 14: Polinomios

251

contagio que produce el formato CRE, o para utilizar funciones racionales en contextos
no racionales.
Vease tambien totaldisrep.

ratexpand (expr )
ratexpand

[Funcion]
[Variable opcional]
Expande expr multiplicando productos de sumas y sumas con exponentes, combinando fracciones con com
un denominador, cancelando el maximo com
un divisor del
numerador y del denominador y luego dividiendo los sumandos del numerador por el
denominador.
El valor que devuelve ratexpand es una expresion general, incluso cuando expr est
a
en formato can
onico o CRE.
Si la variable ratexpand vale true hara que las expresiones CRE se expandan completamente cuando se conviertan al formato general o se muestren en el terminal,
mientras que si vale false se mostraran de forma recursiva. Vease tambien ratsimp.
Si ratdenomdivide vale true, ratexpand expande una fraccion en la que el numerador es una suma en una suma de fracciones, todas ellas con denominador com
un.
En otro caso, ratexpand reduce una suma de fracciones en una u
nica fraccion, cuyo
numerador es la suma de los numeradores de cada fraccion.
Si keepfloat vale true, los n
umeros decimales en coma flotante no se racionalizan
cuando las expresiones que los contienen se convierten al formato canonico racional
(CRE).
Ejemplos:
(%i1) ratexpand ((2*x - 3*y)^3);
3
2
2
3
(%o1)
- 27 y + 54 x y - 36 x y + 8 x
(%i2) expr: (x - 1)/(x + 1)^2 + 1/(x - 1);
x - 1
1
(%o2)
-------- + ----2
x - 1
(x + 1)
(%i3) expand (expr);
x
1
1
(%o3)
------------ - ------------ + ----2
2
x - 1
x + 2 x + 1
x + 2 x + 1
(%i4) ratexpand (expr);
2
2 x
2
(%o4)
--------------- + --------------3
2
3
2
x + x - x - 1
x + x - x - 1

ratfac
Valor por defecto: false

[Variable opcional]

252

Manual de Maxima

Si ratfac vale true, las expresiones canonicas (CRE) se manipulan en una forma
parcialmente factorizada.
Durante las operaciones racionales, las expresiones se mantienen completamente factorizadas tanto como sea posible sin llamar a factor. Esto debera ahorrar espacio y
tiempo en algunos c
alculos. El numerador y denominador se hacen primos relativos,
por ejemplo rat ((x^2 - 1)^4/(x + 1)^2) devuelve (x - 1)^4 (x + 1)^2), pero los
factores dentro de cada parte pueden no ser primos relativos.
En el paquete ctensr sobre manipulacion de tensores por componentes, los tensores de
Ricci, Einstein, Riemann y Weyl y la curvatura escalar se factorizan automaticamente
si ratfac vale true; ratfac debe activarse u
nicamente en aquellos casos en los que
se sabe que el n
umero de terminos de las componentes tensoriales es pequ~
no.
Nota: Los esquemas de comportamiento basados en ratfac y ratweight son incompatibles y no se debe pretender usarlos al mismo tiempo.

ratnumer (expr )

[Funcion]
Devuelve el numerador de expr, despues de reducir expr a su forma canonica (CRE).
El valor retornado est
a tambien en formato CRE.
El argumento expr se transforma al formato CRE por la funcion rat, a menos que
ya este en este formato. Esta conversion puede cambiar la forma de expr colocando
todos sus terminos sobre un denominador com
un.
Es parecida a la funci
on num, pero devuelve una expresion general en lugar de una
CRE. Adem
as, num no intenta colocar todos los terminos sobre un denominador
com
un, de manera que algunas expresiones que son consideradas fracciones por
ratnumer no se consideran como tales por num.

ratp (expr )

[Funcion]
Devuelve true si expr es una expresion canonica racional (canonical rational expression o CRE) o una CRE extendida, en caso contrario devuelve false.
Las expresiones CRE son creadas por rat y funciones asociadas. Las CRE extendidas
son creadas por taylor y funciones asociadas.
[Variable opcional]
Valor por defecto: true
Si ratprint vale true, se muestra al usuario un mensaje dando cuenta de la conversi
on de n
umeros decimales en coma flotante a formato racional.

ratprint

ratsimp (expr )
ratsimp (expr, x_1, ..., x_n )

[Funcion]
[Funcion]
Simplifica la expresi
on expr y todas sus subexpresiones, incluyendo los argumentos de
funciones no racionales. El resultado es un cociente de dos polinomios en una forma
recursiva, esto es, los coeficientes de la variable principal son polinomios respecto de las
otras variables. Las variables pueden incluir funciones no racionales, como sin (x^2
+ 1), y los argumentos de tales funciones son tambien racionalmente simplificados.
La llamada ratsimp (expr, x_1, ..., x_n ) permite la simplificacion racional con
la especificaci
on del orden de las variables, como en ratvars.
Si ratsimpexpons vale true, ratsimp se aplica a los exponentes de las expresiones
durante la simplificaci
on.

Captulo 14: Polinomios

253

Vease tambien ratexpand. Notese que ratsimp se ve afectada por algunas de las
variables globales que controlan a ratexpand.
Ejemplos:
(%i1) sin (x/(x^2 + x)) = exp ((log(x) + 1)^2 - log(x)^2);
2
2
x
(log(x) + 1) - log (x)
(%o1)
sin(------) = %e
2
x + x
(%i2) ratsimp (%);
1
2
(%o2)
sin(-----) = %e x
x + 1
(%i3) ((x - 1)^(3/2) - (x + 1)*sqrt(x - 1))/sqrt((x - 1)*(x + 1));
3/2
(x - 1)
- sqrt(x - 1) (x + 1)
(%o3)
-------------------------------sqrt((x - 1) (x + 1))
(%i4) ratsimp (%);
2 sqrt(x - 1)
(%o4)
- ------------2
sqrt(x - 1)
(%i5) x^(a + 1/a), ratsimpexpons: true;
2
a + 1
-----a
(%o5)
x

ratsimpexpons

[Variable opcional]

Valor por defecto: false


Si ratsimpexpons vale true, ratsimp se aplica a los exponentes de las expresiones
durante la simplificaci
on.

radsubstflag

[Variable opcional]

Valor por defecto: false


Si radsubstflag vale true se permite a ratsubst hacer la sustitucion u por sqrt
(x) in x.

ratsubst (a, b, c )

[Funcion]
Sustituye b por a en c y devuelve la expresion resultante. El argumento b puede ser
una suma, un producto, una potencia, etc.
La funci
on ratsubst reconoce el significado de las expresiones, mientras que subst
tan solo realiza sustituciones sintacticas. As por ejemplo, subst (a, x + y, x + y +
z) devuelve x + y + z cuando ratsubst devuelve z + a.

254

Manual de Maxima

Si radsubstflag vale true, ratsubst sustituye radicales en expresiones que no los


contienen explcitamente.
ratsubst ignora el valor true de la variable opcional keepfloat.
Ejemplos:
(%i1) ratsubst (a, x*y^2, x^4*y^3 + x^4*y^8);
3
4
(%o1)
a x y + a
(%i2) cos(x)^4 + cos(x)^3 + cos(x)^2 + cos(x) + 1;
4
3
2
(%o2)
cos (x) + cos (x) + cos (x) + cos(x) + 1
(%i3) ratsubst (1 - sin(x)^2, cos(x)^2, %);
4
2
2
(%o3)
sin (x) - 3 sin (x) + cos(x) (2 - sin (x)) + 3
(%i4) ratsubst (1 - cos(x)^2, sin(x)^2, sin(x)^4);
4
2
(%o4)
cos (x) - 2 cos (x) + 1
(%i5) radsubstflag: false$
(%i6) ratsubst (u, sqrt(x), x);
(%o6)
x
(%i7) radsubstflag: true$
(%i8) ratsubst (u, sqrt(x), x);
2
(%o8)
u

ratvars (x_1, ..., x_n )


ratvars ()
ratvars

[Funcion]
[Funcion]
[Variable del sistema]
Declara como variables principales x 1, ..., x n en expresiones racionales. Si x n est
a
presente en una expresi
on racional, se considerara como variable principal. Si no
est
a presente, entonces se considerara principal a la variable x [n-1] si aparece en la
expresi
on, se contin
ua as hasta x 1, que se considerara como variable principal solo
si ninguna de las variables que le siguen esta presente en la expresion.
Si una variable de la expresion racional no esta presente en la lista ratvars, se le
dar
a una prioridad inferior a la de x 1.
Los argumentos de ratvars pueden ser tanto variables como funciones no racionales
como sin(x).
La variable ratvars es una lista que contiene los argumentos pasados a la funcion
ratvars la u
ltima vez que fue invocada. Cada llamada a la funcion ratvars reinicializa la lista. La llamada ratvars () vaca la lista.

ratvarswitch

[Variable opcional]

Valor por defecto: true


Maxima almacena una lista interna en la variable Lisp VARLIST cuyo contenido son
las variables principales de las expresiones racionales. Cuando ratvarswitch vale
true, su valor por defecto, cada evaluacion comienza con la lista VARLIST vaca. En

Captulo 14: Polinomios

255

caso contrario, las variables principales de las expresiones anteriores se mantienen en


la lista VARLIST.
Las variables principales declaradas con la funcion ratvars no se ven afectadas por
la opci
on ratvarswitch.
Ejemplos:
Cuando ratvarswitch vale true, su valor por defecto, cada evaluacion comienza con
la lista VARLIST vaca.
(%i1) ratvarswitch:true$
(%i2) rat(2*x+y^2);
(%o2)/R/
(%i3) :lisp varlist
($X $Y)

2
y + 2 x

(%i3) rat(2*a+b^2);
(%o3)/R/

2
b + 2 a

(%i4) :lisp varlist


($A $B)
Cuando ratvarswitch vale false, las variables principales de las expresiones anteriores se mantienen en lista VARLIST.
(%i4) ratvarswitch:false$
(%i5) rat(2*x+y^2);
(%o5)/R/
(%i6) :lisp varlist
($X $Y)

2
y + 2 x

(%i6) rat(2*a+b^2);
(%o6)/R/

2
b + 2 a

(%i7) :lisp varlist


($A $B $X $Y)

ratweight (x_1, w_1, ..., x_n, w_n )


ratweight ()

[Funcion]
[Funcion]
Asigna un peso w i a la variable x i. Un termino sera reemplazado por 0 si su peso
excede el valor de la variable ratwtlvl (por defecto no se realiza el truncamiento).
El peso de un termino es la suma de los productos de los pesos de las variables que
lo forman multiplicados por sus exponentes. Por ejemplo, el peso de 3 x_1^2 x_2 es
2 w_1 + w_2. El truncamiento basado en ratwtlvl solamente se lleva a cabo cuando
se multiplican o se elevan a potencias expresiones canonicas (CRE).

256

Manual de Maxima

La llamada ratweight () devuelve la lista acumulada de asignaciones de pesos.


Nota: Los esquemas de comportamiento basados en ratfac y ratweight son incompatibles y no se debe pretender usarlos al mismo tiempo.
Ejemplos:
(%i1) ratweight (a, 1, b, 1);
(%o1)
[a, 1, b, 1]
(%i2) expr1: rat(a + b + 1)$
(%i3) expr1^2;
2
2
(%o3)/R/
b + (2 a + 2) b + a + 2 a + 1
(%i4) ratwtlvl: 1$
(%i5) expr1^2;
(%o5)/R/
2 b + 2 a + 1

ratweights

[Variable del sistema]

Valor por defecto: []


La variable ratweights es una lista que contiene los pesos asignados por ratweight.
Las lista es acumulativa, en el sentido de que cada llamada a ratweight a~
nade nuevos
elementos a la lista.
[Variable opcional]
Valor por defecto: false
La variable ratwtlvl se utiliza en combinacion con la funcion ratweight para controlar el truncamiento de expresiones racionales canonicas (CRE). Con el valor por
defecto, false, no se produce truncamiento alguno.

ratwtlvl

remainder (p_1, p_2 )


remainder (p_1, p_2, x_1, ..., x_n )

[Funcion]
[Funcion]
Devuelve el resto de la divisi
on del polinomio p 1 entre p 2. Los argumentos x 1, ...,
x n se interpretan como en ratvars.
La funci
on remainder devuelve el segundo elemento de la lista retornada por divide.

resultant (p_1, p_2, x )

[Funcion]
Calcula la resultante de los dos polinomios p 1 y p 2, eliminando la variable x. La
resultante es un determinante de los coeficientes de x en p 1 y p 2, que es igual a
cero si s
olo si p 1 y p 2 tienen un factor com
un no constante.
Si p 1 o p 2 pueden ser factorizados, puede ser necesario llamar a factor antes que
invocar a resultant.
La variable opcional resultant controla que algoritmo sera utilizado para calcular la
resultante. Veanse option_resultant y resultant.
La funci
on bezout toma los mismos argumentos que resultant y devuelve una matriz. El determinante del valor retornado es la resultante buscada.
Ejemplos:
(%i1) resultant(2*x^2+3*x+1, 2*x^2+x+1, x);
(%o1)
8
(%i2) resultant(x+1, x+1, x);

Captulo 14: Polinomios

257

(%o2)
0
(%i3) resultant((x+1)*x, (x+1), x);
(%o3)
0
(%i4) resultant(a*x^2+b*x+1, c*x + 2, x);
2
(%o4)
c - 2 b c + 4 a
(%i5) bezout(a*x^2+b*x+1, c*x+2, x);
[ 2 a 2 b - c ]
(%o5)
[
]
[ c
2
]
(%i6) determinant(%);
(%o6)
4 a - (2 b - c) c
[Variable opcional]

resultant

Valor por defecto: subres


La variable opcional resultant controla que algoritmo sera utilizado para calcular la
resultante con la funci
on resultant. Los valores posibles son:
subres

para el algoritmo PRS (polynomial remainder sequence) subresultante,

mod

para el algoritmo resultante modular y

red

para el algoritmo PRS (polynomial remainder sequence) reducido.

En la mayor parte de problemas, el valor por defecto, subres, es el mas apropiado.


Pero en el caso de problemas bivariantes o univariantes de grado alto, puede ser mejor
utilizar mod.

savefactors

[Variable opcional]

Valor por defecto: false


Si savefactors vale true, los factores de una expresion producto se almacenan por
ciertas funciones a fin de acelerar posteriores factorizaciones de expresiones que contengan algunos de estos factores.

showratvars (expr )

[Funcion]
Devuelve una lista de las variables de expresiones canonicas racionales (CRE) en la
expresi
on expr.
Vease tambien ratvars.

tellrat (p_1, ..., p_n )


tellrat ()

[Funcion]
[Funcion]
A~
nade al anillo de enteros algebraicos conocidos por Maxima los elementos que son
soluciones de los polinomios p 1, ..., p n. Cada argumento p i es un polinomio de
coeficientes enteros.
La llamada tellrat (x ) hace que se sustituya 0 por x en las funciones racionales.
La llamada tellrat () devuelve una lista con las sustituciones actuales.
A la variable algebraic se le debe asignar el valor true a fin de poder realizar la
simplificaci
on de enteros algebraicos.

258

Manual de Maxima

Maxima reconoce la unidad imaginaria %i y todas las races de los enteros.


La instrucci
on untellrat borra todas las propiedades de tellrat.
Es ambiguo aplicar tellrat a un polinomio multivariante tal como tellrat (x^2 y^2), pues no se sabe si sustituir y ^2 por x ^2 o al reves. Maxima sigue un cierto
orden, pero si el usuario quiere especificar uno en concreto, puede hacerlo mediante
la sintaxis tellrat (y^2 = x^2), que indica que se ponga x ^2 en lugar de y ^2.
Ejemplos:
(%i1) 10*(%i + 1)/(%i + 3^(1/3));
10 (%i + 1)
(%o1)
----------1/3
%i + 3
(%i2) ev (ratdisrep (rat(%)), algebraic);
2/3
1/3
2/3
1/3
(%o2)
(4 3
- 2 3
- 4) %i + 2 3
+ 4 3
- 2
(%i3) tellrat (1 + a + a^2);
2
(%o3)
[a + a + 1]
(%i4) 1/(a*sqrt(2) - 1) + a/(sqrt(3) + sqrt(2));
1
a
(%o4)
------------- + ----------------sqrt(2) a - 1
sqrt(3) + sqrt(2)
(%i5) ev (ratdisrep (rat(%)), algebraic);
(7 sqrt(3) - 10 sqrt(2) + 2) a - 2 sqrt(2) - 1
(%o5)
---------------------------------------------7
(%i6) tellrat (y^2 = x^2);
2
2
2
(%o6)
[y - x , a + a + 1]

totaldisrep (expr )

[Funcion]
Convierte cada subexpresi
on de expr del formato canonico (CRE) al general y devuelve el resultado. Si expr esta en formato CRE entonces totaldisrep es identico
a ratdisrep.
La funci
on totaldisrep puede ser u
til para modificar expresiones como las ecuaciones, listas, matrices, etc., que tienen algunas subexpresiones en formato CRE.

untellrat (x_1, ..., x_n )


Elimina de x 1, ..., x n las propiedades relacionadas con tellrat.

[Funcion]

Captulo 15: Funciones Especiales

259

15 Funciones Especiales
15.1 Introducci
on a las funciones especiales
A continuaci
on se especifican las notaciones correspondientes a las funciones especiales:
bessel_j (index, expr)
Funci
on de Bessel de primera especie
bessel_y (index, expr)
Funci
on de Bessel de segunda especie
bessel_i (index, expr)
Funci
on de Bessel modificada de primera especie
bessel_k (index, expr)
Funci
on de Bessel modificada de segunda especie
hankel_1 (v,z)
Funci
on de Hankel de primera especie
hankel_2 (v,z)
Funci
on de Hankel de segunda especie
struve_h (v,z)
Funci
on H de Struve
struve_l (v,z)
Funci
on L de Struve
%p[u,v] (z)
Funci
on de Legendre de primera especie
%q[u,v] (z)
Funci
on de Legendre de segunda especie
%f[p,q] ([], [], expr)
Funci
on hipergeom
etrica generalizada
gamma(z)
Funci
on Gamma
gammagreek(a,z)
Funci
on Gamma incompleta
gamma_incomplete (a,z)
Extremo de la funci
on Gamma incompleta
hypergeometric(l1, l2, z) Funci
on hipergeom
etrica
slommel
%m[u,k] (z)
Funci
on de Whittaker de primera especie
%w[u,k] (z)
Funci
on de Whittaker de segunda especie
erfc (z)
Complemento de la funci
on de error, erf
expintegral_e (v,z)
Integral exponencial E
expintegral_e1 (z)
Integral exponencial E1
expintegral_ei (z)
Integral exponencial Ei
expintegral_li (z)
Integral logar
tmica Li
expintegral_si (z)
Integral exponencial Si
expintegral_ci (z)
Integral exponencial Ci
expintegral_shi (z)
Integral exponencial Shi
expintegral_chi (z)
Integral exponencial Chi
kelliptic (z)
Integral el
ptica completa
de primera especie (K)
parabolic_cylinder_d(v,z) Funci
on D de cilindro parab
olico

15.2 Funciones de Bessel


bessel_j (v, z )

[Funcion]

Funci
on de Bessel de primera especie de orden v y argumento z.
La funci
on bessel_j se define como
k

X
(1)
k=0


z v+2 k
2

k! (v + k + 1)

aunque la serie infinita no se utiliza en los calculos.

260

Manual de Maxima

bessel_y (v, z )

[Funcion]

Funci
on de Bessel de segunda especie de orden v y argumento z.
La funci
on bessel_y se define como
cos ( v) Jv (z) Jv (z)
sin ( v)
si v no es un entero. En caso de que v sea un entero n, se calcula el lmite cuando v
se aproxima a n.

bessel_i (v, z )

[Funcion]
Funci
on modificada de Bessel de primera especie de orden v y argumento z.
La funci
on bessel_i se define como

 v+2 k

1
z
k! (v + k + 1) 2
k=0

aunque la serie infinita no se utiliza en los calculos.

bessel_k (v, z )

[Funcion]
Funci
on modificada de Bessel de segunda especie de orden v y argumento z.
La funci
on bessel_k se define como
csc ( v) (Iv (z) Iv (z))
2
si v no es un entero. Si v es igual al entero n, entonces se calcula el lmite cuando v
tiende a n.

hankel_1 (v, z )

[Funcion]
Funci
on de Hankel de primera especie de orden v y argumento z (A&S 9.1.3). La
funci
on hankel_1 se define como
bessel_j(v,z) + %i * bessel_y(v,z)
Maxima eval
ua hankel_1 numericamente para el orden real v y el argumento complejo
z en doble precisi
on (float). La evaluacion numerica en gran precision (bigfloat) y
para
ordenes complejos no esta implementada.
Si besselexpand vale true, hankel_1 se expande en terminos de funciones elementales cuando el orden v es la mitad de un entero impar. Vease al respecto
besselexpand.
Maxima reconoce la derivada de hankel_1 con respecto del argumento z.
Ejemplos:
Evaluaci
on numerica:
(%i1) hankel_1(1,0.5);
(%o1)
.2422684576748738 - 1.471472392670243 %i
(%i2) hankel_1(1,0.5+%i);
(%o2)
- .2558287994862166 %i - 0.239575601883016
No se soportan
ordenes complejos. Maxima devuelve una forma nominal:

Captulo 15: Funciones Especiales

261

(%i3) hankel_1(%i,0.5+%i);
(%o3)
hankel_1(%i, %i + 0.5)
Expansi
on de hankel_1 cuando besselexpand vale true:
(%i4) hankel_1(1/2,z),besselexpand:true;
sqrt(2) sin(z) - sqrt(2) %i cos(z)
(%o4)
---------------------------------sqrt(%pi) sqrt(z)
Derivada de hankel_1 respecto del argumento z. No esta soportada la derivada
respecto del orden v. Maxima devuelve una forma nominal:
(%i5) diff(hankel_1(v,z),z);
hankel_1(v - 1, z) - hankel_1(v + 1, z)
(%o5)
--------------------------------------2
(%i6) diff(hankel_1(v,z),v);
d
(%o6)
-- (hankel_1(v, z))
dv

hankel_2 (v, z )

[Funcion]
Funci
on de Hankel de segunda especie de orden v y argumento z (A&S 9.1.4). La
funci
on hankel_2 se define como
bessel_j(v,z) - %i * bessel_y(v,z)
Maxima eval
ua hankel_2 numericamente para el orden real v y el argumento complejo
z en doble precisi
on (float). La evaluacion numerica en gran precision (bigfloat) y
para
ordenes complejos no esta implementada.
Si besselexpand vale true, hankel_2 se expande en terminos de funciones elementales cuando el orden v es la mitad de un entero impar. Vease al respecto
besselexpand.
Maxima reconoce la derivada de hankel_2 con respecto del argumento z.
Veanse ejemplos en hankel_1.

besselexpand

[Variable optativa]

Valor por defecto: false


Controla la expansi
on de las funciones de Bessel cuando el orden es la mitad de un
entero impar. En tal caso, las funciones de Bessel se pueden expandir en terminos
de otras funciones elementales. Si besselexpand vale true, se expande la funcion de
Bessel.
(%i1) besselexpand: false$
(%i2) bessel_j (3/2, z);
3
(%o2)
bessel_j(-, z)
2
(%i3) besselexpand: true$
(%i4) bessel_j (3/2, z);
sin(z)
cos(z)

262

Manual de Maxima

(%o4)

sqrt(2) sqrt(z) (------ - ------)


2
z
z
--------------------------------sqrt(%pi)

scaled_bessel_i (v, z )

[Funcion]
Es la funci
on de Bessel modificada de primera especie de orden v y argumento z,
es decir scaledb esseli (v, z) = exp(abs(z)) besseli (v, z). Esta funcion es especialmente u
til para calcular besseli cuando z es grande. Sin embargo, Maxima no sabe
mucho m
as sobre esta funci
on. En calculos simbolicos, quizas sea preferible trabajar
directamente con la expresi
on exp(-abs(z))*bessel_i(v, z).

scaled_bessel_i0 (z )

[Funcion]

Identica a scaled_bessel_i(0,z).

scaled_bessel_i1 (z )

[Funcion]

Identica a scaled_bessel_i(1,z).

%s [u,v ] (z )

[Funcion]

Funci
on s[u,v](z) de Lommel. Gradshteyn & Ryzhik 8.570.1.

15.3 Funciones de Airy


Las funciones de Airy Ai(x) y Bi(x) se definen en la seccion 10.4. de Abramowitz and
Stegun, Handbook of Mathematical Functions.
y = Ai(x) y y = Bi(x) son dos soluciones linealmente independientes de la ecuacion
diferencia de Airy diff (y(x), x, 2) - x y(x) = 0.
Si el argumento x es un n
umero decimal en coma flotante real o complejo, se devolver
a
el valor numerico de la funci
on.

airy_ai (x )

[Funcion]

Funci
on de Airy Ai(x). (A&S 10.4.2)
La derivada diff (airy_ai(x), x) es airy_dai(x).
Veanse airy_bi, airy_dai y airy_dbi.

airy_dai (x )

[Funcion]

Es la derivada de la funci
on Ai de Airy, airy_ai(x).
Vease airy_ai.

airy_bi (x )

[Funcion]
Es la funci
on Bi de Airy, tal como la definen Abramowitz y Stegun, Handbook of
Mathematical Functions, Seccion 10.4. Se trata de la segunda solucion de la ecuacion
de Airy diff (y(x), x, 2) - x y(x) = 0.
Si el argumento x es un n
umero decimal real o complejo, se devolvera el valor numerico
de airy_bi siempre que sea posible. En los otros casos, se devuelve la expresion sin
evaluar.
La derivada diff (airy_bi(x), x) es airy_dbi(x).
Veanse airy_ai y airy_dbi.

Captulo 15: Funciones Especiales

263

airy_dbi (x )

[Funcion]

Es la derivada de la funci
on Bi de Airy, airy_bi(x).
Veanse airy_ai y airy_bi.

15.4 Funciones Gamma y factorial


Las funciones gamma, beta, psi y gamma incompleta estan definidas en el captulo 6 de
Abramowitz y Stegun, Handbook of Mathematical Functions.

bffac (expr, n )

[Funcion]
Versi
on para "bigfloat" de la funcion factorial (Gamma desplazada). El segundo
argumento indica cu
antos dgitos se conservan y devuelven, pudiendo utilizarse para
obtener algunas cifras extra.
[Variable optativa]

algepsilon
Valor por defecto: 10^8
El valor de algepsilon es usado por algsys.

bfpsi (n, z, fpprec )


bfpsi0 (z, fpprec )

[Funcion]
[Funcion]
La funci
on bfpsi es la poligamma de argumento real z y de orden el entero n. La
funci
on bfpsi0 es la digamma. La llamada bfpsi0 (z, fpprec ) equivale a bfpsi
(0, z, fpprec ).

Estas funciones devuelven valores "bigfloat".


"bigfloat" del valor de retorno.

La variable fpprec es la precision

cbffac (z, fpprec )

[Funcion]

Calcula el factorial de n
umeros complejos de punto flotante grandes.
La instrucci
on load ("bffac") carga esta funcion.

gamma (x )

[Funcion]

La definici
on b
asica de la funcion gamma (A&S 6.1.1) es
Z

(z) =

tz1 et dt

Maxima simplifica gamma para enteros positivos y para fracciones positivas o negativas. Para fracciones de denominador dos, el resultado es un n
umero racional multiplicado por sqrt(%pi). La simplificacion para valores enteros la controla factlim.
Para enteros mayores que factlim el resultado numerico de la funcion factorial, la
cual se utiliza para calcular gamma, producira un desbordamiento. La simplificacion
para n
umeros racionales la controla gammalim para evitar desbordamientos. Veanse
tambien factlim y gammalim.
Para enteros negativos, gamma no esta definida.
Maxima puede evaluar gamma numericamente para valores reales y complejos, tanto
en formato float (doble precision) como big float (precision arbitraria).
La funci
on gamma tiene simetra especular.

264

Manual de Maxima

Si gamma_expand vale true, Maxima expande gamma para argumentos del tipo z+n y
z-n, siendo n un entero.
Maxima conoce la derivada de gamma.
Ejemplos:
Simplificaci
on para enteros, fracciones de denominador dos y n
umeros racionales:
(%i1) map(gamma,[1,2,3,4,5,6,7,8,9]);
(%o1)
[1, 1, 2, 6, 24, 120, 720, 5040, 40320]
(%i2) map(gamma,[1/2,3/2,5/2,7/2]);
sqrt(%pi) 3 sqrt(%pi) 15 sqrt(%pi)
(%o2)
[sqrt(%pi), ---------, -----------, ------------]
2
4
8
(%i3) map(gamma,[2/3,5/3,7/3]);
2
1
2 gamma(-) 4 gamma(-)
2
3
3
(%o3)
[gamma(-), ----------, ----------]
3
3
9
Evaluaci
on numerica para valores reales y complejos:
(%i4) map(gamma,[2.5,2.5b0]);
(%o4)
[1.329340388179137, 1.329340388179137b0]
(%i5) map(gamma,[1.0+%i,1.0b0+%i]);
(%o5) [.4980156681183558 - .1549498283018108 %i,
4.980156681183561b-1 - 1.549498283018107b-1 %i]
Simetra especular:
(%i6) declare(z,complex)$
(%i7) conjugate(gamma(z));
(%o7)
gamma(conjugate(z))
Maxima expande gamma(z+n) y gamma(z-n) si gamma_expand vale true:
(%i8) gamma_expand:true$
(%i9) [gamma(z+1),gamma(z-1),gamma(z+2)/gamma(z+1)];
gamma(z)
(%o9)
[z gamma(z), --------, z + 1]
z - 1
Derivada de gamma:
(%i10) diff(gamma(z),z);
(%o10)
psi (z) gamma(z)
0
Vease tambien makegamma.
La constante de Euler-Mascheroni es %gamma.

log_gamma (z )
Logaritmo natural de la funcion gamma.

[Funcion]

Captulo 15: Funciones Especiales

265

gamma_greek (a, z )

[Funcion]

Funci
on gamma incompleta inferior (A&S 6.5.2):
z

ta1 et dt

(a, z) =
0

Vease tambien gamma_incomplete (funcion gamma incompleta superior).

gamma_incomplete (a,z )

[Funcion]

Funci
on gamma incompleta superior, A&S 6.5.3:

ta1 et dt

(a, z) =
z

Veanse tambien gamma_expand para controlar como se expresa gamma_incomplete


en terminos de funciones elementales y de erfc.
Veanse tambien las funciones relacionadas gamma_incomplete_regularized y
gamma_incomplete_generalized.

gamma_incomplete_regularized (a,z )

[Funcion]

Funci
on gamma incompleta superior regularizada, A&S 6.5.1.
(a, z)
(a)

Q (a, z) =

Veanse tambien gamma_expand para controlar como se expresa gamma_incomplete


en terminos de funciones elementales y de erfc.
Vease tambien gamma_incomplete.

gamma_incomplete_generalized (a,z1,z1 )

[Funcion]

Funci
on gamma incompleta generalizada.
Z

z2

(a, z1 , z2 ) =

ta1 et dt

z1

Veanse tambien gamma_incomplete y gamma_incomplete_regularized.


[Variable opcional]
Valor por defecto: false
gamma_expand controla la expansion de gamma_incomplete. Si gamma_expand vale
true, gamma_incomplete(v,z) se expande en terminos de z, exp(z) y erfc(z),
siempre que sea posible.
(%i1) gamma_incomplete(2,z);
(%o1)
gamma_incomplete(2, z)
(%i2) gamma_expand:true;
(%o2)
true
(%i3) gamma_incomplete(2,z);
- z
(%o3)
(z + 1) %e

gamma_expand

266

Manual de Maxima

(%i4) gamma_incomplete(3/2,z);
- z
sqrt(%pi) erfc(sqrt(z))
(%o4)
sqrt(z) %e
+ ----------------------2
[Variable optativa]

gammalim
Valor por defecto: 10000

La variable gammalim controla la simplificacion de la funcion gamma con argumentos


enteros o racionales. Si el valor absoluto del argumento no es mayor que gammalim, entonces se realizar
a la simplificacion. Notese que la variable factlim tambien controla
la simplificaci
on del resultado de gamma con argumento entero.

makegamma (expr )

[Funcion]
Transforma las funciones binomial, factorial y beta que aparecen en expr en funciones gamma.

Vease tambien makefact.

beta (a, b )

[Funcion]
La funci
on beta se define como gamma(a) gamma(b)/gamma(a+b) (A&S 6.2.1).
Maxima simplifica la funci
on beta para enteros positivos y n
umeros racionales cuya
suma sea entera. Si beta_args_sum_to_integer vale true, Maxima tambien simplifica expresiones generales cuya suma sea tambien entera.
Cuando a o b sean nulos, la funcion beta no esta definida.
En general, la funci
on beta no esta definida para enteros negativos. La excepcion
es para a=-n, siendo n un entero positivo y b otro entero positivo tal que b<=n,
entonces es posible definir una continuacion analtica. En este caso Maxima devuelve
un resultado.
Si beta_expand vale true, expresiones como beta(a+n,b),
beta(a,b+n) o beta(a,b-n), siendo n entero, se simplifican.

beta(a-n,b),

Maxima puede evaluar la funcion beta para valores reales y complejos, tanto de tipo
decimal flotante o big float. Para la evaluacion numerica Maxima utiliza log_gamma:
- log_gamma(b + a) + log_gamma(b) + log_gamma(a)
%e
Maxima reconoce la simetra de la funcion beta.
Maxima conoce las derivadas de la funcion beta, tanto respecto de a como de b.
Para expresar la funci
on beta como un cociente de funciones gamma, vease makegamma.
Ejemplos:
Simplificaci
on cuando uno de sus argumentos es entero:
(%i1) [beta(2,3),beta(2,1/3),beta(2,a)];
1
9
1
(%o1)
[--, -, ---------]
12 4 a (a + 1)
Simplificaci
on para argumentos racionales que suman un entero:

Captulo 15: Funciones Especiales

267

(%i2) [beta(1/2,5/2),beta(1/3,2/3),beta(1/4,3/4)];
3 %pi
2 %pi
(%o2)
[-----, -------, sqrt(2) %pi]
8
sqrt(3)
Cuando se iguala beta_args_sum_to_integer a true se simplifican expresiones m
as
generales si la suma de los argumentos se reduce a un entero:
(%i3) beta_args_sum_to_integer:true$
(%i4) beta(a+1,-a+2);
%pi (a - 1) a
(%o4)
-----------------2 sin(%pi (2 - a))
Posibles valores cuando uno de los argumentos es entero negativo:
(%i5) [beta(-3,1),beta(-3,2),beta(-3,3)];
1 1
1
(%o5)
[- -, -, - -]
3 6
3
beta(a+n,b) o beta(a-n) con n entero se simplifica si beta_expand vale true:
(%i6) beta_expand:true$
(%i7) [beta(a+1,b),beta(a-1,b),beta(a+1,b)/beta(a,b+1)];
a beta(a, b) beta(a, b) (b + a - 1) a
(%o7)
[------------, ----------------------, -]
b + a
a - 1
b
La funci
on beta no est
a definida si uno de sus argumentos es cero:
(%i7) beta(0,b);
beta: expected nonzero arguments; found 0, b
-- an error. To debug this try debugmode(true);
Evaluaci
on numerica para argumentos reales y complejos de tipo decimal flotante o
big float:
(%i8) beta(2.5,2.3);
(%o8) .08694748611299981
(%i9) beta(2.5,1.4+%i);
(%o9) 0.0640144950796695 - .1502078053286415 %i
(%i10) beta(2.5b0,2.3b0);
(%o10) 8.694748611299969b-2
(%i11) beta(2.5b0,1.4b0+%i);
(%o11) 6.401449507966944b-2 - 1.502078053286415b-1 %i
La funci
on beta es simetrica con simetra especular:
(%i14) beta(a,b)-beta(b,a);
(%o14)
(%i15) declare(a,complex,b,complex)$

268

Manual de Maxima

(%i16) conjugate(beta(a,b));
(%o16)
beta(conjugate(a), conjugate(b))
Derivada de la funci
on beta respecto de a:
(%i17) diff(beta(a,b),a);
(%o17)
- beta(a, b) (psi (b + a) - psi (a))
0
0

beta_incomplete (a, b, z )

[Funcion]

La definici
on b
asica de la funcion beta incompleta (A&S 6.6.1) es
z
/
[
b - 1 a - 1
I (1 - t)
t
dt
]
/
0
Esta definici
on es posible para realpart(a) > 0, realpart(b) > 0 y abs(z) < 1. Para
otras situaciones, la funci
on beta incompleta puede definirse por medio de una funcion
hipergeometrica generalizada:
gamma(a) hypergeometric_generalized([a, 1 - b], [a + 1], z) z
(Vease Funci
ons.wolfram.com para una completa definicion de la funcion beta incompleta.)
Para enteros negativos a = n y enteros positivos b = m con m <= n la funcion beta
incompleta se define como
m - 1
k
==== (1 - m) z
n - 1 \
k
z
>
----------/
k! (n - k)
====
k = 0
Maxima utiliza esta definici
on para simplificar beta_incomplete cuando a es entero
negativo.
Cuando a es entero positivo, beta_incomplete se simplifica para cualesquiera argumentos b y z, y para b entero positivo para cualesquiera argumentos a y z, con la
excepci
on de cuando a sea entero negativo.
Para z = 0 y realpart(a) > 0, beta_incomplete se anula. Para z=1 y realpart(b) >
0, beta_incomplete se reduce a la funcion beta(a,b).
Maxima eval
ua beta_incomplete numericamente para valores reales y complejos en
forma decimal y big float. La evaluacion numerica se realiza expandiendo la funcion
beta incompleta en fracciones continuas.
Si beta_expand vale true,
Maxima expande las
incomplete(a+n,b,z) y beta_incomplete(a-n,b,z),
positivo.

expresiones
siendo n

beta_
entero

Captulo 15: Funciones Especiales

269

Maxima conoce las derivadas de beta_incomplete con respecto a las variables a, b


y z, as como la integral respecto de la variable z.
Ejemplos:
Simplificaci
on para a entero positivo:
(%i1) beta_incomplete(2,b,z);
b
1 - (1 - z) (b z + 1)
(%o1)
---------------------b (b + 1)
Simplificaci
on para b entero positivo:
(%i2) beta_incomplete(a,2,z);
a
(a (1 - z) + 1) z
(%o2)
-----------------a (a + 1)
Simplificaci
on para a y b enteros positivos:
(%i3) beta_incomplete(3,2,z);
3
(3 (1 - z) + 1) z
(%o3)
-----------------12
Para a entero negativo y b <= (a):
(%i4) beta_incomplete(-3,1,z);
1
(%o4)
- ---3
3 z
Simplificaci
on para los valores z = 0 y z = 1:
(%i5) assume(a>0,b>0)$
(%i6) beta_incomplete(a,b,0);
(%o6)
0
(%i7) beta_incomplete(a,b,1);
(%o7)
beta(a, b)
Evaluaci
on numerica, tanto con float (precision doble) como big float (precision arbitraria):
(%i8) beta_incomplete(0.25,0.50,0.9);
(%o8)
4.594959440269333
(%i9) fpprec:25$
(%i10) beta_incomplete(0.25,0.50,0.9b0);
(%o10)
4.594959440269324086971203b0
Para abs(z) > 1, beta_incomplete devuelve un resultado complejo:
(%i11) beta_incomplete(0.25,0.50,1.7);
(%o11)
5.244115108584249 - 1.45518047787844 %i
Resultados para argumentos complejos mas generales:

270

Manual de Maxima

(%i14) beta_incomplete(0.25+%i,1.0+%i,1.7+%i);
(%o14)
2.726960675662536 - .3831175704269199 %i
(%i15) beta_incomplete(1/2,5/4*%i,2.8+%i);
(%o15)
13.04649635168716 %i - 5.802067956270001
(%i16)
Expansi
on cuando beta_expand vale true:
(%i23) beta_incomplete(a+1,b,z),beta_expand:true;

(%o23)

b a
a beta_incomplete(a, b, z)
(1 - z) z
-------------------------- - ----------b + a
b + a

(%i24) beta_incomplete(a-1,b,z),beta_expand:true;

(%o24)

b a - 1
beta_incomplete(a, b, z) (- b - a + 1)
(1 - z) z
-------------------------------------- - --------------1 - a
1 - a

Derivada e integral de beta_incomplete:


(%i34) diff(beta_incomplete(a, b, z), z);
b - 1 a - 1
(%o34)
(1 - z)
z
(%i35) integrate(beta_incomplete(a, b, z), z);
b a
(1 - z) z
(%o35) ----------- + beta_incomplete(a, b, z) z
b + a
a beta_incomplete(a, b, z)
- -------------------------b + a
(%i36) factor(diff(%, z));
(%o36)
beta_incomplete(a, b, z)

beta_incomplete_regularized (a, b, z )

[Funcion]

Funci
on beta incompleta regularizada A&S 6.6.2, definida como
beta_incomplete_regularized(a, b, z) =
beta_incomplete(a, b, z)
-----------------------beta(a, b)
Al igual que beta_incomplete, esta definicion no es completa.
Vease
Funci
ons.wolfram.com para una definicion completa de beta_incomplete_
regularized.
beta_incomplete_regularized se simplifica para a o b entero positivo.
Para z = 0 y realpart(a) > 0, beta_incomplete_regularized se anula. Para z=1 y
realpart(b) > 0, beta_incomplete_regularized se reduce a 1.

Captulo 15: Funciones Especiales

271

Maxima eval
ua beta_incomplete_regularized numericamente para valores reales y
complejos en forma decimal y big float.
Si beta_expand vale true, Maxima expande beta_incomplete_regularized para
los argumentos a + n o a n, siendo n entero.
Maxima conoce las derivadas de beta_incomplete_regularized con respecto a las
variables a, b y z, as como la integral respecto de la variable z.
Ejemplos:
Simplificaci
on para a o b enteros positivos:
(%i1) beta_incomplete_regularized(2,b,z);
b
(%o1)
1 - (1 - z) (b z + 1)
(%i2) beta_incomplete_regularized(a,2,z);
(%o2)

a
(a (1 - z) + 1) z

(%i3) beta_incomplete_regularized(3,2,z);
(%o3)

3
(3 (1 - z) + 1) z

Simplificaci
on para los valores z = 0 y z = 1:
(%i4) assume(a>0,b>0)$
(%i5) beta_incomplete_regularized(a,b,0);
(%o5)
0
(%i6) beta_incomplete_regularized(a,b,1);
(%o6)
1
Evaluaci
on numerica, tanto con float (precision doble) como big float (precision arbitraria):
(%i7) beta_incomplete_regularized(0.12,0.43,0.9);
(%o7)
.9114011367359802
(%i8) fpprec:32$
(%i9) beta_incomplete_regularized(0.12,0.43,0.9b0);
(%o9)
9.1140113673598075519946998779975b-1
(%i10) beta_incomplete_regularized(1+%i,3/3,1.5*%i);
(%o10)
.2865367499935403 %i - 0.122995963334684
(%i11) fpprec:20$
(%i12) beta_incomplete_regularized(1+%i,3/3,1.5b0*%i);
(%o12)
2.8653674999354036142b-1 %i - 1.2299596333468400163b-1
Expansi
on cuando beta_expand vale true:
(%i13) beta_incomplete_regularized(a+1,b,z);
b a
(1 - z) z
(%o13) beta_incomplete_regularized(a, b, z) - -----------a beta(a, b)
(%i14) beta_incomplete_regularized(a-1,b,z);

272

Manual de Maxima

(%o14) beta_incomplete_regularized(a, b, z)
b a - 1
(1 - z) z
- ---------------------beta(a, b) (b + a - 1)
Derivada e integral respecto de z:
(%i15) diff(beta_incomplete_regularized(a,b,z),z);
b - 1 a - 1
(1 - z)
z
(%o15)
------------------beta(a, b)
(%i16) integrate(beta_incomplete_regularized(a,b,z),z);
(%o16) beta_incomplete_regularized(a, b, z) z
b

(1 - z) z
a (beta_incomplete_regularized(a, b, z) - ------------)
a beta(a, b)
- ------------------------------------------------------b + a

beta_incomplete_generalized (a, b, z1, z2 )

[Funcion]

La definici
on b
asica de la funcion beta incompleta generalizada es
The basic definition of the generalized incomplete beta function is
z2
/
[
b - 1 a - 1
I
(1 - t)
t
dt
]
/
z1
Maxima simplifica beta_incomplete_regularized para a y b enteros positivos.
Para realpart(a) > 0 y z1 = 0 o z2 = 0, Maxima reduce beta_incomplete_
generalized a beta_incomplete. Para realpart(b) > 0 y z1 = 1 o z2=1, Maxima
reduce a una expresi
on con beta y beta_incomplete.
Maxima eval
ua beta_incomplete_generalized numericamente para valores reales y
complejos en forma decimal y big float.
Si beta_expand vale true, Maxima expande beta_incomplete_generalized para
los argumentos a + n y a n, siendo n entero positivo.
Maxima conoce las derivadas de beta_incomplete_generalized con respecto a las
variables a, b, z1 y z2, as como la integral respecto de las variables z1 y z2.
Ejemplos:
Maxima simplifica beta_incomplete_generalized para a y b enteros positivos:
(%i1) beta_incomplete_generalized(2,b,z1,z2);

Captulo 15: Funciones Especiales

(%o1)

273

b
b
(1 - z1) (b z1 + 1) - (1 - z2) (b z2 + 1)
------------------------------------------b (b + 1)

(%i2) beta_incomplete_generalized(a,2,z1,z2);
a
a
(a (1 - z2) + 1) z2 - (a (1 - z1) + 1) z1
(%o2)
------------------------------------------a (a + 1)
(%i3) beta_incomplete_generalized(3,2,z1,z2);
2
2
2
2
(1 - z1) (3 z1 + 2 z1 + 1) - (1 - z2) (3 z2 + 2 z2 + 1)
(%o3)
----------------------------------------------------------12
Simplificaci
on para los valores z1 = 0, z2 = 0, z1 = 1 o z2 = 1:
(%i4) assume(a > 0, b > 0)$
(%i5) beta_incomplete_generalized(a,b,z1,0);
(%o5)
- beta_incomplete(a, b, z1)
(%i6) beta_incomplete_generalized(a,b,0,z2);
(%o6)
- beta_incomplete(a, b, z2)
(%i7) beta_incomplete_generalized(a,b,z1,1);
(%o7)
beta(a, b) - beta_incomplete(a, b, z1)
(%i8) beta_incomplete_generalized(a,b,1,z2);
(%o8)
beta_incomplete(a, b, z2) - beta(a, b)
Evaluaci
on numerica para argumentos reales, tanto con float (precision doble) como
big float (precisi
on arbitraria):
(%i9) beta_incomplete_generalized(1/2,3/2,0.25,0.31);
(%o9)
.09638178086368676
(%i10) fpprec:32$
(%i10) beta_incomplete_generalized(1/2,3/2,0.25,0.31b0);
(%o10)
9.6381780863686935309170054689964b-2
Evaluaci
on numerica para argumentos complejos, tanto con float (precision doble)
como big float (precisi
on arbitraria):
(%i11) beta_incomplete_generalized(1/2+%i,3/2+%i,0.25,0.31);
(%o11)
- .09625463003205376 %i - .003323847735353769
(%i12) fpprec:20$
(%i13) beta_incomplete_generalized(1/2+%i,3/2+%i,0.25,0.31b0);
(%o13)
- 9.6254630032054178691b-2 %i - 3.3238477353543591914b-3
Expansi
on para a + n o a n, siendo n entero positivo con beta_expand igual true:

274

Manual de Maxima

(%i14) beta_expand:true$
(%i15) beta_incomplete_generalized(a+1,b,z1,z2);
b
a
b
a
(1 - z1) z1 - (1 - z2) z2
(%o15) ----------------------------b + a
a beta_incomplete_generalized(a, b, z1, z2)
+ ------------------------------------------b + a
(%i16) beta_incomplete_generalized(a-1,b,z1,z2);
beta_incomplete_generalized(a, b, z1, z2) (- b - a + 1)
(%o16) ------------------------------------------------------1 - a
b
a - 1
b
a - 1
(1 - z2) z2
- (1 - z1) z1
- ------------------------------------1 - a
Derivada respecto de la variable z1 e integrales respecto de z1 y z2:
(%i17) diff(beta_incomplete_generalized(a,b,z1,z2),z1);
b - 1
a - 1
(%o17)
- (1 - z1)
z1
(%i18) integrate(beta_incomplete_generalized(a,b,z1,z2),z1);
(%o18) beta_incomplete_generalized(a, b, z1, z2) z1
+ beta_incomplete(a + 1, b, z1)
(%i19) integrate(beta_incomplete_generalized(a,b,z1,z2),z2);
(%o19) beta_incomplete_generalized(a, b, z1, z2) z2
- beta_incomplete(a + 1, b, z2)
[Variable opcional]
Valor por defecto: false
Si beta_expand vale true, beta(a,b) y sus funciones relacionadas se expanden para
argumentos del tipo a + n o a n, siendo n un n
umero entero.

beta_expand

[Variable opcional]
Valor por defecto: false
Si beta_args_sum_to_integer vale true, Maxima simplifica beta(a,b) cuando la
suma de los argumentos a y b sea un entero.

beta_args_sum_to_integer

psi [n ](x )

[Funcion]
Es la derivada de log (gamma (x )) de orden n +1, de tal manera que psi[0](x ) es
la primera derivada, psi[1](x ) la segunda derivada y as sucesivamente.
En general, Maxima no sabe como calcular valores numericos de psi, pero s conoce
el valor exacto para algunos argumentos racionales. Existen algunas variables globales para controlar en que rangos racionales debe devolver psi resultados exac-

Captulo 15: Funciones Especiales

275

tos, si ello es posible. Veanse las descripciones de maxpsiposint, maxpsinegint,


maxpsifracnum y maxpsifracdenom. En resumen, x debe alcanzar un valor entre
maxpsinegint y maxpsiposint. Si el valor absoluto de la parte fraccional de x es
racional y tiene un numerador menor que maxpsifracnum y un denominador menor
que maxpsifracdenom, la funcion psi devolvera un valor exacto.
La funci
on bfpsi del paquete bffac puede calcular valores numericos.
[Variable opcional]

maxpsiposint
Valor por defecto: 20

La variable maxpsiposint guarda el mayor valor positivo para el que psi[n](x)


intentar
a calcular un valor exacto.
[Variable opcional]

maxpsinegint
Valor por defecto: -10

La variable maxpsinegint guarda el menor valor negativo para el que psi[n](x)


intentar
a calcular un valor exacto. Si x es menor que maxnegint, psi[n](x ) no
devolver
a una respuesta simplificada, aunque supiese como hacerlo.
[Variable opcional]

maxpsifracnum
Valor por defecto: 6

Sea x un n
umero racional menor que la unidad de la forma p/q. Si p es mayor que
maxpsifracnum, entonces psi[n ](x ) no devolvera una respuesta simplificada.
[Variable opcional]

maxpsifracdenom
Valor por defecto: 6

Sea x un n
umero racional menor que la unidad de la forma p/q. Si q es mayor que
maxpsifracnum, entonces psi[n ](x ) no devolvera una respuesta simplificada.

makefact (expr )

[Funcion]
Transforma las funciones binomial, gamma y beta que aparecen en expr en su notacion
factorial.
Vease tambien makegamma.

numfactor (expr )

[Funcion]
Devuelve el factor numerico que multiplica a la expresion expr, la cual debe tener un
u
nico termino.
(%i1) gamma (7/2);
(%o1)

15 sqrt(%pi)
-----------8

(%i2) numfactor (%);


(%o2)

15
-8

276

Manual de Maxima

15.5 Integral exponencial


La integral exponencial y sus funciones relacionadas se definen en el captulo 5 de
Abramowitz y Stegun, Handbook of Mathematical Functions.

expintegral_e1 (z )

[Funcion]

La integral exponencial E1(z) (A&S 5.1.1)

expintegral_ei (z )

[Funcion]

La integral exponencial Ei(z) (A&S 5.1.2)

expintegral_li (z )

[Funcion]

La integral exponencial Li(z) (A&S 5.1.3)

expintegral_e (n,z )

[Funcion]

La integral exponencial En(z) (A&S 5.1.4)

expintegral_si (z )

[Funcion]

La integral exponencial Si(z) (A&S 5.2.1)

expintegral_ci (z )

[Funcion]

La integral exponencial Ci(z) (A&S 5.2.2)

expintegral_shi (z )

[Funcion]

La integral exponencial Shi(z) (A&S 5.2.3)

expintegral_chi (z )

[Funcion]

La integral exponencial Chi(z) (A&S 5.2.4)

expintrep

[Option variable]

Valor por defecto: false


Transforma la representaci
on de la integral exponencial en terminos de las
funciones gamma_incomplete, expintegral_e1, expintegral_ei, expintegral_li,
expintegral_trig y expintegral_hyp.

expintexpand

[Option variable]

Valor por defecto: false


Expande la integral exponencial E[n](z) para valores medios de la integral en terminos
de las funciones Erfc o Erf y para positivos enteros en terminos de Ei .

15.6 Funci
on de error
La funci
on de error y sus asociadas se definen en el captulo 7 de Abramowitz y Stegun,
Handbook of Mathematical Functions.

erf (z )

[Funcion]

Funci
on de error erf(z) (A&S 7.1.1)
Vease tambien erfflag.

erfc (z )
Complemento de la funci
on de error erfc(z) (A&S 7.1.2)
erfc(z) = 1-erf(z)

[Funcion]

Captulo 15: Funciones Especiales

277

erfi (z )

[Funcion]

Funci
on de error imaginaria.
erfi(z) = -%i*erf(%i*z)

erf_generalized (z1,z2 )

[Funcion]

Funci
on de error generalizada Erf(z1,z2)

fresnel_c (z )

[Funcion]
Integral de Fresnel C(z) = integrate(cos((%pi/2)*t^2),t,0,z). (A&S 7.3.1)
La simplificaci
on fresnel_c(-x) = -fresnel_c(x) se aplica cuando la variable global
trigsign vale true.
La simplificaci
on fresnel_s(%i*x) = -%i*fresnel_s(x) se aplica cuando la variable
global %iargs vale true.
Veanse tambien erf_representation y hypergeometric_representation.

fresnel_s (z )

[Funcion]

Integral de Fresnel S(z) = integrate(sin((%pi/2)*t^2),t,0,z). (A&S 7.3.2)


La simplificaci
on fresnel s(-x) = -fresnel s(x) se aplica cuando la variable global
trigsign vale true.
La simplificaci
on fresnel s(%i*x) = %i*fresnel s(x) se aplica cuando la variable global
%iargs vale true.
Veanse tambien erf_representation y hypergeometric_representation.

erf_representation

[Variable opcional]

Valor por defecto: false


Cuando valga true erfc, erfi, erf generalized, fresnel s y fresnel c se transforman a
erf.

hypergeometric_representation

[Variable opcional]

Valor por defecto: false


Permite obtener la representacion hipergeometrica de las funciones fresnel s y fresnel c.

15.7 Funciones de Struve


Las funciones de Struve se definen en el captulo 12 de Abramowitz y Stegun, Handbook of
Mathematical Functions.

struve_h (v, z )

[Funcion]

Funci
on H de Struve de orden v y argumento z, (A&S 12.1.1).

struve_l (v, z )
Funci
on L modificada de Struve de orden v y argumento z, (A&S 12.2.1).

[Funcion]

278

Manual de Maxima

15.8 Funciones hipergeom


etricas
Las funciones hipergeometricas se definen en los captulos 13 y 15 de Abramowitz y Stegun,
Handbook of Mathematical Functions.
Maxima tiene un soporte limitado sobre estas funciones, que pueden aparecer en resultados devueltos por hgfred.

%m [k,u ] (z )

[Funcion]
Funci
on M de Whittaker M[k,u](z) = exp(-z/2)*z^(1/2+u)*M(1/2+u-k,1+2*u,z).
(A&S 13.1.32)

%w [k,u ] (z )

[Funcion]

Funci
on W de Whittaker. (A&S 13.1.33)

%f [p,q ] ([a],[b],z )

[Funcion]
Es la funci
on hipergeometrica pFq(a1,a2,..ap;b1,b2,..bq;z), donde a es una lista de
longitud p y b otra lista de longitud q.

hypergeometric ([a1, ..., ap ],[b1, ... ,bq ], x)

[Funcion]
Es la funci
on hipergeometrica. A diferencia de la funcion hipergeometrica %f de Maxima, la funci
on hypergeometric es simplificadora; ademas, hypergeometric soporta
la evaluaci
on en doble (float) y gran (bigfloat) precision. La evaluacion numerica
fuera del crculo unidad no esta en general soportada, pero s en el caso de la funcion
hipergeometrica de Gauss, cuando p = 2 y q = 1.

Si la variable opcional expand_hypergeometric vale true, (el valor por defecto es


false) y uno de los argumentos entr a1 y ap es entero negativo (caso polinomial),
entonces hypergeometric devuelve un polinomio expandido.
Ejemplos:
(%i1) hypergeometric([],[],x);
(%o1) %e^x
Los polinomios se expanden automaticamente cuando expand_hypergeometric vale
true.
(%i2) hypergeometric([-3],[7],x);
(%o2) hypergeometric([-3],[7],x)
(%i3) hypergeometric([-3],[7],x), expand_hypergeometric : true;
(%o3) -x^3/504+3*x^2/56-3*x/7+1
Se soporta la evaluaci
on en doble (float) y gran (bigfloat) precision:
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

hypergeometric([5.1],[7.1 + %i],0.42);
1.346250786375334 - 0.0559061414208204 %i
hypergeometric([5,6],[8], 5.7 - %i);
.007375824009774946 - .001049813688578674 %i
hypergeometric([5,6],[8], 5.7b0 - %i), fpprec : 30;
7.37582400977494674506442010824b-3
- 1.04981368857867315858055393376b-3 %i

Captulo 15: Funciones Especiales

279

15.9 Funciones de cilindro parab


olico
Las funciones de cilindro parab
olico se definen en el captulo 19 de Abramowitz y Stegun,
Handbook of Mathematical Functions.
Maxima tiene un soporte limitado sobre estas funciones, que pueden aparecer en resultados devueltos por hgfred.

parabolic_cylinder_d (v, z )

[Funcion]
Funci
on de cilindro parab
olico parabolic_cylinder_d(v,z). (A&s 19.3.1)

15.10 Funciones y variables para las funciones especiales


specint (exp(- s*t ) * expr, t )

[Funcion]
Calcula la transformada de Laplace de expr respecto de la variable t. El integrando
expr puede contener funciones especiales.
La funci
on specint admite las funciones especiales siguientes: la gamma incompleta,
las funciones de error (pero no erfi, siendo sencillo transformar erfi en la funcion
de error erf), integrales exponenciales, funciones de Bessel (incluidos productos de
funciones de Bessel), funciones de Hankel, de Hermite y los polinomios de Laguerre.
Adem
as, specint tambien admite la funcion hipergeometrica %f[p,q]([],[],z),
la funci
on de Whittaker de primera especie %m[u,k](z) y la de segunda especie
%w[u,k](z).
El resultado puede darse en terminos de funciones especiales y es posible que incluya
tambien funciones hipergeometricas sin simplificar.
Cuando laplace es incapaz de calcular la transformada de Laplace, entonces llama a
la funci
on specint. Puesto que laplace tiene programadas mas reglas para calcular
transformadas de Laplace, es preferible utilizar laplace en lugar de specint.
La ejecuci
on de demo(hypgeo) muestra algunos ejemplos de transformadas de Laplace
calculadas con specint.
Ejemplos:
(%i1) assume (p > 0, a > 0)$
(%i2) specint (t^(1/2) * exp(-a*t/4) * exp(-p*t), t);
sqrt(%pi)
(%o2)
-----------a 3/2
2 (p + -)
4
(%i3) specint (t^(1/2) * bessel_j(1, 2 * a^(1/2) * t^(1/2))
* exp(-p*t), t);
- a/p
sqrt(a) %e
(%o3)
--------------2
p
Ejemplos para integrales exponenciales:

280

Manual de Maxima

(%i4) assume(s>0,a>0,s-a>0)$
(%i5) ratsimp(specint(%e^(a*t)
*(log(a)+expintegral_e1(a*t))*%e^(-s*t),t));
log(s)
(%o5)
-----s - a
(%i6) logarc:true$
(%i7) gamma_expand:true$
radcan(specint((cos(t)*expintegral_si(t)
-sin(t)*expintegral_ci(t))*%e^(-s*t),t));
log(s)
(%o8)
-----2
s + 1
ratsimp(specint((2*t*log(a)+2/a*sin(a*t)
-2*t*expintegral_ci(a*t))*%e^(-s*t),t));
2
2
log(s + a )
(%o9)
-----------2
s
Resultados cuando se utiliza la expansion de gamma_incomplete y se cambia la representaci
on de expintegral_e1:
(%i10) assume(s>0)$
(%i11) specint(1/sqrt(%pi*t)*unit_step(t-k)*%e^(-s*t),t);
1
gamma_incomplete(-, k s)
2
(%o11)
-----------------------sqrt(%pi) sqrt(s)
(%i12) gamma_expand:true$
(%i13) specint(1/sqrt(%pi*t)*unit_step(t-k)*%e^(-s*t),t);
erfc(sqrt(k) sqrt(s))
(%o13)
--------------------sqrt(s)
(%i14) expintrep:expintegral_e1$
(%i15) ratsimp(specint(1/(t+a)^2*%e^(-s*t),t));
a s
a s %e
expintegral_e1(a s) - 1
(%o15)
- --------------------------------a

Captulo 15: Funciones Especiales

281

hgfred (a, b, t )

[Funcion]
Simplifica la funci
on hipergeometrica generalizada en terminos de otras funciones
mas sencillas. a es una lista de parametros del numerador y b lo es de parametros
del denominador.

En caso de que hgfred no pueda simplificar la funcion hipergeometrica devolvera una


expresi
on de la forma %f[p,q]([a], [b], x), siendo p el n
umero de elementos de a
y q el de b. Esta es la funci
on hipergeometrica generalizada pFq.
(%i1) assume(not(equal(z,0)));
(%o1)
[notequal(z, 0)]
(%i2) hgfred([v+1/2],[2*v+1],2*%i*z);
v/2
%i z
4
bessel_j(v, z) gamma(v + 1) %e
(%o2)
--------------------------------------v
z
(%i3) hgfred([1,1],[2],z);
log(1 - z)
- ---------z
(%i4) hgfred([a,a+1/2],[3/2],z^2);
(%o3)

1 - 2 a
(%o4)

1 - 2 a

(z + 1)
- (1 - z)
------------------------------2 (1 - 2 a) z

Tal como muestra el siguiente ejemplo, puede ser de utilidad cargar tambien el paquete
orthopoly. N
otese que L es el polinomio generalizado de Laguerre.
(%i5) load(orthopoly)$
(%i6) hgfred([-2],[a],z);
(a - 1)
(z)
2
------------a (a + 1)

2 L
(%o6)
(%i7) ev(%);

(%o7)

2
z
2 z
--------- - --- + 1
a (a + 1)
a

282

Manual de Maxima

lambert_w (z )

[Funcion]
Rama principal de la funci
on W de Lambert, solucion de la ecuacion z = W(z) *
exp(W(z)). (DLMF 4.13)

generalized_lambert_w (k, z )

[Funcion]
k-esima rama de la funci
on W de Lamberts, W(z), solucion de z = W(z) * exp(W(z)).
(DLMF 4.13)
La rama principal, representada por Wp(z) en DLMF, es lambert_w(z) =
generalized_lambert_w(0,z).
La otra rama con valores reales, representada por Wm(z) en DLMF, es generalized_
lambert_w(-1,z).

nzeta (z )

[Funcion]
Funci
on de dispersi
on del plasma. nzeta(z) = %i*sqrt(%pi)*exp(-z^2)*(1-erf(%i*z))

nzetar (z )

[Funcion]

Devuelve realpart(nzeta(z)).

nzetai (z )
Devuelve imagpart(nzeta(z)).

[Funcion]

Captulo 16: Funciones elpticas

283

16 Funciones elpticas
16.1 Introducci
on a las funciones e integrales elpticas
Maxima da soporte para las funciones elpticas jacobianas y para las integrales elpticas
completas e incompletas. Esto incluye la manipulacion simbolica de estas funciones y su
evaluacion numerica. Las definiciones de estas funciones y de muchas de sus propiedades
se pueden encontrar en Abramowitz y Stegun, captulos 1617, que es la fuente principal
utilizada para su programaci
on en Maxima, aunque existen algunas diferencias.
En particular, todas las funciones e integrales elpticas utilizan el paramero m en lugar
del modulo k o del
angulo alf a. Esta es una de las diferencias con Abramowitz y Stegun,
que utilizan el
angulo para las funciones elpticas. Las siguientes relaciones son validas:
m = k2
y
k = sin
Las funciones e integrales elpticas en Maxima tienen como objetivo primordial dar
soporte al c
alculo simb
olico, de ah que tambien esten incluidas la mayora de las derivadas
e integrales asociadas a estas funciones. No obstante lo anterior, si los argumentos dados a
las funciones son decimales en coma flotante, los resultados tambien seran decimales.
Sin embargo, la mayora de las propiedades no realacionadas con las derivadas de las
funciones e integrales elpticas todava no han sido programadas en Maxima.
Algunos ejemplos de funciones elpticas:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

jacobi_sn (u, m);


jacobi_sn(u, m)
jacobi_sn (u, 1);
tanh(u)
jacobi_sn (u, 0);
sin(u)
diff (jacobi_sn (u, m), u);
jacobi_cn(u, m) jacobi_dn(u, m)
diff (jacobi_sn (u, m), m);
jacobi_cn(u, m) jacobi_dn(u, m)

elliptic_e(asin(jacobi_sn(u, m)), m)
(u - ------------------------------------)/(2 m)
1 - m
2
jacobi_cn (u, m) jacobi_sn(u, m)
+ -------------------------------2 (1 - m)
Algunos ejemplos de integrales elpticas:

284

Manual de Maxima

(%i1) elliptic_f (phi, m);


(%o1)
elliptic_f(phi, m)
(%i2) elliptic_f (phi, 0);
(%o2)
phi
(%i3) elliptic_f (phi, 1);
phi
%pi
(%o3)
log(tan(--- + ---))
2
4
(%i4) elliptic_e (phi, 1);
(%o4)
sin(phi)
(%i5) elliptic_e (phi, 0);
(%o5)
phi
(%i6) elliptic_kc (1/2);
1
(%o6)
elliptic_kc(-)
2
(%i7) makegamma (%);
2 1
gamma (-)
4
(%o7)
----------4 sqrt(%pi)
(%i8) diff (elliptic_f (phi, m), phi);
1
(%o8)
--------------------2
sqrt(1 - m sin (phi))
(%i9) diff (elliptic_f (phi, m), m);
elliptic_e(phi, m) - (1 - m) elliptic_f(phi, m)
(%o9) (----------------------------------------------m
cos(phi) sin(phi)
- ---------------------)/(2 (1 - m))
2
sqrt(1 - m sin (phi))
El paquete para funciones e integrales elpticas fue programado por Raymond Toy. Se
distribuye, igual que Maxima, bajo la General Public License (GPL).

16.2 Funciones y variables para funciones elpticas


jacobi_sn (u, m )

[Funcion]

Funci
on elptica jacobiana sn(u, m).

jacobi_cn (u, m )
Funci
on elptica jacobiana cn(u, m).

[Funcion]

Captulo 16: Funciones elpticas

jacobi_dn (u, m )

285

[Funcion]

Funci
on elptica jacobiana dn(u, m).

jacobi_ns (u, m )

[Funcion]

Funci
on elptica jacobiana ns(u, m) = 1/sn(u, m).

jacobi_sc (u, m )

[Funcion]

Funci
on elptica jacobiana sc(u, m) = sn(u, m)/cn(u, m).

jacobi_sd (u, m )

[Funcion]

Funci
on elptica jacobiana sd(u, m) = sn(u, m)/dn(u, m).

jacobi_nc (u, m )

[Funcion]

Funci
on elptica jacobiana nc(u, m) = 1/cn(u, m).

jacobi_cs (u, m )

[Funcion]

Funci
on elptica jacobiana cs(u, m) = cn(u, m)/sn(u, m).

jacobi_cd (u, m )

[Funcion]

Funci
on elptica jacobiana cd(u, m) = cn(u, m)/dn(u, m).

jacobi_nd (u, m )

[Funcion]

Funci
on elptica jacobiana nc(u, m) = 1/cn(u, m).

jacobi_ds (u, m )

[Funcion]

Funci
on elptica jacobiana ds(u, m) = dn(u, m)/sn(u, m).

jacobi_dc (u, m )

[Funcion]

Funci
on elptica jacobiana dc(u, m) = dn(u, m)/cn(u, m).

inverse_jacobi_sn (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana sn(u, m).

inverse_jacobi_cn (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana cn(u, m).

inverse_jacobi_dn (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana dn(u, m).

inverse_jacobi_ns (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana ns(u, m).

inverse_jacobi_sc (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana sc(u, m).

inverse_jacobi_sd (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana sd(u, m).

inverse_jacobi_nc (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana nc(u, m).

inverse_jacobi_cs (u, m )
Inversa de la funci
on elptica jacobiana cs(u, m).

[Funcion]

286

Manual de Maxima

inverse_jacobi_cd (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana cd(u, m).

inverse_jacobi_nd (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana nc(u, m).

inverse_jacobi_ds (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana ds(u, m).

inverse_jacobi_dc (u, m )

[Funcion]

Inversa de la funci
on elptica jacobiana dc(u, m).

16.3 Funciones y variables para integrales elpticas


elliptic_f (phi, m )

[Funcion]

Integral elptica incompleta de primera especie, definida como

Z
0

d
p

1 m sin2

Veanse tambien elliptic_e y elliptic_kc.

elliptic_e (phi, m )

[Funcion]

Integral elptica incompleta de segunda especie, definida como


Z

1 m sin2 d

Veanse tambien elliptic_e y elliptic_ec.

elliptic_eu (u, m )

[Funcion]

Integral elptica incompleta de segunda especie, definida como


u

dn(v, m)2 dv =

1 mt2
dt
1 t2

donde = sn(u, m).


Esto se relaciona con elliptic_e mediante
E(u, m) = E(, m)
donde = sin1 sn(u, m).
Vease tambien elliptic_e.

elliptic_pi (n, phi, m )

[Funcion]

Integral elptica incompleta de tercera especie, definida como


Z
0

d
2

(1 n sin ) 1 m sin2

Maxima s
olo conoce la derivada respecto de phi.

Captulo 16: Funciones elpticas

287

elliptic_kc (m )

[Funcion]

Integral elptica completa de primera especie, definida como

Z
0

d
p

1 m sin2

Para algunos valores de m, se conoce el valor de la integral en terminos de la funcion


Gamma. H
agase uso de makegamma para realizar su calculo.

elliptic_ec (m )

[Funcion]

Integral elptica completa de segunda especie, definida como


Z

1 m sin2 d

Para algunos valores de m, se conoce el valor de la integral en terminos de la funcion


Gamma. H
agase uso de makegamma para realizar su calculo.

Captulo 17: Lmites

289

17 Lmites
17.1 Funciones y variables para lmites
[Variable optativa]
Valor por defecto: 4
Es el n
umero m
aximo de veces que la regla de LHopital es aplicada en la
funci
on limit, evitando bucles infinitos al iterar la regla en casos como limit
(cot(x)/csc(x), x, 0).

lhospitallim

limit (expr, x, val, dir )


limit (expr, x, val )
limit (expr )

[Funcion]
[Funcion]
[Funcion]
Calcula el lmite de expr cuando la variable real x se aproxima al valor val desde la
direcci
on dir. El argumento dir puede ser el valor plus para un lmite por la derecha,
minus para un lmite por la izquierda o simplemente se omite para indicar un lmite
en ambos sentidos.
La funci
on limit utiliza los smbolos especiales siguientes: inf (mas infinito) y minf
(menos infinito). En el resultado tambien puede hacer uso de und (indefinido), ind
(indefinido pero acotado) y infinity (infinito complejo).
infinity (infinito complejo) es el resultado que se obtiene cuando el lmite del modulo
de la expresi
on es infinito positivo, pero el propio lmite de la expresion no es infinito
positivo ni negativo. Esto sucede, por ejemplo, cuando el lmite del argumento complejo es una constante, como en limit(log(x), x, minf), o cuando el argumento
complejo oscila, como en limit((-2)^x, x, inf), o en aquellos casos en los que el
argumento complejo es diferente por cualquiera de los lados de un lmite, como en
limit(1/x, x, 0) o limit(log(x), x, 0).
La variable lhospitallim guarda el n
umero maximo de veces que la regla de
LHopital es aplicada en la funcion limit, evitando bucles infinitos al iterar la regla
en casos como limit (cot(x)/csc(x), x, 0).
Si la variable tlimswitch vale true, hara que la funcion limit utilice desarrollos de
Taylor siempre que le sea posible.
La variable limsubst evita que la funcion limit realice sustituciones sobre formas
desconocidas, a fin de evitar fallos tales como que limit (f(n)/f(n+1), n, inf)
devuelva 1. D
andole a limsubst el valor true se permitiran tales sustituciones.
La funci
on limit con un solo argumento se utiliza frecuentemente para simplificar
expresiones constantes, como por ejemplo limit (inf-1).
La instrucci
on example (limit) muestra algunos ejemplos.
Para informaci
on sobre el metodo utilizado vease Wang, P., "Evaluation of Definite
Integrals by Symbolic Manipulation", Ph.D. thesis, MAC TR-92, October 1971.
[Variable optativa]
Valor por defecto: false
La variable limsubst evita que la funcion limit realice sustituciones sobre formas
desconocidas, a fin de evitar fallos tales como que limit (f(n)/f(n+1), n, inf)
devuelva 1. D
andole a limsubst el valor true se permitiran tales sustituciones.

limsubst

290

Manual de Maxima

tlimit (expr, x, val, dir )


tlimit (expr, x, val )
tlimit (expr )

[Funcion]
[Funcion]
[Funcion]
Calcula el lmite del desarrollo de Taylor de la expresion expr de variable x en el
punto val en la direcci
on dir.
[Variable optativa]
Valor por defecto: true
Si tlimswitch vale true, la funcion limit utilizara un desarrollo de Taylor si el lmite
de la expresi
on dada no se puede calcular directamente. Esto permite el calculo de
lmites como limit(x/(x-1)-1/log(x),x,1,plus). Si tlimswitch vale false y el
lmite de la expresi
on no se puede calcular directamente, la funcion limit devolver
a
una expresi
on sin evaluar.

tlimswitch

Captulo 18: Diferenciaci


on

291

18 Diferenciaci
on
18.1 Funciones y variables para la diferenciaci
on
antid (expr, x, u(x))

[Funcion]
Devuelve una lista con dos elementos, de manera que se pueda calcular la antiderivada
de expr respecto de x a partir de la lista. La expresion expr puede contener una
funci
on no especificada u y sus derivadas.
Sea L la lista con dos elementos que devuelve la funcion antid. Entonces, L [1] +
integrate (L [2], x ) es una antiderivada de expr con respecto a x.
Si la ejecuci
on de antid resulta exitosa, el segundo elemento de la lista retornada es
cero. En caso contrario, el segundo elemento es distinto de cero y el primero puede
ser nulo o no. Si antid no es capaz de hacer ning
un progreso, el primer elemento es
nulo y el segundo no nulo.
Es necesario ejecutar load ("antid") para cargar esta funcion. El paquete antid
define tambien las funciones nonzeroandfreeof y linear.
La funci
on antid est
a relacionada con antidiff como se indica a continuacion. Sea
L la lista devuelta por la funcion antid. Entonces, el resultado de antidiff es igual
a L [1] + integrate (L [2], x ), donde x es la variable de integracion.
Ejemplos:
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
z(x) d
(%o2)
y(x) %e
(-- (z(x)))
dx
(%i3) a1: antid (expr, x, z(x));
z(x)
z(x) d
(%o3)
[y(x) %e
, - %e
(-- (y(x)))]
dx
(%i4) a2: antidiff (expr, x, z(x));
/
z(x)
[
z(x) d
(%o4)
y(x) %e
- I %e
(-- (y(x))) dx
]
dx
/
(%i5) a2 - (first (a1) + integrate (second (a1), x));
(%o5)
0
(%i6) antid (expr, x, y(x));
z(x) d
(%o6)
[0, y(x) %e
(-- (z(x)))]
dx
(%i7) antidiff (expr, x, y(x));
/
[
z(x) d
(%o7)
I y(x) %e
(-- (z(x))) dx

292

Manual de Maxima

]
/

dx

antidiff (expr, x, u (x ))

[Funcion]
Devuelve la antiderivada de expr respecto de x. La expresion expr puede contener
una funci
on no especificada u y sus derivadas.
Cuando antidiff se ejecuta con exito, la expresion resultante no tiene smbolos integrales (esto es, no tiene referencias a la funcion integrate). En otro caso, antidiff
devuelve una expresi
on que se encuentra total o parcialmente bajo el signo de integraci
on. Si antidiff no puede ralizar ning
un progreso, el valor devuelto se encuentra
completamente bajo la integral.
Es necesario ejecutar load ("antid") para cargar esta funcion. El paquete antid
define tambien las funciones nonzeroandfreeof y linear.
La funci
on antidiff est
a relacionada con antid como se indica a continuacion. Sea
L la lista de dos elementos que devuelve antid. Entonces, el valor retornado por
antidiff es igual a L [1] + integrate (L [2], x ), donde x es la variable de integraci
on.
Ejemplos:
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
z(x) d
(%o2)
y(x) %e
(-- (z(x)))
dx
(%i3) a1: antid (expr, x, z(x));
z(x)
z(x) d
(%o3)
[y(x) %e
, - %e
(-- (y(x)))]
dx
(%i4) a2: antidiff (expr, x, z(x));
/
z(x)
[
z(x) d
(%o4)
y(x) %e
- I %e
(-- (y(x))) dx
]
dx
/
(%i5) a2 - (first (a1) + integrate (second (a1), x));
(%o5)
0
(%i6) antid (expr, x, y(x));
z(x) d
(%o6)
[0, y(x) %e
(-- (z(x)))]
dx
(%i7) antidiff (expr, x, y(x));
/
[
z(x) d
(%o7)
I y(x) %e
(-- (z(x))) dx
]
dx
/

Captulo 18: Diferenciaci


on

293

at (expr, [eqn_1, ..., eqn_n ])


at (expr, eqn )

[Funcion]
[Funcion]
Eval
ua la expresi
on expr asignando a las variables los valores especificados para ellas
en la lista de ecuaciones [eqn_1, ..., eqn_n ] o en la ecuacion simple eqn.
Si una subexpresi
on depende de cualquiera de las variables para la cual se especifica
un valor, pero no puede ser evaluado, entonces at devuelve una forma nominal.
La funci
on at realiza m
ultiples sustituciones en serie, no en paralelo.
Vease tambien atvalue. Para otras funciones que tambien llevan a cabo sustituciones,
cons
ultense subst y ev.
Ejemplos:
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
2
(%o1)
a
(%i2) atvalue (diff (f(x,y), x), x = 0, 1 + y);
(%o2)
@2 + 1
(%i3) printprops (all, atvalue);
!
d
!
--- (f(@1, @2))!
= @2 + 1
d@1
!
!@1 = 0
2
f(0, 1) = a
(%o3)
done
(%i4) diff (4*f(x, y)^2 - u(x, y)^2, x);
d
d
(%o4) 8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
dx
dx
(%i5) at (%, [x = 0, y = 1]);
!
2
d
!
(%o5)
16 a - 2 u(0, 1) (-- (u(x, y))!
)
dx
!
!x = 0, y = 1

atomgrad

[Propiedad]

La propiedad atomgrad es asignada por gradef.

atvalue (expr, [x_1 = a_1, ..., x_m = a_m ], c )


atvalue (expr, x_1 = a_1, c )

[Funcion]
[Funcion]

Asigna el valor c a expr en el punto x = a .


La expresi
on expr es una funcion del tipo f (x_1, ..., x_m ), o una derivada, diff
(f (x_1, ..., x_m ), x_1, n_1, ..., x_n, n_m ) en la que aparecen los argumentos
de la funci
on de forma explcita. Los smbolos n i se refieren al orden de diferenciacion
respecto de x i.

294

Manual de Maxima

El punto en el que atvalue establece el valor se especifica mediante la lista de ecuaciones [x_1 = a_1, ..., x_m = a_m ]. Si hay una u
nica variable x 1, la ecuacion
puede escribirse sin formar parte de una lista.
La llamada printprops ([f_1, f_2, ...], atvalue) muestra los valores asignados
por atvalue a las funciones f_1, f_2, .... La llamada printprops (f, atvalue)
muestra los valores asignados por atvalue a la funcion f. La llamada printprops
(all, atvalue) muestra los valores asignados por atvalue a todas las funciones.
Los smbolos @1, @2, ... representan las variables x 1, x 2, ... cuando se muestran los
valores asignados por atvalue.
La funci
on atvalue eval
ua sus argumentos y devuelve c, el valor asignado.
Ejemplos:
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
2
(%o1)
a
(%i2) atvalue (diff (f(x,y), x), x = 0, 1 + y);
(%o2)
@2 + 1
(%i3) printprops (all, atvalue);
!
d
!
--- (f(@1, @2))!
= @2 + 1
d@1
!
!@1 = 0
2
f(0, 1) = a
(%o3)
done
(%i4) diff (4*f(x,y)^2 - u(x,y)^2, x);
d
d
(%o4) 8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
dx
dx
(%i5) at (%, [x = 0, y = 1]);
!
2
d
!
(%o5)
16 a - 2 u(0, 1) (-- (u(x, y))!
)
dx
!
!x = 0, y = 1

cartan -

[Funcion]
El c
alculo exterior de formas diferenciales es una herramienta basica de la geometra
diferencial desarrollada por Elie Cartan, teniendo importantes aplicaciones en la teora
de ecuaciones diferenciales en derivadas parciales. El paquete cartan dispone de las
funciones ext_diff y lie_diff, as como de los operadores ~ (producto exterior) y |
(contracci
on de una forma con un vector). La orden demo (tensor) permite ver una
breve descripci
on de estas instrucciones, junto con ejemplos.
El paquete cartan fue escrito por F.B. Estabrook y H.D. Wahlquist.

Captulo 18: Diferenciaci


on

295

del (x )

[Funcion]

La expresi
on del (x ) representa el diferencial de la variable x.
La funci
on diff devuelve una expresion que contiene a del si no se ha especificado
una variable independiente. En este caso, el valor retornado es el llamado "diferencial
total".
Ejemplos:
(%i1) diff (log (x));
del(x)
(%o1)
-----x
(%i2) diff (exp (x*y));
x y
x y
(%o2)
x %e
del(y) + y %e
del(x)
(%i3) diff (x*y*z);
(%o3)
x y del(z) + x z del(y) + y z del(x)

delta (t )

[Funcion]
Es la funci
on delta de Dirac.
En el estado actual de desarrollo de Maxima, solo laplace reconoce la funcion delta.
Ejemplo:
(%i1) laplace (delta (t - a) * sin(b*t), t, s);
Is a positive, negative, or zero?
p;
(%o1)

- a s
sin(a b) %e

[Variable del sistema]


Valor por defecto: []
La variable dependencies es la lista de atomos que tienen alg
un tipo de dependencia
funcional, asignada por depends o gradef. La lista dependencies es acumulativa:
cada llamada a depends o gradef a~
nade elementos adicionales.
Veanse depends y gradef.

dependencies

depends (f_1, x_1, ..., f_n, x_n )

[Funcion]
Declara dependencias funcionales entre variables con el proposito de calcular
derivadas. En ausencia de una dependencia declarada, diff (f, x) devuelve cero.
Si se declara depends (f, x), diff (f, x) devuelve una derivada simbolica (esto es,
una expresi
on con diff).
Cada argumento f 1, x 1, etc., puede ser el nombre de una variable, de un arreglo
o una lista de nombres. Cada elemento de f i (quizas un u
nico elemento) se declara
como dependiente de cada elemento de x i (quizas tambien un u
nico elemento). Si
alguno de los f i es el nombre de un arreglo o contiene el nombre de un arreglo, todos
los elemento del arregl dependen de x i.
La funci
on diff reconoce dependencias indirectas establecidas por depends y aplica
la regla de la cadena en tales casos.

296

Manual de Maxima

La instrucci
on remove (f, dependency) borra todas las dependencias declaradas
para f.
La funci
on depends devuelve una lista con las dependencias que han sido establecidas.
Las dependencias se a~
naden a la variable global dependencies. La funcion depends
eval
ua sus argumentos.
La funci
on diff es la u
nica instruccion de Maxima que reconoce las dependencias
establecidas por depends. Otras funciones (integrate, laplace, etc.) solamente reconocen dependencias explcitamente representadas por sus argumentos. Por ejemplo,
integrate no reconoce la dependencia de f respecto de x a menos que se represente
explcitamente como integrate (f(x), x).
(%i1) depends ([f, g], x);
(%o1)
[f(x), g(x)]
(%i2) depends ([r, s], [u, v, w]);
(%o2)
[r(u, v, w), s(u, v, w)]
(%i3) depends (u, t);
(%o3)
[u(t)]
(%i4) dependencies;
(%o4)
[f(x), g(x), r(u, v, w), s(u, v, w), u(t)]
(%i5) diff (r.s, u);
dr
ds
(%o5)
-- . s + r . -du
du
(%i6) diff (r.s, t);
dr du
ds du
(%o6)
-- -- . s + r . -- -du dt
du dt
(%i7) remove (r, dependency);
(%o7)
done
(%i8) diff (r.s, t);
ds du
(%o8)
r . -- -du dt

derivabbrev

[Variable optativa]

Valor por defecto: false


Si derivabbrev vale true, las derivadas simbolicas (esto es, expresiones con diff) se
muestran como subndices. En otro caso, las derivadas se muestran en la notacion de
Leibniz, dy/dx.

derivdegree (expr, y, x )

[Funcion]
Devuelve el mayor grado de la derivada de la variable dependiente y respecto de la
variable independiente x que aparece en expr.
Ejemplo:
(%i1) diff (y, x, 2) + diff (y, z, 3) + diff (y, x) * x^2;
3
2
d y
d y
2 dy

Captulo 18: Diferenciaci


on

(%o1)

--- + --- + x
3
2
dz
dx
(%i2) derivdegree (%, y, x);
(%o2)
2

297

-dx

derivlist (var_1, ..., var_k )

[Funcion]
Hace que las derivadas calculadas por la instruccion ev se calculen respecto de las
variables indicadas.
[Variable optativa]
Valor por defecto: false
Si derivsubst vale true, una sustitucion no sintactica del estilo subst (x, diff
(y, t), diff (y, t, 2)) devuelve diff (x, t).

derivsubst

diff
diff
diff
diff

(expr, x_1, n_1, ..., x_m, n_m )


[Funcion]
(expr, x, n )
[Funcion]
(expr, x )
[Funcion]
(expr )
[Funcion]
Devuelve la derivada o diferencial de expr respecto de alguna o de todas las variables
presentes en expr.
La llamada diff (expr, x, n ) devuelve la n-esima derivada de expr respecto de x.
La llamada diff (expr, x_1, n_1, ..., x_m, n_m ) devuelve la derivada parcial de
expr con respecto de x 1, ..., x m. Equivale a diff (... (diff (expr, x_m, n_m )
...), x_1, n_1 ).
La llamada diff (expr, x ) devuelve la primera derivada de expr respecto de la
variable x.
La llamada diff (expr ) devuelve el diferencial total de expr, esto es, la suma de
las derivadas de expr respecto de cada una de sus variables, multiplicadas por el
diferencial del de cada una de ellas.
La forma nominal de diff es necesaria en algunos contextos, como para definir ecuaciones diferenciales. En tales casos, diff puede ir precedida de un apostrofo (como
diff) para evitar el c
alculo de la derivada.
Si derivabbrev vale true, las derivadas se muestran como subndices. En otro caso,
se muestran en la notaci
on de Leibniz, dy/dx.
Ejemplos:
(%i1) diff (exp (f(x)), x, 2);
2
f(x) d
f(x) d
2
(%o1)
%e
(--- (f(x))) + %e
(-- (f(x)))
2
dx
dx
(%i2) derivabbrev: true$
(%i3) integrate (f(x, y), y, g(x), h(x));
h(x)
/

298

Manual de Maxima

(%o3)

[
I
f(x, y) dy
]
/
g(x)

(%i4) diff (%, x);


h(x)
/
[
(%o4) I
f(x, y) dy + f(x, h(x)) h(x) - f(x, g(x)) g(x)
]
x
x
x
/
g(x)
Para el paquete sobre tensores se han introducido las siguientes modificaciones:
(1) Las derivadas de los objetos indexados en expr tendran las variables x i a~
nadidas
como argumentos adicionales. Entonces se ordenaran todos los ndices de derivadas.
(2) Las x i pueden ser enteros entre 1 hasta el valor de la variable dimension [valor por
defecto: 4]. Esto har
a que la diferenciacion sea llevada a cabo con respecto al x i-esimo
n
umero de la lista coordinates, la cual debera contener una lista con los nombres
de las coordenadas, por ejemplo, [x, y, z, t]. Si coordinates es una variableis
at
omica, entonces esa variable sera utilizada como variable de diferenciacion. Se
permite la utilizaci
on de arreglos con los nombres de las coordenadas o nombres con
subndices, como X[1], X[2], ... to be used. Si a coordinates no se le ha asignado
ning
un valor, entonces las variables seran tratadas como se ha indicado en (1).

diff

[Smbolo especial]
Si el nombre diff est
a presente en una llamada a la funcion ev en modo evflag,
entonces se calculan todas las derivadas presentes en expr.

express (expr )

[Funcion]
Transforma los nombres de los operadores diferenciales en expresiones que contienen
derivadas parciales. Los operadores reconocidos por la funcion express son: grad
(gradiente), div (divergencia), curl (rotacional), laplacian (laplaciano) y ~ (producto vectorial).
Las derivadas simb
olicas (es decir, las que incluyen la forma nominal diff) que aparecen en la expresi
on devuelta por express, se pueden calcular pasandole a ev el argumento diff, o escribiendolo directamente en la lnea de comandos. En este contexto,
diff act
ua como evfun.
Es necesario ejecutar load ("vect") para cargar esta funcion.
Ejemplos:
(%i1) load ("vect")$
(%i2) grad (x^2 + y^2 + z^2);
2
2
2
(%o2)
grad (z + y + x )
(%i3) express (%);
d
2
2
2
d
2
2
2
d
2
2
2

Captulo 18: Diferenciaci


on

299

(%o3) [-- (z + y + x ), -- (z + y + x ), -- (z + y + x )]
dx
dy
dz
(%i4) ev (%, diff);
(%o4)
[2 x, 2 y, 2 z]
(%i5) div ([x^2, y^2, z^2]);
2
2
2
(%o5)
div [x , y , z ]
(%i6) express (%);
d
2
d
2
d
2
(%o6)
-- (z ) + -- (y ) + -- (x )
dz
dy
dx
(%i7) ev (%, diff);
(%o7)
2 z + 2 y + 2 x
(%i8) curl ([x^2, y^2, z^2]);
2
2
2
(%o8)
curl [x , y , z ]
(%i9) express (%);
d
2
d
2
d
2
d
2
d
2
d
2
(%o9) [-- (z ) - -- (y ), -- (x ) - -- (z ), -- (y ) - -- (x )]
dy
dz
dz
dx
dx
dy
(%i10) ev (%, diff);
(%o10)
[0, 0, 0]
(%i11) laplacian (x^2 * y^2 * z^2);
2 2 2
(%o11)
laplacian (x y z )
(%i12) express (%);
2
2
2
d
2 2 2
d
2 2 2
d
2 2 2
(%o12) --- (x y z ) + --- (x y z ) + --- (x y z )
2
2
2
dz
dy
dx
(%i13) ev (%, diff);
2 2
2 2
2 2
(%o13)
2 y z + 2 x z + 2 x y
(%i14) [a, b, c] ~ [x, y, z];
(%o14)
[a, b, c] ~ [x, y, z]
(%i15) express (%);
(%o15)
[b z - c y, c x - a z, a y - b x]

gradef (f (x_1, ..., x_n ), g_1, ..., g_m )


gradef (a, x, expr )

[Funcion]
[Funcion]
Define las derivadas parciales, o componentes del gradiente, de la funcion f o variable
a.
La llamada gradef (f (x_1, ..., x_n ), g_1, ..., g_m ) define df /dx_i como g i,
donde g i es una expresi
on; g i puede ser una llamada a funcion, pero no el nombre
de una funci
on. El n
umero de derivadas parciales m puede ser menor que el n
umero

300

Manual de Maxima

de argumentos n, en cuyo caso las derivadas se definen solamente con respecto a x 1,


...., x m.
La llamada gradef (a, x, expr ) define la derivada de la variable a respecto de x en
expr. Con esto se establece la dependencia de a respecto de x a traves de depends
(a, x ).
El primer argumento f (x_1, ..., x_n ) o a no se eval
ua, pero s lo hacen el resto de
argumentos g 1, ..., g m. La llamada a gradef devuelve la funcion o variable para la
que se define la derivada parcial.
La instrucci
on gradef puede redefinir las derivadas de las funciones propias de Maxima. Por ejemplo, gradef (sin(x), sqrt (1 - sin(x)^2)) redefine la derivada de
sin.
La instrucci
on gradef no puede definir derivadas parciales de funciones subindicadas.
La llamada printprops ([f_1, ..., f_n ], gradef) muestra las derivadas parciales
de las funciones f 1, ..., f n, tal como las definio gradef.
La llamada printprops ([a_n, ..., a_n ], atomgrad) muestra las derivadas parciales de las variables a n, ..., a n, tal como las definio gradef.
La variable gradefs contiene la lista de las funciones para las que se han definido
derivadas parciales con la instruccion gradef, pero no incluye las variables para las
que se han definido las derivadas parciales.
Los gradientes son necesarios cuando una funcion no se conoce explcitamente pero s
sus primeras derivadas y es necesario calcular las derivadas de orden mayor.

gradefs

[Variable del sistema]

Valor por defecto: []


La variable gradefs contiene la lista de las funciones para las que se han definido
derivadas parciales con la instruccion gradef, pero no incluye las variables para las
que se han definido las derivadas parciales.

laplace (expr, t, s )

[Funcion]
Calcula la transformada de Laplace de expr con respecto de la variable t y parametro
de transformaci
on s.
La funci
on laplace reconoce en expr las funciones delta, exp, log, sin, cos, sinh,
cosh y erf, as como derivative, integrate, sum y ilt. Si laplace no encuentra
una transformada, entonces llama a la funcion specint, la cual puede encontrar la
transformada de Laplace de expresiones con funciones especiales, tales como las de
Bessel. specint tambien puede manipular la funcion unit_step. Vease specint
para m
as informaci
on.
Cuando tampoco specint sea capaz de encontrar una solucion, se devolvera una
forma nominal.
La funci
on laplace reconoce integrales de convolucion de la forma integrate (f(x)
* g(t - x), x, 0, t), no pudiendo reconocer otros tipos de convoluciones.
Las relaciones funcionales se deben representar explcitamente en expr; las relaciones
implcitas establecidas por depends no son reconocidas. As, si f depende de x y y,
f (x, y) debe aparecer en expr.

Captulo 18: Diferenciaci


on

301

Vease tambien ilt, la transformada inversa de Laplace.


Ejemplos:
(%i1) laplace (exp (2*t + a) * sin(t) * t, t, s);
a
%e (2 s - 4)
(%o1)
--------------2
2
(s - 4 s + 5)
(%i2) laplace (diff (f (x), x), x, s);
(%o2)
s laplace(f(x), x, s) - f(0)
(%i3) diff (diff (delta (t), t), t);
2
d
(%o3)
--- (delta(t))
2
dt
(%i4) laplace (%, t, s);
!
d
!
2
(%o4)
- -- (delta(t))!
+ s - delta(0) s
dt
!
!t = 0
(%i5) assume(a>0)$
(%i6) laplace(gamma_incomplete(a,t),t,s),gamma_expand:true;
- a - 1
gamma(a)
gamma(a) s
(%o6)
-------- - ----------------s
1
a
(- + 1)
s
(%i7) factor(laplace(gamma_incomplete(1/2,t),t,s));
s + 1
sqrt(%pi) (sqrt(s) sqrt(-----) - 1)
s
(%o7)
----------------------------------3/2
s + 1
s
sqrt(-----)
s
(%i8) assume(exp(%pi*s)>1)$
(%i9) laplace(sum((-1)^n*unit_step(t-n*%pi)*sin(t),n,0,inf),t,s),simpsum;
%i
%i
------------------------ - ------------------------ %pi s
- %pi s
(s + %i) (1 - %e
)
(s - %i) (1 - %e
)
(%o9)
--------------------------------------------------2

302

Manual de Maxima

(%i9) factor(%);

(%o9)

%pi s
%e
------------------------------%pi s
(s - %i) (s + %i) (%e
- 1)

Captulo 19: Integraci


on

303

19 Integraci
on
19.1 Introducci
on a la integraci
on
Maxima tiene varias rutinas para calcular integrales. La funcion integrate hace uso de
la mayor parte de ellas. Tambien esta el paquete antid, que opera con funciones no especificadas y sus derivadas. Para usos numericos se dispone de la batera de integradores
adaptativos de QUADPACK, como quad_qag, quad_qags, etc., que se describen en la seccion
QUADPACK. Tambien se trabajan funciones hipergeometricas, vease specint para mas detalles. En terminos generales, Maxima solo opera con funciones que son integrables en
terminos de funciones elementales, como las racionales, trigonometricas, logartmicas, exponenciales, radicales, etc., y unas pocas extensiones de estas, como la funcion de error o los
dilogaritmos. No opera con integrales en terminos de funciones desconocidas, como g(x) o
h(x).

19.2 Funciones y variables para integraci


on
changevar (expr, f(x,y), y, x )

[Funcion]
Hace el cambio de variable dado por f(x,y) = 0 en todas las integrales que aparecen
en expr con la integraci
on respecto de x. La nueva variable sera y.
(%i1) assume(a > 0)$
(%i2) integrate (%e**sqrt(a*y), y, 0, 4);
4
/
[
sqrt(a) sqrt(y)
(%o2)
I %e
dy
]
/
0
(%i3) changevar (%, y-z^2/a, z, y);
0
/
[
abs(z)
2 I
z %e
dz
]
/
- 2 sqrt(a)
(%o3)
- ---------------------------a

Si una expresi
on contiene formas nominales, como aquella en la que aparece
integrate en el ejemplo, podra ser evaluada por ev si se utiliza el termino nouns.
Por ejemplo, la expresi
on devuelta por changevar se puede evaluar haciendo ev
(%o3, nouns).
La funci
on changevar tambien se puede utilizar para cambiar los ndices de una suma
o producto. Sin embargo, debe tenerse en cuenta que cuando se realiza un cambio en

304

Manual de Maxima

una suma o producto, el mismo debe expresarse en terminos de sumas, como i = j+


..., no como una funci
on de mayor grado.
Ejemplo:
(%i4) sum (a[i]*x^(i-2), i, 0, inf);
inf
====
\
i - 2
(%o4)
>
a x
/
i
====
i = 0
(%i5) changevar (%, i-2-n, n, i);
inf
====
\
n
(%o5)
>
a
x
/
n + 2
====
n = - 2

dblint (f, r, s, a, b )

[Funcion]
Es una rutina para integrales dobles escrita en lenguaje Maxima y posteriormente
traducida y compilada a c
odigo maquina. La instruccion load (dblint) carga esta
funci
on. Utiliza el metodo de Simpson en las dos direcciones x e y para calcular
Z

s(x)

f (x, y) dy dx.
a

r(x)

La funci
on f debe ser una funcion traducida o compilada de dos variables, a la vez que
r y s deben ser cada una de ellas una funcion traducida o compilada de una variable,
mientras que a y b deben ser n
umeros en coma flotante. La rutina tiene dos variables
globales que determinan el n
umero de divisiones de los intervalos x e y: dblint_x
y dblint_y, ambos con un valor por defecto de 10, pero que pueden cambiarse de
forma independiente a otros valores enteros (hay 2*dblint_x+1 puntos a calcular en
la direcci
on x y 2*dblint_y+1 en la direccion y). La rutina subdivide el eje X y
luego para cada valor de X calcula primero r (x) y s (x); entonces se subdivide el
eje Y entre r (x) y s (x), evaluandose la integral a lo largo del eje Y aplicando la
regla de Simpson; a continuacion, se eval
ua la integral a lo largo del eje X utilizando
tambien la regla de Simpson tomando como valores de funcion las integrales sobre Y.
Este procedimiento puede ser numericamente inestable por m
ultiples motivos, pero
es razonablemente r
apido: evtese su uso con funciones con grandes oscilaciones o
que tengan singularidades. Las integrales del eje Y dependen de la proximidad de los
lmites r (x) y s (x), de manera que si la distancia s (x) - r (x) vara rapidamente con
X, puede dar lugar errores importantes debido a truncamientos de diferente amplitud
en las integrales de Y. Se puede aumentar dblint_x y dblint_y al objeto de mejorar
el recubrimiento de la regi
on de integracion, pero a costa del tiempo de computo. Es
necesario que las funciones f, r y s esten traducidas o compiladas antes de utilizar

Captulo 19: Integraci


on

305

dblint, lo cual redundar


a en una mejora del tiempo de ejecucion de varios ordenes
de magnitud respecto de la ejecucion de codigo interpretado.

defint (expr, x, a, b )

[Funcion]
Intenta calcular una integral definida. La funcion defint es invocada por integrate
cuando se especifican los lmites de integracion, por ejemplo integrate (expr, x,
a, b ). As, desde el punto de vista del usuario, es suficiente con utilizar integrate.
La funci
on defint devuelve una expresion simbolica, bien sea el resultado calculado o
la forma nominal. Vease quad_qag y sus funciones relacionadas para aproximaciones
numericas de integrales definidas.
[Variable optativa]

erfflag
Valor por defecto: true

Si erfflag vale false, la funcion risch no introduce la funcion erf en el resultado


si no haba ninguna en el integrando.

ilt (expr, s, t )

[Funcion]
Calcula la transformada inversa de Laplace de expr con respecto de s y parametro t.
El argumento expr debe ser una fraccion de polinomios cuyo denominador tenga solo
factores lineales y cuadr
aticos. Utilizando las funciones laplace y ilt, junto con las
funciones solve o linsolve, el usuario podra resolver ciertas ecuaciones integrales.
(%i1) integrate (sinh(a*x)*f(t-x), x, 0, t) + b*f(t) = t**2;
t
/
[
2
(%o1)
I f(t - x) sinh(a x) dx + b f(t) = t
]
/
0
(%i2) laplace (%, t, s);
a laplace(f(t), t, s)
2
(%o2) b laplace(f(t), t, s) + --------------------- = -2
2
3
s - a
s
(%i3) linsolve ([%], [laplace(f(t), t, s)]);
2
2
2 s - 2 a
(%o3)
[laplace(f(t), t, s) = --------------------]
5
2
3
b s + (a - a b) s
(%i4) ilt (rhs (first (%)), s, t);
Is a b (a b - 1) positive, negative, or zero?
pos;
sqrt(a b (a b - 1)) t
2 cosh(---------------------)
b

2
a t

306

Manual de Maxima

(%o4) - ----------------------------- + ------3 2


2
a b - 1
a b - 2 a b + a
2
+ -----------------3 2
2
a b - 2 a b + a

intanalysis

[Variable opcional]

Valor por defecto: true


Cuando vale true, la integracion definida trata de encontrar polos en el integrando
dentro del intervalo de integracion. Si encuentra alguno, entonces la integral se calcula como valor principal. Si intanalysis vale false, entonces no se realiza esta
~ 3 n y la integracion se realiza sin tener en cuenta los polos.
comprobaciA
Vease tambien ldefint.
Ejemplos:
Maxima puede calcular las siguientes integrales cuando a intanalysis se le asigna
el valor false:
(%i1) integrate(1/(sqrt(x)+1),x,0,1);
1
/
[
1
(%o1)
I ----------- dx
] sqrt(x) + 1
/
0
(%i2) integrate(1/(sqrt(x)+1),x,0,1),intanalysis:false;
(%o2)
2 - 2 log(2)
(%i3) integrate(cos(a)/sqrt((tan(a))^2 +1),a,-%pi/2,%pi/2);
The number 1 isnt in the domain of atanh
-- an error. To debug this try: debugmode(true);
(%i4) intanalysis:false$
(%i5) integrate(cos(a)/sqrt((tan(a))^2+1),a,-%pi/2,%pi/2);
%pi
(%o5)
--2

integrate (expr, x )
integrate (expr, x, a, b )

[Funcion]
[Funcion]
Calcula simb
olicamente la integral de expr respecto de x. La llamada integrate
(expr, x ) resuelve una integral indefinida, mientras que integrate (expr, x, a,
b ) resuelve una integral definida con lmites de integracion a y b. Los lmites no

Captulo 19: Integraci


on

307

pueden contener a x. El argumento a no necesita ser menor que b. Si b es igual a a,


integrate devuelve cero.
Vease quad_qag y funciones relacionadas para la aproximacion numerica de integrales
definidas. Vease residue para el calculo de residuos (integracion compleja). Vease
antid para un metodo alternativo de resolucion de integrales indefinidas.
Se obtendr
a una integral (es decir, una expresion sin integrate) si integrate tiene
exito en el c
alculo. En otro caso, la respuesta es la forma nominal de la integral (esto
es, el operador integrate precedido de apostrofo) o una expresion que contiene una
o m
as formas nominales. La forma nominal de integrate se muestra con un smbolo
integral.
En ciertos casos es u
til proporcionar una forma nominal a mano, haciendo preceder
integrate con una comilla simple o apostrofo, como en integrate (expr, x ). Por
ejemplo, la integral puede depender de algunos parametros que todava no han sido
calculados. La forma nominal puede aplicarse despues a sus argumentos haciendo ev
(i, nouns) donde i es la forma nominal de interes.
La funci
on integrate trata de manera diferente las integrales definidas de las indefinidas, empleando una batera de heursticas especial para cada caso. Casos especiales de integrales definidas incluyen las que tienen lmites de integracion iguales a
cero o a infinito (inf o minf), funciones trigonometricas con lmites de integracion
igual a cero y %pi o 2 %pi, funciones racionales, integrales relacionadas con las funciones beta y psi y algunas integrales logartmicas y trigonometricas. El tratamiento
de funciones racionales puede incluir el calculo de residuos. Si no se reconoce ninguno
de los casos especiales, se intenta resolver la integral idefinida y evaluarla en los lmites
de integraci
on. Esto incluye tomar lmites cuando alguno de los extremos del intervalo
de integraci
on se acerca a m
as infinito o a menos infinito; vease tambien ldefint.
Casos especiales de integrales indefinidas incluyen a las funciones trigonometricas,
exponenciales, logartmicas y racionales. La funcion integrate tambien hace uso de
una peque~
na tabla de integrales elementales.
La funci
on integrate puede llevar a cabo cambios de variable si el integrando es
de la forma f(g(x)) * diff(g(x), x), entonces integrate trata de encontrar una
subexpresi
on de g(x) tal que la derivada de g(x) divida el integrando. Esta b
usqueda
puede hacer uso de las derivadas establecidas con la funcion gradef. Veanse tambien
changevar y antid.
Si ninguna de las heursticas descritas resuelve la integral indefinida, se ejecuta el
algoritmo de Risch. La variable risch puede utilizarse como una evflag, en una
llamada a ev o en la lnea de comandos por ejemplo, ev (integrate (expr, x ),
risch) o integrate (expr, x ), risch. Si risch esta presenta, integrate llama a
la funci
on risch sin intentar primero las heursticas. Vease tambien risch.
La funci
on integrate opera u
nicamente con relaciones funcionales que se representen explcitamente con la notacion f(x), sin considerar las dependencias implcitas
establecidas mediante la funcion depends.
Es posible que integrate necesite conocer alguna propiedad de alguno de los
par
ametros presentes en el integrando, en cuyo caso integrate consultara en primer
lugar la base de datos creada con assume, y si la variable de interes no se encuentra

308

Manual de Maxima

ah, integrate le preguntara al usuario. Dependiendo de la pregunta, posibles


respuestas son: yes;, no;, pos;, zero; o neg;.
Por defecto, integrate no se considera lineal. Veanse declare y linear.
La funci
on integrate intentara la integracion por partes solo en casos especiales.
Ejemplos:
Integrales elementales indefinidas y definidas.
(%i1) integrate (sin(x)^3, x);
3
cos (x)
(%o1)
------- - cos(x)
3
(%i2) integrate (x/ sqrt (b^2 - x^2), x);
2
2
(%o2)
- sqrt(b - x )
(%i3) integrate (cos(x)^2 * exp(x), x, 0, %pi);
%pi
3 %e
3
(%o3)
------- - 5
5
(%i4) integrate (x^2 * exp(-x^2), x, minf, inf);
sqrt(%pi)
(%o4)
--------2
Utilizaci
on de assume e interaccion.
(%i1) assume (a > 1)$
(%i2) integrate (x**a/(x+1)**(5/2), x, 0, inf);
2 a + 2
Is ------- an integer?
5
no;
Is 2 a - 3

positive, negative, or zero?

neg;
3
(%o2)
beta(a + 1, - - a)
2
Cambio de variable. En este ejemplo hay dos cambios de variable: uno utilizando
una derivada establecida con gradef y otra utilizando la derivada diff(r(x))
de una funci
on no especificada r(x).
(%i3) gradef (q(x), sin(x**2));
(%o3)
q(x)
(%i4) diff (log (q (r (x))), x);
d
2
(-- (r(x))) sin(r (x))

Captulo 19: Integraci


on

309

dx
(%o4)
---------------------q(r(x))
(%i5) integrate (%, x);
(%o5)
log(q(r(x)))
El valor devuelto contiene la forma nominal integrate. En este ejemplo, Maxima puede extraer un factor del denominador de una funcion racional, pero no
puede factorizar el resto. La funcion grind muestra la forma nominal integrate
del resultado. Vease tambien integrate_use_rootsof para mas informacion sobre integrales de funciones racionales.
(%i1) expand ((x-4) * (x^3+2*x+1));
4
3
2
(%o1)
x - 4 x + 2 x - 7 x - 4
(%i2) integrate (1/%, x);
/ 2
[ x + 4 x + 18
I ------------- dx
] 3
log(x - 4)
/ x + 2 x + 1
(%o2)
---------- - -----------------73
73
(%i3) grind (%);
log(x-4)/73-(integrate((x^2+4*x+18)/(x^3+2*x+1),x))/73$
Definici
on de una funci
on mediante una integral. El cuerpo de una funcion no
se eval
ua cuando esta se define, de manera que el cuerpo de f_1 en este ejemplo
contiene la forma nominal de integrate. El operador comilla-comilla hace
que se eval
ue la integral y su resultado sera el que defina a la funcion f_2.
(%i1) f_1 (a) := integrate (x^3, x, 1, a);
3
(%o1)
f_1(a) := integrate(x , x, 1, a)
(%i2) ev (f_1 (7), nouns);
(%o2)
600
(%i3) /* Note parentheses around integrate(...) here */
f_2 (a) := (integrate (x^3, x, 1, a));
4
a
1
(%o3)
f_2(a) := -- - 4
4
(%i4) f_2 (7);
(%o4)
600

integration_constant

[Variable del sistema]

Valor por defecto: %c


Cuando una constante de integracion se crea durante la integracion definida
de una ecuaci
on, el nombre de la constante se construye concatenando
integration_constant y integration_constant_counter.

310

Manual de Maxima

A integration_constant se le puede asignar un smbolo cualquiera.


Ejemplos:
(%i1) integrate (x^2 = 1, x);
3
x
(%o1)
-- = x + %c1
3
(%i2) integration_constant : k;
(%o2)
k
(%i3) integrate (x^2 = 1, x);
3
x
(%o3)
-- = x + k2
3

integration_constant_counter

[Variable del sistema]

Valor por defecto: 0


Cuando una constante de integracion se crea durante la integracion definida
de una ecuaci
on, el nombre de la constante se construye concatenando
integration_constant y integration_constant_counter.
La variable integration_constant_counter se incrementa antes de construir la constante de integraci
on siguiente.
Ejemplos:
(%i1) integrate (x^2 = 1, x);
3
x
(%o1)
-- = x + %c1
3
(%i2) integrate (x^2 = 1, x);
3
x
(%o2)
-- = x + %c2
3
(%i3) integrate (x^2 = 1, x);
3
x
(%o3)
-- = x + %c3
3
(%i4) reset (integration_constant_counter);
(%o4)
[integration_constant_counter]
(%i5) integrate (x^2 = 1, x);
3
x
(%o5)
-- = x + %c1
3

Captulo 19: Integraci


on

integrate_use_rootsof

311

[Variable optativa]

Valor por defecto: false


Si integrate_use_rootsof vale true y el denominador de una funcion racional no
se puede factorizar, integrate devuelve la integral como una suma respecto de las
races desconocidas del denominador.
Por ejemplo, d
andole a integrate_use_rootsof el valor false, integrate devuelve
la integral no resuelta de la funcion racional en forma nominal:
(%i1) integrate_use_rootsof: false$
(%i2) integrate (1/(1+x+x^5), x);
/ 2
[ x - 4 x + 5
I ------------ dx
2 x + 1
] 3
2
2
5 atan(-------)
/ x - x + 1
log(x + x + 1)
sqrt(3)
(%o2)
----------------- - --------------- + --------------7
14
7 sqrt(3)
Si ahora se le da a la variable el valor true, la parte no resuelta de la integral se
expresa como una suma cuyos sumandos dependen de las races del denominador de
la funci
on racional:
(%i3) integrate_use_rootsof: true$
(%i4) integrate (1/(1+x+x^5), x);
====
2
\
(%r4 - 4 %r4 + 5) log(x - %r4)
>
------------------------------/
2
====
3 %r4 - 2 %r4
3
2
%r4 in rootsof(x - x + 1)
(%o4) ---------------------------------------------------------7
2 x + 1
2
5 atan(-------)
log(x + x + 1)
sqrt(3)
- --------------- + --------------14
7 sqrt(3)
Alternativamente, el usuario puede calcular las races del denominador separadamente
y luego representar el integrando en funcion de dichas races, como por ejemplo 1/((x
- a)*(x - b)*(x - c)) o 1/((x^2 - (a+b)*x + a*b)*(x - c)) si el denominador es
un polinomio de tercer grado. En algunos casos, esto ayudara a Maxima mejorar sus
resultados.

ldefint (expr, x, a, b )

[Funcion]
Calcula la integral definida de expr utilizando limit tras el calculo de la integral
indefinida de expr respecto a x en los extremos de integracion b y a. Si no consigue

312

Manual de Maxima

calcular la integral definida, ldefint devuelve una expresion con los lmites en forma
nominal.
La funci
on integrate no llama a ldefint, de modo que la ejecucion de ldefint
(expr, x, a, b ) puede dar un resultado diferente que integrate (expr, x, a, b ).
La funci
on ldefint siempre utiliza el mismo metodo para calcular la integral definida,
mientras que integrate puede hacer uso de varias heursticas y reconocer as casos
especiales.

residue (expr, z, z_0 )

[Funcion]
Calcula el residuo en el plano complejo de la expresion expr cuando la variable z
toma el valor z 0. El residuo es el coeficiente de (z - z_0 )^(-1) en el desarrollo de
Laurent de expr.
(%i1) residue (s/(s**2+a**2), s, a*%i);
1
(%o1)
2
(%i2) residue (sin(a*x)/x**4, x, 0);
3
a
(%o2)
- -6

risch (expr, x )

[Funcion]
Integra expr respecto de x utilizando el caso trascendental del algoritmo de Risch.
El caso algebraico del algoritmo de Risch no se ha implementado. Este metodo trata
los casos de exponenciales y logaritmos anidados que no resuelve el procedimiento
principal de integrate. La funcion integrate llamara automaticamente a risch si
se presentan estos casos.
Si la variable erfflag vale false, evita que risch introduzca la funcion erf en la
respuesta si esta no estaba presente previamente en el integrando.
(%i1) risch (x^2*erf(x), x);
2
3
2
- x
%pi x erf(x) + (sqrt(%pi) x + sqrt(%pi)) %e
(%o1)
------------------------------------------------3 %pi
(%i2) diff(%, x), ratsimp;
2
(%o2)
x erf(x)

tldefint (expr, x, a, b )
Equivale a ldefint cuando tlimswitch vale true.

[Funcion]

Captulo 19: Integraci


on

313

19.3 Introducci
on a QUADPACK
QUADPACK es un conjunto de funciones para el calculo numerico de integrales definidas
de una variable. Se cre
o a partir de un trabajo conjunto de R. Piessens1 , E. de Doncker2 ,
3
C. Ueberhuber , and D. Kahaner4 .
La librera QUADPACK incluida en Maxima es una traduccion automatica (mediante
el programa f2cl) del c
odigo fuente Fortran de QUADPACK tal como se encuentra en la
SLATEC Common Mathematical Library,Version 4.15 . La librera SLATEC esta fechada
en julio de 1993, pero las funciones QUADPACK fueron escritas algunos a~
nos antes. Hay
otra versi
on de QUADPACK en Netlib6 , pero no esta claro hasta que punto difiere de la
que forma parte de la librera SLATEC.
Las funciones QUADPACK incluidas en Maxima son todas automaticas, en el sentido
de que estas funciones intentan calcular sus resultados con una exactitud especificada, requiriendo un n
umero indeterminado de evaluaciones de funciones. La traduccion a Lisp que
Maxima hace de QUADPACK incluye tambien algunas funciones que no son automaticas,
pero que no son accesibles desde el nivel de Maxima.
Se puede encontrar m
as informacion sobre QUADPACK en el libro7 .

19.3.1 Perspectiva general


quad_qag

Integraci
on de una funcion general en un intervalo finito. La funcion quad_qag
implementa un integrador global adaptativo simple utilizando una estrategia
de Aind (Piessens, 1973). Se puede escoger entre seis pares de formulas de
cuadratura de Gauss-Kronrod para la regla de evaluacion. Las reglas de rango
superior son u
tiles en los casos en los que los integrandos tienen un alto grado
de oscilaci
on.

quad_qags
Integraci
on de una funcion general en un intervalo finito. La funcion quad_qags
implementa la subdivision de intervalos global adaptativa con extrapolacion (de
Doncker, 1978) mediante el algoritmo Epsilon (Wynn, 1956).
quad_qagi
Integraci
on de una funcion general en un intervalo infinito o semi-infinito. El intervalo se proyecta sobre un intervalo finito y luego se aplica la misma estrategia
que en quad_qags.
quad_qawo
Integraci
on de cos(omegax)f (x) o sin(omegax)f (x) en un intervalo finito,
siendo omega una constante. La regla de evaluacion se basa en la tecnica
1
2
3
4
5
6
7

Applied Mathematics and Programming Division, K.U. Leuven


Applied Mathematics and Programming Division, K.U. Leuven
Institut f
ur Mathematik, T.U. Wien
National Bureau of Standards, Washington, D.C., U.S.A
http://www.netlib.org/slatec
http://www.netlib.org/quadpack
R. Piessens, E. de Doncker-Kapenga, C.W. Uberhuber, and D.K. Kahaner. QUADPACK: A Subroutine
Package for Automatic Integration. Berlin: Springer-Verlag, 1983, ISBN 0387125531.

314

Manual de Maxima

modificada de Clenshaw-Curtis. La funcion quad_qawo aplica la subdivision


adaptativa con extrapolacion, de forma similar a quad_qags.
quad_qawf
Calcula la transformada seno o coseno de Fourier en un intervalo semi-infinito.
Se aplica el mismo metodo que en quad_qawo a sucesivos intervalos finitos,
acelerando la convergencia mediante el algoritmo Epsilon (Wynn, 1956).
quad_qaws
Integraci
on de w(x)f (x) en un intervalo finito [a, b], siendo w una funcion de la
forma (xa)a lpha(bx)b etav(x), con v(x) igual a 1, a log(xa), a log(bx) o a
log(x a)log(b x) y con alpha > 1, y beta > 1. Se aplica una estrategia de
subdivisi
on adaptativa global, con integracion de Clenshaw-Curtis modificada
en los subintervalos que contienen a a y a b.
quad_qawc
Calcula el valor principal de Cauchy de f (x)/(x c) en un intervalo finito (a, b)
para una c dada. La estrategia es global adaptativa, utilizando la integracion
de Clenshaw-Curtis modificada en los subintervalos que contienen a x = c.
quad_qagp
B
asicamente hace lo mismo que quad_qags, pero los puntos de singularidad o
discontinuidad deben ser aportados por el usuario. Esto hace que el calculo de
una buena soluci
on sea mas facil para el integrador.

19.4 Funciones y variables para QUADPACK


quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit ])
quad_qag (f, x, a, b, key, [epsrel, epsabs, limit ])

[Funcion]
[Funcion]
Integraci
on de una funci
on general en un intervalo finito. La funcion quad_qag implementa un integrador global adaptativo simple utilizando una estrategia de Aind
(Piessens, 1973). Se puede escoger entre seis pares de formulas de cuadratura de
Gauss-Kronrod para la regla de evaluacion. Las reglas de rango superior son u
tiles
en los casos en los que los integrandos tienen un alto grado de oscilacion.
La funci
on quad_qag calcula numericamente la integral
Z

f (x)dx
a

utilizando un integrador adaptativo simple.


La funci
on a integrar es f(x), con variable independiente x, siendo el intervalo de
integraci
on el comprendido entre a y b. El argumento key indica el integrador a
utilizar y debe ser un n
umero entero entre 1 y 6, ambos inclusive. El valor de key
selecciona el orden de la regla de integracion de Gauss-Kronrod. Las reglas de rango
superior son u
tiles en los casos en los que los integrandos tienen un alto grado de
oscilaci
on.
El integrando se puede especificar con el nombre de una funcion u operador de Maxima
o de Lisp, como una expresi
on lambda o como una expresion general de Maxima.

Captulo 19: Integraci


on

315

La integraci
on numerica se hace de forma adaptativa particionando la region de integraci
on en subintervalos hasta conseguir la precision requerida.
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsrel

Error relativo deseado de la aproximacion. El valor por defecto es 1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del array interno utilizado para realizar la cuadratura. limit es
el n
umero m
aximo de subintervalos a utilizar. El valor por defecto es 200.

La funci
on quad_qag devuelve una lista de cuatro elementos:
la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.
El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qag (x^(1/2)*log(1/x), x, 0, 1, 3, epsrel=5d-8);
(%o1)
[.4444444444492108, 3.1700968502883E-9, 961, 0]
(%i2) integrate (x^(1/2)*log(1/x), x, 0, 1);
4
(%o2)
9

quad_qags (f(x), x, a, b, [epsrel, epsabs, limit ])


quad_qags (f, x, a, b, [epsrel, epsabs, limit ])

[Funcion]
[Funcion]
Integraci
on de una funci
on general en un intervalo finito. La funcion quad_qags implementa la subdivisi
on de intervalos global adaptativa con extrapolacion (de Doncker,
1978) mediante el algoritmo Epsilon (Wynn, 1956).
La funci
on quad_qags calcula la integral
Z

f (x)dx
a

La funci
on a integrar es f(x), de variable independiente x, siendo el intervalo de
integraci
on el comprendido entre a y b.

316

Manual de Maxima

El integrando se puede especificar con el nombre de una funcion u operador de Maxima


o de Lisp, como una expresi
on lambda o como una expresion general de Maxima.
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsrel

Error relativo deseado de la aproximacion. El valor por defecto es 1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del array interno utilizado para realizar la cuadratura. limit es
el n
umero m
aximo de subintervalos a utilizar. El valor por defecto es 200.

La funci
on quad_qags devuelve una lista de cuatro elementos:

la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.

El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

fallo de convergencia;

la integral es probablemente divergente o de convergencia lenta;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qags (x^(1/2)*log(1/x), x, 0, 1, epsrel=1d-10);
(%o1)
[.4444444444444448, 1.11022302462516E-15, 315, 0]
Notese que quad_qags es m
as precisa y eficiente que quad_qag para este integrando.

quad_qagi (f(x), x, a, b, [epsrel, epsabs, limit ])


quad_qagi (f, x, a, b, [epsrel, epsabs, limit ])

[Funcion]
[Funcion]
Integraci
on de una funci
on general en un intervalo infinito o semi-infinito. El intervalo
se proyecta sobre un intervalo finito y luego se aplica la misma estrategia que en quad_
qags.
La funci
on quad_qagi calcula cualquiera las siguientes integrales:

f (x)dx
a

f (x)dx

Captulo 19: Integraci


on

317

f (x)dx

utilizando la rutina QAGI de Quadpack QAGI. La funcion a integrar es f(x), con


variable independiente x, siendo el intervalo de integracion de rango infinito.
El integrando se puede especificar con el nombre de una funcion u operador de Maxima
o de Lisp, como una expresi
on lambda o como una expresion general de Maxima.
Uno de los lmites de integracion debe ser infinito. De no ser as, quad_qagi devolver
a
una forma nominal.
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsrel

Error relativo deseado de la aproximacion. El valor por defecto es 1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del array interno utilizado para realizar la cuadratura. limit es
el n
umero m
aximo de subintervalos a utilizar. El valor por defecto es 200.

La funci
on quad_qagi devuelve una lista de cuatro elementos:
la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.
El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

fallo de convergencia;

la integral es probablemente divergente o de convergencia lenta;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qagi (x^2*exp(-4*x), x, 0, inf, epsrel=1d-8);
(%o1)
[0.03125, 2.95916102995002E-11, 105, 0]
(%i2) integrate (x^2*exp(-4*x), x, 0, inf);
1
(%o2)
-32

318

Manual de Maxima

quad_qawc (f(x), x, c, a, b, [epsrel, epsabs, limit ])


quad_qawc (f, x, c, a, b, [epsrel, epsabs, limit ])

[Funcion]
[Funcion]
Calcula el valor principal de Cauchy de f (x)/(x c) en un intervalo finito (a, b) para
una c dada. La estrategia es global adaptativa, utilizando la integracion de ClenshawCurtis modificada en los subintervalos que contienen a x = c.
La funci
on quad_qawc calcula el valor principal de Cauchy de
Z
a

f (x)
dx
xc

utilizando la rutina QAWC de Quadpack. La funcion a integrar es f(x) /(x - c ),


con variable independiente x, siendo el intervalo de integracion el comprendido entre
a y b.
El integrando se puede especificar con el nombre de una funcion u operador de Maxima
o de Lisp, como una expresi
on lambda o como una expresion general de Maxima.
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsrel

Error relativo deseado de la aproximacion. El valor por defecto es 1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del array interno utilizado para realizar la cuadratura. limit es
el n
umero m
aximo de subintervalos a utilizar. El valor por defecto es 200.

quad_qawc returns a list of four elements:


la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.
El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qawc (2^(-5)*((x-1)^2+4^(-5))^(-1), x, 2, 0, 5,
epsrel=1d-7);
(%o1)
[- 3.130120337415925, 1.306830140249558E-8, 495, 0]
(%i2) integrate (2^(-alpha)*(((x-1)^2 + 4^(-alpha))*(x-2))^(-1),
x, 0, 5);
Principal Value
alpha
9 4
9

Captulo 19: Integraci


on

319

log(-------------- + --------------)
alpha + 3
alpha + 3
4
+ 4
4
+ 4
(%o2) (------------------------------------------alpha
2 4
+ 2
3 alpha
3 alpha
------------2
alpha/2
2
alpha/2
4
atan(4
)
4
atan(- 4 4
)
- ----------------------- + ---------------------------)
alpha
alpha
4
+ 1
4
+ 1
alpha
/2
(%i3) ev (%, alpha=5, numer);
(%o3)
- 3.130120337415917

quad_qawf (f(x), x, a, omega, trig, [epsabs, limit, maxp1, limlst ])


quad_qawf (f, x, a, omega, trig, [epsabs, limit, maxp1, limlst ])

[Funcion]
[Funcion]
Calcula la transformada seno o coseno de Fourier en un intervalo semi-infinito. Se
aplica el mismo metodo que en quad_qawo a sucesivos intervalos finitos, acelerando
la convergencia mediante el algoritmo Epsilon (Wynn, 1956).
La funci
on quad_qawf calcula la integral
Z

f (x)w(x)dx
a

La funci
on peso w se selecciona mediante trig:
cos

w(x) = cos(omegax)

sin

w(x) = sin(omegax)

El integrando se puede especificar con el nombre de una funcion u operador de Maxima


o de Lisp, como una expresi
on lambda o como una expresion general de Maxima
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsabs

El error absoluto deseado para la aproximacion. El valor por defecto es


1d-10.

limit

Tama~
no del arreglo interno de trabajo. (limit - limlst)/2 es el n
umero
m
aximo de subintervalos para la particion. El valor por defecto es 200.

maxp1

N
umero m
aximo de momentos de Chebyshev. Debe ser mayor que 0. El
valor por defecto es 100.

limlst

Cota superior del n


umero de ciclos. Debe ser mayor o igual que 3. El
valor por defecto es 10.

quad_qawf returns a list of four elements:

320

Manual de Maxima

la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.

El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qawf (exp(-x^2), x, 0, 1, cos, epsabs=1d-9);
(%o1)
[.6901942235215714, 2.84846300257552E-11, 215, 0]
(%i2) integrate (exp(-x^2)*cos(x), x, 0, inf);
- 1/4
%e
sqrt(%pi)
(%o2)
----------------2
(%i3) ev (%, numer);
(%o3)
.6901942235215714

quad_qawo (f(x), x, a, b, omega, trig, [epsrel, epsabs, limit, maxp1,


limlst ])
quad_qawo (f, x, a, b, omega, trig, [epsrel, epsabs, limit, maxp1,
limlst ])

[Funcion]
[Funcion]

Integraci
on de cos(omegax)f (x) o sin(omegax)f (x) en un intervalo finito, siendo
omega una constante. La regla de evaluacion se basa en la tecnica modificada de
Clenshaw-Curtis. La funci
on quad_qawo aplica la subdivision adaptativa con extrapolaci
on, de forma similar a quad_qags.
La funci
on quad_qawo realiza la integracion utilizando la rutina QAWO de Quadpack:
Z

f (x)w(x)dx
a

La funci
on peso w se selecciona mediante trig:
cos

w(x) = cos(omegax)

sin

w(x) = sin(omegax)

El integrando se puede especificar con el nombre de una funcion u operador de Maxima


o de Lisp, como una expresi
on lambda o como una expresion general de Maxima
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:

Captulo 19: Integraci


on

321

epsrel

El error absoluto deseado para la aproximacion. El valor por defecto es


1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del arreglo interno de trabajo. limit/2 es el n
umero maximo de
subintervalos para la particion. El valor por defecto es 200.

maxp1

N
umero m
aximo de momentos de Chebyshev. Debe ser mayor que 0. El
valor por defecto es 100.

limlst

Cota superior del n


umero de ciclos. Debe ser mayor o igual que 3. El
valor por defecto es 10.

quad_qawo returns a list of four elements:


la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.
El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qawo (x^(-1/2)*exp(-2^(-2)*x), x, 1d-8, 20*2^2, 1, cos);
(%o1)
[1.376043389877692, 4.72710759424899E-11, 765, 0]
(%i2) rectform (integrate (x^(-1/2)*exp(-2^(-alpha)*x) * cos(x),
x, 0, inf));
alpha/2 - 1/2
2 alpha
sqrt(%pi) 2
sqrt(sqrt(2
+ 1) + 1)
(%o2)
----------------------------------------------------2 alpha
sqrt(2
+ 1)
(%i3) ev (%, alpha=2, numer);
(%o3)
1.376043390090716

quad_qaws (f(x), x, a, b, alpha, beta, wfun, [epsrel, epsabs, limit ])


quad_qaws (f, x, a, b, alpha, beta, wfun, [epsrel, epsabs, limit ])

[Funcion]
[Funcion]
Integraci
on de w(x)f (x) en un intervalo finito [a, b], siendo w una funcion de la forma
(x a)a lpha(b x)b etav(x), con v(x) igual a 1, a log(x a), a log(b x) o a log(x
a)log(b x) y con alpha > 1, y beta > 1. Se aplica una estrategia de subdivision
adaptativa global, con integracion de Clenshaw-Curtis modificada en los subintervalos
que contienen a a y a b.

322

Manual de Maxima

La funci
on quad_qaws realiza la integracion utizando la rutina QAWS de Quadpack:
Z

f (x)w(x)dx
a

La funci
on peso w se selecciona mediante wfun:
1

w(x) = (x a)a lf a(b x)b eta

w(x) = (x a)a lf a(b x)b etalog(x a)

w(x) = (x a)a lf a(b x)b etalog(b x)

w(x) = (x a)a lf a(b x)b etalog(x a)log(b x)

El integrando se puede especificar con el nombre de una funcion u operador de Maxima


o de Lisp, como una expresi
on lambda o como una expresion general de Maxima
Los argumentos opcionales pueden especificarse en cualquier orden. Todos ellos toman
la forma key=val. Tales argumentos son:
epsrel

El error absoluto deseado para la aproximacion. El valor por defecto es


1d-8.

epsabs

Error absoluto deseado de la aproximacion. El valor por defecto es 0.

limit

Tama~
no del array interno utilizado para realizar la cuadratura. (limit limlst)/2 es el n
umero maximo de subintervalos a utilizar. El valor por
defecto es 200.

quad_qaws returns a list of four elements:


la aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.
El c
odigo de error (el cuarto elemento del resultado) puede tener los siguientes valores:
0

si no ha habido problemas;

si se utilizaron demasiados intervalos;

si se encontr
o un n
umero excesivo de errores de redondeo;

si el integrando ha tenido un comportamiento extra~


no frente a la integraci
on;

si los argumentos de entrada no son validos.

Ejemplos:
(%i1) quad_qaws (1/(x+1+2^(-4)), x, -1, 1, -0.5, -0.5, 1,
epsabs=1d-9);
(%o1)
[8.750097361672832, 1.24321522715422E-10, 170, 0]
(%i2) integrate ((1-x*x)^(-1/2)/(x+1+2^(-alpha)), x, -1, 1);
alpha
Is 4 2
- 1 positive, negative, or zero?

Captulo 19: Integraci


on

323

pos;
alpha
alpha
2 %pi 2
sqrt(2 2
+ 1)
(%o2)
------------------------------alpha
4 2
+ 2
(%i3) ev (%, alpha=4, numer);
(%o3)
8.750097361672829

quad_qagp (f(x), x, a, b, points, [epsrel, epsabs, limit ])


quad_qagp (f, x, a, b, points, [epsrel, epsabs, limit ])

[Fucion]
[Fucion]
Integra una funci
on general sobre un intervalo acotado. La funcion quad_qagp implementa un metodo adaptativo global de subdivision del intervalo con extrapolacion
(de Doncker, 1978) basado en el algoritmo Epsilon (Wynn, 1956).
quad_qagp calcula la integral
Z

f (x) dx
a

La funci
on a integrar es f(x), con variable independiente x, en el intervalo limitado
por a y b.
El integrando puede especificarse mediante el nombre de una funcion de Maxima o de
Lisp o un operador, como una expresion lambda de Maxima, o como una expresion
general de Maxima.
Para ayudar al integrador, el usuario debe aportar una lista de puntos donde el
integrando es singular o discontinuo.
Las opciones se suministran como argumentos y se pueden escribir en cualquier orden.
Deben tomar la forma opci
on=valor. Las opciones son:
epsrel

Error relativo de aproximacion deseado. Valor por defecto es 1d-8.

epsabs

Error absoluto de aproximacion deseado. Valor por defecto es 0.

limit

Tama~
no del array interno de trabajo. limit es el maximo n
umero de
subintervalos a utilizar. Valor por defecto es 200.

quad_qagp devuelve una lista con cuatro elementos:

una aproximaci
on a la integral,
el error absoluto estimado de la aproximacion,
el n
umero de evaluaciones del integrando,
un c
odigo de error.

El c
odigo de error (cuarto elemento de la lista devuelta) puede tener los siguientes
valores:
0

no se encontraron errores;

se han hecho demasiados subintervalos;

324

Manual de Maxima

se detect
o un error de redondeo muy grande;

se ha observado un comportamiento del integrando extremadamente


malo;

fallo de convergencia;

la integral es probablemente divergengente o converge muy lentamente;

entrada inv
alida.

Ejemplos:
(%i1) quad_qagp(x^3*log(abs((x^2-1)*(x^2-2))),x,0,3,[1,sqrt(2)]);
(%o1)
[52.74074838347143, 2.6247632689546663e-7, 1029, 0]
(%i2) quad_qags(x^3*log(abs((x^2-1)*(x^2-2))), x, 0, 3);
(%o2)
[52.74074847951494, 4.088443219529836e-7, 1869, 0]
El integrando tiene singularidades en 1 y sqrt(2), de manera que suministramos estos
puntos a quad_qagp. Tambien se observa que quad_qagp es mas exacto y eficiente
que quad_qags.

quad_control (parameter, [value ])

[Fucion]
Controla la gesti
on de los errores de QUADPACK. El parametro debe ser uno de los
siguientes smbolos:
current_error
El n
umero de error actual.
control

Controla si los mensajes se imprimen o no. Si el valor es cero o menor,


los mensajes se suprimen.

max_message
El m
aximo n
umero de veces que se imprime cualquier mensaje.
Si no se da value, entonces se devuelve el valor actual asociado a parameter. En
cambio, si se da value, se hace la asignacion correspondiente a parameter, adquiriendo
este nuevo valor.

Captulo 20: Ecuaciones

325

20 Ecuaciones
20.1 Funciones y variable para las ecuaciones
[Variable del sistema]
Valor por defecto: []
La variable %rnum_list es la lista de variables introducidas en las soluciones por la
funciones solve y algsys. Las variables %r se a~
naden a %rnum_list en su orden de
creaci
on. Esto es u
til para hacer sustituciones en la solucion a posteriori.
(%i1) solve ([x + y = 3], [x,y]);
(%o1)
[[x = 3 - %r1, y = %r1]]
(%i2) %rnum_list;
(%o2)
[%r1]
(%i3) sol : solve ([x + 2*y + 3*z = 4], [x,y,z]);
(%o3)
[[x = - 2 %r3 - 3 %r2 + 4, y = %r3, z = %r2]]
(%i4) %rnum_list;
(%o4)
[%r2, %r3]
(%i5) for i : 1 thru length (%rnum_list) do
sol : subst (t[i], %rnum_list[i], sol)$
(%i6) sol;
(%o6)
[[x = - 2 t - 3 t + 4, y = t , z = t ]]
2
1
2
1

%rnum_list

algepsilon

[Variable opcional]

Valor por defecto: 10^8


La variable algepsilon es utilizada por algsys.
[Variable opcional]
Valor por defecto: false
El contenido de la variable algexact afecta al comportamiento de algsys de la siguiente forma:
Si algexact vale true, algsys llamara siempre a solve y luego utilizara realroots.
Si algexact vale false, solve sera llamada solo si la ecuacion no es univariante, o
si es cuadr
atica o bicuadr
atica.
Sin embargo, algexact: true no garantiza que u
nicamente se obtengan soluciones
exactas, ya que aunque algsys intente siempre dar soluciones exactas, dara resultados
aproximados si no encuentra una solucion mejor.

algexact

algsys ([expr_1, ..., expr_m ], [x_1, ..., x_n ])


algsys ([eqn_1, ..., eqn_m ], [x_1, ..., x_n ])

[Funcion]
[Funcion]
Resuelve el sistema de ecuaciones polinomicas expr 1, ..., expr m o las ecuaciones
eqn 1, ..., eqn m para las variables x 1, ..., x n. La expresion expr equivale a la
ecuaci
on expr = 0. Puede haber mas ecuaciones que variables o viceversa.
La funci
on algsys devuelve una lista de soluciones, cada una de las cuales consistente
a su vez en una lista de ecuaciones asociando valores a las variables x 1, ..., x n que

326

Manual de Maxima

satisfacen el sistema de ecuaciones. Si algsys no puede encontrar soluciones devuelve


la lista vaca [].
Si es necesario se introducen en la solucion los smbolos %r1, %r2, ..., para representar
par
ametros arbitrarios; estas variables tambien se a~
naden a la lista %rnum_list.
El proceso que se sigue es el siguiente:
(1) Primero se factorizan las ecuaciones y se reparten en subsistemas.
(2) Para cada subsistema S i, se seleccionan una ecuacion E y una variable x. Se
elige la variable que tenga grado menor. Entonces se calcula el resultado de E y E j
respecto de x, siendo las E j el resto de ecuaciones del subsistema S i. De aqu se
obtiene otro subsistema S i con una incognita menos, ya que x ha sido eliminada.
El proceso ahora vuelve al paso (1).
(3) En ocasiones se obtiene un subsistema consistente en una u
nica ecuacion. Si la
ecuaci
on es multivariante y no se han introducido aproximaciones en formato decimal
de coma flotante, entonces se llama a solve para tratar de encontrar una solucion
exacta.
En algunos casos, solve no puede encontrar la solucion, o si lo consigue puede que el
resultado tenga una expresi
on muy grande.
Si la ecuaci
on tiene una s
ola incognita y es lineal, o cuadratica o bicuadratica, entonces
se llama a la funci
on solve si no se han introducido aproximaciones en formato
decimal. Si se han introducido aproximaciones, o si hay mas de una incognita, o si no
es lineal, ni cuadr
atica ni bicuadratica, y si la variables realonly vale true, entonces
se llama a la funci
on realroots para calcular las soluciones reales. Si realonly vale
false, entonces se llama a allroots para obtener las soluciones reales y complejas.
Si algsys devuelve una solucion que tiene menos dgitos significativos de los requeridos, el usuario puede cambiar a voluntad el valor de algepsilon para obtener mayor
precisi
on.
Si algexact vale true, se llamara siempre a solve.
Cuando algsys encuentra una ecuacion con m
ultiples incognitas y que contiene aproximaciones en coma flotante (normalmente debido a la imposibilidad de encontrar
soluciones exactas en pasos anteriores), entonces no intenta aplicar los metodos exactos a estas ecuaciones y presenta el mensaje: "algsys cannot solve - system too
complicated."
Las interacciones con radcan pueden dar lugar a expresiones grandes o complicadas.
En tal caso, puede ser posible aislar partes del resultado con pickapart o reveal.
Ocasionalmente, radcan puede introducir la unidad imaginaria %i en una solucion
que de hecho es real.
Ejemplos:
(%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
(%o1)
2 (1 - a1) x - 2 a2 (x - 1)
(%i2) e2: a2 - a1;
(%o2)
a2 - a1
(%i3) e3: a1*(-y - x^2 + 1);
2
(%o3)
a1 (- y - x + 1)

Captulo 20: Ecuaciones

327

(%i4) e4: a2*(y - (x - 1)^2);


2
(%o4)
a2 (y - (x - 1) )
(%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
(%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0],
[x = 1, y = 0, a1 = 1, a2 = 1]]
(%i6) e1: x^2 - y^2;
2
2
(%o6)
x - y
(%i7) e2: -1 - y + 2*y^2 - x + x^2;
2
2
(%o7)
2 y - y + x - x - 1
(%i8) algsys ([e1, e2], [x, y]);
1
1
(%o8) [[x = - -------, y = -------],
sqrt(3)
sqrt(3)
1
1
1
1
[x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
sqrt(3)
sqrt(3)
3
3

allroots (expr )
allroots (eqn )

[Funcion]
[Funcion]
Calcula aproximaciones numericas de las races reales y complejas del polinomio expr
o ecuaci
on polin
omica eqn de una variable.
Si la variable polyfactor vale true hace que la funcion allroots factorice el polinomio para n
umeros reales si el polinomio es real, o para n
umeros complejos si el
polinomio es complejo.
La funci
on allroots puede dar resultados inexactos en caso de que haya races
m
ultiples. Si el polinomio es real, allroots (%i*p )) puede alcanzar mejores aproximaciones que allroots (p ), ya que allroots ejecuta entonces un algoritmo diferente.
La funci
on allroots no opera sobre expresiones no polinomicas, pues requiere que
el numerador sea reducible a un polinomio y el denominador sea, como mucho, un
n
umero complejo.
Para polinomios complejos se utiliza el algoritmo de Jenkins y Traub descrito en
(Algorithm 419, Comm. ACM, vol. 15, (1972), p. 97). Para polinomios reales se
utiliza el algoritmo de Jenkins descrito en (Algorithm 493, ACM TOMS, vol. 1,
(1975), p.178).
Ejemplos:
(%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
3
5
(%o1)
(2 x + 1) = 13.5 (x + 1)
(%i2) soln: allroots (eqn);
(%o2) [x = .8296749902129361, x = - 1.015755543828121,

328

Manual de Maxima

x = .9659625152196369 %i - .4069597231924075,
x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
(%i3) for e in soln
do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
- 3.5527136788005E-15
- 5.32907051820075E-15
4.44089209850063E-15 %i - 4.88498130835069E-15
- 4.44089209850063E-15 %i - 4.88498130835069E-15
3.5527136788005E-15
(%o3)
done
(%i4) polyfactor: true$
(%i5) allroots (eqn);
(%o5) - 13.5 (x - 1.0) (x - .8296749902129361)
2
(x + 1.015755543828121) (x + .8139194463848151 x
+ 1.098699797110288)

bfallroots (expr )
bfallroots (eqn )

[Funcion]
[Funcion]
Calcula aproximaciones numericas de las races reales y complejas del polinomio expr
o de la ecuaci
on polin
omica eqn de una variable.
En todos los aspectos, bfallroots es identica a allroots, excepto que bfallroots
calcula las races en formato bigfloat (n
umeros decimales de precision arbitraria).
Vease allroots para m
as informacion.
[Variable opcional]
Valor por defecto: true
Si backsubst vale false, evita la retrosustitucion en linsolve tras la triangularizaci
on de las ecuaciones. Esto puede ser de utilidad en problemas muy grandes, en
los que la retrosustituci
on puede provocar la generacion de expresiones extremadamente largas.
(%i1) eq1 : x + y + z = 6$
(%i2) eq2 : x - y + z = 2$
(%i3) eq3 : x + y - z = 0$
(%i4) backsubst : false$
(%i5) linsolve ([eq1, eq2, eq3], [x,y,z]);
(%o5)
[x = z - y, y = 2, z = 3]
(%i6) backsubst : true$

backsubst

Captulo 20: Ecuaciones

329

(%i7) linsolve ([eq1, eq2, eq3], [x,y,z]);


(%o7)
[x = 1, y = 2, z = 3]
[Variable opcional]

breakup
Valor por defecto: true

Si breakup vale true, solve expresa sus soluciones a las ecuaciones c


ubicas y cuarticas
en terminos de subexpresiones comunes, las cuales son asignadas a etiquetas del tipo
%t1, %t2, etc. En otro caso, no se identifican subexpresiones comunes.
La asignaci
on breakup: true solo tiene efecto cuando programmode vale false.
Ejemplos:
(%i1) programmode: false$
(%i2) breakup: true$
(%i3) solve (x^3 + x^2 - 1);
sqrt(23)
25 1/3
(--------- + --)
6 sqrt(3)
54

(%t3)
Solution:

(%t4)

(%t5)

(%t6)

sqrt(3) %i
1
---------- - sqrt(3) %i
1
2
2
1
x = (- ---------- - -) %t3 + -------------- - 2
2
9 %t3
3
sqrt(3) %i
1
- ---------- - sqrt(3) %i
1
2
2
1
x = (---------- - -) %t3 + ---------------- - 2
2
9 %t3
3
1
1
x = %t3 + ----- - 9 %t3
3
[%t4, %t5, %t6]

(%o6)
(%i6) breakup: false$
(%i7) solve (x^3 + x^2 - 1);
Solution:

sqrt(3) %i
1
---------- - 2
2
sqrt(23)
25 1/3
(%t7) x = --------------------- + (--------- + --)
sqrt(23)
25 1/3
6 sqrt(3)
54
9 (--------- + --)
6 sqrt(3)
54

330

Manual de Maxima

sqrt(3) %i
1
1
(- ---------- - -) - 2
2
3
sqrt(23)
25 1/3 sqrt(3) %i
1
(%t8) x = (--------- + --)
(---------- - -)
6 sqrt(3)
54
2
2
sqrt(3) %i
1
- ---------- - 2
2
1
+ --------------------- - sqrt(23)
25 1/3
3
9 (--------- + --)
6 sqrt(3)
54

(%t9)

(%o9)

sqrt(23)
25 1/3
1
1
x = (--------- + --)
+ --------------------- - 6 sqrt(3)
54
sqrt(23)
25 1/3
3
9 (--------- + --)
6 sqrt(3)
54
[%t7, %t8, %t9]

dimension (eqn )
dimension (eqn_1, ..., eqn_n )

[Funcion]
[Funcion]
El paquete dimen es para an
alisis dimensional. La instruccion load ("dimen") carga
el paquete y demo ("dimen") presenta una peque~
na demostracion.
[Variable opcional]

dispflag
Valor por defecto: true

Si dispflag vale false, entonces se inhibira que Maxima muestre resultados de las
funciones que resuelven ecuaciones cuando estas son llamadas desde dentro de un
bloque (block). Cuando un bloque termina con el signo del dolar, $, a la variable
dispflag se le asigna false.

funcsolve (eqn, g (t ))

[Funcion]
Devuelve [g (t ) = ...] o [], dependiendo de que exista o no una funcion racional
g (t ) que satisfaga eqn, la cual debe ser un polinomio de primer orden, lineal para
g (t ) y g (t +1)
(%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1)
= (n - 1)/(n + 2);
(n + 3) f(n + 1)
n - 1
(%o1)
(n + 1) f(n) - ---------------- = ----n + 1
n + 2
(%i2) funcsolve (eqn, f(n));

Captulo 20: Ecuaciones

331

Dependent equations eliminated:

(4 3)
n
(%o2)
f(n) = --------------(n + 1) (n + 2)
Aviso: esta es una implemetacion rudimentaria, por lo que debe ser utilizada con
cautela.
[Variable opcional]
Valor por defecto: false
Si globalsolve vale true, a las incognitas de las ecuaciones se les asignan las soluciones encontradas por linsolve y por solve cuando se resuelven sistemas de dos o
mas ecuaciones lineales.
Si globalsolve vale false, las soluciones encontradas por linsolve y por solve
cuando se resuelven sistemas de dos o mas ecuaciones lineales se expresan como ecuaciones y a las inc
ognitas no se le asignan valores.
Cuando se resuelven ecuaciones que no son sistemas de dos o mas ecuaciones lineales,
solve ignora el valor de globalsolve. Otras funciones que resuelven ecuaciones
(como algsys) ignoran siempre el valor de globalsolve.
Ejemplos:
(%i1) globalsolve: true$
(%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

globalsolve

(%t2)

(%t3)
(%o3)
(%i3) x;
(%o3)

17
x : -7
1
y : - 7
[[%t2, %t3]]
17
-7

(%i4) y;
(%o4)

1
- 7

(%i5) globalsolve: false$


(%i6) kill (x, y)$
(%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

(%t7)

17
x = --

332

Manual de Maxima

(%t8)
(%o8)
(%i8) x;
(%o8)
(%i9) y;
(%o9)

1
y = - 7
[[%t7, %t8]]
x
y

ieqn (ie, unk, tech, n, guess )

[Funcion]
El paquete inteqn se dedica a la resolucion de ecuaciones integrales. Para hacer uso
de el, ejecutar la instrucci
on load ("inteqn").
El argumento ie es la ecuaci
on integral; unk es la funcion incognita; tech es el metodo
a aplicar para efectuar la resolucion del problema (tech = first significa: aplica
el primer metodo que encuentre una solucion; tech = all significa: aplica todos
los metodos posibles); n es el n
umero maximo de terminos que debe tomar taylor,
neumann, firstkindseries o fredseries (tambien es el maximo nivel de recursion
para el metodo de diferenciacion); guess es la solucion candidata inicial para neumann
o firstkindseries.
Valores por defecto para los argumentos segundo a quinto son:
unk: p (x ), donde p es la primera funcion desconocida que Maxima encuentra en
el integrando y x es la variable que act
ua como argumento en la primera aparicion
de p encontrada fuera de una integral en el caso de ecuaciones de segunda especie
(secondkind), o es la u
nica variable aparte de la de integracion en el caso de ecuaciones de primera especie (firstkind). Si el intento de encontrar x falla, el usuario
ser
a consultado para suministrar una variable independiente.
[Variable opcional]
Valor por defecto: true
La variable ieqnprint controla el comportamiento del resultado retornado por la
instrucci
on ieqn. Si ieqnprint vale false, la lista devuelta por la funcion ieqn
tiene el formato
[soluci
on, metodo utilizado, nterms, variable]
donde variable estar
a ausente si la solucion es exacta; en otro caso, sera la palabra
approximate o incomplete seg
un que la solucion sea inexacta o que no tenga forma
explcita, respectivamente. Si se ha utilizado un metodo basado en series, nterms es
el n
umero de terminos utilizado, que puede ser menor que el n dado a ieqn.

ieqnprint

lhs (expr )

[Funcion]
Devuelve el miembro izquierdo (es decir, el primer argumento) de la expresion expr,
cuando el operador de expr es uno de los operadores de relacion < <= = # equal
notequal >= >, o un operadores de asignacion := ::= : ::, o un operador infijo binario definido por el usuario mediante infix.
Si expr es un
atomo o si su operador es diferente de los citados mas arriba, lhs
devuelve expr.

Captulo 20: Ecuaciones

333

Vease tambien rhs.


Ejemplo:
(%i1) e: aa + bb = cc;
(%o1)
bb + aa = cc
(%i2) lhs (e);
(%o2)
bb + aa
(%i3) rhs (e);
(%o3)
cc
(%i4) [lhs (aa < bb), lhs (aa <= bb),
lhs (aa >= bb), lhs (aa > bb)];
(%o4)
[aa, aa, aa, aa]
(%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)),
lhs (notequal (aa, bb))];
(%o5)
[aa, aa, aa, aa]
(%i6) e1: (foo(x) := 2*x);
(%o6)
foo(x) := 2 x
(%i7) e2: (bar(y) ::= 3*y);
(%o7)
bar(y) ::= 3 y
(%i8) e3: (x : y);
(%o8)
x : y
(%i9) e4: (x :: y);
(%o9)
x :: y
(%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
(%o10)
[foo(x), bar(y), x, x]
(%i11) infix ("][");
(%o11)
][
(%i12) lhs (aa ][ bb);
(%o12)
aa

linsolve ([expr_1, ..., expr_m ], [x_1, ..., x_n ])

[Funcion]
Resuelve la lista de ecuaciones lineales simultaneas para la lista de variables. Las
expresiones deben ser polinomios lineales respecto de las variables o ecuaciones.
Si globalsolve vale true, a cada incognita se le asigna el valor de la solucion encontrada.
Si backsubst vale false, linsolve no hace la sustitucion tras la triangulariacion
de las ecuaciones. Esto puede ser necesario en problemas muy grandes en los que la
sustituci
on puede dar lugar a la generacion de expresiones enormes.
Si linsolve_params vale true, linsolve tambien genera smbolos %r para representar par
ametros arbitrarios como los descritos para la funcion algsys. Si vale false,
el resultado devuelto por linsolve expresara, si es el sistema es indeterminado, unas
variables en funci
on de otras.
Si programmode vale false, linsolve muestra la solucion con etiquetas de expresiones intermedias (%t) y devuelve las lista de etiquetas.
(%i1) e1: x + z = y;
(%o1)
z + x = y
(%i2) e2: 2*a*x - y = 2*a^2;

334

Manual de Maxima

2
2 a x - y = 2 a

(%o2)
(%i3) e3: y - 2*z = 2;
(%o3)
y - 2 z = 2
(%i4) [globalsolve: false, programmode: true];
(%o4)
[false, true]
(%i5) linsolve ([e1, e2, e3], [x, y, z]);
(%o5)
[x = a + 1, y = 2 a, z = a - 1]
(%i6) [globalsolve: false, programmode: false];
(%o6)
[false, false]
(%i7) linsolve ([e1, e2, e3], [x, y, z]);
Solution
(%t7)

z = a - 1

(%t8)

y = 2 a

(%t9)
x = a + 1
(%o9)
[%t7, %t8, %t9]
(%i9) %;
(%o9)
[z = a - 1, y = 2 a, x = a + 1]
(%i10) [globalsolve: true, programmode: false];
(%o10)
[true, false]
(%i11) linsolve ([e1, e2, e3], [x, y, z]);
Solution
(%t11)

z : a - 1

(%t12)

y : 2 a

(%t13)
(%o13)
(%i13)
(%o13)
(%i14)
(%o14)
(%i15)
(%o15)
(%i16)
(%o16)
(%i17)
(%o17)

x : a + 1
[%t11, %t12, %t13]
%;
[z : a - 1, y : 2 a, x : a + 1]
[x, y, z];
[a + 1, 2 a, a - 1]
[globalsolve: true, programmode: true];
[true, true]
linsolve ([e1, e2, e3], [x, y, z]);
[x : a + 1, y : 2 a, z : a - 1]
[x, y, z];
[a + 1, 2 a, a - 1]

linsolvewarn

[Variable opcional]

Valor por defecto: true


Si linsolvewarn vale true, linsolve mostrara el mensaje: "Dependent equations
eliminated".

Captulo 20: Ecuaciones

335

[Variable opcional]

linsolve_params
Valor por defecto: true

Si linsolve_params vale true, linsolve tambien genera smbolos %r para representar par
ametros arbitrarios como los descritos para la funcion algsys. Si vale false,
el resultado devuelto por linsolve expresara, si es el sistema es indeterminado, unas
variables en funci
on de otras.
[System variable]

multiplicities
Valor por defecto: not_set_yet

La variable multiplicities es una con las multiplicidades de las soluciones encontradas por solve o realroots.

nroots (p, low, high )

[Funcion]
Devuelve el n
umero de races reales del polinomio real univariante p en el intervalo
semiabierto (low, high ]. Los extremos del intervalo pueden ser minf o inf, menos
y m
as infinito.
La funci
on nroots utiliza el metodo de las secuencias de Sturm.
(%i1) p: x^10 - 2*x^4 + 1/2$
(%i2) nroots (p, -6, 9.1);
(%o2)

nthroot (p, n )

[Funcion]
Siendo p un polinomio de coeficientes enteros y n un entero positivo, nthroot devuelve
un polinomio q, tambien de coeficientes enteros, tal que q^n=p, o un mensaje de error
indicando que p no es una n-potencia exacta. Esta funcion es bastante mas rapida
que factor y que sqfr.

polyfactor

[Variable opcional]

Valor por defecto: false


Cuando polyfactor vale true, las funciones allroots y bfallroots factorizan el
polinomio sobre los n
umeros reales si el polinomio es real, o factoriza sobre los complejos si el polinomio es complejo.
Vease un ejemplo en allroots.

programmode

[Variable opcional]

Valor por defecto: true


Si programmode vale true, solve, realroots, allroots y linsolve devuelve sus
soluciones como elementos de una lista.
Si programmode vale false, solve y las demas crean expresiones intermedias etiquetadas %t1, t2, etc., y les asinan las soluciones.
(%i1) solve(x^2+x+1);
sqrt(3) %i + 1
sqrt(3) %i - 1
(%o1)
[x = - --------------, x = --------------]
2
2
(%i2) programmode:false$
(%i3) solve(x^2+x+1);

336

Manual de Maxima

Solution:

(%t3)

(%t4)
(%o4)

sqrt(3) %i + 1
x = - -------------2
sqrt(3) %i - 1
x = -------------2
[%t4, %t5]

[Variable opcional]
Valor por defecto: false
Si realonly vale true, algsys solo devuelve aquellas soluciones exentas de la constante %i.

realonly

(expr, bound )
[Funcion]
(eqn, bound )
[Funcion]
(expr )
[Funcion]
(eqn )
[Funcion]
Calcula aproximaciones racionales de las races reales del polinomio expr o de la
ecuaci
on polin
omica eqn de una variable, dentro de la tolerancia especificada por
bound. Los coeficientes de expr o de eqn deben ser n
umeros literales, por lo que las
constantes simb
olicas como %pi no son aceptadas.
La funci
on realroots guarda las multiplicidades de las races encontradas en la variable global multiplicities.
La funci
on realroots genera una secuencia de Sturm para acotar cada raz, aplicando
despues el metodo de bisecci
on para afinar las aproximaciones. Todos los coeficientes
se convierten a formas racionales equivalentes antes de comenzar la b
usqueda de las
races, de modo que los c
alculos se realizan con aritmetica exacta racional. Incluso
en el caso de que algunos coeficientes sean n
umeros decimales en coma flotante, los
resultados son racionales, a menos que se les fuerce a ser decimales con las variables
float o numer.
Si bound es menor que la unidad, todas las races enteras se expresan en forma
exacta. Si no se especifica bound, se le supone igual al valor de la variable global
rootsepsilon.
Si la variable global programmode vale true, la funcion realroots devuelve una
lista de la forma [x = x_1, x = x_2, ...]. Si programmode vale false, realroots
crea etiquetas %t1, %t2, ... para las expresiones intermedias, les asigna valores y,
finalmente, devuelve la lista de etiquetas.
Ejemplos:
(%i1) realroots (-1 - x + x^5, 5e-6);
612003
(%o1)
[x = ------]
524288
(%i2) ev (%[1], float);

realroots
realroots
realroots
realroots

Captulo 20: Ecuaciones

337

(%o2)
x = 1.167303085327148
(%i3) ev (-1 - x + x^5, %);
(%o3)
- 7.396496210176905E-6
(%i1) realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
(%o1)
[x = 1, x = 2, x = 3]
(%i2) multiplicities;
(%o2)
[5, 3, 1]

rhs (expr )

[Funcion]
Devuelve el miembro derecho (es decir, el segundo argumento) de la expresion expr,
cuando el operador de expr es uno de los operadores de relacion < <= = # equal
notequal >= >, o un operadores de asignacion := ::= : ::, o un operador infijo binario definido por el usuario mediante infix.
Si expr es un
atomo o si su operador es diferente de los citados mas arriba, rhs
devuelve expr.
Vease tambien lhs.
Ejemplo:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

e: aa + bb = cc;
bb + aa = cc
lhs (e);
bb + aa
rhs (e);

cc
[rhs (aa < bb), rhs (aa <= bb),
rhs (aa >= bb), rhs (aa > bb)];
(%o4)
[bb, bb, bb, bb]
(%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)),
rhs (notequal (aa, bb))];
(%o5)
[bb, bb, bb, bb]
(%i6) e1: (foo(x) := 2*x);
(%o6)
foo(x) := 2 x
(%i7) e2: (bar(y) ::= 3*y);
(%o7)
bar(y) ::= 3 y
(%i8) e3: (x : y);
(%o8)
x : y
(%i9) e4: (x :: y);
(%o9)
x :: y
(%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
(%o10)
[2 x, 3 y, y, y]
(%i11) infix ("][");
(%o11)
][
(%i12) rhs (aa ][ bb);
(%o12)
bb

rootsconmode
Valor por defecto: true

[Variable opcional]

338

Manual de Maxima

La variable rootsconmode controla el comportamiento


rootscontract. Vease rootscontract para mas detalles.

de

la

instruccion

rootscontract (expr )

[Funcion]
Convierte productos de races en races de productos. Por ejemplo, rootscontract
(sqrt(x)*y^(3/2)) devuelve sqrt(x*y^3).
Si radexpand vale true y domain vale real, rootscontract convierte abs en sqrt,
por ejemplo, rootscontract (abs(x)*sqrt(y)) devuelve sqrt(x^2*y).
La opci
on rootsconmode afecta el resultado de rootscontract como sigue:
Problema
Valor de
Resultadod de
rootsconmode
rootscontract

x^(1/2)*y^(3/2)
false
(x*y^3)^(1/2)
x^(1/2)*y^(1/4)
false
x^(1/2)*y^(1/4)
x^(1/2)*y^(1/4)
true
(x*y^(1/2))^(1/2)
x^(1/2)*y^(1/3)
true
x^(1/2)*y^(1/3)
x^(1/2)*y^(1/4)
all
(x^2*y)^(1/4)
x^(1/2)*y^(1/3)
all
(x^3*y^2)^(1/6)
Si rootsconmode vale false, rootscontract contrae solamente respecto de exponentes racionales cuyos denominadores sean iguales. La clave para los ejemplos
rootsconmode: true es simplemente que 2 divide a 4 pero no a 3. La asignacion
rootsconmode: all hace que se calcule el mnimo com
un m
ultiplo de los denominadores de los exponentes.
La funci
on rootscontract utiliza ratsimp de forma similar a como lo hace
logcontract.
Ejemplos:
(%i1) rootsconmode: false$
(%i2) rootscontract (x^(1/2)*y^(3/2));
3
(%o2)
sqrt(x y )
(%i3) rootscontract (x^(1/2)*y^(1/4));
1/4
(%o3)
sqrt(x) y
(%i4) rootsconmode: true$
(%i5) rootscontract (x^(1/2)*y^(1/4));
(%o5)
sqrt(x sqrt(y))
(%i6) rootscontract (x^(1/2)*y^(1/3));
1/3
(%o6)
sqrt(x) y
(%i7) rootsconmode: all$
(%i8) rootscontract (x^(1/2)*y^(1/4));
2
1/4
(%o8)
(x y)
(%i9) rootscontract (x^(1/2)*y^(1/3));
3 2 1/6
(%o9)
(x y )

Captulo 20: Ecuaciones

339

(%i10) rootsconmode: false$


(%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
*sqrt(sqrt(1 + x) - sqrt(x)));
(%o11)
1
(%i12) rootsconmode: true$
(%i13) rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
(%o13)
0
[Variable opcional]
Valor por defecto: 1.0e-7
La variable rootsepsilon es la tolerancia que establece el intervalo de confianza para
las races calculadas por la funcion realroots.

rootsepsilon

solve (expr, x )
solve (expr )
solve ([eqn_1, ..., eqn_n ], [x_1, ..., x_n ])

[Funcion]
[Funcion]
[Funcion]
Resuelve la ecuaci
on algebraica expr de incognita x y devuelve una lista de igualdades
con la x despejada. Si expr no es una igualdad, se supone que se quiere resolver la
ecuaci
on expr = 0. El argumento x puede ser una funcion (por ejemplo, f(x)), u
otra expresi
on no at
omica, excepto una suma o producto. Puede omitirse x si expr
contiene solamente una variable. El argumento expr puede ser una expresion racional
y puede contener funciones trigonometricas, exponenciales, etc.
Se utiliza el siguiente metodo de resolucion:
Sea E la expresi
on y X la incognita. Si E es lineal respecto de X entonces X se
resuelve de forma trivial. En caso contrario, si E es de la forma A*X^N + B entonces
el resultado es (-B/A)^1/N) multiplicado por las N-esimas races de la unidad.
Si E no es lineal respecto de X entonces el maximo com
un divisor de los exponentes
de X en E (sup
ongase que es N ) se divide entre los exponentes y la multiplicidad
de las races se multiplica por N. Entonces es llamado recursivamente solve para
este resultado. Si E es factorizable entonces solve es invocado para cada uno de
los factores. Finalmente, solve usara, seg
un sea necesario, las formulas cuadratica,
c
ubica o cu
artica.
En caso de que E sea un polinomio respecto de una funcion de la incognita, por
ejemplo F(X), entonces se calcula primero para F(X) (sea C el resultado obtenido),
entonces la ecuaci
on F(X)=C se resuelve para X en el supuesto que se conozca la
inversa de la funci
on F.
Si la variable breakup vale false hara que solve muestre las soluciones de las ecuaciones c
ubicas o cu
articas como expresiones u
nicas, en lugar de utilizar varias subexpresiones comunes, que es el formato por defecto.
A la variable multiplicities se le asignara una lista con las multiplicidades de las
soluciones individuales devueltas por solve, realroots o allroots. La instruccion
apropos (solve) har
a que se muestren las variables optativas que de alg
un modo
afectan al comportamiento de solve. Se podra luego utilizar la funcion describe
para aquellas variables cuyo objeto no este claro.
La llamada solve ([eqn_1, ..., eqn_n ], [x_1, ..., x_n ]) resuelve un sistema de
ecuaciones polin
omicas simultaneas (lineales o no) llamando a linsolve o algsys y

340

Manual de Maxima

devuelve una lista de listas con soluciones para las incognitas. En caso de haberse
llamado a linsolve esta lista contendra una u
nica lista de soluciones. La llamada
a solve tiene dos listas como argumentos. La primera lista tiene las ecuaciones
a resolver y la segunda son las incognitas cuyos valores se quieren calcular. Si el
n
umero de variables en las ecuaciones es igual al n
umero de incognitas, el segundo
argumento puede omitirse.
Si programmode vale false, solve muestra la solucion con etiquetas de expresiones
intermedias (%t) y devuelve las lista de etiquetas.
Si globalsolve vale true y el problema consiste en resolver un sistema de dos o m
as
ecuaciones lineales, a cada incognita se le asigna el valor encontrado en la resolucion
del sistema.
Ejemplos:
(%i1) solve (asin (cos (3*x))*(f(x) - 1), x);
SOLVE is using arc-trig functions to get a solution.
Some solutions will be lost.
%pi
(%o1)
[x = ---, f(x) = 1]
6
(%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
log(125)
(%o2)
[f(x) = --------]
log(5)
(%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
2
2
(%o3)
[4 x - y = 12, x y - x = 2]
(%i4) solve (%, [x, y]);
(%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
- .1331240357358706, y = .0767837852378778
- 3.608003221870287 %i], [x = - .5202594388652008 %i
- .1331240357358706, y = 3.608003221870287 %i
+ .0767837852378778], [x = - 1.733751846381093,
y = - .1535675710019696]]
(%i5) solve (1 + a*x + x^3, x);
3
sqrt(3) %i
1
sqrt(4 a + 27)
1 1/3
(%o5) [x = (- ---------- - -) (--------------- - -)
2
2
6 sqrt(3)
2
sqrt(3) %i
1
(---------- - -) a

Captulo 20: Ecuaciones

341

2
2
- --------------------------, x =
3
sqrt(4 a + 27)
1 1/3
3 (--------------- - -)
6 sqrt(3)
2
3
sqrt(3) %i
1
sqrt(4 a + 27)
1 1/3
(---------- - -) (--------------- - -)
2
2
6 sqrt(3)
2
sqrt(3) %i
1
(- ---------- - -) a
2
2
- --------------------------, x =
3
sqrt(4 a + 27)
1 1/3
3 (--------------- - -)
6 sqrt(3)
2
3
sqrt(4 a + 27)
1 1/3
a
(--------------- - -)
- --------------------------]
6 sqrt(3)
2
3
sqrt(4 a + 27)
1 1/3
3 (--------------- - -)
6 sqrt(3)
2
(%i6) solve (x^3 - 1);
sqrt(3) %i - 1
sqrt(3) %i + 1
(%o6)
[x = --------------, x = - --------------, x = 1]
2
2
(%i7) solve (x^6 - 1);
sqrt(3) %i + 1
sqrt(3) %i - 1
(%o7) [x = --------------, x = --------------, x = - 1,
2
2

(%i8)

(%o8)
(%i9)
(%o9)

sqrt(3) %i + 1
sqrt(3) %i - 1
x = - --------------, x = - --------------, x = 1]
2
2
ev (x^6 - 1, %[1]);
6
(sqrt(3) %i + 1)
----------------- - 1
64
expand (%);
0

342

Manual de Maxima

(%i10) x^2 - 1;
2
(%o10)
x - 1
(%i11) solve (%, x);
(%o11)
[x = - 1, x = 1]
(%i12) ev (%th(2), %[1]);
(%o12)
0
Los %r se utilizan para indicar parametros en las soluciones.
(%i1) solve([x+y=1,2*x+2*y=2],[x,y]);
solve: dependent equations eliminated: (2)
(%o1)
[[x = 1 - %r1, y = %r1]]
Veanse algsys y %rnum_list para mas informacion.
[Variable opcional]
Valor por defecto: true
Si solvedecomposes vale true, solve llama a polydecomp en caso de que se le pida
resolver ecuaciones polin
omicas.

solvedecomposes

[Variable opcional]
Valor por defecto: false
Si solveexplicit vale true, le inhibe a solve devolver soluciones implcitas, esto
es, soluciones de la forma F(x) = 0, donde F es cierta funcion.

solveexplicit

[Variable opcional]
Valor por defecto: true
Si solvefactors vale false, solve no intenta factorizar la expresion. Este valor
false puede ser u
til en algunos casos en los que la factorizacion no es necesaria.

solvefactors

[Variable opcional]
Valor por defecto: true
Si solvenullwarn vale true, solve muestra un mensaje de aviso si es llamado con
una lista de ecuaciones vaca o con una lista de incognitas vaca. Por ejemplo, solve
([], []) imprimir
a dos mensajes de aviso y devolvera [].

solvenullwarn

[Variable opcional]
Valor por defecto: false
Si solveradcan vale true, solve llama a radcan, lo que hara que solve se ejecute
de forma m
as lenta, pero permitira que se resuelvan ciertas ecuaciones que contengan
exponenciales y logaritmos.

solveradcan

[Variable opcional]
Valor por defecto: true
Si solvetrigwarn vale true, solve puede presentar un mensaje diciendo que est
a
utilizando funciones trigonometricas inversas para resolver la ecuacion, y que por lo
tanto puede estar ignorando algunas soluciones.

solvetrigwarn

Captulo 21: Ecuaciones Diferenciales

343

21 Ecuaciones Diferenciales
21.1 Introducci
on a las ecuaciones diferenciales
Esta secci
on describe las funciones disponibles en Maxima para el calculo de las soluciones
analticas de ciertos tipos de ecuaciones de primer y segundo orden. Para las soluciones
numericas de sistemas de ecuaciones diferenciales, vease el paquete adicional dynamics.
Para las representaciones gr
aficas en el espacio de fases, vease el paquete plotdf.

21.2 Funciones y variables para ecuaciones diferenciales.


bc2 (soluc, xval1, yval1, xval2, yval2 )

[Funcion]
Resuelve el problema del valor en la frontera para ecuaciones diferenciales de segundo
orden. Aqu, soluc es una solucion general de la ecuacion, como las que calcula ode2,
xval1 especifica el valor de la variable independiente en el primer punto mediante
una expresi
on de la forma x = x0 , mientras que yval1 hace lo propio para la variable
dependiente. Las expresiones xval2 y yval2 dan los valores de estas mismas variables
en un segundo punto, utilizando el mismo formato.

desolve (ecu, x )
desolve ([eqn_1, ..., eqn_n ], [x_1, ..., x_n ])

[Funcion]
[Funcion]
La funci
on desolve resuelve sistemas de ecuaciones diferenciales ordinarias lineales
utilizando la transformada de Laplace. Aqu las eqi (i=1,..,n) son ecuaciones diferenciales con variables dependientes x 1, ..., x n. La dependencia funcional de x 1, ..., x n
respecto de una variable independiente, por ejemplo x, debe indicarse explcitamente,
tanto en las variables como en las derivadas. Por ejemplo,
eqn_1: diff(f,x,2) = sin(x) + diff(g,x);
eqn_2: diff(f,x) + x^2 - f = 2*diff(g,x,2);
no es el formato apropiado. El metodo correcto es
eqn_1: diff(f(x),x,2) = sin(x) + diff(g(x),x);
eqn_2: diff(f(x),x) + x^2 - f(x) = 2*diff(g(x),x,2);
La llamada a la funci
on desolve sera entonces
desolve([eqn_1, eqn_2], [f(x),g(x)]);
Si las condiciones iniciales en x=0 son conocidas, deben ser suministradas antes de
llamar a desolve haciendo uso previo de la funcion atvalue,
(%i1) diff(f(x),x)=diff(g(x),x)+sin(x);
d
d
(%o1)
-- (f(x)) = -- (g(x)) + sin(x)
dx
dx
(%i2) diff(g(x),x,2)=diff(f(x),x)-cos(x);
2
d
d
(%o2)
--- (g(x)) = -- (f(x)) - cos(x)
2
dx
dx

344

Manual de Maxima

(%i3) atvalue(diff(g(x),x),x=0,a);
(%o3)
a
(%i4) atvalue(f(x),x=0,1);
(%o4)
1
(%i5) desolve([%o1,%o2],[f(x),g(x)]);
x
(%o5) [f(x) = a %e - a + 1, g(x) =
x
cos(x) + a %e - a + g(0) - 1]
(%i6) [%o1,%o2],%o5,diff;
x
x
x
x
(%o6)
[a %e = a %e , a %e - cos(x) = a %e - cos(x)]
Si desolve no encuentra una solucion, entonces devuelve false.

ic1 (soluc, xval, yval )

[Funcion]
Resuelve el problema del valor inicial en ecuaciones diferenciales de primer orden.
Aqu, soluc es una soluci
on general de la ecuacion, como las que calcula ode2, xval es
una ecuaci
on de la forma x = x0 para la variable independiente y yval es una ecuacion
de la forma y = y0 para la variable dependiente. Vease ode2 para un ejemplo sobre
su utilizaci
on.

ic2 (soluc, xval, yval, dval )

[Funcion]
Resuelve el problema del valor inicial en ecuaciones diferenciales de segundo orden.
Aqu, soluc es una soluci
on general de la ecuacion, como las que calcula ode2, xval es
una ecuaci
on de la forma x = x0 para la variable independiente y yval es una ecuacion
de la forma y = y0 para la variable dependiente, siendo dval una expresion de la
forma diff(y,x ) = dy0 que especifica la primera derivada de la variable dependiente
respecto de la independiente en el punto xval.
Vease ode2 para un ejemplo de su uso.

ode2 (ecu, dvar, ivar )

[Funcion]
La funci
on ode2 resuelve ecuaciones diferenciales ordinarias de primer y segundo orden. Admite tres argumentos: una ecuacion diferencial ordinaria ecu, la variable
dependiente dvar y la variable independiente ivar. Si ha tenido exito en la resolucion
de la ecuaci
on, devuelve una solucion, explcita o implcita, para la variable dependiente. El smbolo %c se utiliza para representar la constante en el caso de ecuaciones
de primer orden y los smbolos %k1 y %k2 son las constantes de las ecuaciones de
segundo orden. Si por cualquier razon ode2 no puede calcular la solucion, devolver
a
false, acompa~
nado quiz
as de un mensaje de error. Los metodos utilizados para las
ecuaciones de primer orden, en el orden en que se hace la tentativa de resolucion son:
lineal, separable, exacto (pudiendo solicitar en este caso un factor de integracion),
homogeneo, ecuaci
on de Bernoulli y un metodo homogeneo generalizado. Para las
ecuaciones de segundo orden: coeficiente constante, exacto, homogeneo lineal con
coeficientes no constantes que pueden ser transformados en coeficientes constantes,
ecuaci
on equidimensional o de Euler, metodo de variacion de parametros y ecuaciones

Captulo 21: Ecuaciones Diferenciales

345

exentas de las variables dependientes o independientes de manera que se puedan reducir a dos ecuaciones lineales de primer a ser resueltas secuencialmente. Durante el
proceso de resoluci
on de ecuaciones diferenciales ordinarias, ciertas variables se utilizan con el u
nico prop
osito de suministrar informacion al usuario: method almacena
el metodo utilizado para encontrar la solucion (como por ejemplo linear), intfactor
para el factor de integraci
on que se haya podido utilizar, odeindex para el ndice del
metodo de Bernoulli o el homogeneo generalizado y yp para la solucion particular del
metodo de variaci
on de par
ametros.
A fin de resolver problemas con valores iniciales y problemas con valores en la frontera,
la funci
on ic1 est
a disponible para ecuaciones de primer orden y las funciones ic2 y
bc2 para problemas de valores iniciales y de frontera, respectivamente, en el caso de
las ecuaciones de segundo orden.
Ejemplo:
(%i1) x^2*diff(y,x) + 3*y*x = sin(x)/x;
2 dy
sin(x)
(%o1)
x -- + 3 x y = -----dx
x
(%i2) ode2(%,y,x);
%c - cos(x)
(%o2)
y = ----------3
x
(%i3) ic1(%o2,x=%pi,y=0);
cos(x) + 1
(%o3)
y = - ---------3
x
(%i4) diff(y,x,2) + y*diff(y,x)^3 = 0;
2
d y
dy 3
(%o4)
--- + y (--) = 0
2
dx
dx
(%i5) ode2(%,y,x);
3
y + 6 %k1 y
(%o5)
------------ = x + %k2
6
(%i6) ratsimp(ic2(%o5,x=0,y=0,diff(y,x)=2));
3
2 y - 3 y
(%o6)
- ---------- = x
6
(%i7) bc2(%o5,x=0,y=1,x=1,y=3);
3
y - 10 y
3

346

Manual de Maxima

(%o7)

--------- = x - 6
2

Captulo 22: Metodos numericos

347

22 M
etodos num
ericos
22.1 Introducci
on a la transformada r
apida de Fourier
El paquete fft contiene funciones para el calculo numerico (no simbolico) de la transformada
rapida de Fourier.

polartorect (magnitude_array, phase_array )

[Funcion]
Transforma valores complejos de la forma r %e^(%i t) a la forma a + b %i, siendo r
el m
odulo y t la fase. Ambos valores r y t son arrays unidimensionales cuyos tam~
nos
son iguales a la misma potencia de dos.
Los valores originales de los arrays de entrada son reemplazados por las partes real e
imaginaria, a y b, de los correspondientes n
umeros complejos. El resultado se calcula
como
a = r cos(t)
b = r sin(t)
polartorect es la funci
on inversa de recttopolar.
Para utilizar esta funci
on ejec
utese antes load(fft). Vease tambien fft.

recttopolar (real_array, imaginary_array )

[Funcion]
Transforma valores complejos de la forma a + b %i a la forma r %e^(%i t), siendo
a la parte real y a la imaginaria. Ambos valores a y b son arrays unidimensionales
cuyos tam~
nos son iguales a la misma potencia de dos.
Los valores originales de los arrays de entrada son reemplazados por los modulos y
las fases, r y t, de los correspondientes n
umeros complejos. El resultado se calcula
como
r = sqrt(a^2 + b^2)
t = atan2(b, a)
El
angulo calculado pertence al rango de -%pi a %pi.
recttopolar es la funci
on inversa de polartorect.

Para utilizar esta funci


on ejec
utese antes load(fft). Vease tambien fft.

inverse_fft (y )

[Funcion]

Calcula la transformada inversa rapida de Fourier.


y es una lista o array (declarado o no) que contiene los datos a transformar. El n
umero
de elementos debe ser una potencia de dos. Los elementos deben ser n
umeros literales
(enteros, racionales, de punto flotante o decimales grandes), constantes simbolicas,
expresiones del tipo a + b*%i, siendo a y b n
umeros literales, o constantes simbolicas.
La funci
on inverse_fft devuelve un nuevo objeto del mismo tipo que y, el cual no
se ve modificado. Los resultados se calculan siempre como decimales o expresiones a
+ b*%i, siendo a y b decimales.
La transformada inversa discreta de Fourier se define como se indica a continuacion.
Si x es el resultado de la transformada inversa, entonces para j entre 0 y n - 1 se
tiene

348

Manual de Maxima

x[j] = sum(y[k] exp(-2 %i %pi j k / n), k, 0, n - 1)


Para utilizar esta funci
on ejec
utese antes load(fft).
Veanse tambien fft (transformada directa), recttopolar y polartorect.
Ejemplos:
Datos reales.
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)

load (fft) $
fpprintprec : 4 $
L : [1, 2, 3, 4, -1, -2, -3, -4] $
L1 : inverse_fft (L);
[0.0, 14.49 %i - .8284, 0.0, 2.485 %i + 4.828, 0.0,
4.828 - 2.485 %i, 0.0, - 14.49 %i - .8284]
(%i5) L2 : fft (L1);
(%o5) [1.0, 2.0 - 2.168L-19 %i, 3.0 - 7.525L-20 %i,
4.0 - 4.256L-19 %i, - 1.0, 2.168L-19 %i - 2.0,
7.525L-20 %i - 3.0, 4.256L-19 %i - 4.0]
(%i6) lmax (abs (L2 - L));
(%o6)
3.545L-16

Datos complejos.
(%i1) load (fft) $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
(%i4) L1 : inverse_fft (L);
(%o4) [4.0, 2.711L-19 %i + 4.0, 2.0 %i - 2.0,
- 2.828 %i - 2.828, 0.0, 5.421L-20 %i + 4.0, - 2.0 %i - 2.0,
2.828 %i + 2.828]
(%i5) L2 : fft (L1);
(%o5) [4.066E-20 %i + 1.0, 1.0 %i + 1.0, 1.0 - 1.0 %i,
1.55L-19 %i - 1.0, - 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
1.0 %i + 1.0, 1.0 - 7.368L-20 %i]
(%i6) lmax (abs (L2 - L));
(%o6)
6.841L-17

fft (x )

[Funcion]

Calcula la transformada r
apida compleja de Fourier.
x es una lista o array (declarado o no) que contiene los datos a transformar. El n
umero
de elementos debe ser una potencia de dos. Los elementos deben ser n
umeros literales
(enteros, racionales, de punto flotante o decimales grandes), constantes simbolicas,
expresiones del tipo a + b*%i, siendo a y b n
umeros literales, o constantes simbolicas.
La funci
on fft devuelve un nuevo objeto del mismo tipo que x, el cual no se ve
modificado. Los resultados se calculan siempre como decimales o expresiones a +
b*%i, siendo a y b decimales.
La transformada discreta de Fourier se define como se indica a continuacion. Si y es
el resultado de la transformada inversa, entonces para k entre 0 y n - 1 se tiene
y[k] = (1/n) sum(x[j] exp(+2 %i %pi j k / n), j, 0, n - 1)

Captulo 22: Metodos numericos

349

Si los datos x son reales, los coeficientes reales a y b se pueden calcular de manera
que
x[j] = sum(a[k]*cos(2*%pi*j*k/n)+b[k]*sin(2*%pi*j*k/n), k, 0, n/2)
con
a[0] = realpart (y[0])
b[0] = 0
y, para k entre 1 y n/2 - 1,
a[k] = realpart (y[k] + y[n - k])
b[k] = imagpart (y[n - k] - y[k])
y
a[n/2] = realpart (y[n/2])
b[n/2] = 0
Para utilizar esta funci
on ejec
utese antes load(fft).
Veanse tambien inverse_fft (transformada inversa), recttopolar y polartorect.
Ejemplos:
Datos reales.
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)

load (fft) $
fpprintprec : 4 $
L : [1, 2, 3, 4, -1, -2, -3, -4] $
L1 : fft (L);
[0.0, - 1.811 %i - .1036, 0.0, .6036 - .3107 %i, 0.0,
.3107 %i + .6036, 0.0, 1.811 %i - .1036]
(%i5) L2 : inverse_fft (L1);
(%o5) [1.0, 2.168L-19 %i + 2.0, 7.525L-20 %i + 3.0,
4.256L-19 %i + 4.0, - 1.0, - 2.168L-19 %i - 2.0,
- 7.525L-20 %i - 3.0, - 4.256L-19 %i - 4.0]
(%i6) lmax (abs (L2 - L));
(%o6)
3.545L-16
Datos complejos.
(%i1) load (fft) $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
(%i4) L1 : fft (L);
(%o4) [0.5, .3536 %i + .3536, - 0.25 %i - 0.25,
0.5 - 6.776L-21 %i, 0.0, - .3536 %i - .3536, 0.25 %i - 0.25,
0.5 - 3.388L-20 %i]
(%i5) L2 : inverse_fft (L1);
(%o5) [1.0 - 4.066E-20 %i, 1.0 %i + 1.0, 1.0 - 1.0 %i,
- 1.008L-19 %i - 1.0, 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
1.0 %i + 1.0, 1.947L-20 %i + 1.0]
(%i6) lmax (abs (L2 - L));
(%o6)
6.83L-17
Calculo de los coeficientes del seno y coseno.

350

Manual de Maxima

(%i1) load (fft) $


(%i2) fpprintprec : 4 $
(%i3) L : [1, 2, 3, 4, 5, 6, 7, 8] $
(%i4) n : length (L) $
(%i5) x : make_array (any, n) $
(%i6) fillarray (x, L) $
(%i7) y : fft (x) $
(%i8) a : make_array (any, n/2 + 1) $
(%i9) b : make_array (any, n/2 + 1) $
(%i10) a[0] : realpart (y[0]) $
(%i11) b[0] : 0 $
(%i12) for k : 1 thru n/2 - 1 do
(a[k] : realpart (y[k] + y[n - k]),
b[k] : imagpart (y[n - k] - y[k]));
(%o12)
done
(%i13) a[n/2] : y[n/2] $
(%i14) b[n/2] : 0 $
(%i15) listarray (a);
(%o15)
[4.5, - 1.0, - 1.0, - 1.0, - 0.5]
(%i16) listarray (b);
(%o16)
[0, - 2.414, - 1.0, - .4142, 0]
(%i17) f(j) := sum (a[k] * cos (2*%pi*j*k / n) + b[k] * sin (2*%pi*j*k / n), k, 0,
(%i18) makelist (float (f (j)), j, 0, n - 1);
(%o18)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]

22.2 Funciones para la resoluci


on num
erica de ecuaciones
horner (expr, x )
horner (expr )

[Funcion]
[Funcion]
Cambia el formato de expr seg
un la regla de Horner utilizando x como variable
principal, si esta se especifica. El argumento x se puede omitir, en cuyo caso se
considerar
a como variable principal la de expr en su formato racional canonico (CRE).
La funci
on horner puede mejorar las estabilidad si expr va a ser numericamente
evaluada. Tambien es u
til si Maxima se utiliza para generar programas que seran
ejecutados en Fortran. Vease tambien stringout.
(%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155;
2
(%o1)
1.0E-155 x - 5.5 x + 5.2E+155
(%i2) expr2: horner (%, x), keepfloat: true;
(%o2)
(1.0E-155 x - 5.5) x + 5.2E+155
(%i3) ev (expr, x=1e155);
Maxima encountered a Lisp error:
floating point overflow
Automatically continuing.

Captulo 22: Metodos numericos

351

To reenable the Lisp debugger set *debugger-hook* to nil.


(%i4) ev (expr2, x=1e155);
(%o4)
7.0E+154

find_root (expr, x, a, b, [abserr, relerr ])


find_root (f, a, b, [abserr, relerr ])
bf_find_root (expr, x, a, b, [abserr, relerr ])
bf_find_root (f, a, b, [abserr, relerr ])
find_root_error
find_root_abs
find_root_rel

[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Variable opcional]
[Variable opcional]
[Variable opcional]
Calcula una raz de la expresion expr o de la funcion f en el intervalo cerrado [a, b].
La expresi
on expr puede ser una ecuacion, en cuyo caso find_root busca una raz
de lhs(expr ) - rhs(expr ).
Dado que Maxima puede evaluar expr o f en [a, b], entonces, si expr o f es continua,
find_root encuentrar
a la raz buscada, o races, en caso de existir varias.
La funci
on find_root aplica al principio la b
usqueda por biparticion. Si la expresion
es lo suficientemente suave, entonces find_root aplicara el metodo de interpolacion
lineal.
bf_find_root es una versi
on de find_root para n
umeros reales de precision arbitraria (bigfloat). La funci
on se eval
ua utilizando la aritmetica de estos n
umeros,
devolviendo un resultado numerico de este tipo. En cualquier otro aspecto, bf_find_
root es identica a find_root, siendo la explicacion que sigue igualmente valida para
bf_find_root.
La precisi
on de find_root esta controlada por abserr y relerr, que son claves opcionales para find_root. Estas claves toman la forma key=val. Las claves disponibles
son:
abserr

Error absoluto deseado de la funcion en la raz. El valor por defecto es


find_root_abs.

relerr

Error relativo deseado de la raz. El valor por defecto es find_root_rel.

find_root se detiene cuando la funcion alcanza un valor menor o igual que abserr, o
si las sucesivas aproximaciones x 0, x 1 difieren en no mas que relerr * max(abs(x_
0), abs(x_1)). Los valores por defecto de find_root_abs y find_root_rel son
ambos cero.
find_root espera que la funcion en cuestion tenga signos diferentes en los extremos
del intervalo. Si la funci
on toma valores numericos en ambos extremos y estos n
umeros
son del mismo signo, entonces el comportamiento de find_root se controla con find_
root_error. Cuando find_root_error vale true, find_root devuelve un mensaje
de error; en caso contrario, find_root devuelve el valor de find_root_error. El
valor por defecto de find_root_error es true.
Si en alg
un momento del proceso de b
usqueda f alcanza un valor no numerico, find_
root devuelve una expresi
on parcialmente evaluada.
Se ignora el orden de a y b; la region de b
usqueda es [min(a, b), max(a, b)].
Ejemplos:

352

Manual de Maxima

(%i1) f(x) := sin(x) - x/2;


x
f(x) := sin(x) - 2
(%i2) find_root (sin(x) - x/2, x, 0.1, %pi);
(%o2)
1.895494267033981
(%i3) find_root (sin(x) = x/2, x, 0.1, %pi);
(%o3)
1.895494267033981
(%i4) find_root (f(x), x, 0.1, %pi);
(%o4)
1.895494267033981
(%i5) find_root (f, 0.1, %pi);
(%o5)
1.895494267033981
(%i6) find_root (exp(x) = y, x, 0, 100);
x
(%o6)
find_root(%e = y, x, 0.0, 100.0)
(%i7) find_root (exp(x) = y, x, 0, 100), y = 10;
(%o7)
2.302585092994046
(%i8) log (10.0);
(%o8)
2.302585092994046
(%i9) fpprec:32;
(%o9)
32
(%i10) bf_find_root (exp(x) = y, x, 0, 100), y = 10;
(%o10)
2.3025850929940456840179914546844b0
(%i11) log(10b0);
(%o11)
2.3025850929940456840179914546844b0
(%o1)

newton (expr, x, x_0, eps )

[Funcion]
Devuelve una soluci
on aproximada de expr = 0 obtenida por el metodo de Newton,
considerando expr como una funcion de una variable, x. La b
usqueda comienza con x
= x_0 y contin
ua hasta que se verifique abs(expr ) < eps , donde expr se eval
ua con
el valor actual de x.
La funci
on newton permite que en expr haya variables no definidas, siempre y cuando
la condici
on de terminaci
on abs(expr ) < eps pueda reducirse a un valor logico true
o false; de este modo, no es necesario que expr tome un valor numerico.
Ejec
utese load(newton1) para cargar esta funcion.
Veanse tambien realroots, allroots, find_root y mnewton.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)

load (newton1);
/usr/share/maxima/5.10.0cvs/share/numeric/newton1.mac
newton (cos (u), u, 1, 1/100);
1.570675277161251
ev (cos (u), u = %);
1.2104963335033528E-4
assume (a > 0);
[a > 0]
newton (x^2 - a^2, x, a/2, a^2/100);

Captulo 22: Metodos numericos

353

(%o5)
1.00030487804878 a
(%i6) ev (x^2 - a^2, x = %);
(%o6)

2
6.098490481853958E-4 a

22.3 Introducci
on a la resoluci
on num
erica de ecuaciones
diferenciales
Las ecuaciones diferenciales ordinarias (EDO) que se resuelven con las funciones de esta
seccion deben tener la forma
dy
= F (x, y)
dx
la cual es una EDO de primer orden. Las ecuaciones diferenciales de orden n deben escribirse
como un sistema de n ecuaciones de primer orden del tipo anterior. Por ejemplo, una EDO
de segundo orden debe escribirse como un sistema de dos ecuaciones,
dx
= G(x, y, t)
dt

dy
= F (x, y, t)
dt

El primer argumento de las funciones debe ser una lista con las expresiones de los miembros derechos de las EDOs. Las variables cuyas derivadas se representan por las expresiones
anteriores deben darse en una segunda lista. En el caso antes citado, las variables son x y
y. La variable independiente, t en los mismos ejemplos anteriores, pueden darse mediante
una opci
on adicional. Si las expresiones dadas no dependen de esa variable independiente,
el sistema recibe el nombre de aut
onomo.

22.4 Funciones para la resoluci


on num
erica de ecuaciones
diferenciales
(dydx, ...options...)
[Funcion]
(dvdu, [u,v ], ...options...)
[Funcion]
([dxdt,dydt ], ...options...)
[Funcion]
([dudt,dvdt ], [u,v ], ...options...)
[Funcion]
Dibuja un campo de direcciones en dos dimensiones x y y.
dydx, dxdt y dydt son expresiones que dependen de x y y. Ademas de esas dos
variables, las dos expresiones pueden depender de un conjunto de parametros, con
valores numericos que son dados por medio de la opcion parameters (la sintaxis de
esa opci
on se explica mas al frente), o con un rango de posibles valores definidos con
la opci
on sliders.
Varias otras opciones se pueden incluir dentro del comando, o seleccionadas en el
men
u. Haciendo click en un punto del grafico se puede hacer que sea dibujada la
curva integral que pasa por ese punto; lo mismo puede ser hecho dando las coordenadas
del punto con la opci
on trajectory_at dentro del comando plotdf. La direccion de
integraci
on se puede controlar con la opcion direction, que acepta valores de forward,
backward ou both. El n
umero de pasos realizado en la integracion numerica se controla
con la opci
on nsteps y el incremento del tiempo en cada paso con la opcion tstep.
Se usa el metodo de Adams Moulton para hacer la integracion numerica; tambien es
posible cambiar para el metodo de Runge-Kutta de cuarto orden con ajuste de pasos.

plotdf
plotdf
plotdf
plotdf

354

Manual de Maxima

Men
u de la ventana del grafico:
El men
u de la ventana gr
afica dispone de las siguientes opciones: Zoom, que permite
cambiar el comportamiento del raton, de manera que hara posible el hacer zoom
en la regi
on del gr
afico haciendo clic con el boton izquierdo. Cada clic agranda la
imagen manteniendo como centro de la misma el punto sobre el cual se ha hecho
clic. Manteniendo pulsada la tecla SHIFT mientras se hace clic, retrocede al tama~
no
anterior. Para reanudar el c
alculo de las trayectorias cuando se hace clic, seleccine la
opci
on Integrate del men
u.
La opci
on Config del men
u se puede utilizar para cambiar la(s) EDO(S) y algunos
otros ajustes. Despues de hacer los cambios, se debe utilizar la opcion Replot para
activar los nuevos ajustes. Si en el campo Trajectory at del men
u de dialogo de
Config se introducen un par de coordenadas y luego se pulsa la tecla RETORNO, se
mostrar
a una nueva curva integral, ademas de las ya dibujadas. Si se selecciona la
opci
on Replot, s
olo se mostrara la u
ltima curva integral seleccionada.
Manteniendo pulsado el bot
on derecho del raton mientras se mueve el cursor, se puede
arrastrar el gr
afico horizontal y verticalmente. Otros parametros, como pueden ser el
n
umero de pasos, el valor inicial de t, las coordenadas del centro y el radio, pueden
cambiarse en el submen
u de la opcion Config.
Con la opci
on Save, se puede obtener una copia del grafico en una impresora Postscript
o guardarlo en un fichero Postscript. Para optar entre la impresion o guardar en
fichero, se debe seleccionar Print Options en la ventana de dialogo de Config. Una
vez cubiertos los campos de la ventana de dialogo de Save, sera necesario seleccionar
la opci
on Save del primer men
u para crear el fichero o imprimir el grafico.
Opciones graficas:
La funci
on plotdf admite varias opciones, cada una de las cuales es una lista de dos o
mas elementos. El primer elemento es el nombre de la opcion, y el resto esta formado
por el valor o valores asignados a dicha opcion.
La funci
on plotdf reconoce las siguientes opciones:
tstep establece la amplitud de los incrementos en la variable independiente t,
utilizados para calcular la curva integral. Si se aporta solo una expresion dydx,
la variable x ser
a directamente proporcional a t. El valor por defecto es 0.1.
nsteps establece el n
umero de pasos de longitud tstep que se utilizaran en la
variable independiente para calcular la curva integral. El valor por defecto es
100.
direction establece la direccion de la variable independiente que sera seguida para
calcular una curva integral. Valores posibles son: forward, para hacer que la
variable independiente aumente nsteps veces, con incrementos tstep; backward,
para hacer que la variable independiente disminuya; both, para extender la curva
integral nsteps pasos hacia adelante y nsteps pasos hacia atras. Las palabras
right y left se pueden utilizar como sinonimos de forward y backward. El
valor por defecto es both.
tinitial establece el valor inicial de la variable t utilizado para calcular curvas
integrales. Puesto que las ecuaciones diferenciales son autonomas, esta opcion
s
olo aparecer
a en los gr
aficos de las curvas como funciones de t. El valor por
defecto es 0.

Captulo 22: Metodos numericos

355

versus t se utiliza para crear una segunda ventana grafica, con el grafico de una
curva integral, como dos funciones x, y, de variable independiente t. Si se le da a
versus_t cualquier valor diferente de 0, se mostrara la segunda ventana grafica,
la cual incluye otro men
u, similar al de la ventana principal. El valor por defecto
es 0.
trajectory at establece las coordenadas xinitial y yinitial para el extremo inicial
de la curva integral. No tiene asignado valor por defecto.
parameters establece una lista de parametros, junto con sus valores numericos,
que son utilizados en la definicion de la ecuacion diferencial. Los nombres de
los par
ametros y sus valores deben escribirse en formato de cadena de caracteres
como una secuencia de pares nombre=valor separados por comas.
sliders establece una lista de parametros que se cambiaran interactivamente utilizando barras de deslizamiento, as como los rangos de variacion de dichos
par
ametros. Los nombres de los parametros y sus rangos deben escribirse en
formato de cadena de caracteres como una secuencia de pares nombre=min:max
separados por comas.
xfun establece una cadena de caracteres con funciones de x separadas por puntos
y comas para ser representadas por encima del campo de direcciones. Estas
funciones ser
an interpretadas por Tcl, no por Maxima.
xradius es la mitad de la longitud del rango de valores a representar en la direccion
x. El valor por defecto es 10.
yradius es la mitad de la longitud del rango de valores a representar en la direccion
y. El valor por defecto es 10.
xcenter es la coordenada x del punto situado en el centro del grafico. El valor
por defecto es 0.
ycenter es la coordenada y del punto situado en el centro del grafico. El valor
por defecto es 0.
width establece el ancho de la ventana grafica en pxeles. El valor por defecto es
500.
height establece la altura de la ventana grafica en pxeles. El valor por defecto
es 500.
Ejemplos:
NOTA: Dependiendo de la interface que se use para Maxima, las funciones que usan
openmath, incluida plotdf, pueden desencadenar un fallo si terminan en punto y
coma, en vez del smbolo de dolar. Para evitar problemas, se usara el smbolo de
dolar en todos ejemplos.
Para mostrar el campo de direcciones de la ecuacion diferencial y 0 = exp(x) + y
y la soluci
on que pasa por (2, 0.1):
(%i1) load("plotdf")$

356

Manual de Maxima

(%i2) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);
y

10

-5

-10
-10

-5

10

Para mostrar el campo de direcciones de la ecuacion dif f (y, x) = x y 2 y la


soluci
on de condici
on inicial y(1) = 3, se puede utilizar la sentencia:
(%i3) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
[trajectory_at,-1,3], [direction,forward],
[yradius,5],[xcenter,6]);
El gr
afico tambien muestra la funcion y = sqrt(x).
y

5
sqrt(x)
-sqrt(x)

2.5

-2.5

-5

10

15

El siguiente ejemplo muestra el campo de direcciones de un oscilador armonico,


definido por las ecuaciones dx/dt = y y dy/dt = k x/m, y la curva integral que
pasa por (x, y) = (6, 0), con una barra de deslizamiento que permitira cambiar
el valor de m interactivamente (k permanece fijo a 2):

Captulo 22: Metodos numericos

357

(%i4) plotdf([y,-k*x/m],[parameters,"m=2,k=2"],
[sliders,"m=1:5"], [trajectory_at,6,0]);
v
10

-5

-10
-8

-4

z
m: 2.00

Para representar el campo de direcciones de la ecuacion de Duffing, m x00 + c


x0 + k x + b x3 = 0, se introduce la variable y = x0 y se hace:
(%i5) plotdf([y,-(k*x + c*y + b*x^3)/m],
[parameters,"k=-1,m=1.0,c=0,b=1"],
[sliders,"k=-2:2,m=-1:1"],[tstep,0.1]);
y

10

-5

-10

-8

-4

x
k:

-1.00

m: 1.00

358

Manual de Maxima

El campo de direcciones de un pendulo amortiguado, incluyendo la solucion para


condiciones iniciales dadas, con una barra de deslizamiento que se puede utilizar
para cambiar el valor de la masa, m, y con el grafico de las dos variables de
estado como funciones del tiempo:
(%i6) 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]);
w
12

-4

-8

-12
-10

-8

-6

-4

-2

1.6

a
m: 0.297

12

a
w

-4

-8

-12
0.4

0.8

1.2

Captulo 22: Metodos numericos

359

ploteq (exp, ...options...)

[Funcion]
Dibuja curvas equipotenciales para exp, que debe ser una expresion dependiente de
dos variables. Las curvas se obtienen integrando la ecuacion diferencial que define
las trayectorias ortogonales a las soluciones del sistema autonomo que se obtiene del
gradiente de la expresi
on dada. El dibujo tambien puede mostrar las curvas integrales
de ese sistema de gradientes (opcion fieldlines).
Este programa tambien necesita Xmaxima, incluso si se ejecuta Maxima desde una
consola, pues el dibujo se creara por el codigo Tk de Xmaxima. Por defecto, la region
dibujada estar
a vaca hasta que el usuario haga clic en un punto, de sus coordenadas
a traves del men
u o mediante la opcion trajectory_at.
La mayor parte de opciones aceptadas por plotdf se pueden utilizar tambien con
ploteq y el aspecto del interfaz es el mismo que el descrito para plotdf.
Ejemplo:
(%i1) V: 900/((x+1)^2+y^2)^(1/2)-900/((x-1)^2+y^2)^(1/2)$
(%i2) ploteq(V,[x,-2,2],[y,-2,2],[fieldlines,"blue"])$
Haciendo clic sobre un punto se dibujara la curva equipotencial que pasa por ese
punto (en rojo) y la trayectoria ortogonal (en azul).

rk (ODE, var, initial, dominio )


rk ([ODE1,...,ODEm ], [v1,...,vm ], [init1,...,initm ], dominio )

[Funcion]
[Funcion]
La primera forma se usa para resolver numericamente una ecuacion diferencial ordinaria de primer orden (EDO), y la segunda forma resuelve numericamente un sistema de m de esas ecuaciones, usando el metodo de Runge-Kutta de cuarto orden.
var representa la variable dependiente. EDO debe ser una expresion que dependa
u
nicamente de las variables independiente y dependente, y define la derivada de la
variable dependiente en funcion de la variable independiente.
La variable independiente se representa con dominio, que debe ser una lista con cuatro
elementos, como por ejemplo:
[t, 0, 10, 0.1]
el primer elemento de la lista identifica la variable independiente, el segundo y tercer
elementos son los valores inicial y final para esa variable, y el u
ltimo elemento da el
valor de los incrementos que deberan ser usados dentro de ese intervalo.
Si se van a resolver m ecuaciones, debera haber m variables dependientes v1, v2, ...,
vm. Los valores iniciales para esas variables seran inic1, inic2, ..., inicm. Continuar
a
existiendo apenas una variable independiente definida por la lista domain, como en
el caso anterior. EDO1, ..., EDOm son las expresiones que definen las derivadas
de cada una de las variables dependientes en funcion de la variable independiente.
Las u
nicas variables que pueden aparecer en cada una de esas expresiones son la
variable independiente y cualquiera de las variables dependientes. Es importante que
las derivadas EDO1, ..., EDOm sean colocadas en la lista en el mismo orden en que
fueron agrupadas las variables dependientes; por ejemplo, el tercer elemento de la
lista ser
a interpretado como la derivada de la tercera variable dependiente.
El programa intenta integrar las ecuaciones desde el valor inicial de la variable independiente, hasta el valor final, usando incrementos fijos. Si en alg
un paso una de
las variables dependientes toma un valor absoluto muy grande, la integracion ser
a

360

Manual de Maxima

suspendida en ese punto. El resultado sera una lista con un n


umero de elementos
igual al n
umero de iteraciones realizadas. Cada elemento en la lista de resultados es
tambien una lista con m+1 elementos: el valor de la variable independiente, seguido
de los valores de las variables dependientes correspondientes a ese punto.


Captulo 23: Matrices y Algebra
Lineal

361

Lineal
23 Matrices y Algebra
23.1 Introducci
on a las matrices y el
algebra lineal
23.1.1 Operador punto
El operador . realiza la multiplicacion matricial y el producto escalar. Cuando los operandos
son dos matrices columna o matrices fila a y b, la expresion a.b es equivalente a sum
(a[i]*b[i], i, 1, length(a)). Si a y b no son complejos, estamos en el caso del producto
escalar. En caso de ser a y b vectores en el campo complejo, el producto escalar se define
como conjugate(a).b; la funci
on innerproduct del paquete eigen realiza el producto
escalar complejo.
Cuando los operandos son matrices de ndole mas general, el resultado que se obtiene
es el producto matricial de a por b. El n
umero de filas de b debe ser igual al n
umero de
columnas de a, y el resultado tiene un n
umero de filas igual al de a y un n
umero de columnas
igual al de b.
Al objeto de distinguir . como operador aritmetico del punto decimal de la notacion
en coma flotante, puede ser necesario dejar espacios a ambos lados. Por ejemplo, 5.e3 es
5000.0 pero 5 . e3 es 5 por e3.
Hay algunas variables globales que controlan la simplificacion de expresiones que
contengan al operador ., a saber, dot, dot0nscsimp, dot0simp, dot1simp, dotassoc,
dotconstrules, dotdistrib, dotexptsimp, dotident, y dotscrules.

23.1.2 Vectores
El paquete vect define funciones para analisis vectorial. Para cargar el paquete en memoria
se debe hacer load ("vect") y con demo ("vect") se presenta una demostracion sobre las
funciones del paquete.
El paquete de an
alisis vectorial puede combinar y simplificar expresiones simbolicas que
incluyan productos escalares y vectoriales, junto con los operadores de gradiente, divergencia, rotacional y laplaciano. La distribucion de estos operadores sobre sumas o productos
se gobierna por ciertas variables, al igual que otras transformaciones, incluida la expansion
en componentes en cualquier sistema de coordenadas especificado. Tambien hay funciones
para obtener el potencial escalar o vectorial de un campo.
El paquete vect contiene las siguientes funciones: vectorsimp, scalefactors, express,
potential y vectorpotential.
Por defecto, el paquete vect no declara el operador . como conmutativo. Para
transformarlo en conmutativo, se debe ejecutar previamente la instruccion declare(".",
commutative).

23.1.3 Paquete eigen


El paquete eigen contiene funciones para el calculo simbolico de valores y vectores propios.
Maxima carga el paquete autom
aticamente si se hace una llamada a cualquiera de las dos
funciones eigenvalues o eigenvectors. El paquete se puede cargar de forma explcita
mediante load ("eigen").

362

Manual de Maxima

La instrucci
on demo ("eigen") hace una demostracion de las funciones de este paquete;
batch ("eigen") realiza la misma demostracion pero sin pausas entre los sucesivos calculos.
Las funciones del paquete eigen son innerproduct, unitvector, columnvector,
gramschmidt, eigenvalues, eigenvectors, uniteigenvectors y similaritytransform.

23.2 Funciones y variables para las matrices y el


algebra
lineal
addcol (M, lista_1, ..., lista_n )

[Funcion]

A~
nade la/s columna/s dada/s por la/s lista/s (o matrices) a la matriz M.

addrow (M, lista_1, ..., lista_n )

[Funcion]

A~
nade la/s fila/s dada/s por la/s lista/s (o matrices) a la matriz M.

adjoint (M )

[Funcion]
Devuelve el adjunto de la matriz M. La matriz adjunta es la transpuesta de la matriz
de cofactores de M.

augcoefmatrix ([eqn_1, ..., eqn_m ], [x_1, ..., x_n ])

[Funcion]
Devuelve la matriz aumentada de coeficientes del sistema de ecuaciones lineales eqn 1,
..., eqn m de variables x 1, ..., x n. Se trata de la matriz de coeficientes con una
columna adicional para los terminos constantes de cada ecuacion, es decir, aquellos
terminos que no dependen de las variables x 1, ..., x n.
(%i1) m: [2*x - (a - 1)*y = 5*b, c + b*y + a*x = 0]$
(%i2) augcoefmatrix (m, [x, y]);
[ 2 1 - a - 5 b ]
(%o2)
[
]
[ a
b
c
]

cauchy_matrix ([x_1,x_2, ..., x_m ], [y_1,y_2, ..., y_n ])


cauchy_matrix ([x_1,x_2, ..., x_n ])

[Funcion]
[Funcion]
Devuelve una matriz de Cauchy n by m de elementos a[i,j] = 1/(x i+y i). El segundo
elemento de cauchy_matrix es opcional, y en caso de no estar presente, los elementos
ser
an de la forma a[i,j] = 1/(x i+x j).
Observaci
on: en la literatura, la matriz de Cauchy se define a veces con sus elementos
de la forma a[i,j] = 1/(x i-y i).
Ejemplos:
(%i1) cauchy_matrix([x1,x2],[y1,y2]);
[
1
1
]
[ ------- ------- ]
[ y1 + x1 y2 + x1 ]
(%o1)
[
]
[
1
1
]
[ ------- ------- ]
[ y1 + x2 y2 + x2 ]
(%i2) cauchy_matrix([x1,x2]);


Captulo 23: Matrices y Algebra
Lineal

(%o2)

[
1
[ ---[ 2 x1
[
[
1
[ ------[ x2 + x1

363

1
]
------- ]
x2 + x1 ]
]
1
]
---]
2 x2
]

charpoly (M, x )

[Funcion]
Calcula el polinomio caracterstico de la matriz M respecto de la variable x. Esto es,
determinant (M - diagmatrix (length (M ), x )).
(%i1) a: matrix ([3, 1], [2, 4]);
[ 3 1 ]
(%o1)
[
]
[ 2 4 ]
(%i2) expand (charpoly (a, lambda));
2
(%o2)
lambda - 7 lambda + 10
(%i3) (programmode: true, solve (%));
(%o3)
[lambda = 5, lambda = 2]
(%i4) matrix ([x1], [x2]);
[ x1 ]
(%o4)
[
]
[ x2 ]
(%i5) ev (a . % - lambda*%, %th(2)[1]);
[ x2 - 2 x1 ]
(%o5)
[
]
[ 2 x1 - x2 ]
(%i6) %[1, 1] = 0;
(%o6)
x2 - 2 x1 = 0
(%i7) x2^2 + x1^2 = 1;
2
2
(%o7)
x2 + x1 = 1
(%i8) solve ([%th(2), %], [x1, x2]);
1
2
(%o8) [[x1 = - -------, x2 = - -------],
sqrt(5)
sqrt(5)
1
2
[x1 = -------, x2 = -------]]
sqrt(5)
sqrt(5)

coefmatrix ([eqn_1, ..., eqn_m ], [x_1, ..., x_n ])

[Funcion]
Devuelve la matriz de coeficientes para las variables x 1, ..., x n del sistema de ecuaciones lineales eqn 1, ..., eqn m.
(%i1) coefmatrix([2*x-(a-1)*y+5*b = 0, b*y+a*x = 3], [x,y]);
[ 2 1 - a ]

364

Manual de Maxima

(%o1)

[
[ a

]
]

col (M, i )

[Funcion]
Devuelve la i-esima columna de la matriz M. El resultado es una matriz de una sola
columna.

columnvector (L )
covect (L )

[Funcion]
[Funcion]
Devuelve una matriz con una columna y length (L ) filas, conteniendo los elementos
de la lista L.
La llamada covect es un sin
onimo de columnvector.
Es necesario cargar la funci
on haciendo load ("eigen").
Ejemplo:
(%i1) load ("eigen")$
Warning - you are redefining the Macsyma function eigenvalues
Warning - you are redefining the Macsyma function eigenvectors
(%i2) columnvector ([aa, bb, cc, dd]);
[ aa ]
[
]
[ bb ]
(%o2)
[
]
[ cc ]
[
]
[ dd ]

copymatrix (M )

[Funcion]
Devuelve una copia de la matriz M. Esta es la u
nica manera de obtener una replica
de M adem
as de la de copiar elemento a elemento.
Notese que una asignaci
on de una matriz a otra, como en m2: m1, no hace una copia
de m1. Asignaciones del tipo m2 [i,j]: x o setelmx (x, i, j, m2 tambien modifica
m1 [i,j]. Si se crea una copia con copymatrix y luego se hacen asignaciones se
tendr
a una copia separada y modificada.

determinant (M )

[Funcion]
Calcula el determinante de M por un metodo similar al de eliminacion de Gauss

La forma del resultado depende del valor asignado a ratmx.


Existe una rutina especial para calcular determinantes de matrices con elementos
dispersas, la cual ser
a invocada cuando las variables ratmx y sparse valgan ambas
true.

detout

[Variable opcional]

Valor por defecto: false


Cuando detout vale true, el determinante de la matriz cuya inversa se calcula aparece
como un factor fuera de la matriz.


Captulo 23: Matrices y Algebra
Lineal

365

Para que esta variable surta efecto, doallmxops y doscmxops deberan tener el valor
false (veanse sus descripciones). Alternativamente, esta variable puede ser suministrada a ev.
Ejemplo:
(%i1) m: matrix ([a, b], [c, d]);
[ a b ]
(%o1)
[
]
[ c d ]
(%i2) detout: true$
(%i3) doallmxops: false$
(%i4) doscmxops: false$
(%i5) invert (m);
[ d
- b ]
[
]
[ - c
a ]
(%o5)
-----------a d - b c

diagmatrix (n, x )

[Funcion]
Devuelve una matriz diagonal de orden n con los elementos de la diagonal todos ellos
iguales a x. La llamada diagmatrix (n, 1) devuelve una matriz identidad (igual que
ident (n )).
La variable n debe ser un n
umero entero, en caso contrario diagmatrix enva un
mensaje de error.
x puede ser cualquier tipo de expresion, incluso otra matriz. Si x es una matriz, no
se copia; todos los elementos de la diagonal son iguales a x.

[Variable opcional]
Valor por defecto: true
Cuando doallmxops vale true, todas las operaciones relacionadas con matrices son
llevadas a cabo. Cuando es false, entonces las selecciones para dot controlan las
operaciones a ejecutar.

doallmxops

domxexpt

[Variable opcional]

Valor por defecto: true


Cuando domxexpt vale true, un exponente matricial, como exp (M ) donde M es una
matriz, se interpreta como una matriz cuyo elemento [i,j es igual a exp (m[i,j]).
En otro caso, exp (M ) se eval
ua como exp (ev(M )).
La variable domxexpt afecta a todas las expresiones de la forma base ^exponente
donde base es una expresi
on escalar o constante y exponente es una lista o matriz.
Ejemplo:
(%i1) m: matrix ([1, %i], [a+b, %pi]);
[
1
%i ]
(%o1)
[
]
[ b + a %pi ]
(%i2) domxexpt: false$

366

Manual de Maxima

(%i3) (1 - c)^m;
[
1
[
[ b + a
(1 - c)

(%o3)
(%i4) domxexpt: true$
(%i5) (1 - c)^m;
[
[
1 - c
(%o5)
[
[
b + a
[ (1 - c)

%i

]
]
%pi ]

%i
(1 - c)

]
]
]
%pi ]
(1 - c)
]

domxmxops

[Variable opcional]

Valor por defecto: true


Cuando domxmxops vale true, se realizan todas las operaciones entre matrices o entre
matrices y listas (pero no las operaciones entre matrices y escalares); si esta variable
es false tales operaciones no se realizan.

domxnctimes

[Variable opcional]

Valor por defecto: false


Cuando domxnctimes vale true, se calculan los productos no conmutativos entre
matrices.

dontfactor

[Variable opcional]

Valor por defecto: []


En dontfactor puede guardarse una lista de variables respecto de las cuales no se
realizar
an factorizaciones. Inicialmente, la lista esta vaca.

doscmxops

[Variable opcional]

Valor por defecto: false


Cuando doscmxops vale true, se realizan las operaciones entre escalares y matrices.

doscmxplus

[Variable opcional]

Valor por defecto: false


Cuando doscmxplus vale true, las operaciones entre escalares y matrices dan como
resultado una matriz.

dot0nscsimp

[Variable opcional]

Valor por defecto: true


(Esta descripci
on no est
a clara en la version inglesa original.)

dotassoc

[Variable opcional]

Valor por defecto: true


Cuando dotassoc vale true, una expresion como (A.B).C se transforma en A.(B.C).


Captulo 23: Matrices y Algebra
Lineal

dotconstrules

367

[Variable opcional]

Valor por defecto: true


Cuando dotconstrules vale true, un producto no conmutativo de una constante con
otro termino se transforma en un producto conmutativo.

dotdistrib

[Variable opcional]

Valor por defecto: false


Cuando dotdistrib vale true, una expresion como A.(B + C) se transforma en A.B
+ A.C.

dotexptsimp

[Variable opcional]

Valor por defecto: true


Cuando dotexptsimp vale true, una expresion como A.A se transforma en A^^2.
[Variable opcional]
Valor por defecto: 1
El valor de la variable dotident es el resultado devuelto por X^^0.

dotident

[Variable opcional]
Valor por defecto: false
Cuando dotscrules vale true, una expresion como A.SC o SC.A se transforma en
SC*A y A.(SC*B) en SC*(A.B).

dotscrules

echelon (M )

[Funcion]
Devuelve la forma escalonada de la matriz M, obtenida por eliminacion gaussiana. La
forma escalonada se calcula a partir de M mediante operaciones elementales con sus
filas, de tal manera que el primer elemento no nulo de cada fila en la matriz resultado
es la unidad y que cada elemento de la columna por debajo del primer uno de cada
fila sean todos ceros.
La funci
on triangularize tambien lleva a cabo la eliminacion gaussiana, pero no
normaliza el primer elemento no nulo de cada fila.
Otras funciones, como lu_factor y cholesky, tambien dan como resultados matrices
triangularizadas.
(%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
[ 3
7 aa bb ]
[
]
(%o1)
[ - 1 8 5
2 ]
[
]
[ 9
2 11 4 ]
(%i2) echelon (M);
[ 1 - 8 - 5
- 2
]
[
]
[
28
11
]
[ 0
1
--]
(%o2)
[
37
37
]
[
]
[
37 bb - 119 ]

368

Manual de Maxima

[ 0
[

----------- ]
37 aa - 313 ]

eigenvalues (M )
eivals (M )

[Funcion]
[Funcion]
Devuelve una lista con dos sublistas. La primera sublista la forman los valores propios
de la matriz M y la segunda sus multiplicidades correspondientes.
El nombre eivals es un sin
onimo de eigenvalues.

La funci
on eigenvalues llama a la funcion solve para calcular las races del polinomio caracterstico de la matriz. En ocasiones, solve no podra encontrar dichas
races, en cuyo caso otras funciones de este paquete no trabajaran correctamente, a
excepci
on de innerproduct, unitvector, columnvector y gramschmidt.
En algunos casos los valores propios encontrados por solve seran expresiones complicadas, las cuales se podr
an simplificar haciendo uso de otras funciones.
El paquete eigen.mac se carga en memoria de forma automatica cuando se invocan
eigenvalues o eigenvectors. Si eigen.mac no esta ya cargado, load ("eigen") lo
carga. Tras la carga, todas las funciones y variables del paquete estaran activas.

eigenvectors (M )
eivects (M )

[Funcion]
[Funcion]
Calcula los vectores propios de la matriz M. El resultado devuelto es una lista con dos
elementos; el primero est
a formado por dos listas, la primera con los valores propios
de M y la segunda con sus respectivas multiplicidades, el segundo elemento es una
lista de listas de vectores propios, una por cada valor propio, pudiendo haber uno o
mas vectores propios en cada lista.

Tomando la matriz M como argumento, devuelve una lista de listas, la primera de las
cuales es la salida de eigenvalues y las siguientes son los vectorios propios de la matriz asociados a los valores propios correspondientes. Los vectores propios calculados
son los vectores propios por la derecha.
El nombre eivects es un sinonimo de eigenvectors.
El paquete eigen.mac se carga en memoria de forma automatica cuando se invocan
eigenvalues o eigenvectors. Si eigen.mac no esta ya cargado, load ("eigen") lo
carga. Tras la carga, todas las funciones y variables del paquete estaran activas.
Las variables que afectan a esta funcion son:
nondiagonalizable toma el valor true o false dependiendo de si la matriz no es
diagonalizable o diagonalizable tras la ejecucion de eigenvectors.
hermitianmatrix, si vale true, entonces los vectores propios degenerados de la matriz
hermtica son ortogonalizados mediante el algoritmo de Gram-Schmidt.
knowneigvals, si vale true, entonces el paquete eigen da por sentado que los valores
propios de la matriz son conocidos por el usuario y almacenados en la variable global
listeigvals. listeigvals debera ser similar a la salida de eigenvalues.
La funci
on algsys se utiliza aqu para calcular los vectores propios. A veces, algsys
no podr
a calcular una soluci
on. En algunos casos, sera posible simplificar los valores


Captulo 23: Matrices y Algebra
Lineal

369

propios calcul
andolos en primer lugar con eigenvalues y luego utilizando otras funciones para simplificarlos. Tras la simplificacion, eigenvectors podra ser llamada
otra vez con la variable knowneigvals ajustada al valor true.
Vease tambien eigenvalues.
Ejemplos:
Una matriz con un u
nico vector propio por cada valor propio.
(%i1) M1 : matrix ([11, -1], [1, 7]);
[ 11 - 1 ]
(%o1)
[
]
[ 1
7 ]
(%i2) [vals, vecs] : eigenvectors (M1);
(%o2) [[[9 - sqrt(3), sqrt(3) + 9], [1, 1]],
[[[1, sqrt(3) + 2]], [[1, 2 - sqrt(3)]]]]
(%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
mult[i] = vals[2][i], vec[i] = vecs[i]);
val = 9 - sqrt(3)
1
mult = 1
1
vec

= [[1, sqrt(3) + 2]]


1
val

= sqrt(3) + 9
2
mult = 1
2

vec

= [[1, 2 - sqrt(3)]]
2

(%o3)

done

Una matriz con dos vectores propios para uno de los valores propios.
(%i1) M1 : matrix ([0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]);
[ 0 1 0 0 ]
[
]
[ 0 0 0 0 ]
(%o1)
[
]
[ 0 0 2 0 ]
[
]
[ 0 0 0 2 ]
(%i2) [vals, vecs] : eigenvectors (M1);
(%o2) [[[0, 2], [2, 2]], [[[1, 0, 0, 0]],

370

Manual de Maxima

[[0, 0, 1, 0], [0, 0, 0, 1]]]]


(%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
mult[i] = vals[2][i], vec[i] = vecs[i]);
val = 0
1
mult = 2
1
vec = [[1, 0, 0, 0]]
1
val

= 2
2

mult = 2
2
vec

= [[0, 0, 1, 0], [0, 0, 0, 1]]


2

(%o3)

done

ematrix (m, n, x, i, j )

[Funcion]
Devuelve una matriz de orden m por n, con todos sus elementos nulos, excepto el que
ocupa la posici
on [i, j ], que es igual a x.

entermatrix (m, n )

[Funcion]
Devuelve una matriz de orden m por n, cuyos elementos son leidos de forma interactiva.
Si n es igual a m, Maxima pregunta por el tipo de matriz (diagonal, simetrica, antisimetrica o general) y luego por cada elemento. Cada respuesta introducida por el
usuario debe terminar con un punto y coma ; o con un signo de dolar $.
Si n y m no son iguales, Maxima pregunta por el valor de cada elemento.
Los elementos de la matriz pueden ser cualquier tipo de expresion, que en todo caso
ser
a evaluada. entermatrix eval
ua sus argumentos.
(%i1) n: 3$
(%i2) m: entermatrix (n, n)$
Is the matrix 1. Diagonal
4. General
Answer 1, 2, 3 or 4 :
1$
Row 1 Column 1:
(a+b)^n$
Row 2 Column 2:
(a+b)^(n+1)$

2. Symmetric

3. Antisymmetric


Captulo 23: Matrices y Algebra
Lineal

371

Row 3 Column 3:
(a+b)^(n+2)$
Matrix entered.
(%i3) m;

(%o3)

[
3
[ (b + a)
[
[
[
0
[
[
[
0

genmatrix (a, i_2, j_2, i_1, j_1 )


genmatrix (a, i_2, j_2, i_1 )
genmatrix (a, i_2, j_2 )

0
4
(b + a)

]
]
]
]
0
]
]
5 ]
(b + a) ]
0

[Funcion]
[Funcion]
[Funcion]
Devuelve una matriz generada a partir de a, siendo a [i_1,j_1 ] el elemento superior
izquierdo y a [i_2,j_2 ] el inferior derecho de la matriz. Aqu a se declara como
una arreglo (creado por array, pero no por make_array), o un array no declarado, o
una funci
on array, o una expresion lambda de dos argumentos. (An array function is
created like other functions with := or define, but arguments are enclosed in square
brackets instead of parentheses.)
Si se omite j 1, entonces se le asigna el valor i 1. Si tanto j 1 como i 1 se omiten, a
las dos variables se le asigna el valor 1.
Si un elemento i,j del arreglo no esta definido, se le asignara el elemento simbolico
a [i,j].
(%i1) h [i, j] := 1 / (i + j - 1);
1
(%o1)
h
:= --------i, j
i + j - 1
(%i2) genmatrix (h, 3, 3);
[
1 1 ]
[ 1 - - ]
[
2 3 ]
[
]
[ 1 1 1 ]
(%o2)
[ - - - ]
[ 2 3 4 ]
[
]
[ 1 1 1 ]
[ - - - ]
[ 3 4 5 ]
(%i3) array (a, fixnum, 2, 2);
(%o3)
a
(%i4) a [1, 1] : %e;
(%o4)
%e

372

Manual de Maxima

(%i5) a [2, 2] : %pi;


(%o5)
(%i6) genmatrix (a, 2, 2);

%pi

[ %e
0
(%o6)
[
[ 0
%pi
(%i7) genmatrix (lambda ([i, j], j [ 0
1
[
(%o7)
[ - 1
0
[
[ - 2 - 1
(%i8) genmatrix (B, 2, 2);
[ B
B
[ 1, 1
1,
(%o8)
[
[ B
B
[ 2, 1
2,

gramschmidt (x )
gramschmidt (x, F )

]
]
]
i), 3, 3);
2 ]
]
1 ]
]
0 ]
]
2 ]
]
]
2 ]

[Funcion]
[Funcion]
Ejecuta el algoritmo de ortogonalizacion de Gram-Schmidt sobre x, que puede ser
una matriz o una lista de listas. La funcion gramschmidt no altera el valor de x. El
producto interno por defecto empleado en gramschmidt es innerproduct, o F, si se
ha hecho uso de esta opci
on.
Si x es una matriz, el algoritmo se aplica a las filas de x. Si x es una lista de listas,
el algoritmo se aplica a las sublistas, las cuales deben tener el mismo n
umero de
miembros. En cualquier caso, el valor devuelto es una lista de listas, cuyas sublistas
son ortogonales.
La funci
on factor es invocada en cada paso del algoritmo para simplificar resultados
intermedios. Como consecuencia, el valor retornado puede contener enteros factorizados.
El nombre gschmit es sin
onimo de gramschmidt.
Es necesario cargar la funci
on haciendo load ("eigen").
Ejemplo:
Algoritmo de Gram-Schmidt utilizando el producto interno por defecto.
(%i1) load (eigen)$
(%i2) x: matrix ([1, 2, 3], [9, 18, 30], [12, 48, 60]);
[ 1
2
3 ]
[
]
(%o2)
[ 9
18 30 ]
[
]
[ 12 48 60 ]
(%i3) y: gramschmidt (x);
2
2
4
3
3
3
3 5
2 3 2 3


Captulo 23: Matrices y Algebra
Lineal

373

(%o3)

[[1, 2, 3], [- ---, - --, ---], [- ----, ----, 0]]


2 7
7
2 7
5
5
(%i4) map (innerproduct, [y[1], y[2], y[3]], [y[2], y[3], y[1]]);
(%o4)
[0, 0, 0]
Algoritmo de Gram-Schmidt utilizando un producto interno especificado por el
usuario.
(%i1) load (eigen)$
(%i2) ip (f, g) := integrate (f * g, u, a, b);
(%o2)
ip(f, g) := integrate(f g, u, a, b)
(%i3) y : gramschmidt ([1, sin(u), cos(u)], ip), a= -%pi/2, b=%pi/2;
%pi cos(u) - 2
(%o3)
[1, sin(u), --------------]
%pi
(%i4) map (ip, [y[1], y[2], y[3]], [y[2], y[3], y[1]]), a= -%pi/2, b=%pi/2;
(%o4)
[0, 0, 0]

ident (n )

[Funcion]

Devuelve la matriz identidad de orden n.

innerproduct (x, y )
inprod (x, y )

[Funcion]
[Funcion]
Devuelve el producto interior o escalar de x por y, que deben ser listas de igual
longitud, o ambas matrices columa o fila de igual longitud. El valor devuelto es
conjugate (x) . y, donde . es el operador de multiplicacion no conmutativa.
Es necesario cargar la funci
on haciendo load ("eigen").
El nombre inprod es sin
onimo de innerproduct.

invert (M )

[Funcion]

Devuelve la inversa de la matriz M, calculada por el metodo del adjunto.


La implementaci
on actual no es eficiente para matrices de orden grande.
Cuando detout vale true, el determinante se deja fuera de la inversa a modo de
factor escalar.
Los elementos de la matriz inversa no se expanden. Si M tiene elementos polinomicos,
se puede mejorar el aspecto del resultado haciendo expand (invert (m)), detout.
Vease la descripci
on de ^^ (exponente no conmutativo) para informacion sobre otro
metodo para invertir matrices.

list_matrix_entries (M )

[Funcion]

Devuelve una lista con todos los elementos de la matriz M.


Ejemplo:
(%i1) list_matrix_entries(matrix([a,b],[c,d]));
(%o1)
[a, b, c, d]

lmxchar
Valor por defecto: [

[Variable opcional]

374

Manual de Maxima

La variable lmxchar guarda el caracter a mostrar como delimitador izquierdo de la


matriz. Vease tambien rmxchar.
Ejemplo:
(%i1) lmxchar: "|"$
(%i2) matrix ([a, b, c], [d,
|
|
(%o2)
|
|
|

e, f], [g, h, i]);


a b c ]
]
d e f ]
]
g h i ]

matrix (fila_1, ..., fila_n )

[Funcion]
Devuelve una matriz rectangular con las filas fila 1, ..., fila n. Cada fila es una lista
de expresiones. Todas las filas deben tener el mismo n
umero de miembros.
Las operaciones + (suma), - (resta), * (multiplicacion) y / (division), se llevan a cabo
elemento a elemento cuando los operandos son dos matrices, un escalar y una matriz
o una matriz con un escalar. La operacion ^ (exponenciacion, equivalente a **) se
lleva cabo tambien elemento a elemento si los operandos son un escalr y una matriz
o uma matriz y un escalar, pero no si los operandos son dos matrices.
El producto matricial se representa con el operador de multiplicacion no conmutativa
.. El correspondiente operador de exponenciacion no conmutativa es ^^. Dada la
matriz A , A.A = A ^^2 y A ^^-1 es la inversa de A, si existe.
Algunas variables controlan la simplificacion de expresiones que incluyan estas operaciones: doallmxops, domxexpt, domxmxops, doscmxops y doscmxplus.
Hay otras opciones adicionales relacionadas con matrices: lmxchar, rmxchar, ratmx,
listarith, detout, scalarmatrix y sparse.
Hay tambien algunas funciones que admiten matrices como argumentos o que devuelven resultados matriciales: eigenvalues, eigenvectors, determinant, charpoly,
genmatrix, addcol, addrow, copymatrix, transpose, echelon y rank.
Ejemplos:
Construcci
on de matrices a partir de listas.
(%i1) x: matrix ([17, 3], [-8, 11]);
[ 17
3
(%o1)
[
[ - 8 11
(%i2) y: matrix ([%pi, %e], [a, b]);
[ %pi %e
(%o2)
[
[ a
b

]
]
]
]
]
]

Suma elemento a elemento.


(%i3) x + y;
(%o3)

[ %pi + 17
[
[ a - 8

%e + 3 ]
]
b + 11 ]


Captulo 23: Matrices y Algebra
Lineal

375

Resta elemento a elemento.


(%i4) x - y;
[ 17 - %pi 3 - %e ]
[
]
[ - a - 8
11 - b ]
Multiplicaci
on elemento a elemento.
(%i5) x * y;
[ 17 %pi 3 %e ]
(%o5)
[
]
[ - 8 a
11 b ]
Divisi
on elemento a elemento.
(%i6) x / y;
[ 17
- 1 ]
[ --- 3 %e
]
[ %pi
]
(%o6)
[
]
[
8
11
]
[ - -]
[
a
b
]
Matriz elevada a un exponente escalar, operacion elemento a elemento.
(%i7) x ^ 3;
[ 4913
27 ]
(%o7)
[
]
[ - 512 1331 ]
Base escalar y exponente matricial, operacion elemento a elemento.
(%i8) exp(y);
[
%pi
%e ]
[ %e
%e
]
(%o8)
[
]
[
a
b ]
[ %e
%e
]
Base y exponente matriciales. Esta operacion no se realiza elemento a elemento.
(%i9) x ^ y;
[ %pi %e ]
[
]
[ a
b ]
[ 17
3 ]
(%o9)
[
]
[ - 8 11 ]
Multiplicaci
on matricial no conmutativa.
(%i10) x . y;
[ 3 a + 17 %pi 3 b + 17 %e ]
(%o10)
[
]
[ 11 a - 8 %pi 11 b - 8 %e ]
(%o4)

376

Manual de Maxima

(%i11) y . x;
(%o11)

[ 17 %pi - 8 %e
[
[ 17 a - 8 b

3 %pi + 11 %e ]
]
11 b + 3 a
]

Exponenciaci
on matricial no conmutativa. Una base escalar b elevada a un exponente matricial M se lleva a cabo elemento a elemento y por lo tanto b^^m
equivale a b^m.
(%i12) x ^^ 3;
(%o12)

[ 3833
[
[ - 4584

1719 ]
]
395 ]

[
%pi
[ %e
[
[
a
[ %e

%e ]
%e
]
]
b ]
%e
]

(%i13) %e ^^ y;

(%o13)

Una matriz elevada al exponente -1 con el operador de exponenciacion no conmutativa equivale a la matriz inversa, si existe.
(%i14) x ^^ -1;

(%o14)

[
[
[
[
[
[
[

11
--211
8
--211

3 ]
- --- ]
211 ]
]
17
]
--- ]
211 ]

(%i15) x . (x ^^ -1);
(%o15)

[ 1
[
[ 0

0 ]
]
1 ]

matrixmap (f, M )

[Funcion]

Devuelve una matriz con el elemento i,j igual a f (M [i,j]).


Veanse tambien map, fullmap, fullmapl y apply.

matrixp (expr )

[Funcion]

Devuelve true si expr es una matriz, en caso contrario false.

matrix_element_add

[Variable opcional]

Valor por defecto: +


La variable matrix_element_add guarda el smbolo del operador a ejecutar en lugar de la suma en el producto matricial; a matrix_element_add se le puede asignar
cualquier operador n-ario (esto es, una funcion que admite cualquier n
umero de argumentos). El valor asignado puede ser el nombre de un operador encerrado entre
ap
ostrofos, el nombre de una funcion o una expresion lambda.


Captulo 23: Matrices y Algebra
Lineal

377

Veanse tambien matrix_element_mult y matrix_element_transpose.


Ejemplo:
(%i1) matrix_element_add: "*"$
(%i2) matrix_element_mult: "^"$
(%i3) aa: matrix ([a, b, c], [d, e, f]);
[ a b c ]
(%o3)
[
]
[ d e f ]
(%i4) bb: matrix ([u, v, w], [x, y, z]);
[ u v w ]
(%o4)
[
]
[ x y z ]
(%i5) aa . transpose (bb);
[ u v w
x y z ]
[ a b c
a b c ]
(%o5)
[
]
[ u v w
x y z ]
[ d e f
d e f ]
[Variable opcional]
Valor por defecto: *
La variable matrix_element_mult guarda el smbolo del operador a ejecutar en lugar de la multiplicaci
on en el producto matricial; a matrix_element_mult se le puede
asignar cualquier operador binario. El valor asignado puede ser el nombre de un operador encerrado entre ap
ostrofos, el nombre de una funcion o una expresion lambda.
El operador . puede ser una opcion u
til en determinados contextos.
Veanse tambien matrix_element_add y matrix_element_transpose.
Ejemplo:
(%i1) matrix_element_add: lambda ([[x]], sqrt (apply ("+", x)))$
(%i2) matrix_element_mult: lambda ([x, y], (x - y)^2)$
(%i3) [a, b, c] . [x, y, z];
2
2
2
(%o3)
sqrt((c - z) + (b - y) + (a - x) )
(%i4) aa: matrix ([a, b, c], [d, e, f]);
[ a b c ]
(%o4)
[
]
[ d e f ]
(%i5) bb: matrix ([u, v, w], [x, y, z]);
[ u v w ]
(%o5)
[
]
[ x y z ]
(%i6) aa . transpose (bb);
[
2
2
2 ]
[ sqrt((c - w) + (b - v) + (a - u) ) ]
(%o6) Col 1 = [
]
[
2
2
2 ]

matrix_element_mult

378

Manual de Maxima

[ sqrt((f - w)

+ (e - v)

+ (d - u) ) ]

[
2
2
2
[ sqrt((c - z) + (b - y) + (a - x) )
Col 2 = [
[
2
2
2
[ sqrt((f - z) + (e - y) + (d - x) )

]
]
]
]
]

[Variable opcional]
Valor por defecto: false
La variable matrix_element_transpose es una operacion que se aplica a cada elemento de una matriz a la que se le calcula la transpuesta. A matrix_element_mult
se le puede asignar cualquier operador unitario. El valor asignado puede ser el nombre
de un operador encerrador entre apostrofos, el nombre de una funcion o una expresion
lambda.
Cuando matrix_element_transpose es igual a transpose, la funcion transpose se
aplica a cada elemento. Cuando matrix_element_transpose es igual a nonscalars,
la funci
on transpose se aplica a todos los elementos no escalares. Si alguno de los
elementos es un
atomo, la opcion nonscalars se aplica transpose solo si el atomo
se declara no escalar, mientras que la opcion transpose siempre aplica transpose.
La opci
on por defecto, false, significa que no se aplica ninguna operacion.
Veanse tambien matrix_element_add y matrix_element_mult.
Ejemplos:
(%i1) declare (a, nonscalar)$
(%i2) transpose ([a, b]);
[ transpose(a) ]
(%o2)
[
]
[
b
]
(%i3) matrix_element_transpose: nonscalars$
(%i4) transpose ([a, b]);
[ transpose(a) ]
(%o4)
[
]
[
b
]
(%i5) matrix_element_transpose: transpose$
(%i6) transpose ([a, b]);
[ transpose(a) ]
(%o6)
[
]
[ transpose(b) ]
(%i7) matrix_element_transpose:
lambda ([x], realpart(x) - %i*imagpart(x))$
(%i8) m: matrix ([1 + 5*%i, 3 - 2*%i], [7*%i, 11]);
[ 5 %i + 1 3 - 2 %i ]
(%o8)
[
]
[
7 %i
11
]
(%i9) transpose (m);
[ 1 - 5 %i - 7 %i ]

matrix_element_transpose


Captulo 23: Matrices y Algebra
Lineal

(%o9)

[
[ 2 %i + 3

379

11

]
]

mattrace (M )

[Funcion]
Devuelve la traza (esto es, la suma de los elementos de la diagonal principal) de la
matriz cuadrada M.
Para disponer de esta funcion es necesario cargar el paquete haciendo load
("nchrpl").

minor (M, i, j )

[Funcion]
Devuelve el menor (i, j ) de la matriz M. Esto es, la propia matriz M, una vez
extradas la fila i y la columna j.

ncharpoly (M, x )

[Funcion]
Devuelve el polinomio caracterstico de la matriz M respecto de la variable x. Es una
alternativa a la funci
on charpoly de Maxima.
La funci
on ncharpoly opera calculando trazas de las potencias de la matriz dada,
que son iguales a las sumas de las potencias de las races del polinomio caracterstico.
A partir de estas cantidades se pueden calcular las funciones simetricas de las races,
que no son otra cosa sino los coeficientes del polinomio caracterstico. La funcion
charpoly opera calculando el determinante de by x * ident [n] - a. La funcion
ncharpoly es mas eficiente en el caso de matrices grandes y densas.
Para disponer de esta funcion es necesario cargar el paquete haciendo load
("nchrpl").

newdet (M )

[Funcion]
Calcula el determinante de la matriz M por el algoritmo del arbol menor de JohnsonGentleman. El resultado devuelto por newdet tiene formato CRE.

permanent (M )

[Funcion]
Calcula la permanente de la matriz M por el algoritmo del arbol menor de JohnsonGentleman. La permanente es como un determinante pero sin cambios de signo. El
resultado devuelto por permanent tiene formato CRE.
Vease tambien newdet.

rank (M )

[Funcion]
Calcula el rango de la matriz M. Esto es, el orden del mayor subdeterminante no
singular de M.
La funci
on rango puede retornar una respuesta erronea si no detecta que un elemento
de la matriz equivalente a cero lo es.

[Variable opcional]
Valor por defecto: false
Si ratmx vale false, el determinante y la suma, resta y producto matriciales se
calculan cuando las matrices se expresan en terminos de sus elementos, pero no se
calcula la inversi
on matricial en su representacion general.
Si ratmx vale true, las cuatro operaciones citadas mas arriba se calculan en el formato
CRE y el resultado de la matriz inversa tambien se da en formato CRE. Esto puede

ratmx

380

Manual de Maxima

hacer que se expandan los elementos de la matriz, dependiendo del valor de ratfac,
lo que quiz
as no sea siempre deseable.

row (M, i )

[Funcion]
Devuelve la i-esima fila de la matriz M. El valor que devuelve tiene formato de matriz.

rmxchar

[Variable opcional]

Valor por defecto: ]


La variable rmxchar es el caracter que se dibuja al lado derecho de una matriz.
Vease tambien lmxchar.

scalarmatrixp

[Variable opcional]

Valor por defecto: true


Si scalarmatrixp vale true, entonces siempre que una matriz 1 x 1 se produce como
resultado del c
alculo del producto no conmutativo de matrices se cambia al formato
escalar.
Si scalarmatrixp vale all, entonces todas las matrices 1 x 1 se simplifican a escalares.
Si scalarmatrixp vale false, las matrices 1 x 1 no se convierten en escalares.

setelmx (x, i, j, M )

[Funcion]
Asigna el valor x al (i, j)-esimo elemento de la matriz M y devuelve la matriz actualizada.
La llamada M [i, j ]: x hace lo mismo, pero devuelve x en lugar de M.

similaritytransform (M )
simtran (M )

[Funcion]
[Funcion]
La funci
on similaritytransform calcula la transformada de similitud de la matriz M.
Devuelve una lista que es la salida de la instruccion uniteigenvectors. Ademas, si
la variable nondiagonalizable vale false entonces se calculan dos matrices globales
leftmatrix y rightmatrix. Estas matrices tienen la propiedad de que leftmatrix .
M . rightmatrix es una matriz diagonal con los valores propios de M en su diagonal.
Si nondiagonalizable vale true entonces no se calculan estas matrices.
Si la variable hermitianmatrix vale true entonces leftmatrix es el conjugado complejo de la transpuesta de rightmatrix. En otro caso leftmatrix es la inversa de
rightmatrix.
Las columnas de la matriz rightmatrix son los vectores propios de M. Las otras
variables (veanse eigenvalues y eigenvectors) tienen el mismo efecto, puesto que
similaritytransform llama a las otras funciones del paquete para poder formar
rightmatrix.
Estas funciones se cargan con load ("eigen").
El nombre simtran es sin
onimo de similaritytransform.

sparse

[Variable opcional]

Valor por defecto: false


Si sparse vale true y si ratmx vale true, entonces determinant utilizara rutinas
especiales para calcular determinantes dispersos.


Captulo 23: Matrices y Algebra
Lineal

381

submatrix (i_1, ..., i_m, M, j_1, ..., j_n )


submatrix (i_1, ..., i_m, M )
submatrix (M, j_1, ..., j_n )

[Funcion]
[Funcion]
[Funcion]
Devuelve una nueva matriz formada a partir de la matriz M pero cuyas filas i 1, ...,
i m y columnas j 1, ..., j n han sido eliminadas.

transpose (M )

[Funcion]
Calcula la transpuesta de M.
Si M es una matriz, el valor devuelto es otra matriz N tal que N[i,j] = M[j,i].
Si M es una lista, el valor devuelto es una matriz N de length (m) filas y 1 columna,
tal que N[i,1] = M[i].
En caso de no ser M ni matriz ni lista, se devuelve la expresion nominal transpose
(M ).

triangularize (M )

[Funcion]
Devuelve la forma triangular superior de la matriz M, obtenida por eliminacion gaussiana. El resultado es el mismo que el devuelto por echelon, con la salvedad de que
el primer elemento no nulo de cada fila no se normaliza a 1.
Las funciones lu_factor y cholesky tambien triangularizan matrices.
(%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
[ 3
7 aa bb ]
[
]
(%o1)
[ - 1 8 5
2 ]
[
]
[ 9
2 11 4 ]
(%i2) triangularize (M);
[ - 1
8
5
2
]
[
]
(%o2)
[ 0
- 74
- 56
- 22
]
[
]
[ 0
0
626 - 74 aa 238 - 74 bb ]

uniteigenvectors (M )
ueivects (M )

[Funcion]
[Funcion]
Calcula los vectores propios unitarios de la matriz M. El valor que devuelve es una
lista de listas, la primera de las cuales es la salida de la funcion eigenvalues y el
resto de sublistas son los vectores propios unitarios de la matriz correspondiente a
esos valores propios, respectivamente.
Las variables citadas en la descripcion de la funcion eigenvectors tienen los mismos
efectos en uniteigenvectors.
Si knowneigvects vale true, el paquete eigen da por supuesto que el usuario
conoce los vectores propios de la matriz y que estan guardados en la variable global
listeigvects, en tal caso el contenido de listeigvects debe ser una lista de
estructura similar a la que devuelve la funcion eigenvectors.
Si knowneigvects vale true y la lista de vectores propios esta en la variable
listeigvects, el valor de la variable nondiagonalizable puede que no sea el
correcto. Si tal es el caso, debe asignarsele el valor correcto.

382

Manual de Maxima

Para utilizar esta fucni


on es necesario cargarla haciendo load ("eigen").
El nombre ueivects es sin
onimo de uniteigenvectors.

unitvector (x )
uvect (x )

[Funcion]
[Funcion]
Devuelve x/norm(x), esto es, el vector unitario de igual direccion y sentido que x.
load ("eigen") loads this function.
Para utilizar esta fucni
on es necesario cargarla haciendo load ("eigen").
El nombre uvect es sin
onimo de unitvector.

vectorpotential (givencurl )

[Funcion]
Devuelve el vector potencial de un vector rotacional en el sistema de coordenadas
actual. potentialzeroloc tiene un rol similar al de potential, pero el orden del
miembro izquierdo de las ecuaciones debe ser una permutacion cclica de las coordenadas.

vectorsimp (expr )

[Funcion]
Realiza simplificaciones y expansiones de acuerdo con los valores de las siguientes
variables globales:

expandall, expanddot, expanddotplus, expandcross, expandcrossplus,


expandcrosscross, expandgrad, expandgradplus, expandgradprod, expanddiv,
expanddivplus, expanddivprod, expandcurl, expandcurlplus, expandcurlcurl,
expandlaplacian, expandlaplacianplus y expandlaplacianprod.
Todas estas variables tienen por defecto el valor false. El sufijo plus se refiere al uso
de la suma o la distributividad. El sufijo prod se refiere a la expansion de operadores
que realizan cualquier tipo de producto.
expandcrosscross
Simplifica p (q r) en (p.r) q (p.q) r.
expandcurlcurl
Simplifica curlcurlp en graddivp + divgradp.
expandlaplaciantodivgrad
Simplifica laplacianp en divgradp.
expandcross
Activa expandcrossplus y expandcrosscross.
expandplus
Activa
expanddotplus,
expandcrossplus,
expandgradplus,
expanddivplus, expandcurlplus y expandlaplacianplus.
expandprod
Activa expandgradprod, expanddivprod y expandlaplacianprod.
Estas variables est
an declaradas como evflag.

zeromatrix (m, n )

[Funcion]
Devuelve una matriz rectangular m por n con todos sus elementos iguales a cero.


Captulo 23: Matrices y Algebra
Lineal

[
[

383

[Smbolo especial]
[Smbolo especial]
Los smbolos [ y ] marcan el comienzo y final, respectivamente, de una lista.
Los smbolos [ y ] tambien se utilizan para indicar los subndices de los elementos de
una lista, arreglo o funci
on arreglo.
Ejemplos:
(%i1) x: [a, b, c];
(%o1)
[a, b, c]
(%i2) x[3];
(%o2)
c
(%i3) array (y, fixnum, 3);
(%o3)
y
(%i4) y[2]: %pi;
(%o4)
%pi
(%i5) y[2];
(%o5)
%pi
(%i6) z[foo]: bar;
(%o6)
bar
(%i7) z[foo];
(%o7)
bar
(%i8) g[k] := 1/(k^2+1);
1
(%o8)
g := -----k
2
k + 1
(%i9) g[10];
1
(%o9)
--101

Captulo 24: Afines

385

24 Afines
24.1 Funciones y variables para Afines
fast_linsolve ([expr_1, ..., expr_m ], [x_1, ..., x_n ])

[Funcion]
Resuelve las ecuaciones lineales simultaneas expr 1, ..., expr m para las variables
x 1, ..., x n. Cada expr i puede ser una ecuacion o una expresion general; en caso
de tratarse de una expresi
on general, sera tratada como una ecuacion de la forma
expr_i = 0.
El valor que devuelve es una lista de ecuaciones de la forma [x_1 = a_1, ..., x_n
= a_n ] donde todas las a 1, ..., a n estan exentas de x 1, ..., x n.
La funci
on fast_linsolve es mas rapida que linsolve para sistemas de ecuaciones
con coeficientes dispersos.
Antes de utilizar esta funci
on ejec
utese load(affine).

grobner_basis ([expr_1, ..., expr_m ])

[Funcion]
Devuelve una base de Groebner para las ecuaciones expr 1, ..., expr m. La funcion
polysimp puede ser entonces utilizada para simplificar otras funciones relativas a las
ecuaciones.
grobner_basis ([3*x^2+1, y*x])$
polysimp (y^2*x + x^3*9 + 2) ==> -3*x + 2
polysimp(f) alcanza 0 si y solo si f esta en el ideal generado por expr 1, ..., expr m,
es decir, si y s
olo si f es una combinacion polinomica de los elementos de expr 1, ...,
expr m.
Antes de utilizar esta funci
on ejec
utese load(affine).

set_up_dot_simplifications (eqns, check_through_degree )


set_up_dot_simplifications (eqns )

[Funcion]
[Funcion]
Las eqns son ecuaciones polinomicas de variables no conmutativas. El valor de
current_variables es la lista de variables utilizadas para el calculo de los grados.
Las ecuaciones deben ser homogeneas, al objeto de completar el procedimiento.

El grado es el devuelto por nc_degree. Este


a su vez depende de los pesos de las
variables individuales.
Antes de utilizar esta funci
on ejec
utese load(affine).

declare_weights (x_1, w_1, ..., x_n, w_n )

[Funcion]
Asigna los pesos w 1, ..., w n a x 1, ..., x n, respectivamente. Estos pesos son los
utilizados en el c
alculo de nc_degree.
Antes de utilizar esta funci
on ejec
utese load(affine).

nc_degree (p )

[Funcion]
Devuelve el grado de un polinomio no conmutativo p. Vease declare_weights.
Antes de utilizar esta funci
on ejec
utese load(affine).

386

Manual de Maxima

dotsimp (f )

[Funcion]
Devuelve 0 si y s
olo si f est
a en el ideal generado por las ecuaciones, esto es, si y solo
si f es una combinaci
on lineal de los elementos de las ecuaciones.
Antes de utilizar esta funci
on ejec
utese load(affine).

fast_central_elements ([x_1, ..., x_n ], n )

[Funcion]
Si se ha ejecutado set_up_dot_simplifications con antelacion, obtiene los polinomios centrales de grado n de variables x 1, ..., x n.
Por ejemplo:
set_up_dot_simplifications ([y.x + x.y], 3);
fast_central_elements ([x, y], 2);
[y.y, x.x];
Antes de utilizar esta funci
on ejec
utese load(affine).

check_overlaps (n, add_to_simps )

[Funcion]
Revisa la superposici
on hasta el grado n, asegurandose de que el usuario tiene suficientes reglas de simplificaci
on en cada grado para que dotsimp trabaje correctamente.
Este proceso puede acelerarse si se conoce de antemano cual es la dimension del espacio de monomios. Si este es de dimension global finita, entonces debera usarse
hilbert. Si no se conoce la dimensiones de los monomios, no se debera especificar
una rank_function. Un tercer argumento opcional es reset.
Antes de utilizar esta funci
on ejec
utese load(affine).

mono ([x_1, ..., x_n ], n )

[Funcion]

Devuelve la lista de monomios independientes.


Antes de utilizar esta funci
on ejec
utese load(affine).

monomial_dimensions (n )

[Funcion]

Calcula el desarrollo de Hilbert de grado n para el algebra actual.


Antes de utilizar esta funci
on ejec
utese load(affine).

extract_linear_equations ([p_1, ..., p_n ], [m_1, ..., m_n ])

[Funcion]
Hace una lista de los coeficientes de los polinomios no conmutativos p 1, ..., p n de los
monomios no conmutativos m 1, ..., m n. Los coeficientes deben escalares. Hagase
uso de list_nc_monomials para construir la lista de monomios.
Antes de utilizar esta funci
on ejec
utese load(affine).

list_nc_monomials ([p_1, ..., p_n ])


list_nc_monomials (p )

[Funcion]
[Funcion]
Devuelve una lista de los monomios no conmutativos que aparecen en el polinomio p
o una lista de polinomios en p 1, ..., p n.
Antes de utilizar esta funci
on ejec
utese load(affine).

all_dotsimp_denoms

[Variable]

Valor por defecto: false


Cuando all_dotsimp_denoms es una lista, los denominadores encontrados por
dotsimp son a~
nadidos a la lista. La variable all_dotsimp_denoms puede inicializarse
como una lista vaca [] antes de llamar a dotsimp.
Por defecto, dotsimp no recolecta los denominadores.

Captulo 25: itensor

387

25 itensor
25.1 Introducci
on a itensor
Maxima implementa dos tipos diferentes de manipulacion simbolica de tensores: la manipulacion de componentes (paquete ctensor) y la manipulacion indexada (paquete itensor).
Vease m
as abajo la nota sobre notacion tensorial.
La manipulaci
on de componentes significa que los objetos geometricos tensoriales se
representan como arreglos (arrays) o matrices. Operaciones tensoriales como la contraccion
o la diferenciaci
on covariante se llevan a cabo sumando ndices mudos con la sentencia do.
Esto es, se realizan operaciones directamente con las componentes del tensor almacenadas
en un arreglo o matriz.
La manipulaci
on indexada de tensores se lleva a cabo mediante la representacion de los
tensores como funciones de sus ndices covariantes, contravariantes y de derivadas. Operaciones tensoriales como la contracci
on o la diferenciacion covariante se realizan manipulando
directamente los ndices, en lugar de sus componentes asociadas.
Estas dos tecnicas para el tratamiento de los procesos diferenciales, algebraicos y
analticos en el contexto de la geometra riemanniana tienen varias ventajas y desventajas
que surgen seg
un la naturaleza y dificultad del problema que esta abordando el usuario.
Sin embargo, se deben tener presentes las siguientes caractersticas de estas dos tecnicas:
La representaci
on de los tensores y sus operaciones en terminos de sus componentes
facilita el uso de paquete ctensor. La especificacion de la metrica y el calculo de los
tensores inducidos e invariantes es inmediato. Aunque toda la potencia de simplificacion de
Maxima se encuentra siempre a mano, una metrica compleja con dependencias funcionales
y de coordenadas intrincada, puede conducir a expresiones de gran tama~
no en las que
la estructura interna quede oculta. Ademas, muchos calculos requieren de expresiones
intermedias que pueden provocar la detencion s
ubita de los programas antes de que se
termine el c
alculo. Con la experiencia, el usuario podra evitar muchas de estas dificultades.
Devido a la forma en que los tensores y sus operaciones se representan en terminos de operaciones simb
olicas con sus ndices, expresiones que seran intratables en su representacion
por componentes pueden en ocasiones simplificarse notablemente utilizando las rutinas especiales para objetos simetricos del paquete itensor. De esta manera, la estructura de
expresiones grandes puede hacerse mas transparente. Por otro lado, debido a la forma especial de la representaci
on indexada de tensores en itensor, en algunos casos el usuario
encontrar
a dificultades con la especificacion de la metrica o la definicion de funciones.
El paquete itensor puede derivar respecto de una variable indexada, lo que permite utilizar el paquete cuando se haga uso del formalismo de lagrangiano y hamiltoniano. Puesto
que es posible derivar un campo lagrangiano respecto de una variable de campo indexada,
se puede hacer uso de Maxima para derivar las ecuaciones de Euler-Lagrange correspondientes en forma indexada. Estas ecuaciones pueden traducirse a componentes tensoriales
(ctensor) con la funci
on ic_convert, lo que permite resolver las ecuaciones de campo en
cualquier sistema de coordenadas, o obtener las ecuaciones de movimiento en forma hamiltoniana. Veanse dos ejemplos en einhil.dem y bradic.dem; el primero utiliza la accion
de Einstein-Hilbert para derivar el campo tensorial de Einstein en el caso homogeneo e
isotropico (ecuaciones de Friedmann), as como en el caso esferosimetrico estatico (solucion

388

Manual de Maxima

de Schwarzschild); el segundo demuestra como calcular las ecuaciones de Friedmann a partir


de la acci
on de la teora de la gravedad de Brans-Dicke, y tambien muestra como derivar el
hamiltoniano asociado con la teora del campo escalar.

25.1.1 Notaci
on tensorial
Hasta ahora, el paquete itensor de Maxima utilizaba una notacion que algunas veces
llevaba a una ordenaci
on incorrecta de los ndices. Por ejemplo:
(%i2) imetric(g);
(%o2)
done
(%i3) ishow(g([],[j,k])*g([],[i,l])*a([i,j],[]))$
i l j k
(%t3)
g
g
a
i j
(%i4) ishow(contract(%))$
k l
(%t4)
a
Este resultado no es correcto a menos que a sea un tensor simetrico. La razon por la que
esto ocurre es que aunque itensor mantenga correctamente el orden dentro del conjunto
de ndices covariantes y contravariantes, una vez un ndice sea aumentado o disminuido, su
posicion relativa al otro conjunto de ndices se pierde.
Para evitar este problema, se ha desarrollado una notacion totalmente compatible con la
anterior.En esta notaci
on, los ndices contravariantes se insertan en las posiciones correctas
en la lista de ndices covariantes, pero precedidos del signo negativo.
En esta notaci
on, el ejemplo anterior da el resultado correcto:
(%i5) ishow(g([-j,-k],[])*g([-i,-l],[])*a([i,j],[]))$
i l
j k
(%t5)
g
a
g
i j
(%i6) ishow(contract(%))$
l k
(%t6)
a
El u
nico c
odigo que hace uso de esta notacion es la funcion lc2kdt.
Devido a que este c
odigo es nuevo, puede contener errores.

25.1.2 Manipulaci
on indexada de tensores
El paquete itensor se carga haciendo load(itensor). Para acceder a las demos se har
a
demo(tensor).
En el paquete itensor un tensor se representa como un objeto indexado, esto es, como
una funci
on de tres grupos de ndices: los covariantes, los contravariantes y los de derivadas.
Los ndices covariantes se especifican mediante una lista que sera el primer argumento del objeto indexado, siendo los ndices contravariantes otra lista que sera el segundo argumento del
mismo objeto indexado. Si al objeto indexado le falta cualquiera de estos grupos de ndices,
entonces se le asignar
a al argumento correspondiente la lista vaca []. As, g([a,b],[c])
representa un objeto indexado llamado g, el cual tiene dos ndices covariantes (a,b), un
ndice contravariante (c) y no tiene ndices de derivadas.

Captulo 25: itensor

389

Los ndices de derivadas, si est


an presentes, se a~
naden como argumentos adicionales a
la funcion simb
olica que representa al tensor. Se pueden especificar explcitamente por el
usuario o pueden crearse durante el proceso de diferenciacion respecto de alguna coordenada.
Puesto que la diferenciaci
on ordinaria es conmutativa, los ndices de derivadas se ordenan
alfanumericamente, a menos que la variable iframe_flag valga true, indicando que se est
a
utilizando una metrica del sistema de referencia. Esta ordenacion canonica hace posible que
Maxima reconozca, por ejemplo, que t([a],[b],i,j) es lo mismo que t([a],[b],j,i).
La diferenciaci
on de un objeto indexado con respecto de alguna coordenada cuyo ndice
no aparece como argumento de dicho objeto indexado, dara como resultado cero. Esto
se debe a que Maxima no sabe si el tensor representado por el objeto indexado depende
implcitamente de la coordenada correspondiente. Modificando la funcion diff de Maxima
en itensor, se da por hecho que todos los objetos indexados dependen de cualquier variable
de diferenciaci
on, a menos que se indique lo contrario. Esto hace posible que la convencion
sobre la sumaci
on se extienda a los ndices de derivadas. El paquete itensor trata a los
ndices de derivadas como covariantes.
Las siguientes funciones forman parte del paquete itensor para la manipulacion indexada de vectores. En lo que respecta a las rutinas de simplificacion, no se considera en
general que los objetos indexados tengan propiedades simetricas. Esto puede cambiarse
reasignando a la variable allsym[false] el valor true, con lo cual los objetos indexados
se considerar
an simetricos tanto respecto de sus ndices covariantes como contravariantes.
En general, el paquete itensor trata a los tensores como objetos opacos. Las ecuaciones
tensoriales se manipulan en base a reglas algebraicas, como la simetra y la contraccion.
Ademas, en el paquete itensor hay funciones para la diferenciacion covariante, la curvatura
y la torsi
on. Los c
alculos se pueden realizar respecto de una metrica del sistema de referencia
movil, dependiendo de las asignaciones dadas a la variable iframe_flag.
La siguiente sesi
on de ejemplo demuestra como cargar el paquete itensor, especificar el
nombre de la metrica y realizar algunos calculos sencillos.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%i4)
(%t4)
(%i5)
(%t5)
(%i6)
(%o6)
(%i7)
(%t7)
(%i8)
(%t8)

load(itensor);
/share/tensor/itensor.lisp
imetric(g);
done
components(g([i,j],[]),p([i,j],[])*e([],[]))$
ishow(g([k,l],[]))$
e p
k l
ishow(diff(v([i],[]),t))$
0
depends(v,t);
[v(t)]
ishow(diff(v([i],[]),t))$
d
-- (v )
dt
i
ishow(idiff(v([i],[]),j))$
v
i,j

390

Manual de Maxima

(%i9) ishow(extdiff(v([i],[]),j))$
(%t9)
v
- v
j,i
i,j
----------2
(%i10) ishow(liediff(v,w([i],[])))$
%3
%3
(%t10)
v
w
+ v
w
i,%3
,i %3
(%i11) ishow(covdiff(v([i],[]),j))$
%4
(%t11)
v
- v
ichr2
i,j
%4
i j
(%i12) ishow(ev(%,ichr2))$
%4 %5
(%t12) v
- (g
v
(e p
+ e
p
- e p
- e
p
i,j
%4
j %5,i
,i j %5
i j,%5
,%5 i j
+ e p
+ e
p
))/2
i %5,j
,j i %5
(%i13) iframe_flag:true;
(%o13)
(%i14) ishow(covdiff(v([i],[]),j))$

true

%6
v
- v
icc2
i,j
%6
i j

(%t14)
(%i15) ishow(ev(%,icc2))$

%6
(%t15)
v
- v
ifc2
i,j
%6
i j
(%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
%6 %7
%6 %7
(%t16) - (ifg
v
ifb
+ ifg
v
ifb
- 2 v
%6
j %7 i
%6
i j %7
i,j

(%i17)
(%t17)
(%i18)
(%o18)
(%i19)
(%t19)
(%i20)
(%t20)

%6 %7
- ifg
v
ifb
)/2
%6
%7 i j
ishow(canform(s([i,j],[])-s([j,i])))$
s
- s
i j
j i
decsym(s,2,0,[sym(all)],[]);
done
ishow(canform(s([i,j],[])-s([j,i])))$
0
ishow(canform(a([i,j],[])+a([j,i])))$
a
+ a

Captulo 25: itensor

391

j i
i j
(%i21) decsym(a,2,0,[anti(all)],[]);
(%o21)
done
(%i22) ishow(canform(a([i,j],[])+a([j,i])))$
(%t22)
0

25.2 Funciones y variables para itensor


25.2.1 Trabajando con objetos indexados
dispcon (tensor_1, tensor_2, ...)
dispcon (all)

[Funcion]
[Funcion]
Muestra las propiedades contractivas de sus argumentos tal como fueron asignadas
por defcon. La llamada dispcon (all) muestra todas propiedades contractivas que
fueron definidas.

entertensor (nombre )

[Funcion]
Permite crear un objeto indexado llamado nombre, con cualquier n
umero de ndices
tensoriales y de derivadas. Se admiten desde un u
nico ndice hasta una lista de ndices.
Vease el ejemplo en la descripcion de covdiff.

changename (anterior, nuevo, expr )

[Funcion]
Cambia el nombre de todos los objetos indexados llamados anterior a new en expr.
El argumento anterior puede ser un smbolo o una lista de la forma [nombre, m, n ],
en cuyo caso s
olo los objetos indexados de llamados nombre con m ndices covariantes
y n contravariantes se renombraran como nuevo.
[Funcion]
Hace un listado de todos los tensores y sus ndices en una expresion tensorial. Por
ejemplo,

listoftens

(%i6) ishow(a([i,j],[k])*b([u],[],v)+c([x,y],[])*d([],[])*e)$
k
(%t6)
d e c
+ a
b
x y
i j u,v
(%i7) ishow(listoftens(%))$
k
(%t7)
[a
, b
, c
, d]
i j
u,v
x y

ishow (expr )

[Funcion]
Muestra expr con todos los objetos indexados que contiene, junto con los correspondientes ndices covariantes (como subndices) y contravariantes (como superndices).
Los ndices de derivadas se muestran como subndices, separados de los covariantes
por una coma; veanse los m
ultiples ejemplos de este documento.

392

Manual de Maxima

indices (expr )

[Funcion]
Devuelve una lista con dos elementos. El primer elemento es una lista con los ndices
libres, aquellos que aparecen una sola vez. El segundo elemento es una lista con los
ndices mudos en expr, aquellos que aparecen exactamente dos veces. Por ejemplo,
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(a([i,j],[k,l],m,n)*b([k,o],[j,m,p],q,r))$
k l
j m p
(%t2)
a
b
i j,m n k o,q r
(%i3) indices(%);
(%o3)
[[l, p, i, n, o, q, r], [k, j, m]]
Un producto tensorial que contenga el mismo ndice mas de dos veces es
sint
acticamente incorrecto. La funcion indices intenta tratar estas expresiones de
una forma razonable; sin embargo, cuando se la obliga a manipular una expresion
incorrecta puede tener un comportamiento imprevisto.

rename (expr )
rename (expr, count )

[Funcion]
[Funcion]
Devuelve una expresi
on equivalente a expr pero con los ndices mudos de cada termino
elegidos del conjunto [%1, %2,...] si el segundo argumento opcional se omite. En
otro caso, los ndices mudos son indexados empezando con el valor count. Cada ndice
mudo en un producto ser
a diferente. En el caso de las sumas, la funcion rename operar
a sobre cada termino de la suma reinicializando el contador con cada termino. De
esta manera rename puede servir como simplificador tensorial. Ademas, los ndices se
ordenar
an alfanumericamente, si la variable allsym vale true, respecto de los ndices
covariantes y contravariantes dependiendo del valor de flipflag. Si flipflag vale
false, entonces los ndices se renombraran de acuerdo con el orden de los ndices contravariantes. Si flipflag vale true, entonces los ndices se renombraran de acuerdo
con el orden de los ndices covariantes. Suele acontecer que el efecto combinado de
los dos cambios de nombre reduzcan la expresion mas de lo que que pueda reducir
cualquiera de ellas por separado.
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) allsym:true;
(%o2)
true
(%i3) g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%4],[%3])*
ichr2([%2,%3],[u])*ichr2([%5,%6],[%1])*ichr2([%7,r],[%2])g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%2],[u])*
ichr2([%3,%5],[%1])*ichr2([%4,%6],[%3])*ichr2([%7,r],[%2]),noeval$
(%i4) expr:ishow(%)$
%4 %5 %6 %7
%3
(%t4) g
g
ichr2

u
ichr2

%1
ichr2

%2
ichr2

Captulo 25: itensor

393

%1 %4
%4 %5
- g

%6 %7
g

%2 %3

%5 %6

%7 r

u
%1
%3
%2
ichr2
ichr2
ichr2
ichr2
%1 %2
%3 %5
%4 %6
%7 r

(%i5) flipflag:true;
(%o5)
true
(%i6) ishow(rename(expr))$
%2 %5 %6 %7
%4
u
%1
%3
(%t6) g
g
ichr2
ichr2
ichr2
ichr2
%1 %2
%3 %4
%5 %6
%7 r
%4 %5

u
%1
%3
%2
ichr2
ichr2
ichr2
ichr2
%1 %2
%3 %4
%5 %6
%7 r
(%i7) flipflag:false;
(%o7)
false
(%i8) rename(%th(2));
(%o8)
0
(%i9) ishow(rename(expr))$
%1 %2 %3 %4
%5
%6
%7
u
(%t9) g
g
ichr2
ichr2
ichr2
ichr2
%1 %6
%2 %3
%4 r
%5 %7
- g

%6 %7

%1 %2
- g

%3 %4
g

%6

%5

%7

ichr2
ichr2
ichr2
ichr2
%1 %3
%2 %6
%4 r
%5 %7

show (expr )

[Funcion]
Muestra expr con sus objetos indexados que tengan ndices covariantes como
subndices y los contravariantes como superndices. Los ndices derivados se
muestran como subndices, separados por una coma de los covariantes.

flipflag

[Variable opcional]

Valor por defecto: false


Si vale false los ndices se renombraran de acuerdo con el orden de los ndices covariantes, si true se renombraran de acuerdo con el orden de los ndices covariantes.
Si flipflag vale false, entonces rename construye una lista con los ndices contravariantes seg
un van apareciendo de izquierda a derecha; si vale true, entonces
va formando la lista con los covariantes. Al primer ndice mudo se le da el nombre
%1, al siguiente %2, etc. Finalmente se hace la ordenacion. Vease el ejemplo en la
descripci
on de la funci
on rename.

defcon (tensor_1 )
defcon (tensor_1, tensor_2, tensor_3 )

[Funcion]
[Funcion]
Le asigna a gives tensor 1 la propiedad de que la contraccion de un producto de tensor 1 por tensor 2 da como resultado un tensor 3 con los ndices apropiados. Si solo

394

Manual de Maxima

se aporta un argumento, tensor 1, entonces la contraccion del producto de tensor 1


por cualquier otro objeto indexado que tenga los ndices apropiados, por ejemplo
my_tensor, dar
a como resultado un objeto indexado con ese nombre, my_tensor,
y con un nuevo conjunto de ndices que reflejen las contracciones realizadas. Por
ejemplo, si imetric:g, entonces defcon(g) implementara el aumento o disminucion
de los ndices a traves de la contraccion con el tensor metrico. Se puede dar m
as
de un defcon para el mismo objeto indexado, aplicandose el u
ltimo. La variable
contractions es una lista con aquellos objetos indexados a los que se le han dado
propiedades de contracci
on con defcon.

remcon (tensor_1, ..., tensor_n )


remcon (all)

[Funcion]
[Funcion]
Borra todas las propiedades de contraccion de tensor 1, ..., tensor n). La llamada
remcon(all) borra todas las propiedades de contraccion de todos los objetos indexados.

contract (expr )

[Funcion]
Lleva a cabo las contracciones tensoriales en expr, la cual puede ser cualquier combinaci
on de sumas y productos. Esta funcion utiliza la informacion dada a la funcion
defcon. Para obtener mejores resultados, expr debera estar completamente expandida. La funci
on ratexpand es la forma mas rapida de expandir productos y
potencias de sumas si no hay variables en los denominadores de los terminos.

indexed_tensor (tensor )

[Funcion]
Debe ejecutarse antes de asignarle componentes a un tensor para el que ya existe
un valor, como ichr1, ichr2 o icurvature. Vease el ejemplo de la descripcion de
icurvature.

components (tensor, expr )

[Funcion]
Permite asignar un valor indexado a la expresion expr dando los valores de las componentes de tensor. El tensor debe ser de la forma t([...],[...]), donde cualquiera
de las listas puede estar vaca. La expresion expr puede ser cualquier objeto indexado
que tenga otros objetos con los mismos ndices libres que tensor. Cuando se utiliza
para asignar valores al tensor metrico en el que las componentes contengan ndices
mudos, se debe tener cuidado en no generar ndices mudos m
ultiples. Se pueden
borrar estas asignaciones con la funcion remcomps.
Es importante tener en cuenta que components controla la valencia del tensor, no el
orden de los ndices. As, asignando componentes de la forma x([i,-j],[]), x([j,i],[]) o x([i],[j]) todos ellos producen el mismo resultado, la asignacion de
componentes a un tensor de nombre x con valencia (1,1).
Las componentes se pueden asignar a una expresion indexada de cuatro maneras, dos
de las cuales implican el uso de la instruccion components:
1) Como una expresi
on indexada. Por ejemplo:
(%i2) components(g([],[i,j]),e([],[i])*p([],[j]))$
(%i3) ishow(g([],[i,j]))$
i j

Captulo 25: itensor

(%t3)

395

2) Como una matriz:


(%i5) lg:-ident(4)$lg[1,1]:1$lg;
[ 1
0
[
[ 0 - 1
(%o5)
[
[ 0
0
[
[ 0
0
(%i6) components(g([i,j],[]),lg);
(%o6)
(%i7) ishow(g([i,j],[]))$
(%t7)
(%i8) g([1,1],[]);
(%o8)
(%i9) g([4,4],[]);
(%o9)

0
0
- 1
0

]
]
0 ]
]
0 ]
]
- 1 ]

done
g
i j
1
- 1

3) Como una funci


on. Se puede utilizar una funcion de Maxima para especificar las
componentes de un tensor en base a sus ndices. Por ejemplo, el codigo siguiente
asigna kdelta a h si h tiene el mismo n
umero de ndices covariantes y contravariantes
y no tiene ndices de derivadas, asignandole g en otro caso:
(%i4) h(l1,l2,[l3]):=if length(l1)=length(l2) and length(l3)=0
then kdelta(l1,l2) else apply(g,append([l1,l2], l3))$
(%i5) ishow(h([i],[j]))$
j
(%t5)
kdelta
i
(%i6) ishow(h([i,j],[k],l))$
k
(%t6)
g
i j,l
4) Utilizando los patrones de Maxima, en particular las funciones defrule y applyb1:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) matchdeclare(l1,listp);
(%o2)
done
(%i3) defrule(r1,m(l1,[]),(i1:idummy(),

396

Manual de Maxima

g([l1[1],l1[2]],[])*q([i1],[])*e([],[i1])))$
(%i4) defrule(r2,m([],l1),(i1:idummy(),
w([],[l1[1],l1[2]])*e([i1],[])*q([],[i1])))$
(%i5) ishow(m([i,n],[])*m([],[i,m]))$
i m
(%t5)
m
m
i n
(%i6) ishow(rename(applyb1(%,r1,r2)))$
%1 %2 %3 m
(%t6)
e
q
w
q
e
g
%1 %2 %3 n

remcomps (tensor )

[Funcion]
Borra todos los valores de tensor que han sido asignados con la funcion components.

showcomps (tensor )

[Funcion]
Muestra las componentes de un tensor definidas con la instruccion components. Por
ejemplo:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) load(itensor);
(%o2)
/share/tensor/itensor.lisp
(%i3) lg:matrix([sqrt(r/(r-2*m)),0,0,0],[0,r,0,0],
[0,0,sin(theta)*r,0],[0,0,0,sqrt((r-2*m)/r)]);
[
r
[ sqrt(-------) 0
0
0
[
r - 2 m
[
[
0
r
0
0
(%o3)
[
[
0
0 r sin(theta)
0
[
[
r - 2 m
[
0
0
0
sqrt(-------)
[
r
(%i4) components(g([i,j],[]),lg);
(%o4)
done
(%i5) showcomps(g([i,j],[]));
[
r
[ sqrt(-------) 0
0
0
[
r - 2 m
[

]
]
]
]
]
]
]
]
]
]
]

]
]
]
]

Captulo 25: itensor

(%t5)

397

[
g
= [
i j
[
[
[
[
[

r sin(theta)

(%o5)

]
]
0
]
]
r - 2 m ]
sqrt(-------) ]
r
]

false

La funci
on showcomps tambien puede mostrar las componentes de tensores de rango
mayor de 2.

idummy ()

[Funcion]
Incrementa icounter y devuelve un ndice de la forma %n siendo n un entero positivo.
Esto garantiza que ndices mudos que sean necesarios para formar expresiones no
entren en conflico con ndices que ya estan en uso. Vease el ejemplo de la descripcion
de indices.
[Variable opcional]

idummyx
Valor por defecto: %
Es el prefijo de los ndices mudos. Vease indices.

[Variable opcional]

icounter
Valor por defecto: 1

Determina el sufijo numerico a ser utilizado en la generacion del siguiente ndice mudo.
El prefijo se determina con la opcion idummy (por defecto: %).

kdelta (L1, L2 )

[Funcion]
Es la funci
on delta generalizada de Kronecker definida en el paquete itensor
siendo L1 la lista de ndices covariantes y L2 la lista de ndices contravariantes. La
funci
on kdelta([i],[j]) devuelve el valor de la delta ordinaria de Kronecker. La
instrucci
on ev(expr,kdelta) provoca la evaluacion de una expresion que contenga
kdelta([],[]).

En un abuso de la notaci
on, itensor tambien permite a kdelta tener 2 ndices
covariantes y ninguno contravariante, o 2 contravariantes y ninguno covariante. Esto
es una funcionalidad del paquete, loque no implica que kdelta([i,j],[]) sea un
objeto tensorial de pleno derecho.

kdels (L1, L2 )

[Funcion]
Funci
on delta de Kronecker simetrizada, utilizada en algunos calculos. Por ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) kdelta([1,2],[2,1]);
(%o2)
- 1
(%i3) kdels([1,2],[2,1]);
(%o3)
1

398

Manual de Maxima

(%i4) ishow(kdelta([a,b],[c,d]))$
c
d
d
c
(%t4)
kdelta kdelta - kdelta kdelta
a
b
a
b
(%i4) ishow(kdels([a,b],[c,d]))$
c
d
d
c
(%t4)
kdelta kdelta + kdelta kdelta
a
b
a
b

levi_civita (L )

[Funcion]
Es el tensor de permutaci
on de Levi-Civita, el cual devuelve 1 si la lista L con una
permutaci
on par de enteros, -1 si es en una permutacion impar y 0 si algunos de los
ndices de L est
an repetidos.

lc2kdt (expr )

[Funcion]
Simplifica expresiones que contengan el smbolo de Levi-Civita, convirtiendolas en
expresiones con la delta de Kronecker siempre que sea posible. La diferencia principal
entre esta funci
on y la simple evaluacion del smbolo de Levi-Civita consiste en que
de esta u
ltima forma se obtienen expresiones de Kronecker con ndices numericos, lo
que impide simplificaciones ulteriores. La funcion lc2kdt evita este problema, dando
resultados con son m
as f
aciles de simplificar con rename o contract.
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) expr:ishow(levi_civita([],[i,j])
*levi_civita([k,l],[])*a([j],[k]))$
i j k
(%t2)
levi_civita
a levi_civita
j
k l
(%i3) ishow(ev(expr,levi_civita))$
i j k
1 2
(%t3)
kdelta
a kdelta
1 2 j
k l
(%i4) ishow(ev(%,kdelta))$
i
j
j
i
k
(%t4) (kdelta kdelta - kdelta kdelta ) a
1
2
1
2
j
1
(kdelta

2
kdelta

2
- kdelta

1
kdelta )
k
l

(%i5) ishow(lc2kdt(expr))$
k
i
j
k
j
i
(%t5)
a kdelta kdelta - a kdelta kdelta
j
k
l
j
k
l
(%i6) ishow(contract(expand(%)))$

Captulo 25: itensor

(%t6)

399

i
i
a - a kdelta
l
l

La funci
on lc2kdt en ocasiones hace uso del tensor metrico. Si el tensor metrico no
fue previamente definido con imetric, se obtiene un mensaje de error.
(%i7) expr:ishow(levi_civita([],[i,j])
*levi_civita([],[k,l])*a([j,k],[]))$
i j
k l
(%t7)
levi_civita
levi_civita
a
j k
(%i8) ishow(lc2kdt(expr))$
Maxima encountered a Lisp error:
Error in $IMETRIC [or a callee]:
$IMETRIC [or a callee] requires less than two arguments.
Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
(%i9) imetric(g);
(%o9)
done
(%i10) ishow(lc2kdt(expr))$
%3 i
k
%4 j
l
%3 i
l
%4 j
(%t10) (g
kdelta
g
kdelta
- g
kdelta
g
%3
%4
%3
k
kdelta ) a
%4
j k
(%i11) ishow(contract(expand(%)))$
l i
l i j
(%t11)
a
- g
a
j

lc_l

[Funcion]
Regla de simplificaci
on utilizada en expresiones que contienen el smbolo de levi_
civita sin evaluar. Junto con lc_u, puede utilizarse para simplificar muchas expresiones de forma m
as eficiente que la evaluacion de levi_civita. Por ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) el1:ishow(levi_civita([i,j,k],[])*a([],[i])*a([],[j]))$
i j
(%t2)
a a levi_civita
i j k
(%i3) el2:ishow(levi_civita([],[i,j,k])*a([i])*a([j]))$

400

Manual de Maxima

(%t3)
(%i4)
(%t4)
(%i5)
(%t5)

lc_u

i j k
levi_civita
a a
i j
canform(contract(expand(applyb1(el1,lc_l,lc_u))));
0
canform(contract(expand(applyb1(el2,lc_l,lc_u))));
0

[Funcion]
Regla de simplificaci
on utilizada en expresiones que contienen el smbolo de levi_
civita sin evaluar. Junto con lc_l, puede utilizarse para simplificar muchas expresiones de forma m
as eficiente que la evaluacion de levi_civita. Vease lc_l.

canten (expr )

[Funcion]
Simplifica expr renombrando (vease rename) y permutando ndices mudos. La funcion
rename se restringe a sumas de productos de tensores en los cuales no hay derivadas,
por lo que est
a limitada y s
olo debera utilizarse si canform no es capaz de de llevar
a cabo la simplificaci
on requerida.
La funci
on canten devuelve un resultado matematicamente correcto solo si su argumento es una expresi
on completamente simetrica respecto de sus ndices. Por esta
raz
on, canten devuelve un error si allsym no vale true.

concan (expr )

[Funcion]

Similar a canten pero tambien realiza la contraccion de los ndices.

25.2.2 Simetras de tensores


[Variable opcional]
Valor por defecto: false
Si vale true entonces todos los objetos indexados se consideran simetricos respecto de
todos sus ndices covariantes y contravariantes. Si vale false entonces no se tienen
en cuenta ning
un tipo de simetra para estos ndices. Los ndices de derivadas se
consideran siempre simetricos, a menos que la variable iframe_flag valga true.

allsym

decsym (tensor, m, n, [cov_1, cov_2, ...], [contr_1, contr_2, ...])

[Funcion]
Declara propiedades de simetra para el tensor de m ndices covariantes y n
contravariantes. Los cov i y contr i son seudofunciones que expresan relaciones

de simetra entre los ndices covariantes y contravariantes, respectivamente. Estos


son de la forma symoper(index_1, index_2,...) donde symoper es uno de
sym, anti o cyc y los index i son enteros que indican la posicion del ndice
en el tensor. Esto declarara a tensor simetrico, antisimetrico o cclico respecto
de index i. La llamada symoper(all) indica que todos los ndices cumplen la
condici
on de simetra. Por ejemplo, dado un objeto b con 5 ndices covariantes,
decsym(b,5,3,[sym(1,2),anti(3,4)],[cyc(all)]) declara b simetrico en el
primer y segundo ndices covariantes, antisimetrico en su tercer y cuarto ndices
tambien covariantes y cclico en todos sus ndices contravariantes. Cualquiera de
las listas de declaraci
on de simetras puede ser nula. La funcion que realiza las
simplificaciones es canform, como se ilustra en el siguiente ejemplo,

Captulo 25: itensor

401

(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) expr:contract(expand(a([i1,j1,k1],[])
*kdels([i,j,k],[i1,j1,k1])))$
(%i3) ishow(expr)$
(%t3)
a
+ a
+ a
+ a
+ a
+ a
k j i
k i j
j k i
j i k
i k j
i j k
(%i4) decsym(a,3,0,[sym(all)],[]);
(%o4)
done
(%i5) ishow(canform(expr))$
(%t5)
6 a
i j k
(%i6) remsym(a,3,0);
(%o6)
done
(%i7) decsym(a,3,0,[anti(all)],[]);
(%o7)
done
(%i8) ishow(canform(expr))$
(%t8)
0
(%i9) remsym(a,3,0);
(%o9)
done
(%i10) decsym(a,3,0,[cyc(all)],[]);
(%o10)
done
(%i11) ishow(canform(expr))$
(%t11)
3 a
+ 3 a
i k j
i j k
(%i12) dispsym(a,3,0);
(%o12)
[[cyc, [[1, 2, 3]], []]]

remsym (tensor, m, n )

[Funcion]
Borra todas las propiedades de simetra del tensor que tiene m ndices covariantes y
n contravariantes.

canform (expr )
canform (expr, rename )

[Funcion]
[Funcion]
Simplifica expr renombrando ndices mudos y reordenando todos los ndices seg
un las
condiciones de simetra que se le hayan impuesto. Si allsym vale true entonces todos
los ndices se consideran simetricos, en otro caso se utilizara la informacion sobre
simetras suministrada por decsym. Los ndices mudos se renombran de la misma
manera que en la funci
on rename. Cuando canform se aplica a una expresion grande
el c
alculo puede llevar mucho tiempo. Este tiempo se puede acortar llamando primero
a rename. Vease tambien el ejemplo de la descripcion de decsym. La funcion canform
puede que no reduzca completamente una expresion a su forma mas sencilla, pero en
todo caso devolver
a un resultado matematicamente correcto.

Si al par
ametro opcional rename se le asigna el valor false, no se renombraran los
ndices mudos.

402

Manual de Maxima

25.2.3 C
alculo tensorial indexado
diff (expr, v_1, [n_1, [v_2, n_2 ] ...])

[Funcion]
Se trata de la funci
on de Maxima para la diferenciacion, ampliada para las necesidades
del paquete itensor. Calcula la derivada de expr respecto de v 1 n 1 veces, respecto
de v 2 n 2 veces, etc. Para el paquete de tensores,la funcion ha sido modificada de
manera que v i puedan ser enteros desde 1 hasta el valor que tome la variable dim.
Esto permite que la derivaci
on se pueda realizar con respecto del v i-esimo miembro
de la lista vect_coords. Si vect_coords guarda una variable atomica, entonces esa
variable ser
a la que se utilice en la derivacion. Con esto se hace posible la utilizacion
de una lista con nombres de coordenadas subindicadas, como x[1], x[2], ...

El paquete sobre tensores ampla las capacidades de diff con el fin de poder calcular
derivadas respecto de variables indexadas. En particular, es posible derivar expresiones que contengan combinaciones del tensor metrico y sus derivadas respecto del
tensor metrico y su primera y segunda derivadas. Estos metodos son particularmente
u
tiles cuando se consideran los formalismos lagrangianos de la teora gravitatoria,
permitiendo obtener el tensor de Einstein y las ecuaciones de campo a partir del
principio de acci
on.

idiff (expr, v_1, [n_1, [v_2, n_2 ] ...])

[Funcion]
Diferenciaci
on inicial. Al contrario que diff, que deriva respecto de una variable
independiente, idiff puede usarse para derivar respecto de una coordenada.
La funci
on idiff tambien puede derivar el determinante del tensor metrico.
As, si imetric toma el valor G entonces idiff(determinant(g),k) devolver
a
2*determinant(g)*ichr2([%i,k],[%i]) donde la ndice mudo %i se escoge de
forma apropiada.

liediff (v, ten )

[Funcion]
Calcula la derivada de Lie de la expresion tensorial ten respecto de campo vectorial
v. La expresi
on ten debe ser cualquier tensor indexado; v debe ser el nombre (sin
ndices) de un campo vectorial. Por ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(liediff(v,a([i,j],[])*b([],[k],l)))$
k
%2
%2
%2
(%t2) b
(v
a
+ v
a
+ v
a
)
,l
i j,%2
,j i %2
,i %2 j
%1 k
%1 k
%1 k
+ (v
b
- b
v
+ v
b
) a
,%1 l
,l ,%1
,l ,%1
i j

rediff (ten )

[Funcion]
Calcula todas las instrucciones idiff que aparezcan en la expresion tensorial ten.

Captulo 25: itensor

403

undiff (expr )

[Funcion]
Devuelve una expresi
on equivalente a expr pero con todas las derivadas de los objetos
indexados reemplazadas por la forma nominal de la funcion idiff.

evundiff (expr )

[Funcion]
Equivale a undiff seguido de ev y rediff.
La raz
on de esta operaci
on es evaluar de forma sencilla expresiones que no pueden
ser directamente evaluadas en su forma derivada. Por ejemplo, lo siguiente provoca
un error:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) icurvature([i,j,k],[l],m);
Maxima encountered a Lisp error:
Error in $ICURVATURE [or a callee]:
$ICURVATURE [or a callee] requires less than three arguments.

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
Sin embargo, si icurvature se da en forma nominal, puede ser evaluada utilizando
evundiff:
(%i3) ishow(icurvature([i,j,k],[l],m))$
l
(%t3)
icurvature
i j k,m
(%i4) ishow(evundiff(%))$
l
l
%1
l
%1
(%t4) - ichr2
- ichr2
ichr2
- ichr2
ichr2
i k,j m
%1 j
i k,m
%1 j,m
i k
l
+ ichr2

l
+ ichr2

%1
ichr2

l
+ ichr2

%1
ichr2

i j,k m
%1 k
i j,m
%1 k,m
i j
Nota: en versiones antiguas de Maxima, las formas derivadas de los smbolos de
Christoffel no se podan evaluar. Este fallo ha sido subsanado, de manera que
evundiff ya no se necesita en expresiones como esta:
(%i5) imetric(g);
(%o5)
done
(%i6) ishow(ichr2([i,j],[k],l))$
k %3
g
(g
- g
+ g
)
j %3,i l
i j,%3 l
i %3,j l
(%t6) ----------------------------------------2
k %3

404

Manual de Maxima

g
(g
- g
+ g
)
,l
j %3,i
i j,%3
i %3,j
+ ----------------------------------2

flush (expr, tensor_1, tensor_2, ...)

[Funcion]
Iguala a cero en la expresi
on expr todas las apariciones de tensor i que no tengan
ndices de derivadas.

flushd (expr, tensor_1, tensor_2, ...)

[Funcion]
Iguala a cero en la expresi
on expr todas las apariciones de tensor i que tengan ndices
de derivadas

flushnd (expr, tensor, n )

[Funcion]
Iguala a cero en expr todas las apariciones del objeto diferenciado tensor que tenga
n o m
as ndices de derivadas, como demuestra el siguiente ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(a([i],[J,r],k,r)+a([i],[j,r,s],k,r,s))$
J r
j r s
(%t2)
a
+ a
i,k r
i,k r s
(%i3) ishow(flushnd(%,a,3))$
J r
(%t3)
a
i,k r

coord (tensor_1, tensor_2, ...)

[Funcion]
Le da a tensor i la propiedad de diferenciacion coordenada, que la derivada del vector contravariante cuyo nombre es uno de los tensor i es igual a la delta de Kronecker. Por ejemplo, si se ha hecho coord(x) entonces idiff(x([],[i]),j) da
kdelta([i],[j]). La llamada coord devuelve una lista de todos los objetos indexados con esta propiedad.

remcoord (tensor_1, tensor_2, ...)


remcoord (all)

[Funcion]
[Funcion]
Borra todas las propiedades de diferenciacion coordenada de tensor_i que hayan sido
establecidas por la funci
on coord. La llamada remcoord(all) borra esta propiedad
de todos los objetos indexados.

makebox (expr )

[Funcion]
Muestra expr de la misma manera que lo hace show; sin embargo, cualquier tensor de
dAlembert que aparezca en expr estara indicado por []. Por ejemplo, []p([m],[n])
representa g([],[i,j])*p([m],[n],i,j).

conmetderiv (expr, tensor )

[Funcion]
Simplifica expresiones que contengan derivadas ordinarias tanto de las formas covariantes como contravariantes del tensor metrico. Por ejemplo, conmetderiv puede

Captulo 25: itensor

405

relacionar la derivada del tensor metrico contravariante con los smbolos de Christoffel, como se ve en el ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(g([],[a,b],c))$
a b
g
,c

(%t2)

(%i3) ishow(conmetderiv(%,g))$
%1 b
a
%1 a
b
(%t3)
- g
ichr2
- g
ichr2
%1 c
%1 c

simpmetderiv (expr )
simpmetderiv (expr [, stop ])

[Funcion]
[Funcion]
Simplifica expresiones que contienen productos de las derivadas del tensor metrico.
La funci
on simpmetderiv reconoce dos identidades:
ab
g

ab
g

,d

+ g

ab
g

= (g

bc

bc,d

a
g )
= (kdelta )
= 0
bc ,d
c ,d

de donde
ab
g

ab
g

,d

= - g
bc

g
bc,d

y
ab
ab
g
g
= g
g
,j ab,i
,i ab,j
que se deduce de las simetras de los smbolos de Christoffel.
La funci
on simpmetderiv tiene un argumento opcional, el cual detiene la funcion
despues de la primera sustitucion exitosa en un expresion producto. La funcion
simpmetderiv tambien hace uso de la variable global flipflag que determina como
aplicar una ordenaci
on can
onica a los ndices de los productos.
Todo esto se puede utilizar para conseguir buenas simplificaciones que seran difciles
o imposibles de conseguir, lo que se demuestra en el siguiente ejemplo, que utiliza
explcitamente las simplificaciones parciales de simpmetderiv:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp

406

Manual de Maxima

(%i2) imetric(g);
(%o2)
done
(%i3) ishow(g([],[a,b])*g([],[b,c])*g([a,b],[],d)*g([b,c],[],e))$
a b b c
(%t3)
g
g
g
g
a b,d b c,e
(%i4) ishow(canform(%))$
errexp1 has improper indices
-- an error. Quitting. To debug this try debugmode(true);
(%i5) ishow(simpmetderiv(%))$
a b b c
(%t5)
g
g
g
g
a b,d b c,e
(%i6) flipflag:not flipflag;
(%o6)
true
(%i7) ishow(simpmetderiv(%th(2)))$
a b b c
(%t7)
g
g
g
g
,d
,e
a b b c
(%i8) flipflag:not flipflag;
(%o8)
false
(%i9) ishow(simpmetderiv(%th(2),stop))$
a b b c
(%t9)
- g
g
g
g
,e
a b,d b c
(%i10) ishow(contract(%))$
b c
(%t10)
- g
g
,e
c b,d
Vease tambien weyl.dem para un ejemplo que utiliza simpmetderiv y conmetderiv
para simplificar contracciones del tensor de Weyl.

flush1deriv (expr, tensor )

[Funcion]
Iguala a cero en expr todas las apariciones de tensor que tengan exactamente un
ndice derivado.

25.2.4 Tensores en espacios curvos


imetric (g )
imetric

[Funcion]
[Variable de sistema]
Especifica la metrica haciendo la asignacion de la variable imetric:g , ademas las
propiedades de contracci
on de la metrica g se fijan ejecutando las instrucciones
defcon(g ), defcon(g,g,kdelta). La variable imetric, a la que no se le asigna
ning
un valor por defecto, tiene el valor de la metrica que se le haya asignado con la
instrucci
on imetric(g ).

Captulo 25: itensor

407

idim (n )

[Funcion]
Establece las dimensiones de la metrica. Tambien inicializa las propiedades de antisimetra de los smbolos de Levi-Civita para la dimension dada.

ichr1 ([i, j, k ])

[Funcion]
Devuelve el smbolo de Christoffel de primera especie dado por la definicion
(g
+ g
- g
)/2 .
ik,j
jk,i
ij,k
Para evaluar los smbolos de Christoffel de una metrica determinada, a la variable
imetric hay que asignarle un nombre como en el ejemplo de la descripcion de chr2.

ichr2 ([i, j ], [k ])

[Funcion]
Devuelve el smbolo de Christoffel de segunda especie dado por la definicion
ks
ichr2([i,j],[k]) = g
(g
+ g
- g
)/2
is,j
js,i
ij,s

icurvature ([i, j, k ], [h ])

[Funcion]
Devuelve el tensor de curvatura de Riemann en terminos de los smbolos de Christoffel
de segunda especie (ichr2). Se utiliza la siguiente notacion:
h
h
h
%1
h
icurvature
= - ichr2
- ichr2
ichr2
+ ichr2
i j k
i k,j
%1 j
i k
i j,k
h
%1
+ ichr2
ichr2
%1 k
i j

covdiff (expr, v_1, v_2, ...)

[Funcion]
Devuelve la derivada covariante de expr respecto de las variables v i en terminos de
los smbolos de Christoffel de segunda especie (ichr2). Para evaluarlos debe hacerse
ev(expr,ichr2).
(%i1)
(%o1)
(%i2)
Enter
Enter
Enter
Enter

load(itensor);
/share/tensor/itensor.lisp
entertensor()$
tensor name: a;
a list of the covariant indices: [i,j];
a list of the contravariant indices: [k];
a list of the derivative indices: [];
k
(%t2)
a
i j
(%i3) ishow(covdiff(%,s))$
k
%1
k
%1
k
(%t3)
- a
ichr2
- a
ichr2
+ a
i %1
j s
%1 j
i s
i j,s

408

Manual de Maxima

%1

+ ichr2

a
%1 s i j
(%i4) imetric:g;
(%o4)
g
(%i5) ishow(ev(%th(2),ichr2))$
%1 %4 k
g
a
(g
- g
+ g
)
i %1
s %4,j
j s,%4
j %4,s
(%t5) - -----------------------------------------2
%1 %3 k
g
a
(g
- g
+ g
)
%1 j
s %3,i
i s,%3
i %3,s
- -----------------------------------------2
k %2 %1
g
a
(g
- g
+ g
)
i j
s %2,%1
%1 s,%2
%1 %2,s
k
+ ------------------------------------------- + a
2
i j,s

lorentz_gauge (expr )

[Funcion]
Impone la condici
on de Lorentz sustituyendo por 0 todos los objetos indexados de
expr que tengan un ndice derivado identico a un ndice contravariante.

igeodesic_coords (expr, nombre )

[Funcion]
Elimina los smbolos no diferenciados de Christoffel y las primeras derivadas del tensor
metrico de expr. El argumento nombre de la funcion igeodesic_coords se refiere a
la metrica nombre si aparece en expr, mientras que los coeficientes de conexion deben
tener los nombres ichr1 y/o ichr2. El siguiente ejemplo hace la verificacion de la
identidad cclica satisfecha por el tensor de curvatura de Riemann haciendo uso de la
funci
on igeodesic_coords.
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(icurvature([r,s,t],[u]))$
u
u
%1
u
(%t2) - ichr2
- ichr2
ichr2
+ ichr2
r t,s
%1 s
r t
r s,t
u
+ ichr2
%1 t
(%i3) ishow(igeodesic_coords(%,ichr2))$
u

%1
ichr2

r s

Captulo 25: itensor

409

(%t3)

ichr2
- ichr2
r s,t
r t,s
(%i4) ishow(igeodesic_coords(icurvature([r,s,t],[u]),ichr2)+
igeodesic_coords(icurvature([s,t,r],[u]),ichr2)+
igeodesic_coords(icurvature([t,r,s],[u]),ichr2))$
u
u
u
u
(%t4) - ichr2
+ ichr2
+ ichr2
- ichr2
t s,r
t r,s
s t,r
s r,t
u
- ichr2
r t,s
(%i5) canform(%);
(%o5)

u
+ ichr2
r s,t

25.2.5 Sistemas de referencia m


oviles
Maxima puede hacer c
alculos utilizando sistemas de referencia moviles, los cuales pueden
ser ortonormales o cualesquiera otros.
Para utilizar sistemas de referencia, primero se debe asignar a la variable iframe_flag
el valor true. Con esto se hace que los smbolos de Christoffel, ichr1 y ichr2, sean reemplazados por los coeficientes icc1 y icc2 en los calculos, cambiando as el comportamiento
de covdiff y icurvature.
El sistema de referencia se define con dos tensores: el campo del sistema de referencia
inverso (ifri, la base dual tetrad) y la metrica del sistema de referencia ifg. La metrica
del sistema de referencia es la matriz identidad en los sistemas de referencia ortonormales,
o la metrica de Lorentz en sistemas de referencia ortonormales en el espacio-tiempo de
Minkowski. El campo del sistema de referencia inverso define la base del sistema de referencia con vectores unitarios. Las propiedades contractivas se definen para el campo y la
metrica del sistema de referencia.
Si iframe_flag vale true, muchas expresiones de itensor utilizan la metrica ifg en
lugar de la metrica definida por imetric para incrementar y reducir ndices.
IMPORTANTE: Asignando a la variable iframe_flag el valor true NO deshace las
propiedades contractivas de una metrica establecidas con una llamada a defcon o a imetric.
Si se utiliza el campo del sistema de referencia, es mejor definir la metrica asignando su
nombre a la variable imetric y NO hacer una llamada a la funcion imetric.
Maxima utiliza estos dos tensores para definir los coeficientes del sistema de referencia:
ifc1 y and ifc2, los cuales forman parte de los coeficientes de conexion icc1 y icc2, tal
como demuestra el siguiente ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) iframe_flag:true;
(%o2)
true
(%i3) ishow(covdiff(v([],[i]),j))$

410

Manual de Maxima

i
i
%1
v
+ icc2
v
,j
%1 j

(%t3)
(%i4) ishow(ev(%,icc2))$

%1
i
i
v
ifc2
+ v
%1 j
,j

(%t4)
(%i5) ishow(ev(%,ifc2))$

%1
i %2
i
v
ifg
ifc1
+ v
%1 j %2
,j

(%t5)

(%i6) ishow(ev(%,ifc1))$
%1
i %2
v
ifg
(ifb
- ifb
+ ifb
)
j %2 %1
%2 %1 j
%1 j %2
i
(%t6)
-------------------------------------------------- + v
2
,j
(%i7) ishow(ifb([a,b,c]))$
%3
%4
(%t7)
(ifri
- ifri
) ifr
ifr
a %3,%4
a %4,%3
b
c
Se utiliza un metodo alternativo para calcular el sistema de referencia ifb si la variable
iframe_bracket_form vale false:
(%i8) block([iframe_bracket_form:false],ishow(ifb([a,b,c])))$
%6
%5
%5
%6
(%t8)
ifri
(ifr
ifr
- ifr
ifr )
a %5
b
c,%6
b,%6
c

ifb

[Variable]
Es el sistema de referencia soporte. La contribucion de la metrica del campo a los
coeficientes de conexi
on se expresa utilizando:
- ifb
+ ifb
+ ifb
c a b
b c a
a b c
ifc1
= -------------------------------abc
2
El sistema de referencia soporte se define en terminos del campo y la metrica del
sistema de referencia. Se utilizan dos metodos alternativos dependiendo del valor de
frame_bracket_form. Si vale true (que es el valor por defecto) o si itorsion_flag
vale true:
d

Captulo 25: itensor

ifb = ifr
abc
b

411

ifr

(ifri
c

- ifri
a d,e

- ifri
a e,d

itr
a f

)
d e

En otro caso:
e
ifb
= (ifr
abc
b

d
d
e
ifr
- ifr
ifr
c,e
b,e
c

) ifri
a d

[Variable]

icc1
Coeficientes de conexi
on de primera especie. Se definen en itensor como
icc1
= ichr1
- ikt1
- inmc1
abc
abc
abc
abc

En esta expresi
on, si iframe_flag vale true, el smbolo de Christoffel ichr1 se
reemplaza por el coeficiente de conexion del sistema de referencia ifc1. Si itorsion_
flag vale false, ikt1 ser
a omitido. Tambien se omite si se utiliza una base, ya que
la torsi
on ya est
a calculada como parte del sistema de referencia.
[Variable]

icc2
Coeficientes de conexi
on de segunda especie. Se definen en itensor como
c
c
c
c
icc2
= ichr2
- ikt2
- inmc2
ab
ab
ab
ab

En esta expresi
on, si la variable iframe_flag vale true, el smbolo de Christoffel
ichr2 se reemplaza por el coeficiente de conexion del sistema de referencia ifc2. Si
itorsion_flag vale false, ikt2 se omite. Tambien se omite si se utiliza una base
de referncia. Por u
ltimo, si inonmet_flag vale false, se omite inmc2.

ifc1

[Variable]
Coeficiente del sistema de referencia de primera especie, tambien conocido como coeficientes de rotaci
on de Ricci. Este tensor represnta la contribucion de la metrica del
sistema de referencia al coeficiente de conexion de primera especie, definido como
- ifb
+ ifb
+ ifb
c a b
b c a
a b c
ifc1
= -------------------------------abc
2

412

ifc2

Manual de Maxima

[Variable]
Coeficiente del sistema de referencia de segunda especie. Este tensor representa la
contribuci
on de la metrica del sistema de referencia al coeficiente de conexion de
segunda especie, definido como
c
cd
ifc2
= ifg
ifc1
ab
abd

ifr

[Variable]
El campo del sistema de referencia. Se contrae con el campo inverso ifri para formar
la metrica del sistema de referencia, ifg.

ifri

[Variable]
Campo inverso del sistema de referencia. Especifica la base del sistema de referencia
(vectores de la base dual).

ifg

[Variable]
La metrica del sistema de referencia. Su valor por defecto es kdelta, pero puede
cambiarse utilizando components.

ifgi

[Variable]
La metrica inversa del sistema de referencia. Se contrae con la metrica ifg para dar
kdelta.
[Variable opcional]

iframe_bracket_form
Valor por defecto: true
Especifica c
omo se calcula ifb.

25.2.6 Torsi
on y no metricidad
Maxima trabaja con conceptos como la torsion y la no metricidad. Cuando la variable
itorsion_flag vale true, la contribucion de la torsion se a~
nade a los coeficientes de
conexion. Tambien se a~
naden las componentes de no metricidad cuando inonmet_flag
vale true.

inm

[Variable]
Vector de no metricidad. La no metricidad conforme se define a partir de la derivada
covariante del tensor metrico. La derivada covariante del tensor metrico, que normalmente es nula, se calcula, cuando inonmet_flag vale true, como
g
=- g inm
ij;k
ij
k
[Variable]
Permutaci
on covariante de las componentes del vector de no metricidad. Se define
como

inmc1

inm

- inm

- g

inm

Captulo 25: itensor

413

ab
c
a bc
ac
b
inmc1
= -----------------------------abc
2
(Sustit
uyase g por ifg si se utiliza una metrica para el sistema de referencia.)
[Variable]
Permutaci
on contravariante de las componentes del vector de no metricidad. Se utiliza
en los coeficientes de conexi
on si inonmet_flag vale true. Se define como

inmc2

c
c
cd
kdelta - kdelta inm + g
inm g
c
a
b
a
b
d ab
inmc2
= ------------------------------------------ab
2
-inm

(Sustit
uyase g por ifg si se utiliza una metrica para el sistema de referencia.)

ikt1

[Variable]
Permutaci
on covariante del tensor de permutacion, tambien conocido como contorsi
on. Se define como
d
d
d
-g
itr - g
itr
- itr
g
ad
cb
bd
ca
ab cd
ikt1
= ---------------------------------abc
2
(Sustit
uyase g por ifg si se utiliza una metrica para el sistema de referencia.)

ikt2

[Variable]
Permutaci
on contravariante del tensor de permutacion, tambien conocido como contorsi
on. Se define como
c
cd
ikt2
= g
ikt1
ab
abd
(Sustit
uyase g por ifg si se utiliza una metrica para el sistema de referencia.)

itr

[Variable]
Tensor de torsi
on. Para una metrica con torsion, la diferenciacion covariante iterada
de una funci
on escalar no conmuta, tal como demuestra el siguiente ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp

414

Manual de Maxima

(%i2) imetric:g;
(%o2)
g
(%i3) covdiff(covdiff(f([],[]),i),j)
-covdiff(covdiff(f([],[]),j),i)$
(%i4) ishow(%)$
%4
%2
(%t4)
f
ichr2
- f
ichr2
,%4
j i
,%2
i j
(%i5) canform(%);
(%o5)
0
(%i6) itorsion_flag:true;
(%o6)
true
(%i7) covdiff(covdiff(f([],[]),i),j)
-covdiff(covdiff(f([],[]),j),i)$
(%i8) ishow(%)$
%8
%6
(%t8)
f
icc2
- f
icc2
- f
+ f
,%8
j i
,%6
i j
,j i
,i j
(%i9) ishow(canform(%))$
%1
%1
(%t9)
f
icc2
- f
icc2
,%1
j i
,%1
i j
(%i10) ishow(canform(ev(%,icc2)))$
%1
%1
(%t10)
f
ikt2
- f
ikt2
,%1
i j
,%1
j i
(%i11) ishow(canform(ev(%,ikt2)))$
%2 %1
%2 %1
(%t11)
f
g
ikt1
- f
g
ikt1
,%2
i j %1
,%2
j i %1
(%i12) ishow(factor(canform(rename(expand(ev(%,ikt1))))))$
%3 %2
%1
%1
f
g
g
(itr
- itr
)
,%3
%2 %1
j i
i j
(%t12)
-----------------------------------2
(%i13) decsym(itr,2,1,[anti(all)],[]);
(%o13)
done
(%i14) defcon(g,g,kdelta);
(%o14)
done
(%i15) subst(g,nounify(g),%th(3))$
(%i16) ishow(canform(contract(%)))$
%1
(%t16)
- f
itr
,%1
i j

Captulo 25: itensor

415

25.2.7 Algebra
exterior
Con el paquete itensor se pueden realizar operaciones en campos tensoriales covariantes
antisimetricos. Un campo tensorial totalmente antisimetrrico de rango (0,L) se corresponde
con una L-forma diferencial. Sobre estos objetos se define una operacion que se llama
producto exterior.
Desafortunadamente no hay consenso entre los autores a la hora de definir el producto
exterior. Algunos autores prefieren una definicion que se corresponde con la nocion de
antisimetrizaci
on, con lo que el producto externo de dos campos vectoriales se definira
como
a a - a a
i j
j i
a /\ a = ----------i
j
2
De forma m
as general, el producto de una p-forma por una q-forma se definira como
1
k1..kp l1..lq
A
/\ B
= ------ D
A
B
i1..ip
j1..jq
(p+q)! i1..ip j1..jq k1..kp l1..lq
donde D es la delta de Kronecker.
Otros autores, sin embargo, prefieren una definicion geometrica que se corresponde
con la noci
on del elemento de volumen,
a /\ a = a a - a a
i
j
i j
j i
y, en el caso general,
1
k1..kp l1..lq
A
/\ B
= ----- D
A
B
i1..ip
j1..jq
p! q! i1..ip j1..jq k1..kp l1..lq
Puesto que itensor un paquete de algebra tensorial, la primera de estas dos definiciones parece la m
as natural. Sin embargo, muchas aplicaciones hacen uso de la segunda
definicion. Para resolver el dilema, se define una variable que controla el comportamiento
del producto exteriort: si igeowedge_flag vale false (el valor por defecto), se utiliza la
primera definici
on, si vale true, la segunda.

[Operador]
El operador del producto exterior se representa por el smbolo ~. Este es un operador binario. Sus argumentos deben ser expresiones que tengan escalares, tensores
covariantes de rango uno o tensores covariantes de rango l que hayan sido declarados
antisimetricos en todos los ndices covariantes.
El comportamiento del operador del producto exterior se controla con la variable
igeowedge_flag, como en el ejemplo siguiente:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(a([i])~b([j]))$
a b - b a
i j
i j

416

Manual de Maxima

(%t2)
(%i3)
(%o3)
(%i4)

(%t4)
(%i5)
(%o5)
(%i6)
(%t6)
(%i7)
(%t7)

------------2
decsym(a,2,0,[anti(all)],[]);
done
ishow(a([i,j])~b([k]))$
a
b + b a
- a
b
i j k
i j k
i k j
--------------------------3
igeowedge_flag:true;
true
ishow(a([i])~b([j]))$
a b - b a
i j
i j
ishow(a([i,j])~b([k]))$
a
b + b a
- a
b
i j k
i j k
i k j

[Operador]
La barra vertical | representa la operacion "contraccion con un vector". Cuando un
tensor covariante totalmente antisimetrico se contrae con un vector contravariante, el
resultado no depende del ndice utilizado para la contraccion. As, es posible definir
la operaci
on de contracci
on de forma que no se haga referencia al ndice.
En el paquete itensor la contraccion con un vector se realiza siempre respecto del
primer ndice de la ordenaci
on literal. Ejemplo:
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) decsym(a,2,0,[anti(all)],[]);
(%o2)
done
(%i3) ishow(a([i,j],[])|v)$
%1
(%t3)
v
a
%1 j
(%i4) ishow(a([j,i],[])|v)$
%1
(%t4)
- v
a
%1 j
Notese que es primordial que los tensores utilizados junto con el operador | se declaren
totalmente antisimetricos en sus ndices covariantes. De no ser as, se pueden obtener
resultados incorrectos.

extdiff (expr, i )

[Funcion]
Calcula la derivada exterior de expr con respecto del ndice i. La derivada exterior
se define formalmente como el producto exterior del operador de la derivada parcial
y una forma diferencial. Por lo tanto, esta operacion tambien se ve afectada por el
valor que tome la variable igeowedge_flag. Ejemplo:
(%i1) load(itensor);

Captulo 25: itensor

417

(%o1)
/share/tensor/itensor.lisp
(%i2) ishow(extdiff(v([i]),j))$
v
- v
j,i
i,j
(%t2)
----------2
(%i3) decsym(a,2,0,[anti(all)],[]);
(%o3)
done
(%i4) ishow(extdiff(a([i,j]),k))$
a
- a
+ a
j k,i
i k,j
i j,k
(%t4)
-----------------------3
(%i5) igeowedge_flag:true;
(%o5)
true
(%i6) ishow(extdiff(v([i]),j))$
(%t6)
v
- v
j,i
i,j
(%i7) ishow(extdiff(a([i,j]),k))$
(%t7)
- (a
- a
+ a
)
k j,i
k i,j
j i,k

hodge (expr )

[Funcion]

Calcula el dual de Hodge expr. Por ejemplo:


(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)

load(itensor);
/share/tensor/itensor.lisp
imetric(g);
done
idim(4);
done
icounter:100;
100
decsym(A,3,0,[anti(all)],[])$

(%i6) ishow(A([i,j,k],[]))$
(%t6)

A
i j k

(%i7) ishow(canform(hodge(%)))$
%1 %2 %3 %4
levi_civita
g
A
%1 %102 %2 %3 %4
(%t7)
----------------------------------------6
(%i8) ishow(canform(hodge(%)))$
%1 %2 %3 %8
%4 %5 %6 %7

418

Manual de Maxima

(%t8) levi_civita

levi_civita

g
%1 %106
g
g
g
A
/6
%2 %107 %3 %108 %4 %8 %5 %6 %7

(%i9) lc2kdt(%)$
(%i10) %,kdelta$
(%i11) ishow(canform(contract(expand(%))))$
(%t11)
- A
%106 %107 %108
[Variable opcional]
Valor por defecto: false
Controla el comportamiento del producto exterior y de la derivada exterior. Cuando
vale false, la noci
on de formas diferenciales se corresponde con el de campo tensorial
covariante totalmente antisimetrico. Cuando vale true, las formas diferenciales se
corresponden con la idea de elemento de volumen.

igeowedge_flag

25.2.8 Exportando expresiones en TeX


El paquete itensor dispone de soporte limitado para exportar expresiones con tensores
a TeX. Puesto que las expresiones de itensor son llamadas a funciones, puede que la
instrucci
on habitual en Maxima, tex, no devuleva los resultados esperados. Se puede utlizar el comando tentex, que tratara de traducir expresiones tensoriales a objetos de TeX
correctamente indexados.

tentex (expr )

[Funcion]
Para utilizar la funci
on tentex, primero se debe cargar tentex, tal como muestra el
siguiente ejemplo:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load(itensor);
/share/tensor/itensor.lisp
load(tentex);
/share/tensor/tentex.lisp
idummyx:m;

m
ishow(icurvature([j,k,l],[i]))$
m1
i
m1
i
i
(%t4) ichr2
ichr2
- ichr2
ichr2
- ichr2
j k
m1 l
j l
m1 k
j l,k
i
+ ichr2
j k,l
(%i5) tentex(%)$
$$\Gamma_{j\,k}^{m_1}\,\Gamma_{l\,m_1}^{i}-\Gamma_{j\,l}^{m_1}\,

Captulo 25: itensor

419

\Gamma_{k\,m_1}^{i}-\Gamma_{j\,l,k}^{i}+\Gamma_{j\,k,l}^{i}$$
Notese la asignaci
on de la variable idummyx para evitar la aparicion del smbolo del
porcentaje en la expresi
on en TeX, que puede dar errores de compilacion.
Tengase en cuenta que esta version de la funcion tentex es experimental.

25.2.9 Interactuando con ctensor


El paquete itensor genera c
odigo Maxima que luego puede ser ejecutado en el contexto
del paquete ctensor. La funci
on que se encarga de esta tarea es ic_convert.

ic_convert (eqn )

[Function]
Convierte la ecuaci
on eqn del entorno itensor a una sentencia de asignacion de
ctensor. Sumas implcitas sobre ndices mudos se hacen explcitas mientras que objetos indexados se transforman en arreglos (los subndices de los arreglos se ordenan
poniendo primero los covariantes seguidos de los contravariantes. La derivada de un
objeto indexado se reemplazara por por la forma nominal de diff tomada con respecto a ct_coords con el subndice correspondiente al ndice derivado. Los smbolos
de Christoffel ichr1 ichr2 se traducen a lcs y mcs, respectivamente. Ademas, se
a~
naden bucles do para la sumacion de todos los ndices libres, de manera que la sentencia traducida pueda ser evaluada haciendo simplemente ev. Los siguientes ejemplos
muestran las funcionalidades de esta funcion.
(%i1) load(itensor);
(%o1)
/share/tensor/itensor.lisp
(%i2) eqn:ishow(t([i,j],[k])=f([],[])*g([l,m],[])*a([],[m],j)
*b([i],[l,k]))$
k
m
l k
(%t2)
t
= f a
b
g
i j
,j i
l m
(%i3) ic_convert(eqn);
(%o3) for i thru dim do (for j thru dim do (
for k thru dim do
t
: f sum(sum(diff(a , ct_coords ) b
i, j, k
m
j
i, l, k
g

, l, 1, dim), m, 1, dim)))
l, m
(%i4) imetric(g);
(%o4)
done
(%i5) metricconvert:true;
(%o5)
true
(%i6) ic_convert(eqn);
(%o6) for i thru dim do (for j thru dim do (
for k thru dim do
t
: f sum(sum(diff(a , ct_coords ) b
i, j, k
m
j
i, l, k

420

Manual de Maxima

lg

, l, 1, dim), m, 1, dim)))
l, m

25.2.10 Palabras reservadas


Las siguientes palabras son utilizadas por el paquete itensor internamente, por lo que no
deberan ser modificadas por el usuario:
Palabra
Comentarios
-----------------------------------------indices2() Versi
on interna de indices()
conti
Lista los
ndices contravariantes
covi
Lista los
ndices covariantes
deri
Lista los
ndices de derivadas
name
Devuelve el nombre de un objeto indexado
concan
irpmon
lc0
_lc2kdt0
_lcprod
_extlc

Captulo 26: ctensor

421

26 ctensor
26.1 Introducci
on a ctensor
El paquete ctensor dispone de herramientas para manipular componentes de tensores.
Para poder hacer uso de ctensor es necesario cargarlo previamente en memoria ejecutando
load(ctensor). Para comenzar una sesion interactiva con ctensor, ejecutar la funcion
csetup(). Primero se le pregunta al usuario la dimension de la variedad. Si la dimension
es 2, 3 o 4, entonces la lista de coordenadas sera por defecto [x,y], [x,y,z] o [x,y,z,t],
respectivamente. Estos nombres pueden cambiarse asignando una nueva lista de coordenadas a la variable ct_coords (que se describe mas abajo), siendo el usuario advertido
sobre este particular. Se debe tener cuidado en evitar que los nombres de las coordenadas
entren en conflicto con los nombres de otros objetos en Maxima.
A continuaci
on, el usuario introduce la metrica, bien directamente, o desde un fichero
especificando su posici
on ordinal. La metrica se almacena en la matriz lg. Por u
ltimo, la
metrica inversa se obtiene y almacena en la matriz ug. Tambien se dispone de la opcion de
efectuar todos los c
alculos en serie de potencias.
Se desarrolla a continuaci
on un ejemplo para la metrica estatica, esferica y simetrica, en
coordenadas est
andar, que se aplicara posteriormente al problema de derivar las ecuaciones
de vaco de Einstein (de las que se obtiene la solucion de Schwarzschild). Muchas de las
funciones de ctensor se mostrar
an en los ejemplos para la metrica estandar.
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) csetup();
Enter the dimension of the coordinate system:
4;
Do you wish to change the coordinate names?
n;
Do you want to
1. Enter a new metric?
2. Enter a metric from a file?
3. Approximate a metric with a Taylor series?
1;
Is the matrix 1. Diagonal
Answer 1, 2, 3 or 4
1;
Row 1 Column 1:
a;
Row 2 Column 2:
x^2;
Row 3 Column 3:
x^2*sin(y)^2;
Row 4 Column 4:

2. Symmetric

3. Antisymmetric

4. General

422

Manual de Maxima

-d;
Matrix entered.
Enter functional dependencies with the DEPENDS function or N if none
depends([a,d],x);
Do you wish to see the metric?
y;
[ a 0
0
0 ]
[
]
[
2
]
[ 0 x
0
0 ]
[
]
[
2
2
]
[ 0 0
x sin (y)
0 ]
[
]
[ 0 0
0
- d ]
(%o2)
done
(%i3) christof(mcs);
a
x
(%t3)
mcs
= --1, 1, 1
2 a

(%t4)

1
mcs
= 1, 2, 2
x

(%t5)

1
mcs
= 1, 3, 3
x
d
x
mcs
= --1, 4, 4
2 d

(%t6)

(%t7)

x
mcs
= - 2, 2, 1
a

(%t8)

cos(y)
mcs
= -----2, 3, 3
sin(y)

(%t9)

mcs

2
x sin (y)
= - ---------

Captulo 26: ctensor

423

3, 3, 1
(%t10)

mcs
= - cos(y) sin(y)
3, 3, 2
d
x
mcs
= --4, 4, 1
2 a
done

(%t11)
(%o11)

26.2 Funciones y variables para ctensor


26.2.1 Inicializaci
on y preparaci
on
csetup ()

[Funcion]
Es la funci
on del paquete ctensor que inicializa el paquete y permite al usuario
introducir una metrica de forma interactiva. Vease ctensor para mas detalles.

cmetric (dis )
cmetric ()

[Funcion]
[Funcion]
Es la funci
on del paquete ctensor que calcula la metrica inversa y prepara el paquete
para c
alculos ulteriores.
Si cframe_flag vale false, la funcion calcula la metrica inversa ug a partir de la
matriz lg definida por el usuario. Se calcula tambien la metrica determinante y se
almacena en la variable gdet. Ademas, el paquete determina si la metrica es diagonal
y ajusta el valor de diagmetric de la forma apropiada. Si el argumento opcional dis
est
a presente y no es igual a false, el usuario podra ver la metrica inversa.
Si cframe_flag vale true, la funcion espera que los valores de fri (la matriz del sistema de referencia inverso) y lfg (la matriz del sistema de referencia) esten definidos.
A partir de ellos, se calculan la matriz del sistema de referencia fr y su metrica ufg.

ct_coordsys (sistema_coordenadas, extra_arg )


ct_coordsys (sistema_coordenadas )

[Funcion]
[Funcion]
Prepara un sistema de coordenadas predefinido y una metrica. El argumento sistema coordenadas puede ser cualquiera de los siguientes smbolos:

S
mbolo
Dim Coordenadas
Descripci
on/comentarios
-------------------------------------------------------------------------------cartesian2d
2 [x,y]
Sistema de coordenadas cartesianas en
polar
2 [r,phi]
Sistema de coordenadas polares
elliptic
2 [u,v]
Sistema de coordenadas el
pticas
confocalelliptic
2 [u,v]
Coordenadas el
pticas confocales
bipolar
2 [u,v]
Sistema de coordenas bipolares
parabolic
2 [u,v]
Sistema de coordenadas parab
olicas
cartesian3d
3 [x,y,z]
Sistema de coordenadas cartesianas en

424

Manual de Maxima

polarcylindrical
ellipticcylindrical
confocalellipsoidal
bipolarcylindrical
paraboliccylindrical
paraboloidal
conical
toroidal
spherical
oblatespheroidal
oblatespheroidalsqrt
prolatespheroidal
prolatespheroidalsqrt
ellipsoidal
cartesian4d
spherical4d
exteriorschwarzschild
interiorschwarzschild
kerr_newman

3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4

[r,theta,z]
[u,v,z]
[u,v,w]
[u,v,z]
[u,v,z]
[u,v,phi]
[u,v,w]
[u,v,phi]
[r,theta,phi]
[u,v,phi]
[u,v,phi]
[u,v,phi]
[u,v,phi]
[r,theta,phi]
[x,y,z,t]
[r,theta,eta,phi]
[t,r,theta,phi]
[t,z,u,v]
[t,r,theta,phi]

Polares en 2D con cil


ndrica z
El
pticas en 2D con cil
ndrica z
Elipsoidales confocales
Bipolares en 2D con cil
ndrica z
Parab
olicas en 2D con cil
ndrica z
Coordenadas paraboloidales
Coordenadas c
onicas
Coordenadas toroidales
Sistema de coordenadas esf
ericas
Coordenadas esferoidales obleadas
Coordenadas esferoidales prolatas

Coordenadas elipsoidales
Sistema de coordenadas cartesianas en
Sistema de coordenadas esf
ericas en 4
M
etrica de Schwarzschild
M
etrica interior de Schwarzschild
M
etrica sim
etrica con carga axial

El argumento sistema_coordenadas puede ser tambien una lista de funciones de


transformaci
on, seguida de una lista que contenga los nombres de las coordenadas.
Por ejemplo, se puede especificar una metrica esferica como se indica a continuacion:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
r*sin(theta),[r,theta,phi]]);
(%o2)
done
(%i3) lg:trigsimp(lg);
[ 1 0
0
]
[
]
[
2
]
(%o3)
[ 0 r
0
]
[
]
[
2
2
]
[ 0 0
r cos (theta) ]
(%i4) ct_coords;
(%o4)
[r, theta, phi]
(%i5) dim;
(%o5)
3
Las funciones de transformacion se pueden utilizar tambien si cframe_flag vale true:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac

Captulo 26: ctensor

425

(%i2) cframe_flag:true;
(%o2)
true
(%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
r*sin(theta),[r,theta,phi]]);
(%o3)
done
(%i4) fri;
[ cos(phi) cos(theta) - cos(phi) r sin(theta) - sin(phi) r cos(theta)
[
(%o4) [ sin(phi) cos(theta) - sin(phi) r sin(theta)
cos(phi) r cos(theta)
[
[
sin(theta)
r cos(theta)
0
(%i5) cmetric();
(%o5)
false
(%i6) lg:trigsimp(lg);
[ 1 0
0
]
[
]
[
2
]
(%o6)
[ 0 r
0
]
[
]
[
2
2
]
[ 0 0
r cos (theta) ]
El argumento opcional extra arg puede ser cualquiera de los siguientes:
cylindrical indica a ct_coordsys que a~
nada una coordenada cilndrica mas.
minkowski indica a ct_coordsys que a~
nada una coordenada mas con signatura
metrica negativa.
all indica a ct_coordsys que llame a cmetric y a christof(false) tras activar la
metrica.
Si la variable global verbose vale true, ct_coordsys muestra los valores de dim,
ct_coords, junto con lg o lfg y fri, dependiendo del valor de cframe_flag.

init_ctensor ()

[Funcion]

Inicializa el paquete ctensor.


La funci
on init_ctensor reinicializa el paquete ctensor. Borra todos los arreglos ("arrays") y matrices utilizados por ctensor y reinicializa todas las variables,
asignando a dim el valor 4 y la metrica del sistema de referencia a la de Lorentz.

26.2.2 Los tensores del espacio curvo


El proposito principal del paquete ctensor es calcular los tensores del espacio (-tiempo)
curvo, en especial los tensores utilizados en relatividad general.
Cuando se utiliza una metrica, ctensor puede calcular los siguientes tensores:
lg -- ug
\
\
lcs -- mcs -- ric -- uric

]
]
]
]
]

426

Manual de Maxima

\
tracer - ein -- lein

\
\
riem -- lriem -- weyl
\
uriem

El paquete ctensor tambien puede trabajar con sistemas de referencia moviles. Si


cframe_flag vale true, se pueden calcular los siguientes tensores:
lfg -- ufg
\
fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
\
| \
\
\
lg -- ug
|
weyl
tracer - ein -- lein
|\
| riem
|
\uriem

christof (dis )

[Funcion]
Es una funci
on del paquete ctensor. Calcula los smbolos de Christoffel de ambos
tipos. El argumento dis determina que resultados se mostraran de forma inmediata.
Los smbolos de Christoffel de primer y segundo tipo se almacenan en los arreglos lcs[i,j,k] y mcs[i,j,k], respectivamente, y se definen simetricos en sus dos
primeros ndices. Si el argumento de christof es lcs o mcs entonces seran mostrados u
nicamente los valores no nulos de lcs[i,j,k] o mcs[i,j,k], respectivamente.
Si el argumento es all entonces se mostraran los valores no nulos de lcs[i,j,k] y
mcs[i,j,k]. Si el argumento vale false entonces no se mostraran los elementos. El
arreglo mcs[i,j,k] est
a definido de tal modo que el u
ltimo ndice es contravariante.

ricci (dis )

[Funcion]
Es una funci
on del paquete ctensor. La funcion ricci calcula las componentes
covariantes (simetricas) ric[i,j] del tensor de Ricci. Si el argumento dis vale true,
entonces se muestran las componentes no nulas.

uricci (dis )

[Funcion]
Esta funci
on calcula en primer lugar las componentes covariantes ric[i,j] del tensor
de Ricci. Despues se calcula el tensor de Ricci utilizando la metrica contravariante.
Si el valor del argumento dis vale true, entonces se mostraran directamente las componentes uric[i,j] (el ndice i es covariante y el j contravariante). En otro caso,
ricci(false) simplemente calculara las entradas del arreglo uric[i,j] sin mostrar
los resultados.

Captulo 26: ctensor

427

scurvature ()

[Funcion]
Devuelve la curvatura escalar (obtenida por contraccion del tensor de Ricci) de la
variedad de Riemannian con la metrica dada.

einstein (dis )

[Funcion]
Es una funci
on del paquete ctensor. La funcion einstein calcula el tensor de Einstein despues de que los smbolos de Christoffel y el tensor de Ricci hayan sido calculados (con las funciones christof y ricci). Si el argumento dis vale true, entonces
se mostrar
an los valores no nulos del tensor de Einstein ein[i,j], donde j es el ndice
contravariante. La variable rateinstein causara la simplificacion racional de estas
componentes. Si ratfac vale true entonces las componentes tambien se factorizaran.

leinstein (dis )

[Funcion]
Es el tensor covariante de Einstein. La funcion leinstein almacena los valores del
tensor covariante de Einstein en el arreglo lein. El tensor covariante de Einstein
se calcula a partir del tensor de Einstein ein multiplicandolo por el tensor metrico.
Si el argumento dis vale true, entonces se mostraran los valores no nulos del tensor
covariante de Einstein.

riemann (dis )

[Funcion]
Es una funci
on del paquete ctensor. La funcion riemann calcula el tensor de curvatura de Riemann a partir de la metrica dada y de los smbolos de Christoffel correspondientes. Se utiliza el siguiente convenio sobre los ndices:
l
_l
_l
_l
_m
_l
_m
R[i,j,k,l] = R
= |
- |
+ |
|
- |
|
ijk
ij,k
ik,j
mk
ij
mj
ik
Esta notaci
on es consistente con la notacion utilizada por el paquete itensor y su
funci
on icurvature. Si el argumento opcional dis vale true, se muestran las componentes no nulas u
nicas de riem[i,j,k,l]. Como en el caso del tensor de Einstein,
ciertas variables permiten controlar al usuario la simplificacion de las componentes
del tensor de Riemann. Si ratriemann vale true, entonces se hara la simplificacion
racional. Si ratfac vale true, entonces se factorizaran todas las componentes.
Si la variable cframe_flag vale false, el tensor de Riemann se calcula directamente
a partir de los smbolos de Christoffel. Si cframe_flag vale true, el tensor covariante
de Riemann se calcula a partir de los coeficientes del campo.

lriemann (dis )

[Funcion]
Es el tensor covariante de Riemann (lriem[]).
Calcula el tensor covariante de Riemann como un arreglo lriem. Si el argumento dis
vale true, s
olo se muestran los valores no nulos.
Si la variable cframe_flag vale true, el tensor covariante de Riemann se calcula
directamente de los coeficientes del campo. En otro caso, el tensor de Riemann (3,1)
se calcula en primer lugar.
Para m
as informaci
on sobre la ordenacion de los ndices, vease riemann.

uriemann (dis )

[Funcion]
Calcula las componentes contravariantes del tensor de curvatura de Riemann como

un arreglo uriem[i,j,k,l]. Estos


se muestran si dis vale true.

428

Manual de Maxima

rinvariant ()

[Funcion]
Calcula la invariante de Kretchmann (kinvariant) obtenida por contraccion de los
tensores.
lriem[i,j,k,l]*uriem[i,j,k,l].
Este objeto no se simplifica automaticamente al ser en ocasiones muy grande.

weyl (dis )

[Funcion]
Calcula el tensor conforme de Weyl. Si el argumento dis vale true, se le mostraran
al usuario las componentes no nulas weyl[i,j,k,l]. En otro caso, estas componentes ser
an u
nicamente calculadas y almacenadas. Si la variable ratweyl vale true,
entonces las componentes se simplifican racionalmente; si ratfac vale true los resultados tambien se simplificar
an.

26.2.3 Desarrollo de Taylor


El paquete ctensor puede truncar resultados e interpretarlos como aproximaciones de Taylor. Este comportamiento se controla con lavariable ctayswitch; cuando vale true, ctensor
utiliza internamente la funci
on ctaylor cuando simplifica resultados.
La funci
on ctaylor es llamada desde las siguientes funciones del paquete ctensor:
Funci
on
Comentarios
--------------------------------christof()
S
olo para mcs
ricci()
uricci()
einstein()
riemann()
weyl()
checkdiv()

ctaylor ()

[Funcion]
La funci
on ctaylor trunca su argumento convirtiendolo en un desarrollo de Taylor
por medio de la funci
on taylor e invocando despues a ratdisrep. Esto tiene el efecto
de eliminar terminos de orden alto en la variable de expansion ctayvar. El orden de
los terminos que deben ser eliminados se define ctaypov; el punto alrededor del cual
se desarrolla la serie se especifica en ctaypt.
Como ejemplo, considerese una sencilla metrica que es una perturbacion de la de
Minkowski. Sin a~
nadir restricciones, incluso una metrica diagonal produce expansiones del tensor de Einstein que pueden llegar a ser muy complejas:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load(ctensor);
/share/tensor/ctensor.mac
ratfac:true;
true
derivabbrev:true;
true
ct_coords:[t,r,theta,phi];

Captulo 26: ctensor

429

(%o4)
[t, r, theta, phi]
(%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],[0,0,0,r^2*sin(theta)^2]);
[ - 1 0 0
0
]
[
]
[ 0
1 0
0
]
[
]
(%o5)
[
2
]
[ 0
0 r
0
]
[
]
[
2
2
]
[ 0
0 0
r sin (theta) ]
(%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
[ h11
0
0
0 ]
[
]
[ 0
h22
0
0 ]
(%o6)
[
]
[ 0
0
h33
0 ]
[
]
[ 0
0
0
h44 ]
(%i7) depends(l,r);
(%o7)
[l(r)]
(%i8) lg:lg+l*h;
[ h11 l - 1
0
0
0
]
[
]
[
0
h22 l + 1
0
0
]
[
]
(%o8)
[
2
]
[
0
0
r + h33 l
0
]
[
]
[
2
2
]
[
0
0
0
r sin (theta) + h44 l ]
(%i9) cmetric(false);
(%o9)
done
(%i10) einstein(false);
(%o10)
done
(%i11) ntermst(ein);
[[1, 1], 62]
[[1, 2], 0]
[[1, 3], 0]
[[1, 4], 0]
[[2, 1], 0]
[[2, 2], 24]
[[2, 3], 0]
[[2, 4], 0]
[[3, 1], 0]
[[3, 2], 0]
[[3, 3], 46]

430

Manual de Maxima

[[3, 4],
[[4, 1],
[[4, 2],
[[4, 3],
[[4, 4],
(%o12)

0]
0]
0]
0]
46]
done

Sin embargo, si se recalcula este ejemplo como una aproximacion lineal en la variable
l, se obtienen expresiones m
as sencillas:
(%i14) ctayswitch:true;
(%o14)
(%i15) ctayvar:l;
(%o15)
(%i16) ctaypov:1;
(%o16)
(%i17) ctaypt:0;
(%o17)
(%i18) christof(false);
(%o18)
(%i19) ricci(false);
(%o19)
(%i20) einstein(false);
(%o20)
(%i21) ntermst(ein);
[[1, 1], 6]
[[1, 2], 0]
[[1, 3], 0]
[[1, 4], 0]
[[2, 1], 0]
[[2, 2], 13]
[[2, 3], 2]
[[2, 4], 0]
[[3, 1], 0]
[[3, 2], 2]
[[3, 3], 9]
[[3, 4], 0]
[[4, 1], 0]
[[4, 2], 0]
[[4, 3], 0]
[[4, 4], 9]
(%o21)
(%i22) ratsimp(ein[1,1]);
2
2 4
(%o22) - (((h11 h22 - h11 ) (l ) r
r

true
l
1
0
done
done
done

done
2
2
- 2 h33 l
r ) sin (theta)
r r

Captulo 26: ctensor

431

2
2
4
2
- 2 h44 l
r - h33 h44 (l ) )/(4 r sin (theta))
r r
r

Esta capacidad del paquete ctensor puede ser muy u


til; por ejemplo, cuando se
trabaja en zonas del campo gravitatorio alejadas del origen de este.

26.2.4 Campos del sistema de referencia


Cuando la variable cframe_flag vale true, el paquete ctensor realiza sus calculos utilizando un sistema de referencia m
ovil.

frame_bracket (fr, fri, diagframe )

[Funcion]

Es el sistema de referencia soporte (fb[]).


Calcula el soporte del sistema de referencia de acuerdo con la siguiente definicion:
c
ifb

c
= ( ifri

ab

c
- ifri

d,e

d
) ifr

e,d

e
ifr

26.2.5 Clasificaci
on algebraica
Una nueva funcionalidad (Noviembre de 2004) de ctensor es su capacidad de obtener
la clasificaci
on de Petrov de una metrica espaciotemporal de dimension 4. Para una demostraci
on de esto vease el fichero share/tensor/petrov.dem.

nptetrad ()

[Funcion]
Calcula la cuaterna nula de Newman-Penrose (np). Vease petrov para un ejemplo.

La cuaterna nula se construye bajo la suposicion de que se esta utilizando una metrica
tetradimensional ortonormal con signatura metrica (-,+,+,+). Los componentes de la
cuaterna nula se relacionan con la inversa de la matriz del sistema de referencia de la
siguiente manera:
np = (fri + fri ) / sqrt(2)
1
1
2
np = (fri - fri ) / sqrt(2)
2
1
2
np = (fri + %i fri ) / sqrt(2)
3
3
4
np = (fri - %i fri ) / sqrt(2)
4
3
4

432

Manual de Maxima

psi (dis )

[Funcion]
Calcula los cinco coeficientes de Newman-Penrose psi[0]...psi[4]. Si dis vale true,
se muestran estos coeficientes. Vease petrov para un ejemplo.
Estos coeficientes se calculan a partir del tensor de Weyl.

petrov ()

[Funcion]
Calcula la clasificaci
on de Petrov de la metrica caracterizada por psi[0]...psi[4].
Por ejemplo, lo que sigue demuestra como obtener la clasificacion de Petrov para la
metrica de Kerr:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
(%o2)
true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)
done
(%i4) ug:invert(lg)$
(%i5) weyl(false);
(%o5)
done
(%i6) nptetrad(true);
(%t6) np =
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[

sqrt(r - 2 m)
--------------sqrt(2) sqrt(r)

sqrt(r)
--------------------sqrt(2) sqrt(r - 2 m)

sqrt(r - 2 m)
--------------sqrt(2) sqrt(r)

sqrt(r)
- --------------------sqrt(2) sqrt(r - 2 m)

r
------sqrt(2)

r
------sqrt(2)

]
]
]
]
]
0
]
]
]
%i r sin(theta) ]
--------------- ]
sqrt(2)
]
]
%i r sin(theta) ]
- --------------- ]
sqrt(2)
]

sqrt(r)
sqrt(r - 2 m)
(%t7) npi = matrix([- ---------------------, ---------------, 0, 0],
sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)
sqrt(r)
sqrt(r - 2 m)
[- ---------------------, - ---------------, 0, 0],
sqrt(2) sqrt(r - 2 m)
sqrt(2) sqrt(r)
1
%i
[0, 0, ---------, --------------------],

Captulo 26: ctensor

433

sqrt(2) r

sqrt(2) r sin(theta)

1
%i
[0, 0, ---------, - --------------------])
sqrt(2) r
sqrt(2) r sin(theta)
(%o7)
(%i7) psi(true);
(%t8)

(%t9)

(%t10)

done
psi = 0
0
psi = 0
1
m
psi = -2
3
r

(%t11)

psi = 0
3

(%t12)

psi = 0
4
done

(%o12)
(%i12) petrov();
(%o12)

La funci
on de clasificaci
on de Petrov se basa en el algoritmo publicado en "Classifying
geometries in general relativity: III Classification in practice" de Pollney, Skea, and
dInverno, Class. Quant. Grav. 17 2885-2902 (2000). Excepto para algunos ejemplos
sencillos, esta implementaci
on no ha sido exhaustivamente probada, por lo que puede
contener errores.

26.2.6 Torsi
on y no metricidad
El paquete ctensor es capaz de calcular e incluir coeficientes de torsion y no metricidad en
los coeficientes de conexi
on.
Los coeficientes de torsi
on se calculan a partir de un tensor suministrado por el usuario,
tr, el cual debe ser de rango (2,1). A partir de ah, los coeficientes de torsion kt se calculan
de acuerdo con las siguientes f
ormulas:
m
m
m
tr
- g
tr
- tr
g
im kj
jm
ki
ij km
kt
= ------------------------------ijk
2
- g

434

Manual de Maxima

k
km
kt
= g
kt
ij
ijm
Los coeficientes de no metricidad se calculan a partir de un vector de no metricidad,
nm, suministrado por el usuario. A partir de ah, los coeficientes de no metricidad, nmc, se
calculan como se indica a continuacion:
k
k
km
D - D nm + g
nm g
k
i j
i
j
m ij
nmc = -----------------------------ij
2
-nm

donde D es la delta de Kronecker.

contortion (tr )

[Funcion]

Calcula los coeficientes (2,1) de contorsion del tensor de torsion tr.

nonmetricity (nm )

[Funcion]
Calcula los coeficientes (2,1) de no metricidad del vector de no metricidad nm.

26.2.7 Otras funcionalidades


ctransform (M )

[Funcion]
Es una funci
on del paquete ctensor. Realiza una transformacion de coordenadas a
partir de una matriz cuadrada simetrica M arbitraria. El usuario debe introducir las
funciones que definen la transformacion.

findde (A, n )

[Funcion]
Devuelve la lista de las ecuaciones diferenciales que corresponden a los elementos
del arreglo cuadrado n-dimensional. El argumento n puede ser 2 o 3; deindex es
una lista global que contiene los ndices de A que corresponden a estas ecuaciones
diferenciales. Para el tensor de Einstein (ein), que es un arreglo bidimensional, si
se calcula para la metrica del ejemplo de mas abajo, findde devuelve las siguientes
ecuaciones diferenciales independientes:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load(ctensor);
/share/tensor/ctensor.mac
derivabbrev:true;
true
dim:4;
4
lg:matrix([a,0,0,0],[0,x^2,0,0],[0,0,x^2*sin(y)^2,0],[0,0,0,-d]);
[ a 0
0
0 ]
[
]

Captulo 26: ctensor

[
[ 0
[
[
[ 0
[
[ 0

(%o4)

(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)
(%i9)

435

2
x

2
2
x sin (y)

]
0 ]
]
]
0 ]
]
- d ]

depends([a,d],x);
[a(x), d(x)]
ct_coords:[x,y,z,t];
[x, y, z, t]
cmetric();
done
einstein(false);
done
findde(ein,2);

2
(%o9) [d x - a d + d, 2 a d d
x - a (d ) x - a d d x + 2 a d d
x
x x
x
x
x
x
2
2
- 2 a d , a x + a - a]
x
x
(%i10) deindex;
(%o10)

[[1, 1], [2, 2], [4, 4]]

cograd ()

[Funcion]
Calcula el gradiente covariante de una funcion escalar permitiendo al usuario elegir
el nombre del vector correspondiente, tal como ilustra el ejemplo que acompa~
na a la
definici
on de la funci
on contragrad.

contragrad ()

[Function]
Calcula el gradiente contravariante de una funcion escalar permitiendo al usuario
elegir el nombre del vector correspondiente, tal como muestra el siguiente ejemplo
para la metrica de Schwarzschild:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

load(ctensor);
/share/tensor/ctensor.mac
derivabbrev:true;
true
ct_coordsys(exteriorschwarzschild,all);
done
depends(f,r);
[f(r)]
cograd(f,g1);
done

436

Manual de Maxima

(%i6) listarray(g1);
(%o6)
(%i7) contragrad(f,g2);
(%o7)
(%i8) listarray(g2);

(%o8)

[0, f , 0, 0]
r
done
f r - 2 f m
r
r
[0, -------------, 0, 0]
r

dscalar ()

[Funcion]
Calcula el tensor de dAlembertian de la funcion escalar una vez se han declarado las
dependencias. Por ejemplo:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) derivabbrev:true;
(%o2)
true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)
done
(%i4) depends(p,r);
(%o4)
[p(r)]
(%i5) factor(dscalar(p));
2
p
r - 2 m p
r + 2 p r - 2 m p
r r
r r
r
r
(%o5)
-------------------------------------2
r

checkdiv ()

[Funcion]
Calcula la divergencia covariante del tensor de segundo rango (mixed second rank
tensor), cuyo primer ndice debe ser covariante, devolviendo las n componentes correspondientes del campo vectorial (la divergencia), siendo n = dim.

cgeodesic (dis )

[Funcion]
Es una funci
on del paquete ctensor que calcula las ecuaciones geodesicas del
movimiento para una metrica dada, las cuales se almacenan en el arreglo geod[i].
Si el argumento dis vale true entonces se muestran estas ecuaciones.

bdvac (f )

[Funcion]
Genera las componentes covariantes de las ecuaciones del campo vaco de la teora
gravitacional de Brans- Dicke gravitational. El campo escalar se especifica con el
argumento f, el cual debe ser el nombre de una funcion no evaluada (precedida de
ap
ostrofo) con dependencias funcionales, por ejemplo, p(x).
Las componentes del tensor covariante (second rank covariant field tensor) se almacenan en el arreglo bd.

Captulo 26: ctensor

437

invariant1 ()

[Funcion]
Genera el tensor de Euler-Lagrange (ecuaciones de campo) para la densidad invariante
de R^2. Las ecuaciones de campo son las componentes del arreglo inv1.

26.2.8 Utilidades
diagmatrixp (M )

[Funcion]

Devuelve true si M es una matriz diagonal o un arreglo bidimensional.

symmetricp (M )

[Funcion]

Devuelve true si M es una matriz simetrica o un arreglo bidimensional.

ntermst (f )

[Funcion]

Permite hacerse una idea del tama~


no del tensor f.

cdisplay (ten )

[Funcion]
Muestra todos los elementos del tensor ten como arreglo multidimensional. Tensors
de rango 0 y 1, as como otros tipos de variables, se muestran como en ldisplay.
Tensors de rango 2 se muestran como matrices bidimensionales, mientras que tensores
de mayor rango se muestran como listas de matrices bidimensionales. Por ejemplo, el
tensor de Riemann de la metrica de Schwarzschild se puede ver como:
(%i1) load(ctensor);
(%o1)
/share/tensor/ctensor.mac
(%i2) ratfac:true;
(%o2)
true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)
done
(%i4) riemann(false);
(%o4)
done
(%i5) cdisplay(riem);
[ 0
0
0
0
[
[
2
[
3 m (r - 2 m)
m
2 m
[ 0 - ------------- + -- - ---0
0
[
4
3
4
[
r
r
r
[
riem
= [
m (r - 2 m)
1, 1
[ 0
0
----------0
[
4
[
r
[
[
m (r - 2 m)
[ 0
0
0
----------[
4
[
r

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

438

Manual de Maxima

[
[
[
[
riem
= [
1, 2
[
[
[
[
[
[
[
[
[
riem
= [
1, 3
[
[
[
[
[
[
[
[
[
riem
= [
1, 4
[
[
[
[
[

2 m (r - 2 m)
------------4
r

m (r - 2 m)
- ----------4
r

]
0 ]
]
]
]
0 ]
]
0 ]
]
0 ]

m (r - 2 m)
- ----------4
r

[
0
[
[
2 m
[ - -----------riem
= [
2
2, 1
[
r (r - 2 m)
[
[
0
[
[
0
[
2 m
[ -----------[ 2

]
]
]
]
]
]
]
]
]
]

]
]
]
]
]
]
]
]
]
]

0 ]
]
]
0 ]
]
]
]
0 ]
]
0 ]

]
]
]

Captulo 26: ctensor

439

[ r
[
[
[
riem
= [
2, 2
[
[
[
[
[
[
[
[

(r - 2 m)
0

0
m
- -----------2
r (r - 2 m)

[
[
[
[
riem
= [
2, 3
[
[
[
[
[

[
[
[
[
riem
= [
2, 4
[
[
[
[
[

]
]
m
]
------------ ]
2
]
r (r - 2 m) ]
]
0
]
]
0
]

m
r

0 ]
]
0 ]
]
]
0 ]
]
]
0 ]

[ 0

0 ]

[
[
[
[
riem
= [
3, 1
[
[
[
[

]
]
0
]
]
]
0
]
]
]
]
m
]
- ------------ ]
2
]
r (r - 2 m) ]

m
-----------2
r (r - 2 m)

0 ]
]
]
0 ]
]
]
]
0 ]
]
0 ]

440

Manual de Maxima

[
[ 0
[
riem
= [
3, 2
[ 0
[
[
[ 0
[
m
[ - [
r
[
[
[ 0
riem
= [
3, 3
[
[ 0
[
[
[ 0
[
[
[
[
[
riem
= [
3, 4
[
[
[
[

m
r

m
- r

]
]
]
]
]
0
]
]
]
0
]
]
2 m - r
]
------- + 1 ]
r
]
0

]
]
0
]
]
2 m ]
- --- ]
r ]
]
0
]

[
0
[
[
0
[
riem
= [
0
4, 1
[
[
2
[ m sin (theta)
[ ------------[
r
[ 0
[
[ 0

]
0 ]
]
]
0 ]
]
]
0 ]

0 ]
]
0 ]
]
0 ]
]
]
]
0 ]
]
0 ]
]
0 ]

Captulo 26: ctensor

441

[
riem
= [ 0
4, 2
[
[
[
[ 0
[
[
[
[
[
riem
= [
4, 3
[
[
[
[
[

2
m sin (theta)
------------r

[
2
[
m sin (theta)
[ - ------------[
r
[
[
[
riem
= [
0
4, 4
[
[
[
[
[
0
[
[
[
0
(%o5)

]
0 ]
]
]
]
0 ]
]

2
2 m sin (theta)
- --------------r

2
m sin (theta)
- ------------r

0 ]
]
0 ]
]
0 ]
]
]
]
0 ]
]

2
2 m sin (theta)
--------------r

done

deleten (L, n )

[Funcion]

Devuelve una nueva lista consistente en L sin su n-esimo elemento.

26.2.9 Variables utilizadas por ctensor


dim

[Variable opcional]
Valor por defecto: 4
Es la dimensi
on de la variedad, que por defecto sera 4. La instruccion dim: n establecer
a la dimensi
on a cualquier otro valor n.

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

442

Manual de Maxima

diagmetric

[Variable opcional]

Valor por defecto: false


Si diagmetric vale true se utilizaran rutinas especiales para calcular todos los objetos
geometricos teniendo en cuenta la diagonalidad de la metrica, lo que redundara en
una reducci
on del tiempo de calculo. Esta opcion se fija automaticamente por csetup
si se especifica una metrica diagonal.
[Variable opcional]
Provoca que se realicen simplificaciones trigonometricas cuando se calculan tensores.
La variable ctrgsimp afecta u
nicamente a aquellos calculos que utilicen un sistema
de referencia m
ovil.

ctrgsimp

[Variable opcional]
Provoca que los c
alculos se realicen respecto de un sistema de referencia movil.

cframe_flag

[Variable opcional]
Obliga a que se calcule tambien el tensor de contorsion junto con los coeficientes de
conexi
on. El propio tensor de contorsion se calcula con la funcion contortion a partir
del tensor tr suministrado por el usuario.

ctorsion_flag

[Variable opcional]
Obliga a que se calculen tambien los coeficientes de no metricidad junto con los
coeficientes de conexi
on. Los coeficientes de no metricidad se calculan con la funcion
nonmetricity a partir del vector de no metricidadnm suministrado por el usuario.

cnonmet_flag

[Variable opcional]
Si vale true, obliga a que ciertos calculos de ctensor se lleven a cabo utilizando desarrollos de series de Taylor. Estos calculos hacen referencia a las funciones christof,
ricci, uricci, einstein y weyl.

ctayswitch

[Variable opcional]
Variable utilizada para desarrollos de Taylor cuando la variable ctayswitch vale true.

ctayvar

[Variable opcional]
M
aximo exponente utilizado en los desarrollos de Taylor cuando ctayswitch vale
true.

ctaypov

[Variable opcional]
Punto alrededor del cual se realiza un desarrollo de Taylor cuando ctayswitch vale
true.

ctaypt

gdet

[Variable opcional]
Es el determinante del tensor metrico lg, calculado por cmetric cuando cframe_flag
vale false.
[Variable opcional]
Obliga a que la funci
on christof aplique la simplificacion racional.

ratchristof

Captulo 26: ctensor

rateinstein

443

[Variable opcional]

Valor por defecto: true


Si vale true entonces se har
a la simplificacion racional en los componentes no nulos
de los tensores de Einstein; si ratfac vale true entonces las componentes tambien
ser
an factorizadas.

ratriemann

[Variable opcional]

Valor por defecto: true


Es una de las variables que controlan la simplificacion de los tensores de Riemann; si
vale true, entonces se llevar
a a cabo la simplificacion racional; si ratfac vale true
entonces las componentes tambien seran factorizadas.

ratweyl

[Variable opcional]

Valor por defecto: true


Si vale true, entonces la funcion weyl llevara a cabo la simplificacion racional de los
valores del tensor de Weyl. si ratfac vale true entonces las componentes tambien
ser
an factorizadas.

lfg

[Variable]
Es la covariante de la metrica del sistema de referencia. Por defecto, esta inicializada
al sistema de referencia tetradimensional de Lorentz con signatura (+,+,+,-). Se utiliza
cuando cframe_flag vale true.

ufg

[Variable]
Es la metrica del sistema de referencia inverso. La calcula lfg cuando cmetric es
invocada tomando cframe_flag el valor true.

riem

[Variable]
Es el tensor (3,1) de Riemann. Se calcula cuando se invoca la funcion riemann. Para
informaci
on sobre el indexado, vease la descripcion de riemann.
Si cframe_flag vale true, riem se calcula a partir del tensor covariante de Riemann
lriem.

lriem

[Variable]

Es el tensor covariante de Riemann. Lo calcula la funcion lriemann.

uriem

[Variable]

Es el tensor contravariante de Riemann. Lo calcula la funcion uriemann.


[Variable]

ric
Es el tensor de Ricci. Lo calcula la funcion ricci.

[Variable]

uric
Es el tensor contravariante de Ricci. Lo calcula la funcion uricci.

lg

[Variable]
Es el tensor metrico. Este tensor se debe especificar (como matriz cuadrada de orden
dim) antes de que se hagan otros calculos.

444

Manual de Maxima

[Variable]

ug
Es la inversa del tensor metrico. Lo calcula la funcion cmetric.

[Variable]

weyl
Es el tensor de Weyl. Lo calcula la funcion weyl.

fb

[Variable]
Son los coeficientes del sistema de referencia soporte, tal como los calcula frame_
bracket.
[Variable]
Es la invariante de Kretchmann, tal como la calcula la funcion rinvariant.

kinvariant
np

[Variable]
Es la cuaterna nula de Newman-Penrose, tal como la calcula la funcion nptetrad.

npi

[Variable]
Es la cuaterna nula "raised-index Newman-Penrose". Lo calcula la funcion nptetrad.
Se define como ug.np. El producto np.transpose(npi) es constante:
(%i39) trigsimp(np.transpose(npi));
[ 0
[
[ - 1
(%o39)
[
[ 0
[
[ 0

- 1

0 ]
]
0 ]
]
1 ]
]
0 ]

tr

[Variable]
Tensor de rango 3 suministrado por el usuario y que representa una torsion. Lo utiliza
la funci
on contortion.

kt

[Variable]
Es el tensor de contorsi
on, calculado a partir de tr por la funcion contortion.

nm
Vector de no metricidad suministrado por el usuario.
nonmetricity.

nmc

[Variable]
Lo utiliza la funcion

[Variable]
Son los coeficientes de no metricidad, calculados a partir de nm por la funcion
nonmetricity.
[Variable del sistema]
Variable que indica si el paquete de tensores se ha inicializado. Utilizada por csetup
y reinicializada por init_ctensor.

tensorkill

ct_coords
Valor por defecto: []

[Variable opcional]

Captulo 26: ctensor

445

La variable ct_coords contiene una lista de coordenadas. Aunque se define normalmente cuando se llama a la funcion csetup, tambien se pueden redefinir las coordenadas con la asignaci
on ct_coords: [j1, j2, ..., jn] donde j es el nuevo nombre
de las coordenadas. Vease tambien csetup.

26.2.10 Nombres reservados


Los siguientes nombres se utilizan internamente en el paquete ctensor y no deberan redefinirse:
Nombre
Descripci
on
--------------------------------------_lg()
Toma el valor lfg si se utiliza m
etrica del sistema de referencia,
lg en otro caso
_ug()
Toma el valor ufg si se utiliza m
etrica del sistema de referencia,
ug en otro caso
cleanup()
Elimina elementos de la lista deindex
contract4() Utilizada por psi()
filemet()
Utilizada por csetup() cuando se lee la m
etrica desde un fichero
findde1()
Utilizada por findde()
findde2()
Utilizada por findde()
findde3()
Utilizada por findde()
kdelt()
Delta de Kronecker (no generalizada)
newmet()
Utilizada por csetup() para establecer una m
etrica interactivamente
setflags()
Utilizada por init_ctensor()
readvalue()
resimp()
sermet()
Utilizada por csetup() para definir una m
etrica como serie de Taylor
txyzsum()
tmetric()
M
etrica del sistema de referencia, utilizada por cmetric()
cuando cframe_flag:true
triemann()
Tensor de Riemann en la base del sistema de referencia, se utiliza cuando
cframe_flag:true
tricci()
Tensor de Ricci en la base del sistema de referencia, se utiliza cuando
cframe_flag:true
trrc()
Coeficientes de rotaci
on de Ricci, utilizada por christof()
yesp()

Captulo 27: atensor

447

27 atensor
27.1 Introducci
on a atensor
El paquete atensor contiene funciones para la manipulacion algebraica de tensores. Para
hacer uso de atensor es necesario cargarlo en memoria haciendo load(atensor), seguido
de una llamada a la funci
on init_atensor.
La parte m
as importante de atensor es una batera de reglas de simplificacion para el
producto no conmutativo ("."). El paquete atensor reconoce algunos tipos de algebras; las
correspondientes reglas de simplificacion se activan tan pronto como se hace una llamada a
la funcion init_atensor.
Las capacidades de atensor se pueden demostrar definiendo el algebra de cuaterniones
como un
algebra de Clifford Cl(0,2) con una base de dos vectores. Las tres unidades imaginarias son los dos vectores de la base junto con su producto:
i = v
1

j = v
2

k = v . v
1
2

Aunque el paquete atensor incluye su propia definicion para el algebra de cuaterniones,


no se utiliza en el siguiente ejemplo, en el cual se construye la tabla de multiplicacion como
una matriz:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)

(%o5)

(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)
(%i9)

load(atensor);
/share/tensor/atensor.mac
init_atensor(clifford,0,0,2);
done
atensimp(v[1].v[1]);
- 1
atensimp((v[1].v[2]).(v[1].v[2]));
- 1
q:zeromatrix(4,4);
[ 0 0 0 0 ]
[
]
[ 0 0 0 0 ]
[
]
[ 0 0 0 0 ]
[
]
[ 0 0 0 0 ]
q[1,1]:1;
1
for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
done
q[1,4]:q[4,1]:v[1].v[2];
v . v
1
2
for i from 2 thru 4 do for j from 2 thru 4 do
q[i,j]:atensimp(q[i,1].q[1,j]);

448

Manual de Maxima

(%o9)
(%i10) q;

done

[
1
v
v
v . v ]
[
1
2
1
2 ]
[
]
[
v
- 1
v . v
- v
]
[
1
1
2
2
]
(%o10)
[
]
[
v
- v . v
- 1
v
]
[
2
1
2
1
]
[
]
[ v . v
v
- v
- 1
]
[ 1
2
2
1
]
El paquete atensor reconoce como vectores de la base smbolos indexados, donde el
smbolo es el almacenado en asymbol y el ndice va desde 1 hasta adim. Para smbolos
indexados, y s
olo para ellos, se eval
uan las formas bilineales sf, af y av. La evaluacion
sustituye el valor de aform[i,j] en lugar de fun(v[i],v[j]), donde v representa el valor
de asymbol y fun es af o sf; o sustituye v[aform[i,j]] en lugar de av(v[i],v[j]).
Huelga decir que las funciones sf, af y av pueden volver a definirse.
Cuando se carga el paquete atensor se hacen las siguientes asignaciones de variables:
dotscrules:true;
dotdistrib:true;
dotexptsimp:false;
Si se quiere experimentar con una algebra no asociativa, tambien se puede igualar la
variable dotassoc a false. En tal caso, sin embargo, atensimp no sera siempre capaz de
realizar las simplificaciones deseadas.

27.2 Funciones y variables para atensor


init_atensor (alg_type, opt_dims )
init_atensor (alg_type )

[Funcion]
[Funcion]
Inicializa el paquete atensor con el tipo de algebra especificado, alg type, que puede
ser una de las siguientes:
universal: El
algebra universal no tiene reglas de conmutacion.
grassmann: El
algebra de Grassman se define mediante la relacion de conmutacion
u.v+v.u=0.
clifford: El
algebra de Clifford se define mediante la regla de conmutacion
u.v+v.u=-2*sf(u,v) donde sf es una funcion escalar simetrica. Para esta algebra,
opt dims puede contener hasta tres enteros no negativos, que representan el n
umero
de dimensiones positivas, degeneradas y negativas, respectivamente, de esta algebra.
Si se suministran los valores de opt dims, atensor configurara los valores de adim y
aform de forma apropiada. En otro caso, adim tomara por defecto el valor 0 y aform
no se definir
a.
symmetric: El
algebra simetrica se define mediante la regla de conmutacion u.vv.u=0.

Captulo 27: atensor

449

symplectic: El
algebra simplectica se define mediante la regla de conmutacion u.vv.u=2*af(u,v), donde af es una funcion escalar antisimetrica. Para el algebra
simplectica, opt dims puede contener hasta dos enteros no negativos, que representan las dimensiones no degeneradas y degeneradas, respectivamente. Si se suministran
los valores de opt dims, atensor configurara los valores de adim y aform de forma
apropiada. En otro caso, adim tomara por defecto el valor 0 y aform no se definira.
lie_envelop: El
algebra de la envolvente de Lie se define mediante la regla de conmutaci
on u.v-v.u=2*av(u,v), donde av es una funcion antisimetrica.
La funci
on init_atensor tambien reconoce algunos tipos de algebras predefinidas:
complex implementa el
algebra de n
umeros complejos como un algebra de
Clifford Cl(0,1).
La llamada init_atensor(complex) equivale a init_
atensor(clifford,0,0,1).
quaternion implementa el algebra de cuaterniones.
La llamada init_
atensor(quaternion) equivale a init_atensor(clifford,0,0,2).
pauli implementa el
algebra de Pauli como un algebra de Clifford Cl(3,0). La llamada
init_atensor(pauli) equivale a init_atensor(clifford,3).
dirac implementa el
algebra de Dirac como un algebra de Clifford Cl(3,1). La llamada
init_atensor(dirac) equivale a init_atensor(clifford,3,0,1).

atensimp (expr )

[Funcion]
Simplifica la expresi
on algebraica de un tensor expr de acuerdo con las reglas configuradas mediante una llamada a init_atensor. La simplificacion incluye la aplicacion
recursiva de las reglas de conmutacion y llamadas a sf, af y av siempre que sea
posible. Se utiliza un algoritmo que asegure que la funcion termina siempre, incluso
en el caso de expresiones complejas.

[Funcion]
Tipo de
algebra. Valores v
alidos son universal, grassmann, clifford, symmetric,
symplectic y lie_envelop.

alg_type

[Variable]

adim

Valor por defecto: 0


La dimensi
on del
algebra. El paquete atensor utiliza el valor de adim para determinar
si un objeto indexado es un vector valido para la base. Vease abasep.
[Variable]
Valor por defecto: ident(3)
Valores por defecto para las formas bilineales sf, af y av. El valor por defecto es la
matriz identidad ident(3).

aform

asymbol

[Variable]

Valor por defecto: v


Smbolo para los vectores base.

sf (u, v )

[Funcion]
Una funci
on escalar simetrica que se utiliza en relaciones de conmutacion. La implementaci
on por defecto analiza si los dos argumentos son vectores base mediante
abasep y en tal caso sustituye el valor correspondiente de la matriz aform.

450

Manual de Maxima

af (u, v )

[Funcion]
Una funci
on escalar antisimetrica que se utiliza en relaciones de conmutacion. La
implementaci
on por defecto analiza si los dos argumentos son vectores base mediante
abasep y en tal caso sustituye el valor correspondiente de la matriz aform.

av (u, v )

[Funcion]
Una funci
on antisimetrica que se utiliza en relaciones de conmutacion. La implementaci
on por defecto analiza si los dos argumentos son vectores base mediante
abasep y en tal caso sustituye el valor correspondiente de la matriz aform.
Ejemplo:
(%i1) load(atensor);
(%o1)
/share/tensor/atensor.mac
(%i2) adim:3;
(%o2)
3
(%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
[ 0
3
- 2 ]
[
]
(%o3)
[ - 3
0
1 ]
[
]
[ 2
- 1
0 ]
(%i4) asymbol:x;
(%o4)
x
(%i5) av(x[1],x[2]);
(%o5)
x
3

abasep (v )

[Funcion]
Analiza si su argumento es un vector base en atensor. Esto es, si se trata de un
smbolo indexado, siendo el smbolo el mismo que el valor de asymbol y si el ndice
tiene un valor numerico entre 1 y adim.

Captulo 28: Sumas productos y series

451

28 Sumas productos y series


28.1 Funciones y variables para sumas y productos
bashindices (expr )

[Funcion]
Transforma la expresi
on expr dandole a cada sumatorio y producto un u
nico ndice.
Esto le da a changevar mayor precision cuando opera con sumas y productos. La
forma del u
nico ndice es jnumber . La cantidad number se determina en funcion de
gensumnum, valor que puede cambiar el usuario. Por ejemplo, haciendo gensumnum:0$.

lsum (expr, x, L )

[Funcion]

Representa la suma de expr para cada elemento x en L.


Se retornar
a la forma nominal lsum si el argumento L no es una lista.
Ejemplos:
(%i1) lsum (x^i, i, [1, 2, 7]);
7
2
(%o1)
x + x + x
(%i2) lsum (i^2, i, rootsof (x^3 - 1));
====
\
2
(%o2)
>
i
/
====
3
i in rootsof(x - 1)

intosum (expr )

[Funcion]
Mueve los factores multiplicativos que estan fuera de un sumatorio hacia dentro de
este. Si el ndice del sumatorio aparece en la expresion exterior, entonces intosum
busca un ndice razonable, lo mismo que hace con sumcontract. Se trata de la
operaci
on contraria a extraer factores comunes de los sumatorios.
En algunos caos puede ser necesario hacer scanmap (multthru, expr ) antes que
intosum.
Ejemplo:
(%i1) sum(2*x^2*n^k, k , 0, inf);
inf
====
2 \
k
(%o1)
2 x
>
n
/
====
k = 0

452

Manual de Maxima

(%i2) intosum(%);

(%o2)

product (expr, i, i_0, i_1 )

inf
====
\
k 2
>
2 n x
/
====
k = 0

[Funcion]
Representa el producto de los valores de expr seg
un el ndice i vara de i 0 hasta i 1.
La forma nominal product se presenta en forma de letra pi may
uscula.
La funci
on product eval
ua expr y los lmites inferior y superior, i 0 y i 1, pero no
eval
ua el ndice i.
Si la diferencia entre los lmites superior e inferior es un n
umero entero, la expresion
expr se eval
ua para cada valor del ndice i, siendo el resultado un producto en forma
explcita.
En caso contrario, el rango del ndice no esta definido, aplicandose entonces algunas
reglas que permitan simplificar el producto. Cuando la variable global simpproduct
valga true, se aplicar
an reglas adicionales. En ciertos casos, la simplificacion dar
a
lugar a un resultado que ya no tenga el formato del producto; en caso contrario se
devolver
a una forma nominal product.
Veanse tambien nouns y evflag.
Ejemplos:
(%i1) product (x + i*(i+1)/2, i, 1, 4);
(%o1)
(x + 1) (x + 3) (x + 6) (x + 10)
(%i2) product (i^2, i, 1, 7);
(%o2)
25401600
(%i3) product (a[i], i, 1, 7);
(%o3)
a a a a a a a
1 2 3 4 5 6 7
(%i4) product (a(i), i, 1, 7);
(%o4)
a(1) a(2) a(3) a(4) a(5) a(6) a(7)
(%i5) product (a(i), i, 1, n);
n
/===\
! !
(%o5)
! ! a(i)
! !
i = 1
(%i6) product (k, k, 1, n);
n
/===\
! !
(%o6)
! ! k
! !

Captulo 28: Sumas productos y series

453

k = 1
(%i7) product (k, k, 1, n), simpproduct;
(%o7)
n!
(%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
n
/===\
! !
1
(%o8)
! ! ----! ! k + 1
k = 1
(%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
15 40
(%o9)
a
b

simpsum

[Variable opcional]

Valor por defecto: false


Si simpsum vale true, se simplifica el resultado de un sumatorio sum. Esta simplificaci
on podr
a producir en ocasiones una expresion compacta. Si simpsum vale false o
si se utiliza la forma apostrofada sum, el valor es una forma nominal que representa
la notaci
on sigma habitual en matematicas.

sum (expr, i, i_0, i_1 )

[Funcion]
Representa la suma de los valores de expr seg
un el ndice i vara de i 0 hasta i 1. La
forma nominal sum se presenta en forma de letra sigma may
uscula.
La funci
on sum eval
ua su sumando expr y los lmites inferior y superior, i 0 y i 1,
pero no eval
ua el ndice i.
Si la diferencia entre los lmites superior e inferior es un n
umero entero, el sumando
expr se eval
ua para cada valor del ndice i, siendo el resultado una suma en forma
explcita.
En caso contrario, el rango del ndice no esta definido, aplicandose entonces algunas
reglas que permitan simplificar la suma. Cuando la variable global simpsum valga
true, se aplicar
an reglas adicionales. En ciertos casos, la simplificacion dara lugar a
un resultado que ya no tenga el formato del sumatorio; en caso contrario se devolver
a
una forma nominal product.

Cuando cauchysum vale true, el producto de sumatorios se expresa como un producto


de Cauchy, en cuyo caso el ndice del sumatorio interior es funcion del ndice del
exterior, en lugar de variar independientemente.
La variable global genindex guarda el prefijo alfabetico a utilizar cuando sea necesario
generar autom
aticamente el siguiente ndice de sumatorio.
La variable global gensumnum guarda el sufijo numerico a utilizar cuando sea necesario
generar autom
aticamente el siguiente ndice de sumatorio. Si gensumnum vale false,
un ndice generado autom
aticamente constara solo de genindex, sin sufijo numerico.
Veanse tambien sumcontract, intosum, bashindices, niceindices, nouns y
evflag.
Ejemplos:

454

Manual de Maxima

(%i1) sum (i^2, i, 1, 7);


(%o1)
140
(%i2) sum (a[i], i, 1, 7);
(%o2)
a + a + a + a + a + a + a
7
6
5
4
3
2
1
(%i3) sum (a(i), i, 1, 7);
(%o3)
a(7) + a(6) + a(5) + a(4) + a(3) + a(2) + a(1)
(%i4) sum (a(i), i, 1, n);
n
====
\
(%o4)
>
a(i)
/
====
i = 1
(%i5) sum (2^i + i^2, i, 0, n);
n
====
\
i
2
(%o5)
>
(2 + i )
/
====
i = 0
(%i6) sum (2^i + i^2, i, 0, n), simpsum;
3
2
n + 1
2 n + 3 n + n
(%o6)
2
+ --------------- - 1
6
(%i7) sum (1/3^i, i, 1, inf);
inf
====
\
1
(%o7)
>
-/
i
==== 3
i = 1
(%i8) sum (1/3^i, i, 1, inf), simpsum;
1
(%o8)
2
(%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
inf
====
\
1
(%o9)
30 >
-/
2
==== i

Captulo 28: Sumas productos y series

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

(%o11)

(%i12)
(%o12)

455

i = 1
sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2
5 %pi
sum (integrate (x^k, x, 0, 1), k, 1, n);
n
====
\
1
>
----/
k + 1
====
k = 1
sum (if k <= 5 then a^k else b^k, k, 1, 10));
10
9
8
7
6
5
4
3
2
b
+ b + b + b + b + a + a + a + a + a

sumcontract (expr )

[Funcion]
Combina todos los sumatorios de una suma cuyos lmites inferiores y superiores difieren por constantes. El resultado es una expresion que contiene un sumatorio por
cada conjunto de tales sumatorios, mas todos los demas terminos adicionales que tuvieron que extraerse para formar la suma. La funcion sumcontract combina todos
los sumatorios compatibles y utiliza uno de los ndices de uno de los sumatorios si
puede, si no formar
a un ndice que sea razonable.
Puede ser necesario hacer intosum (expr ) antes que sumcontract.
Ejemplo:
(%i1) sum(1/l,l,1,n)+sum(k,k,1,n+2);
n
n + 2
====
====
\
1
\
(%o1)
>
- + >
k
/
l
/
====
====
l = 1
k = 1
(%i2) sumcontract(%);
n
====
\
1
(%o2)
2 n + >
(l + -) + 3
/
l
====
l = 1

sumexpand

[Variable opcional]

Valor por defecto: false


Si sumexpand vale true, productos de sumatorios y de sumatorios con exponentes se
reducen a sumatorios anidados.
Vease tambien cauchysum.

456

Manual de Maxima

Ejemplos:
(%i1) sumexpand: true$
(%i2) sum (f (i), i, 0, m) * sum (g (j), j, 0, n);
m
n
====
====
\
\
(%o2)
>
>
f(i1) g(i2)
/
/
====
====
i1 = 0 i2 = 0
(%i3) sum (f (i), i, 0, m)^2;
m
m
====
====
\
\
(%o3)
>
>
f(i3) f(i4)
/
/
====
====
i3 = 0 i4 = 0

28.2 Introducci
on a las series
Maxima dispone de las funciones taylor y powerseries para calcular las series de las
funciones diferenciables. Tambien tiene herramientas como nusum capaces de encontrar la
expresion compacta de algunas series. Operaciones como la suma y la multiplicacion operan
de la forma habitual en el contexto de las series. Esta seccion presenta las variables globales
que controlan la expansi
on.

28.3 Funciones y variables para las series


[Variable opcional]
Valor por defecto: false
Cuando se multiplican sumatorios infinitos, si sumexpand vale true y cauchysum vale
true, entonces se utilizar
a el producto de Cauchy en lugar del usual. En el producto
de Cauchy el ndice de la suma interna es funcion del ndice de la exterior en lugar
de variar de forma independiente. Un ejemplo aclara esta idea:
(%i1) sumexpand: false$
(%i2) cauchysum: false$
(%i3) s: sum (f(i), i, 0, inf) * sum (g(j), j, 0, inf);
inf
inf
====
====
\
\
(%o3)
( >
f(i)) >
g(j)
/
/
====
====
i = 0
j = 0
(%i4) sumexpand: true$
(%i5) cauchysum: true$

cauchysum

Captulo 28: Sumas productos y series

457

(%i6) s;

(%o6)

inf
====
\
>
/
====
i1 = 0

i1
====
\
>
g(i1 - i2) f(i2)
/
====
i2 = 0

deftaylor (f_1 (x_1 ), expr_1, ..., f_n (x_n ), expr_n )

[Funcion]
Para cada funci
on f i de variable x i, deftaylor define expr i como una serie de
Taylor alrededor de cero. La expresion expr i sera un polinomio en x i o una suma;
deftaylor admite tambien expresiones mas generales.

La llamada powerseries (f_i (x_i ), x_i, 0) devuelve la serie definida por


deftaylor.
La funci
on deftaylor eval
ua sus argumentos y devuelve la lista de las funciones f 1,
..., f n.
Ejemplo:
(%i1) deftaylor (f(x), x^2 + sum(x^i/(2^i*i!^2), i, 4, inf));
(%o1)
[f]
(%i2) powerseries (f(x), x, 0);
inf
====
i1
\
x
2
(%o2)
>
-------- + x
/
i1
2
====
2
i1!
i1 = 4
(%i3) taylor (exp (sqrt (f(x))), x, 0, 4);
2
3
4
x
3073 x
12817 x
(%o3)/T/
1 + x + -- + ------- + -------- + . . .
2
18432
307200

maxtayorder

[Variable opcional]

Valor por defecto: true


Si maxtayorder vale true, entonces durante la manipulacion algebraica de series
truncadas de Taylor, la funcion taylor trata de retener tantos terminos correctos
como sea posible.

niceindices (expr )

[Funcion]
Cambia las etiquetas de los ndices de sumas y productos de expr. La funcion
niceindices trata de cambiar cada ndice al valor de niceindicespref[1], a menos
que esa etiqueta aparezca ya en el sumando o factor, en cuyo caso niceindices
realiza intentos con los siguientes elementos de niceindicespref, hasta que encuentre una variable que que no este en uso. Si todas las variables de la lista han

458

Manual de Maxima

sido ya revisadas, se formar


an nuevos nices a~
nadiendo n
umeros enteros al valor de
niceindicespref[1], como i0, i1, i2, ....
La funci
on niceindices eval
ua sus argumentos y devuelve una expresion.
Ejemplo:
(%i1) niceindicespref;
(%o1)
[i, j, k, l, m, n]
(%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
inf
inf
/===\
====
! !
\
(%o2)
! !
>
f(bar i j + foo)
! !
/
bar = 1 ====
foo = 1
(%i3) niceindices (%);
inf inf
/===\ ====
! ! \
(%o3)
! !
>
f(i j l + k)
! ! /
l = 1 ====
k = 1
[Variable opcional]
Valor por defecto: [i, j, k, l, m, n]
La variable niceindicespref es la lista de la que la funcion niceindices va tomando
nombres de etiquetas para ndices de sumatorios y productos.
En niceindicespref se guardan normalmente nombres de variables.
Ejemplo:
(%i1) niceindicespref: [p, q, r, s, t, u]$
(%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
inf
inf
/===\
====
! !
\
(%o2)
! !
>
f(bar i j + foo)
! !
/
bar = 1 ====
foo = 1
(%i3) niceindices (%);
inf inf
/===\ ====
! ! \
(%o3)
! !
>
f(i j q + p)
! ! /
q = 1 ====
p = 1

niceindicespref

Captulo 28: Sumas productos y series

459

nusum (expr, x, i_0, i_1 )

[Funcion]
Calcula la suma hipergeometrica indefinida de expr con respecto a la variable x utilizando una procedimiento de decision debido a R.W. Gosper. La expresion expr y el
resultado deben poder ser escritos como productos de potencias enteras, factoriales,
coeficientes binomiales y funciones racionales.

Los terminos suma "definida" e "indefinida" se usan de forma analoga a integracion


"definida" e "indefinida". La suma indefinida significa dar un resultado simbolico.
Las funciones nusum y unsum disponen de cierta informacion sobre sumas y diferencias
de productos finitos. Vease tambien unsum.
Ejemplos:
(%i1) nusum (n*n!, n, 0, n);
Dependent equations eliminated: (1)
(%o1)
(n + 1)! - 1
(%i2) nusum (n^4*4^n/binomial(2*n,n), n, 0, n);
4
3
2
n
2 (n + 1) (63 n + 112 n + 18 n - 22 n + 3) 4
2
(%o2) ------------------------------------------------ - -----693 binomial(2 n, n)
3 11 7
(%i3) unsum (%, n);
4 n
n 4
(%o3)
---------------binomial(2 n, n)
(%i4) unsum (prod (i^2, i, 1, n), n);
n - 1
/===\
! !
2
(%o4)
( ! ! i ) (n - 1) (n + 1)
! !
i = 1
(%i5) nusum (%, n, 1, n);
Dependent equations eliminated: (2 3)
n
/===\
! !
2
(%o5)
! ! i - 1
! !
i = 1

pade (taylor_series, numer_deg_bound, denom_deg_bound )

[Funcion]
Devuelve la lista de todas las funciones 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.

460

Manual de Maxima

La expresi
on taylor series es una serie de Taylor univariante. Los argumentos numer deg bound y denom deg bound son enteros positivos que indican las cotas para
numerador y denominador.
La expresi
on taylor series tambien puede ser una serie de Laurent, y las cotas de los
grados pueden ser inf. El grado total se define como numer_deg_bound + denom_
deg_bound . La longitud de una serie de potencias se define como "truncation
level" + 1 - min(0, "order of series").
(%i1) taylor (1 + x + x^2 + x^3, x, 0, 3);
2
3
(%o1)/T/
1 + x + x + x + . . .
(%i2) pade (%, 1, 1);
1
(%o2)
[- -----]
x - 1
(%i3) t: taylor(-(83787*x^10 - 45552*x^9 - 187296*x^8
+ 387072*x^7 + 86016*x^6 - 1507328*x^5
+ 1966080*x^4 + 4194304*x^3 - 25165824*x^2
+ 67108864*x - 134217728)
/134217728, x, 0, 10);
2
3
4
5
6
7
x
3 x
x
15 x
23 x
21 x
189 x
(%o3)/T/ 1 - - + ---- - -- - ----- + ----- - ----- - -----2
16
32
1024
2048
32768
65536
8
9
10
5853 x
2847 x
83787 x
+ ------- + ------- - --------- + . . .
4194304
8388608
134217728
(%i4) pade (t, 4, 4);
(%o4)

[]

No hay ninguna funci


on racional de grado 4 en numerador y denominador con este
desarrollo en serie de potencias. Es necesario dar un n
umero de grados al numerador
y denominador cuya suma sea al menos el grado del desarrollo de la serie, a fin de
disponer de un n
umero suficiente de coeficientes desconocidos para calcular.
(%i5) pade (t, 5, 5);
5
4
3
(%o5) [- (520256329 x - 96719020632 x - 489651410240 x
2
- 1619100813312 x - 2176885157888 x - 2386516803584)
5
4
3
/(47041365435 x + 381702613848 x + 1360678489152 x
2
+ 2856700692480 x + 3370143559680 x + 2386516803584)]

Captulo 28: Sumas productos y series

461

powerseries (expr, x, a )

[Funcion]
Devuelve la forma general del desarrollo en serie de potencias de expr para la variable
x alrededor del punto a (que puede ser inf, de infinito):
inf
====
\
n
>
b (x - a)
/
n
====
n = 0

Si powerseries no es capaz de desarrollar expr, la funcion taylor puede calcular los


primeros terminos de la serie.
Si verbose vale true, powerseries va mostrando mensajes mientras progresa el
calculo.
(%i1) verbose: true$
(%i2) powerseries (log(sin(x)/x), x, 0);
cant expand
log(sin(x))
so well try again after applying the rule:
d
/ -- (sin(x))
[ dx
log(sin(x)) = i ----------- dx
]
sin(x)
/
in the first simplification we have returned:
/
[
i cot(x) dx - log(x)
]
/
inf
====
i1 2 i1
2 i1
\
(- 1)
2
bern(2 i1) x
>
-----------------------------/
i1 (2 i1)!
====
i1 = 1
(%o2)
------------------------------------2

psexpand

[Variable opcional]

Valor por defecto: false


Si psexpand vale true, toda expresion racional se muestra completamente expandida.
La variable ratexpand tiene el mismo efecto.

462

Manual de Maxima

Si psexpand vale false, las expresines multivariantes se presentan tal como lo hace
el paquete de funciones racionales.
Si psexpand vale multi, los terminos de igual grado son agrupados.

revert (expr, x )
revert2 (expr, x, n )

[Funcion]
[Funcion]
Estas funciones devuelven el recproco de expr en forma de desarrollo de Taylor
alrededor de cero respecto de la variable x. La funcion revert devuelve un polinomio
de grado igual a la mayor potencia en expr. La funcion revert2 devuelve un polinomio
de grado n, el cual puede ser mayor, igual o menor que el grado de expr.
Para utilizar estas funciones es necesario cargarlas en memoria mediante load
("revert").
Ejemplos:
(%i1) load ("revert")$
(%i2) t: taylor (exp(x) - 1, x, 0, 6);
2
3
4
5
6
x
x
x
x
x
(%o2)/T/
x + -- + -- + -- + --- + --- + . . .
2
6
24
120
720
(%i3) revert (t, x);
6
5
4
3
2
10 x - 12 x + 15 x - 20 x + 30 x - 60 x
(%o3)/R/ - -------------------------------------------60
(%i4) ratexpand (%);
6
5
4
3
2
x
x
x
x
x
(%o4)
- -- + -- - -- + -- - -- + x
6
5
4
3
2
(%i5) taylor (log(x+1), x, 0, 6);
2
3
4
5
6
x
x
x
x
x
(%o5)/T/
x - -- + -- - -- + -- - -- + . . .
2
3
4
5
6
(%i6) ratsimp (revert (t, x) - taylor (log(x+1), x, 0, 6));
(%o6)
0
(%i7) revert2 (t, x, 4);
4
3
2
x
x
x
(%o7)
- -- + -- - -- + x
4
3
2

taylor
taylor
taylor
taylor

(expr,
(expr,
(expr,
(expr,

x, a, n )
[x_1, x_2, ...], a, n )
[x, a, n, asymp])
[x_1, x_2, ...], [a_1, a_2, ...], [n_1, n_2, ...])

[Funcion]
[Funcion]
[Funcion]
[Funcion]

Captulo 28: Sumas productos y series

463

taylor (expr, [x_1, a_1, n_1 ], [x_2, a_2, n_2 ], ...)

[Funcion]
La llamada taylor (expr, x, a, n ) expande la expresion expr en un desarrollo de
Taylor o de Laurent respecto de la variable x alrededor del punto a, con terminos
hasta (x - a )^n .
Si expr es de la forma f (x )/g (x ) y g (x ) no tiene terminos hasta de grado n, entonces
taylor intenta expandir g (x ) hasta el grado 2 n . Si a
un as no hay terminos no nulos,
taylor dobla el grado de la expansion de g (x ) hasta que el grado de la expansion
sea menor o igual que n 2^taylordepth.
La llamada taylor (expr, [x_1, x_2, ...], a, n ) devuelve la serie en potencias
truncada de grado n en todas las variables x 1, x 2, ... alrededor del punto (a, a,
...).
La llamada taylor (expr, [x_1, a_1, n_1 ], [x_2, a_2, n_2 ], ...) devuelve la
serie en potencias truncada en las variables x 1, x 2, ... alrededor del punto (a_1,
a_2, ...); el truncamiento se realiza, respectivamente, en los grados n 1, n 2, ....
La llamada taylor (expr, [x_1, x_2, ...], [a_1, a_2, ...], [n_1, n_2, ...])
devuelve la serie en potencias truncada en las variables x 1, x 2, ... alrededor del
punto (a_1, a_2, ...), el truncamiento se realiza, respectivamente, en los grados
n 1, n 2, ....
La llamada taylor (expr, [x, a, n, asymp]) devuelve el desarrollo de expr en
potencias negativas de x - a . El termino de mayor orden es (x - a )^-n .
Si maxtayorder vale true, entonces durante la manipulacion algebraica de las series
(truncadas) de Taylor, la funcion taylor intenta mantener tantos terminos correctos
como sea posible.
Si psexpand vale true, una expresion racional desarrollada se muestra completamente
expandida. La variable ratexpand tiene el mismo efecto. Si psexpand vale false,
una expresi
on multivariante se mostrara tal como lo hace el paquete de funciones
racionales. Si psexpand vale multi, los terminos del mismo grado son agrupados.
Vease tambien la variable taylor_logexpand para el control del desarrollo.
Ejemplos:
(%i1) taylor (sqrt (sin(x) + a*x + 1), x, 0, 3);
2
2
(a + 1) x
(a + 2 a + 1) x
(%o1)/T/ 1 + --------- - ----------------2
8
3
2
3
(3 a + 9 a + 9 a - 1) x
+ -------------------------- + . . .
48
(%i2) %^2;
3
x
(%o2)/T/
1 + (a + 1) x - -- + . . .
6
(%i3) taylor (sqrt (x + 1), x, 0, 5);

464

Manual de Maxima

(%o3)/T/

2
3
4
5
x
x
x
5 x
7 x
1 + - - -- + -- - ---- + ---- + . . .
2
8
16
128
256

(%i4) %^2;
(%o4)/T/
1 + x + . . .
(%i5) product ((1 + x^i)^2.5, i, 1, inf)/(1 + x^2);
inf
/===\
! !
i
2.5
! ! (x + 1)
! !
i = 1
(%o5)
----------------2
x + 1
(%i6) ev (taylor(%, x, 0, 3), keepfloat);
2
3
(%o6)/T/
1 + 2.5 x + 3.375 x + 6.5625 x + . . .
(%i7) taylor (1/log (x + 1), x, 0, 3);
2
3
1
1
x
x
19 x
(%o7)/T/
- + - - -- + -- - ----- + . . .
x
2
12
24
720
(%i8) taylor (cos(x) - sec(x), x, 0, 5);
4
2
x
(%o8)/T/
- x - -- + . . .
6
(%i9) taylor ((cos(x) - sec(x))^3, x, 0, 5);
(%o9)/T/
0 + . . .
(%i10) taylor (1/(cos(x) - sec(x))^3, x, 0, 5);
2
4
1
1
11
347
6767 x
15377 x
(%o10)/T/ - -- + ---- + ------ - ----- - ------- - -------6
4
2
15120
604800
7983360
x
2 x
120 x
+ . . .
(%i11) taylor (sqrt (1 - k^2*sin(x)^2), x, 0, 6);
2 2
4
2
4
k x
(3 k - 4 k ) x
(%o11)/T/ 1 - ----- - ---------------2
24
6
4
2
6
(45 k - 60 k + 16 k ) x

Captulo 28: Sumas productos y series

465

- -------------------------- + . . .
720
(%i12) taylor ((x + 1)^n, x, 0, 4);
2
2
3
2
3
(n - n) x
(n - 3 n + 2 n) x
(%o12)/T/ 1 + n x + ----------- + -------------------2
6
4
3
2
4
(n - 6 n + 11 n - 6 n) x
+ ---------------------------- + . . .
24
(%i13) taylor (sin (y + x), x, 0, 3, y, 0, 3);
3
2
y
y
(%o13)/T/ y - -- + . . . + (1 - -- + . . .) x
6
2
3
2
y
2
1
y
3
-- + . . .) x + (- - + -- + . . .) x + . . .
12
6
12
(y + x), [x, y], 0, 3);
3
2
2
3
x + 3 y x + 3 y x + y
(%o14)/T/
y + x - ------------------------- + . . .
6
(%i15) taylor (1/sin (y + x), x, 0, 3, y, 0, 3);
1
y
1
1
1
2
(%o15)/T/ - + - + . . . + (- -- + - + . . .) x + (-- + . . .) x
y
6
2
6
3
y
y

y
+ (- - +
2
(%i14) taylor (sin

1
3
+ (- -- + . . .) x + . . .
4
y
(%i16) taylor (1/sin (y + x), [x, y], 0, 3);
3
2
2
3
1
x + y
7 x + 21 y x + 21 y x + 7 y
(%o16)/T/ ----- + ----- + ------------------------------- + . . .
x + y
6
360

taylordepth
Valor por defecto: 3

[Variable opcional]

466

Manual de Maxima

Si todava no hay terminos no nulos, la funcion taylor dobla el grado del desarrollo
de g (x ) tantas veces como sea necesario para que el grado del desarrollo sea menor
o igual que n 2^taylordepth.

taylorinfo (expr )

[Funcion]
Devuelve informaci
on sobre el desarrollo de Taylor expr. El valor devuelto por esta
funci
on es una lista de listas. Cada lista contiene el nombre de una variable, el punto
de expansi
on y el grado del desarrollo.
La funci
on taylorinfo devuelve false si expr no es un desarrollo de Taylor.
Ejemplo:
(%i1) taylor ((1 - y^2)/(1 - x), x, 0, 3, [y, a, inf]);
2
2
(%o1)/T/ - (y - a) - 2 a (y - a) + (1 - a )
2
2
+ (1 - a - 2 a (y - a) - (y - a) ) x
2
2
2
+ (1 - a - 2 a (y - a) - (y - a) ) x
2
2
3
+ (1 - a - 2 a (y - a) - (y - a) ) x + . . .
(%i2) taylorinfo(%);
(%o2)
[[y, a, inf], [x, 0, 3]]

taylorp (expr )

[Funcion]
Devuelve true si expr es un desarrollo de Taylor y false en caso contrario.
[Variable opcional]
Valor por defecto: true
La variable taylor_logexpand controla los desarrollos de logaritmos en la funcion
taylor.
Si taylor_logexpand vale true, todos los logaritmos se expanden completamente
de manera que algunos problemas que se plantean debido a ciertas identidades
logartmicas no interfieran con el proceso del calculo del desarrollo de Taylor. Sin
embargo, este proceder no es del todo correcto.

taylor_logexpand

[Variable opcional]
Valor por defecto: true
La variable taylor_order_coefficients controla la ordenacion de los coeficientes
en un desarrollo de Taylor.
Si taylor_order_coefficients vale true, los coeficientes del desarrollo de Taylor
se ordenan de la forma can
onica.

taylor_order_coefficients

taylor_simplifier (expr )

[Funcion]
Simplifica los coeficientes de la serie de potencias expr. Esta funcion es llamada desde
la funci
on taylor.

Captulo 28: Sumas productos y series

467

[Variable opcional]

taylor_truncate_polynomials
Valor por defecto: true

Si taylor_truncate_polynomials vale true, los polinomios quedan truncados en


base a los niveles de truncamiento de entrada.
En otro caso, aquellos polinomios que se utilicen como entrada a la funcion taylor
se consideran que tienen precision infinita.

taytorat (expr )

[Funcion]
Convierte expr del formato de taylor al formato CRE (Canonical Rational Expression). El efecto es el mismo que haciendo rat (ratdisrep (expr )), pero mas rapido.

trunc (expr )

[Funcion]
Devuelve la representaci
on interna de la expresion expr de tal forma como si sus
sumas fuesen una serie truncada de Taylor. La expresion expr no sufre ninguna otra
modificaci
on.
Ejemplo:
(%i1) expr: x^2 + x + 1;
(%o1)
(%i2) trunc (expr);

2
x + x + 1

2
(%o2)
1 + x + x + . . .
(%i3) is (expr = trunc (expr));
(%o3)
true

unsum (f, n )

[Funcion]
Devuelve la diferencia f (n ) - f (n - 1). En cierto sentido unsum es la inversa de
sum.
Vease tambien nusum.
Ejemplos:
(%i1) g(p) := p*4^n/binomial(2*n,n);
n
p 4
g(p) := ---------------binomial(2 n, n)

(%o1)
(%i2) g(n^4);

(%o2)
(%i3)

(%o3)
(%i4)

4 n
n 4
---------------binomial(2 n, n)
nusum (%, n, 0, n);
4
3
2
n
2 (n + 1) (63 n + 112 n + 18 n - 22 n + 3) 4
2
------------------------------------------------ - -----693 binomial(2 n, n)
3 11 7
unsum (%, n);

468

Manual de Maxima

(%o4)

4 n
n 4
---------------binomial(2 n, n)

[Variable opcional]
Valor por defecto: false
Si verbose vale true, la funcion powerseries va imprimiendo mensajes durante su
ejecuci
on.

verbose

28.4 Introducci
on a las series de Fourier
El paquete fourie contiene funciones para el calculo simbolico de series de Fourier. Hay
funciones en el paquete fourie para calcular los coeficientes y para manipular las expresiones.

28.5 Funciones y variables para series de Fourier


equalp (x, y )

[Funcion]
Devuelve true si equal (x, y ), en otro caso devuelve false. No devuelve el mensaje
de error que se obtiene de equal (x, y) en un caso como este.

remfun (f, expr )


remfun (f, expr, x )

[Funcion]
[Funcion]
La llamada remfun (f, expr ) reemplaza todas las subexpresiones f (arg ) por arg
en expr.
La llamada remfun (f, expr, x ) reemplaza todas las subexpresiones f (arg ) por
arg en expr s
olo si arg contiene a la variable x.

funp (f, expr )


funp (f, expr, x )

[Funcion]
[Funcion]

La llamada funp (f, expr ) devuelve true si expr contiene la funcion f.


La llamada funp (f, expr, x ) devuelve true si expr contiene la funcion f y la variable x est
a presente en el argumento de alguna de las presencias de f.

absint (f, x, halfplane )


absint (f, x )
absint (f, x, a, b )

[Funcion]
[Funcion]
[Funcion]
La llamada absint (f, x, halfplane ) devuelve la integral indefinida de f con respecto a x en el semiplano dado (pos, neg o both). La funcion f puede contener expresiones de la forma abs (x), abs (sin (x)), abs (a) * exp (-abs (b) * abs (x)).
La llamada absint (f, x ) equivale a absint (f, x, pos).
La llamada absint (f, x, a, b ) devuelve la integral definida de f con respecto a x
de a a b.

fourier (f, x, p )

[Funcion]
Devuelve una lista con los coeficientes de Fourier de f (x ) definida en el intervalo
[-p, p].

Captulo 28: Sumas productos y series

469

foursimp (l )

[Funcion]
Simplifica sin (n %pi) a 0 si sinnpiflag vale true y cos (n %pi) a (-1)^n si
cosnpiflag vale true.

sinnpiflag

[Variable opcional]

Valor por defecto: true


Vease foursimp.

cosnpiflag

[Variable opcional]

Valor por defecto: true


Vease foursimp.

fourexpand (l, x, p, limit )

[Funcion]
Calcula y devuelve la serie de Fourier a partir de la lista de los coeficientes de Fourier
l hasta el termino limit (limit puede ser inf). Los argumentos x y p tienen el mismo
significado que en fourier.

fourcos (f, x, p )

[Funcion]
Devuelve los coeficientes de los cosenos de Fourier de f (x ) definida en [0, p ].

foursin (f, x, p )

[Funcion]
Devuelve los coeficientes de los senos de Fourier de f (x ) definida en [0, p ].

totalfourier (f, x, p )

[Funcion]

Devuelve fourexpand (foursimp (fourier (f, x, p )), x, p, inf).

fourint (f, x )

[Funcion]
Calcula y devuelve la lista de los coeficientes integrales de Fourier de f (x ) definida
en [minf, inf].

fourintcos (f, x )

[Funcion]

Devuelve los coeficientes integrales de los cosenos f (x ) en [0, inf].

fourintsin (f, x )

[Funcion]

Devuelve los coeficientes integrales de los senos f (x ) en [0, inf].

28.6 Funciones y variables para series de Poisson


intopois (a )

[Funcion]

Convierte a en un codificado Poisson.

outofpois (a )

[Funcion]
Convierte a desde codificado de Poisson a una representacion general. Si a no esta en
forma de Poisson, outofpois hace la conversion, siendo entonces el valor retornado
outofpois (intopois (a )). Esta funcion es un simplificador canonico para sumas
de potencias de senos y cosenos.

poisdiff (a, b )

[Funcion]
Deriva a con respecto a b. El argumento b debe aparecer solo en los argumentos
trigonometricos o s
olo en los coeficientes.

470

Manual de Maxima

poisexpt (a, b )

[Funcion]

Identico a intopois (a ^b ). El argumento b debe ser un entero positivo.

poisint (a, b )

[Funcion]

Integra en un sentido restringido similar a poisdiff.


[Variable optativa]
Valor por defecto: 5
La variable poislim determina el dominio de los coeficientes en los argumentos de
las funciones trigonometricas. El valor por defecto 5 corresponde al intervalo [-2^(51)+1,2^(5-1)], o [-15,16], pero puede reasignarse para [-2^(n-1)+1, 2^(n-1)].

poislim

poismap (series, sinfn, cosfn )

[Funcion]
Aplica las funciones sinfn a los terminos sinusoidales y las funciones cosfn a los
cosenoidales de la serie de Poisson dada. Tanto sinfn como cosfn son funciones de dos
argumentos, los cuales son un coeficiente y una parte trigonometrica de un termino
de la serie.

poisplus (a, b )

[Funcion]

Identico a intopois (a + b).

poissimp (a )

[Funcion]

Convierte a en una serie de Poisson para a en su representacion general.


[Smbolo especial]
El smbolo /P/ sigue a la etiqueta de las lneas que contienen expresiones que son
series de Poisson.

poisson

poissubst (a, b, c )

[Funcion]
Sustituye b por a en c, donde c es una serie de Poisson.
(1) Si b es una de las variables u, v, w, x, y o z, entonces a debe ser una expresion
lineal en esas variables (por ejemplo, 6*u + 4*v).
(2) Si b no es ninguna de esas variables, entonces a no puede contener tampoco a
ninguna de ellas, ni senos, ni cosenos.

poistimes (a, b )

[Funcion]

Identico a intopois (a *b ).

printpois (a )

[Funcion]
Presenta una serie de Poisson en un formato legible. Conjuntamente con outofpois,
si es necesario convertir
a a primero en una codificacion de Poisson.

Captulo 29: Teora de N


umeros

471

29 Teora de N
umeros
29.1 Funciones y variables para teora de n
umeros
bern (n )

[Funcion]
Devuelve el n-esimo n
umero de Bernoulli del entero n. Los n
umeros de Bernoulli
iguales a cero son suprimidos si zerobern vale false.
Vease tambien burn.
(%i1) zerobern: true$
(%i2) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
1 1
1
1
1
(%o2)
[1, - -, -, 0, - --, 0, --, 0, - --]
2 6
30
42
30
(%i3) zerobern: false$
(%i4) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
1 1
1
1
1
5
691
7
(%o4)
[1, - -, -, - --, --, - --, --, - ----, -]
2 6
30 42
30 66
2730 6

bernpoly (x, n )

[Funcion]

Devuelve el n-esimo polinomio de Bernoulli de variable x.

bfzeta (s, n )

[Funcion]
Devuelve la funci
on zeta de Riemann para el argumento s. El valor que devuelve es
del tipo "big float" (bfloat) y n es su n
umero de dgitos.
Es necesario cargar en memoria esta funcion haciendo load ("bffac").

bfhzeta (s, h, n )

[Funcion]
Devuelve la funci
on zeta de Hurwitz para los argumentos s y h. El valor que devuelve
es del tipo "big float" (bfloat) y n es su n
umero de dgitos.
La funci
on zeta de Hurwitz se define como
(s, h) =

1
s
(k + h)
k=0

Ejec
utese load (bffac) antes de hacer uso de esta funcion.

burn (n )

[Funcion]
Siendo n entero, Devuelve un n
umero racional que aproxima el n-esimo n
umero de
Bernoulli. La funci
on burn aprovecha el hecho de que los n
umeros de Bernoulli
racionales se pueden aproximar con notable precision gracias a
n - 1 1 - 2 n
(- 1)
2
zeta(2 n) (2 n)!
B(2 n) = -----------------------------------2 n
%pi

472

Manual de Maxima

La funci
on burn puede ser mas eficiente que bern cuando n es un n
umero grande, ya
que bern calcula todos los n
umeros de Bernoulli hasta el n-esimo. Por el contrario,
burn hace uso de la aproximacion para enteros pares n > 255. En caso de enteros
impares y n <= 255, se hace uso de la funcion bern.
Para utilizar esta funci
on hay que cargarla antes en memoria escribiendo load
("bffac"). Vease tambien bern.

chinese ([r_1, . . . , r_n ], [m_1, . . . , m_n ])

[Funcion]
Resulve el sistema de congruencias x = r_1 mod m_1, . . . , x = r_n mod m_n. Los restos
r n pueden ser enteros arbitrarios, mientras que los modulos m n deben ser positivos
y primos dos a dos.
(%i1) mods : [1000, 1001, 1003, 1007];
(%o1)
[1000, 1001, 1003, 1007]
(%i2) lreduce(gcd, mods);
(%o2)
1
(%i3) x : random(apply("*", mods));
(%o3)
685124877004
(%i4) rems : map(lambda([z], mod(x, z)), mods);
(%o4)
[4, 568, 54, 624]
(%i5) chinese(rems, mods);
(%o5)
685124877004
(%i6) chinese([1, 2], [3, n]);
(%o6)
chinese([1, 2], [3, n])
(%i7) %, n = 4;
(%o7)
10

cf (expr )

[Funcion]
Calcula aproximaciones con fracciones continuas. expr es una expresion que contiene fracciones continuas, races cuadradas de enteros, y n
umeros reales (enteros,
racionales, decimales en coma flotante y decimales de precision arbitraria). cf cal~ omeros
cula expansiones exactas de n
umeros racionales, pero las expansiones de nA
decimales de coma flotante se truncan de acuerdo con el valor de ratepsilon, y la de
los de decimales de precisi
on arbitraria (bigfloats) lo hacen respecto de 10^(-fpprec).
En las expresiones se pueden combinar operandos con operadores aritmeticos. Maxima no conoce operaciones con fracciones continuas mas alla de la funcion cf.
La funci
on cf eval
ua sus argumentos despues de asignar a la variable listarith el
valor false, retornando una fraccion continua en forma de lista.
Una fracci
on continua a + 1/(b + 1/(c + ...)) se representa como la lista [a, b, c,
...], donde los elementos a, b, c, ... se eval
uan como enteros. La expresion expr
puede contener tambien sqrt (n) donde n es un entero; en tal caso, cf devolver
a
tantos terminos de la fracci
on continua como indique el valor de la variable cflength
multiplicado por el perodo.
Una fracci
on continua puede reducirse a un n
umero evaluando la representacion aritmetica que devuelve cfdisrep. Vease tambien cfexpand, que es otra alternativa
para evaluar fracciones continuas.
Veanse asimismo cfdisrep, cfexpand y cflength.

Captulo 29: Teora de N


umeros

473

Ejemplos:
La expresi
on expr contiene fracciones continuas y races cuadradas de enteros.
(%i1) cf ([5, 3, 1]*[11, 9, 7] + [3, 7]/[4, 3, 2]);
(%o1)
[59, 17, 2, 1, 1, 1, 27]
(%i2) cf ((3/17)*[1, -2, 5]/sqrt(11) + (8/13));
(%o2)
[0, 1, 1, 1, 3, 2, 1, 4, 1, 9, 1, 9, 2]
La variable cflength controla cuantos perodos de la fraccion continua se calculan para n
umeros irracionales algebraicos.
(%i1)
(%i2)
(%o2)
(%i3)
(%i4)
(%o4)
(%i5)
(%i6)
(%o6)

cflength: 1$
cf ((1 + sqrt(5))/2);
[1, 1, 1, 1, 2]
cflength: 2$
cf ((1 + sqrt(5))/2);
[1, 1, 1, 1, 1, 1, 1, 2]
cflength: 3$
cf ((1 + sqrt(5))/2);
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]

Una fracci
on continua puede calcularse evaluando la representacion aritmetica
que devuelve cfdisrep.
(%i1) cflength: 3$
(%i2) cfdisrep (cf (sqrt (3)))$
(%i3) ev (%, numer);
(%o3)
1.731707317073171
Maxima no sabe sobre operaciones con fracciones continuas mas de lo que aporta
la funci
on cf.
(%i1) cf ([1,1,1,1,1,2] * 3);
(%o1)
[4, 1, 5, 2]
(%i2) cf ([1,1,1,1,1,2]) * 3;
(%o2)
[3, 3, 3, 3, 3, 6]

cfdisrep (lista )

[Funcion]
Construye y devuelve una expresion aritmetica ordinaria de la forma a + 1/(b + 1/(c
+ ...)) a partir de la representacion en formato lista de la fraccion continua [a, b,
c, ...].
(%i1) cf ([1, 2, -3] + [1, -2, 1]);
(%o1)
[1, 1, 1, 2]
(%i2) cfdisrep (%);
1
(%o2)
1 + --------1
1 + ----1
1 + 2

474

Manual de Maxima

cfexpand (x )

[Funcion]
Devuelve la matriz con los numeradores y denominadores de la u
ltima (columna 1) y
pen
ultima (columna 2) convergentes de la fraccion continua x.
(%i1) cf (rat (ev (%pi, numer)));
rat replaced 3.141592653589793 by 103993/33102 =3.141592653011902
(%o1)
[3, 7, 15, 1, 292]
(%i2) cfexpand (%);
[ 103993 355 ]
(%o2)
[
]
[ 33102
113 ]
(%i3) %[1,1]/%[2,1], numer;
(%o3)
3.141592653011902

[Variable opcional]
Valor por defecto: 1
La variable cflength controla el n
umero de terminos de la fraccion continua que
devuelve la funci
on cf, que sera cflength multiplicado por el perodo. As, el valor
por defecto ser
a el de un perodo.
(%i1) cflength: 1$
(%i2) cf ((1 + sqrt(5))/2);
(%o2)
[1, 1, 1, 1, 2]
(%i3) cflength: 2$
(%i4) cf ((1 + sqrt(5))/2);
(%o4)
[1, 1, 1, 1, 1, 1, 1, 2]
(%i5) cflength: 3$
(%i6) cf ((1 + sqrt(5))/2);
(%o6)
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]

cflength

divsum (n, k )
divsum (n )

[Funcion]
[Funcion]
La llamada divsum (n, k ) devuelve la suma de los divisores de n elevados a la k-esima
potencia.
La llamada divsum (n ) devuelve la suma de los divisores de n.
(%i1) divsum (12);
(%o1)
28
(%i2) 1 + 2 + 3 + 4 + 6 + 12;
(%o2)
28
(%i3) divsum (12, 2);
(%o3)
210
(%i4) 1^2 + 2^2 + 3^2 + 4^2 + 6^2 + 12^2;
(%o4)
210

euler (n )

[Funcion]
Devuelve el n-esimo n
umero de Euler del entero no negativo n. Los n
umero de Euler
iguales a cero se eliminan si zerobern vale false.
Para la constante de Euler-Mascheroni, vease %gamma.

Captulo 29: Teora de N


umeros

(%i1)
(%i2)
(%o2)
(%i3)
(%i4)
(%o4)

475

zerobern: true$
map (euler, [0, 1, 2, 3, 4, 5, 6]);
[1, 0, - 1, 0, 5, 0, - 61]
zerobern: false$
map (euler, [0, 1, 2, 3, 4, 5, 6]);
[1, - 1, 5, - 61, 1385, - 50521, 2702765]
[Variable opcional]

factors_only
Valor por defecto: false

Controla el resultado devuelto por ifactors. El valor por defecto false hace que
ifactors no de informaci
on sobre las multiplicidades de los factores primos calculados. Cuando factors_only vale true, ifactors solo devuelve la lista de factores
primos.
Para ejemplos, vease ifactors.

fib (n )

[Funcion]
Devuelve el n-esimo n
umero de Fibonacci. La llamada fib(0) devuelve 0, fib(1)
devuelve 1 y fib (-n ) es igual a (-1)^(n + 1) * fib(n ).
Despues de llamar a fib, la variable prevfib toma el valor fib (n - 1), que es el
n
umero de Fibonacci que precede al u
ltimo calculado.
(%i1) map (fib, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o1)
[- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]

fibtophi (expr )

[Funcion]
Expresa los n
umeros de Fibonacci en expr en terminos de la razon aurea %phi, que
es (1 + sqrt(5))/2, aproximadamente 1.61803399.
Ejemplos:
(%i1) fibtophi (fib (n));

(%o1)
(%i2)
(%o2)
(%i3)

(%o3)

(%i4)
(%o4)

n
n
%phi - (1 - %phi)
------------------2 %phi - 1
fib (n-1) + fib (n) - fib (n+1);
- fib(n + 1) + fib(n) + fib(n - 1)
fibtophi (%);
n + 1
n + 1
n
n
%phi
- (1 - %phi)
%phi - (1 - %phi)
- --------------------------- + ------------------2 %phi - 1
2 %phi - 1
n - 1
n - 1
%phi
- (1 - %phi)
+ --------------------------2 %phi - 1
ratsimp (%);
0

476

Manual de Maxima

ifactors (n )

[Funcion]
Devuelve la factorizaci
on del entero positivo n. Si n=p1^e1..pk^nk es la descomposici
on de n en n
umeros primos, ifactors devuelve [[p1, e1], ... , [pk, ek]].
Los metodos de factorizaci
on se basan en divisiones tentativas con n
umeros primos
hasta 9973, en los metodos rho y p-1 de Pollard y en curvas elpticas.
La respuesta que se obtiene de ifactors esta controlada por la variable opcional
factors_only. El valor por defecto false hace que ifactors no de informacion
sobre las multiplicidades de los factores primos calculados. Cuando factors_only
vale true, ifactors solo devuelve la lista de factores primos.
(%i1) ifactors(51575319651600);
(%o1)
[[2, 4], [3, 2], [5, 2], [1583, 1], [9050207, 1]]
(%i2) apply("*", map(lambda([u], u[1]^u[2]), %));
(%o2)
51575319651600
(%i3) ifactors(51575319651600), factors_only : true;
(%o3)
[2, 3, 5, 1583, 9050207]

igcdex (n, k )

[Funcion]
Devuelve la lista [a, b, u ], donde u es el maximo com
un divisor de n y k, siendo u
igual a a n + b k . Los argumentos n y k deben ser enteros.
igcdex implementa el algoritmo de Euclides. Vease tambien gcdex.
La instrucci
on load(gcdex) carga esta funcion.
Ejemplos:
(%i1) load(gcdex)$
(%i2) igcdex(30,18);
(%o2)
[- 1, 2, 6]
(%i3) igcdex(1526757668, 7835626735736);
(%o3)
[845922341123, - 164826435, 4]
(%i4) igcdex(fib(20), fib(21));
(%o4)
[4181, - 2584, 1]

inrt (x, n )

[Funcion]

Devuelve la raz entera n-esima del valor absoluto de x.


(%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
(%i2) map (lambda ([a], inrt (10^a, 3)), l);
(%o2) [2, 4, 10, 21, 46, 100, 215, 464, 1000, 2154, 4641, 10000]

inv_mod (n, m )

[Funcion]
Calcula el inverso de n m
odulo m. La llamada inv_mod (n,m) devuelve false si n es
un divisor nulo m
odulo m.
(%i1) inv_mod(3, 41);
(%o1)
14
(%i2) ratsimp(3^-1), modulus = 41;
(%o2)
14
(%i3) inv_mod(3, 42);
(%o3)
false

Captulo 29: Teora de N


umeros

477

isqrt (x )

[Funcion]
Devuelve la "raz cuadrada entera" del valor absoluto de x, el cual debe ser un entero.

jacobi (p, q )

[Funcion]

Devuelve el smbolo de Jacobi para p y q.


(%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
(%i2) map (lambda ([a], jacobi (a, 9)), l);
(%o2)
[1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]

lcm (expr_1, ..., expr_n )

[Funcion]
Devuelve el mnimo com
un m
ultiplo de sus argumentos. Los argumentos pueden ser
tanto expresiones en general como enteros.
Es necesario cargar en memoria esta funcion haciendo load ("functs").

lucas (n )

[Funcion]
Devuelve el n-esimo n
umero de Lucas. lucas(0) es igual a 2, lucas(1) es igual a 1
y lucas(-n ) es igual a (-1)^(-n ) * lucas(n ).
(%i1) map (lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o1)
[7, - 4, 3, - 1, 2, 1, 3, 4, 7, 11, 18, 29, 47]
Despues de llamar a lucas, la variable global next_lucas es igual a lucas (n + 1),
el n
umero de Lucas que sigue al u
ltimo que se ha devuelto. El ejemplo muestra como
los n
umeros de Fibonacci se pueden calcular mediante lucas y next_lucas.
(%i1) fib_via_lucas(n) :=
block([lucas : lucas(n)],
signum(n) * (2*next_lucas - lucas)/5 )$
(%i2) map (fib_via_lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o2)
[- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]

mod (x, y )

[Funcion]
Si x e y son n
umeros reales e y es distinto de cero, devuelve x - y * floor(x / y ).
Para todos los reales x, se tiene mod (x, 0) = x . Para informacion sobre la definicion
de mod (x, 0) = x , vease la seccion 3.4 de "Concrete Mathematics", by Graham,
Knuth, and Patashnik. La funcion mod (x, 1) es de diente de sierra con periodo
unidad y con mod (1, 1) = 0 y mod (0, 1) = 0.
Para encontrar el argumento principal (un n
umero del intervalo (-%pi, %pi]) de un
n
umero complejo, h
agase uso de la funcion x |-> %pi - mod (%pi - x, 2*%pi), donde
x es un argumento.
Si x e y son expresiones constantes (por ejemplo, 10 * %pi), mod utiliza el mismo
esquema de evaluaci
on basado en n
umeros grandes en coma flotante (big floats) que
floor y ceiling. Tambien es posible, pero improbable, que mod pueda retornar un
valor err
oneo en tales casos.
Para argumentos no numericos x o y, mod aplica algunas reglas de simplificacion:
(%i1) mod (x, 0);
(%o1)
x
(%i2) mod (a*x, a*y);
(%o2)
a mod(x, y)

478

Manual de Maxima

(%i3) mod (0, x);


(%o3)

next_prime (n )

[Funcion]

Devuelve el menor de los primos mayores que n.


(%i1) next_prime(27);
(%o1)

29

partfrac (expr, var )

[Funcion]
Expande la expresi
on expr en fracciones parciales respecto de la variable principal
var. La funci
on partfrac hace una descomposicion completa en fracciones parciales.
El algoritmo que se utiliza se basa en el hecho de que los denominadores de la expansi
on en fracciones parciales (los factores del denominador original) son primos
relativos. Los numeradores se pueden escribir como combinaciones lineales de los
denominadores.
(%i1) 1/(1+x)^2 - 2/(1+x) + 2/(2+x);
2
2
1
(%o1)
----- - ----- + -------x + 2
x + 1
2
(x + 1)
(%i2) ratsimp (%);
x
(%o2)
- ------------------3
2
x + 4 x + 5 x + 2
(%i3) partfrac (%, x);
2
2
1
(%o3)
----- - ----- + -------x + 2
x + 1
2
(x + 1)

power_mod (a, n, m )

[Funcion]
Utiliza un algoritmo modular para calcular a^n mod m, siendo a y n enteros cualesquiera y m un entero positivo. Si n es negativo, se utilizara inv_mod para encontrar
el inverso modular.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

primep (n )

power_mod(3, 15, 5);


2
mod(3^15,5);
2
power_mod(2, -1, 5);
3
inv_mod(2,5);
3

[Funcion]
Comprueba si el n
umero entero n es o no primo, devolviendo true o false seg
un el
caso.

Captulo 29: Teora de N


umeros

479

Cuando el resultado de primep (n ) es false, n es un n


umero compuesto, y si es
true, n es primo con alta probabilidad.
Si n es menor que 341550071728321, se utiliza una version determinstica de la prueba
de Miller-Rabin. En tal caso, si primep (n ) devuelve true, entonces n es un n
umero
primo.
Para n mayor que 341550071728321 primep realiza primep_number_of_tests pruebas de seudo-primalidad de Miller-Rabin y una prueba de seudo-primalidad de Lucas.
La probabilidad de que un n
umero compuesto n pase una prueba de Miller-Rabin es
menor que 1/4. Con el valor por defecto de primep_number_of_tests, que es 25, la
probabilidad de que n sea compuesto es menor que 10^-15.

primep_number_of_tests

[Variable opcional]

Valor por defecto: 25


N
umero de pruebas de Miller-Rabin a realizar por primep.

prev_prime (n )

[Funcion]

Devuelve el mayor de los primos menores que n.


(%i1) prev_prime(27);
(%o1)
23

qunit (n )

[Funcion]
Devuelve la unidad principal de sqrt (n ), siendo n un entero; consiste en la resolucion
de la ecuaci
on de Pell a^2 - n b^2 = 1.
(%i1) qunit (17);
(%o1)
sqrt(17) + 4
(%i2) expand (% * (sqrt(17) - 4));
(%o2)
1

totient (n )

[Funcion]
Devuelve el n
umero de enteros menores o iguales a n que son primos relativos con n.

[Variable opcional]
Valor por defecto: true
Si zerobern vale false, bern excluye los n
umeros de Bernoulli y euler excluye los
n
umeros de Euler que sean iguales a cero. Vease bern y euler.

zerobern

zeta (n )

[Funcion]
Devuelve la funci
on zeta de Riemann. Si n es entero negativo, 0 o n
umero par
positivo, la funci
on zeta de Riemann devuelve un valor exacto; en el caso de n
umero
par positivo, la variable opcional zeta%pi, ademas, tiene que tener el valor true
(vease zeta%pi). Cuando el argumento es un n
umero decimal o bigfloat, entonces
la funci
on zeta de Riemann se calcula numericamente. Maxima devuelve una forma
nominal zeta (n ) para cualesquiera otros argumentos, incluidos los racionales no
enteros, los n
umeros complejos y los enteros pares si zeta%pi vale false.
zeta(1) no est
a definida, pero Maxima conce el lmite de limit(zeta(x), x, 1) por
ambos lados.
La funci
on zeta de Riemann se distribuye sobre las listas, matrices y ecuaciones.

480

Manual de Maxima

Veanse tambien bfzeta y zeta%pi.


Ejemplos:
(%i1) zeta([-2,-1,0,0.5,2,3,1+%i]);

(%o1)

2
1
1
%pi
[0, - --, - -, - 1.460354508809587, ----, zeta(3), zeta(%i + 1)]
12
2
6

(%i2) limit(zeta(x),x,1,plus);
(%o2)
(%i3) limit(zeta(x),x,1,minus);
(%o3)

inf
minf

zeta%pi

[Variable opcional]

Valor por defecto: true


Si zeta%pi vale true, zeta devuelve una expresion proporcional a %pi^n si n es
un n
umero par positivo. En caso contrario, zeta no se eval
ua y devuelve la forma
nominal zeta (n).
Ejemplos:
(%i1) zeta%pi: true$
(%i2) zeta (4);
4
%pi
(%o2)
---90
(%i3) zeta%pi: false$
(%i4) zeta (4);
(%o4)
zeta(4)

zn_add_table (n )

[Funcion]

Muestra la tabla de la suma de todos los elementos de (Z/nZ).


Veanse tambien zn_mult_table y zn_power_table.

zn_determinant (matrix, p )

[Funcion]
Utiliza el procedimiento de la descomposicion LU para calcular el determinante de
matrix sobre (Z/pZ). El argumento p debe ser un n
umero primo.
Si el determinante es igual a cero, el procedimiento puede fallar, en cuyo caso zn_
determinant calcula el determinante no modular y luego reduce.
Vease tambien zn_invert_by_lu.
Ejemplo:
(%i1) m : matrix([1,3],[2,4]);
[ 1 3 ]
(%o1)
[
]
[ 2 4 ]
(%i2) zn_determinant(m, 5);
(%o2)
3

Captulo 29: Teora de N


umeros

481

(%i3) m : matrix([2,4,1],[3,1,4],[4,3,2]);
[ 2 4 1 ]
[
]
(%o3)
[ 3 1 4 ]
[
]
[ 4 3 2 ]
(%i4) zn_determinant(m, 5);
(%o4)
0

zn_invert_by_lu (matrix, p )

[Funcion]
Utiliza el procedimiento de la descomposicion LU para calcular la inversa modular de
matrix sobre (Z/pZ). El argumento p debe ser un n
umero primo y matrix invertible.
La funci
on zn_invert_by_lu devuelve false si matrix no es invertible.
Vease zn_determinant.
Ejemplo:
(%i1) m : matrix([1,3],[2,4]);
[ 1 3 ]
(%o1)
[
]
[ 2 4 ]
(%i2) zn_determinant(m, 5);
(%o2)
3
(%i3) mi : zn_invert_by_lu(m, 5);
[ 3 4 ]
(%o3)
[
]
[ 1 2 ]
(%i4) matrixmap(lambda([a], mod(a, 5)), m . mi);
[ 1 0 ]
(%o4)
[
]
[ 0 1 ]

zn_log (a, g, n )
zn_log (a, g, n, [[p1, e1 ], . . . , [pk, ek ]])

[Funcion]
[Funcion]
Calcula el logaritmo discreto. Sea (Z/nZ)* un grupo cclico, g una raz primitiva
modulo n y a un miembro de este grupo, entonces zn_log (a, g, n) calcula la congruencia g^x = a mod n.
El algoritmo que se aplica necesita una factorizacion prima de totient(n). Esta
factorizaci
on puede requerir mucho tiempo de calculo, por lo que en ciertos casos
puede ser aconsejable factorizar primero y luego pasar la lista de factores a zn_log
como cuarto argumento. La lista debe ser de la misma forma que las lista devuelta
por ifactors(totient(n)) utilizando la opcion por defecto factors_only : false.
El algoritmo utiliza la reduccion de Pohlig-Hellman y el metodo Rho de Pollard para
los logaritmos discretos. El tiempo de ejecucion de zn_log depende en primer lugar
del n
umero de bits del mayor factor primo del totient.
Veanse tambien zn_primroot, zn_order, ifactors y totient.
Ejemplos:
zn_log (a, g, n) resuelve la congruencia g^x = a mod n.

482

Manual de Maxima

(%i1) n : 22$
(%i2) g : zn_primroot(n);
(%o2)
7
(%i3) ord_7 : zn_order(7, n);
(%o3)
10
(%i4) powers_7 : makelist(power_mod(g, x, n), x, 0, ord_7 - 1);
(%o4)
[1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
(%i5) zn_log(21, g, n);
(%o5)
5
(%i6) map(lambda([x], zn_log(x, g, n)), powers_7);
(%o6)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
El cuarto argumento opcional debe ser de la misma forma que la lista devuelta por
ifactors(totient(n)).
(%i1) (p : 2^127-1, primep(p));
(%o1)
true
(%i2) ifs : ifactors(p - 1)$
(%i3) g : zn_primroot(p, ifs);
(%o3)
43
(%i4) a : power_mod(g, 1234567890, p)$
(%i5) zn_log(a, g, p, ifs);
(%o5)
1234567890
(%i6) time(%o5);
(%o6)
[1.204]
(%i7) f_max : last(ifs);
(%o7)
[77158673929, 1]
(%i8) slength( printf(false, "~b", f_max[1]) );
(%o8)
37

zn_mult_table (n )
zn_mult_table (n, all)

[Funcion]
[Funcion]
Sin el argumento opcional all, zn_mult_table(n) muestra la tabla de multiplicacion
de los elementos de (Z/nZ)*, que son todos elementos invertibles modulo n.
El argumento opcional all hace que la tabla se genere para todos los elementos no
nulos.
Veanse tambien zn_add_table y zn_power_table.
Ejemplo:
(%i1) zn_mult_table(4);
[ 1 3 ]
(%o1)
[
]
[ 3 1 ]
(%i2) zn_mult_table(4, all);
[ 1 2 3 ]
[
]
(%o2)
[ 2 0 2 ]
[
]
[ 3 2 1 ]

Captulo 29: Teora de N


umeros

483

zn_order (x, n )
zn_order (x, n, [[p1, e1 ], . . . , [pk, ek ]])

[Funcion]
[Funcion]
Devuelve el orden de x si es una unidad del grupo finito (Z/nZ)*, o devuelve false.
x una unidad m
odulo n si es coprimo con n.

El algoritmo que se aplica necesita una factorizacion prima de totient(n). Esta


factorizaci
on puede requerir mucho tiempo de calculo, por lo que en ciertos casos
puede ser aconsejable factorizar primero y luego pasar la lista de factores a zn_log
como tercer argumento. La lista debe ser de la misma forma que las lista devuelta
por ifactors(totient(n)) utilizando la opcion por defecto factors_only : false.
Veanse tambien zn_primroot, ifactors y totient.
Ejemplos:
zn_order calcula el orden de la unidad x en (Z/nZ)*.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

n : 22$
g : zn_primroot(n);
7
units_22 : sublist(makelist(i,i,1,21), lambda([x], gcd(x, n) = 1));
[1, 3, 5, 7, 9, 13, 15, 17, 19, 21]
(ord_7 : zn_order(7, n)) = totient(n);
10 = 10
powers_7 : makelist(power_mod(g,i,n), i,0,ord_7 - 1);
[1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
map(lambda([x], zn_order(x, n)), powers_7);
[1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
map(lambda([x], ord_7/gcd(x, ord_7)), makelist(i, i,0,ord_7 - 1));
[1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
totient(totient(n));
4

El tercer argumento opcional debe ser de la misma forma que la lista devuelta por
ifactors(totient(n)).
(%i1)
(%o1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

(p : 2^142 + 217, primep(p));


true
ifs : ifactors( totient(p) )$
g : zn_primroot(p, ifs);
3
is( (ord_3 : zn_order(g, p, ifs)) = totient(p) );
true
map(lambda([x], ord_3/zn_order(x, p, ifs)), makelist(i,i,2,15));
[22, 1, 44, 10, 5, 2, 22, 2, 8, 2, 1, 1, 20, 1]

zn_power_table (n )
zn_power_table (n, all)

[Funcion]
[Funcion]
Sin el argumento opcional all, zn_power_table(n) muestra la tabla de potencias de
los elementos de (Z/nZ)*, que son todos elementos invertibles modulo n. El exponente
se obtiene con un bucle desde 1 hasta totient(n) y la tabla termina con una columna
de unos al lado derecho.

484

Manual de Maxima

El argumento opcional all hace que la tabla se genere para todos los elementos no
nulos. En este caso, el exponente se calcula con un bucle desde 1 hasta totient(n)
+ 1 y la u
ltima columna es por lo tanto igual a la primera.
Veanse tambien zn_add_table y zn_mult_table.
Ejemplo:
(%i1) zn_power_table(6);
[ 1
[
[ 5

(%o1)

1 ]
]
1 ]

(%i2) zn_power_table(6, all);


[
[
[
[
[
[
[
[
[

(%o2)

1 ]
]
2 ]
]
3 ]
]
4 ]
]
5 ]

zn_primroot (n )
zn_primroot (n, [[p1, e1 ], . . . , [pk, ek ]])

[Funcion]
[Funcion]
Si el grupo multiplicativo es cclico, zn_primroot calcula la menor raz primitiva de
modulo n. (Z/nZ)* es cclico si n es igual a 2, 4, p^k o 2*p^k, siendo p primo y
mayor que 2 y k un n
umero natural. Si a la variable opcional zn_primroot_pretest,
cuyo valor por defecto es false, se le da el valor true, entonces zn_primroot realiza
una prueba previa. En cualquier caso, el calculo esta limitado por la cota superior
zn_primroot_limit.
Si (Z/nZ)* no es cclico o si no tiene races primitivas menores que zn_primroot_
limit, zn_primroot devuelve false.
El algoritmo que se aplica necesita una factorizacion prima de totient(n). Esta
factorizaci
on puede requerir mucho tiempo de calculo, por lo que en ciertos casos
puede ser aconsejable factorizar primero y luego pasar la lista de factores a zn_log
como argumento adicional. La lista debe ser de la misma forma que las lista devuelta
por ifactors(totient(n)) utilizando la opcion por defecto factors_only : false.
Veanse tambien zn_primroot_p, zn_order, ifactors y totient.
Ejemplos:
zn_primroot calcula la menor raz primitiva de modulo n o devuelve false.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%i5)

n : 14$
g : zn_primroot(n);
3
zn_order(g, n) = totient(n);
6 = 6
n : 15$
zn_primroot(n);

Captulo 29: Teora de N


umeros

(%o5)

485

false

El argumento opcional debe ser de la misma forma que la lista devuelta por
ifactors(totient(n)).
(%i1)
(%o1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%i7)
(%i8)

(p : 2^142 + 217, primep(p));


true
ifs : ifactors( totient(p) )$
g : zn_primroot(p, ifs);
3
[time(%o2), time(%o3)];
[[15.556972], [0.004]]
is(zn_order(g, p, ifs) = p - 1);
true
n : 2^142 + 216$
ifs : ifactors(totient(n))$
zn_primroot(n, ifs),
zn_primroot_limit : 200, zn_primroot_verbose : true;
zn_primroot stopped at zn_primroot_limit = 200
(%o8)
false

zn_primroot_limit

[Option variable]

Valor por defecto: 1000


Si zn_primroot no puede encontrar una raz primitiva, entonces se para en esta cota
superior. Si a la variable opcional zn_primroot_verbose se le da el valor true, se
imprimir
a un mensaje cuando zn_primroot_limit sea alcanzado.

zn_primroot_p (x, n )
zn_primroot_p (x, n, [[p1, e1 ], . . . , [pk, ek ]])

[Funcion]
[Funcion]

Comprueba si x es una raz primitiva en el grupo multiplizativo (Z/nZ)*.


El algoritmo que se aplica necesita una factorizacion prima de totient(n). Esta
factorizaci
on puede requerir mucho tiempo de calculo, por lo que en ciertos casos
puede ser aconsejable factorizar primero y luego pasar la lista de factores a zn_log
como tercer argumento. La lista debe ser de la misma forma que las lista devuelta
por ifactors(totient(n)) utilizando la opcion por defecto factors_only : false.
Veanse tambien zn_primroot, zn_order, ifactors y totient.
Ejemplos:
zn_primroot_p como funci
on de predicado.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

n : 14$
units_14 : sublist(makelist(i,i,1,13), lambda([i], gcd(i, n) = 1));
[1, 3, 5, 9, 11, 13]
zn_primroot_p(13, n);
false
sublist(units_14, lambda([x], zn_primroot_p(x, n)));
[3, 5]
map(lambda([x], zn_order(x, n)), units_14);
[1, 6, 6, 3, 3, 2]

486

Manual de Maxima

El tercer argumento opcional debe ser de la misma forma que la lista devuelta por
ifactors(totient(n)).
(%i1) (p : 2^142 + 217, primep(p));
(%o1)
true
(%i2) ifs : ifactors( totient(p) )$
(%i3) sublist(makelist(i,i,1,50), lambda([x], zn_primroot_p(x, p, ifs)));
(%o3)
[3, 12, 13, 15, 21, 24, 26, 27, 29, 33, 38, 42, 48]
(%i4) [time(%o2), time(%o3)];
(%o4)
[[7.748484], [0.036002]]
[Option variable]
Valor por defecto: false
El grupo multiplicativo (Z/nZ)* es cclico si if n es igual a 2, 4, p^k o 2*p^k, siendo
p un n
umero primo mayor que 2 y k es un n
umero natural.
La variable zn_primroot_pretest controla si zn_primroot debe comprobar si sucede
alguna de estas situaciones antes de calcular la menor raz primitiva. Solo se realizar
a
esta comprobaci
on si zn_primroot_pretest toma el valor true.

zn_primroot_pretest

[Option variable]
Valor por defecto: false
Controla si zn_primroot imprime un mensaje cuando alcanza zn_primroot_limit.

zn_primroot_verbose

Captulo 30: Simetras

487

30 Simetras
Paquete escrito para Macsyma-Symbolics por Annick Valibouze1 . Los algoritmos estan
descritos en los siguientes artculos:
1. Fonctions symetriques et changements de bases2 . Annick Valibouze. EUROCAL87
(Leipzig, 1987), 323332, Lecture Notes in Comput. Sci 378. Springer, Berlin, 1989.
2. Resolvantes et fonctions symetriques3 . Annick Valibouze. Proceedings of the ACMSIGSAM 1989 International Symposium on Symbolic and Algebraic Computation, ISSAC89 (Portland, Oregon). ACM Press, 390-399, 1989.
3. Symbolic computation with symmetric polynomials, an extension to Macsyma4 . Annick
Valibouze. Computers and Mathematics (MIT, USA, June 13-17, 1989), SpringerVerlag, New York Berlin, 308-320, 1989.
4. Theorie de Galois Constructive. Annick Valibouze. Memoire dhabilitation `a diriger
les recherches (HDR), Universite P. et M. Curie (Paris VI), 1994

30.1 Funciones y variables para simetras


comp2pui (n, l )

[Funcion]
Realiza el paso de las funciones simetricas completas de la lista l a las funciones
simetricas elementales de 0 a n. En caso de que la lista l contenga menos de n +1 elementos, se completar
a con valores formales. El primer elemento de la lista l almacena
el cardinal del alfabeto, en caso de que exista; en caso contrario se le da el valor n.
(%i1) comp2pui (3, [4, g]);
2
2
(%o1)
[4, g, 2 h2 - g , 3 h3 - g h2 + g (g - 2 h2)]

cont2part (pc, lvar )

[Funcion]
Convierte el polinomio particionado asociado a la forma contrada pc, cuyas variables
se encuentran en lvar.
(%i1) pc: 2*a^3*b*x^4*y + x^5;
3
4
5
(%o1)
2 a b x y + x
(%i2) cont2part (pc, [x, y]);
3
(%o2)
[[1, 5, 0], [2 a b, 4, 1]]
Otras funciones para efectuar cambios de representacion son: contract, explose,
part2cont, partpol, tcontract y tpartpol.

contract (psym, lvar )

[Funcion]
Convierte una forma contrada (como un monomio por orbita sobre la accion del
grupo simetrico) del polinomio psym cuyas variables se encuentran en la lista lvar.

1
2
3
4

www-calfor.lip6.fr/~avb
www.stix.polytechnique.fr/publications/1984-1994.html
www-calfor.lip6.fr/~avb/DonneesTelechargeables/MesArticles/issac89ACMValibouze.pdf
www.stix.polytechnique.fr/publications/1984-1994.html

488

Manual de Maxima

La funci
on explose realiza la operacion inversa. A mayopes, la funcion tcontract
comprueba la simetra del polinomio.
(%i1) psym: explose (2*a^3*b*x^4*y, [x, y, z]);
3
4
3
4
3
4
3
4
(%o1) 2 a b y z + 2 a b x z + 2 a b y z + 2 a b x z
3
4
3
4
+ 2 a b x y + 2 a b x y
(%i2) contract (psym, [x, y, z]);
3
4
(%o2)
2 a b x y
Otras funciones para efectuar cambios de representacion son:
cont2part, explose, part2cont, partpol, tcontract, tpartpol.

direct ([p_1, ..., p_n ], y, f, [lvar_1, ..., lvar_n ])

[Funcion]
Calcula la imagen directa (vease M. Giusti, D. Lazard et A. Valibouze, ISSAC 1988,
Roma) asociada a la funci
on f, en las listas de variables lvar 1, ..., lvar n, y en
los polinomios p 1, ..., p n de una variable y. Si la expresion de f no depende de
variable alguna, no s
olo es in
util aportar esa variable, sino que tambien disminuyen
considerablemente los c
alculos cuando la variable no se declara.
(%i1) direct ([z^2 - e1* z + e2, z^2 - f1* z + f2],
z, b*v + a*u, [[u, v], [a, b]]);
2
(%o1) y - e1 f1 y

(%i2)
(%o2)
(%i3)

(%o3)

2
2
2
2
- 4 e2 f2 - (e1 - 2 e2) (f1 - 2 f2) + e1 f1
+ ----------------------------------------------2
ratsimp (%);
2
2
2
y - e1 f1 y + (e1 - 4 e2) f2 + e2 f1
ratsimp (direct ([z^3-e1*z^2+e2*z-e3,z^2 - f1* z + f2],
z, b*v + a*u, [[u, v], [a, b]]));
6
5
2
2
2
4
y - 2 e1 f1 y + ((2 e1 - 6 e2) f2 + (2 e2 + e1 ) f1 ) y

3
3
3
+ ((9 e3 + 5 e1 e2 - 2 e1 ) f1 f2 + (- 2 e3 - 2 e1 e2) f1 ) y
2
2
4
2
+ ((9 e2 - 6 e1 e2 + e1 ) f2
2
2
2
2
4
+ (- 9 e1 e3 - 6 e2 + 3 e1 e2) f1 f2 + (2 e1 e3 + e2 ) f1 )

Captulo 30: Simetras

489

2
2
2
3
2
y + (((9 e1 - 27 e2) e3 + 3 e1 e2 - e1 e2) f1 f2
2
2
3
5
+ ((15 e2 - 2 e1 ) e3 - e1 e2 ) f1 f2 - 2 e2 e3 f1 ) y
2
3
3
2
2
3
+ (- 27 e3 + (18 e1 e2 - 4 e1 ) e3 - 4 e2 + e1 e2 ) f2
2
3
3
2
2
+ (27 e3 + (e1 - 9 e1 e2) e3 + e2 ) f1 f2
2
4
2
6
+ (e1 e2 e3 - 9 e3 ) f1 f2 + e3 f1
B
usqueda del polinomio cuyas races son la suma a + u o a es la raz de z 2 e1 z + e2
y u es la raz de z 2 f 1 z + f 2
(%i1) ratsimp (direct ([z^2 - e1* z + e2, z^2 - f1* z + f2],
z, a + u, [[u], [a]]));
4
3
2
(%o1) y + (- 2 f1 - 2 e1) y + (2 f2 + f1 + 3 e1 f1 + 2 e2
2
2
2
2
+ e1 ) y + ((- 2 f1 - 2 e1) f2 - e1 f1 + (- 2 e2 - e1 ) f1
2
2
2
- 2 e1 e2) y + f2 + (e1 f1 - 2 e2 + e1 ) f2 + e2 f1 + e1 e2 f1
2
+ e2
La funci
on direct acepta dos indicadores: elementaires (elementales) y puissances
(potenciales, que es el valor por defecto) que permiten hacer la descomposicion de los
polinomios simetricos que aparezcan en los calculos en funciones simetricas elementales o en funciones potenciales, respectivamente.
Funciones de sym utilizadas en esta funcion:
multi_orbit(por tanto orbit),pui_direct, multi_elem (por tanto elem),
multi_pui (por tanto pui), pui2ele, ele2pui (si al indicador direct se le asign
o
puissances).

ele2comp (m, l )

[Funcion]
Pasa las funciones simetricas elementales a funciones completas, de forma similar a
comp2ele y comp2pui.

Otras funciones para cambio de bases son:


comp2ele, comp2pui, ele2pui, elem, mon2schur, multi_elem, multi_pui, pui,
pui2comp, pui2ele, puireduc y schur2comp.

490

Manual de Maxima

ele2polynome (l, z )

[Funcion]
Devuelve el polinomio en z en el que las funciones simetricas elementales de las races
son las de la lista l. l = [n, e_1, ..., e_n ], donde n es el grado del polinomio y e i
la i-esima funci
on simetrica elemental.
(%i1) ele2polynome ([2, e1, e2], z);
2
(%o1)
z - e1 z + e2
(%i2) polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
(%o2)
[7, 0, - 14, 0, 56, 0, - 56, - 22]
(%i3) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
7
5
3
(%o3)
x - 14 x + 56 x - 56 x + 22
La funci
on recproca es polynome2ele (P, z )
Veanse tambien polynome2ele y pui2polynome.

ele2pui (m, l )

[Funcion]
Pasa las funciones simetricas elementales a funciones completas, de forma similar a
comp2ele y comp2comp.
Otras funciones para cambio de bases son:
comp2ele, comp2pui, ele2comp, elem, mon2schur, multi_elem, multi_pui, pui,
pui2comp, pui2ele, puireduc y schur2comp.

elem (ele, sym, lvar )

[Funcion]
Descompone el polinomio simetrico sym con las variables continuas de la lista lvar en
las funciones simetricas elementales contenidas en la lista ele. El primer elemento de
la lista ele almacena el cardinal del alfabeto, en caso de que exista; en caso contrario
se le da como valor el grado del polinomio sym. Si faltan valores en la lista ele, esta se
completar
a con valores formales del tipo "ei". El polinomio sym puede especificarse
de tres formas diferentes: contrado (en cuyo caso elem debe valer 1, que es el valor
por defecto), particionado (elem valdra 3) o extendido (por ejemplo, el polinomio
completo) (en este caso, elem valdra 2). La utilizacion de la funcion pui se hace
siguiendo este mismo modelo.
Con un alfabeto de cardinal 3 con e1, la primera funcion simetrica elemental valiendo
7, el polinomio simetrico de tres variables cuya forma contrada (aqu dependiendo
solamente de dos de sus variables) es 4 2xy, se descompone en funciones simetricas
elementales:
(%i1) elem ([3, 7], x^4 - 2*x*y, [x, y]);
(%o1) 7 (e3 - 7 e2 + 7 (49 - e2)) + 21 e3
+ (- 2 (49 - e2) - 2) e2
(%i2) ratsimp (%);
2
(%o2)
28 e3 + 2 e2 - 198 e2 + 2401
Otras funciones para cambio de bases son: comp2ele, comp2pui, ele2comp,
ele2pui, mon2schur, multi_elem, multi_pui, pui, pui2comp, pui2ele, puireduc
y schur2comp.

Captulo 30: Simetras

491

explose (pc, lvar )

[Funcion]
Devuelve el polinomio simetrico asociado a la forma contrada pc. La lista lvar contiene las variables.
(%i1) explose (a*x + 1, [x, y, z]);
(%o1)
a z + a y + a x + 1
Otras funciones para efectuar cambios de representacion son: contract, cont2part,
part2cont, partpol, tcontract y tpartpol.

kostka (part_1, part_2 )

[Funcion]
Funci
on escrita por P. Espert, calcula el n
umero de Kostka asociado a las particiones
part 1 y part 2.
(%i1) kostka ([3, 3, 3], [2, 2, 2, 1, 1, 1]);
(%o1)
6

lgtreillis (n, m )

[Funcion]

Devuelve la lista de particiones de peso n y longitud m.


(%i1) lgtreillis (4, 2);
(%o1)
[[3, 1], [2, 2]]
Veanse tambien ltreillis, treillis y treinat.

ltreillis (n, m )

[Funcion]

Devuelve la lista de particiones de peso n y longitud menor o igual que m.


(%i1) ltreillis (4, 2);
(%o1)
[[4, 0], [3, 1], [2, 2]]
Veanse tambient lgtreillis, treillis y treinat.

mon2schur (l )

[Funcion]
La lista l representa la funci
on de Schur S l: Se tiene l = [i 1, i 2, ..., i q] con i 1 <=
i 2 <= ... <= i q. La funci
on de Schur es S [i 1, i 2, ..., i q], el menor de la matriz
infinita (h {i-j}) i >= 1, j >= 1 compuesto de las q primeras filas y columnas i 1 + 1,
i 2 + 2, ..., i q + q.
Se ha escrito esta funci
on de Schur en funcion de las formas monomiales utilizando
las funciones treinat y kostka. La forma devuelta es un polinomio simetrico en una
de sus representaciones contradas con las variables x 1, x 2, ...
(%i1) mon2schur ([1, 1, 1]);
(%o1)
x1 x2 x3
(%i2) mon2schur ([3]);
2
3
(%o2)
x1 x2 x3 + x1 x2 + x1
(%i3) mon2schur ([1, 2]);
2
(%o3)
2 x1 x2 x3 + x1 x2
Para 3 variables se tendr
a:
2 x1 x2 x3 + x1^2 x2 + x2^2 x1 + x1^2 x3 + x3^2 x1
+ x2^2 x3 + x3^2 x2
Otras funciones para cambio de bases son:

492

Manual de Maxima

comp2ele, comp2pui, ele2comp, ele2pui, elem, multi_elem, multi_pui, pui,


pui2comp, pui2ele, puireduc y schur2comp.

multi_elem (l_elem, multi_pc, l_var )

[Funcion]
Descompone un polinomio multisimetrico sobre una forma multicontrada multi pc
en los grupos de variables contenidas en la lista de listas l var sobre los grupos de
funciones simetricas elementales contenidas en l elem.
(%i1) multi_elem ([[2, e1, e2], [2, f1, f2]], a*x + a^2 + x^3,
[[x, y], [a, b]]);
3
(%o1)
- 2 f2 + f1 (f1 + e1) - 3 e1 e2 + e1
(%i2) ratsimp (%);
2
3
(%o2)
- 2 f2 + f1 + e1 f1 - 3 e1 e2 + e1
Otras funciones para cambio de bases son:
comp2ele, comp2pui, ele2comp, ele2pui, elem, mon2schur, multi_pui, pui,
pui2comp, pui2ele, puireduc y schur2comp.

multi_orbit (P, [lvar_1, lvar_2, ..., lvar_p ])

[Funcion]
P es un polinomio en el conjunto de variables contenidas en las listas lvar 1, lvar 2, ...,
lvar p. Esta funci
on restablece la orbita del polinomio P sobre la accion del producto
de los grupos simetricos de los conjuntos de variables representadas por esas p listas.
(%i1) multi_orbit (a*x + b*y, [[x, y], [a, b]]);
(%o1)
[b y + a x, a y + b x]
(%i2) multi_orbit (x + y + 2*a, [[x, y], [a, b, c]]);
(%o2)
[y + x + 2 c, y + x + 2 b, y + x + 2 a]
Vease tambien orbit para la accion de un solo grupo simerico.
[Funcion]

multi_pui
Es a la funci
on pui lo que la funcion multi_elem es a la funcion elem.

(%i1) multi_pui ([[2, p1, p2], [2, t1, t2]], a*x + a^2 + x^3,
[[x, y], [a, b]]);
3
3 p1 p2
p1
(%o1)
t2 + p1 t1 + ------- - --2
2

multinomial (r, part )

[Funcion]
El argumento r es el peso de la particion part. Esta funcion calcula el coeficiente
multinomial asociado: si las partes de las particiones part son i 1, i 2, ..., i k, el
resultado de multinomial es r !/(i_1 ! i_2 ! ... i_k !).

multsym (ppart_1, ppart_2, n )

[Funcion]
Calcula el producto de dos polinomios simetricos de n variables operando solamente
con el m
odulo de la acci
on del grupo simetrico de orden n. Los polinomios estan en
su representaci
on particionada.

Captulo 30: Simetras

493

Sean los dos polinomios simetricos en x e y: 3*(x + y) + 2*x*y y 5*(x^2 + y^2)


cuyas formas particionadas son [[3, 1], [2, 1, 1]] y [[5, 2]], respectivamente; el
producto de ambos ser
a:
(%i1) multsym ([[3, 1], [2, 1, 1]], [[5, 2]], 2);
(%o1)
[[10, 3, 1], [15, 3, 0], [15, 2, 1]]
o sea, 10*(x^3*y + y^3*x) + 15*(x^2*y + y^2*x) + 15*(x^3 + y^3).
Funciones de cambio de representacion de un polinomio simetrico:
contract, cont2part, explose, part2cont, partpol, tcontract y tpartpol.

orbit (P, lvar )

[Funcion]
Calcula la
orbita de un polinomio P en las variables de la lista lvar bajo la accion del
grupo simetrico del conjunto de variables contenidas en la lista lvar.
(%i1) orbit (a*x + b*y, [x, y]);
(%o1)
[a y + b x, b y + a x]
(%i2) orbit (2*x + x^2, [x, y]);
2
2
(%o2)
[y + 2 y, x + 2 x]

Vease tambien multi_orbit para la accion de un producto de grupos simetricos sobre


un polinomio.

part2cont (ppart, lvar )

[Funcion]
Transforma un polinomio simetrico de su forma particionada a su forma contrada.
La forma contrada se devuelve con las variables contenidas en lvar.
(%i1) part2cont ([[2*a^3*b, 4, 1]], [x, y]);
3
4
(%o1)
2 a b x y
Otras funciones para efectuar cambios de representacion son:
contract, cont2part, explose, partpol, tcontract y tpartpol.

partpol (psym, lvar )

[Funcion]
Restablece la representaci
on particionada del polinomio simetrico psym de variables
en lvar.
(%i1) partpol (-a*(x + y) + 3*x*y, [x, y]);
(%o1)
[[3, 1, 1], [- a, 1, 0]]

Otras funciones para efectuar cambios de representacion son:


contract, cont2part, explose, part2cont, tcontract y tpartpol.

permut (l )

[Funcion]

Devuelve la lista de permutaciones de la lista l.

polynome2ele (P, x )

[Funcion]
Devuelve la lista l = [n, e_1, ..., e_n ], en la que n es el grado del polinomio P de
variable x y e i es la i-esima funcion simetrica elemental de las races de P.
(%i1) polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
(%o1)
[7, 0, - 14, 0, 56, 0, - 56, - 22]

494

Manual de Maxima

(%i2) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);


7
5
3
(%o2)
x - 14 x + 56 x - 56 x + 22
La funci
on recproca es ele2polynome (l, x ).

prodrac (l, k )

[Funcion]
Siendo l una lista que contiene las funciones simetricas elementales sobre un conjunto
A, la funci
on prodrac calcula el polinomio cuyas races son los productos k a k de
los elementos de A.

pui (l, sym, lvar )

[Funcion]
Descompone el polinomio simetrico sym, cuyas variables son las contenidas en lvar,
en las funciones potenciales contenidas en la lista l. El primer elemento de la lista l
almacena el cardinal del alfabeto, en caso de que exista; en caso contrario se le da el
grado del polinomio sym. Si faltan los valores de la lista l, en su lugar seran colocados
valores formales del tipo "pi". El polinomio sym puede especificarse de tres formas
diferentes: contrado (en cuyo caso pui debe valer 1, que es el valor por defecto),
particionado (pui valdr
a 3) o extendido (por ejemplo, el polinomio completo) (en
este caso, pui valdr
a 2). La utilizacion de la funcion elem se hace siguiendo este
mismo modelo.
(%i1) pui;
(%o1)
1
(%i2) pui ([3, a, b], u*x*y*z, [x, y, z]);
2
a (a - b) u
(a b - p3) u
(%o2)
------------ - -----------6
3
(%i3) ratsimp (%);
3
(2 p3 - 3 a b + a ) u
(%o3)
--------------------6

Otras funciones para cambio de bases son: comp2ele, comp2pui, ele2comp,


ele2pui, elem, mon2schur, multi_elem, multi_pui, pui2comp, pui2ele, puireduc
y schur2comp.

pui2comp (n, lpui )

[Funcion]
Devuelve la lista de las n primeras funciones completas (con el cardinal en primer
lugar) en funci
on de las funciones potenciales dadas en la lista lpui. Si la lista lpui
estuviese vaca, el cardinal sera N ; si no estuviese vaca, se tomara como cardinal su
primer elemento, de forma similar a como se procede en comp2ele y en comp2pui.
(%i1) pui2comp (2, []);

(%o1)

2
p2 + p1
[2, p1, --------]
2

Captulo 30: Simetras

495

(%i2) pui2comp (3, [2, a1]);


2
a1 (p2 + a1 )
2 p3 + ------------- + a1 p2
p2 + a1
2
(%o2)
[2, a1, --------, --------------------------]
2
3
(%i3) ratsimp (%);
2
3
p2 + a1
2 p3 + 3 a1 p2 + a1
(%o3)
[2, a1, --------, --------------------]
2
6
Otras funciones para cambio de bases son: comp2ele, comp2pui, ele2comp, ele2pui,
elem, mon2schur, multi_elem, multi_pui, pui, pui2ele, puireduc y schur2comp.

pui2ele (n, lpui )

[Funcion]
Transforma las funciones potenciales a funciones simetricas elementales. Si la variable
global pui2ele vale girard, se recupera la lista de funciones simetricas elementales
de 1 n, y si es igual a close, se recupera la n-esima funcion simetrica elemental.

Otras funciones para cambio de bases son: comp2ele, comp2pui, ele2comp, ele2pui,
elem, mon2schur, multi_elem, multi_pui, pui, pui2comp, puireduc y schur2comp.

pui2polynome (x, lpui )

[Funcion]
Calcula el polinomio en x cuyas races tienen como funciones potenciales las dadas
en la lista lpui.
(%i1)
(%o1)
(%i2)
(%o0)
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)

pui;
1
kill(labels);

done
polynome2ele (x^3 - 4*x^2 + 5*x - 1, x);
[3, 4, 5, 1]
ele2pui (3, %);
[3, 4, 6, 7]
pui2polynome (x, %);
3
2
(%o3)
x - 4 x + 5 x - 1
Veanse tambien polynome2ele y ele2polynome.

pui_direct (orbite, [lvar_1, ..., lvar_n ], [d_1, d_2, ..., d_n ])

[Funcion]
Sea f un polinomio en n bloques de variables lvar 1, ..., lvar n. Sea c i el n
umero
de variables en lvar i y SC el producto de los n grupos simetricos de grados c 1, ...,
c n, que act
uan sobre f. La lista orbite es la orbita, representada por SC (f ), de la
funci
on f sobre la acci
on de SC, la cual puede ser obtenida por medio de la funcion
multi_orbit. Los valores d_i son enteros tales que c 1 <= d 1, c 2 <= d 2, ..., c n
<= d n. Por u
ltimo, sea SD el producto de los grupos simetricos S d1 x S d2 x ... x
S dn.

496

Manual de Maxima

La funci
on pui_direct devuelve las n primeras funciones potenciales de SD (f ) deducidas de las funciones potenciales de SC (f ), siendo n el cardinal de SD (f ).
El resultado se devuelve en la forma multicontrada respecto de SD.
(%i1) l: [[x, y], [a, b]];
(%o1)
[[x, y], [a, b]]
(%i2) pui_direct (multi_orbit (a*x + b*y, l), l, [2, 2]);
2 2
(%o2)
[a x, 4 a b x y + a x ]
(%i3) pui_direct (multi_orbit (a*x + b*y, l), l, [3, 2]);
2 2
2
2
3 3
(%o3) [2 a x, 4 a b x y + 2 a x , 3 a b x y + 2 a x ,
2 2 2 2
3
3
4 4
12 a b x y + 4 a b x y + 2 a x ,
3 2 3 2
4
4
5 5
10 a b x y + 5 a b x y + 2 a x ,
3 3 3 3
4 2 4 2
5
5
6 6
40 a b x y + 15 a b x y + 6 a b x y + 2 a x ]
(%i4) pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a],
[[x, y], [a, b, c]], [2, 3]);
2
2
(%o4) [3 x + 2 a, 6 x y + 3 x + 4 a x + 4 a ,
2
9 x

3
y + 12 a x y + 3 x

2
+ 6 a x

2
+ 12 a

3
x + 8 a ]

puireduc (n, lpui )

[Funcion]
Siendo lpui una lista en la que el primer elemento es un entero m, puireduc devuelve
las n primeras funciones potenciales en funcion de las m primeras.
(%i1) puireduc (3, [2]);
2
p1 (p1 - p2)
(%o1)
[2, p1, p2, p1 p2 - -------------]
2
(%i2) ratsimp (%);
3
3 p1 p2 - p1
(%o2)
[2, p1, p2, -------------]
2

resolvante (P, x, f, [x_1, ..., x_d ])

[Funcion]
Calcula la resolvente del polinomio P de variable x y grado n >= d por la funcion f de
variables x 1, ..., x d. Para mejorar los calculos, es importante no incluir en la lista
[x_1, ..., x_d ] las variables que no intervienen en la funcion de transformacion f.

Captulo 30: Simetras

497

Con el fin de hacer m


as eficaces los calculos, se puede asignar a resolvante un
indicador que permita seleccionar el algoritmo mas apropiado:
unitaire,
lineaire,
alternee,
somme,
produit,
cayley,
generale.
(%i1) resolvante: unitaire$
(%i2) resolvante (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x, x^3 - 1,
[x]);
" resolvante unitaire " [7, 0, 28, 0, 168, 0, 1120, - 154, 7840,
- 2772, 56448, - 33880,
413952, - 352352, 3076668, - 3363360, 23114112, - 30494464,
175230832, - 267412992, 1338886528, - 2292126760]
3
6
3
9
6
3
[x - 1, x - 2 x + 1, x - 3 x + 3 x - 1,
12
9
6
3
15
12
9
6
3
x
- 4 x + 6 x - 4 x + 1, x
- 5 x
+ 10 x - 10 x + 5 x
18
- 1, x

15
- 6 x

12
+ 15 x

9
- 20 x

6
+ 15 x

3
- 6 x

+ 1,

21
18
15
12
9
6
3
x
- 7 x
+ 21 x
- 35 x
+ 35 x - 21 x + 7 x - 1]
[- 7, 1127, - 6139, 431767, - 5472047, 201692519, - 3603982011]
7
6
5
4
3
2
(%o2) y + 7 y - 539 y - 1841 y + 51443 y + 315133 y
+ 376999 y + 125253
(%i3) resolvante: lineaire$
(%i4) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
" resolvante lineaire "
24
20
16
12
8
(%o4) y
+ 80 y
+ 7520 y
+ 1107200 y
+ 49475840 y
4
+ 344489984 y + 655360000
(%i5) resolvante: general$

498

Manual de Maxima

(%i6) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);


" resolvante generale "
24
20
16
12
8
(%o6) y
+ 80 y
+ 7520 y
+ 1107200 y
+ 49475840 y
4
+ 344489984 y + 655360000
(%i7) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3, x4]);
" resolvante generale "
24
20
16
12
8
(%o7) y
+ 80 y
+ 7520 y
+ 1107200 y
+ 49475840 y
4
+ 344489984 y + 655360000
(%i8) direct ([x^4 - 1], x, x1 + 2*x2 + 3*x3, [[x1, x2, x3]]);
24
20
16
12
8
(%o8) y
+ 80 y
+ 7520 y
+ 1107200 y
+ 49475840 y
4
+ 344489984 y + 655360000
(%i9) resolvante :lineaire$
(%i10) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
" resolvante lineaire "
4
(%o10)
y - 1
(%i11) resolvante: symetrique$
(%i12) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
" resolvante symetrique "
4
(%o12)
y - 1
(%i13) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
" resolvante symetrique "
6
2
(%o13)
y - 4 y - 1
(%i14) resolvante: alternee$
(%i15) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
" resolvante alternee "
12
8
6
4
2
(%o15)
y
+ 8 y + 26 y - 112 y + 216 y + 229
(%i16) resolvante: produit$

Captulo 30: Simetras

499

(%i17) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);


" resolvante produit "
35
33
29
28
27
26
(%o17) y
- 7 y
- 1029 y
+ 135 y
+ 7203 y
- 756 y
24
23
22
21
20
+ 1323 y
+ 352947 y
- 46305 y
- 2463339 y
+ 324135 y
19
18
17
15
- 30618 y
- 453789 y
- 40246444 y
+ 282225202 y
14
12
11
10
- 44274492 y
+ 155098503 y
+ 12252303 y
+ 2893401 y
9
8
7
6
- 171532242 y + 6751269 y + 2657205 y - 94517766 y
5
3
- 3720087 y + 26040609 y + 14348907
(%i18) resolvante: symetrique$
(%i19) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
" resolvante symetrique "
35
33
29
28
27
26
(%o19) y
- 7 y
- 1029 y
+ 135 y
+ 7203 y
- 756 y
24
23
22
21
20
+ 1323 y
+ 352947 y
- 46305 y
- 2463339 y
+ 324135 y
19
18
17
15
- 30618 y
- 453789 y
- 40246444 y
+ 282225202 y
14
12
11
10
- 44274492 y
+ 155098503 y
+ 12252303 y
+ 2893401 y
9
8
7
6
- 171532242 y + 6751269 y + 2657205 y - 94517766 y
5
3
- 3720087 y + 26040609 y + 14348907
(%i20) resolvante: cayley$

500

Manual de Maxima

(%i21) resolvante (x^5 - 4*x^2 + x + 1, x, a, []);


" resolvante de Cayley "
6
5
4
3
2
(%o21) x - 40 x + 4080 x - 92928 x + 3772160 x + 37880832 x
+ 93392896
Para la resolvente de Cayley, los dos u
ltimos argumentos son neutros y el polinomio
dado en el argumento debe ser necesariamente de grado 5.
Veanse tambien:
resolvante_bipartite, resolvante_produit_sym,
resolvante_unitaire, resolvante_alternee1, resolvante_klein,
resolvante_klein3, resolvante_vierer, resolvante_diedrale.

resolvante_alternee1 (P, x )

[Funcion]
Calcula la transformaci
on de P (x ) de grado n por la funcion $\prod {1\leq i<j\leq
n-1} (x i-x j)$.
Veanse tambien:
resolvante_produit_sym, resolvante_unitaire,
resolvante , resolvante_klein, resolvante_klein3,
resolvante_vierer, resolvante_diedrale, resolvante_bipartite.

resolvante_bipartite (P, x )

[Funcion]
Calcula la transformaci
on de P (x ) de grado n (n par) por la funcion $x 1x 2\ldots
x {n/2}+x {n/2+1}\ldotsx n$
(%i1) resolvante_bipartite (x^6 + 108, x);
10
8
6
4
(%o1)
y
- 972 y + 314928 y - 34012224 y

Veanse tambien:
resolvante_produit_sym, resolvante_unitaire,
resolvante, resolvante_klein, resolvante_klein3,
resolvante_vierer, resolvante_diedrale, resolvante_alternee1.

resolvante_diedrale (P, x )

[Funcion]

Calcula la transformaci
on de P (x ) por la funcion x_1 x_2 + x_3 x_4 .
(%i1) resolvante_diedrale (x^5 - 3*x^4 + 1, x);
15
12
11
10
9
8
7
(%o1) x
- 21 x
- 81 x
- 21 x
+ 207 x + 1134 x + 2331 x
6
- 945 x
- 697
Veanse tambien:

5
- 4970 x

4
- 18333 x

3
- 29079 x

2
- 20745 x

- 25326 x

Captulo 30: Simetras

501

resolvante_produit_sym, resolvante_unitaire,
resolvante_alternee1, resolvante_klein, resolvante_klein3,
resolvante_vierer, resolvante.

resolvante_klein (P, x )

[Funcion]

Calcula la transformaci
on de P (x ) por la funcion x_1 x_2 x_4 + x_4 .
Veanse tambien:
resolvante_produit_sym, resolvante_unitaire,
resolvante_alternee1, resolvante, resolvante_klein3,
resolvante_vierer, resolvante_diedrale.

resolvante_klein3 (P, x )

[Funcion]

Calcula la transformaci
on de P (x ) por la funcion x_1 x_2 x_4 + x_4 .
Veanse tambien:
resolvante_produit_sym, resolvante_unitaire,
resolvante_alternee1, resolvante_klein, resolvante,
resolvante_vierer, resolvante_diedrale.

resolvante_produit_sym (P, x )

[Funcion]
Calcula la lista de todas las resolventes producto del polinomio P (x ).
(%i1) resolvante_produit_sym (x^5 + 3*x^4 + 2*x - 1, x);
5
4
10
8
7
6
5
(%o1) [y + 3 y + 2 y - 1, y
- 2 y - 21 y - 31 y - 14 y
4
- y

3
+ 14 y

2
+ 3 y

10
+ 1, y

8
+ 3 y

7
+ 14 y

6
- y

5
- 14 y

4
- 31 y

3
2
5
4
- 21 y - 2 y + 1, y - 2 y - 3 y - 1, y - 1]
(%i2) resolvante: produit$
(%i3) resolvante (x^5 + 3*x^4 + 2*x - 1, x, a*b*c, [a, b, c]);
" resolvante produit "
10
8
7
6
5
4
3
2
(%o3) y
+ 3 y + 14 y - y - 14 y - 31 y - 21 y - 2 y + 1
Veanse tambien:
resolvante, resolvante_unitaire,
resolvante_alternee1, resolvante_klein,
resolvante_klein3, resolvante_vierer,
resolvante_diedrale.

resolvante_unitaire (P, Q, x )
Calcula la resolvente del polinomio P (x ) por el polinomio Q (x ).
Veanse tambien:
resolvante_produit_sym, resolvante,
resolvante_alternee1, resolvante_klein, resolvante_klein3,
resolvante_vierer, resolvante_diedrale.

[Funcion]

502

Manual de Maxima

resolvante_vierer (P, x )

[Funcion]

Calcula la transformaci
on de P (x ) por la funcion x_1 x_2 - x_3 x_4 .
Veanse tambien:
resolvante_produit_sym, resolvante_unitaire,
resolvante_alternee1, resolvante_klein, resolvante_klein3,
resolvante, resolvante_diedrale.

schur2comp (P, l_var )

[Funcion]
P es un polinomio de variables contenidas en la lista l var. Cada una de las variables
de l var representa una funcion simetrica completa. La i-esima funcion simetrica
completa de l var se representa como la concatenacion de la letra h con el entero i:
hi . La funci
on schur2comp devuelve la expresion de P en funcion de las funciones
de Schur.
(%i1) schur2comp (h1*h2 - h3, [h1, h2, h3]);
(%o1)
s
1, 2
(%i2) schur2comp (a*h3, [h3]);
(%o2)
s a
3

somrac (l, k )

[Funcion]
Si la lista l contiene las funciones simetricas elementales de un polinomio P, la funcion
somrac calcula el polinomio cuyas races son las sumas k a k de las races de P.
Vease tambien prodrac.

tcontract (pol, lvar )

[Funcion]
Comprueba si el polinomio pol es simetrico en las variable contenidas en la lista
lvar. En caso afirmativo, devuelve una forma contrada tal como lo hace la funcion
contract.
Otras funciones para efectuar cambios de representacion son: contract, cont2part,
explose, part2cont, partpol y tpartpol.

tpartpol (pol, lvar )

[Funcion]
Comprueba si el polinomio pol es simetrico en las variable contenidas en la lista lvar.
En caso afirmativo, devuelve una forma particionada tal como lo hace la funcion
partpol.
Otras funciones para efectuar cambios de representacion son: contract, cont2part,
explose, part2cont, partpol y tcontract.

treillis (n )

[Funcion]

Devuelve todas las particiones de pesos n.


(%i1) treillis (4);
(%o1)
[[4], [3, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1]]
Veanse tambien lgtreillis, ltreillis y treinat.

treinat (part )

[Funcion]
Devuelve la lista de las particiones inferiores de la particion part en su orden natural.

Captulo 30: Simetras

503

(%i1) treinat ([5]);


(%o1)
[[5]]
(%i2) treinat ([1, 1, 1, 1, 1]);
(%o2) [[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1],
[1, 1, 1, 1, 1]]
(%i3) treinat ([3, 2]);
(%o3)
[[5], [4, 1], [3, 2]]
Veanse tambien lgtreillis, ltreillis y treillis.

Captulo 31: Grupos

505

31 Grupos
31.1 Funciones y variables para grupos
todd_coxeter (relaciones, subgrupo )
todd_coxeter (relaciones )

[Funcion]
[Funcion]
Busca el orden de G/H donde G es el modulo del Grupo Libre de relations, y H es
el subgrupo de G generado por subgrupo. subgrupo es un argumento opcional, cuyo
valor por defecto es [].
En este proceso se obtiene una tabla de multiplicacion para la accion correcta de G
sobre G/H, donde los co-cojuntos son enumerados [H,Hg2,Hg3,...]. Esto puede ser
observado internamente en el todd_coxeter_state.
Ejemplo:
(%i1) symet(n):=create_list(
if (j - i) = 1 then (p(i,j))^^3 else
if (not i = j) then (p(i,j))^^2 else
p(i,i) , j, 1, n-1, i, 1, j);
<3>
(%o1) symet(n) := create_list(if j - i = 1 then p(i, j)
<2>
else (if not i = j then p(i, j)
else p(i, i)), j, 1, n - 1,
i, 1, j)
(%i2) p(i,j) := concat(x,i).concat(x,j);
(%o2)
p(i, j) := concat(x, i) . concat(x, j)
(%i3) symet(5);
<2>
<3>
<2>
<2>
<3>
(%o3) [x1
, (x1 . x2)
, x2
, (x1 . x3)
, (x2 . x3)
,
<2>
<2>
<2>
<3>
<2>
x3
, (x1 . x4)
, (x2 . x4)
, (x3 . x4)
, x4
]
(%i4) todd_coxeter(%o3);
Rows tried 426
(%o4)
(%i5) todd_coxeter(%o3,[x1]);

120

Rows tried 213


(%o5)
60
(%i6) todd_coxeter(%o3,[x1,x2]);
Rows tried 71
(%o6)

20

Captulo 32: Entorno de Ejecuci


on

507

32 Entorno de Ejecuci
on
32.1 Introducci
on al entorno de ejecuci
on
El fichero maxima-init.mac se carga automaticamente cada vez que se empieza a ejecutar
Maxima. Se puede utilizar maxima-init.mac para personalizar el entorno de Maxima. Si
existe, maxima-init.mac se almacena normalmente en el directorio indicado por maxima_
userdir, aunque puede estar alojado en cualquier otro directorio que este al alcance de la
funcion file_search.
He aqu un ejemplo de fichero maxima-init.mac:
setup_autoload ("specfun.mac", ultraspherical, assoc_legendre_p);
showtime:all;
En este ejemplo, setup_autoload le dice a Maxima que cargue en memoria el fichero
specfun.mac si cualquiera de las funciones ultraspherical o assoc_legendre_p es invocada pero todava no est
a definida. De esta manera, no es necesario recordar cargar el
fichero antes de llamar a las funciones.
La sentencia showtime: all le dice a Maxima que haga una asignacion a la variable
showtime. El fichero maxima-init.mac puede contener cualesquiera otras asignaciones o
sentencias de Maxima.

32.2 Interrupciones
El usuario puede detener un c
omputo que este consumiendo recursos excesivos con el
caracter ^C (control-C). La acci
on que se sigue por defecto es la detencion del computo
y la impresi
on de otro prompt. En este caso, no sera posible reiniciar la tarea interrumpida.
Si a la variable Lisp *debugger-hook* se le asigna nil haciendo
:lisp (setq *debugger-hook* nil)
entonces tras recibir ^C, Maxima entra en el depurador de Lisp y el usuario podra utilizar
el depurador para inspeccionar el entorno Lisp. La tarea que haya sido interrumpida podr
a
reiniciarse escribiendo continue en el depurado de Lisp. La forma de volver a Maxima
desde el depurador de Lisp, que no sea la de permitir la computacion hasta la terminacion
de la tarea, depender
a de la versi
on de Lisp.
En sistemas Unix el car
acter ^Z (control-Z) hace que Maxima deje de ejecutarse devolviendo el control al terminal del sistema. El comando fg hace que la ejecucion de
Maxima se reanude en el punto que lo dejo.

32.3 Funciones y variables para el entorno de ejecuci


on
[Variable del sistema]
La variable maxima_tempdir almacena la ruta del directorio en el que Maxima crea
ciertos ficheros temporales. En particular, los ficheros temporales para la realizacion
de gr
aficos se guardan en maxima_tempdir.
El valor que inicialmente toma esta variable es el directorio de inicio del usuario,
si Maxima es capaz de localizarlo; en caso contrario, Maxima intenta encontrar un
directorio que sea aceptable.

maxima_tempdir

508

Manual de Maxima

A la variable maxima_tempdir se le puede asignar una cadena de caracteres con la


ruta del directorio.
[Variable del sistema]
La variable maxima_userdir almacena la ruta del directorio en el que Maxima buscar
a
ficheros Lisp y de Maxima. Maxima tambien busca en otros directorios, guardando las
variables file_search_maxima y file_search_lisp la lista completa de b
usqueda.

maxima_userdir

El valor que inicialmente toma esta variable es el de un subdirectorio del directorio


de inicio del usuario, si Maxima es capaz de localizarlo; en caso contrario, Maxima
intenta encontrar un directorio que sea aceptable.
A la variable maxima_userdir se le puede asignar una cadena de caracteres con la ruta
del directorio. Sin embargo, cambiando el valor de la variable maxima_userdir no se
alteran file_search_maxima ni file_search_lisp, cuyos contenidos se modifican
mediante otro sistema.

room ()
room (true)
room (false)

[Funcion]
[Funcion]
[Funcion]
Presenta una descrpci
on del estado de almacenamiento y gestion de la pila en Maxima.
La llamada room invoca a la funcion Lisp homonima.
room () prints out a moderate description.
room (true) prints out a verbose description.
room (false) prints out a terse description.

sstatus (keyword, item )

[Funcion]
Si keyword es el smbolo feature, item sera colocado en la lista de propiedades del
sistema. Una vez ejecutado sstatus (keyword, item), status (feature, item)
devuelve true. Si keyword es el smbolo nofeature, item se borrara de la lista de
propiedades del sistema. Esto puede ser de utilidad para los autores de paquetes,
permitiendo mantener el control sobre las propiedades que se han ido estableciendo.
Vease tambien status.

status (feature)
status (feature, item )

[Funcion]
[Funcion]
Devuelve informaci
on sobre la presencia o ausencia de ciertas propiedades dependientes del sistema.

status (feature) devuelve una lista con caractersticas del sistema. Estas
incluyen la versi
on de Lisp, tipo de sistema operativo, etc. La lista puede variar
de un Lisp a otro.
status (feature, item) devuelve true si item esta en la lista de elementos
retornados por status (feature) y false en otro caso. La funcion status no
eval
ua el argumento item. El operador de doble comilla simple, , permite
la evaluaci
on. Una propiedad cuyo nombre contenga un caracter especial debe
ser suministrada como un argumento del tipo cadena. Por ejemplo, status
(feature, "ansi-cl").

Captulo 32: Entorno de Ejecuci


on

509

Vease tambien sstatus.


La variable features contiene una lista de propiedades que se aplican a expresiones
matem
aticas. Veanse features y featurep para mas informacion.

system (command )

[Funcion]
Ejecuta la instrucci
on command como un proceso independiente de Maxima. La
instrucci
on se le pasa a la consola del sistema para su ejecucion. La funcion system
no est
a soportada por todos los sistemas operativos, pero suele estarlo en todos los
entornos Unix y similares.

Suponiendo que _hist.out es una lista de frecuencias que se quieren representar en


un diagrama de barras utilizando el programa xgraph,
(%i1) (with_stdout("_hist.out",
for i:1 thru length(hist) do (
print(i,hist[i]))),
system("xgraph -bar -brw .7 -nl < _hist.out"));
A fin de hacer el diagrama y eliminar el archivo temporal posteriormente, hagase:
system("(xgraph -bar -brw .7 -nl < _hist.out;

rm -f _hist.out)&")

time (%o1, %o2, %o3, ...)

[Funcion]
Devuelve una lista de los tiempos, en segundos, que fueron necesarios para calcular
los resultados de las salidas %o1, %o2, %o3, .... Los tiempos devueltos son estimaciones
hechas por Maxima del tiempo interno de computacion. La funcion time solo puede
utilizarse para variables correspondientes a lneas de salida; para cualquier otro tipo
de variables, time devuelve unknown.

Hagase showtime: true para que Maxima devuelva el tiempo de ejecucion de cada
lnea de salida.

timedate ()
timedate (T )

[Funcion]
[Funcion]
Sin argumento, timedate devuelve una cadena que representa la hora y fecha actuales.
La cadena tiene el formato YYYY-MM-DD HH:MM:SS[+|-]ZZ:ZZ, donde los campos indicados son: a~
no, mes, da, horas, minutos, segundos y n
umero de horas de diferencia
con respecto a la hora GMT.

Con argumento, timedate(T ) devuelve la hora T como una cadena con formato
YYYY-MM-DD HH:MM:SS[+|-]ZZ:ZZ. T se interpreta como el n
umero de segundos
transcurridos desde la medianoche del uno de enero de 1900, tal como lo devuelve
absolute_real_time.
Ejemplos:
timedate sin argumento devuelve una cadena con la hora y fecha actuales.
(%i1) d : timedate ();
(%o1)
2010-06-08 04:08:09+01:00
(%i2) print ("timedate reports current time", d) $
timedate reports current time 2010-06-08 04:08:09+01:00
timedate con argumento devuelve una cadena que representa al propio argumento.

510

Manual de Maxima

(%i1) timedate (0);


(%o1)
1900-01-01 01:00:00+01:00
(%i2) timedate (absolute_real_time () - 7*24*3600);
(%o2)
2010-06-01 04:19:51+01:00

absolute_real_time ()

[Funcion]
Devuelve el n
umero de segundos transcurridos desde la medianoche del 1 de enero de
1900 UTC. Este valor es un n
umero entero positivo.
Veanse tambien elapsed_real_time y elapsed_run_time.
Ejemplo:
(%i1) absolute_real_time ();
(%o1)
3385045277
(%i2) 1900 + absolute_real_time () / (365.25 * 24 * 3600);
(%o2)
2007.265612087104

elapsed_real_time ()

[Funcion]
Devuelve los segundos (incluyendo fracciones de segundo) transcurridos desde que
Maxima se inici
o (o reinici
o) la sesion de Maxima. Este valor es un decimal en coma
flotante.
Veanse tambien absolute_real_time y elapsed_run_time.
Ejemplo:
(%i1) elapsed_real_time ();
(%o1)
2.559324
(%i2) expand ((a + b)^500)$
(%i3) elapsed_real_time ();
(%o3)
7.552087

elapsed_run_time ()

[Funcion]
Devuelve una estimaci
on en segundos (incluyendo fracciones de segundo) durante los
cuales Maxima ha estado realizando calculos desde que se inicio (o reinicio) la sesion
actual. Este valor es un decimal en coma flotante.
Veanse tambien absolute_real_time y elapsed_real_time.
Ejemplo:
(%i1) elapsed_run_time ();
(%o1)
0.04
(%i2) expand ((a + b)^500)$
(%i3) elapsed_run_time ();
(%o3)
1.26

Captulo 33: Miscel


anea de opciones

511

33 Miscel
anea de opciones
33.1 Introducci
on a la miscel
anea de opciones
En esta secci
on se comentan varias opciones que tienen un efecto global sobre le comportamiento de Maxima. Tambien se comentan varias listas, como la de las funciones definidas
por el usuario.

33.2 Share
El directorio "share" de Maxima contiene programas y ficheros de interes para los usuarios
de Maxima, pero no forman parte del n
ucleo de Maxima. Estos programas se cargan en
memoria con llamadas a las funciones load o setup_autoload.
El codigo :lisp *maxima-sharedir* muestra la localizacion del directorio "share" dentro del sistema de ficheros del usuario.
El codigo printfile ("share.usg") muestra una lista actualizada de paquetes en
"share". Los usuarios pueden encontrar mas informacion accediendo directamente a los
contenidos del directorio "share".

33.3 Funciones y variables para la miscel


anea de opciones
[Variable del sistema]
Cuando se invoca a asksign, la expresion que se va a analizar es precisamente askexp.

askexp

[Variable optativa]
Valor por defecto: i
La variable genindex es el prefijo alfabetico utilizado para generar la siguiente variable
de sumaci
on en caso de necesidad.

genindex

[Variable optativa]
Valor por defecto: 0
La variable gensumnum es el sufijo numerico utilizado para generar la siguiente variable
de sumaci
on. Si vale false entonces el ndice consistira solamente de genindex, sin
sufijo numerico.

gensumnum

gensym ()
gensym (x )

[Funcion]
[Funcion]

gensym() crea y devuelve una nueva smbolo o variable sin valor asignado.
El nombre del nuevo smbolo esta formado por la concatenacion de un prefijo, cuyo
valor por defecto es "g", y de un sufijo, el cual es la representacion decimal de un
n
umero que coincide, por defecto, con el valor de un contador interno de Lisp.
En caso de suministrar el argumento x, siendo este una cadena, se utilizara como
^.
prefijo en lugar de "g", lo cual tendra efecto solo para esta llamada a gensymA
En caso de suministrar el argumento x, siendo este un n
umero entero, se utilizar
a
como sufijo en lugar del contador interno de Lisp, lo cual tendra efecto solo para esta
^.
llamada a gensymA

512

Manual de Maxima

Si no se suministra el sufijo en forma explcita, y solo en este caso, el contador interno


sufrir
a un incremento despues de haber sido utilizado.
Ejemplos:
(%i1) gensym();
(%o1)
(%i2) gensym("new");
(%o2)
(%i3) gensym(123);
(%o3)

g887
new888
g123

packagefile

[Variable opcional]

Valor por defecto: false


Los autores de paquetes que utilizan save o translate para crear libreras para
otros usuarios pueden hacer la asignacion packagefile: true para prevenir que se
a~
nada informaci
on a las listas con informacion del sistema de Maxima, como values
o functions.

remvalue (nombre_1, ..., nombre_n )


remvalue (all)

[Funcion]
[Funcion]
Elimina del sistema los valores de las variable de usuario nombre 1, ..., nombre n
(incluso las que tienen subndices).
La llamada remvalue (all) elimina los valores de todas las variables en values, la
lista de todas las variables a las que el usuario a dado alg
un nombre, pero no de
aquellas a las que Maxima asigna automaticamente un valor.
Vease tambien values.

rncombine (expr )

[Funcion]
Transforma expr combinando todos los terminos de expr que tengan denominadores
identicos o que difieran unos de otros por factores numericos. Su comportamiento es
diferente al de la funci
on combine, que combina terminos con iguales denominadores.
Haciendo pfeformat: true y utilizando combine se consiguen resultados similares a
aquellos que se pueden obtener con rncombine, pero rncombine realiza el paso adicional de multiplicar denominadores numericos. Esto da como resultado expresiones
en las que se pueden reconocer algunas cancelaciones.
Antes de utilizar esta funci
on ejec
utese load(rncomb).

setup_autoload (nombre_fichero, funci


on_1, ..., funci
on_n )

[Funcion]
Especifica que si alguna de las funciones function 1, ..., function n es referenciada
pero todava no ha sido definida, se cargara nombre fichero mediante una llamada
a load. El nombre fichero normalmente contendra las definiciones de las funciones
especificadas, aunque esto no es imperativo.
La funci
on setup_autoload no opera con arreglos de funciones.
La funci
on setup_autoload no eval
ua sus argumentos.
Ejemplo:

Captulo 33: Miscel


anea de opciones

513

(%i1) legendre_p (1, %pi);


(%o1)
legendre_p(1, %pi)
(%i2) setup_autoload ("specfun.mac", legendre_p, ultraspherical);
(%o2)
done
(%i3) ultraspherical (2, 1/2, %pi);
Warning - you are redefining the Macsyma function ultraspherical
Warning - you are redefining the Macsyma function legendre_p
2
3 (%pi - 1)
(%o3)
------------ + 3 (%pi - 1) + 1
2
(%i4) legendre_p (1, %pi);
(%o4)
%pi
(%i5) legendre_q (1, %pi);
%pi + 1
%pi log(-------)
1 - %pi
(%o5)
---------------- - 1
2

tcl_output (list, i0, skip )


tcl_output (list, i0 )
tcl_output ([list_1, . . . , list_n ], i )

[Funcion]
[Funcion]
[Funcion]
Imprime los elementos de una lista encerrandolos con llaves { }, de forma apropiada
para ser utilizado en un programa en el lenguaje Tcl/Tk.

tcl_output (list, i0, skip ) imprime list, empezando por el elemento i0 siguiendo
luego con los elementos i0 + skip , i0 + 2 skip , etc.
tcl_output (list, i0 ) equivale a tcl_output (list, i0, 2).
tcl_output ([list_1, ..., list_n ], i ) imprime los i-esimos elementos de list 1,
. . . , list n.
Ejemplos:
(%i1) tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$
{1.000000000
4.000000000
}
(%i2) tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$
{2.000000000
5.000000000
}
(%i3) tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$
{((RAT SIMP) 3 7) ((RAT SIMP) 11 13)
}
(%i4) tcl_output ([x1, y1, x2, y2, x3, y3], 2)$
{$Y1 $Y2 $Y3

514

Manual de Maxima

}
(%i5) tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$
{SIMP 1.000000000
}

11.00000000

Captulo 34: Reglas y patrones

515

34 Reglas y patrones
34.1 Introducci
on a reglas y patrones
Esta secci
on describe las reglas de simplificacion y los patrones de comparacion definidos
por el usuario. Hay dos grupos de funciones que implementan diferentes esquemas de comparacion de patrones. En un grupo estan tellsimp, tellsimpafter, defmatch, defrule,
apply1, applyb1 y apply2. En el otro, se encuentran let y letsimp. Ambos esquemas
definen patrones en terminos de variables de patrones declaradas mediante matchdeclare.
Las reglas de comparaci
on de patrones definidas por tellsimp y tellsimpafter se aplican autom
aticamente por el simplificador de Maxima. Las reglas definidas por defmatch,
defrule y let se aplican previa llamada a una funcion.
Hay otros mecanismos para las reglas; las relativas a polinomios se controlan mediante
tellrat y las del
algebra conmutativa y no conmutativa se definen en el paquete affine.

34.2 Funciones y variables sobre reglas y patrones


apply1 (expr, regla_1, ..., regla_n )

[Funcion]
Aplica de forma repetida la regla 1 a expr hasta que falla, a continuacion aplica
repetidamente la misma regla a todas las subexpresiones de expr, de izquierda a
derecha, hasta que la regla 1 haya fallado en todas las subexpresiones. Llamese
expr 2 al resultado de transformar expr de esta forma. Entonces la regla 2 se aplica
de la misma manera comenzando en el nivel superior de expr 2. Cuando la regla n
falla en la u
ltima expresi
on, se devuelve el resultado.
maxapplydepth es el nivel de las subexpresiones mas internas procesadas por apply1
y apply2.
Vease tambien applyb1, apply2 y let.

apply2 (expr, regla_1, ..., regla_n )

[Funcion]
Si la regla 1 falla en una subexpresion dada, entonces se aplica la regla 2 repetidamente, etc. S
olo si todas las reglas fallan en una subexpresion seran aplicadas todas
las reglas de forma repetida a la siguiente subexpresion. Si alguna de las reglas tiene
exito entonces la misma subexpresion es reprocesada, comenzando por la primera
regla.
maxapplydepth es el nivel de las subexpresiones mas internas procesadas por apply1
y apply2.
Vease tambien applyb1 y let.

applyb1 (expr, regla_1, ..., regla_n )

[Funcion]
Aplica la regla 1 reiteradamente hasta la subexpresion mas interna de expr hasta
que falle, a continuaci
on pasa a aplicar la misma regla en un nivel superior (esto es,
en subexpresiones m
as grandes), hasta que la regla 1 falle en la expresion de nivel
mas alto. Despues se aplica la regla 2 de la misma manera al resultado obtenido de
regla 1. Tras la aplicaci
on de la regla n a la expresion de mayor nivel, se devuelve el
resultado.

516

Manual de Maxima

La funci
on applyb1 es similar a apply1 pero opera de abajo-arriba, en lugar de
arriba-abajo.
maxapplyheight es la m
axima altura a la que llega applyb1 antes de terminar su
cometido.
Vease tambien apply1, apply2 y let.

current_let_rule_package

[Variable opcional]

Valor por defecto: default_let_rule_package


La variable current_let_rule_package es el nombre del paquete de reglas que estan
utilizando las funciones del paquete let (letsimp, etc.), a menos que se especifique
otro paquete de reglas. A esta variable se le puede asignar el nombre de cualquier
paquete de reglas definido por medio de la instruccion let.
Si se hace la llamada letsimp (expr, rule_pkg_name), el paquete de reglas rule_
pkg_name ser
a utilizado u
nicamente para esa llamada y el valor de current_let_
rule_package no cambia.

default_let_rule_package

[Variable opcional]

Valor por defecto: default_let_rule_package


La variable default_let_rule_package es el nombre del paquete de reglas utilizado
cuando el usuario no especifica otro explcitamente con let o cambiando el valor de
current_let_rule_package.

defmatch (nombre_prog, patr


on, x_1, ..., x_n )
defmatch (progname, pattern )

[Funcion]
[Funcion]
Define una funci
on nombre_prog (expr, x_1, ..., x_n ) que analiza si expr coincide
con el patr
on.

El argumento patr
on es una expresion que contiene los argumentos de patron x 1, ...,
x n y algunas variables de patron. Los argumentos de patron se dan de forma explcita
como argumentos a defmatch, mientras que las variables de patron se declaran mediante la funci
on matchdeclare. Cualquier variable no declarada bien como variable
patr
on en matchdeclare, bien como argumento patron en defmatch se hace coincidir
con ella misma.
El primer argumento de la funcion definida nombre prog es una expresion a ser comparada con el patr
on y los demas argumentos son los argumentos que se corresponden
con las variables ficticias x 1, ..., x n del patron.
Si el resultado de la comparacion es positivo, nombre prog devuelve una lista de ecuaciones cuyos miembros izquierdos son los argumentos y variables de patron, y cuyos
miembros derechos son las subexpresiones en las que se han producido las coincidencias con patrones. A las variables de patron, no a los argumentos, se les asignan las
subexpresiones con las que coinciden. Si la comparacion falla, nombre prog devuelve
false.
Un patr
on literal, es decir, que no contiene ni argumentos ni variables de patron,
devuelve true en caso de coincidencia.
A literal pattern (that is, a pattern which contains neither pattern arguments nor
pattern variables) returns true if the match succeeds.

Captulo 34: Reglas y patrones

517

Vease tambien matchdeclare, defrule, tellsimp y tellsimpafter.


Ejemplos:
Define una funci
on linearp(expr, x) que comprueba si expr es de la forma a*x + b,
donde ni a ni b contienen a x y a es no nulo. La funcion definida reconoce expresiones
lineales respecto de cualquier variable, pues el argumento de patron x es pasado a
defmatch.
(%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)),
b, freeof(x));
(%o1)
done
(%i2) defmatch (linearp, a*x + b, x);
(%o2)
linearp
(%i3) linearp (3*z + (y + 1)*z + y^2, z);
2
(%o3)
[b = y , a = y + 4, x = z]
(%i4) a;
(%o4)
y + 4
(%i5) b;
2
(%o5)
y
(%i6) x;
(%o6)
x
Define una funci
on linearp(expr) que comprueba si expr es de la forma a*x + b,
donde ni a ni b contienen a x y a es no nulo. La funcion definida solo reconoce
expresiones lineales u
nicamente respecto de x, pues no se le pasa a defmatch nig
un
argumento de patr
on
(%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)),
b, freeof(x));
(%o1)
done
(%i2) defmatch (linearp, a*x + b);
(%o2)
linearp
(%i3) linearp (3*z + (y + 1)*z + y^2);
(%o3)
false
(%i4) linearp (3*x + (y + 1)*x + y^2);
2
(%o4)
[b = y , a = y + 4]
Define una funci
on checklimits(expr) que comprueba si expr es una integral
definida.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

matchdeclare ([a, f], true);


done
constinterval (l, h) := constantp (h - l);
constinterval(l, h) := constantp(h - l)
matchdeclare (b, constinterval (a));
done
matchdeclare (x, atom);
done

518

Manual de Maxima

(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)

simp : false;

false
defmatch (checklimits, integrate (f, x, a, b));
checklimits
simp : true;
true
integrate (sin(t), t, %pi + x, 2*%pi + x);
x + 2 %pi
/
[
(%o8)
I
sin(t) dt
]
/
x + %pi
(%i9) checklimits (%);
(%o9)
[b = x + 2 %pi, a = x + %pi, x = t, f = sin(t)]

defrule (nombre_regla, patr


on, reemplazamiento )

[Funcion]
Define y da nombre a una regla de reemplazamiento para el patron dado. Si la
regla nombre regla es aplicada a una expresion (por apply1, applyb1 o apply2),
cada subexpresi
on que coincida con el patron sera reemplazada por el contenido de
reemplazamiento.
Las propias reglas pueden ser tratadas como funciones que transforman una expresion
mediante una operaci
on consistente en la b
usqueda de una coincidencia y posterior
aplicaci
on de un reemplazamiento. Si la comparacion falla, la funcion que implementa
la regla devuelve false.

disprule (nombre_regla_1, ..., nombre_regla_n )


disprule (all)

[Funcion]
[Funcion]
Muestra las reglas de nombre regla 1, ..., nombre regla n, tal como son devueltas
por defrule, tellsimp o tellsimpafter, o un patron definido por defmatch. Cada
regla se muestra con una etiqueta de expresion intermedia (%t).
La llamada disprule (all) muestra todas las reglas.
La funci
on disprule no eval
ua sus argumentos y devuelve la lista de etiquetas de
expresiones intermedias correspondientes a las reglas mostradas.
Vease tambien letrules, que muestra las reglas definidas por let.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%t4)

tellsimpafter (foo (x, y), bar (x) + baz (y));


[foorule1, false]
tellsimpafter (x + y, special_add (x, y));
[+rule1, simplus]
defmatch (quux, mumble (x));
quux
disprule (foorule1, "+rule1", quux);
foorule1 : foo(x, y) -> baz(y) + bar(x)

Captulo 34: Reglas y patrones

519

(%t5)

+rule1 : y + x -> special_add(x, y)

(%t6)

quux : mumble(x) -> []

(%o6)
[%t4, %t5, %t6]
(%i6) %;
(%o6) [foorule1 : foo(x, y) -> baz(y) + bar(x),
+rule1 : y + x -> special_add(x, y), quux : mumble(x) -> []]

let (prod, repl, predname, arg_1, ..., arg_n )


let ([prod, repl, predname, arg_1, ..., arg_n ], nombre_paquete )

[Funcion]
[Funcion]
Define una regla de sustituci
on para letsimp tal que prod es sustituido por repl, donde
prod es un producto de potencias positivas o negativas de los terminos siguientes:

Atomos
que letsimp buscara a menos que antes de llamar a letsimp se utilice
la funci
on matchdeclare para asociar un predicado con el atomo. En este caso
letsimp har
a coincidir el atomo con cualquier termino del producto que satisfaga
el predicado.
Expresiones b
asicas como sin(x), n!, f(x,y), etc. Como en el caso anterior,
letsimp buscar
a coincidencias exactas, a menos que se utilice matchdeclare
para asociar un predicado con el argumento de la expresion basica (sin(x), n!,
f(x,y), ...).

Si se incluye un predicado en la funcion let seguido de una lista de argumentos,


una coincidencia aceptable (es decir, una que fuese aceptada si se hubiese omitido
el predicado) se aceptar
a s
olo si predname (arg_1, ..., arg_n) vale true, donde
arg i es el valor coincidente con arg i. El argumento arg i puede ser el nombre de
cualquier
atomo o el argumento de cualquier expresion basica que aparezca en prod.
repl puede ser cualquier expresion racional. Si cualquiera de los atomos o argumentos
de prod aparece en repl se llevan a cabo las sustituciones correspondientes.
La variable global letrat controla la simplificacion de los cocientes por letsimp.
Cuando letrat vale false, letsimp simplifica separadamente el numerador y denominador de expr y no simplifica el cociente. Sustituciones como que n!/n se reduzca a (n-1)! ya no se realizaran. Cuando letrat vale true, entonces se simplifican
el numerador, el denominador y el cociente, en este orden.
Estas funciones de sustituci
on permiten al usuario trabajar con varios paquetes de
reglas al mismo tiempo. Cada paquete de reglas puede contener cierto n
umero de
reglas let que son referenciadas por un nombre dado por el usuario. let ([prod,
repl, predname, arg_1, ..., arg_n ], nombre_paquete ) a~
nade la regla predname
al paquete de reglas nombre paquete. letsimp (expr, package_name ) aplica
las reglas de nombre paquete. La llamada letsimp (expr, nombre_paquete1,
nombre_paquete2, ...) es equivalente a letsimp (expr, nombre_paquete1 )
seguida de letsimp (%, nombre_paquete2 ), ....
current_let_rule_package es el nombre del paquete de reglas que se esta utilizando.
A esta variable se le puede asignar el nombre de cualquier paquete de reglas definido
mediante el comando let. Siempre que una de las funciones incluidas en el paquete
let sean invocadas sin nombre de paquete, se utilizara el paquete cuyo nombre se
guarde en current_let_rule_package. Si se hace una llamada tal como letsimp

520

Manual de Maxima

(expr, rule_pkg_name ), el paquete de reglas rule pkg name es utilizado solamente


para ese comando letsimp, sin efectuarse cambios en current_let_rule_package.
A menos que se indique otra cosa, current_let_rule_package toma por defecto el
valor de default_let_rule_package.
(%i1) matchdeclare ([a, a1, a2], true)$
(%i2) oneless (x, y) := is (x = y-1)$
(%i3) let (a1*a2!, a1!, oneless, a2, a1);
(%o3)
a1 a2! --> a1! where oneless(a2, a1)
(%i4) letrat: true$
(%i5) let (a1!/a1, (a1-1)!);
a1!
(%o5)
--- --> (a1 - 1)!
a1
(%i6) letsimp (n*m!*(n-1)!/m);
(%o6)
(m - 1)! n!
(%i7) let (sin(a)^2, 1 - cos(a)^2);
2
2
(%o7)
sin (a) --> 1 - cos (a)
(%i8) letsimp (sin(x)^4);
4
2
(%o8)
cos (x) - 2 cos (x) + 1
[Variable opcional]
Valor por defecto: false
Cuando letrat vale false, letsimp simplifica separadamente el numerador y denominador de una fracci
on sin simplificar luego el cociente.
Cuando letrat vale true, se simplifican el numerador, denominador y cociente, por
este orden.
(%i1) matchdeclare (n, true)$
(%i2) let (n!/n, (n-1)!);
n!
(%o2)
-- --> (n - 1)!
n
(%i3) letrat: false$
(%i4) letsimp (a!/a);
a!
(%o4)
-a
(%i5) letrat: true$
(%i6) letsimp (a!/a);
(%o6)
(a - 1)!

letrat

letrules ()
letrules (nombre_paquete )

[Funcion]
[Funcion]
Muestra las reglas de un paquete de reglas. La llamada letrules () muestra las
reglas del paquete de reglas actual. La llamada letrules (nombre_paquete ) muestra
las reglas de nombre paquete.

Captulo 34: Reglas y patrones

521

El paquete de reglas actual tiene su nombre almacenado en by current_let_rule_


package. A menos que se indique de otra manera, current_let_rule_package toma
por defecto el valor de default_let_rule_package.
Vease tambien disprule, que muestra las reglas definidas por tellsimp y
tellsimpafter.

letsimp (expr )
letsimp (expr, nombre_paquete )
letsimp (expr, nombre_paquete_1, ..., nombre_paquete_n )

[Funcion]
[Funcion]
[Funcion]
Aplica repetidamente las reglas definidas por let hasta que no se puedan hacer m
as
cambios en expr.
La llamada letsimp (expr ) utiliza las reglas de current_let_rule_package.
La llamada letsimp (expr, nombre_paquete ) utiliza las reglas de nombre paquete
sin efectuar cambios en current_let_rule_package.
La
llamada
letsimp (expr, nombre_paquete_1, ..., nombre_paquete_n )
es equivalente a letsimp (expr, nombre_paquete_1 , seguida de letsimp (%,
nombre_paquete_2 ) y as sucesivamente.

let_rule_packages

[Variable opcional]

Valor por defecto: [default_let_rule_package]


La variable let_rule_packages guarda una lista con todos los paquetes de reglas
definidos por el usuario, junto con el paquete por defecto default_let_rule_
package.

matchdeclare (a_1, pred_1, ..., a_n, pred_n )

[Funcion]
Asocia un predicado pred k con una variable o lista de variables a k, de forma que
a con expresiones para las cuales el predicado devuelva algo que no
a k se comparar
sea false.
Un predicado puede ser el nombre de una funcion, una expresion lambda, una llamada
a funci
on, una llamada a una expresion lambda sin el u
ltimo argumento, true o all.
Cualquier expresi
on se hace coincidir con true o all.
Si el predicado se especifica como una llamada a funcion o a una expresion lambda, la
expresi
on a ser analizada es a~
nadida a la lista de argumentos, siendo los argumentos
evaluados en el momento de ser evaluada la comparacion. En cambio, si el predicado
se especifica como un nombre de funcion o como una expresion lambda, la expresion
a ser analizada ser
a su u
nico argumento. No es necesario definir una funcion de
predicado cuando se hace una llamada a matchdeclare; el predicado no se eval
ua
hasta que se ensaya una comparacion.
Un predicado puede devolver tanto una expresion booleana, como true o false. Las
expresiones booleanas se eval
uan con is dentro de la regla, por lo que no es necesario
llamar a is desde dentro del predicado.
Si una expresi
on satisface un predicado, se asigna a la variable de comparacion la
expresi
on, excepto cuando las variables de comparacion son operandos de sumas +
o multiplicaciones *. Solamente las sumas y multiplicaciones son tratadas de forma
especial; los dem
as operadores n-arios (tanto los del sistema como los definidos por el
usuario) son tratados como funciones ordinarias.

522

Manual de Maxima

En el caso de sumas y multiplicaciones, a la variable de comparacion se le puede


asignar una expresi
on simple que satisfaga el predicado de comparacion, o una suma
o producto, respectivamente, de tales expresiones. Los predicados son evaluados en
el orden en el que sus variables asociadas aparecen en el patron de comparacion, y
un termino que satisfaga m
as de un predicado es tomado por el primer predicado que
satisfaga. Cada predicado se compara con todos los operandos de la suma o producto
antes de ser evaluado el siguiente predicado. Ademas, si 0 o 1, respectivamente,
satisface un predicado de comparacion, y no hay otros terminos que lo satisfagan, se
asignar
a el 0 o 1 a la variable de comparacion asociada al predicado.
El algoritmo para procesar patrones de suma y multiplicacion hace que los resultados de algunas comparaciones dependan del orden de los terminos en el patron de
comparaci
on y en la expresi
on a ser comparada. Sin embargo, si todos los predicados
de comparaci
on son mutuamente excluyentes, el resultado de la comparacion no depende para nada de la ordenacion, puesto que un predicado de comparacion no puede
aceptar terminos aceptados por otros predicados.
Invocando matchdeclare con una variable a como argumento cambia la propiedad
de matchdeclare para a, si ya haba una declarada; solamente el matchdeclare m
as
reciente est
a activo cuando se define una regla. Cambios posteriores en la propiedad
de matchdeclare (via matchdeclare o remove) no afectan a las reglas existentes.
propvars (matchdeclare) devuelve la lista de todas las variables para las cuales hay
una propiedad de matchdeclare. La llamada printprops (a, matchdeclare) devuelve el predicado para la variable a. La llamada printprops (all, matchdeclare)
devuelve la lista de predicados de todas las variables de matchdeclare. La llamada
remove (a, matchdeclare) borra la propiedad matchdeclare de a.
Las funciones defmatch, defrule, tellsimp, tellsimpafter y let construyen reglas
que analizan expresiones mediante patrones.
matchdeclare no eval
ua sus argumentos y siempre devuelve done.
Ejemplos:
Un predicado puede ser el nombre de una funcion, una expresion lambda, una llamada
a funci
on, una llamada a una expresion lambda sin el u
ltimo argumento, true o all.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

matchdeclare (aa, integerp);


done
matchdeclare (bb, lambda ([x], x > 0));
done
matchdeclare (cc, freeof (%e, %pi, %i));
done
matchdeclare (dd, lambda ([x, y], gcd (x, y) = 1) (1728));
done
matchdeclare (ee, true);
done
matchdeclare (ff, all);
done

Si una expresi
on satisface un predicado, se asigna a la variable de comparacion la
expresi
on.

Captulo 34: Reglas y patrones

523

(%i1) matchdeclare (aa, integerp, bb, atom);


(%o1)
done
(%i2) defrule (r1, bb^aa, ["integer" = aa, "atom" = bb]);
aa
(%o2)
r1 : bb
-> [integer = aa, atom = bb]
(%i3) r1 (%pi^8);
(%o3)
[integer = 8, atom = %pi]
En el caso de sumas y multiplicaciones, a la variable de comparacion se le puede
asignar una expresi
on simple que satisfaga el predicado de comparacion, o una suma
o producto, respectivamente, de tales expresiones.
(%i1) matchdeclare (aa, atom, bb, lambda ([x], not atom(x)));
(%o1)
done
(%i2) defrule (r1, aa + bb,
["all atoms" = aa, "all nonatoms" = bb]);
bb + aa partitions sum
(%o2) r1 : bb + aa -> [all atoms = aa, all nonatoms = bb]
(%i3) r1 (8 + a*b + sin(x));
(%o3)
[all atoms = 8, all nonatoms = sin(x) + a b]
(%i4) defrule (r2, aa * bb,
["all atoms" = aa, "all nonatoms" = bb]);
bb aa partitions product
(%o4)
r2 : aa bb -> [all atoms = aa, all nonatoms = bb]
(%i5) r2 (8 * (a + b) * sin(x));
(%o5)
[all atoms = 8, all nonatoms = (b + a) sin(x)]
[Variable opcional]
Valor por defecto: 10000
La variable maxapplydepth es la maxima profundidad a la que van a introducirse
apply1 y apply2.

maxapplydepth

maxapplyheight

[Variable opcional]

Valor por defecto: 10000


La variable maxapplyheight es la m2axima altura a la que escalara applyb1 antes
de detenerse.
(prod, nombre )
[Funcion]
()
[Funcion]
(all)
[Funcion]
(all, nombre )
[Funcion]
Elimina la u
ltima regla de sustitucion prod > repl que haya sido definida por la
funci
on let. Si se suministar el nombre la regla sera borrada del paquete con ese
mismo nombre.
Las llamadas remlet() y remlet(all) eliminan todas las reglas de sustitucion del
paquete de reglas actual. Si se suministra el nombre de un paquete de reglas, como en
remlet (all, nombre ), el paquete de reglas con ese nombre es tambien eliminado.
Si es necesario cambiar una sustitucion haciendo uso de la misma produccion, no es
necesario llamar a remlet, simplemente redefnase la sustitucion utilizando la misma

remlet
remlet
remlet
remlet

524

Manual de Maxima

producci
on con la funci
on let junto con el nuevo reemplazamiento y/o nombre de
predicado. De ser llamado nuevamente remlet (prod ) la sustitucion original sera
recuperada.
Vease tambien remrule, que elimina una regla definida por tellsimp o
tellsimpafter.

remrule (op, nombre_regla )


remrule (op, all)

[Funcion]
[Funcion]

Elimina las reglas previamente definidas por tellsimp o tellsimpafter.


La llamada remrule (op, nombre_regla ) elimina la regla de nombre nombre regla
del operador op.
Independientemente de que op sea un operador propio de Maxima o haya sido definido
por el usario (como los establecidos por infix, prefix, etc.), tanto op como rulename
deben ir encerrados entre comillas dobles.
La llamada remrule (function, all) borra todas las reglas para el operador op.
Vease tambien remlet, que elimina una regla definida mediante let.
Ejemplos:
(%i1) tellsimp (foo (aa, bb), bb - aa);
(%o1)
[foorule1, false]
(%i2) tellsimpafter (aa + bb, special_add (aa, bb));
(%o2)
[+rule1, simplus]
(%i3) infix ("@@");
(%o3)
@@
(%i4) tellsimp (aa @@ bb, bb/aa);
(%o4)
[@@rule1, false]
(%i5) tellsimpafter (quux (%pi, %e), %pi - %e);
(%o5)
[quuxrule1, false]
(%i6) tellsimpafter (quux (%e, %pi), %pi + %e);
(%o6)
[quuxrule2, quuxrule1, false]
(%i7) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
quux (%e, %pi)];
bb
(%o7) [bb - aa, special_add(aa, bb), --, %pi - %e, %pi + %e]
aa
(%i8) remrule (foo, foorule1);
(%o8)
foo
(%i9) remrule ("+", ?\+rule1);
(%o9)
+
(%i10) remrule ("@@", ?\@\@rule1);
(%o10)
@@
(%i11) remrule (quux, all);
(%o11)
quux
(%i12) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
quux (%e, %pi)];
(%o12) [foo(aa, bb), bb + aa, aa @@ bb, quux(%pi, %e),
quux(%e, %pi)]

Captulo 34: Reglas y patrones

tellsimp (patr
on, reemplazamiento )

525

[Funcion]
La funci
on tellsimp es similar a tellsimpafter pero coloca nueva informacion antes
que la antigua, de manera que se aplica antes que las reglas de simplificacion de
Maxima.
La funci
on tellsimp se utiliza cuando es importante utilizar la expresion antes de que
el simplificador opere sobre ella; por ejemplo, cuando el simplificador ya "sabe" algo
sobre una expresi
on, pero lo que devuelve no es lo que quiere el usuario. En cambio,
cuando el simplificador ya "sabe" algo sobre una expresion pero lo que devuelve
no es lo suficiente para el usuario, entonces este podra estar interesado en utilizar
tellsimpafter.
El patr
on no puede ser una suma, ni un producto, ni una variable ni un n
umero.
rules es la lista de reglas definidas por defrule, defmatch, tellsimp y
tellsimpafter.
Ejemplos:
(%i1) matchdeclare (x, freeof (%i));
(%o1)
done
(%i2) %iargs: false$
(%i3) tellsimp (sin(%i*x), %i*sinh(x));
(%o3)
[sinrule1, simp-%sin]
(%i4) trigexpand (sin (%i*y + x));
(%o4)
sin(x) cos(%i y) + %i cos(x) sinh(y)
(%i5) %iargs:true$
(%i6) errcatch(0^0);
0
0 has been generated
(%o6)
[]
(%i7) ev (tellsimp (0^0, 1), simp: false);
(%o7)
[^rule1, simpexpt]
(%i8) 0^0;
(%o8)
1
(%i9) remrule ("^", %th(2)[1]);
(%o9)
^
(%i10) tellsimp (sin(x)^2, 1 - cos(x)^2);
(%o10)
[^rule2, simpexpt]
(%i11) (1 + sin(x))^2;
2
(%o11)
(sin(x) + 1)
(%i12) expand (%);
2
(%o12)
2 sin(x) - cos (x) + 2
(%i13) sin(x)^2;
2
(%o13)
1 - cos (x)
(%i14) kill (rules);
(%o14)
done
(%i15) matchdeclare (a, true);

526

Manual de Maxima

(%o15)
done
(%i16) tellsimp (sin(a)^2, 1 - cos(a)^2);
(%o16)
[^rule3, simpexpt]
(%i17) sin(y)^2;
2
(%o17)
1 - cos (y)

tellsimpafter (patr
on, reemplazamiento )

[Funcion]
Define una regla de simplificacion que el simplificador aplicara despues de las reglas
de simplificaci
on propias de de Maxima. El patron es una expresion que contiene variables de patr
on (declaradas por matchdeclare) junto con otros atomos y operadores.
El contenido de reemplazamiento sustituye una expresion que coincida con el patron;
a las variables de patr
on en reemplazamiento se les asignan los valores coincidentes
en la expresi
on.
El patr
on puede ser una expresion no atomica en la que el operador principal no sea
una variable de patr
on; la regla de simplificacion se asocia con el operador principal.
Los nombres de las funciones (con una excepcion que se indica mas abajo), listas
y arrays pueden aparecer en el patron como operador principal solo como literales
(no variables de patrones); esto excluye expresiones como aa(x) y bb[y], si tanto
aa como bb son patrones de variables. Nombres de funciones, listas y arrays que
sean variables de patr
on pueden aparecer como operadores que no sean el operador
principal de patr
on.
Hay una excepci
on a la regla indicada mas arriba concerniente a los nombres de
funciones. El nombre de una funcion subindicada en una expresion tal como aa[x](y)
puede ser una variable de patron porque el operador principal no es aa sino el atomo
de Lisp mqapply. Esta es una consecuencia de la representacion de expresiones que
contienen funciones subindicadas.
Las reglas de simplificaci
on se aplican tras las evaluaciones (a menos que se supriman
con el ap
ostrofo o la variable noeval). Las reglas establecidas por tellsimpafter
se aplican en el orden en que han sido definidas y despues de las reglas propias de
Maxima. Las reglas se aplican de abajo arriba, esto es, se aplican primero a las
subexpresiones antes que a toda la expresion. Puede ser necesario simplificar repetidamente un resultado (por ejemplo, mediante el operador de doble comilla simple
o la variable infeval) para asegurar que se aplican todas las reglas.
Las variables de patr
on se tratan como variables locales en las reglas de simplificacion.
Una vez definida una regla, el valor de una variable de patron no afecta a la regla,
ni se ve influenciada poe esta. Una asignacion a una variable de patron que resulta
de la aplicaci
on exitosa de una regla no afecta a la asignacion actual de la variable
de patr
on. Sin embargo, como cualquier otro atomo de Maxima, las propiedades de
las variables de patr
on (tal como se definen con put y sus funciones relacionadas) son
globales.
La regla construida por tellsimpafter es nombrada detras del operador principal
de patr
on. Reglas para operadores de Maxima y operadores definidos por el usuario
con infix, prefix, postfix, matchfix y nofix, tienen nombres que son cadenas
alfanumericas de Maxima. Reglas para otras funciones tienen nombres que son identificadores ordinarios de Maxima.

Captulo 34: Reglas y patrones

527

El tratamiento de formas nominales y verbales es hasta cierto punto confuso. Si se


define una regla para una forma nominal (o verbal) y ya existe una regla para la
correspondiente forma verbal (o nominal), la regla recien definida se aplica a ambas
formas (nominal y verbal). Si no existe regla para una forma verbal (o nominal) la
regla recien definida se aplica u
nicamente a la forma nominal (o verbal).
La regla construida por tellsimpafter es una tpica funcion de Lisp. Si el nombre
de la regla es $foorule1, la sentencia :lisp (trace $foorule1) hace una traza de
la funci
on y :lisp (symbol-function $foorule1) muestra su definicion.
La funci
on tellsimpafter no eval
ua sus argumentos y devuelve la lista de reglas
para el operador principal de patron, incluida la regla recien establecida.
Veanse tambien matchdeclare, defmatch, defrule, tellsimp, let, kill, remrule
y clear_rules.
Ejemplos:
pattern puede ser cualquier expresion no atomica en la que el operador principal no
sea una variable de patr
on.
(%i1) matchdeclare (aa, atom, [ll, mm], listp, xx, true)$
(%i2) tellsimpafter (sin (ll), map (sin, ll));
(%o2)
[sinrule1, simp-%sin]
(%i3) sin ([1/6, 1/4, 1/3, 1/2, 1]*%pi);
1 sqrt(2) sqrt(3)
(%o3)
[-, -------, -------, 1, 0]
2
2
2
(%i4) tellsimpafter (ll^mm, map ("^", ll, mm));
(%o4)
[^rule1, simpexpt]
(%i5) [a, b, c]^[1, 2, 3];
2
3
(%o5)
[a, b , c ]
(%i6) tellsimpafter (foo (aa (xx)), aa (foo (xx)));
(%o6)
[foorule1, false]
(%i7) foo (bar (u - v));
(%o7)
bar(foo(u - v))
Las reglas se aplican en el orden en que se definen. Si dos reglas coinciden con una
expresi
on, se aplica aquella que haya sido definida en primer lugar.
(%i1) matchdeclare (aa, integerp);
(%o1)
done
(%i2) tellsimpafter (foo (aa), bar_1 (aa));
(%o2)
[foorule1, false]
(%i3) tellsimpafter (foo (aa), bar_2 (aa));
(%o3)
[foorule2, foorule1, false]
(%i4) foo (42);
(%o4)
bar_1(42)
Las variables de patr
on se tratan como variables locales en las reglas de simplificacion.
(Comp
arese con defmatch, que trata las variables de patron como globales.)
(%i1) matchdeclare (aa, integerp, bb, atom);
(%o1)
done

528

Manual de Maxima

(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

tellsimpafter (foo(aa, bb), bar(aa=aa, bb=bb));


[foorule1, false]
bb: 12345;
12345
foo (42, %e);
bar(aa = 42, bb = %e)
bb;
12345

Como cualquier otro


atomo, las propiedades de las variables de patron son globales,
incluso cuando sus valores sean locales. En este ejemplo se declara una propiedad de
asignaci
on a treaves de define_variable. Esta es una propiedad del atomo bb en
todo Maxima.
(%i1) matchdeclare (aa, integerp, bb, atom);
(%o1)
done
(%i2) tellsimpafter (foo(aa, bb), bar(aa=aa, bb=bb));
(%o2)
[foorule1, false]
(%i3) foo (42, %e);
(%o3)
bar(aa = 42, bb = %e)
(%i4) define_variable (bb, true, boolean);
(%o4)
true
(%i5) foo (42, %e);
Error: bb was declared mode boolean, has value: %e
-- an error. Quitting. To debug this try debugmode(true);
Las reglas se nombran despues de los operadores principales. Los nombres de reglas
tanto para las funciones de Maxima como para las definidas por el usuario son cadenas
alfanumericas, mientras que los nombres de las otras funciones son identificadores
tpicos.
(%i1) tellsimpafter (foo (%pi + %e), 3*%pi);
(%o1)
[foorule1, false]
(%i2) tellsimpafter (foo (%pi * %e), 17*%e);
(%o2)
[foorule2, foorule1, false]
(%i3) tellsimpafter (foo (%i ^ %e), -42*%i);
(%o3)
[foorule3, foorule2, foorule1, false]
(%i4) tellsimpafter (foo (9) + foo (13), quux (22));
(%o4)
[+rule1, simplus]
(%i5) tellsimpafter (foo (9) * foo (13), blurf (22));
(%o5)
[*rule1, simptimes]
(%i6) tellsimpafter (foo (9) ^ foo (13), mumble (22));
(%o6)
[^rule1, simpexpt]
(%i7) rules;
(%o7) [trigrule0, trigrule1, trigrule2, trigrule3, trigrule4,
htrigrule1, htrigrule2, htrigrule3, htrigrule4, foorule1,
foorule2, foorule3, +rule1, *rule1, ^rule1]
(%i8) foorule_name: first (%o1);
(%o8)
foorule1
(%i9) plusrule_name: first (%o4);

Captulo 34: Reglas y patrones

529

(%o9)
+rule1
(%i10) [?mstringp (foorule_name), symbolp (foorule_name)];
(%o10)
[false, true]
(%i11) [?mstringp (plusrule_name), symbolp (plusrule_name)];
(%o11)
[true, true]
(%i12) remrule (foo, foorule1);
(%o12)
foo
(%i13) remrule ("^", "^rule1");
(%o13)
^
Un ejemplo de producto anticonmutativo.
(%i1) gt (i, j) := integerp(j) and i < j;
(%o1)
gt(i, j) := integerp(j) and i < j
(%i2) matchdeclare (i, integerp, j, gt(i));
(%o2)
done
(%i3) tellsimpafter (s[i]^^2, 1);
(%o3)
[^^rule1, simpncexpt]
(%i4) tellsimpafter (s[i] . s[j], -s[j] . s[i]);
(%o4)
[.rule1, simpnct]
(%i5) s[1] . (s[1] + s[2]);
(%o5)
s . (s + s )
1
2
1
(%i6) expand (%);
(%o6)
1 - s . s
2
1
(%i7) factor (expand (sum (s[i], i, 0, 9)^^5));
(%o7) 100 (s + s + s + s + s + s + s + s + s + s )
9
8
7
6
5
4
3
2
1
0

clear_rules ()

[Funcion]
Ejecuta kill (rules) y despues inicializa el siguiente n
umero de regla a 1 para la
adici
on +, multiplicaci
on * y exponenciacion ^.

Captulo 35: Conjuntos

531

35 Conjuntos
35.1 Introducci
on a los conjuntos
Maxima dispone de funciones para realizar operaciones con conjuntos, como la interseccion
o la union. Los conjuntos deben ser finitos y definidos por enumeracion. Maxima trata a
los conjuntos y a las listas como objectos de distinta naturaleza, lo que permite trabajar
con conjuntos cuyos elementos puedan ser tambien conjuntos o listas.
Adem
as de funciones para operar con conjuntos finitos, Maxima dispone tambien de
algunas funciones sobre combinatoria, como los n
umeros de Stirling de primera y segunda
especie, n
umeros de Bell, coeficientes multinomiales, particiones de enteros no negativos y
algunos otros. Maxima tambien define la funcion delta de Kronecker.

35.1.1 Utilizaci
on
Para construir un conjunto cuyos elementos sean a_1, ..., a_n, se utiliza la instruccion
set(a_1, ..., a_n) o {a_1, ..., a_n}; para formar un conjunto vaco, basta con hacer
set() o {}. Para introducir conjuntos en Maxima, set (...) y { ... } son equivalentes.
Los conjuntos se muestran siempre con llave.
Si un elemento se indica m
as de una vez, el proceso de simplificacion elimina los elementos
redundantes.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

set();
{}
set(a, b, a);
{a, b}
set(a, set(b));
{a, {b}}
set(a, [b]);
{a, [b]}
{};
{}
{a, b, a};
{a, b}
{a, {b}};
{a, {b}}
{a, [b]};
{a, [b]}

Dos elementos candidatos a formar parte de un conjunto, x e y, son redundantes, esto


es, se consideran el mismo elemento a efectos de consruir el conjunto, si y solo si is (x =
y ) devuelve el valor true. N
otese que is (equal (x, y )) puede devolver true y is (x =
y ) retornar false; en cuyo caso los elementos x e y se consideraran distintos.
(%i1) x: a/c + b/c;
(%o1)
(%i2) y: a/c + b/c;

b
a
- + c
c

532

Manual de Maxima

b
a
- + c
c

(%o2)
(%i3) z: (a + b)/c;

b + a
----c

(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)

is (x = y);
true
is (y = z);
false
is (equal (y, z));
true
y - z;
b + a
b
a
- ----- + - + c
c
c

(%o7)
(%i8) ratsimp (%);
(%o8)
(%i9) {x, y, z};

0
b + a b
a
{-----, - + -}
c
c
c

(%o9)

Para formar un conjunto a partir de los miembros de una lista u


sese setify.
(%i1) setify([b, a]);
(%o1)

{a, b}

Los elementos x e y de un conjunto se consideran iguales si is(x = y) devuelve el valor


true. As, rat(x) y x se consideran el mismo elemento de un conjunto; consecuentemente,
(%i1) {x, rat(x)};
(%o1)

{x}

Adem
as, puesto que is((x-1)*(x+1) = x^2 - 1) devuelve false, (x-1)*(x+1) y x^2-1
se consideran elementos diferentes; as
(%i1) {(x - 1)*(x + 1), x^2 - 1};
(%o1)

2
{(x - 1) (x + 1), x - 1}

Para reducir este conjunto a otro unitario, aplicar rat a cada elemento del conjunto:
(%i1) {(x - 1)*(x + 1), x^2 - 1};
2
(%o1)
{(x - 1) (x + 1), x - 1}
(%i2) map (rat, %);
2
(%o2)/R/
{x - 1}
Para eliminar redundancias con otros conjuntos, sera necesario utilizar otras funciones
de simplificaci
on. He aqu un ejemplo que utiliza trigsimp:

Captulo 35: Conjuntos

533

(%i1) {1, cos(x)^2 + sin(x)^2};


2
2
(%o1)
{1, sin (x) + cos (x)}
(%i2) map (trigsimp, %);
(%o2)
{1}
Se entiende que un conjunto est
a simplificado cuando entre sus elementos no hay redundancias y se hayan ordenados. La version actual de las funciones para conjuntos utiliza la
funcion orderlessp de Maxima para ordenar sus elementos; sin embargo, futuras versiones
de las funciones para operar con conjuntos podr
an utilizar otras funciones de ordenaci
on.
Algunas operaciones con conjuntos, tales como la sustitucion, fuerzan automaticamente
una re-simplificaci
on; por ejemplo,
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

s: {a, b, c}$
subst (c=a, s);
{a, b}
subst ([a=x, b=x, c=x], s);
{x}
map (lambda ([x], x^2), set (-1, 0, 1));
{0, 1}

Maxima considera a las listas y conjuntos como objetos diferentes; funciones tales como
union y intersection emitir
an un error si alguno de sus argumentos no es un conjunto. Si
se necesita aplicar una funci
on de conjunto a una lista, se debera utilizar la funcion setify
para convertirla previamente en conjunto. As,
(%i1) union ([1, 2], {a, b});
Function union expects a set, instead found [1,2]
-- an error. Quitting. To debug this try debugmode(true);
(%i2) union (setify ([1, 2]), {a, b});
(%o2)
{1, 2, a, b}
Para extraer todos los elementos de un conjunto s que satisfagan un predicado f, u
sese
subset(s,f). (Un predicado es una funcion booleana.) Por ejemplo, para encontrar las
ecuaciones en un conjunto dado que no dependan de la variable z, se hara
(%i1) subset ({x + y + z, x - y + 4, x + y - 5},
lambda ([e], freeof (z, e)));
(%o1)
{- y + x + 4, y + x - 5}
La secci
on Funciones y variables para los conjuntos incluye una lista completa de
funciones para operar con conjuntos en Maxima.

35.1.2 Iteraciones con elementos


Hay dos formas para operar iterativamente sobre los elementos de un conjunto. Una es
utilizar map; por ejemplo:
(%i1) map (f, {a, b, c});
(%o1)
{f(a), f(b), f(c)}
La otra forma consiste en hacer uso de la construccion for x in s do
(%i1) s: {a, b, c};
(%o1)

{a, b, c}

534

Manual de Maxima

(%i2) for si in s do print (concat (si, 1));


a1
b1
c1
(%o2)
done
Las funciones de Maxima first y rest funcionan tambien con conjuntos. En este
caso, first devuelve el primer elemento que se muestra del conjunto, el cual puede depender de la implementaci
on del sistema. Si s es un conjunto, entonces rest(s) equivale a
disjoin (first(s), s). Hay otras funciones que trabajan correctamente con conjuntos.
En proximas versiones de las funciones para operar con conjuntos es posible que first y
rest trabajen de modo diferente o que ya no lo hagan en absoluto.

35.1.3 Fallos
Las funciones para operar con conjuntos utilizan la funcion orderlessp de Maxima para
ordenar los elementos de los conjuntos, as como la funcion like de Lisp para decidir sobre
la igualdad de dichos elementos. Ambas funciones tienen fallos que son conocidos y que
pueden aflorar si se trabaja con conjuntos que tengan elementos en formato de listas o
matrices y que contengan expresiones racionales canonicas (CRE). Un ejemplo es
(%i1) {[x], [rat (x)]};
Maxima encountered a Lisp error:
The value #:X1440 is not of type LIST.
Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
Esta expresi
on provoca una parada de Maxima junto con la emision de un mensaje de
error, el cual depender
a de la versi
on de Lisp que utilice Maxima. Otro ejemplo es
(%i1) setify ([[rat(a)], [rat(b)]]);
Maxima encountered a Lisp error:
The value #:A1440 is not of type LIST.
Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
Estos fallos son causados por fallos en orderlessp y like, no por fallos cuyo origen se
encuentre en las funciones para conjuntos. Para ilustrarlo, se pueden ejecutar las siguientes
expresiones
(%i1) orderlessp ([rat(a)], [rat(b)]);
Maxima encountered a Lisp error:
The value #:B1441 is not of type LIST.
Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
(%i2) is ([rat(a)] = [rat(a)]);

Captulo 35: Conjuntos

535

(%o2)
false
Hasta que estos errores no se corrijan, no es aconsejable construir conjuntos que tengan
por elementos listas o matrices que contengan expresiones en forma CRE; sin embargo, un
conjunto con elementos de la forma CRE no deberan dar problemas:
(%i1) {x, rat (x)};
(%o1)
{x}
La funci
on orderlessp de Maxima tiene otro fallo que puede causar problemas con las
funciones para conjuntos, en concreto, que el predicado de ordenacion orderlessp no es
transitivo. El ejemplo m
as simple que ilustra este punto es
(%i1) q: x^2$
(%i2) r: (x + 1)^2$
(%i3) s: x*(x + 2)$
(%i4) orderlessp (q, r);
(%o4)
true
(%i5) orderlessp (r, s);
(%o5)
true
(%i6) orderlessp (q, s);
(%o6)
false
El fallo puede causar problemas con todas las funciones para conjuntos, as como tambien
con otras funciones de Maxima. Es probable, pero no seguro, que este fallo se puede evitar
si todos los elementos del conjunto estan en la forma de expresion racional canonica (CRE)
o han sido simplificados con ratsimp.
Los mecanismos orderless y ordergreat de Maxima son incompatibles con las funciones para conjuntos. Si se necesitan utilizar orderless o ordergreat, hagase antes de
construir los conjuntos y no se utilice la instruccion unorder.
Se ruega a todo usuario que crea haber encontrado un fallo en las funciones para conjuntos que lo comunique en la base de datos de Maxima. Vease bug_report.

35.1.4 Autores
Stavros Macrakis de Cambridge, Massachusetts y Barton Willis de la University of Nebraska
at Kearney (UNK).

35.2 Funciones y variables para los conjuntos


adjoin (x, a )

[Funcion]
Calcula la uni
on del conjunto a y {x }.
La funci
on adjoin emite un mensaje de error si a no es un conjunto literal.
Las sentencias adjoin(x, a ) y union(set(x ), a ) son equivalentes, aunque adjoin
puede ser algo m
as r
apida que union.
Vease tambien disjoin.
Ejemplos:
(%i1) adjoin (c, {a, b});
(%o1)
{a, b, c}
(%i2) adjoin (a, {a, b});
(%o2)
{a, b}

536

Manual de Maxima

belln (n )

[Funcion]
Representa el n-esimo n
umero de Bell, de modo que belln(n) es el n
umero de particiones de un conjunto de n elementos.
El argumento n debe ser un entero no negativo.
La funci
on belln se distribuye sobre ecuaciones, listas, matrices y conjuntos.
Ejemplos:
belln se aplica a enteros no negativos,
(%i1) makelist (belln (i), i, 0, 6);
(%o1)
[1, 1, 2, 5, 15, 52, 203]
(%i2) is (cardinality (set_partitions ({})) = belln (0));
(%o2)
true
(%i3) is (cardinality (set_partitions ({1, 2, 3, 4, 5, 6}))
= belln (6));
(%o3)
true
Si n no es un entero no negativo, la funcion belln(n) no hace calculo alguno.
(%i1) [belln (x), belln (sqrt(3)), belln (-9)];
(%o1)
[belln(x), belln(sqrt(3)), belln(- 9)]

cardinality (a )

[Funcion]
Devuelve el n
umero de elementos del conjunto a.
La funci
on cardinality ignora los elementos redundantes, incluso cuando la simplificaci
on est
a desabilitada.
Ejemplos:
(%i1) cardinality ({});
(%o1)
0
(%i2) cardinality ({a, a, b, c});
(%o2)
3
(%i3) simp : false;
(%o3)
false
(%i4) cardinality ({a, a, b, c});
(%o4)
3

cartesian_product (b_1, ... , b_n )

[Funcion]
Devuelve un conjunto formado por listas de la forma [x_1, ..., x_n ], siendo x 1,
..., x n elementos de los conjuntos b 1, ... , b n, respectivamente.
La funci
on cartesian_product emite un mensaje de error si alguno de sus argumentos no es un conjunto literal.
Ejemplos:
(%i1) cartesian_product ({0, 1});
(%o1)
{[0], [1]}
(%i2) cartesian_product ({0, 1}, {0, 1});
(%o2)
{[0, 0], [0, 1], [1, 0], [1, 1]}
(%i3) cartesian_product ({x}, {y}, {z});
(%o3)
{[x, y, z]}
(%i4) cartesian_product ({x}, {-1, 0, 1});
(%o4)
{[x, - 1], [x, 0], [x, 1]}

Captulo 35: Conjuntos

537

disjoin (x, a )

[Funcion]
Devuelve el conjunto a sin el elemento x. Si x no es elemento de a, entonces el
resultado es el propio a.
La funci
on disjoin emite un mensaje de error si a no es un conjunto literal.

Las sentencias disjoin(x, a ), delete(x, a ) y setdifference(a, set(x )) son todas ellas equivalentes; pero en general, disjoin sera mas rapida que las otras.
Ejemplos:
(%i1) disjoin (a, {a, b, c, d});
(%o1)
{b, c, d}
(%i2) disjoin (a + b, {5, z, a + b, %pi});
(%o2)
{5, %pi, z}
(%i3) disjoin (a - b, {5, z, a + b, %pi});
(%o3)
{5, %pi, b + a, z}

disjointp (a, b )

[Funcion]

Devuelve true si y s
olo si los conjuntos a y b son disjuntos.
La funci
on disjointp emite un mensaje de error si a o b no son conjuntos literales.
Ejemplos:
(%i1) disjointp ({a, b, c}, {1, 2, 3});
(%o1)
true
(%i2) disjointp ({a, b, 3}, {1, 2, 3});
(%o2)
false

divisors (n )

[Funcion]

Calcula el conjunto de divisores de n.


La sentencia divisors(n ) devuelve un conjunto de enteros si n es un entero no nulo.
El conjunto de divisores incluye los elementos 1 y n. Los divisores de un entero
negativo son los divisores de su valor absoluto.
La funci
on divisors se distribuye sobre las ecuaciones, listas, matrices y conjuntos.
Ejemplos:
Se puede comprobar que 28 es un n
umero perfecto: la suma de sus divisores (excepto
el mismo) es 28.
(%i1) s: divisors(28);
(%o1)
{1, 2, 4, 7, 14, 28}
(%i2) lreduce ("+", args(s)) - 28;
(%o2)
28
La funci
on divisors es simplificadora. Haciendo la sustitucion de a por 8 en
divisors(a) devuelve los divisores sin tener que reevaluar divisors(8),
(%i1) divisors (a);
(%o1)
(%i2) subst (8, a, %);
(%o2)

divisors(a)
{1, 2, 4, 8}

La funci
on divisors se distribuye sobre ecuaciones, listas, matrices y conjuntos.

538

Manual de Maxima

(%i1) divisors (a = b);


(%o1)
divisors(a) = divisors(b)
(%i2) divisors ([a, b, c]);
(%o2)
[divisors(a), divisors(b), divisors(c)]
(%i3) divisors (matrix ([a, b], [c, d]));
[ divisors(a) divisors(b) ]
(%o3)
[
]
[ divisors(c) divisors(d) ]
(%i4) divisors ({a, b, c});
(%o4)
{divisors(a), divisors(b), divisors(c)}

elementp (x, a )

[Funcion]
Devuelve true si y s
olo si x es miembro del conjunto a.
La funci
on elementp emite un mensaje de error si a no es un conjunto literal.
Ejemplos:
(%i1) elementp (sin(1), {sin(1), sin(2), sin(3)});
(%o1)
true
(%i2) elementp (sin(1), {cos(1), cos(2), cos(3)});
(%o2)
false

emptyp (a )

[Funcion]

Devuelve true si y s
olo si a es el conjunto vaco o la lista vaca.
Ejemplos:
(%i1) map (emptyp, [{}, []]);
(%o1)
[true, true]
(%i2) map (emptyp, [a + b, {{}}, %pi]);
(%o2)
[false, false, false]

equiv_classes (s, F )

[Funcion]
Devuelve el conjunto de las clases de equivalencia del conjunto s respecto de la relacion
de equivalencia F.
El argumento F es una funci
on de dos variables definida sobre el producto cartesiano
s por s. El valor devuelto por F debe ser true o false, o bien una expresion expr
tal que is(expr ) tome el valor true o false.
Si F no es una relaci
on de equivalencia, equiv_classes la acepta sin emitir ning
un
mensaje de error, pero el resultado sera incorrecto en general.
Ejemplos:
La relaci
on de equivalencia es una expresion lambda que devuelve true o false,
(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0},
lambda ([x, y], is (equal (x, y))));
(%o1)
{{1, 1.0}, {2, 2.0}, {3, 3.0}}
La relaci
on de equivalencia es el nombre de una funcion relacional en la que is eval
ua
a true o false,
(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, equal);
(%o1)
{{1, 1.0}, {2, 2.0}, {3, 3.0}}
Las clases de equivalencia son n
umeros que difieren en un m
ultiplo de 3.

Captulo 35: Conjuntos

539

(%i1) equiv_classes ({1, 2, 3, 4, 5, 6, 7},


lambda ([x, y], remainder (x - y, 3) = 0));
(%o1)
{{1, 4, 7}, {2, 5}, {3, 6}}

every (f, s )
every (f, L_1, ..., L_n )

[Funcion]
[Funcion]
Devuelve true si el predicado f vale true para todos los argumentos dados.

Dado un conjunto como segundo argumento, every(f, s ) devuelve true si is(f (a_
i )) devuelve true para todos los a i pertenecientes s. La funcion every puede
evaluar o no f para todos los a i pertenecientes s. Puesto que los conjuntos no estan
ordenados, every puede evaluar f (a_i ) en cualquier orden.
Dada una o m
as listas como argumentos, every(f, L_1, ..., L_n ) devuelve true
si is(f (x_1, ..., x_n )) devuelve true para todo x 1, ..., x n en L 1, ..., L n,
respectivamente. La funci
on every puede evaluar o no f para cualquier combinacion
de x 1, ..., x n; adem
as, every eval
ua las listas en el orden creciente del ndice.
Dado un conjunto vaco {} o lista vaca [] como argumentos, every devuelve false.
Si la variable global maperror vale true, todas las listas L 1, ..., L n deben ser de
igual longitud. Si maperror vale false, los argumentos en forma de listas se truncan
para igualar sus longitudes a la de la lista mas corta.
Los valores que devuelve el predicado f cuando toman (mediante is) un valor diferente
a true y false se controlan con la variable global prederror. Si prederror vale
true, tales valores se consideran como false y la respuesta de every es false. Si
prederror vale false, tales valores se consideran como desconocidos (unknown) y la
respuesta de every es unknown.
Ejemplos:
Se aplica every a un u
nico conjunto. El predicado es una funcion de un argumento.
(%i1) every (integerp, {1, 2, 3, 4, 5, 6});
(%o1)
true
(%i2) every (atom, {1, 2, sin(3), 4, 5 + y, 6});
(%o2)
false
Se aplica every a dos listas. El predicado es una funcion de dos argumentos.
(%i1) every ("=", [a, b, c], [a, b, c]);
(%o1)
true
(%i2) every ("#", [a, b, c], [a, b, c]);
(%o2)
false
Las respuestas del predicado f que se eval
uan a cualquier cosa diferente de true y
false est
an controlados por la variable global prederror.
(%i1) prederror : false;
(%o1)
false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z],
[x^2, y^2, z^2]);
(%o2)
[unknown, unknown, unknown]
(%i3) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)
unknown

540

Manual de Maxima

(%i4) prederror : true;


(%o4)
true
(%i5) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o5)
false

extremal_subset (s, f, max)


extremal_subset (s, f, min)

[Funcion]
[Funcion]
Calcula el subconjunto de s para el cual la funcion f toma sus valores mayor y menor.

La sentencia extremal_subset(s, f, max) devuelve el subconjunto del conjunto o


lista s para el cual la funci
on real f toma su valor maximo.
La sentencia extremal_subset(s, f, min) devuelve el subconjunto del conjunto o
lista s para el cual la funci
on real f toma su valor mnimo.
Ejemplos
(%i1) extremal_subset ({-2, -1, 0, 1, 2}, abs, max);
(%o1)
{- 2, 2}
(%i2) extremal_subset ({sqrt(2), 1.57, %pi/2}, sin, min);
(%o2)
{sqrt(2)}

flatten (expr )

[Funcion]
Recoge los argumentos de subexpresiones con el mismo operador que expr y construye
con ellas otra expresi
on a partir de estos argumentos.

Aquellas subexpresiones en las que el operador es diferente del operador principal de


expr se copian sin modificarse, incluso cuando ellas mismas contengan subexpresiones
en las que el operador sea el mismo que el de expr.
Es posible que flatten construya expresiones en las que el n
umero de argumentos
difiera del n
umero admitido por el operador, lo cual hara que se emita un mensaje de
error. La funci
on flatten no intentara detectar estas situaciones.
Las expresiones que tengan representaciones especiales, por ejemplo las racionales
can
onicas (CRE), no admiten que se aplique sobre ellas la funcion flatten; en tales
casos se devuelve el argumento sin modificacion.
Ejemplos:
Aplicada a una lista, flatten reune todos los elementos que son a su vez listas.
(%i1) flatten ([a, b, [c, [d, e], f], [[g, h]], i, j]);
(%o1)
[a, b, c, d, e, f, g, h, i, j]
Aplicado a un conjunto, flatten reune todos los elementos que son a su vez conjuntos.
(%i1) flatten ({a, {b}, {{c}}});
(%o1)
{a, b, c}
(%i2) flatten ({a, {[a], {a}}});
(%o2)
{a, [a]}
La funci
on flatten es similar a la declaracion del operador principal como n-ario.
Sin embargo, flatten no tiene efecto alguno sobre subexpresiones que tengan un
operador diferente del principal, mientras que s lo tiene una declaracion n-aria.
(%i1) expr: flatten (f (g (f (f (x)))));
(%o1)
f(g(f(f(x))))

Captulo 35: Conjuntos

541

(%i2) declare (f, nary);


(%o2)
done
(%i3) ev (expr);
(%o3)
f(g(f(x)))
La funci
on flatten trata las funciones subindicadas como a cualquier otro operador.
(%i1) flatten (f[5] (f[5] (x, y), z));
(%o1)
f (x, y, z)
5
Es posible que flatten construya expresiones en las que el n
umero de argumentos
difiera del n
umero admitido por el operador.
(%i1) mod (5, mod (7, 4));
(%o1)
mod(5, mod(7, 4))
(%i2) flatten (%);
(%o2)
mod(5, 7, 4)
(%i3) %, nouns;
Wrong number of arguments to mod
-- an error. Quitting. To debug this try debugmode(true);

full_listify (a )

[Funcion]
Sustituye los operadores de conjunto presentes en a por operadores de listas, devolviendo el resultado. La funcion full_listify sustituye operadores de conjuntos
en subexpresiones anidadas, incluso cuando el operador principal no es set.
La funci
on listify sustituye u
nicamente el operador principal.
Ejemplos:
(%i1) full_listify ({a, b, {c, {d, e, f}, g}});
(%o1)
[a, b, [c, [d, e, f], g]]
(%i2) full_listify (F (G ({a, b, H({c, d, e})})));
(%o2)
F(G([a, b, H([c, d, e])]))

fullsetify (a )

[Funcion]
Si a es una lista, sustituye el operador de lista por el de conjunto, aplicando posteriormente fullsetify a todos los elementos que son a su vez conjuntos. Si a no es
una lista, se devuelve sin cambio alguno.
La funci
on setify sustituye solamente el operador principal.
Ejemplos:
En la salida (%o2) el argumento de f no se convierte en conjunto porque el operador
principal de f([b]) no es una lista.
(%i1) fullsetify ([a, [a]]);
(%o1)
{a, {a}}
(%i2) fullsetify ([a, f([b])]);
(%o2)
{a, f([b])}

identity (x )
La funci
on identity devuelve su argumento cualquiera que sea este.
Ejemplos:

[Funcion]

542

Manual de Maxima

La funci
on identity puede utilizarse como predicado cuando los argumentos ya son
valores booleanos.
(%i1) every (identity, [true, true]);
(%o1)
true

integer_partitions (n )
integer_partitions (n, len )

[Funcion]
[Funcion]
Devuelve particiones enteras de n, esto es, listas de enteros cuyas sumas son n.
La sentencia integer_partitions(n ) devuelve el conjunto de todas las particiones
del entero n. Cada partici
on es una lista ordenada de mayor a menor.
La sentencia integer_partitions(n, len ) devuelve todas las particiones de longitud len o menor; en este caso, se a~
naden ceros a cada particion con menos de len
terminos para que todas ellas sean de longitud len. Las particiones son listas ordenadas de mayor a menor.
Una lista [a1 , ..., am ] es una particion de un entero no negativo n si (1) cada ai es
entero no nulo y (2) a1 + ... + am = n. As, 0 no tiene particiones.
Ejemplos:
(%i1) integer_partitions (3);
(%o1)
{[1, 1, 1], [2, 1], [3]}
(%i2) s: integer_partitions (25)$
(%i3) cardinality (s);
(%o3)
1958
(%i4) map (lambda ([x], apply ("+", x)), s);
(%o4)
{25}
(%i5) integer_partitions (5, 3);
(%o5) {[2, 2, 1], [3, 1, 1], [3, 2, 0], [4, 1, 0], [5, 0, 0]}
(%i6) integer_partitions (5, 2);
(%o6)
{[3, 2], [4, 1], [5, 0]}
Para encontrar todas las particiones que satisfagan cierta condicion, utilcese la
funci
on subset; he aqu un ejemplo que encuentra todas las particiones de 10
formadas por n
umeros primos.
(%i1) s: integer_partitions (10)$
(%i2) cardinality (s);
(%o2)
42
(%i3) xprimep(x) := integerp(x) and (x > 1) and primep(x)$
(%i4) subset (s, lambda ([x], every (xprimep, x)));
(%o4) {[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5], [7, 3]}

intersect (a_1, ..., a_n )

[Funcion]

Es una forma abreviada de la funcion intersection.

intersection (a_1, ..., a_n )

[Funcion]
Devuelve el conjunto de todos los elementos que son comunes a los conjuntos a 1 a
a n.
Emite un mensaje de error en caso de que cualquiera de los a i no sea un conjunto.
Ejemplos:

Captulo 35: Conjuntos

(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)
(%o8)

543

S_1 : {a, b, c, d};


{a, b, c, d}
S_2 : {d, e, f, g};
{d, e, f, g}
S_3 : {c, d, e, f};
{c, d, e, f}
S_4 : {u, v, w};
intersection (S_1,
intersection (S_2,
intersection (S_1,
intersection (S_1,

{u, v, w}
S_2);
{d}
S_3);
{d, e, f}
S_2, S_3);
{d}
S_2, S_3, S_4);
{}

kron_delta (x1, y1, . . . , xp, yp )

[Funcion]

Es la funci
on delta de Kronecker.
La funci
on kron_delta devuelve 1 cuando xi y yi son iguales para todos los pares,
devolviendo 0 si existe un par en el que xi y yi no sean iguales. La igualdad se
determina utilizando is(equal(xi,xj)) y la desigualdad con is(notequal(xi,xj)).
En caso de un solo argumento, kron_delta devuelve un mensaje de error.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

kron_delta(a,a);
1
kron_delta(a,b,a,b);
kron_delta(a, b)
kron_delta(a,a,b,a+1);
0
assume(equal(x,y));
[equal(x, y)]
kron_delta(x,y);
1

listify (a )

[Funcion]
Si a es un conjunto, devuelve una lista con los elementos de a; si a no es un conjunto,
devuelve a.
La funci
on full_listify sustituye todos los operadores de conjunto en a por operadores de lista.
Ejemplos:
(%i1) listify ({a, b, c, d});
(%o1)
[a, b, c, d]
(%i2) listify (F ({a, b, c, d}));
(%o2)
F({a, b, c, d})

544

Manual de Maxima

lreduce (f, s )
lreduce (f, s, init )

[Funcion]
[Funcion]
Ampla la funci
on binaria F a n-aria mediante composicion, siendo s una lista.
La sentencia lreduce(F, s ) devuelve F(... F(F(s_1, s_2), s_3), ... s_n). Si se
incluye el argumento opcional s 0, el resultado equivale a lreduce(F, cons(s_0,
s )).
La funci
on F se aplica primero a los elementos del extremo izquierdo de la lista, de
ah el nombre lreduce, (left reduce).
Veanse tambien rreduce, xreduce y tree_reduce.
Ejemplos:
La funci
on lreduce sin el argumento opcional,
(%i1) lreduce (f, [1, 2, 3]);
(%o1)
f(f(1, 2), 3)
(%i2) lreduce (f, [1, 2, 3, 4]);
(%o2)
f(f(f(1, 2), 3), 4)
La funci
on lreduce con el argumento opcional,
(%i1) lreduce (f, [1, 2, 3], 4);
(%o1)
f(f(f(4, 1), 2), 3)
La funci
on lreduce aplicada a operadores binarios de Maxima. El smbolo / es el
operador divisi
on.
(%i1) lreduce ("^", args ({a, b, c, d}));
b c d
(%o1)
((a ) )
(%i2) lreduce ("/", args ({a, b, c, d}));
a
(%o2)
----b c d

makeset (expr, x, s )

[Funcion]
Genera un conjunto cuyos miembros se generan a partir de la expresion expr, siendo
x una lista de variables de expr y s un conjunto o lista de listas. Para generar los
elementos del conjunto, se eval
ua expr asignando a las variables de x los elementos
de s en paralelo.
Los elementos de s deben tener la misma longitud que x. La lista de variables x debe
ser una lista de smbolos sin subndices. Cuando se trate de un u
nico smbolo, x debe
expresarse como una lista de un elemento y cada elemento de s debe ser una lista de
un s
olo elemento.
Vease tambien makelist.
Ejemplos:
(%i1) makeset (i/j, [i, j], [[1, a], [2, b], [3, c], [4, d]]);
1 2 3 4
(%o1)
{-, -, -, -}
a b c d
(%i2) S : {x, y, z}$

Captulo 35: Conjuntos

545

(%i3) S3 : cartesian_product (S, S, S);


(%o3) {[x, x, x], [x, x, y], [x, x, z], [x, y, x], [x, y, y],
[x, y, z], [x, z, x], [x, z, y], [x, z, z], [y, x, x],
[y, x, y], [y, x, z], [y, y, x], [y, y, y], [y, y, z],
[y, z, x], [y, z, y], [y, z, z], [z, x, x], [z, x, y],
[z, x, z], [z, y, x], [z, y, y], [z, y, z], [z, z, x],
[z, z, y], [z, z, z]}
(%i4) makeset (i + j + k, [i, j, k], S3);
(%o4) {3 x, 3 y, y + 2 x, 2 y + x, 3 z, z + 2 x, z + y + x,
z + 2 y, 2 z + x, 2 z + y}
(%i5) makeset (sin(x), [x], {[1], [2], [3]});
(%o5)
{sin(1), sin(2), sin(3)}

moebius (n )

[Funcion]

Representa la funci
on de Moebius.
Si n es el producto de k n
umeros primos diferentes, moebius(n ) devuelve (1)k ,
retornando 1 si n = 1 y 0 para cualesquiera otros enteros positivos.
La funci
on de Moebius se distribuye respecto de ecuaciones, listas, matrices y conjuntos.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)
(%i8)

moebius (1);
1
moebius (2 * 3 * 5);

- 1
moebius (11 * 17 * 29 * 31);
1
moebius (2^32);
0
moebius (n);
moebius(n)
moebius (n = 12);
moebius(n) = 0
moebius ([11, 11 * 13, 11 * 13 * 15]);
[- 1, 1, 1]
moebius (matrix ([11, 12], [13, 14]));
[ - 1 0 ]
(%o8)
[
]
[ - 1 1 ]
(%i9) moebius ({21, 22, 23, 24});
(%o9)
{- 1, 0, 1}

multinomial_coeff (a_1, ..., a_n )


multinomial_coeff ()

[Funcion]
[Funcion]

Calcula el coeficiente multinomial.


Si todos los a k son enteros no negativos, el coeficiente multinomial es el n
umero de
formas de colocar a_1 + ... + a_n objetos diferentes en n cajas con a k elementos

546

Manual de Maxima

en la k-esima caja. En general, multinomial_coeff (a_1, ..., a_n ) calcula (a_1


+ ... + a_n )!/(a_1 ! ... a_n !).
Si no se dan argumentos, multinomial_coeff() devuelve 1.
Se puede usar minfactorial para simplificar el valor devuelto por multinomial_
coeff.
Ejemplos:
(%i1) multinomial_coeff (1, 2, x);
(x + 3)!
(%o1)
-------2 x!
(%i2) minfactorial (%);
(x + 1) (x + 2) (x + 3)
(%o2)
----------------------2
(%i3) multinomial_coeff (-6, 2);
(- 4)!
(%o3)
-------2 (- 6)!
(%i4) minfactorial (%);
(%o4)
10

num_distinct_partitions (n )
num_distinct_partitions (n, list )

[Funcion]
[Funcion]
Si n es un entero no negativo, devuelve el n
umero de particiones enteras distintas de
n, en caso contrario num_distinct_partitions devuelve una forma nominal.
La sentencia num_distinct_partitions(n, list) devuelve una lista con el n
umero
de particiones distintas de 1, 2, 3, ..., n.
Una partici
on distinta de n es una lista de n
umeros enteros positivos distintos k1 , ...,
km tales que n = k1 + ... + km .
Ejemplos:
(%i1) num_distinct_partitions (12);
(%o1)
15
(%i2) num_distinct_partitions (12, list);
(%o2)
[1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15]
(%i3) num_distinct_partitions (n);
(%o3)
num_distinct_partitions(n)

num_partitions (n )
num_partitions (n, list )

[Funcion]
[Funcion]
Si n es un entero no negativo, devuelve el n
umero de particiones enteras de n, en caso
contrario num_partitions devuelve una expresion nominal.
La sentencia num_partitions(n, list) devuelve una lista con los n
umeros de particiones enteras de 1, 2, 3, ..., n.
Siendo n un entero no negativo,
num_partitions(n ) es igual a
cardinality(integer_partitions(n ));
sin embargo, num_partitions no
construye el conjunto de particiones, por lo que es mas rapido.

Captulo 35: Conjuntos

547

Ejemplos:
(%i1) num_partitions (5) = cardinality (integer_partitions (5));
(%o1)
7 = 7
(%i2) num_partitions (8, list);
(%o2)
[1, 1, 2, 3, 5, 7, 11, 15, 22]
(%i3) num_partitions (n);
(%o3)
num_partitions(n)

partition_set (a, f )

[Funcion]

Particiona el conjunto a respecto del predicado f.


La funci
on partition_set devuelve una lista con dos conjuntos; el primer conjunto
es el subconjunto de a para el cual el predicado f devuelve false y el segundo contiene
al resto de elementos de a.
La funci
on partition_set no aplica is al valor devuelto por f.
La funci
on partition_set emite un mensaje de error si a no es un conjunto literal.
Vease tambien subset.
Ejemplos:
(%i1) partition_set ({2, 7, 1, 8, 2, 8}, evenp);
(%o1)
[{1, 7}, {2, 8}]
(%i2) partition_set ({x, rat(y), rat(y) + z, 1},
lambda ([x], ratp(x)));
(%o2)/R/
[{1, x}, {y, y + z}]

permutations (a )

[Funcion]
Devuelve un conjunto con todas las permutaciones distintas de los miembros de la
lista o conjunto a. Cada permutacion es una lista, no un conjunto.
Si a es una lista, sus miembros duplicados no son eliminados antes de buscar sus
permutaciones.
Si a no es una lista o conjunto, permutations emite un mensaje de error.
Vease tambien random_permutation.
Ejemplos:
(%i1) permutations ([a, a]);
(%o1)
{[a, a]}
(%i2) permutations ([a, a, b]);
(%o2)
{[a, a, b], [a, b, a], [b, a, a]}

powerset (a )
powerset (a, n )

[Funcion]
[Funcion]
Devuelve el conjunto de todos los subconjuntos del conjunto a o un sunconjunto de
ellos.
La sentencia powerset(a ) devuelve el conjunto de todos los subconjuntos de a, que
contendr
a 2^cardinality(a ) elementos.
La sentencia powerset(a, n ) devuelve el conjunto de todos los subconjuntos de a de
cardinalidad n.

548

Manual de Maxima

La funci
on powerset emite un mensaje de error si a no es un conjunto literal o si n
no es un entero no negativo.
Ejemplos:
(%i1) powerset ({a, b, c});
(%o1) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}}
(%i2) powerset ({w, x, y, z}, 4);
(%o2)
{{w, x, y, z}}
(%i3) powerset ({w, x, y, z}, 3);
(%o3)
{{w, x, y}, {w, x, z}, {w, y, z}, {x, y, z}}
(%i4) powerset ({w, x, y, z}, 2);
(%o4)
{{w, x}, {w, y}, {w, z}, {x, y}, {x, z}, {y, z}}
(%i5) powerset ({w, x, y, z}, 1);
(%o5)
{{w}, {x}, {y}, {z}}
(%i6) powerset ({w, x, y, z}, 0);
(%o6)
{{}}

random_permutation (a )

[Funcion]
Devuelve una permutaci
on aleatoria del conjunto o lista a, siguiendo el algoritmo de
Knuth.
El valor devuelto es una lista nueva distinta del argumento, incluso cuando todos los
elementos son iguales. Sin embargo, los elementos del argumento no se copian.
Ejemplos:
(%i1) random_permutation ([a, b, c, 1, 2, 3]);
(%o1)
[c, 1, 2, 3, a, b]
(%i2) random_permutation ([a, b, c, 1, 2, 3]);
(%o2)
[b, 3, 1, c, a, 2]
(%i3) random_permutation ({x + 1, y + 2, z + 3});
(%o3)
[y + 2, z + 3, x + 1]
(%i4) random_permutation ({x + 1, y + 2, z + 3});
(%o4)
[x + 1, y + 2, z + 3]

rreduce (f, s )
rreduce (f, s, init )

[Funcion]
[Funcion]
Ampla la funci
on binaria F a n-aria mediante composicion, siendo s una lista.
La sentencia rreduce(F, s ) devuelve F(s_1, ... F(s_{n - 2}, F(s_{n - 1},
s_n))). Si se incluye el argumento opcional s {n + 1}, el resultado equivale a
rreduce(F, endcons(s_{n + 1}, s )).
La funci
on F se aplica primero a los elementos del extremo derecho de la lista, de ah
el nombre rreduce, (right reduce).
Veanse tambien lreduce, xreduce y tree_reduce.
Ejemplos:
La funci
on rreduce sin el argumento opcional,
(%i1) rreduce (f, [1, 2, 3]);
(%o1)
f(1, f(2, 3))
(%i2) rreduce (f, [1, 2, 3, 4]);

Captulo 35: Conjuntos

(%o2)

549

f(1, f(2, f(3, 4)))

La funci
on rreduce con el argumento opcional,
(%i1) rreduce (f, [1, 2, 3], 4);
(%o1)
f(1, f(2, f(3, 4)))
La funci
on rreduce aplicada a operadores binarios de Maxima. El smbolo / es el
operador divisi
on.
(%i1) rreduce ("^", args ({a, b, c, d}));
d
c
b
(%o1)
a
(%i2) rreduce ("/", args ({a, b, c, d}));
a c
(%o2)
--b d

setdifference (a, b )

[Funcion]
Devuelve el conjunto con los elementos del conjunto a que no pertenecen al conjunto
b.
La funci
on setdifference emite un mensaje de error si a o b no son conjuntos.
Ejemplos:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)

S_1 : {a, b, c, x, y, z};


{a, b, c, x, y, z}
S_2 : {aa, bb, c, x, y, zz};
{aa, bb, c, x, y, zz}
setdifference (S_1, S_2);
{a, b, z}
setdifference (S_2, S_1);
{aa, bb, zz}
setdifference (S_1, S_1);
{}
setdifference (S_1, {});
{a, b, c, x, y, z}
setdifference ({}, S_1);
{}

setequalp (a, b )

[Funcion]
Devuelve true si los conjuntos a y b tienen el mismo n
umero de elementos y is (x =
y ) vale true para x perteneciente a a e y perteneciente a b, considerados en el orden
que determina la funci
on listify. En caso contrario, setequalp devuelve false.
Ejemplos:
(%i1) setequalp ({1, 2, 3}, {1, 2, 3});
(%o1)
true
(%i2) setequalp ({a, b, c}, {1, 2, 3});
(%o2)
false

550

Manual de Maxima

(%i3) setequalp ({x^2 - y^2}, {(x + y) * (x - y)});


(%o3)
false

setify (a )

[Funcion]
Construye un conjunto con los miembros de la lista a. Los elementos duplicados de
la lista a son borrados y ordenados de acuerdo con el predicado orderlessp.
La funci
on setify emite un mensaje de error si a no es un conjunto literal.
Ejemplos:
(%i1) setify ([1, 2, 3, a, b, c]);
(%o1)
{1, 2, 3, a, b, c}
(%i2) setify ([a, b, c, a, b, c]);
(%o2)
{a, b, c}
(%i3) setify ([7, 13, 11, 1, 3, 9, 5]);
(%o3)
{1, 3, 5, 7, 9, 11, 13}

setp (a )

[Funcion]

Devuelve true si y s
olo si a es un conjunto de Maxima.
La funci
on setp devuelve true tanto cuando el conjunto tiene como cuando no tiene
elementos repetidos.
La funci
on setp is equivalent to the Maxima function setp(a) := not atom(a) and
op(a) = set.
Ejemplos:
(%i1) simp : false;
(%o1)
(%i2) {a, a, a};
(%o2)
(%i3) setp (%);
(%o3)

false
{a, a, a}
true

set_partitions (a )
set_partitions (a, n )

[Funcion]
[Funcion]
Devuelve el conjunto de todas las particiones de a o un subconjunto de ellas.

La sentencia set_partitions(a, n ) devuelve un conjunto con todas las descomposiciones de a en n conjuntos no vacos disjuntos.
La sentencia set_partitions(a ) devuelve el conjunto de todas las particiones.
La funci
on stirling2 devuelve la cardinalidad del conjunto de las particiones de un
conjunto.
Se dice que un conjunto P es una particion del conjunto S si verifica
1. cada elemento de P es un conjunto no vaco,
2. los elementos de P son disjuntos,
3. la uni
on de los elementos de P es igual a S.
Ejemplos:
El conjunto vaco forma una particion de s mismo,

Captulo 35: Conjuntos

(%i1) set_partitions ({});


(%o1)

551

{{}}

La cardinalidad del conjunto de particiones de un conjunto puede calcularse con


stirling2,
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) cardinality(p) = stirling2 (6, 3);
(%o3)
90 = 90
Cada elemento de p debera tener n = 3 miembros,
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) map (cardinality, p);
(%o3)
{3}
Por u
ltimo, para cada miembro de p, la union de sus elementos debe ser igual a s,
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) map (lambda ([x], apply (union, listify (x))), p);
(%o3)
{{0, 1, 2, 3, 4, 5}}

some (f, a )
some (f, L_1, ..., L_n )

[Funcion]
[Funcion]
Devuelve true si el predicado f devuelve true para al menos uno de sus argumentos.
Si el segundo argumento es un conjunto, some (f, a ) devuelve true si f (a_i ) devuelve tambien true para alguno de los a i en a; puede ser que some no eval
ue f para
todos los a i de s. Puesto que los conjuntos no estan ordenados, some puede evaluar
f (a_i ) en cualquier orden.
Dada una o m
as listas como argumentos, some (f, L_1, ..., L_n ) devuelve true si
f (x_1, ..., x_n ) devuelve tambien true para al menos un x 1, ..., x n de L 1, ...,
ue f para todos las combinaciones
L n, respectivamente; puede ser que some no eval
x 1, ..., x n. La funci
on some eval
ua las listas en el orden creciente de su ndice
Dado un conjunto vaco {} o una lista vaca como argumentos, some devuelve false.
Si la variable global maperror vale true, todas las listas L 1, ..., L n deben tener
igual n
umero de elementos. Si maperror vale false, los argumentos se truncan para
tener todos el n
umero de elementos de la lista mas corta.
Los valores que devuelve el predicado f cuando toman (mediante is) un valor diferente
a true y false se controlan con la variable global prederror. Si prederror vale
true, tales valores se consideran como false. Si prederror vale false, tales valores
se consideran como desconocidos (unknown).
Ejemplos:
La funci
on some aplicada a un u
nico conjunto. El predicado es una funcion de un
argumento,
(%i1) some (integerp, {1, 2, 3, 4, 5, 6});
(%o1)
true
(%i2) some (atom, {1, 2, sin(3), 4, 5 + y, 6});

552

Manual de Maxima

(%o2)
true
La funci
on some aplicada a dos listas. El predicado es una funcion de dos argumentos,
(%i1) some ("=", [a, b, c], [a, b, c]);
(%o1)
true
(%i2) some ("#", [a, b, c], [a, b, c]);
(%o2)
false
Las respuestas del predicado f que se eval
uan a cualquier cosa diferente de true y
false est
an controlados por la variable global prederror.
(%i1) prederror : false;
(%o1)
false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z],
[x^2, y^2, z^2]);
(%o2)
[unknown, unknown, unknown]
(%i3) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)
unknown
(%i4) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o4)
true
(%i5) prederror : true;
(%o5)
true
(%i6) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o6)
false
(%i7) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o7)
true

stirling1 (n, m )

[Funcion]
Es el n
umero de Stirling de primera especie.
Si tanto n como m son enteros no negativos, el valor que toma stirling1 (n, m )
es el n
umero de permutaciones de un conjunto de n elementos con m ciclos. Para
mas detalles, vease Graham, Knuth and Patashnik Concrete Mathematics. Maxima
utiliza una relaci
on recursiva para definir stirling1 (n, m ) para m menor que 0; no
est
a definida para n menor que 0 ni para argumentos no enteros.
La funci
on stirling1 es simplificadora. Maxima reconoce las siguientes identidades:
1. stirling1(0, n) = krond elta(0, n) (Ref. [1])
2. stirling1(n, n) = 1 (Ref. [1])
3. stirling1(n, n 1) = binomial(n, 2) (Ref. [1])
4. stirling1(n + 1, 0) = 0 (Ref. [1])
5. stirling1(n + 1, 1) = n! (Ref. [1])
6. stirling1(n + 1, 2) = 2n 1 (Ref. [1])
Estas identidades se aplican cuando los argumentos son enteros literales o smbolos
declarados como enteros y el primer argumento es no negativo. La funcion stirling1
no simplifica para argumentos no enteros.
Referencias:
[1] Donald Knuth, The Art of Computer Programming, Tercera Edicion, Volumen 1,
Secci
on 1.2.6, Ecuaciones 48, 49 y 50.

Captulo 35: Conjuntos

553

Ejemplos:
(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling1 (n, n);
(%o3)
1
La funci
on stirling1 no simplifica en caso de argumentos no enteros,
(%i1) stirling1 (sqrt(2), sqrt(2));
(%o1)
stirling1(sqrt(2), sqrt(2))
Maxima aplicas algunas identidades a stirling1,
(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling1 (n + 1, n);
n (n + 1)
(%o3)
--------2
(%i4) stirling1 (n + 1, 1);
(%o4)
n!

stirling2 (n, m )

[Funcion]
Es el n
umero de Stirling de segunda especie.
Si n y m son enteros no negativos, stirling2 (n, m ) es el n
umero de formas en
las que se puede particionar un conjunto de cardinal n en m subconjuntos disjuntos.
Maxima utiliza una relaci
on recursiva para definir stirling2 (n, m ) con m menor
que 0; la funci
on no est
a definida para n menor que 0 ni para argumentos no enteros.
La funci
on stirling2 es simplificadora. Maxima reconoce las siguientes identidades:
1. stirling2(0, n) = krond elta(0, n) (Ref. [1])
2. stirling2(n, n) = 1 (Ref. [1])
3. stirling2(n, n 1) = binomial(n, 2) (Ref. [1])
4. stirling2(n + 1, 1) = 1 (Ref. [1])
5. stirling2(n + 1, 2) = 2n 1 (Ref. [1])
6. stirling2(n, 0) = krond elta(n, 0) (Ref. [2])
7. stirling2(n, m) = 0 when m > n (Ref. [2])
8. stirling2(n, m) = sum((1)( m k)binomial(mk)k n , i, 1, m)/m! si m y n son
enteros y n no negativo. (Ref. [3])
Estas identidades se aplican cuando los argumentos son enteros literales o smbolos
declarados como enteros y el primer argumento es no negativo. La funcion stirling2
no simplifica para argumentos no enteros.
Referencias:
[1] Donald Knuth. The Art of Computer Programming, Tercera Edicion, Volumen 1,
Secci
on 1.2.6, Ecuaciones 48, 49 y 50.
[2] Graham, Knuth y Patashnik. Concrete Mathematics, Tabla 264.
[3] Abramowitz y Stegun. Handbook of Mathematical Functions, Seccion 24.1.4.
Ejemplos:

554

Manual de Maxima

(%i1) declare (n, integer)$


(%i2) assume (n >= 0)$
(%i3) stirling2 (n, n);
(%o3)
1
La funci
on stirling2 no simplifica en caso de argumentos no enteros,
(%i1) stirling2 (%pi, %pi);
(%o1)
stirling2(%pi, %pi)
Maxima aplicas algunas identidades a stirling2,
(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling2 (n + 9, n + 8);
(n + 8) (n + 9)
(%o3)
--------------2
(%i4) stirling2 (n + 1, 2);
n
(%o4)
2 - 1

subset (a, f )

[Funcion]
Devuelve el subconjunto del conjunto a que satisface el predicado f.
La funci
on subset devuelve el conjunto que contiene a los elementos de a para los
cuales f devuelve un resultado diferente de false. La funcion subset no aplica is al
valor retornado por f.
La funci
on subset emite un mensaje de error si a no es un conjunto literal.
Vease tambien partition_set.
Ejemplos:
(%i1) subset ({1, 2, x, x + y, z, x + y + z}, atom);
(%o1)
{1, 2, x, z}
(%i2) subset ({1, 2, 7, 8, 9, 14}, evenp);
(%o2)
{2, 8, 14}

subsetp (a, b )

[Funcion]
Devuelve true si y s
olo si el conjunto a es un subconjunto de b.
La funci
on subsetp emite un mensaje de error si cualesquiera a o b no es un conjunto
literal.
Ejemplos:
(%i1) subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3});
(%o1)
true
(%i2) subsetp ({a, 1, b, 2, c, 3}, {1, 2, 3});
(%o2)
false

symmdifference (a_1, . . . , a_n )

[Funcion]
Devuelve la diferencia simetrica de los conjuntos a_1, ..., a_n .
Dados dos argumentos, symmdifference (a, b ) equivale a union (setdifference
(a, b ), setdifference (b, a )).

Captulo 35: Conjuntos

555

La funci
on symmdifference emite un mensaje de error si alguno de su argumentos
no es un conjunto literal.
Ejemplos:
(%i1) S_1 : {a, b, c};
(%o1)
{a, b, c}
(%i2) S_2 : {1, b, c};
(%o2)
{1, b, c}
(%i3) S_3 : {a, b, z};
(%o3)
{a, b, z}
(%i4) symmdifference ();
(%o4)
{}
(%i5) symmdifference (S_1);
(%o5)
{a, b, c}
(%i6) symmdifference (S_1, S_2);
(%o6)
{1, a}
(%i7) symmdifference (S_1, S_2, S_3);
(%o7)
{1, b, z}
(%i8) symmdifference ({}, S_1, S_2, S_3);
(%o8)
{1,b, z}

tree_reduce (F, s )
tree_reduce (F, s, s_0 )

[Funcion]
[Funcion]

Ampla la funci
on binaria F a n-aria, siendo s una lista.
La funci
on tree_reduce equivale a lo suguiente: Aplicar F a pares sucesivos de
elementos para formar una nueva lista [F (s_1, s_2 ), F (s_3, s_4 ), ...], llevando
el elemento final sin cambiar si el n
umero de elementos es impar; despues repetir
hasta que la lista se reduzca a un u
nico elemento, que es el valor de retorno.
Cuando est
a presente el argumento opcional s 0, el resultado equivale a
tree_reduce(F, cons(s_0, s ).
Para la suma de n
umeros decimales en coma flotante, tree_reduce puede devolver
una suma que tenga un error de redondeo menor que el conseguido por rreduce o
lreduce.
Los elementos de s y los resultados parciales pueden colocarse en un arbol binario de
mnima profundidad, de ah el nombre de tree reduce.
Ejemplos:
La funci
on tree_reduce aplicada a una lista con un n
umero par de elementos,
(%i1) tree_reduce (f, [a, b, c, d]);
(%o1)
f(f(a, b), f(c, d))
La funci
on tree_reduce aplicada a una lista con un n
umero impar de elementos,
(%i1) tree_reduce (f, [a, b, c, d, e]);
(%o1)
f(f(f(a, b), f(c, d)), e)

union (a_1, ..., a_n )


Devuelve la uni
on de los conjuntos a 1 hasta a n.
La sentencia union() (sin argumentos) devuelve el conjunto vaco.

[Function]

556

Manual de Maxima

La funci
on union emite un mensaje de error si alguno de sus argumentos no es un
conjunto literal.
Ejemplos:
(%i1) S_1 : {a, b, c + d, %e};
(%o1)
{%e, a, b, d + c}
(%i2) S_2 : {%pi, %i, %e, c + d};
(%o2)
{%e, %i, %pi, d + c}
(%i3) S_3 : {17, 29, 1729, %pi, %i};
(%o3)
{17, 29, 1729, %i, %pi}
(%i4) union ();
(%o4)
{}
(%i5) union (S_1);
(%o5)
{%e, a, b, d + c}
(%i6) union (S_1, S_2);
(%o6)
{%e, %i, %pi, a, b, d + c}
(%i7) union (S_1, S_2, S_3);
(%o7)
{17, 29, 1729, %e, %i, %pi, a, b, d + c}
(%i8) union ({}, S_1, S_2, S_3);
(%o8)
{17, 29, 1729, %e, %i, %pi, a, b, d + c}

xreduce (F, s )
xreduce (F, s, s_0 )

[Funcion]
[Funcion]
Ampla la funci
on F a n-aria mediante composicion; si F ya es n-aria, aplica F a s.
Si F no es n-aria, xreduce equivale a lreduce. El argumento s debe ser una lista.
Funciones n-arias reconocidas por Maxima son la suma +, la multiplicacion *, and,
or, max, min y append. Las funciones tambien se pueden declarar n-arias mediante
declare(F, nary); para estas funciones, xreduce sera mas rapida que rreduce o
lreduce.
Cuando est
a presente el argumento opcional s 0, el resultado equivale a xreduce(s,
cons(s_0, s )).
La suma de n
umeros decimales en coma flotante no es exactamente asociativa; a
un
as, xreduce aplica la suma n-aria cuando s contiene n
umeros en coma flotante.
Ejemplos:
La funci
on xreduce aplicada a una funcion n-aria; F es invocada una sola vez, con
todos sus argumentos,
(%i1) declare (F, nary);
(%o1)
done
(%i2) F ([L]) := L;
(%o2)
F([L]) := L
(%i3) xreduce (F, [a, b, c, d, e]);
(%o3)
[[[[[("[", simp), a], b], c], d], e]
La funci
on xreduce aplicada a una funcion que se desconoce si es n-aria; G es invocada
varias veces, con dos argumentos de cada vez,
(%i1) G ([L]) := L;
(%o1)
G([L]) := L

Captulo 35: Conjuntos

(%i2) xreduce (G, [a, b, c, d, e]);


(%o2)
[[[[[("[", simp), a], b], c], d], e]
(%i3) lreduce (G, [a, b, c, d, e]);
(%o3)
[[[[a, b], c], d], e]

557

Captulo 36: Definici


on de Funciones

559

36 Definici
on de Funciones
36.1 Introducci
on a la definici
on de funciones
36.2 Funciones
36.2.1 Funciones ordinarias
Para definir una funci
on en Maxima es necesario utilizar el operador :=.
Por ejemplo,
f(x) := sin(x)
define una funci
on f. Tambien se pueden definir funciones anonimas utilizando lambda;
por ejemplo,
lambda ([i, j], ...)
puede utilizarse en lugar de f donde
f(i,j) := block ([], ...);
map (lambda ([i], i+1), l)
devolvera una lista con todos sus elementos aumentados en una unidad.
Tambien se puede definir una funcion con un n
umero variable de argumentos, sin mas que
a~
nadir un argumento final al que se le asigna una lista con todos los argumentos adicionales.:
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

f ([u]) := u;
f([u]) := u
f (1, 2, 3, 4);
[1, 2, 3, 4]
f (a, b, [u]) := [a, b, u];
f(a, b, [u]) := [a, b, u]
f (1, 2, 3, 4, 5, 6);
[1, 2, [3, 4, 5, 6]]

El miembro derecho de una funcion debe ser una expresion. As, si se quiere una secuencia
de expresiones, se debe hacer
f(x) := (expr1, expr2, ...., exprn);
siendo el valor que alcance exprn el devuelto por la funcion.
Si se quiere hacer un return desde alguna de las expresiones de la funcion, se debe
utilizar la estructura block junto con return. Por ejemplo,
block ([], expr1, ..., if (a > 10) then return(a), ..., exprn)
es una expresi
on de pleno derecho, por lo que puede ocupar el lado derecho de la definicion
de una funci
on. Aqu puede ocurrir que el retorno se produzca antes que se alcance la u
ltima
expresion.
Los primeros corchetes del bloque ([]) pueden contener una lista de variables junto con
posibles asignaciones, tal como [a: 3, b, c: []], lo que provocara que las tres variables
a,b y c se consideren locales y sean independientes de otras globales con el mismo nombre;
las variables locales s
olo estar
an activas mientras se ejecute el codigo que esta dentro de la

560

Manual de Maxima

estructura block, o dentro de funciones que son llamadas desde dentro de block. A esto se
le llama asignaci
on din
amica, pues las variables sobreviven desde el inicio del bloque hasta
que este deje de estar operativo. Una vez se salga del bloque los valores originales de las
variables, si es que los haba, quedan restaurados. Es recomendable proteger las variables
de esta forma. Se tendr
a en cuenta que las asignaciones a las variables del bloque se hacen
en paralelo, lo que significa que si como en el ejemplo anterior se hace c: a en el momento
de entrar en el bloque, el valor de c sera el que tena a antes de entrar en el bloque, es decir,
antes de la asignaci
on a: 3. As, haciendo lo siguiente
block ([a: a], expr1, ... a: a+3, ..., exprn)
se prevendra de que el valor externo de a fuese alterado, pero permitira acceder a
el desde dentro del bloque. La parte derecha de las asignaciones se eval
ua dentro de su
contexto antes de hacer efectiva la asignacion. Utilizando u
nicamente block([x],.. hara
que x se tuviese a s misma como valor, justo como si se acabase de iniciar una nueva sesion
de Maxima.
Los valores de los argumentos de una funcon se tratan exactamente de la misma forma
que las variables de un bloque. As, con
f(x) := (expr1, ..., exprn);
y
f(1);
se estara en un contexto similar para la evaluacion de las expresiones como si se hubiera
hecho
block ([x: 1], expr1, ..., exprn)
Dentro de las funciones, cuando el lado derecho de la definicion deba ser evaluado ser
a
u
til hacer uso de define y posiblemente de buildq.

36.2.2 Funciones array


Una funci
on array almacena el valor de la funcion la primera vez que es invocada con un
argumento dado, devolviendo el valor almacenado sin recalcularlo cuando es llamada con ese
mismo argumento. Estas funciones reciben tambien el nombre de funciones memorizadoras.
Los nombres de las funciones array son a~
nadidos a la lista global arrays, no a la lista
global functions. La funci
on arrayinfo devuelve la lista de argumentos para los que hay
valores almacenados y listarray devuelve precisamente estos valores almacenados. Las
funciones dispfun y fundef devuelven la definicion de la funcion array.
La funci
on arraymake construye una llamada a una funcion array, de forma similar a
como lo hace funmake para las funciones ordinarias. Por otro lado, arrayapply aplica una
funcion array a sus argumentos, tal como lo hace apply con las funciones ordinarias. No
existe para las funciones array nada similar a map, aunque map(lambda([x ], a [x ]), L ) o
makelist(a [x ], x, L ), siendo L una lista, podran suplantar esta carencia.
La funci
on remarray borra la definicion de una funcion array, as como cualesquiera
valores almacenados que tenga asociados, tal como remfunction lo hace con las funciones
ordinarias.
La llamada kill(a [x ]) borra el valor de la funcion array a almacenado para el argumento x; la pr
oxima vez que se llame a a con el argumento x, se recalculara el valor
correspondiente. Sin embargo, no hay forma de borrar todos los valores almacenados de

Captulo 36: Definici


on de Funciones

561

una sola vez, excepto mediante kill(a ) o remarray(a ), con lo que se borra tambien la
definicion de la propia funci
on.

36.3 Macros
buildq (L, expr )

[Funcion]
Sustituye en paralelo las variables nombradas en la lista L en la expresion expr, sin
evaluar esta. La expresi
on resultante se simplifica pero no se eval
ua hasta que buildq
termine de hacer las sustituciones.
Los elementos de L son smbolos o expresiones de asignacion del tipo symbol : value ,
evaluadas en paralelo. Esto es, el valor de una variable en la parte derecha de una
asignaci
on es el valor que toma dicha variable en el contexto desde el que se invoca a
buildq. En caso de que a una variable de L no se le haga una signacion explcita, su
valor en buildq es el mismo que tiene en el contexto desde el que se llama a buildq.
Las variables referenciadas en L se sustituyen en expr en paralelo. Esto es, la sustituci
on para cada variable se determina antes de que se hagan las sustituciones, de
forma que la sustituci
on de una variable no tiene efecto alguno sobre las otras.
Si alguna variable x aparece como splice (x ) en expr, entonces a x se le debe asignar
una lista, la cual ser
a interpolada en expr en lugar de hacer una simple sustitucion;
ver ejemplo m
as abajo.
Cualesquiera otras variables de expr que no aparezcan en L se traspasan al resultado
tal cual, incluso cuando tienen asignados valores en el contexto desde el que se llama
a buildq.
Ejemplos:
a queda asociada explcitamente a x, mientras que b tiene la misma asociacion (29)
que en el contexto de llamada y c es traspasado al resultado sin ser sustituido. La expresi
on resultante no se eval
ua hasta que no se le obligue a ello mediante la evaluacion
explcita %.
(%i1) (a: 17, b: 29, c: 1729)$
(%i2) buildq ([a: x, b], a + b + c);
(%o2)
x + c + 29
(%i3) %;
(%o3)
x + 1758
En este ejemplo, e se asocia a una lista, la cual aparece como tal en los argumentos
de foo e interpolada en los argumentos de bar.
(%i1) buildq ([e: [a, b, c]], foo (x, e, y));
(%o1)
foo(x, [a, b, c], y)
(%i2) buildq ([e: [a, b, c]], bar (x, splice (e), y));
(%o2)
bar(x, a, b, c, y)
Como se ve a continuaci
on, el resultado se simplifica tras las sustituciones. Si la
simplificaci
on se realizase antes que las sustituciones, ambos resultados seran iguales.
(%i1) buildq ([e: [a, b, c]], splice (e) + splice (e));
(%o1)
2 c + 2 b + 2 a
(%i2) buildq ([e: [a, b, c]], 2 * splice (e));

562

Manual de Maxima

(%o2)
2 a b c
Las variables de L se asocian en paralelo; si se hiciese secuencialmente, el primer
resultado sera foo (b, b). Las sustituciones se llevan a cabo en paralelo. Comparese
el segundo resultado con el resultado de subst, que hace las sustituciones de forma
secuencial.
(%i1) buildq ([a: b, b: a], foo (a, b));
(%o1)
foo(b, a)
(%i2) buildq ([u: v, v: w, w: x, x: y, y: z, z: u],
bar (u, v, w, x, y, z));
(%o2)
bar(v, w, x, y, z, u)
(%i3) subst ([u=v, v=w, w=x, x=y, y=z, z=u],
bar (u, v, w, x, y, z));
(%o3)
bar(u, u, u, u, u, u)
Se construye a continuaci
on un sistema de ecuaciones con algunas variables o expresiones en el lado izquierdo y sus valores en el derecho; macroexpand muestra la
expresi
on devuelta por show_values.
(%i1) show_values ([L]) ::= buildq ([L], map ("=", L, L));
(%o1)
show_values([L]) ::= buildq([L], map("=", L, L))
(%i2) (a: 17, b: 29, c: 1729)$
(%i3) show_values (a, b, c - a - b);
(%o3)
[a = 17, b = 29, c - b - a = 1683]
(%i4) macroexpand (show_values (a, b, c - a - b));
(%o4)
map(=, ([a, b, c - b - a]), [a, b, c - b - a])
Dada una funci
on con varios argumentos, se crea otra funcion en la cual algunos
argumentos son fijos.
(%i1) curry (f, [a]) :=
buildq ([f, a], lambda ([[x]], apply (f, append (a, x))))$
(%i2) by3 : curry ("*", 3);
(%o2)
lambda([[x]], apply(*, append([3], x)))
(%i3) by3 (a + b);
(%o3)
3 (b + a)

macroexpand (expr )

[Funcion]
Devuelve la macroexpansi
on de expr, sin evaluarla, cuando expr es una llamada a
una funci
on macro; en caso contrario, macroexpand devuelve expr.
Si la expansi
on de expr devuelve otra llamada a una funcion macro, esta llamada
tambien se expande.
La funci
on macroexpand no eval
ua su argumento. Sin embargo, si la expansion de
una llamada a funci
on macro tiene efectos laterales, estos se ejecutan.
Veanse tambien ::=, macros y macroexpand1.
Ejemplos:
(%i1) g (x) ::= x / 99;
x
(%o1)
g(x) ::= -99

Captulo 36: Definici


on de Funciones

563

(%i2) h (x) ::= buildq ([x], g (x - a));


(%o2)
h(x) ::= buildq([x], g(x - a))
(%i3) a: 1234;
(%o3)
1234
(%i4) macroexpand (h (y));
y - a
(%o4)
----99
(%i5) h (y);
y - 1234
(%o5)
-------99

macroexpand1 (expr )

[Funcion]
Devuelve la macroexpansi
on de expr, sin evaluarla, cuando expr es una llamada a
una funci
on macro; en caso contrario, macroexpand1 devuelve expr.

La funci
on macroexpand1 no eval
ua su argumento. Sin embargo, si la expansion de
una llamada a funci
on macro tiene efectos laterales, estos se ejecutan.
Si la expansi
on de expr devuelve otra llamada a una funcion macro, esta llamada no
se expande.
Veanse tambien ::=, macros y macroexpand.
Ejemplos:
(%i1) g (x) ::= x / 99;
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

x
g(x) ::= -99
h (x) ::= buildq ([x], g (x - a));
h(x) ::= buildq([x], g(x - a))
a: 1234;
1234
macroexpand1 (h (y));
g(y - a)
h (y);
y - 1234
-------99

macros

[Variable global]

Valor por defecto: []


La variable macros es la lista de las funciones macro definidas por el usuario. El
operador de definici
on de funciones macro ::= coloca la nueva funcion macro en esta
lista, mientras que kill, remove y remfunction eliminan las funciones macro de la
lista.
Vease tambien infolists.

564

Manual de Maxima

splice (a )

[Funcion]
Interpola la lista nombrada por el atomo a dentro de una expresion, pero solo si
splice aparece dentro de buildq; en otro caso, splice se considera una funcion
no definida. Si a aparece dentro de buildq sin splice, entonces queda sustituida
por una lista dentro del resultado. El argumento de splice debe ser un atomo, no
pudiendo ser una lista literal ni una expresion que devuelva una lista.
Normalmente splice suministra los argumentos para una funcion u operador. Para
una funci
on f, la expresi
on f (splice (a )) dentro de buildq se convierte en f
(a [1], a [2], a [3], ...). Dado un operador o, la expresion "o" (splice (a ) dentro de buildq se convierte en "o" (a [1], a [2], a [3], ...), donde o puede ser
cualquier tipo de operador, normalmente uno que admita varios argumentos. Notese
que el operador debe ir encerrado entre comillas dobles ".
Ejemplos:
(%i1) buildq ([x: [1, %pi, z - y]], foo (splice (x)) / length (x));
foo(1, %pi, z - y)
(%o1)
----------------------length([1, %pi, z - y])
(%i2) buildq ([x: [1, %pi]], "/" (splice (x)));
1
(%o2)
--%pi
(%i3) matchfix ("<>", "<>");
(%o3)
<>
(%i4) buildq ([x: [1, %pi, z - y]], "<>" (splice (x)));
(%o4)
<>1, %pi, z - y<>

36.4 Funciones y variables para la definici


on de funciones
apply (F, [x_1, ..., x_n ])

[Funcion]
Construye y eval
ua la expresion F (arg_1, ..., arg_n ).
La funci
on apply no hace distinciones entre funciones array y funciones ordinarias;
cuando F es el nombre de una funcion array, apply eval
ua F (...), esto es, hace
una llamada con parentesis en lugar de corchetes. La funcion arrayapply eval
ua una
llamada a funci
on con corchetes para estos casos.
Ejemplos:
La funci
on apply eval
ua sus argumentos. En este ejemplo, min se aplica al valor de
L.
(%i1) L : [1, 5, -10.2, 4, 3];
(%o1)
[1, 5, - 10.2, 4, 3]
(%i2) apply (min, L);
(%o2)
- 10.2
La funci
on apply eval
ua sus argumentos, incluso cuando la funcion F no lo hace.
(%i1) F (x) := x / 1729;
x
(%o1)
F(x) := ----

Captulo 36: Definici


on de Funciones

565

1729
(%i2) fname : F;
(%o2)
(%i3) dispfun (F);
(%t3)

F
x
F(x) := ---1729

(%o3)
[%t3]
(%i4) dispfun (fname);
fname is not the name of a user function.
-- an error. Quitting. To debug this try debugmode(true);
(%i5) apply (dispfun, [fname]);
x
(%t5)
F(x) := ---1729
(%o5)

[%t5]

La funci
on apply eval
ua el nombre de funcion F. La comilla simple evita la evaluaci
on. El nombre demoivre corresponde a una variable global y tambien a una
funci
on.
(%i1) demoivre;
(%o1)
false
(%i2) demoivre (exp (%i * x));
(%o2)
%i sin(x) + cos(x)
(%i3) apply (demoivre, [exp (%i * x)]);
demoivre evaluates to false
Improper name or value in functional position.
-- an error. Quitting. To debug this try debugmode(true);
(%i4) apply (demoivre, [exp (%i * x)]);
(%o4)
%i sin(x) + cos(x)

block ([v_1, ..., v_m ], expr_1, ..., expr_n )


block (expr_1, ..., expr_n )

[Funcion]
[Funcion]
La funci
on block eval
ua expr 1, ..., expr n secuencialmente y devuelve el valor de la
u
ltima expresi
on evaluada. La secuencia puede alterarse con las funciones go, throw
y return. La u
ltima expresion es expr n a menos que return o una expresion que
contenga un throw sea evaluada. Las variables v 1, ..., v m son locales en el bloque;
estas se distiguen de las globales que tengan el mismo nombre. Si no se declaran
variables locales entonces se puede omitir la lista. Dentro del bloque, cualquier otra
variable distinta de v 1, ..., v m se considera global.
La funci
on block guarda los valores actuales de las variables v 1, ..., v m, si los
tienen, a la entrada del bloque y luego las eval
ua a s mismas, es decir les saca el valor
temporalmente. A las variables locales se les puede asignar cualquier valor dentro del
bloque, pero al salir de este, los valores inicialmente almacenados quedan restaurados,
al tiempo que los asignados dentro del bloque se pierden.

566

Manual de Maxima

La declaraci
on local(v_1, ..., v_m ) dentro de un bloque almacena las propiedades
asociadas a los smbolos v 1, ..., v m, borra cualesquiera otras propiedades antes de
evaluar las expresiones y restaura las propiedades guardadas antes de abandonar
el bloque. Algunas declaraciones, como :=, array, dependencies, atvalue,
matchdeclare, atomgrad, constant, nonscalar, assume y otras se implementan
como propiedades de smbolos. El efecto producido por local consiste en hacer
que tales declaraciones tengan efecto solo dentro del bloque, en otro caso las
declaraciones dentro del bloque tendran un efecto global que afectaran al exterior
de block.
Un block puede aparecer dentro de otro block. 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 dinamico".
El valor del bloque es el de la u
ltima sentencia o el argumento de la funcion return,
que puede utilizarse para salir del bloque. La funcion go puede usarse para transferir
el control a la sentencia del bloque que este etiquetada con el argumento de go. Para
etiquetar una sentencia basta que vaya precedida de un argumento atomico como
cualquier otra sentencia dentro del bloque. Por ejemplo, block ([x], x:1, tururu,
x: x+1, ..., go(tururu), ...). El argumento de go debe ser el nombre de una
etiqueta colocada dentro del bloque. No se puede utilzar go para trasladarse a una
etiqueta de un bloque que no sea el que contenga a go.
Normalmente los bloques apareceran al lado derecho de las definiciones de funciones,
pero tambien pueden utilizarse en otros contextos.

break (expr_1, ..., expr_n )

[Funcion]
Calcula e imprime expr 1, ..., expr n para luego provocar la detencion de Maxima,
de modo que el usuario pueda examinar y cambiar el entorno de ejecucion. Pulsando
posteriormente exit; el c
alculo se reanuda.

catch (expr_1, ..., expr_n )

[Funcion]
Eval
ua expr 1, ..., expr n una a una; si alguna de ellas conlleva la evaluacion de
una expresi
on de la forma throw (arg), entonces el valor de catch es el de throw
(arg) y ya no se eval
uan m
as expresiones. Esta respuesta pasa todos los niveles de
anidamiento hasta el catch mas proximo. Si no hay ning
un catch que contenga un
throw se emite un mensaje de error.
Si la evaluaci
on de los argumentos no conlleva la evaluacion de ning
un throw, entonces
el valor de catch es el devuelto por expr n.
(%i1) lambda ([x], if x < 0 then throw(x) else f(x))$
(%i2) g(l) := catch (map (%, l))$
(%i3) g ([1, 2, 3, 7]);
(%o3)
[f(1), f(2), f(3), f(7)]
(%i4) g ([1, 2, -3, 7]);
(%o4)
- 3
La funci
on g devuelve las imagenes por f de todos los elementos de la lista l si esta
contiene u
nicamente n
umeros no negativos; si no es este el caso, entonces g captura
el primer negativo que encuentra y lo devuelve por medio del throw.

Captulo 36: Definici


on de Funciones

567

compfile (filename, f_1, . . . , f_n )


compfile (filename, functions)
compfile (filename, all)

[Function]
[Function]
[Function]
Traduce funciones de Maxima a codigo Lisp, guardandolo luego en el fichero filename.

Con la llamada compfile(filename, f_1, ..., f_n ) se traducen las funciones especificadas, mientras que compfile(filename, functions) y compfile(filename,
all) traducen las funciones definidas por el usuario.
El c
odigo Lisp traducido no se eval
ua, ni el fichero de salida es procesado por el compilador de Lisp. La funci
on translate crea y eval
ua las traducciones Lisp, mientras
que compile_file traduce primero de Maxima a Lisp y luego ejecuta el compilador
Lisp.
Veanse tambien translate, translate_file y compile_file.

compile (f_1, ..., f_n )


compile (functions)
compile (all)

[Funcion]
[Funcion]
[Funcion]
Traduce las funciones de Maxima f 1, ..., f n a Lisp, evaluando el codigo resultante,
y llama a la funci
on Lisp COMPILE para cada funcion traducida. La funcion compile
devuelve una lista con los nombres de las funciones compiladas.
Las llamadas compile (all) o compile (functions) compilan todas las funciones
definidas por el usuario.

La funci
on compile no eval
ua sus argumentos, pero con el operador comilla-comilla
() s lo hace.
(f (x_1, ..., x_n ), expr )
[Funcion]
(f [x_1, ..., x_n ], expr )
[Funcion]
(funmake (f, [x_1, ..., x_n ]), expr )
[Funcion]
(arraymake (f, [x_1, ..., x_n ]), expr )
[Funcion]
(ev (expr_1 ), expr_2 )
[Funcion]
Define una funci
on de nombre f con argumentos x 1, ..., x n y cuerpo expr. define
eval
ua siempre su segundo argumento, a menos que se indique lo contrario con el
operador de comilla simple. La funcion as definida puede ser una funcion ordinaria
de Maxima (con sus argumentos encerrados entre parentesis) o una funcion array (con
sus argumentos encerrados entre corchetes).

define
define
define
define
define

Cuando el u
ltimo o u
nico argumento x n es una lista de un solo elemento, la funcion
definida por define acepta un n
umero variable de argumentos. Los valores de los
argumentos se van asignando uno a uno a x 1, ..., x (n - 1), y los que queden, si los
hay, se asignan a x n en forma de lista.
Cuando el primer argumento de define es una expresion de la forma f (x_1, ...,
x_n ) o f [x_1, ..., x_n ], se eval
uan los argumentos de la funcion, pero no f, incluso
cuando se trate de una funci
on o variable ya existente con ese nombre.
Cuando el primer argumento es una expresion con operador funmake, arraymake o
ev, se eval
ua este primer argumento, lo que permite calcular la funcion.
Todas las definiciones de funciones aparecen en el mismo espacio de nombres;
definiendo una funci
on f dentro de otra funcion g no limita automaticamente el

568

Manual de Maxima

alcance de f a g. Sin embargo, local(f) hace que la definicion de la funcion f sea


efectiva s
olo dentro del bloque o expresion compuesta en el que aparece local.
Si un argumento formal x k es un smbolo afectado por el operador comilla simple
(expresi
on nominal), la funci
on definida por define no eval
ua el correspondiente valor
de argumento. En cualquier otro caso, los argumentos que se pasan son evaluados.
Veanse tambien := y ::=.
Ejemplos:
define eval
ua siempre su segundo argumento, a menos que se indique lo contrario
con el operador de comilla simple.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

expr : cos(y) - sin(x);


cos(y) - sin(x)
define (F1 (x, y), expr);
F1(x, y) := cos(y) - sin(x)
F1 (a, b);
cos(b) - sin(a)
F2 (x, y) := expr;
F2(x, y) := expr
F2 (a, b);
cos(y) - sin(x)

La funci
on as definida puede ser una funcion ordinaria de Maxima o una funcion
array.
(%i1) define (G1 (x, y), x.y - y.x);
(%o1)
G1(x, y) := x . y - y . x
(%i2) define (G2 [x, y], x.y - y.x);
(%o2)
G2
:= x . y - y . x
x, y
Cuando el u
ltimo o u
nico argumento x n es una lista de un solo elemento, la funcion
definida por define acepta un n
umero variable de argumentos.
(%i1) define (H ([L]), (apply ("+", L)));
(%o1)
H([L]) := apply("+", L)
(%i2) H (a, b, c);
(%o2)
c + b + a
Cuando el primer argumento es una expresion con operador funmake, arraymake o
ev, se eval
ua este primer argumento.
(%i1)
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

[F : I, u : x];
[I, x]
funmake (F, [u]);

I(x)
define (funmake (F, [u]), cos(u) + 1);
I(x) := cos(x) + 1
define (arraymake (F, [u]), cos(u) + 1);
I := cos(x) + 1
x
(%i5) define (foo (x, y), bar (y, x));

Captulo 36: Definici


on de Funciones

569

(%o5)
foo(x, y) := bar(y, x)
(%i6) define (ev (foo (x, y)), sin(x) - cos(y));
(%o6)
bar(y, x) := sin(x) - cos(y)

define_variable (name, default_value, mode )

[Funcion]
Introduce una variable global en el entorno de Maxima. La funcion define_variable
puede ser u
til en los paquetes escritos por los usuarios que vayan a ser compilados o
traducidos con frecuencia.
La funci
on define_variable ejecuta los siguientes pasos:
1. mode_declare (name, mode ) declara el modo de name al traductor. Vease
mode_declare para ver la lista de modos aceptables.
2. Si a
un no tiene asignaci
on, se le da a la variable default value el valor name.
3. declare (name, special) la declara como especial.
4. Asocia name a una funcion de comprobacion para asegurar que a name solo se
le asignan valores del modo declarado.

La propiedad value_check se puede asociar a cualquier variable que haya sido definida
mediante define_variable en cualquiera de los modos diferentes a any. La propiedad
value_check puede ser una expresion lambda o una funcion de una variable, que ser
a
invocada al intentar asignar un valor a la variable; el argumento pasado a la funcion
value_check es el valor que se le quiere asignar a la variable.
La funci
on define_variable eval
ua default_value pero no name ni mode; el valor
que devuelve es el valor actual de name, el cual es default_value si a name no se le
ha aplicado ninguna asignacion, o el valor de dicha asignacion en caso contrario.
Ejemplos:
foo es una variable booleana con valor inicial true.
(%i1) define_variable (foo, true, boolean);
(%o1)
true
(%i2) foo;
(%o2)
true
(%i3) foo: false;
(%o3)
false
(%i4) foo: %pi;
Error: foo was declared mode boolean, has value: %pi
-- an error. Quitting. To debug this try debugmode(true);
(%i5) foo;
(%o5)
false
bar es una variable entera, cuyo valor habra de ser primo.
(%i1) define_variable (bar, 2, integer);
(%o1)
2
(%i2) qput (bar, prime_test, value_check);
(%o2)
prime_test
(%i3) prime_test (y) := if not primep(y) then
error (y, "is not prime.");
(%o3) prime_test(y) :=

570

Manual de Maxima

if not primep(y) then error(y, "is not prime.")


(%i4) bar: 1439;
(%o4)
1439
(%i5) bar: 1440;
1440 is not prime.
#0: prime_test(y=1440)
-- an error. Quitting. To debug this try debugmode(true);
(%i6) bar;
(%o6)
1439
baz_quux es una variable a la que no se le podra asignar valor alguno. El modo
any_check es como any, pero any_check activa el mecanismo value_check, cosa que
any no hace.
(%i1) define_variable (baz_quux, baz_quux, any_check);
(%o1)
baz_quux
(%i2) F: lambda ([y], if y # baz_quux then
error ("Cannot assign to baz_quux."));
(%o2) lambda([y], if y # baz_quux
then error(Cannot assign to baz_quux.))
(%i3) qput (baz_quux, F, value_check);
(%o3) lambda([y], if y # baz_quux
then error(Cannot assign to baz_quux.))
(%i4) baz_quux: baz_quux;
(%o4)
baz_quux
(%i5) baz_quux: sqrt(2);
Cannot assign to baz_quux.
#0: lambda([y],if y # baz_quux then
error("Cannot assign to baz_quux."))(y=sqrt(2))
-- an error. Quitting. To debug this try debugmode(true);
(%i6) baz_quux;
(%o6)
baz_quux

dispfun (f_1, ..., f_n )


dispfun (all)

[Funcion]
[Funcion]
Muestra la deficni
on de las funciones de usuario f 1, ..., f n. Cada argumento puede ser
el nombre de una macro (definida mediante ::=), una funcion ordinaria (definida mediante := o define), una funcion arreglo (definida mediante := o define, pero encerrando los argumentos dentro de corchetes [ ]), una funcion de subndice (definida
mediante := o define, pero encerrando algunos argumentos entre corchetes y otros
entre parentesis ( )), una funcion de subndice seleccionada por un subndice variable,
o una funci
on de subndice definida con un subndice constante.
La llamada dispfun (all) muestra todas las funciones de usuario tal como las dan las
listas functions, arrays y macros, omitiendo las funciones con subndices definidas
con subndices constantes.
La funci
on dispfun crea una etiqueta (%t1, %t2, etc.) para cada funcion mostrada,
y asigna la definici
on de la funcion a la etiqueta. En contraste, fundef devuelve las
definiciones de las funciones.

Captulo 36: Definici


on de Funciones

571

La funci
on dispfun no eval
ua sus argumentos; el operador de comilla-comilla
permite la evaluaci
on.
La funci
on dispfun devuelve la lista de etiquetas de expresiones intermedias correspondientes a las funciones mostradas.
Ejemplos:
(%i1) m(x, y) ::= x^(-y);
(%o1)
(%i2) f(x, y)
(%o2)
(%i3) g[x, y]
(%o3)
(%i4) h[x](y)
(%o4)
(%i5) i[8](y)
(%o5)
(%i6) dispfun
(%t6)

(%t7)

(%t8)

(%t9)

(%t10)

(%t11)

- y
m(x, y) ::= x
:= x^(-y);
- y
f(x, y) := x
:= x^(-y);
- y
g
:= x
x, y
:= x^(-y);
- y
h (y) := x
x
:= 8^(-y);
- y
i (y) := 8
8
(m, f, g, h, h[5], h[10], i[8]);
- y
m(x, y) ::= x
- y
f(x, y) := x

g
x, y

- y
:= x

- y
h (y) := x
x
1
h (y) := -5
y
5
1
h (y) := --10
y

572

Manual de Maxima

10

(%t12)

(%o12)
(%i12) %;

- y
i (y) := 8
8
[%t6, %t7, %t8, %t9, %t10, %t11, %t12]

- y
- y
- y
(%o12) [m(x, y) ::= x
, f(x, y) := x
, g
:= x
,
x, y
- y
1
1
- y
h (y) := x
, h (y) := --, h (y) := ---, i (y) := 8
]
x
5
y
10
y
8
5
10

fullmap (f, expr_1, ...)

[Funcion]
Similar a map, pero conservara el mapeado descendente de todas las subexpresiones
hasta que los operadores principales ya no sean los mismos.
La funci
on fullmap es utilizada por el simplificador de Maxima en algunas transformaciones matriciales, por lo que Maxima generara en algunas ocasiones mensajes de
error relacionados con fullmap aunque el usuario no haya invocado explcitamente
esta funci
on.
(%i1) a + b * c;
(%o1)
b c + a
(%i2) fullmap (g, %);
(%o2)
g(b) g(c) + g(a)
(%i3) map (g, %th(2));
(%o3)
g(b c) + g(a)

fullmapl (f, list_1, ...)

[Funcion]

Similar a fullmap, pero fullmapl solo hace mapeo sobre listas y matrices.
(%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
(%o1)
[[a + 3, 4], [4, 3.5]]
[Variable del sistema]
Valor por defecto: []
La variable functions es una lista que contiene los nombres de las funciones ordinarias de Maxima. Una funcion ordinaria es aquella que ha sido construida mediante
cualquiera de los metodos define o := y que es invocada utilizando parentesis. Una
funci
on puede definirse durante una sesion de Maxima o en un fichero que posteriormente ser
a cargado en memoria por load o batch.
Las funciones array, que son invocadas con corchetes (F[x]), y las funciones subindicadas, que son las invocadas con corchetes y parentesis (F[x](y)) se registran en la
variable global arrays, no en functions.
Las funciones Lisp no se registran en ninguna lista.
Ejemplos:

functions

Captulo 36: Definici


on de Funciones

573

(%i1) F_1 (x) := x - 100;


(%o1)
F_1(x) := x - 100
(%i2) F_2 (x, y) := x / y;
x
(%o2)
F_2(x, y) := y
(%i3) define (F_3 (x), sqrt (x));
(%o3)
F_3(x) := sqrt(x)
(%i4) G_1 [x] := x - 100;
(%o4)
G_1 := x - 100
x
(%i5) G_2 [x, y] := x / y;
x
(%o5)
G_2
:= x, y
y
(%i6) define (G_3 [x], sqrt (x));
(%o6)
G_3 := sqrt(x)
x
(%i7) H_1 [x] (y) := x^y;
y
(%o7)
H_1 (y) := x
x
(%i8) functions;
(%o8)
[F_1(x), F_2(x, y), F_3(x)]
(%i9) arrays;
(%o9)
[G_1, G_2, G_3, H_1]

fundef (f )

[Funcion]
Devuelve la definici
on de la funcion f.
Cada argumento puede ser el nombre de una macro (definida mediante ::=), una
funci
on ordinaria (definida mediante := o define), una funcion arreglo (definida
mediante := o define, pero encerrando los argumentos dentro de corchetes [ ]),
una funci
on de subndice (definida mediante := o define, pero encerrando algunos
argumentos entre corchetes y otros entre parentesis ( )), una funcion de subndice
seleccionada por un subndice variable, o una funcion de subndice definida con un
subndice constante.
La funci
on fundef no eval
ua sus argumentos; el operador comilla-comilla permite
la evaluaci
on.
La llamada de funci
on fundef (f ) devuelve la definicion de f. Por el contrario,
dispfun (f ) crea una etiqueta intermedia y le asigna la definicion a la etiqueta.

funmake (F, [arg_1, ..., arg_n ])

[Funcion]
Devuelve una expresi
on F (arg_1, ..., arg_n ). El valor as retornado es simplificado pero no evaluado, de forma que la funcion F no es invocada, incluso cuando
exista.
La funci
on funmake no hace distinciones entre funciones array y funciones ordinarias;
cuando F es el nombre de una funcion array, funmake devuelve F (...), esto es,

574

Manual de Maxima

una llamada a funci


on con parentesis en lugar de corchetes. La funcion arraymake
devuelve una llamada a funcion con corchetes para estos casos.
La funci
on funmake eval
ua sus argumentos.
Ejemplos:
La funci
on funmake aplicada a una funcion ordinaria de Maxima.
(%i1) F (x, y) := y^2 - x^2;
2
2
(%o1)
F(x, y) := y - x
(%i2) funmake (F, [a + 1, b + 1]);
(%o2)
F(a + 1, b + 1)
(%i3) %;
2
2
(%o3)
(b + 1) - (a + 1)
La funci
on funmake aplicada a una macro.
(%i1) G (x) ::= (x - 1)/2;
x - 1
(%o1)
G(x) ::= ----2
(%i2) funmake (G, [u]);
(%o2)
G(u)
(%i3) %;
u - 1
(%o3)
----2
La funci
on funmake aplicada a una funcion subindicada.
(%i1) H [a] (x) := (x - 1)^a;
a
(%o1)
H (x) := (x - 1)
a
(%i2) funmake (H [n], [%e]);
n
(%o2)
lambda([x], (x - 1) )(%e)
(%i3) %;
n
(%o3)
(%e - 1)
(%i4) funmake ((H [n]), [%e]);
(%o4)
H (%e)
n
(%i5) %;
n
(%o5)
(%e - 1)
La funci
on funmake aplicada a un smbolo que no esta asociado a funcion alguna.
(%i1) funmake (A, [u]);
(%o1)
A(u)
(%i2) %;

Captulo 36: Definici


on de Funciones

(%o2)

575

A(u)

La funci
on funmake eval
ua sus argumentos, pero no el valor retornado.
(%i1) det(a,b,c) := b^2 -4*a*c;
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

2
det(a, b, c) := b - 4 a c
(x : 8, y : 10, z : 12);
12
f : det;
det
funmake (f, [x, y, z]);
det(8, 10, 12)
%;
- 284

Maxima simplifica el valor retornado de funmake.


(%i1) funmake (sin, [%pi / 2]);
(%o1)
1

lambda ([x_1, ..., x_m ], expr_1, ..., expr_n )


lambda ([[L ]], expr_1, ..., expr_n )
lambda ([x_1, ..., x_m, [L ]], expr_1, ..., expr_n )

[Funcion]
[Function]
[Function]
Define y devuelve una expresion lambda (es decir, una funcion anonima). La funcion
puede tener argumentos x 1, ..., x m y/o argumentos opcionales L, que apareceran
dentro del cuerpo de la funcion como una lista. El valor que devuelve la funcion es
expr n. Una expresi
on lambda puede asignarse a una variable y ser evaluada como
si fuese una funci
on ordinaria. Ademas, puede aparecer en algunos contextos en los
que sea necesario un nombre de funcion.
Cuando se eval
ua la funci
on, se crean las variables x 1, ..., x m sin asignacion de
valores. Una funci
on lambda puede aparecer dentro de un block o de otra lambda.
Las variables locales se inicializan cada vez que se entra dentro de un nuevo bloque
o de otra funci
on lambda. Las variables locales se consideran globales dentro de un
bloque o funci
on lambda anidado dentro del primero. Si una variable es no local
dentro de un bloque o funci
on lambda, su valor es el que le corresponde en el bloque o
funci
on lambda superior. Este criterio se conoce con el nombre de "alcance dinamico".
Una vez establecidas las variables locales expr 1 a expr n son secuencialmente evaluadas. La variable especial %% representa el valor de la expresion inmediata anterior.
Las sentencias throw y catch pueden aparecer tambien en la lista de expresiones.
La funci
on return no puede aparecer en una expresion lambda a menos que se encuentre acotada dentro de un bloque (block), en cuyo caso return establece el valor
de retorno del bloque, pero no de la expresion lambda, a menos que el bloque resulte
ser precisamente expr n. De igual manera, go no puede aparecer en una expresion
lambda si no es dentro de un block.
Las funciones lambda no eval
uan sus argumentos; el operador comilla-comilla
permite su evaluaci
on.
Ejemplo:

576

Manual de Maxima

Una funci
on lambda puede asignarse a una variable y ser evaluada como si fuese
una funci
on ordinaria.
(%i1) f: lambda ([x], x^2);
(%o1)
(%i2) f(a);

2
lambda([x], x )
2
a

(%o2)

Una expresi
on lambda puede aparecer en algunos contextos en los que sea necesario un nombre de funcion.
(%i3) lambda ([x], x^2) (a);
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

2
a
apply (lambda ([x], x^2), [a]);
2
a
map (lambda ([x], x^2), [a, b, c, d, e]);
2
2
2
2
2
[a , b , c , d , e ]

Los argumentos son variables locales. Otras variables se consideran globales. Las
variables globales son evaluadas en el momento que lo es la expresion, a menos
que la evaluaci
on de las mismas sea forzada, como cuando se hace uso de .
(%i6) a: %pi$
(%i7) b: %e$
(%i8) g: lambda ([a], a*b);
(%o8)
lambda([a], a b)
(%i9) b: %gamma$
(%i10) g(1/2);
%gamma
(%o10)
-----2
(%i11) g2: lambda ([a], a*b);
(%o11)
lambda([a], a %gamma)
(%i12) b: %e$
(%i13) g2(1/2);
%gamma
(%o13)
-----2
Las expresiones lambda pueden anidarse. Las variables locales de expresiones
lambda exteriores se consideran globales en expresiones internas, a menos que se
enmascaren con variables locales de igual nombre.
(%i14) h: lambda ([a, b], h2: lambda ([a], a*b), h2(1/2));
1
(%o14)
lambda([a, b], h2 : lambda([a], a b), h2(-))
2

Captulo 36: Definici


on de Funciones

577

(%i15) h(%pi, %gamma);


%gamma
-----2
Puesto que lambda no eval
ua sus argumentos, la expresion lambda i de m
as
abajo no define una funcion del tipo "multiplicar por a". Tal tipo de funcion se
puede definir a traves de buildq, como en la expresion lambda i2 de mas abajo.
(%i16) i: lambda ([a], lambda ([x], a*x));
(%o16)
lambda([a], lambda([x], a x))
(%i17) i(1/2);
(%o17)
lambda([x], a x)
(%i18) i2: lambda([a], buildq([a: a], lambda([x], a*x)));
(%o18)
lambda([a], buildq([a : a], lambda([x], a x)))
(%i19) i2(1/2);
x
(%o19)
lambda([x], -)
2
(%i20) i2(1/2)(%pi);
%pi
(%o20)
--2
Una expresi
on lambda puede tener un n
umero variable de argumentos, los cuales
se indican mediante [L ], bien sea solo o como un u
ltimo argumento. Estos
argumentos aparecer
an dentro del cuerpo de la funcion en forma de lista.
(%i1) f : lambda ([aa, bb, [cc]], aa * cc + bb);
(%o1)
lambda([aa, bb, [cc]], aa cc + bb)
(%i2) f (foo, %i, 17, 29, 256);
(%o2)
[17 foo + %i, 29 foo + %i, 256 foo + %i]
(%i3) g : lambda ([[aa]], apply ("+", aa));
(%o3)
lambda([[aa]], apply(+, aa))
(%i4) g (17, 29, x, y, z, %e);
(%o4)
z + y + x + %e + 46
(%o15)

local (v_1, ..., v_n )

[Funcion]
La declaraci
on local(v_1, ..., v_m ) dentro de un bloque almacena las propiedades
asociadas a los smbolos v 1, ..., v m, borra cualesquiera otras propiedades antes de
evaluar las expresiones y restaura las propiedades guardadas antes de abandonar el
bloque.
Algunas declaraciones, como :=, array, dependencies, atvalue, matchdeclare,
atomgrad, constant, nonscalar, assume y otras se implementan como propiedades
de smbolos. El efecto producido por local consiste en hacer que tales declaraciones
tengan efecto s
olo dentro del bloque, en otro caso las declaraciones dentro del bloque
tendran un efecto global que afectaran al exterior de block.
La funci
on local s
olo puede usarse dentro de un block, en el cuerpo de definicion
de funciones o de expresiones lambda o en la funcion ev, siendole permitido aparecer
una s
ola vez en cada una de ellas.

578

Manual de Maxima

La funci
on local no eval
ua sus argumentos y devuelve done.
Ejemplo:
Definici
on local de una funci
on.
(%i1) foo (x) := 1 - x;
(%o1)
foo(x) := 1 - x
(%i2) foo (100);
(%o2)
- 99
(%i3) block (local (foo), foo (x) := 2 * x, foo (100));
(%o3)
200
(%i4) foo (100);
(%o4)
- 99

macroexpansion

[Variable opcional]

Valor por defecto: false


La variable macroexpansion controla si la expansion (esto es, el valor de retorno) de
una funci
on macro se sustituye por la llamada a la funcion macro. Una sustitucion
puede acelerar futuras evaluaciones de la expresion, bajo el coste que implica tener
que almacenar la expansi
on.
false

La expansi
on de una funcion macro no se sustituye por la llamada a la
funci
on macro.

expand

La primera vez que se eval


ua una llamada a funcion macro se almacena
la expansi
on. De esta manera la expansion no se recalcula en llamadas
posteriores; cualesquiera efectos laterales (como print o asignaciones a
variables globales) tan solo tienen lugar la primera vez que la funcion
macro es evaluada. La expansion en una expresion no afecta a otras
expresiones que llamen a la misma funcion macro.

displace

La primera vez que se eval


ua una llamada a una funcion macro, la expansi
on se sustituye por la llamada, modificando as la expresion desde la
que se hizo la llamada a la funcion macro. La expansion no se recalcula en
llamadas posteriores; cualesquiera efectos laterales tan solo tienen lugar
la primera vez que la funcion macro es evaluada. La expansion en una
expresi
on no afecta a otras expresiones que llamen a la misma funcion
macro.

Ejemplos:
Si macroexpansion vale false, una funcion macro es llamada cada vez que la expresi
on de llamada es evaluada.
(%i1) f (x) := h (x) / g (x);
h(x)
(%o1)
f(x) := ---g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x),
return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
return(x + 99))

Captulo 36: Definici


on de Funciones

579

(%i3) h (x) ::= block (print ("x - 99 is equal to", x),


return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
return(x - 99))
(%i4) macroexpansion: false;
(%o4)
false
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
a b - 99
(%o5)
-------a b + 99
(%i6) dispfun (f);
h(x)
(%t6)
f(x) := ---g(x)
(%o6)
(%i7) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
(%o7)

done

a b - 99
-------a b + 99

Si macroexpansion vale expand, una funcion macro tan solo es llamada una vez.
(%i1) f (x) := h (x) / g (x);
h(x)
(%o1)
f(x) := ---g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x),
return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
return(x + 99))
(%i3) h (x) ::= block (print ("x - 99 is equal to", x),
return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
return(x - 99))
(%i4) macroexpansion: expand;
(%o4)
expand
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
a b - 99
(%o5)
-------a b + 99
(%i6) dispfun (f);

580

Manual de Maxima

(%t6)

(%o6)
(%i7) f (a * b);

h(x)
f(x) := ---g(x)
done

a b - 99
-------a b + 99
Si macroexpansion vale expand, una funcion macro es llamada una vez y la expresion
de llamada se modifica.
(%i1) f (x) := h (x) / g (x);
h(x)
(%o1)
f(x) := ---g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x), return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
return(x + 99))
(%i3) h (x) ::= block (print ("x - 99 is equal to", x), return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
return(x - 99))
(%i4) macroexpansion: displace;
(%o4)
displace
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
a b - 99
(%o5)
-------a b + 99
(%i6) dispfun (f);
x - 99
(%t6)
f(x) := -----x + 99
(%o7)

(%o6)
(%i7) f (a * b);
(%o7)

mode_checkp

done
a b - 99
-------a b + 99
[Variable opcional]

Valor por defecto: true


Cuando mode_checkp vale true, mode_declare chequea los modos de las variables
con valores asignados.

mode_check_errorp
Valor por defecto: false

[Variable opcional]

Captulo 36: Definici


on de Funciones

581

Cuando mode_check_errorp vale true, mode_declare llama a error.

mode_check_warnp

[Variable opcional]

Valor por defecto: true


Cuando mode_check_warnp vale true, se detallan los errores de modo.

mode_declare (y_1, modo_1, ..., y_n, modo_n )

[Funcion]
La funci
on mode_declare se utiliza para declarar los modos de variables y funciones
para la ulterior traducci
on a Lisp o compilacion de funciones. Se coloca habitualmente
al comienzo de la definici
on de una funcion, de un script en Maxima o se ejecuta en
tiempo real.

Los argumentos de mode_declare son pares formados por una variable y un modo,
el cual debe ser boolean, fixnum, number, rational o float. Cada variable puede
ser sustituida por una lista de variables, en cuyo caso todas ellas tendran el mismo
modo.
Codigo numerico que utilice arreglos puede ejecutarse mas rapido declarando el
tama~
no que va a ocupar el arreglo, como en:
mode_declare (array (a [10, 10]), float)
para un arreglo de n
umeros en coma flotante de dimensiones 10 x 10.
Se puede declarar el modo del resultado de una funcion poniendo function (f_1,
f_2, ...) como argumento; aqu f_1, f_2, ... son los nombres de las funciones. Por
ejemplo, la expresi
on
mode_declare ([function (f_1, f_2, ...)], fixnum)
declara que el valor a devolver por f_1, f_2, ... son enteros de modo "single-word".
El nombre modedeclare es sinonimo de mode_declare.

mode_identity (arg_1, arg_2 )

[Funcion]
Es una forma especial usada con mode_declare y macros para declarar, por ejemplo,
una lista de listas de n
umeros.

remfunction (f_1, ..., f_n )


remfunction (all)

[Funcion]
[Funcion]
Desliga las definiciones de funcion de sus smbolos f 1, ..., f n. Los argumentos pueden
ser nombres de funciones ordinarias (creadas con := o define) o de funciones macro
(creadas con ::=).
La instrucci
on remfunction (all) desliga todas las definiciones de funciones.
La funci
on remfunction no eval
ua sus argumentos.
La funci
on remfunction devuelve una lista con los smbolos para los que la definicion
de funci
on fue desligada. Devuelve false en el lugar de cualquier smbolo para el que
no hay funci
on definida.
La funci
on remfunction no se puede aplicar a arrays de funciones ni a funciones
subindicadas. S es aplicable en tales casos la funcion remarray.

savedef
Valor por defecto: true

[Variable opcional]

582

Manual de Maxima

Si savedef vale true, se mantiene la version Maxima de una funcion definida por el
usuario cuando esta se traduce, lo que permite mostrar su codigo con dispfun y que
la funci
on pueda ser editada.
Si savedef vale false, los nombres de las funciones traducidas se eliminan de la lista
functions.

transcompile

[Variable opcional]

Valor por defecto: true


Si transcompile vale true, translate y translate_file generan declaraciones para
hacer el c
odigo traducido m
as apto para la compilacion.
La funci
on compfile hace la asignacion transcompile: true.

translate (f_1, ..., f_n )


translate (functions)
translate (all)

[Funcion]
[Funcion]
[Funcion]
Traduce las funciones definidas por el usuario f 1, ..., f n del lenguaje de Maxima a
Lisp y eval
ua las traducciones Lisp. Normalmente las funciones traducidas se ejecutan
mas rapidamente que las originales.
Las llamadas translate (all) o translate (functions) traducen todas las funciones de usuario.
Las funciones a ser traducidas deberan incluir una llamada a mode_declare al
comienzo siempre que sea posible, a fin de producir codigo mas eficiente. Por ejemplo:
f (x_1, x_2, ...) := block ([v_1, v_2, ...],
mode_declare (v_1, modo_1, v_2, modo_2, ...), ...)
donde x 1, x 2, ... son los parametros que se pasan a la funcion y v 1, v 2, ... son
las variables locales.
Los nombres de las funciones traducidas son eliminados de la lista functions si
savedef vale false (ver m
as abajo) y son a~
nadidos a las listas props.
Las funciones no deberan ser traducidas hasta no estar completamente depuradas.
Se supone que las expresiones estan simplificadas; en caso de no estarlo, se generar
a
codigo correcto pero ineficiente. As, el usuario no debera asignar a simp el valor
false, el cual inhibe la simplificacion de la expresion a ser traducida.
Cuando la variable translate vale true, se traducen automaticamente las funciones
de usuario a Lisp.
Notese que las funciones traducidas puede que no se ejecuten exactamente igual a
como lo hacan antes de la traduccion, debido a posibles incompatibilidades entre las
versiones de Maxima y Lisp. En general, la funcion rat con mas de un argumento y
la funci
on ratvars no deberan utilizarse si algunas de las variables son declaradas
como expresiones racionales canonicas (CRE) mediante mode_declare. Ademas, la
asignaci
on prederror: false no traducira.
Si savedef vale true, entonces la version de Maxima de una funcion de usuario
permanecer
a cuando la funci
on sea traducida por translate. Con esto se hace posible
que se muestre la definici
on llamando a dispfun y que la funcion sea editada.
Si transrun vale false entonces las versiones interpretadas de todas las funciones
ser
an ejecutadas en lugar de las versiones traducidas.

Captulo 36: Definici


on de Funciones

583

El resultado devuelto por translate es una lista con los nombres de las funciones
traducidas.

translate_file (nombre_fichero_maxima )
translate_file (nombre_fichero_maxima, nombre_fichero_lisp )

[Funcion]
[Funcion]
Traduce un fichero en c
odigo Maxima a un fichero en codigo Lisp. La funcion
translate_file devuelve una lista con los nombres de tres ficheros: el nombre del
ficheero en Maxima, el nombre del fichero en Lisp y el nombre del fichero que contiene informaci
on adicional sobre la traduccion. La funcion translate_file eval
ua
sus argumentos.
La llamada translate_file ("foo.mac"); load("foo.LISP") es lo mismo que
batch ("foo.mac"), excepto por la presencia de ciertas restricciones, como el uso
de y %, por ejemplo.
La llamada translate_file (nombre_fichero_maxima ) traduce un fichero en Maxima, nombre fichero maxima, a otro en Lisp de nombre similar. Por ejemplo, foo.mac
se traduce en foo.LISP. El nombre del fichero en Maxima puede incluir el nombre de
un directorio, en cuyo caso el fichero de salida Lisp se guardara en el mismo directorio
desde el que se ley
o la fuente Maxima.
La llamada translate_file (nombre_fichero_maxima, nombre_fichero_lisp )
traduce el fichero Maxima nombre fichero maxima en el fichero Lisp nomon translate_file ignora la extension del fichero, en caso
bre fichero lisp. La funci
de que exista, de nombre_fichero_lisp; la extension del fichero de salida Lisp ser
a
invariablemente LISP. El nombre del fichero Lisp puede incluir la ruta del directorio,
en cuyo caso se almacenar
a en el directorio especificado.
La funci
on translate_file tambien escribe un fichero de mensajes de avisos del
traductor con diversos niveles de gravedad. La extension de este fichero es UNLISP.
Este fichero puede contener informacion valiosa, aunque de difcil interpretacion, para
detectar fallos en el c
odigo traducido. El fichero UNLISP se guarda siempre en el mismo
directorio desde el que se ley
o la fuente de Maxima.
La funci
on translate_file emite codigo Lisp que incluye algunas declaraciones y
definiciones que entran en efecto tan pronto como el codigo Lisp es compilado. Vease
compile_file para m
as informacion sobre este particular.
Veanse tambien tr_array_as_ref, tr_bound_function_applyp, tr_exponent,
tr_file_tty_messagesp, tr_float_can_branch_complex, tr_function_call_
default, tr_numer, tr_optimize_max_loop, tr_semicompile, tr_state_vars,
tr_warnings_get, tr_warn_bad_function_calls, tr_warn_fexpr, tr_warn_
meval, tr_warn_mode, tr_warn_undeclared, y tr_warn_undefined_variable.
[Variable opcional]
Valor por defecto: true
Si transrun vale false entonces se ejecutaran las versiones interpretadas de todas
las funciones, en lugar de las versiones traducidas.

transrun

tr_array_as_ref

[Variable opcional]

Valor por defecto: true


Si translate_fast_arrays vale false, referencias de arreglos en el codigo Lisp
creadas por translate_file se ven afectadas por tr_array_as_ref.

584

Manual de Maxima

El valor de la variable tr_array_as_ref no tiene ning


un efecto cuando translate_
fast_arrays vale true.
[Variable opcional]
Valor por defecto: true
Si tr_bound_function_applyp vale true, Maxima enva un aviso si encuentra una
variable con valor asignado que esta siendo utilizada como una funcion. tr_bound_
function_applyp no influye en el codigo generado bajo estas circunstancias.
Por ejemplo, una expresi
on como g (f, x) := f (x+1) provocara un mensaje de esta
naturaleza.

tr_bound_function_applyp

tr_file_tty_messagesp

[Variable opcional]

Valor por defecto: false


Si tr_file_tty_messagesp vale true, los mensajes generados por translate_file
durante la traducci
on de un fichero se muestran en la consola y se insertan en el
fichero UNLISP. Si vale false, los mensajes sobre la traduccion del fichero solo se
incorporan al fichero UNLISP.
[Variable opcional]
Valor por defecto: true
Le dice al traductor de Maxima a Lisp que las funciones acos, asin, asec y acsc
pueden devolver valores complejos.

tr_float_can_branch_complex

[Variable opcional]
Valor por defecto: general
El valor false significa llama a meval, expr significa que Lisp asigno los argumentos
de la funci
on, general, el valor por defecto, devuelve codigo apropiado para mexprs y
mlexprs pero no para macros. La opcion general asegura que las asignaciones de las
variables son correctas en el codigo compilado. En modo general, cuando se traduce
F(X), si F es una variable con valor, entonces se entiende que se quiere calcular apply
(f, [x]), y como tal se traduce, con el apropiado aviso. No es necesario desactivar
esto. Con los valores por defecto la falta de mensajes de aviso implica compatibilidad
completa entre el c
odigo traducido y compilado con el interpretado por Maxima.

tr_function_call_default

tr_numer

[Variable opcional]

Valor por defecto: false


Si tr_numer vale true se utilizan las propiedades numericas en aquellos atomos que
las posean, como en %pi.

tr_optimize_max_loop

[Variable opcional]

Valor por defecto: 100


El valor de tr_optimize_max_loop es el n
umero maximo de veces que el traductor
repetir
a la macro-expansi
on y la optimizacion en el tratamiento de una expresion.
[Variable opcional]
Valor por defecto: false
Si tr_semicompile vale true, las salidas de translate_file y compfile seran
macro-expandidas pero no compiladas a codigo maquina por el compilador de Lisp.

tr_semicompile

Captulo 36: Definici


on de Funciones

tr_state_vars

585

[Variable del sistema]

Valor por defecto:


[transcompile, tr_semicompile, tr_warn_undeclared, tr_warn_meval,
tr_warn_fexpr, tr_warn_mode, tr_warn_undefined_variable,
tr_function_call_default, tr_array_as_ref,tr_numer]
Es la lista de variables que afectan la forma en que se obtiene la salida del codigo traducido. Esta informaci
on es u
til para desarrolladores que pretendan corregir posibles
fallos del traductor. Comparando el codigo traducido con el que se debera obtener
bajo unas ciertas condiciones, es posible hacer el seguimiento de los fallos.

tr_warnings_get ()

[Funcion]

Devuelve una lista con los avisos dados por el traductor.

tr_warn_bad_function_calls

[Variable opcional]

Valor por defecto: true


Devuelve un aviso cuando se hacen llamadas a funciones que quizas no sean correctas
debido a declaraciones inapropiadas realizadas durante la traduccion.

tr_warn_fexpr

[Variable opcional]

Valor por defecto: compfile


Devuelve un aviso si se encuentra con alguna FEXPR. Las FEXPR no deberan
aparecer en el c
odigo traducido.

tr_warn_meval

[Variable opcional]

Valor por defecto: compfile


Devuelve un aviso si la funcion meval es llamada. Si meval es invocada, es se~
nal de
la presencia de problemas en la traduccion.

tr_warn_mode

[Variable opcional]

Valor por defecto: all


Devuelve un aviso cuando a las variables se les asignan valores incompatibles con su
modo.

tr_warn_undeclared

[Variable opcional]

Valor por defecto: compile


Determina cuando enviar mensajes sobre variables no declaradas.

tr_warn_undefined_variable

[Variable opcional]

Valor por defecto: all


Devuelve un aviso cuando se detectan variables globales no definidas.

compile_file (nombre_fich )
compile_file (nombre_fich, nombre_fich_compilado )
compile_file (nombre_fich, nombre_fich_compilado,
nombre_fich_lisp )

[Funcion]
[Funcion]
[Funcion]

Traduce el fichero Maxima nombre fich a Lisp, ejecuta el compilador de Lisp y, en


caso de ser exitosa la compilacion, carga el codigo compilado en Maxima.

586

Manual de Maxima

La funci
on compile_file devuelve una lista con los nombres de tres ficheros: el
fichero original en Maxima, la traduccion Lisp, notas sobre la traduccion y el codigo
compilado. Si la compilaci
on falla, el cuarto elemento es false.
Algunas declaraciones y definiciones entran en efecto tan pronto como el codigo Lisp

es compilado (sin cargar el codigo compilado). Estas


incluyen funciones definidas
con el operador :=, macros definidas con el operador ::=, alias, declare, define_
variable, mode_declare y infix, matchfix, nofix, postfix, prefix y compfile.
Asignaciones y llamadas a funciones no se eval
uan hasta que el codigo compilado
es cargado. En particular, dentro del fichero Maxima, asignaciones a los controles
("flags") de traducci
on (tr_numer, etc.) no tienen efecto durante la traduccion.
El nombre fich no puede contener sentencias del tipo :lisp.
La funci
on compile_file eval
ua sus argumentos.

declare_translated (f_1, f_2, ...)

[Funcion]
Cuando se traduce un fichero de codigo Maxima a Lisp, es importante para el traductor saber que funciones de las que estan en el fichero van a ser llamadas como
traducidas o compiladas, y cuales son simplemente funciones Maxima o que no estan
definidas. Se genera el c
odigo (MFUNCTION-CALL fn arg1 arg2 ...) cuando el traductor no sabe si fn va a ser una funcion lisp.

Captulo 37: Programaci


on

587

37 Programaci
on
37.1 Lisp y Maxima
Maxima fue escrito en Lisp, y es muy facil tener acceso a funciones y variables Lisp desde
Maxima y viceversa. Los smbolos Lisp y los smblos Maxima estan claramente diferenciados
por medio de una convenci
on de nombres. Un smblo Lisp el cual comienza con un signo
pesos $ corresponde a un smbolo Maxima sin el signo pesos. Un smbolo Maxima el cual
comienza con un signo de cierre de interrogacion ? corresponde a un smbolo Lisp sin dicho
signo. Por ejemplo, el smbolo Maxima foo corresponde a el smbolo Lisp $FOO, mientras
que el smbolo Maxima ?foo corresponde a el smbolo Lisp FOO, tenga en cuenta que ?foo
esta escrito sin espacio entre ? y foo; de otra manera se estara invocando a describe
("foo").
El gui
on -, asterisco *, u otros caracteres especiales en simbolos Lisp deben ser escritos
mediante un backslash \ si aparecen en codigo Maxima. Por ejemplo, el identificador Lisp
*foo-bar* se debe escribir ?\*foo\-bar\* en Maxima.
Se puede ejecutar c
odigo Lisp desde una sesion de Maxima. Una lnea Lisp (que contenga
una o m
as formas) puede ser ejecutada por medio de un comando especial :lisp. Por
ejemplo,
(%i1) :lisp (foo $x $y)
se llama a la funci
on Lisp foo con variables Maxima x y y como argumentos. La instruccion
:lisp puede aparecer en el prompt interactivo o en un archivo que sea procesado por batch
o demo, pero no en un archivo que sea procesado por load, batchload, translate_file o
compile_file.
La funci
on to_lisp() abre una sesion interactiva con el interprete Lisp. Escribiendo
(to-maxima) se cierra la sesi
on con Lisp y se retorna a Maxima.
Las funciones y variables Lisp las cuales esten para ser visibles en Maxima como funciones
y variables con nombres oridinarios (sin una puntuacion especial), deben tener nombres tipo
Lisp que comiencen con el signo pesos $.
Maxima distingue entre letras min
usculas y may
usculas en identificadores. Existen algunas reglas que gobiernan la traduccion de nombres entre Lisp y Maxima.
1. Un identificador Lisp que no se encuentra encerrado en barras verticales corresponde
a un identificador Maxima en min
uscula. Que el idenficador Lisp este en may
uscula,
min
uscula o una combinaci
on de ambas, no afecta en nada. Por ejemplo, los identificadores Lisp $foo, $FOO, y $Foo, todos corresponden al identificador Maxima foo.
Esto es as porque $foo, $FOO y $Foo se convierten por defecto al smbolo $FOO de
Lisp.
2. Un identificador Lisp el cual se encuentre todo en may
uscula o todo en min
uscula y
encerrado entre barras verticales corresponde a un identicador Maxima con el caso
contrario. Esto es, de may
usculas cambia a min
usculas y de min
usculas cambia a
may
usculas. E.g., el identificador Lisp |$FOO| y |$foo| corresponden los identificadores Maxima foo y FOO, respectivamente.
3. Un identificador Lisp el cual esta escrito mezclando letras may
usculas y min
usculas y se
encuentra entre barras verticales corresponde a un identificador Maxima con la misma
escritura. E.g., el identificador Lisp |$Foo| corresponde a el identificador Maxima Foo.

588

Manual de Maxima

La macro Lisp #$ permite el uso de expresiones Maxima dentro de codigo Lisp. #$expr $
extiende a una expresi
on Lisp equivalente a la expresion Maxima expr.
(msetq $foo #$[x, y]$)
Esto tiene el mismo efecto que:
(%i1) foo: [x, y];
La funci
on Lisp displa imprime una expresion en formato Maxima.
(%i1) :lisp #$[x, y, z]$
((MLIST SIMP) $X $Y $Z)
(%i1) :lisp (displa ((MLIST SIMP) $X $Y $Z))
[x, y, z]
NIL
Las funciones definidas en Maxima no son funciones Lisp ordinarias. La funcion Lisp
mfuncall llama a una funci
on Maxima. Por ejemplo:
(%i1) foo(x,y) := x*y$
(%i2) :lisp (mfuncall $foo a b)
((MTIMES SIMP) A B)
Algunas funciones Lisp son compartidas en el paquete Maxima, las cuales se listan a
continuaci
on:
complement, continue, //, float, functionp, array, exp, listen, signum, atan, asin,
acos, asinh, acosh, atanh, tanh, cosh, sinh, tan, break, y gcd.

37.2 Recolector de basura


La computaci
on simb
olica tiende a crear una buena cantidad de basura (resultados temporales que ya no ser
an utilizados), y un manejo efectivo de esto puede ser crucial para el
termino exitoso de algunos programas.
Bajo GCL (GNU Common Lisp), en aquellos sistemas UNIX donde la llamada al sistema
mprotect est
a disponible (incluyendo SUN OS 4.0 y algunas variantes de BSD) se dispone de
un recolector de basura estratificado. Vease la documentacion de GCL para ALLOCATE
y GBC. A nivel Lisp, ejecutando (setq si::*notify-gbc* t) pemitira determinar que areas
necesitan m
as espacio.
En cuanto al resto de Lisps bajo los que funciona Maxima, se remite al lector a la
documentaci
on correspondiente para controlar la recoleccion de basura.

37.3 Introducci
on a la programaci
on
Maxima dispone de los bucles do para hacer iteraciones, as como estructuras mas primitivas
del estilo de go.

37.4 Funciones y variables para la programaci


on
backtrace ()
backtrace (n )

[Funcion]
[Funcion]
Devuelve la pila de llamadas, esto es, la lista de funciones que han llamado a la funcion
actualmente activa.

Captulo 37: Programaci


on

589

La llamada a backtrace() devuelve la pila completa de llamadas.


Ejemplos:
(%i1) h(x) := g(x/7)$
(%i2) g(x) := f(x-11)$
(%i3) f(x) := e(x^2)$
(%i4) e(x) := (backtrace(), 2*x + 13)$
(%i5) h(10);
#0: e(x=4489/49)
#1: f(x=-67/7)
#2: g(x=10/7)
#3: h(x=10)
9615
(%o5)
---49
La llamada backtrace (n ) devuelve las n funciones mas recientes, incluyendo a la
funci
on actualmente activa.
Ejemplos:
(%i1) h(x) := (backtrace(1), g(x/7))$
(%i2) g(x) := (backtrace(1), f(x-11))$
(%i3) f(x) := (backtrace(1), e(x^2))$
(%i4) e(x) := (backtrace(1), 2*x + 13)$
(%i5) h(10);
#0: h(x=10)
#0: g(x=10/7)
#0: f(x=-67/7)
#0: e(x=4489/49)
9615
(%o5)
---49

do

[Operador especial]
La sentencia do se utiliza para realizar iteraciones. Debido a su generalidad la sentencia do se describir
a en dos partes. En primer lugar se mostrara su forma mas usual,
an
aloga a la de otros lenguajes de programacion (Fortran, Algol, PL/I, etc.); despues
se mencionar
an otras formas de uso.
Hay tres variantes de esta sentencia que se diferencian entre s u
nicamente por las
condiciones de fin de bucle. Son las siguientes:
for variable : valor_inicial step incremento thru l
mite do cuerpo
for variable : valor_inicial step incremento while condici
on do
cuerpo
for variable : valor_inicial step incremento unless condici
on do
cuerpo
El valor inicial, el incremento, el lmite y el cuerpo pueden ser cualquier tipo de
expresi
on v
alida de Maxima. Si el incremento es igual a la unidad (1) entonces "step
1" puede omitirse.

590

Manual de Maxima

La ejecuci
on de la sentencia do se realiza asignando el valor inicial a la variable
(llamada de aqu en adelante variable-control). A continuacion: (1) si la variablecontrol ha excedido el lmite de la especificacion dada por un thru, o si la condicion
impuesta por unless es verdadera (true), o si la condicion dada por while es falsa
(false) entonces la iteraci
on do termina. (2) El cuerpo se eval
ua. (3) El incremento
es sumado a la variable-control. El proceso de (1) a (3) se repite hasta que la condicion
de fin de iteraci
on se satisfaga. Tambien es posible especificar varias condiciones de
terminaci
on del bucle, en cuyo caso do terminara cuando se satisfaga alguna de ellas.
En general la condici
on thru se satisfara cuando la variable-control sea mayor que
el lmite si el incremento es no negativo, o cuando la variable-control sea menor que
el lmite cuando el incremento es negativo. El incremento y el lmite pueden ser expresiones no numericas, tanto en cuanto esta desigualdad pueda quedar determinada.
Sin embargo, a menos que el incremento sea un n
umero negativo en el momento de
comenzar el c
omputo de do, Maxima supondra que se evaluara a una cantidad positiva. En caso de no ser efectivamente positivo, la sentencia do puede dar un resultado
inesperado.
Notese que el lmite, el incremento y la condicion de terminacion se eval
uan en cada
iteraci
on del bucle. As, si alguna de expresiones necesitan de muchos calculos y
devuelven un resultado que no va a cambiar durante toda la ejecucion del cuerpo,
ser
a m
as eficiente dar este valor a una variable antes de comenzar la sentencia do y
utilizarla luego durante su ejecucion.
El valor que habitualmente devuelva la sentencia do sera el atomo done. Sin embargo,
la funci
on return puede usarse dentro del cuerpo para salir de do de forma prematura
retornando un valor determinado. Notese no obstante que un return dentro de un do
que est
a dentro de un bloque (block) provocara una salida de do pero no de block.
Rep
arese tambien en que la funcion go no puede usarse para salir de do e ir a alg
un
lugar de block.
La variable-control es siempre local respecto de do, por lo que se puede utilizar
cualquier nombre de variable sin afectar el valor de cualquier otra variable externa
a do y que tenga el mismo nombre. La variable-control no tendra asignado ning
un
valor una vez se haya concluido el do.
(%i1) for a:-3 thru 26 step 7 do display(a)$
a = - 3
a = 4
a = 11
a = 18
a = 25
(%i1) s: 0$
(%i2) for i: 1 while i <= 10 do s: s+i;
(%o2)
done
(%i3) s;

Captulo 37: Programaci


on

591

(%o3)
55
Notese que la condici
on while i <= 10 es equivalente a unless i > 10 y a thru 10.
(%i1) series: 1$
(%i2) term: exp (sin (x))$
(%i3) for p: 1 unless p > 7 do
(term: diff (term, x)/p,
series: series + subst (x=0, term)*x^p)$
(%i4) series;
7
6
5
4
2
x
x
x
x
x
(%o4)
-- - --- - -- - -- + -- + x + 1
90
240
15
8
2
lo que da ocho terminos del desarrollo de Taylor de la funcion e^sin(x).
(%i1) poly: 0$
(%i2) for i: 1 thru 5 do
for j: i step -1 thru 1 do
poly: poly + i*x^j$
(%i3) poly;
5
4
3
2
(%o3)
5 x + 9 x + 12 x + 14 x + 15 x
(%i4) guess: -3.0$
(%i5) for i: 1 thru 10 do
(guess: subst (guess, x, 0.5*(x + 10/x)),
if abs (guess^2 - 10) < 0.00005 then return (guess));
(%o5)
- 3.162280701754386
Este ejemplo calcula la raz cuadrada negativa de 10 haciendo 10 iteraciones del
metodo de Newton-Raphson. De no haberse alcanzado el criterio de convergencia el
valor devuelto hubiese sido done.
En lugar de a~
nadir siempre una cantidad a la variable-control a veces se puede querer
que cambie en cada iteraci
on siguiendo alg
un otro criterio. En tal caso se puede
hacer uso de next expresi
on en lugar de step incremento . Esto hara que a la
variable-control se le asigne el resultado de evaluar la expresion en cada iteracion del
bucle.
(%i6) for count: 2 next 3*count thru 20 do display (count)$
count = 2
count = 6
count = 18
En ocasiones puede interesar realizar una iteracion en la que la variable-control no
se utilice nunca. Se podr
a entonces dar u
nicamente las condiciones de terminacion
del bucle omitiendo la inicializacion y actualizando la informacion, tal como se hace
en el siguiente ejemplo para calcular la raz cuadrada de 5 utilizando un valor inicial
alejado de la soluci
on.
(%i1) x: 1000$

592

Manual de Maxima

(%i2) thru 20 do x: 0.5*(x + 5.0/x)$


(%i3) x;
(%o3)
2.23606797749979
(%i4) sqrt(5), numer;
(%o4)
2.23606797749979
Si as se quiere, incluso es posible omitir las condiciones de terminacion completamente
y escribir u
nicamente do body , lo que provocara entrar en un bucle infinito. En tal
caso, debera usarse la funci
on return a fin de terminar con la ejecucion de do.
(%i1) newton (f, x):= ([y, df, dfx], df: diff (f (x), x),
do (y: ev(df), x: x - f(x)/y,
if abs (f (x)) < 5e-6 then return (x)))$
(%i2) sqr (x) := x^2 - 5.0$
(%i3) newton (sqr, 1000);
(%o3)
2.236068027062195
(En este ejemplo, cuando se ejecuta return obliga a que sea x el valor devuelto por
do. Al salirse del bloque, x es tambien el valor que devuelve block por ser do la
u
ltima sentencia del bloque.)
Hay todava otra forma de do en Maxima. Su sintaxis es:
for variable in lista test_de_parada do cuerpo
Los elementos de list son cualesquiera expresiones que se iran asignando sucesivamente
a la variable en cada repeticion del cuerpo. El test de parada end tests (que es
opcional) puede usarse para terminar la ejecucion de do; de otro modo las iteraciones
se parar
an cuando la lista se haya agotado o cuando se ejecute un return dentro del
cuerpo. (De hecho, la lista puede ser cualquier expresion no atomica, de la cual se
iran extrayendo de forma sucesiva sus diferentes partes.)
(%i1)
(%t1)
(%t2)

for f in [log, rho, atan] do ldisp(f(1))$


0
rho(1)
%pi
(%t3)
--4
(%i4) ev(%t3,numer);
(%o4)
0.78539816

errcatch (expr_1, ..., expr_n )

[Funcion]
Eval
ua las expresiones expr 1, ..., expr n una a una y devuelve [expr_n ] (una lista)
en caso de que no ocurra ning
un error. En caso de aparecer alg
un error durante
el c
alculo de alguno de los argumentos, errcatch evita que el error se propague y
devuelve la lista vaca [] sin evaluar mas argumentos.

La funci
on errcatch es u
til en ficheros batch donde se sospeche que pueda aparecer
alg
un error, el cual provocara la terminacion de la ejecucion del batch de no ser
previamente detectado.

Captulo 37: Programaci


on

593

error (expr_1, ..., expr_n )


error

[Funcion]
[Variable del sistema]
Calcula y devuelve expr 1, ..., expr n, enviando posteriormente una se~al de error a
Maxima o al errcatch m
as cercano.

A la variable error se le asigna una lista con la descripcion del error. El primer
elemento de error es una cadena de formato, la cual une todas las cadenas de los
argumentos expr 1, ..., expr n, siendo los demas elementos de la lista los valores de
los argumentos que no son cadenas.
La llamada a errormsg() formatea e imprime error. Se reimprime as el mensaje
de error m
as reciente.

error_size

[Variable opcional]

Valor por defecto: 10


La variable error_size modifica los mensajes de error de acuerdo con el tama~
no
de las expresiones que aparecen en el. Si el tama~
no de una expresion (tal como
lo determina la funci
on Lisp ERROR-SIZE) es mayor que error_size, la expresion
se reemplaza en el mensaje por un smbolo, asignandole a este una expresion. Los
smbolos se toman de la lista error_syms.
En caso contrario, si la expresion es menor que error_size, la expresion se muestra
en el propio mensaje.
Veanse tambien error y error_syms.
Ejemplo:
El tama~
no de U, tal como lo determina ERROR-SIZE, es 24.
(%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$
(%i2) error_size: 20$
(%i3) error ("Example expression is", U);
Example expression is errexp1
-- an error. Quitting. To debug this try debugmode(true);
(%i4) errexp1;
E
D
C
+ B + A
(%o4)
-------------cos(X - 1) + 1
(%i5) error_size: 30$
(%i6) error ("Example expression is", U);
E
D
C
+ B + A
Example expression is --------------

594

Manual de Maxima

-- an error.

cos(X - 1) + 1
Quitting. To debug this try debugmode(true);

[Variable opcional]
Valor por defecto: [errexp1, errexp2, errexp3]
En los mensajes de error, las expresiones mayores que error_size son reemplazadas
por smbolos a los cuales se les asignas estas expresiones. Los smbolos se toman de la
lista error_syms. La primera expresion que resulte ser demasiado larga se reemplaza
por error_syms[1], la segunda por error_syms[2] y as sucesivamente.
Si hay m
as expresiones largas que elementos en error_syms, los smbolos se construyen autom
aticamente, siendo el n-esimo smbolo equivalente a concat (errexp,
n ).
Veanse tambien error y error_size.

error_syms

errormsg ()

[Funcion]
Reimprime el mensaje de error mas reciente. La variable error guarda el mensaje y
errormsg lo formatea e imprime.

errormsg

[Variable opcional]

Valor por defecto: true


Cuando errormsg vale false se suprimen los contenidos de los mensajes de error.
La variable errormsg no se puede asignar a un valor local dentro de un bloque. El
valor global de errormsg est
a siempre presente.
Ejemplos:
(%i1) errormsg;
(%o1)
true
(%i2) sin(a,b);
Wrong number of arguments to sin
-- an error. To debug this try: debugmode(true);
(%i3) errormsg:false;
(%o3)
false
(%i4) sin(a,b);
-- an error. To debug this try: debugmode(true);
La variable errormsg no se puede asignar a un valor local dentro de un bloque.
(%i1) f(bool):=block([errormsg:bool],
print ("value of errormsg is",errormsg))$
(%i2) errormsg:true;
(%o2)
true
(%i3) f(false);
value of errormsg is true
(%o3)
true
(%i4) errormsg:false;
(%o4)
false
(%i5) f(true);
value of errormsg is false
(%o5)
false

Captulo 37: Programaci


on

for

595

[Operador especial]
Utilizado en las iteraciones. Vease do para una descripcion de las tecnicas de iteracion
en Maxima.

go (etiqueta )

[Funcion]
Se utiliza dentro de un bloque (block) para transferir el control a la sentencia del
bloque que este etiquetada con el argumento de go. Una sentencia queda etiquetada
cuando est
a precedida por un argumento de tipo atomo como cualquier otra sentencia
de block. Por ejemplo:
block ([x], x:1, tururu, x+1, ..., go(tururu), ...)

El argumento de go debe ser el nombre de una etiqueta que aparezca en el mismo


bloque (block). No se puede utilizar go para transferir el control a un bloque que no
sea aquel que contenga la sentencia go.

if

[Operador especial]
Evaluaci
on condicionada. Se reconocen varias formas de expresiones if.
La expresi
on if cond_1 then expr_1 else expr_0 devuelve expr 1 si cond 1 vale
true, en caso contrario la respuesta es expr_0.
La expresi
on if cond_1 then expr_1 elseif cond_2 then expr_2 elseif ...
else expr_0 devuelve expr k si cond k vale true y todas las condiciones anteriores
toman el valor false. Si ninguna de las condiciones vale true, la respuesta es
expr_0.
La falta de un else final se interpreta como un else false; esto es, la expresion if
cond_1 then expr_1 equivale a if cond_1 then expr_1 else false, y if cond_1
then expr_1 elseif ... elseif cond_n then expr_n equivale a su vez a if cond_
1 then expr_1 elseif ... elseif cond_n then expr_n else false.
Las alternativas expr 0, ..., expr n pueden ser expresiones validas de Maxima, incluidas expresiones if anidadas. Las alternativas ni se simplifican ni se eval
uan, a menos
que su condici
on asociada valga true.
Las condiciones cond 1, ..., cond n deben ser expresiones capaces de dar como resultado true o false al ser evaluadas. Si en un momento dado una condicion no
da como resultado un valor de verdad (true o false), el comportamiento de if se
controla con la variable global prederror. Si prederror vale true, se considera un
error que la condici
on evaluada no de como resultado un valor de verdad; en caso
contrario, las condiciones que no den como resultado un valor de verdad se aceptan,
dandose el resultado como una expresion condicional.
Las condiciones pueden contener operadores logicos y relacionales, as como otros
elementos, tal como se indica a continuacion:
Operaci
on

S
mbolo

Tipo

menor que
menor o igual que
igualdad (sint
actica)
negaci
on de =
igualdad (por valor)

<
<=
=
#
equal

operador
operador
operador
operador
operador

relacional
relacional
relacional
relacional
relacional

infijo
infijo
infijo
infijo
infijo

596

Manual de Maxima

negaci
on de equal
mayor o igual que
mayor que
y
o
no

notequal
>=
>
and
or
not

operador
operador
operador
operador
operador
operador

relacional infijo
relacional infijo
relacional infijo
l
ogico infijo
l
ogico infijo
l
ogico prefijo

map (f, expr_1, ..., expr_n )

[Funcion]
Devuelve una expresi
on cuyo operador principal es el mismo que aparece en las expresiones expr 1, ..., expr n pero cuyas subpartes son los resultados de aplicar f a cada
una de las subpartes de las expresiones; f puede ser tanto el nombre de una funcion
de n argumentos como una expresion lambda de n argumentos.
Uno de los usos que tiene map es la de aplicar (o mapear) una funcion (por ejemplo,
partfrac) sobre cada termino de una expresion extensa en la que normalmente no
se podra utilizar la funci
on debido a insuficiencias en el espacio de almacenamiento
durante el curso de un c
alculo.
(%i1) map(f,x+a*y+b*z);
(%o1)
f(b z) + f(a y) + f(x)
(%i2) map(lambda([u],partfrac(u,x)),x+1/(x^3+4*x^2+5*x+2));
1
1
1
(%o2)
----- - ----- + -------- + x
x + 2
x + 1
2
(x + 1)
(%i3) map(ratsimp, x/(x^2+x)+(y^2+y)/y);
1
(%o3)
y + ----- + 1
x + 1
(%i4) map("=",[a,b],[-0.5,3]);
(%o4)
[a = - 0.5, b = 3]
Vease tambien maperror .

mapatom (expr )

[Funcion]
Devuelve true si y s
olo expr es tratado por las rutinas de mapeo como un atomo.

[Variable opcional]
Valor por defecto: true
Cuando maperror toma el valor false, hace que todas las funciones de mapeo, como
por ejemplo
map (f, expr_1, expr_2, ...)
(1) paren cuando hayan terminado de procesar la expr i mas corta, a menos que todas
ellas sean del mismo tama~
no y (2) apliquen f a [expr_1, expr_2, ...] si es el caso
que las expr_i no son todas del mismo tipo de objeto.
Cuando maperror toma el valor true entonces se emite un mensaje de error cuando
se presenta cualquiera de los dos casos anteriores.

maperror

mapprint
Valor por defecto: true

[Variable opcional]

Captulo 37: Programaci


on

597

Si mapprint vale true, se produciran ciertos mensajes por parte de las funciones map,
mapl y fullmap en determinadas situaciones, como cuando map hace uso de apply.
Si mapprint vale false, no se emitiran tales mensajes.

maplist (f, expr_1, ..., expr_n )

[Funcion]
Devuelve una lista con las aplicaciones de f a las partes de las expresiones expr 1, ...,
expr n; f es el nombre de una funcion ou una expresion lambda.
La funci
on maplist difiere de map (f, expr_1, ..., expr_n ), la cual devuelve una
expresi
on con el mismo operador principal que tenga expr i, excepto en simplificaciones y en el caso en el que map hace un apply.
[Variable opcional]
Valor por defecto: false
Cuando prederror toma el valor true, se emite un mensaje de error siempre que el
predicado de una sentencia if o de una funcion is no se pueda evaluar ni a verdadero
(true) ni a falso (false).
Si toma el valor false, se devuelve bajo las mismas circunstancias anteriores el valor
unknown. El modo prederror: false no esta soportado en el codigo traducido; sin
embargo, maybe est
a soportado en codigo traducido.
Veanse tambien is y maybe.

prederror

return (valor)

[Funcion]
Puede utilizarse para salir de un bloque, devolviendo su argumento. Vease block
para m
as informaci
on.

scanmap (f, expr )


scanmap (f, expr, bottomup)

[Funcion]
[Funcion]
Aplica recursivamente f sobre expr, de arriba hacia abajo. Esto es mas u
til cuando
se busca una factorizaci
on completa, por ejemplo:
(%i1) exp:(a^2+2*a+1)*y + x^2$
(%i2) scanmap(factor,exp);
2
2
(%o2)
(a + 1) y + x
Notese que c
omo scanmap aplica la funcion dada factor a las subexpresiones que
forman a expr; si se presenta otra forma de expr a scanmap entonces el resultado
puede ser diferente. As, %o2 no se restaura cuando scanmap se aplica a la forma
expandida de exp:
(%i3) scanmap(factor,expand(exp));
2
2
(%o3)
a y + 2 a y + y + x
Aqu hay otro ejemplo de la forma en que scanmap aplica recursivamente una funcion
dada a todas las subexpresiones, incluyendo exponentes:
(%i4) expr : u*v^(a*x+b) + c$
(%i5) scanmap(f, expr);
f(f(f(a) f(x)) + f(b))
(%o5) f(f(f(u) f(f(v)
)) + f(c))

598

Manual de Maxima

scanmap (f, expr, bottomup) aplica f a expr de abajo hacia arriba. Por ejemplo,
para f no definida,
scanmap(f,a*x+b) ->
f(a*x+b) -> f(f(a*x)+f(b)) -> f(f(f(a)*f(x))+f(b))
scanmap(f,a*x+b,bottomup) -> f(a)*f(x)+f(b)
-> f(f(a)*f(x))+f(b) ->
f(f(f(a)*f(x))+f(b))
En este caso se obtiene la misma respuesta por cualquiera de los dos metodos.

throw (expr )

[Funcion]
Eval
ua expr y devuelve el valor del catch mas reciente. La funcion throw se utiliza
junto con catch como un mecanismo de retorno no local.

while
unless

[Operador especial]
[Operador especial]

Vease do.

outermap (f, a_1, ..., a_n )

[Funcion]
Aplica la funci
on f a cada uno de los elementos del producto vectorial a 1 por a 2 ...
por a n.
El argumento f debe ser el nombre de una funcion de n argumentos, o una expresion
lambda de n argumentos. Cada uno de los argumentos a k puede ser una lista, una
lista anidada, una matriz o cualquier otro tipo de expresion.
El valor devuelto por outermap es una estructura anidada. Si x es la respuesta dada
por outermap, entonces tiene la misma estructura que la primera lista, lista anidada o
matriz, x [i_1]...[i_m] tiene la misma estructura que la segunda lista, lista anidada
o matriz, x [i_1]...[i_m][j_1]...[j_n] tiene la misma estructura que la tercera
lista, lista anidada o matriz, y as sucesivamente, siendo m, n, ... los n
umeros ndice
necesarios para acceder a los elementos de cada argumento: uno para las listas, dos
para las matrices y uno o m
as para las listas anidadas. Aquellos argumentos que no
sean listas ni matrices no tienen efecto alguno sobre la estructura del valor retornado.
Notese que el efecto producido por outermap es diferente del que se obtiene al aplicar
f a cada uno de los elementos del producto devuelto por cartesian_product. La
funci
on outermap mantiene la estructura de los argumentos en la respuesta, miemtras
que cartesian_product no lo hace.
La funci
on outermap eval
ua sus argumentos.
Veanse tambien map, maplist y apply.
Ejemplos:
Ejemplos elementales de uso de outermap. Con el fin de mostrar con mayor claridad
las combinaciones del argumento, se mantiene sin definir F.
(%i1) outermap (F, [a, b, c], [1, 2, 3]);
(%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)],
[F(c, 1), F(c, 2), F(c, 3)]]
(%i2) outermap (F, matrix ([a, b], [c, d]), matrix ([1, 2], [3, 4]));
[ [ F(a, 1) F(a, 2) ] [ F(b, 1) F(b, 2) ] ]
[ [
] [
] ]

Captulo 37: Programaci


on

(%o2)

(%i3)
(%o3)
(%i4)
(%o4)

(%i5)
(%o5)

599

[ [ F(a, 3) F(a, 4) ] [ F(b, 3) F(b, 4) ] ]


[
]
[ [ F(c, 1) F(c, 2) ] [ F(d, 1) F(d, 2) ] ]
[ [
] [
] ]
[ [ F(c, 3) F(c, 4) ] [ F(d, 3) F(d, 4) ] ]
outermap (F, [a, b], x, matrix ([1, 2], [3, 4]));
[ F(a, x, 1) F(a, x, 2) ] [ F(b, x, 1) F(b, x, 2) ]
[[
], [
]]
[ F(a, x, 3) F(a, x, 4) ] [ F(b, x, 3) F(b, x, 4) ]
outermap (F, [a, b], matrix ([1, 2]), matrix ([x], [y]));
[ [ F(a, 1, x) ] [ F(a, 2, x) ] ]
[[ [
] [
] ],
[ [ F(a, 1, y) ] [ F(a, 2, y) ] ]
[ [ F(b, 1, x) ] [ F(b, 2, x) ] ]
[ [
] [
] ]]
[ [ F(b, 1, y) ] [ F(b, 2, y) ] ]
outermap ("+", [a, b, c], [1, 2, 3]);
[[a + 1, a + 2, a + 3], [b + 1, b + 2, b + 3],
[c + 1, c + 2, c + 3]]

El siguiente ejemplo permite hacer un analisis mas profundo del valor retornado por
outermap. Los tres primeros argumentos son una matriz, una lista y otra matriz,
en este orden. El valor devuelto es una matriz, cuyos elementos son listas y cada
elemento de cada una de estas listas es a su vez una matriz.
(%i1) arg_1 :
(%o1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

(%o4)

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


[ a b ]
[
]
[ c d ]
arg_2 : [11, 22];
[11, 22]
arg_3 : matrix ([xx, yy]);
[ xx yy ]
xx_0 : outermap(lambda([x, y, z], x / y + z), arg_1,
arg_2, arg_3);
[ [
a
a ] [
a
a ] ]
[ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ]
[ [
11
11 ] [
22
22 ] ]
Col 1 = [
]
[ [
c
c ] [
c
c ] ]
[ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ]
[ [
11
11 ] [
22
22 ] ]
[ [
b
b ] [
b
b ] ]
[ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ]
[ [
11
11 ] [
22
22 ] ]
Col 2 = [
]
[ [
d
d ] [
d
d ] ]
[ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ]

600

Manual de Maxima

[ [
11
11 ] [
22
22 ] ]
(%i5) xx_1 : xx_0 [1][1];
[
a
a ] [
a
a ]
(%o5)
[[ xx + -- yy + -- ], [ xx + -- yy + -- ]]
[
11
11 ] [
22
22 ]
(%i6) xx_2 : xx_0 [1][1] [1];
[
a
a ]
(%o6)
[ xx + -- yy + -- ]
[
11
11 ]
(%i7) xx_3 : xx_0 [1][1] [1] [1][1];
a
(%o7)
xx + -11
(%i8) [op (arg_1), op (arg_2), op (arg_3)];
(%o8)
[matrix, [, matrix]
(%i9) [op (xx_0), op (xx_1), op (xx_2)];
(%o9)
[matrix, [, matrix]
La funci
on outermap mantiene la estructura de los argumentos en su respuesta, mientras que cartesian_product no lo hace.
(%i1) outermap (F, [a, b, c], [1, 2, 3]);
(%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)],
[F(c, 1), F(c, 2), F(c, 3)]]
(%i2) setify (flatten (%));
(%o2) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3),
F(c, 1), F(c, 2), F(c, 3)}
(%i3) map (lambda ([L], apply (F, L)), cartesian_product ({a, b, c}, {1, 2, 3}));
(%o3) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3),
F(c, 1), F(c, 2), F(c, 3)}
(%i4) is (equal (%, %th (2)));
(%o4)
true

Captulo 38: Depurado

601

38 Depurado
38.1 Depuraci
on del c
odigo fuente
Maxima es capaz de dar asistencia en la depuracion del codigo fuente. Un usuario puede
establecer un punto de referencia dentro del codigo de una funcion a partir del cual se siga la
ejecucion lnea a lnea. La compliacion puede ser posteriormente examinada, conjuntamente
con los valores que se han ido asignando a las variables.
La instrucci
on :help, o :h, muestra la lista de comandos para la depuracion. (En
general, los comandos pueden abreviarse; en algunos casos la lista de alternativas podr
a
ser listada.) Dentro del depurador, el usuario podra examinar tambien cualquier funcion
propia de Maxima, definirla y manipular variables y expresiones.
El punto de referencia se establecera con la instruccion :br. Ya dentro del depurador,
el usuario podr
a avanzar una lnea de cada vez utilizando la instruccion :n (de next,
en ingles). La orden :bt (de backtrace) muestra la lista de la pila. Finalmente, con el
comando :r (resume) se abandona el depurador continuando con la ejecucion. El uso de
estas instrucciones se muestra en el siguiente ejemplo.
(%i1) load ("/tmp/foobar.mac");
(%o1)

/tmp/foobar.mac

(%i2) :br foo


Turning on debugging debugmode(true)
Bkpt 0 for foo (in /tmp/foobar.mac line 1)
(%i2) bar (2,3);
Bkpt 0:(foobar.mac 1)
/tmp/foobar.mac:1::
(dbm:1) :bt
<-- pulsando :bt se retrocede
#0: foo(y=5)(foobar.mac line 1)
#1: bar(x=2,y=3)(foobar.mac line 9)
(dbm:1) :n
(foobar.mac 2)
/tmp/foobar.mac:2::

<-- pulsando :n se avanza una l


nea

(dbm:1) :n
(foobar.mac 3)
/tmp/foobar.mac:3::

<-- pulsando :n se avanza otra l


nea

(dbm:1) u;
28

<-- se pide el valor de u

(dbm:1) u: 33;
33

<-- se cambia el valor de u a 33

602

Manual de Maxima

(dbm:1) :r

<-- pulsando :r se termina la depuraci


on

(%o2)

1094

El fichero /tmp/foobar.mac contiene lo siguiente:


foo(y) := block ([u:y^2],
u: u+3,
u: u^2,
u);
bar(x,y) := (
x: x+2,
y: y+2,
x: foo(y),
x+y);
USO DEL DEPURADOR EN EMACS
Si el usuario est
a corriendo el c
odigo bajo GNU emacs en un entorno de texto (dbl shell),
o esta ejecutando el entorno gr
afico xmaxima, entonces cuando una funcion pare en el punto
de referencia, podr
a observar su posicion actual en el archivo fuente, el cual sera mostrado
en la otra mitad de la ventana, bien resaltada en rojo, o con una peque~
na flecha apuntando
a la lnea correcta. El usuario puede avanzar lneas simples tecleando M-n (Alt-n).
Bajo Emacs se debe ejecutar el programa en una ventana de texto dbl, la cual requiere
el archivo dbl.el que est
a en el directorio elisp. El usuario debe instalar los archivos elisp
o agregar el directorio elisp de Maxima a la ruta de b
usqueda: por ejemplo, se puede a~
nadir
lo siguiente al archivo .emacs o al site-init.el
(setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
(autoload dbl "dbl")
entonces en emacs
M-x dbl
debera abrir una ventana del sistema en la cual se pueden ejecutar programas, por
ejemplo Maxima, gcl, gdb, etc. En esta ventana tambien se puede ejecutar el depurador,
mostrando el c
odigo fuente en la otra ventana.
El usuario puede colocar un punto de referencia en una lnea determinada sin mas que
teclear C-x space. Con esto se le hace saber al depurador en que funcion esta el cursor y
en que lnea del mismo. Si el cursor esta en la lnea 2 de foo, entonces insertara en la otra
ventana la instrucci
on :br foo 2, a fin de detener foo justo en la segunda lnea. Para
tener esto operativo, el usuario debe tener activo maxima-mode.el (modo-maxima.el) en la
ventana en la que est
a foobar.mac. Hay otros comandos disponibles en la ventana, como
evaluar la funci
on dentro de Maxima tecleando Alt-Control-x.

38.2 Claves de depuraci


on
Las claves de depuraci
on son palabras que no son interpretadas como expresiones de Maxima. Una clave de depuraci
on puede introducirse dentro de Maxima o del depurador. Las

Captulo 38: Depurado

603

claves de depuraci
on comienzan con dos puntos, :. Por ejemplo, para evaluar una expresion
Lisp, se puede teclear :lisp seguido de la expresion a ser evaluada.
(%i1) :lisp (+ 2 3)
5
El n
umero de argumentos depende del comando en particular. Ademas, tampoco es
necesario teclear el nombre completo de la instruccion, tan solo lo justo para diferenciarla
de las otras instrucciones. As, :br sera suficiente para :break.
Las claves de depuraci
on se listan a continuacion.
:break F n
Establece un punto de referencia en la funcion F en la lnea n contando a partir
del comienzo de la funcion. Si F es una cadena, entonces se entiende que se
trata de un fichero, siendo entonces n el n
umero de lnea a partir del comienzo
del fichero. El valor n es opcional; en caso de no ser suministrado, se entender
a
que vale cero (primera lnea de la funcion o fichero).
:bt

Retrocede en la pila.

:continue
Continua el c
omputo de la funcion.
:delete

Borra los punto de referencia especificados, o todos si no se especifica ninguno.

:disable

Deshabilita los puntos de referencia especificados, o todos si no se especifica


ninguno.

:enable

Habilita los puntos de referencia especificados, o todos si no se especifica


ninguno.

:frame n

Imprime el elemento n de la pila, o el actualmente activo si no se especifica


ninguno.

:help

Imprime la ayuda sobre un comando del depurador, o de todos los comandos si


no se especifica ninguno.

:info

Imprime informaci
on sobre un elemento.

:lisp expresi
on
Eval
ua la expresi
on Lisp.
:lisp-quiet expresi
on
Eval
ua la expresi
on Lisp sin devolver el resultado.
:next

Como :step, excepto que :next se salta las llamadas a funciones.

:quit

Sale del nivel actual del depurador sin completar el computo.

:resume

Contin
ua con el c
omputo.

:step

Sigue con el c
omputo de la funcion o fichero hasta que alcance una nueva lnea
fuente.

:top

Retorna a Maxima desde cualquier nivel del depurador sin completar el


c
omputo.

604

Manual de Maxima

38.3 Funciones y variables para depurado


[Variable opcional]

debugmode
Valor por defecto: false

Cuando en Maxima ocurre un error, Maxima inicializara el depurador si debugmode


tiene el valor true. El usuario puede ingresar comandos para examinar la pila de
llamadas, los puntos de interrupcion; en pocas palabras ir a traves del codigo de
Maxima. Vea debugging para una lista de los comandos del depurador.
Habilitando debugmode no se capturaran los errores tipo Lisp.
[Variable opcional]

refcheck
Valor por defecto: false

Cuando refcheck vale true, Maxima imprime un mensaje cada vez que una variable
es utilizada por vez primera en un calculo.
[Variable opcional]

setcheck
Valor por defecto: false

Cuando el valor de setcheck es una lista de variables (se admite que tengan
subndices) Maxima devuelve un mensaje indicando si los valores que han sido
asignados a las variables lo han sido con el operador ordinario :, o con el operador
de asignaci
on :: o como resultado de haberse realizado una llamada de funcion,
pero en ning
un caso cuando la asignacion haya sido hecha mediante los operadores
:= o ::=. El mensaje contiene el nombre de la variable y su valor.
La variable setcheck admite tambien los valores all o true con lo que el informe
incluir
a todas las variables.
Cada nueva asignaci
on de setcheck establece una nueva lista de variables a ser monitorizada, de forma que cualquier otra variable previamente asignada a setcheck es
olvidada.
Los nombres asignados a setcheck deben estar precedidos del apostrofo a fin de
evitar que las variables sean evaluadas antes de ser almacenadas en setcheck. Por
ejemplo, si x, y y z ya guardan alg
un valor entoces se hara
setcheck: [x, y, z]$
para colocarlas en la lista de variables a monitorizar.
No se generar
a ninguna salida cuando una variable de la lista setcheck sea asignada
a ella misma, como en X: X.

setcheckbreak

[Variable opcional]

Valor por defecto: false


Si setcheckbreak es igual true, Maxima se detendra siempre que a una variable de
la lista setcheck se le asigne un nuevo valor. La detencion tendra lugar justo antes
de hacerse la asignaci
on. En ese momento setval guarda el valor que se le va a dar
a la variable. Entonces el usuario podra darle un valor diferente pasandoselo a la
variable setval.
Veanse tambien setcheck y setval.

Captulo 38: Depurado

605

[Variable del sistema]


Guarda el valor que va a ser asignado a una variable cuando setcheckbreak realiza
una detenci
on. Entonces se podra asignarle otro valor pasandoselo previamente a
setval.
Veanse tambien setcheck y setcheckbreak.

setval

timer (f_1, ..., f_n )


timer (all)
timer ()

[Funcion]
[Funcion]
[Funcion]
Dadas las funciones f 1, ..., f n, timer coloca cada una de ellas en la lista de funciones para las cuales se generaran estadsticas relativas al tiempo de computo. As,
timer(f)$ timer(g)$ coloca a f y luego a g en dicha lista de forma acumulativa.
La sentencia timer(all) coloca todas las funciones de usuario (las referenciadas por
la variable global functions) en la lista de funciones cuyos tiempos de ejecucion se
quieren monitorizar.
Si no se le pasan argumentos a timer se obtendra la lista de funciones cuyos tiempos
de ejecuci
on se quieren monitorizar.
Maxima almacena la duraci
on del computo de cada funcion de la lista, de forma que
timer_info devolver
a las estadsticas correspondientes, incluyendo el tiempo medio
de cada llamada a la funci
on, el n
umero de llamadas realizadas y el tiempo total
transcurrido. La instrucci
on untimer borra las funciones de la lista.
La funci
on timer no eval
ua sus argumentos, de forma que f(x) := x^2$ g:f$
timer(g)$ no coloca a f en la lista.
Si trace(f) est
a activada, entonces timer(f) esta desactivada; trace y timer no
pueden estar operativas al mismo tiempo.
Vease tambien timer_devalue.

untimer (f_1, ..., f_n )


untimer ()

[Funcion]
[Funcion]
Dadas las funciones f 1, ..., f n, untimer las elimina de la lista de funciones cuyos
tiempos de ejecuci
on se quiere monitorizar.
Si no se le suministran argumentos, untimer borra completamente la lista.
Tras la ejecuci
on de untimer (f), timer_info (f) a
un devuelve las estadsticas de
tiempo previamente registradas, pero timer_info() (sin argumentos) no devuelve
informaci
on sobre aquellas funciones que ya no estan en la lista. La ejecucion de
timer (f) inicializa todas las estadsticas a cero y coloca f nuevamente en la lista.

[Variable opcional]
Valor por defecto: false
Si timer_devalue es igual a true, Maxima le resta a cada funcion cuyos tiempos
de ejecuci
on se quiere monitorizar el tiempo gastado en llamadas a otras funciones
presentes tambien en la lista de monitorizacion. En caso contrario, los tiempos que
se obtienen para cada funci
on incluyen tambien los consumidos en otras funciones.
Notese que el tiempo consumido en llamadas a otras funciones que no estan en la lista
de monitorizaci
on no se resta del tiempo total.
Veanse tambien timer y timer_info.

timer_devalue

606

Manual de Maxima

timer_info (f_1, ..., f_n )


timer_info ()

[Funcion]
[Funcion]
Dadas las funciones f 1, ..., f n, timer_info devuelve una matriz con informacion
relativa a los tiempos de ejecucion de cada una de estas funciones. Sin argumentos,
timer_info devuelve la informacion asociada a todas las funciones cuyos tiempos de
ejecuci
on se quiere monitorizar.
La matriz devuelta por timer_info incluye los nombres de las funciones, tiempo
de ejecuci
on en cada llamada, n
umero de veces que ha sido llamada, tiempo total
de ejecuci
on y tiempo consumido en la recoleccion de basura, gctime (del ingles,
"garbage collection time") en la version original de Macsyma, aunque ahora toma el
valor constante cero.
Los datos con los que timer_info construye su respuesta pueden obtenerse tambien
con la funci
on get:
get(f, calls);

get(f, runtime);

get(f, gctime);

Vease tambien timer.

trace (f_1, ..., f_n )


trace (all)
trace ()

[Funcion]
[Funcion]
[Funcion]
Dadas las funciones f 1, ..., f n, trace imprime informacion sobre depuracion cada vez
que estas funciones son llamadas; trace(f)$ trace(g)$ coloca de forma acumulativa
a f y luego a g en la lista de funciones a ser rastradas.

La sentencia trace(all) coloca todas las funciones de usuario (las referenciadas por
la variable global functions) en la lista de funciones a ser rastreadas.
Si no se suministran argumentos, trace devuelve una lista con todas las funciones a
ser rastreadas.
La funci
on untrace desactiva el rastreo. Vease tambien trace_options.
La funci
on trace no eval
ua sus argumentos, de forma que f(x) := x^2$ g:f$
trace(g)$ no coloca a f en la lista de rastreo.
Cuando una funci
on se redefine es eliminada de la lista de rastreo. As, tras timer(f)$
f(x) := x^2$, la funci
on f dejara de estar en dicha lista.
Si timer (f) est
a activado, entonces trace (f) esta desactivado, ya que trace y
timer no pueden estar ambos activos para la misma funcion.

trace_options (f, option_1, ..., option_n )


trace_options (f )

[Funcion]
[Funcion]
Establece las opciones de rastreo para la funcion f. Cualquier otra opcion previamente
especificada queda reemplazada por las nuevas. La ejecucion de trace_options (f,
...) no tiene ning
un efecto, a menos que se haya invocado previamente a trace (f )
(es indiferente que esta invocacion sea anterior o posterior a trace_options).
trace_options (f ) inicializa todas las opciones a sus valores por defecto.
Las claves de opciones son:
noprint: No se imprime mensaje alguno ni a la entrada ni a la salida de la
funci
on.

Captulo 38: Depurado

607

break: Coloca un punto de referencia antes de que la funcion comience a ejecutarse y otro despues de que termine su ejecucion. Vease break.
lisp_print: Muestra los argumentos y valores retornados como objetos de Lisp.
info: Imprime -> true tanto a la entrada como a la salida de la funcion.
errorcatch: Detecta errores, otorgando la posibilidad de marcar un error, reintentar la llamada a la funcion o especificar un valor de retorno.
Las opciones de rastreo se especifican de dos formas. La u
nica presencia de la clave
de opci
on ya activa la opci
on. (Notese que la opcion foo no se activa mediante foo :
true u otra forma similar; se tendra en cuenta tambien que las claves no necesitan ir
precedidas del ap
ostrofo.) Especificando la clave de opcion junto con una funcion de
predicado se hace que la opcion quede condicionada al predicado.
La lista de argumentos para las funciones de predicado es siempre [level,
direction, function, item] donde level es el nivel de recursion para la funcion,
direction puede ser tanto enter como exit, function es el nombre de la funcion
y item es la lista de argumentos (a la entrada) o el valor de retorno (a la salida).
A continuaci
on un ejemplo de opciones de rastreo no condicionales:
(%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
(%i2) trace (ff)$
(%i3) trace_options (ff, lisp_print, break)$
(%i4) ff(3);
Para la misma funci
on, con la opcion break condicionada a un predicado:
(%i5) trace_options (ff, break(pp))$
(%i6) pp (level, direction, function, item) := block (print (item),
return (function = ff and level = 3 and direction = exit))$
(%i7) ff(6);

untrace (f_1, ..., f_n )


untrace ()

[Funcion]
[Funcion]
Dadas las funciones f 1, ..., f n, untrace desactiva el rastreo previamente activado
por la funci
on trace. Si no se aportan argumentos, untrace desactiva el rastreo de
todas las funciones.
La llamada a untrace devuelve una lista con las funciones para las que el rastreo se
ha desactivado.

Captulo 39: augmented lagrangian

609

39 augmented lagrangian
39.1 Funciones y variables para augmented lagrangian
(FOM, xx, C, yy )
[Funcion]
(FOM, xx, C, yy, optional args)
[Funcion]
([FOM, grad ], xx, C, yy )
[Funcion]
([FOM, grad ], xx, C, yy, optional args)
[Funcion]
Devuelve una aproximaci
on del valor mnimo de la expresion FOM respecto de las
variables xx, manteniendo las restricciones C igual a cero. La lista yy contiene las
soluciones iniciales para xx. El algoritmo que se utiliza es el metodo del lagrangiano
aumentado (ver referencias [1] y [2]).

augmented_lagrangian_method
augmented_lagrangian_method
augmented_lagrangian_method
augmented_lagrangian_method

Si grad est
a presente en la llamada a la funcion, se interpreta como el gradiente
de FOM respecto de xx, representado como una lista de tantas expresiones como
variables tenga xx. Si el argumento grad no esta, se calculara de forma automatica.
Tanto FOM como cada uno de los elementos de grad, si se da como argumento, deben
ser expresiones ordinarias; no admitiendose ni nombres de funciones ni expresiones
lambda.
El argumento optional_args hace referencia a otros argumentos adicionales, los
cuales se especifican de la forma symbol = value . Los argumentos opcionales reconocidos son:
N
umero de iteraciones del algoritmo.

niter

lbfgs_tolerance
Tolerancia que se pasa a LBFGS.
iprint

Par
ametro IPRINT (lista de dos enteros que controlan la frecuencia de
mensajes) que se pasa a LBFGS.

%lambda

Valor inicial de %lambda que sera utilizado para calcular el lagrangiano


aumentado.

Esta funci
on minimiza el lagrangiano aumentado haciendo uso del algoritmo LBFGS,
que es un metodo de los llamados quasi-Newton.
Antes de hacer uso de esta funcion ejec
utense load("augmented_lagrangian").
Vease tambien lbfgs.
Referencias:
[1] http://www-fp.mcs.anl.gov/otc/Guide/OptWeb/continuous/constrained/
nonlinearcon/auglag.html
[2] http://www.cs.ubc.ca/spider/ascher/542/chap10.pdf
Ejemplos:
(%i1) load (lbfgs);
(%o1)
/maxima/share/lbfgs/lbfgs.mac
(%i2) load (augmented_lagrangian);
(%o2)

610

Manual de Maxima

/maxima/share/contrib/augmented_lagrangian.mac
(%i3) FOM: x^2 + 2*y^2;
2
2
(%o3)
2 y + x
(%i4) xx: [x, y];
(%o4)
[x, y]
(%i5) C: [x + y - 1];
(%o5)
[y + x - 1]
(%i6) yy: [1, 1];
(%o6)
[1, 1]
(%i7) augmented_lagrangian_method(FOM, xx, C, yy, iprint=[-1,0]);
(%o7) [[x = 0.66665984108002, y = 0.33334027245545],
%lambda = [- 1.333337940892525]]
Mismo ejemplo que en el caso anterior, pero ahora el gradiente se suministra como
argumento.
(%i1) load (lbfgs)$
(%i2) load (augmented_lagrangian)$
(%i3) FOM: x^2 + 2*y^2;
2
2
(%o3)
2 y + x
(%i4) FOM: x^2 + 2*y^2;
2
2
(%o4)
2 y + x
(%i5) xx: [x, y];
(%o5)
[x, y]
(%i6) grad : [2*x, 4*y];
(%o6)
[2 x, 4 y]
(%i7) C: [x + y - 1];
(%o7)
[y + x - 1]
(%i8) yy: [1, 1];
(%o8)
[1, 1]
(%i9) augmented_lagrangian_method ([FOM, grad], xx, C, yy,
iprint = [-1, 0]);
(%o9) [[x = 0.666659841080025, y = .3333402724554462],
%lambda = [- 1.333337940892543]]

Captulo 40: Bernstein

611

40 Bernstein
40.1 Funciones y variables para Bernstein
bernstein_poly (k, n, x )

[Funcion]
Si k no es un entero negativo, los polinomios de Bernstein se definen como bernstein_
poly(k,n,x) = binomial(n,k) x^k (1-x)^(n-k); en cambio, si k es un entero negativo, el polinomio de Bernstein bernstein_poly(k,n,x) se anula. Cuando o bien k
o n no son enteros, la variable opcional bernstein_explicit controla la expansion
de los polinomios de Bernstein a su forma explcita.
Ejemplo:
(%i1) load(bernstein)$
(%i2) bernstein_poly(k,n,x);
(%o2)
bernstein_poly(k, n, x)
(%i3) bernstein_poly(k,n,x), bernstein_explicit : true;
n - k k
(%o3)
binomial(n, k) (1 - x)
x
Los polinomios de Bernstein tienen definidas su derivada e integral:
(%i4) diff(bernstein_poly(k,n,x),x);
(%o4) (bernstein_poly(k - 1, n - 1, x)
- bernstein_poly(k, n - 1, x)) n
(%i5) integrate(bernstein_poly(k,n,x),x);
(%o5)
k + 1
hypergeometric([k + 1, k - n], [k + 2], x) binomial(n, k) x
---------------------------------------------------------------k + 1
Cuando los argumentos contienen n
umeros decimales en coma flotante, los polinomios
de Bernstein tambien devuelven resultados decimales.
(%i6) bernstein_poly(5,9, 1/2 + %i);
39375 %i
39375
(%o6)
-------- + ----128
256
(%i7) bernstein_poly(5,9, 0.5b0 + %i);
(%o7)
3.076171875b2 %i + 1.5380859375b2
Para hacer uso de bernstein_poly, ejec
utese primero load("bernstein").

bernstein_explicit

[Variable opcional]

Valor por defecto: false


Cuando o bien k o n no son enteros, la variable opcional bernstein_explicit controla
la expansi
on de los polinomios de Bernstein a su forma explcita.
Ejemplo:

612

Manual de Maxima

(%i1) bernstein_poly(k,n,x);
(%o1)
bernstein_poly(k, n, x)
(%i2) bernstein_poly(k,n,x), bernstein_explicit : true;
n - k k
(%o2)
binomial(n, k) (1 - x)
x
Cuando tanto k como n son enteros, bernstein(k,n,x) se expande siempre a su
forma explcita.

multibernstein_poly ([k1,k2,...,kp],[n1,n2,...,
np],[x1,x2,..., xp])

[Funcion]

La
sentencia
multibernstein_poly ([k1,k2,...,kp],[n1,n2,...,
np],[x1,x2,..., xp] ) es el producto de polinomios de Bernstein bernstein_
poly(k1,n1,x1) bernstein_poly(k2,n2,x2) ... bernstein_poly(kp,np,xp).
Para hacer uso de multibernstein_poly, ejec
utese primero load("bernstein").

bernstein_approx (f,[x1,x1,...,xn],n)

[Funcion]
Devuelve el polinomio de Bernstein uniforme de n-esimo orden que aproxima la
funci
on (x1,x2,..xn) |--> f.
Ejemplos:
(%i1) bernstein_approx(f(x),[x], 2);
2
1
2
(%o1)
f(1) x + 2 f(-) (1 - x) x + f(0) (1 - x)
2
(%i2) bernstein_approx(f(x,y),[x,y], 2);
2 2
1
2
2 2
(%o2) f(1, 1) x y + 2 f(-, 1) (1 - x) x y + f(0, 1) (1 - x) y
2
1
2
1 1
+ 2 f(1, -) x (1 - y) y + 4 f(-, -) (1 - x) x (1 - y) y
2
2 2
1
2
2
2
+ 2 f(0, -) (1 - x) (1 - y) y + f(1, 0) x (1 - y)
2
1
2
2
2
+ 2 f(-, 0) (1 - x) x (1 - y) + f(0, 0) (1 - x) (1 - y)
2
Para hacer uso de bernstein_approx, ejec
utese primero load("bernstein").

bernstein_expand (e, [x1,x1,...,xn])

[Funcion]
Expresa el polinomio e como una combinacion lineal de polinomios de Bernstein
multivariantes.
(%i1) bernstein_expand(x*y+1,[x,y]);
(%o1)
2 x y + (1 - x) y + x (1 - y) + (1 - x) (1 - y)
(%i2) expand(%);
(%o2)
x y + 1
Maxima devuelve un error si el primer argumento no es un polinomio.
Para hacer uso de bernstein_expand, ejec
utese primero load("bernstein").

Captulo 41: bode

613

41 bode
41.1 Funciones y variables para bode
bode_gain (H, range, ...plot_opts...)

[Funcion]

Funci
on para dibujar el gr
afico de ganancia de Bode.
Ejemplos (1 a 7 de
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html,
8 de Ron Crummett):
(%i1) load("bode")$
(%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$
(%i3) bode_gain (H1 (s), [w, 1/1000, 1000])$
(%i4) H2 (s) := 1 / (1 + s/omega0)$
(%i5) bode_gain (H2 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i6) H3 (s) := 1 / (1 + s/omega0)^2$
(%i7) bode_gain (H3 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i8) H4 (s) := 1 + s/omega0$
(%i9) bode_gain (H4 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i10) H5 (s) := 1/s$
(%i11) bode_gain (H5 (s), [w, 1/1000, 1000])$
(%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$
(%i13) bode_gain (H6 (s), [w, 1/1000, 1000]),
omega0 = 10, zeta = 1/10$
(%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$
(%i15) bode_gain (H7 (s), [w, 1/1000, 1000]),
omega0 = 10, zeta = 1/10$
(%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$
(%i17) bode_gain (H8 (s), [w, 1/1000, 1000])$

614

Manual de Maxima

Antes de hacer uso de esta funcion ejec


utese load("bode"). Vease tambien bode_
phase.

bode_phase (H, range, ...plot_opts...)

[Funcion]

Funci
on para dibujar el gr
afico de fase de Bode.
Ejemplos (1 a 7 de
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html,
8 de Ron Crummett):
(%i1) load("bode")$
(%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$
(%i3) bode_phase (H1 (s), [w, 1/1000, 1000])$
(%i4) H2 (s) := 1 / (1 + s/omega0)$
(%i5) bode_phase (H2 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i6) H3 (s) := 1 / (1 + s/omega0)^2$
(%i7) bode_phase (H3 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i8) H4 (s) := 1 + s/omega0$
(%i9) bode_phase (H4 (s), [w, 1/1000, 1000]), omega0 = 10$
(%i10) H5 (s) := 1/s$
(%i11) bode_phase (H5 (s), [w, 1/1000, 1000])$
(%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$
(%i13) bode_phase (H6 (s), [w, 1/1000, 1000]),
omega0 = 10, zeta = 1/10$
(%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$
(%i15) bode_phase (H7 (s), [w, 1/1000, 1000]),
omega0 = 10, zeta = 1/10$
(%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$
(%i17) bode_phase (H8 (s), [w, 1/1000, 1000])$
(%i18) block ([bode_phase_unwrap : false],
bode_phase (H8 (s), [w, 1/1000, 1000]));

Captulo 41: bode

615

(%i19) block ([bode_phase_unwrap : true],


bode_phase (H8 (s), [w, 1/1000, 1000]));
Antes de hacer uso de esta funcion ejec
utese load("bode"). Vease tambien bode_
gain.

Captulo 42: cobyla

617

42 cobyla
42.1 Introducci
on a cobyla
fmin_cobyla es una traducci
on a Common Lisp hecha con el programa f2cl de la rutina
Fortran COBYLA, (Powell, [1][2][3]), para optimizacion con restricciones.
COBYLA minimiza una funci
on objetivo F(X) sujeta a M restricciones con desigualdades
de la forma g(X) >= 0 sobre X, siendo X un vector de variables de N componentes.
Las restricciones en forma de igualdades se pueden implementar por pares de desigualdades de la forma g(X)>=0 y -g(X)>= 0. El interfaz Maxima para COBYLA admite restricciones de igualdad, transform
andolas luego internamente a pares de desigualdades.
El algoritmo hace uso de aproximaciones lineales, tanto de la funcion objetivo como de
las funciones de restricci
on; tales aproximaciones se hacen mediante interpolacion lineal de
N+1 puntos en el espacio de variables. Los puntos de interpolacion se consideran vertices
de un simplejo o smplex. El par
ametro RHO controla el tama~
no del simplejo y se reduce
automaticamente de RHOBEG a RHOEND. Para cada RHO la subrutina intenta alcanzar
un buen vector de variables para el tama~
no actual, reduciendose entonces RHO hasta alcanzar el valor de RHOEND. Por eso, tanto a RHOBEG como a RHOEND se les deben
asignar valores razonables, lo que requiere cierto trabajo emprico previo. La rutina trata
cada restricci
on individualmente cuando se calcula un en las variables. El nombre de la
rutina se deriva de la frase Constrained Optimization BY Linear Approximations.
Referecias:
[1] Codigo Fortran procede de http://plato.asu.edu/sub/nlores.html#general
[2] M. J. D. Powell, "A direct search optimization method that models the objective and
constraint functions by linear interpolation," en Advances in Optimization and Numerical
Analysis, eds. S. Gomez and J.-P. Hennart (Kluwer Academic: Dordrecht, 1994), p. 51-67.
[3] M. J. D. Powell, "Direct search algorithms for optimization calculations," Acta Numerica 7, 287-336 (1998). Also available as University of Cambridge, Department of Applied
Mathematics and Theoretical Physics, Numerical Analysis Group, Report NA1998/04 from
http://www.damtp.cam.ac.uk/user/na/reports.html

42.2 Funciones y variables para cobyla


fmin_cobyla (F, X, Y )
fmin_cobyla (F, X, Y, optional args)

[Funcion]
[Funcion]
Devuelve una aproximaci
on del valor mnimo de la expresion F respecto de las variables X, sujeta a un conjunto opcional de restricciones. Y es una lista que contiene
una soluci
on semilla inicial en X.
F debe ser una expresi
on ordinaria, no valen nombres de funciones ni expresiones
lambda.
optional_args hace referencia a argumentos adicionales, que se especifican de la
forma symbol = value . Los argumentos opcionales que se reconocen son:
constraints
Lista de restricciones en forma de desigualdades e igualdades que debe
satisfacer X. Las desigualdades deben ser de la forma g(X ) >= h(X ) o

618

Manual de Maxima

g(X ) <= h(X ). Las restricciones de igualdad deben ser de la forma g(X )
= h(X ).
rhobeg

Valor inicial de la variable interna RHO, que controla el tama~


no del simplejo. Su valor por defecto es 1.0.

rhoend

El valor final deseado para el parametro RHO. Es aproximadamente la


precisi
on de las variables. Su valor por defecto es 1d-6.

iprint

Nivel de informacion de salida. Su valor por defecto es 0.


0 - Sin informacion de salida
1 - Sumario al final de los calculos
2 - Se van mostrando los nuevos valores de RHO y SIGMA, incluyendo el vector de variables.
3 - Como en 2, pero la informacion se muestra cuando se calcula
F(X).

maxfun

N
umero m
aximo de evaluaciones de la funcion. Su valor por defecto es
1000.

El resultado devuelto es un vector:


1. Los valores de las variables con las que se alcanza el valor mnimo. Es una lista
de elementos de la forma var = value para cada una de las variables listadas en
X.
2. El valor mnimo de la funcion objetivo.
3. El n
umero de evaluaciones de la funcion.
4. C
odigo de retorno con los siguientes significados:
1. 0 - No ha habido errores.
2. 1 - Alcanzado el m
aximo n
umero permitido de evaluaciones de la funcion.
3. 2 - Errores de redondeo han impedido el avance del proceso.
El c
odigo load(fmin_cobyla) carga en memoria esta funcion..

bf_fmin_cobyla (F, X, Y )
bf_fmin_cobyla (F, X, Y, optional args)

[Funcion]
[Funcion]
Esta funci
on es identica a fmin_cobyla, excepto por el hecho de que utiliza aritmetica de precisi
on arbitraria (bigfloat) y que el valor por defecto de rhoend es
10^(fpprec/2).
Vease fmin_cobyla.
El c
odigo load(fmin_cobyla) carga en memoria esta funcion..

42.3 Ejemplos para cobyla


Minimizar x1*x2 bajo la condici
on 1-x1^2-x2^2 >= 0. La solucion teorica es x1 = 1/sqrt(2),
x2 = -1/sqrt(2).
(%i1) load(fmin_cobyla)$
(%i2) fmin_cobyla(x1*x2, [x1, x2], [1,1], constraints = [x1^2+x2^2<=1], iprint=1);

Captulo 42: cobyla

619

Normal return from subroutine COBYLA


NFVALS =
66
F =-5.000000E-01
MAXCV = 1.999845E-12
X = 7.071058E-01 -7.071077E-01
(%o2) [[x1 = 0.70710584934848, x2 = - 0.7071077130248], - 0.49999999999926,
[[-1.999955756559757e-12],[]], 66]
Hay m
as ejemplos en el directorio share/cobyla/ex.

Captulo 43: contrib ode

621

43 contrib ode
43.1 Introducci
on a contrib ode
La funci
on ode2 de Maxima resuelve ecuaciones diferenciales ordinarias (EDO) simples
de primer y segundo orden. La funcion contrib_ode extiende las posibilidades de ode2
con metodos adicionales para ODEs lineales y no lineales de primer orden y homogeneas
lineales de segundo orden. El c
odigo se encuentra en estado de desarrollo y la syntaxis
puede cambiar en futuras versiones. Una vez el codigo se haya estabilizado podra pasar a
integrarse dentro de Maxima.
El paquete debe cargarse con la instruccion load(contrib_ode) antes de utilizarlo.
La sintaxis de contrib_ode es similar a la de ode2. Necesita tres argumentos: una EDO
(solo se necesita el miembro izquierdo si el derecho es igual cero), la variable dependiente y
la independiente. Si encuentra la solucion, devolvera una lista de resultados.
La forma de los resultados devueltos es diferente de la utilizada por ode2. Puesto que las
ecuaciones no lineales pueden tener m
ultiples soluciones, contrib_ode devuelve una lista
de soluciones. Las soluciones pueden tener diferentes formatos:
una funci
on explcita para la variable dependiente,
una funci
on implcita para la variable dependiente,
una soluci
on parametrica en terminos de la variable %t o
una transformaci
on en otra EDO de variable %u.
%c hace referencia a la constante de integracion en las ecuaciones de primer orden. %k1
y %k2 son las constantes para las ecuaciones de segundo orden. Si por cualquier razon
contrib ode no pudiese encontrar una solucion, devolvera false, quizas despues de mostrar
un mensaje de error.
Ejemplos:
En ocasiones es necesario devolver una lista de soluciones, pues algunas EDOs pueden
tener m
ultiples soluciones:
(%i1) load(contrib_ode)$
(%i2) eqn:x*diff(y,x)^2-(1+x*y)*diff(y,x)+y=0;
dy 2
dy
x (--) - (x y + 1) -- + y = 0
dx
dx
(%i3) contrib_ode(eqn,y,x);
(%o2)

(%o3)
(%i4) method;

x
[y = log(x) + %c, y = %c %e ]

(%o4)
factor
Las EDOs no lineales pueden tener soluciones singulares sin constantes de integracion,
como en la segunda soluci
on del ejemplo siguiente:

622

Manual de Maxima

(%i1) load(contrib_ode)$
(%i2) eqn:diff(y,x)^2+x*diff(y,x)-y=0;
dy 2
dy
(--) + x -- - y = 0
dx
dx
(%i3) contrib_ode(eqn,y,x);
(%o2)

(%o3)

2
2
x
[y = %c x + %c , y = - --]
4

(%i4) method;
(%o4)

clairault

La siguiente ODE tiene dos soluciones parametricas en terminos de la variable %t. En


este caso, las soluciones parametricas se pueden manipular para dar soluciones explcitas.
(%i1) load(contrib_ode)$
(%i2) eqn:diff(y,x)=(x+y)^2;
dy
2
(%o2)
-- = (y + x)
dx
(%i3) contrib_ode(eqn,y,x);
(%o3) [[x = %c - atan(sqrt(%t)), y = - x - sqrt(%t)],
[x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]]
(%i4) method;
(%o4)

lagrange

En el siguiente ejemplo (Kamke 1.112) se obtiene una solucion implcita.


(%i1) load(contrib_ode)$
(%i2) assume(x>0,y>0);
(%o2)
[x > 0, y > 0]
(%i3) eqn:x*diff(y,x)-x*sqrt(y^2+x^2)-y;
dy
2
2
(%o3)
x -- - x sqrt(y + x ) - y
dx
(%i4) contrib_ode(eqn,y,x);
y

Captulo 43: contrib ode

(%o4)

623

[x - asinh(-) = %c]
x

(%i5) method;
(%o5)
lie
La siguiente ecuaci
on de Riccati se transforma en una EDO lineal de segundo orden de
variable %u. Maxima es incapaz de resolver la nueva EDO, por lo que la devuelve si resolver:
(%i1) load(contrib_ode)$
(%i2) eqn:x^2*diff(y,x)=a+b*x^n+c*x^2*y^2;
2 dy
2 2
n
x -- = c x y + b x + a
dx
(%i3) contrib_ode(eqn,y,x);

(%o2)

d%u
--2
dx
2
n - 2
a
d %u
(%o3) [[y = - ----, %u c (b x
+ --) + ---- c = 0]]
%u c
2
2
x
dx
(%i4) method;
(%o4)
riccati
Para EDOs de primer orden, contrib_ode llama a ode2. Entonces trata de aplicar los
siguientes metodos: factorizaci
on, Clairault, Lagrange, Riccati, Abel y Lie. El metodo de
Lie no se intenta aplicar a las ecuaciones de Abel si el propio metodo de Abel no obtiene
solucion, pero s se utiliza si el metodo de Riccati devuelve una EDO de segundo orden sin
resolver.
Para EDOs de segundo orden, contrib_ode llama a ode2 y luego a odelin.
Se mostrar
an mensajes de depurado si se ejecuta la sentencia put(contrib_
ode,true,verbose).

43.2 Funciones y variables para contrib ode


contrib_ode (eqn, y, x )

[Funcion]
Devuelve la lista de soluciones de la ecuacion diferencia ordinaria (EDO) eqn de
variable independiente x y variable dependiente y.

odelin (eqn, y, x )

[Funcion]
La funci
on odelin resulve EDOs homogeneas lineales de primer y segundo orden con
variable independiente x y variable dependiente y. Devuelve un conjunto fundamental
de soluciones de la EDO.
Para EDOs de segundo orden, odelin utiliza un metodo desarrollado por Bronstein
y Lafaille, que busca las soluciones en terminos de funciones especiales dadas.

624

Manual de Maxima

(%i1) load(contrib_ode);
(%i2) odelin(x*(x+1)*diff(y,x,2)+(x+5)*diff(y,x,1)+(-4)*y,y,x);
...trying factor method
...solving 7 equations in 4 variables
...trying the Bessel solver
...solving 1 equations in 2 variables
...trying the F01 solver
...solving 1 equations in 3 variables
...trying the spherodial wave solver
...solving 1 equations in 4 variables
...trying the square root Bessel solver
...solving 1 equations in 2 variables
...trying the 2F1 solver
...solving 9 equations in 5 variables
gauss_a(- 6, - 2, - 3, - x) gauss_b(- 6, - 2, - 3, - x)
(%o2) {---------------------------, ---------------------------}
4
4
x
x

ode_check (eqn, soln )

[Funcion]
Devuelve el valor de la ecuacion diferencia ordinaria (EDO) eqn despues de sustituir
una posible soluci
on soln. El valor es cero si soln es una solucion de eqn.
(%i1) load(contrib_ode)$
(%i2) eqn:diff(y,x,2)+(a*x+b)*y;
2
d y
(%o2)
--- + (a x + b) y
2
dx
(%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b)
+bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)];
3/2
1 2 (a x + b)
(%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b)
3
3 a
3/2
1 2 (a x + b)
+ bessel_j(-, --------------) %k1 sqrt(a x + b)]
3
3 a
(%i4) ode_check(eqn,ans[1]);
(%o4)

Captulo 43: contrib ode

method

625

[Variable opcional]

A la variable method se le asigna el metodo aplicado.


[Variable]

%c
%c es la constante de integracion para EDOs de primer orden.

[Variable]

%k1
%k1 es la primera constante de integracion para EDOs de segundo orden.

[Variable]

%k2
%k2 es la segunda constante de integracion para EDOs de segundo orden.

gauss_a (a, b, c, x )

[Funcion]
gauss_a(a,b,c,x) y gauss_b(a,b,c,x) son funciones geometricas 2F1 .
Representan dos soluciones independientes cualesquiera de la ecuacion diferencial
hipergeometrica x(1-x) diff(y,x,2) + [c-(a+b+1)x] diff(y,x) - aby = 0 (A&S
15.5.1).
El u
nico uso que se hace de estas funciones es en las soluciones de EDOs que devuelven
odelin y contrib_ode. La definicion y utilizacion de estas funciones puede cambiar
en futuras distribuciones de Maxima.
Veanse tambien gauss_b, dgauss_a y gauss_b.

gauss_b (a, b, c, x )

[Funcion]

Vease tambien gauss_a.

dgauss_a (a, b, c, x )

[Funcion]

The derivative with respect to x of gauss_a(a,b,c,x).

dgauss_b (a, b, c, x )

[Funcion]

Derivada de gauss_b(a,b,c,x ) respecto de x.

kummer_m (a, b, x )

[Funcion]
Funci
on M de Kummer, tal como la definen Abramowitz y Stegun, Handbook of
Mathematical Functions, Seccion 13.1.2.
El u
nico uso que se hace de esta funcion es en las soluciones de EDOs que devuelven
odelin y contrib_ode. La definicion y utilizacion de estas funciones puede cambiar
en futuras distribuciones de Maxima.
Veanse tambien kummer_u, dkummer_m y dkummer_u.

kummer_u (a, b, x )

[Funcion]
Funci
on U de Kummer, tal como la definen Abramowitz y Stegun, Handbook of Mathematical Functions, Secci
on 13.1.3.
Vease tambien kummer_m.

dkummer_m (a, b, x )

[Funcion]

Derivada de kummer_m(a,b,x ) respecto de x.

dkummer_u (a, b, x )
Derivada de kummer_u(a,b,x ) respecto de x.

[Funcion]

626

Manual de Maxima

43.3 Posibles mejoras a contrib ode


Este paquete a
un se encuentra en fase de desarrollo. Aspectos pendientes:
Extender el metodo FACTOR ode1_factor para que trabaje con races m
ultiples.
Extender el metodo FACTOR ode1_factor para que intente resolver factores de orden
superior. En este momento s
olo intenta resolver factores lineales.
Modificar la rutina LAGRANGE ode1_lagrange para que prefiera races reales a las
complejas.
A~
nadir m
as metodos para las ecuaciones de RIccati.
Mejorar la identificaci
on de las ecuaciones de Abel de segunda especie. El procedimiento
actual no es muy bueno.
Trabajar la rutina del grupo simetrico de Lie ode1_lie. Existen algunos problemas:
algunas partes no est
an implementadas, algunos ejemplos no terminan de ejecutarse,
otros producen errors, otros devuelven respuestas muy complejas.
Hacer m
as pruebas.

43.4 Pruebas realizadas con contrib ode


Los procedimientos fueron probados con cerca de mil ecuaciones tomadas de Murphy,

Kamke, Zwillinger y otros. Estas


se encuentran en el directorio de pruebas.
La rutina de Clairault ode1_clairault encuentra todas las soluciones conocidas, includas las singulares, de las ecuaciones de Clairault en Murphy y Kamke.
Las otras rutinas a veces devuelven una sola solucion cuando existen mas.
Algunas de las soluciones devueltas por ode1_lie son demasiado complejas e imposibles
de interpretar.
A veces se producen detenciones imprevistas del procedimiento.

43.5 Referencias para contrib ode


1. E. Kamke, Differentialgleichungen Losungsmethoden und Losungen, Vol 1, Geest &
Portig, Leipzig, 1961
2. G. M. Murphy, Ordinary Differential Equations and Their Solutions, Van Nostrand,
New York, 1960
3. D. Zwillinger, Handbook of Differential Equations, 3rd edition, Academic Press, 1998
4. F. Schwarz, Symmetry Analysis of Abels Equation, Studies in Applied Mathematics,
100:269-294 (1998)
5. F. Schwarz, Algorithmic Solution of Abels Equation, Computing 61, 39-49 (1998)
6. E. S. Cheb-Terrab, A. D. Roche, Symmetries and First Order ODE Patterns, Computer
Physics Communications 113 (1998), p 239. (http://lie.uwaterloo.ca/papers/
ode vii.pdf)
7. E. S. Cheb-Terrab, T. Kolokolnikov, First Order ODEs, Symmetries and Linear Transformations, European Journal of Applied Mathematics, Vol. 14, No. 2, pp. 231-246
(2003). (http://arxiv.org/abs/math-ph/0007023,
http://lie.uwaterloo.ca/papers/ode_iv.pdf)

Captulo 43: contrib ode

627

8. G. W. Bluman, S. C. Anco, Symmetry and Integration Methods for Differential Equations, Springer, (2002)
9. M Bronstein, S Lafaille, Solutions of linear ordinary differential equations in
terms of special functions, Proceedings of ISSAC 2002, Lille, ACM Press, 23-28.
(http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/issac2002.pdf)

Captulo 44: descriptive

629

44 descriptive
44.1 Introducci
on a descriptive
El paquete descriptive contiene funciones para realizar clculos y graficos estadsticos
descriptivos.
Junto con el c
odigo fuente se distribuyen tres conjuntos de datos:
pidigits.data, wind.data y biomed.data.
Cualquier manual de estadstica se puede utilizar como referencia al paquete
descriptive.
Para comentarios, fallos y sugerencias, por favor contactar con mario AT edu DOT
xunta DOT es.
Aqu un sencillo ejemplo sobre como operan las funciones de descriptive, dependiendo
de la naturaleza de sus argumentos, listas o matrices,
(%i1) load (descriptive)$
(%i2) /* muestra univariate */
mean ([a, b, c]);
c + b + a
(%o2)
--------3
(%i3) matrix ([a, b], [c, d], [e, f]);
[ a b ]
[
]
(%o3)
[ c d ]
[
]
[ e f ]
(%i4) /* muestra multivariante */ mean (%);
e + c + a f + d + b
(%o4)
[---------, ---------]
3
3
Notese que en las muestras multivariantes la media se calcula para cada columna.
En caso de varias muestras de diferente tama~
no, la funcion map de Maxima puede utilizarse para obtener los resultados deseados para cada muestra,
(%i1) load (descriptive)$
(%i2) map (mean, [[a, b, c], [d, e]]);
c + b + a e + d
(%o2)
[---------, -----]
3
2
En este caso, dos muestras de tama~
nos 3 y 2 han sido almacenadas en una lista.
Muestras univariantes deben guardarse en listas como en
(%i1) s1 : [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
(%o1)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
y muestras multivariantes en matrices como las del siguiente ejemplo
(%i1) s2 : matrix ([13.17, 9.29], [14.71, 16.88], [18.50, 16.88],
[10.58, 6.63], [13.33, 13.25], [13.21, 8.12]);
[ 13.17 9.29 ]

630

Manual de Maxima

[
[
[
[
[
[
[
[
[
[

(%o1)

14.71
18.5
10.58
13.33
13.21

]
16.88 ]
]
16.88 ]
]
6.63 ]
]
13.25 ]
]
8.12 ]

En este caso, el n
umero de columnas es igual al de la dimension de la variable aleatoria
y el n
umero de filas coincide con el tama~
no muestral.
Los datos pueden suministrarse manualmente, pero las muestras grandes se suelen almacenar en ficheros de texto. Por ejemplo, el fichero pidigits.data contiene los 100 primeros
dgitos del n
umero %pi:
3
1
4
1
5
9
2
6
5
3 ...
A fin de leer estos dgitos desde Maxima,
(%i1) s1 : read_list (file_search ("pidigits.data"))$
(%i2) length (s1);
(%o2)
100
Por otro lado, el archivo wind.data contiene los promedios diarios de la velocidad del
viento en cinco estaciones meteorol
ogicas en Irlanda (esta muestra es parte de un conjunto de
datos correspondientes a 12 estaciones meteorologicas. El fichero original se puede descargar
libremente del StatLib Data Repository y se analiza en Haslett, J., Raftery, A. E. (1989)
Space-time Modelling with Long-memory Dependence: Assessing Irelands Wind Power
Resource, with Discussion. Applied Statistics 38, 1-50). As se leen los datos:
(%i1) s2 : read_matrix (file_search ("wind.data"))$
(%i2) length (s2);
(%o2)
100
(%i3) s2 [%]; /* last record */
(%o3)
[3.58, 6.0, 4.58, 7.62, 11.25]
Algunas muestras contienen datos no numericos. Como ejemplo, el archivo biomed.data
(el cual es parte de otro mayor descargado tambien del StatLib Data Repository) contiene
cuatro mediciones sanguneas tomadas a dos grupos de pacientes, A y B, de diferentes edades,
(%i1) s3 : read_matrix (file_search ("biomed.data"))$

Captulo 44: descriptive

631

(%i2) length (s3);


(%o2)
100
(%i3) s3 [1]; /* first record */
(%o3)
[A, 30, 167.0, 89.0, 25.6, 364]
El primer individuo pertenece al grupo A, tiene 30 a~
nos de edad y sus medidas sanguneas
fueron 167.0, 89.0, 25.6 y 364.
Debe tenerse cuidado cuando se trabaje con datos categoricos. En el siguiente ejemplo,
se asigna al smbolo a cierto valor en alg
un momento previo y luego se toma una muestra
con el valor categ
orico a,
(%i1) a : 1$
(%i2) matrix ([a, 3], [b, 5]);
[ 1 3 ]
(%o2)
[
]
[ b 5 ]

44.2 Funciones y variables para el tratamiento de datos


build_sample (list )
build_sample (matrix )

[Funcion]
[Funcion]
Construye una muestra a partir de una tabla de frecuencias absolutas. La tabla de
entrada puede ser una una matriz o una lista de listas, todas ellas de igual tama~
no.
El n
umero de columnas o la longitud de las listas debe ser mayor que la unidad. El
u
ltimo elemento de cada fila o lista se interpreta como la frecuencia absoluta. El
resultado se devuelve siempre en formato de matriz.
Ejemplos:
Tabla de frecuencias univariante.
(%i1) load (descriptive)$
(%i2) sam1: build_sample([[6,1], [j,2], [2,1]]);
[ 6 ]
[
]
[ j ]
(%o2)
[
]
[ j ]
[
]
[ 2 ]
(%i3) mean(sam1);
2 j + 8
(%o3)
[-------]
4
(%i4) barsplot(sam1) $
Tabla de frecuencias multivariante.
(%i1) load (descriptive)$
(%i2) sam2: build_sample([[6,3,1], [5,6,2], [u,2,1],[6,8,2]]) ;
[ 6 3 ]
[
]

632

Manual de Maxima

(%o2)

(%i3) cov(sam2);
[
2
[ u + 158
[ -------- (%o3) [
6
[
[ 2 u + 174
[ --------- [
6
(%i4) barsplot(sam2,

continuous_freq (list )
continuous_freq (list, m )

[
[
[
[
[
[
[
[
[

5
5
u
6
6

6 ]
]
6 ]
]
2 ]
]
8 ]
]
8 ]

2
(u + 28)
--------36

]
2 u + 174
11 (u + 28) ]
--------- - ----------- ]
6
12
]
]
11 (u + 28)
21
]
-----------]
12
4
]
grouping=stacked) $

[Funcion]
[Funcion]
El argumento de continuous_freq debe ser una lista de n
umeros. Divide el rango en
intervalos y cuenta cu
antos valores hay en ellos. El segundo argumento es opcional y
puede ser el n
umero de clases deseado, 10 por defecto, o una lista que contenga los
lmites de las clases y el n
umero de estas, o una lista que contenga u
nicamente los
lmites. Si los valores muestrales son todos iguales, esta funcion devuelve solamente
una clase de amplitud 2.
Ejemplos:
El argumento opcional indica el n
umero de clases deseadas. La primera lista de la respuesta contiene los lmites de los intervalos y la segunda los totales correspondientes:
hay 16 dgitos en el intervalo [0, 1.8], 24 en (1.8, 3.6] y as sucesivamente.
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, 5);
(%o3) [[0, 1.8, 3.6, 5.4, 7.2, 9.0], [16, 24, 18, 17, 25]]
El argumento opcional indica que queremos 7 clases con lmites -2 y 12:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12,7]);
(%o3) [[- 2, 0, 2, 4, 6, 8, 10, 12], [8, 20, 22, 17, 20, 13, 0]]
El argumento opcional indica que queremos el n
umero por defecto de clases y lmites
-2 y 12:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12]);

Captulo 44: descriptive

(%o3)

3
[[- 2, - -,
5
[0,

633

4
-,
5
8,

11
--,
5
20,

18
32
--, 5, --,
5
5
12, 18, 9,

39 46 53
--, --, --, 12],
5
5
5
8, 25, 0, 0]]

discrete_freq (list )

[Funcion]
Calcula las frecuencias absolutas en muestras discretas, tanto numericas como
categ
oricas. Su u
nico argumento debe ser una lista.
(%i1)
(%i2)
(%i3)
(%o3)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
discrete_freq (s1);
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[8, 8, 12, 12, 10, 8, 9, 8, 12, 13]]

La primera lista son los valores de la muestra y la segunda sus frecuencias absolutas. Las instrucciones ? col y ? transpose pueden ayudar a comprender la u
ltima
entrada.

standardize (list )
standardize (matrix )

[Funcion]
[Funcion]
Resta a cada elemento de la lista la media muestral y luego divide el resultado por la
desviaci
on tpica. Si la entrada es una matriz, standardize resta a cada fila la media
multivariante y luego divide cada componente por la desviacion tpica correspondiente.

subsample (data_matrix, predicate_function )


subsample (data_matrix, predicate_function, col_num, col_num,

[Funcion]
[Funcion]

...)
Esta es una variante de la funcion submatrix de Maxima. El primer argumento es
una matriz de datos, el segundo es una funcion de predicado y el resto de argumentos
opcionales son los n
umeros de las columnas a tomar en consideracion.
Estos son los registros multivariantes en los que la velocidad del viento en la primera
estaci
on meteorol
ogica fue menor de 18 nudos. Vease como en la expresion lambda
la i-esima componente se la referencia como v[i].
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) subsample (s2, lambda([v], v[1] > 18));
[ 19.38 15.37 15.12 23.09 25.25 ]
[
]
[ 18.29 18.66 19.08 26.08 27.63 ]
(%o3)
[
]
[ 20.25 21.46 19.95 27.71 23.38 ]
[
]
[ 18.79 18.96 14.46 26.38 21.84 ]
En el siguiente ejemplo, se solicitan u
nicamente la primera, segunda y quinta componentes de aquellos registros con velocidades del viento mayores o iguales que 16 nudos
en la estaci
on n
umero 1 y menores que 25 nudos en la estacion n
umero 4. La muestra

634

Manual de Maxima

solo contiene los datos referidos a las estaciones 1, 2 y 5. En este caso, la funcion de
predicado se define por medio de una funcion de Maxima ordinaria.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) g(x):= x[1] >= 16 and x[4] < 25$
(%i4) subsample (s2, g, 1, 2, 5);
[ 19.38 15.37 25.25 ]
[
]
[ 17.33 14.67 19.58 ]
(%o4)
[
]
[ 16.92 13.21 21.21 ]
[
]
[ 17.25 18.46 23.87 ]
He aqu un ejemplo con las variables categoricas de biomed.data. Se piden los registros correspondientes a aquellos pacientes del grupo B mayores de 38 an~
nos,
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) h(u):= u[1] = B and u[2] > 38 $
(%i4) subsample (s3, h);
[ B 39 28.0 102.3 17.1 146 ]
[
]
[ B 39 21.0 92.4
10.3 197 ]
[
]
[ B 39 23.0 111.5 10.0 133 ]
[
]
[ B 39 26.0 92.6
12.3 196 ]
(%o4)
[
]
[ B 39 25.0 98.7
10.0 174 ]
[
]
[ B 39 21.0 93.2
5.9
181 ]
[
]
[ B 39 18.0 95.0
11.3 66 ]
[
]
[ B 39 39.0 88.5
7.6
168 ]
Es probable que el an
alisis estadstico requiera u
nicamente de las medidas sanguneas.
(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) subsample (s3, lambda([v], v[1] = B and v[2] > 38),
3, 4, 5, 6);
[ 28.0 102.3 17.1 146 ]
[
]
[ 21.0 92.4
10.3 197 ]
[
]
[ 23.0 111.5 10.0 133 ]
[
]
[ 26.0 92.6
12.3 196 ]

Captulo 44: descriptive

(%o3)

635

[
[
[
[
[
[
[
[

25.0

98.7

10.0

21.0

93.2

5.9

18.0

95.0

11.3

39.0

88.5

7.6

]
174 ]
]
181 ]
]
66 ]
]
168 ]

Esta es la media multivariante de s3.


(%i1) load (descriptive)$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) mean (s3);
65 B + 35 A 317
6 NA + 8145.0
(%o3) [-----------, ---, 87.178, -------------, 18.123,
100
10
100
3 NA + 19587
------------]
100
Aqu la primera componente carece de significado, ya que tanto A como B son
categ
oricas, la segunda componente es la edad media de los individuos en forma
racional, al tiempo que los valores cuarto y quinto muestran cierto comportamiento
extra~
no; lo cual se debe a que el smbolo NA se utiliza para indicar datos no
disponibles, por lo que ambas medias no tienen sentido. Una posible solucion puede
ser extraer de la matriz aquellas filas con smbolos NA, lo que acarreara cierta
perdida de informaci
on.
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)

load (descriptive)$
s3 : read_matrix (file_search ("biomed.data"))$
g(v):= v[4] # NA and v[6] # NA $
mean (subsample (s3, g, 3, 4, 5, 6));
[79.4923076923077, 86.2032967032967, 16.93186813186813,
2514
----]
13

transform_sample (matriz, varlist, exprlist )

[Funcion]
Transforma la matriz de datos, en la que a cada columna se le asigna un nombre de
acuerdo con la lista varlist, seg
un las expresiones de exprlist.
Ejemplos:
El segundo argumento asigna nombres a las tres columnas, con ellos la lista de expresiones define la transformaci
on de la muestra.
(%i1) load (descriptive)$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $

636

Manual de Maxima

(%i3) transform_sample(data, [a,b,c], [c, a*b, log(a)]);


[ 7 6
log(3) ]
[
]
[ 2 21 log(3) ]
(%o3)
[
]
[ 4 16 log(8) ]
[
]
[ 4 10 log(5) ]
A~
nade una columna constante y elimina la tercera variable.
(%i1) load (descriptive)$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $
(%i3) transform_sample(data, [a,b,c], [makelist(1,k,length(data)),a,b]);
[ 1 3 2 ]
[
]
[ 1 3 7 ]
(%o3)
[
]
[ 1 8 2 ]
[
]
[ 1 5 2 ]

44.3 Funciones y variables de par


ametros descriptivos
mean (list )
mean (matrix )

[Funcion]
[Funcion]

Es la media muestral, definida como


x
=

n
1X
xi
n i=1

Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) mean (s1);
471
(%o3)
--100
(%i4) %, numer;
(%o4)
4.71
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%i6) mean (s2);
(%o6)
[9.9485, 10.1607, 10.8685, 15.7166, 14.8441]

var (list )
var (matrix )

[Funcion]
[Funcion]

Es la varianza muestral, definida como


n
1X
(xi x
)2
n i=1

Captulo 44: descriptive

637

Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) var (s1), numer;
(%o3)
8.425899999999999
Vease tambien var1.

var1 (list )
var1 (matrix )

[Funcion]
[Funcion]

Es la cuasivarianza muestral, definida como


n
1 X
(xi x
)2
n 1 i=1

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
var1 (s1), numer;
8.5110101010101
s2 : read_matrix (file_search ("wind.data"))$
var1 (s2);
[17.39586540404041, 15.13912778787879, 15.63204924242424,
32.50152569696971, 24.66977392929294]

Vease tambien var.

std (list )
std (matrix )

[Funcion]
[Funcion]

Es la desviaci
on tpica muestral, raz cuadrada de var.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
std (s1), numer;
2.902740084816414
s2 : read_matrix (file_search ("wind.data"))$
std (s2);
[4.149928523480858, 3.871399812729241, 3.933920277534866,
5.672434260526957, 4.941970881136392]

Veanse tambien var y std1.

std1 (list )
std1 (matrix )
Es la cuasidesviaci
on tpica muestral, raz cuadrada de var1.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$

[Funcion]
[Funcion]

638

Manual de Maxima

(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

std1 (s1), numer;

2.917363553109228
s2 : read_matrix (file_search ("wind.data"))$
std1 (s2);
[4.17083509672109, 3.89090320978032, 3.953738641137555,
5.701010936401517, 4.966867617451963]
Veanse tambien var1 y std.

noncentral_moment (list, k )
noncentral_moment (matrix, k )

[Funcion]
[Funcion]

Es el momento no central de orden k, definido como


n
1X
xk
n i=1 i

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
noncentral_moment (s1, 1), numer; /* the mean */
4.71
s2 : read_matrix (file_search ("wind.data"))$
[319793.8724761506, 320532.1923892463, 391249.5621381556,
2502278.205988911, 1691881.797742255]
(%i6) noncentral_moment (s2, 5);
Vease tambien central_moment.

central_moment (list, k )
central_moment (matrix, k )

[Funcion]
[Funcion]

Es el momento central de orden k, definido como


n
1X
(xi x
)k
n i=1

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
central_moment (s1, 2), numer; /* the variance */
8.425899999999999
s2 : read_matrix (file_search ("wind.data"))$
[11.29584771375004, 16.97988248298583, 5.626661952750102,
37.5986572057918, 25.85981904394192]
(%i6) central_moment (s2, 3);
Veanse tambien central_moment y mean.

cv (list )
cv (matrix )

[Funcion]
[Funcion]
Es el coeficiente de variaci
on, o cociente entre la desviacion tpica muestral (std) y
la media (mean),

Captulo 44: descriptive

(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

639

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
cv (s1), numer;
.6193977819764815
s2 : read_matrix (file_search ("wind.data"))$
cv (s2);
[.4192426091090204, .3829365309260502, 0.363779605385983,
.3627381836021478, .3346021393989506]

Veanse tambien std y mean.

smin (list )
smin (matrix )

[Funcion]
[Funcion]
Es el valor mnimo de la muestra list. Cuando el argumento es una matriz, smin
devuelve una lista con los valores mnimos de las columnas, las cuales estan asociadas
a variables estadsticas.
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
smin (s1);
0
s2 : read_matrix (file_search ("wind.data"))$
smin (s2);
[0.58, 0.5, 2.67, 5.25, 5.17]

Vease tambien smax.

smax (list )
smax (matrix )

[Funcion]
[Funcion]
Es el valor m
aximo de la muestra list. Cuando el argumento es una matriz, smax
devuelve una lista con los valores maximos de las columnas, las cuales estan asociadas
a variables estadsticas.
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
smax (s1);
9
s2 : read_matrix (file_search ("wind.data"))$
smax (s2);
[20.25, 21.46, 20.04, 29.63, 27.63]

Vease tambien smin.

range (list )
range (matrix )
Es la diferencia entre los valores extremos.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) range (s1);
(%o3)
9

[Funcion]
[Funcion]

640

Manual de Maxima

(%i4) s2 : read_matrix (file_search ("wind.data"))$


(%i5) range (s2);
(%o5)
[19.67, 20.96, 17.37, 24.38, 22.46]

quantile (list, p )
quantile (matrix, p )

[Funcion]
[Funcion]
Es el p-cuantil, siendo p un n
umero del intervalo [0, 1], de la muestra list. Aunque
existen varias definiciones para el cuantil muestral (Hyndman, R. J., Fan, Y. (1996)
Sample quantiles in statistical packages. American Statistician, 50, 361-365), la programada en el paquete descriptive es la basada en la interpolacion lineal.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) /* 1st and 3rd quartiles */
[quantile (s1, 1/4), quantile (s1, 3/4)], numer;
(%o3)
[2.0, 7.25]
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) quantile (s2, 1/4);
(%o5)
[7.2575, 7.477500000000001, 7.82, 11.28, 11.48]

median (list )
median (matrix )

[Funcion]
[Funcion]
Una vez ordenada una muestra, si el tama~
no muestral es impar la mediana es el valor
central, en caso contrario sera la media de los dos valores centrales.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) median (s1);
9
(%o3)
2
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) median (s2);
(%o5)
[10.06, 9.855, 10.73, 15.48, 14.105]
La mediana es el cuantil 1/2.
Vease tambien quantile.

qrange (list )
qrange (matrix )

[Funcion]
[Funcion]
El rango intercuartlico es la diferencia entre el tercer y primer cuartil,
quantile(list,3/4) - quantile(list,1/4),
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) qrange (s1);
21
(%o3)
-4

Captulo 44: descriptive

641

(%i4) s2 : read_matrix (file_search ("wind.data"))$


(%i5) qrange (s2);
(%o5) [5.385, 5.572499999999998, 6.0225, 8.729999999999999,
6.650000000000002]
Vease tambien quantile.

mean_deviation (list )
mean_deviation (matrix )

[Funcion]
[Funcion]

Es la desviaci
on media, definida como
n
1X
|xi x
|
n i=1

Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) mean_deviation (s1);
51
(%o3)
-20
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) mean_deviation (s2);
(%o5) [3.287959999999999, 3.075342, 3.23907, 4.715664000000001,
4.028546000000002]
Vease tambien mean.

median_deviation (list )
median_deviation (matrix )

[Funcion]
[Funcion]

Es la desviaci
on mediana, definida como
n
1X
|xi med|
n i=1

siendo med la mediana de list.


Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) median_deviation (s1);
5
(%o3)
2
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) median_deviation (s2);
(%o5)
[2.75, 2.755, 3.08, 4.315, 3.31]
Vease tambien mean.

642

Manual de Maxima

harmonic_mean (list )
harmonic_mean (matrix )

[Funcion]
[Funcion]

Es la media arm
onica, definida como
n
Pn

1
i=1 xi

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
harmonic_mean (y), numer;
3.901858027632205
s2 : read_matrix (file_search ("wind.data"))$
harmonic_mean (s2);
[6.948015590052786, 7.391967752360356, 9.055658197151745,
13.44199028193692, 13.01439145898509]

Veanse tambien mean y geometric_mean.

geometric_mean (list )
geometric_mean (matrix )

[Funcion]
[Funcion]

Es la media geometrica, definida como


n
Y

! n1

xi

i=1

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
geometric_mean (y), numer;
4.454845412337012
s2 : read_matrix (file_search ("wind.data"))$
geometric_mean (s2);
[8.82476274347979, 9.22652604739361, 10.0442675714889,
14.61274126349021, 13.96184163444275]

Veanse tambien mean y harmonic_mean.

kurtosis (list )
kurtosis (matrix )

[Funcion]
[Funcion]

Es el coeficiente de curtosis, definido como


n
1 X
(xi x
)4 3
ns4 i=1

Ejemplo:

Captulo 44: descriptive

643

(%i1) load (descriptive)$


(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) kurtosis (s1), numer;
(%o3)
- 1.273247946514421
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) kurtosis (s2);
(%o5) [- .2715445622195385, 0.119998784429451,
- .4275233490482866, - .6405361979019522, - .4952382132352935]
Veanse tambien mean, var y skewness.

skewness (list )
skewness (matrix )

[Funcion]
[Funcion]

Es el coeficiente de asimetra, definido como


n
1 X
(xi x
)3
ns3 i=1

Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
skewness (s1), numer;
.009196180476450306
s2 : read_matrix (file_search ("wind.data"))$
skewness (s2);
[.1580509020000979, .2926379232061854, .09242174416107717,
.2059984348148687, .2142520248890832]

Veanse tambien mean, var y kurtosis.

pearson_skewness (list )
pearson_skewness (matrix )

[Funcion]
[Funcion]

Es el coeficiente de asimetra de Pearson, definido como


3 (
x med)
s
siendo med la mediana de list.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%i5)
(%o5)

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
pearson_skewness (s1), numer;
.2159484029093895
s2 : read_matrix (file_search ("wind.data"))$
pearson_skewness (s2);
[- .08019976629211892, .2357036272952649,
.1050904062491204, .1245042340592368, .4464181795804519]

Veanse tambien mean, var y median.

644

Manual de Maxima

quartile_skewness (list )
quartile_skewness (matrix )

[Funcion]
[Funcion]

Es el coeficiente de asimetra cuartlico, definido como


c 34 2 c 12 + c 14
c 34 c 14
siendo cp el p-cuantil de la muestra list.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) quartile_skewness (s1), numer;
(%o3)
.04761904761904762
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) quartile_skewness (s2);
(%o5) [- 0.0408542246982353, .1467025572005382,
0.0336239103362392, .03780068728522298, 0.210526315789474]
Vease tambien quantile.

cov (matrix )

[Funcion]

Es la matriz de covarianzas de una muestra multivariante, definida como


S=
siendo Xj la
Ejemplo:
(%i1)
(%i2)
(%i3)

n


1X
Xj X
0
Xj X
n j=1

j-esima fila de la matriz muestral.

load (descriptive)$
s2 : read_matrix (file_search ("wind.data"))$
fpprintprec : 7$ /* change precision for pretty output */
[ 17.22191 13.61811 14.37217 19.39624 15.42162 ]
[
]
[ 13.61811 14.98774 13.30448 15.15834 14.9711 ]
[
]
(%o4) [ 14.37217 13.30448 15.47573 17.32544 16.18171 ]
[
]
[ 19.39624 15.15834 17.32544 32.17651 20.44685 ]
[
]
[ 15.42162 14.9711
16.18171 20.44685 24.42308 ]
(%i5) cov (s2);
Vease tambien cov1.

cov1 (matrix )

[Funcion]
Es la matriz de cuasivarianzas de una muestra multivariante, definida como
n


1 X
Xj X
0
Xj X
n 1 j=1

Captulo 44: descriptive

siendo Xj la
Ejemplo:
(%i1)
(%i2)
(%i3)

645

j-esima fila de la matriz muestral.

load (descriptive)$
s2 : read_matrix (file_search ("wind.data"))$
fpprintprec : 7$ /* change precision for pretty output */
[ 17.39587 13.75567 14.51734 19.59216 15.5774 ]
[
]
[ 13.75567 15.13913 13.43887 15.31145 15.12232 ]
[
]
(%o4) [ 14.51734 13.43887 15.63205 17.50044 16.34516 ]
[
]
[ 19.59216 15.31145 17.50044 32.50153 20.65338 ]
[
]
[ 15.5774
15.12232 16.34516 20.65338 24.66977 ]
(%i5) cov1 (s2);
Vease tambien cov.

global_variances (matrix )
global_variances (matrix, options ...)

[Funcion]
[Funcion]
La funci
on global_variances devuelve una lista de medidas globales de variabilidad:
varianza total: trace(S_1),
varianza media: trace(S_1)/p,
varianza generalizada: determinant(S_1),
desviaci
on tpica generalizada: sqrt(determinant(S_1)),
varianza efectiva determinant(S_1)^(1/p), (definida en: Pe~
na, D. (2002)
An
alisis de datos multivariantes; McGraw-Hill, Madrid.)
desviaci
on tpica efectiva: determinant(S_1)^(1/(2*p)).
donde p es la dimensi
on de la variable aleatoria multivariante y S1 la matriz de
covarianzas devuelta por la funcion cov1.
Opci
on:
data, por defecto true, indica si la matriz de entrada contiene los datos muestrales, en cuyo caso la matriz de covarianzas cov1 debe ser calculada; en caso
contrario, se le debe pasar esta a la funcion como matriz simetrica en lugar de
los datos.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)

load (descriptive)$
s2 : read_matrix (file_search ("wind.data"))$
global_variances (s2);
[105.338342060606, 21.06766841212119, 12874.34690469686,
113.4651792608502, 6.636590811800794, 2.576158149609762]
Calculo de global_variances a partir de la matriz de covarianzas.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$

646

Manual de Maxima

(%i3) s : cov1 (s2)$


(%i4) global_variances (s, data=false);
(%o4) [105.338342060606, 21.06766841212119, 12874.34690469686,
113.4651792608502, 6.636590811800794, 2.576158149609762]
Veanse tambien cov y cov1.

cor (matrix )
cor (matrix, options ...)

[Funcion]
[Funcion]

Es la matriz de correlaciones de la muestra multivariante.


Opci
on:
data, por defecto true, indica si la matriz de entrada contiene los datos muestrales, en cuyo caso la matriz de covarianzas cov1 debe ser calculada; en caso
contrario, se le debe pasar esta a la funcion como matriz simetrica en lugar de
los datos.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%i4)

load (descriptive)$
fpprintprec:7$
s2 : read_matrix (file_search ("wind.data"))$
cor (s2);
[
1.0
.8476339 .8803515 .8239624 .7519506
[
[ .8476339
1.0
.8735834 .6902622 0.782502
[
(%o4) [ .8803515 .8735834
1.0
.7764065 .8323358
[
[ .8239624 .6902622 .7764065
1.0
.7293848
[
[ .7519506 0.782502 .8323358 .7293848
1.0

]
]
]
]
]
]
]
]
]

Calculo de la matriz de correlaciones a partir de la matriz de covarianzas.


(%i1)
(%i2)
(%i3)
(%i4)
(%i5)

load (descriptive)$
fpprintprec : 7 $
s2 : read_matrix (file_search ("wind.data"))$
s : cov1 (s2)$
cor (s, data=false); /* this is faster */
[
1.0
.8476339 .8803515 .8239624 .7519506
[
[ .8476339
1.0
.8735834 .6902622 0.782502
[
(%o5) [ .8803515 .8735834
1.0
.7764065 .8323358
[
[ .8239624 .6902622 .7764065
1.0
.7293848
[
[ .7519506 0.782502 .8323358 .7293848
1.0
Veanse tambien cov y cov1.

]
]
]
]
]
]
]
]
]

Captulo 44: descriptive

647

list_correlations (matrix )
list_correlations (matrix, options ...)

[Funcion]
[Funcion]
La funci
on list_correlations devuelve una lista con medidas de correlacion:
matriz de precisi
on: es la inversa de la matriz de covarianzas S1 ,
S11 = sij


i,j=1,2,...,p

multiple correlation vector: (R12 , R22 , ..., Rp2 ), with


Ri2 = 1

1
sii s

ii

es un indicador de la bondad de ajuste del modelo de regresion lineal multivariante de Xi cuando el resto de variables se utilizan como regresores.
matriz de correlaciones parciales: en la que el elemento (i, j) es
rij.rest =

sij
sii sjj

Opci
on:
data, por defecto true, indica si la matriz de entrada contiene los datos muestrales, en cuyo caso la matriz de covarianzas cov1 debe ser calculada; en caso
contrario, se le debe pasar esta a la funcion como matriz simetrica en lugar de
los datos.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) z : list_correlations (s2)$

648

Manual de Maxima

(%i4) fpprintprec : 5$ /* for pretty output */


[ .38486
- .13856
- .15626
- .10239
.031179
[
[ - .13856
.34107
- .15233
.038447
- .052842
[
(%o5) [ - .15626 - .15233
.47296
- .024816 - .10054
[
[ - .10239
.038447
- .024816
.10937
- .034033
[
[ .031179
- .052842 - .10054
- .034033
.14834
(%o6)
[.85063, .80634, .86474, .71867, .72675]
[ - 1.0
.38244
.36627
.49908
- .13049 ]
[
]
[ .38244
- 1.0
.37927 - .19907
.23492 ]
[
]
(%o7) [ .36627
.37927
- 1.0
.10911
.37956 ]
[
]
[ .49908
- .19907 .10911
- 1.0
.26719 ]
[
]
[ - .13049
.23492
.37956
.26719
- 1.0
]

]
]
]
]
]
]
]
]
]

Veanse tambien cov y cov1.

principal_components (matrix )
principal_components (matrix, options ...)

[Funcion]
[Funcion]
Calcula las componentes principales de una muestra multivariante. Las componentes
principales se utilizan en el analisis estadstico multivariante para reducir la dimensionalidad de la muestra.
Opci
on:
data, por defecto true, indica si la matriz de entrada contiene los datos muestrales, en cuyo caso la matriz de covarianzas cov1 debe ser calculada; en caso
contrario, se le debe pasar esta a la funcion como matriz simetrica en lugar de
los datos.
La salida de la funci
on principal_components es una lista con los siguientes resultados:
varianzas de las componentes principales,
porcentajes de variaci
on total explicada por cada componente principal,
matriz de rotaci
on.
Ejemplos:
En este ejemplo, la primera componente explica el 83.13 por ciento de la varianza
total.
(%i1)
(%i2)
(%i3)
(%i4)

load (descriptive)$
s2 : read_matrix (file_search ("wind.data"))$
fpprintprec:4 $
res: principal_components(s2);

Captulo 44: descriptive

649

0 errors, 0 warnings
(%o4) [[87.57, 8.753, 5.515, 1.889, 1.613],
[83.13, 8.31, 5.235, 1.793, 1.531],
[ .4149 .03379
- .4757 - 0.581
- .5126 ]
[
]
[ 0.369 - .3657 - .4298
.7237
- .1469 ]
[
]
[ .3959 - .2178 - .2181 - .2749
.8201 ]]
[
]
[ .5548
.7744
.1857
.2319
.06498 ]
[
]
[ .4765 - .4669
0.712
- .09605 - .1969 ]
(%i5) /* porcentajes acumulados */
block([ap: copy(res[2])],
for k:2 thru length(ap) do ap[k]: ap[k]+ap[k-1],
ap);
(%o5)
[83.13, 91.44, 96.68, 98.47, 100.0]
(%i6) /* dimension de la muestra */
p: length(first(res));
(%o6)
5
(%i7) /* dibuja porcentajes para seleccionar el numero de
componentes principales para el analisis ulterior */
draw2d(
fill_density = 0.2,
apply(bars, makelist([k, res[2][k], 1/2], k, p)),
points_joined = true,
point_type
= filled_circle,
point_size
= 3,
points(makelist([k, res[2][k]], k, p)),
xlabel = "Variances",
ylabel = "Percentages",
xtics = setify(makelist([concat("PC",k),k], k, p))) $
En caso de que la matriz de covarianzas sea conocida, se le puede pasar a la funcion,
pero debe utilizarse la opci
on data=false.
(%i1) load (descriptive)$
(%i2) S: matrix([1,-2,0],[-2,5,0],[0,0,2]);
[ 1
- 2 0 ]
[
]
(%o2)
[ - 2
5
0 ]
[
]
[ 0
0
2 ]
(%i3) fpprintprec:4 $
(%i4) /* el argumento es una matriz de covarianzas */
res: principal_components(S, data=false);
0 errors, 0 warnings
[ - .3827

0.0

.9239 ]

650

Manual de Maxima

[
(%o4) [[5.828, 2.0, .1716], [72.86, 25.0, 2.145], [
[
[
(%i5) /* transformacion para obtener las componentes
partir de los registros originales */
matrix([a1,b2,c3],[a2,b2,c2]).last(res);
[ .9239 b2 - .3827 a1 1.0 c3 .3827 b2
(%o5)
[
[ .9239 b2 - .3827 a2 1.0 c2 .3827 b2

.9239

0.0

0.0
1.0
principales a

+ .9239 a1 ]
]
+ .9239 a2 ]

44.4 Funciones y variables para gr


aficos estadsticos
barsplot (data1, data2, . . . , option_1, option_2, . . . )
barsplot_description (. . . )

[Funcion]
[Funcion]
Dibuja diagramas de barras para variables estadsticas discretas, tanto para una como
para m
as muestras.
data puede ser una lista de resultados provenientes de una muestra o una matriz de
m filas y n columnas, representando n muestras de tama~
no m cada una.

Las opciones disponibles son:

]
.3827 ]]
]
0.0 ]

box width (valor por defecto, 3/4): ancho relativo de los rectangulos. Este valor
debe pertenecer al rango [0,1].
grouping (valor por defecto, clustered): indica como se agrupan las diferentes
muestras. Son valores v
alidos: clustered y stacked.
groups gap (valor por defecto, 1): un n
umero positivo que representa la separaci
on entre dos grupos consecutivos de barras.
bars colors (valor por defecto, []): una lista de colores para m
ultiples muestras.
Cuando el n
umero de muestras sea mayor que el de colores especificados, los
colores adicionales necesarios se seleccionan aleatoriamente. Vease color para
m
as informaci
on.
frequency (valor por defecto, absolute): indica la escala de las ordenadas. Valores admitidos son: absolute, relative y and percent.
ordering (valor por defecto, orderlessp): los valores admitidos para esta opcion
son: orderlessp y ordergreatp, indicando como se deben ordenar los resultados
muestrales sobre el eje-x.
sample keys (valor por defecto, []): es una lista de cadenas de texto a usar como
leyendas. Cuando la lista tenga una longitud diferente de cero o del n
umero de
muestras, se devolver
a un mensaje de error.
start at (valor por defecto, 0): indica a que altura comienza a dibujarse el grafico
de barra sobre el eje de abscisas.
Todas las opciones globales de draw, excepto xtics, que se asigna internamente por barsplot. Si es necesario que el usuario le de su propio valor a
esta opci
on, o quiere construir una escena mas compleja, debe hacer uso de
barsplot_description. Vease el ejemplo mas abajo.

Captulo 44: descriptive

651

Las siguientes opciones locales de draw: key, color, fill_color, fill_density


y line_width. Vease tambien bars.
La funci
on barsplot_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion
wxbarsplot para crear histogramas incorporados en los interfaces wxMaxima y iMaxima.
Ejemplos:
Muestra univariante en formato matricial. Frecuencias absolutas.
(%i1) load (descriptive)$
(%i2) m : read_matrix (file_search ("biomed.data"))$
(%i3) barsplot(
col(m,2),
title
= "Ages",
xlabel
= "years",
box_width
= 1/2,
fill_density = 3/4)$
Dos muestras de diferente tama~
no, con frecuencias relativas y colores definidos por el
usuario.
(%i1)
(%i2)
(%i3)
(%i4)

load (descriptive)$
l1:makelist(random(10),k,1,50)$
l2:makelist(random(10),k,1,100)$
barsplot(
l1,l2,
box_width
= 1,
fill_density = 1,
bars_colors = [black, grey],
frequency = relative,
sample_keys = ["A", "B"])$

Cuatro muestras no numericas de igual tama~


no.
(%i1) load (descriptive)$
(%i2) barsplot(
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
title = "Asking for something to four groups",
ylabel = "# of individuals",
groups_gap
= 3,
fill_density = 0.5,
ordering
= ordergreatp)$
Barras apiladas verticalmente.
(%i1) load (descriptive)$

652

Manual de Maxima

(%i2) barsplot(
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
makelist([Yes, No, Maybe][random(3)+1],k,1,50),
title = "Asking for something to four groups",
ylabel = "# of individuals",
grouping
= stacked,
fill_density = 0.5,
ordering
= ordergreatp)$
barsplot en un contexto multiplot.
(%i1)
(%i2)
(%i3)
(%i4)

load (descriptive)$
l1:makelist(random(10),k,1,50)$
l2:makelist(random(10),k,1,100)$
bp1 :
barsplot_description(
l1,
box_width = 1,
fill_density = 0.5,
bars_colors = [blue],
frequency = relative)$
(%i5) bp2 :
barsplot_description(
l2,
box_width = 1,
fill_density = 0.5,
bars_colors = [red],
frequency = relative)$
(%i6) draw(gr2d(bp1), gr2d(bp2))$

Para las opciones relacionadas con los diagramas de barras, vease bars del paquete
draw.
Veanse tambien las funciones histogram y piechart.

boxplot (data )
boxplot (data, option_1, option_2, . . . )
boxplot_description (. . . )

[Funcion]
[Funcion]
[Funcion]
Dibuja diagramas de cajas (box-and-whishker). El argumento data puede ser una
lista, lo cual no es de gran interes, puesto que estos graficos se utilizan principalmente
para comparar distintas muestras, o una matriz, de manera que sea posible comparar
dos o m
as componentes de una muestra multivariante. Tambien se permite que data
sea una lista de muestras con posibles tama~
nos diferentes; de hecho, esta es la u
nica
funci
on del paquete descriptive que admite esta estructura de datos.
Opciones disponibles:
box width (valor por defecto, 3/4): ancho relativo de las cajas. This value must
be in the range [0,1].

Captulo 44: descriptive

653

box orientation (valor por defecto, vertical): valores posibles: vertical y


horizontal.
Todas las opciones globales de draw, excepto points_joined, point_size,
point_type, xtics, ytics, xrange y yrange, que se asignan internamente
por boxplot. Si es necesario que el usuario le de sus propios valores a estas
opciones, o quiere construir una escena mas compleja, debe hacer uso de
boxplot_description.
Las siguientes opciones locales de draw: key, color, y line_width.
La funci
on boxplot_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion wxboxplot
para crear histogramas incorporados en los interfaces wxMaxima y iMaxima.
Ejemplos:
Diagrama de cajas de una muestra multivariante.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix(file_search("wind.data"))$
(%i3) boxplot(s2,
box_width = 0.2,
title
= "Windspeed in knots",
xlabel
= "Stations",
color
= red,
line_width = 2)$
Diagrama de cajas de tres muestras de tama~
nos diferentes.
(%i1) load (descriptive)$
(%i2) A :
[[6, 4, 6, 2, 4, 8, 6, 4, 6, 4, 3, 2],
[8, 10, 7, 9, 12, 8, 10],
[16, 13, 17, 12, 11, 18, 13, 18, 14, 12]]$
(%i3) boxplot (A, box_orientation = horizontal)$

histogram (list )
histogram (list, option_1, option_2, . . . )
histogram (one_column_matrix )
histogram (one_column_matrix, option_1, option_2, . . . )
histogram (one_row_matrix )
histogram (one_row_matrix, option_1, option_2, . . . )
histogram_description (. . . )

[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
Dibuja un histograma a partir de una muestra continua. Los datos muestrales deben
darse en forma de lista de n
umeros o como una matriz unidimensional.
Opciones dispponibles:
nclasses (valor por defecto, 10): n
umero de clases del histograma, o una lista
indicando los lmites de las clases y su n
umero, o solamente los lmites.
frequency (valor por defecto, absolute): indica la escala de las ordenadas. Valores admitidos son: absolute, relative, percent y density. Con density, el
histograma adquiere un area total igual a uno.

654

Manual de Maxima

htics (valor por defecto, auto): formato para las marcas sobre el eje de las
abscisas. Valores admitidos son: auto, endpoints, intervals o una lista de
etiquetas.
Todas las opciones globales de draw, excepto xrange, yrange y xtics, que son
asignadas internamente por histogram. Si es necesario que el usuario le de sus
propios valores a estas opciones, debe hacer uso de histogram_description.
Vease el ejemplo m
as abajo.
Las siguientes opciones locales de draw: key, color, fill_color, fill_density
y line_width. Vease tambien bars.
La funci
on histogram_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion
wxhistogram para crear histogramas incorporados en los interfaces wxMaxima y
iMaxima.
Ejemplos:
Un histograma con seis clases:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
s1,
nclasses
= 8,
title
= "pi digits",
xlabel
= "digits",
ylabel
= "Absolute frequency",
fill_color
= grey,
fill_density = 0.6)$
Ajustando los lmites del histograma a -2 y 12, con 3 clases. Tambien se establece un
formato predefinido a las marcas del eje de abscisas:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
s1,
nclasses
= [-2,12,3],
htics
= ["A", "B", "C"],
terminal
= png,
fill_color
= "#23afa0",
fill_density = 0.6)$
Se hace uso de histogram_description para ajustar la opcion xrange y a~
nadir una
curva explcita a la escena:
(%i1) load (descriptive)$
(%i2) ( load("distrib"),
m: 14, s: 2,
s2: random_normal(m, s, 1000) ) $
(%i3) draw2d(
grid
= true,

Captulo 44: descriptive

655

xrange = [5, 25],


histogram_description(
s2,
nclasses
= 9,
frequency
= density,
fill_density = 0.5),
explicit(pdf_normal(x,m,s), x, m - 3*s, m + 3* s))$

piechart (list )
piechart (list, option_1, option_2, . . . )
piechart (one_column_matrix )
piechart (one_column_matrix, option_1, option_2, . . . )
piechart (one_row_matrix )
piechart (one_row_matrix, option_1, option_2, . . . )
piechart_description (. . . )

[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]
[Funcion]

Similar a barsplot, pero dibuja sectores en lugar de rectangulos.


Opciones disponibles:
sector colors (valor por defecto, []): una lista de colores para los sectores.
Cuando el n
umero de sectores sea mayor que el de colores especificados, los
colores adicionales necesarios se seleccionan aleatoriamente. Vease color para
m
as informaci
on.
pie center (valor por defecto, [0,0]): centro del diagrama
pie radius (valor por defecto, 1): radio del diagrama.
Todas las opciones globales de draw, excepto key, que se asigna internamente
por piechart. Si es necesario que el usuario le de su propio valor a esta
opci
on, o quiere construir una escena mas compleja, debe hacer uso de
piechart_description.
Las siguientes opciones locales de draw: key, color, fill_density y line_
width. Vease tambien bars.
La funci
on piechart_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion
wxpiechart para crear histogramas incorporados en los interfaces wxMaxima y iMaxima.
Ejemplo:
(%i1) load (descriptive)$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) piechart(
s1,
xrange = [-1.1, 1.3],
yrange = [-1.1, 1.1],
title
= "Digit frequencies in pi")$
Vease tambien la funci
on barsplot.

scatterplot (list )
scatterplot (list, option_1, option_2, . . . )

[Funcion]
[Funcion]

656

Manual de Maxima

scatterplot (matrix )
scatterplot (matrix, option_1, option_2, . . . )
scatterplot_description (. . . )

[Funcion]
[Funcion]
[Funcion]
Dibuja diagramas de dispersi
on, tanto de muestras univariantes (list) como multivariantes (matrix).

Las opciones disponibles son las mismas que admite histogram.


La funci
on scatterplot_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion
wxscatterplot para crear histogramas incorporados en los interfaces wxMaxima y
iMaxima.
Ejemplos:
Diagrama de dispersi
on univariante a partir de una muestra normal simulada.
(%i1) load (descriptive)$
(%i2) load (distrib)$
(%i3) scatterplot(
random_normal(0,1,200),
xaxis
= true,
point_size = 2,
dimensions = [600,150])$
Diagrama de dispersi
on bidimensional.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(
submatrix(s2, 1,2,3),
title
= "Data from stations #4 and #5",
point_type = diamant,
point_size = 2,
color
= blue)$
Diagrama de dispersi
on tridimensional.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(submatrix (s2, 1,2), nclasses=4)$
Diagrama de dispersi
on de cinco dimensiones, con histogramas de cinco classes.
(%i1) load (descriptive)$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(
s2,
nclasses
= 5,
frequency
= relative,
fill_color
= blue,
fill_density = 0.3,
xtics
= 5)$
Para dibujar puntos aislados o unidos por segmentos, tanto en dos como en tres
dimensiones, vease points. Vease tambien histogram.

Captulo 44: descriptive

657

starplot (data1, data2, . . . , option_1, option_2, . . . )


starplot_description (. . . )

[Funcion]
[Funcion]
Dibuja diagramas de estrellas para variables estadsticas discretas, tanto para una
como para m
as muestras.
data puede ser una lista de resultados provenientes de una muestra o una matriz de
m filas y n columnas, representando n muestras de tama~
no m cada una.

Las opciones disponibles son:


stars colors (valor por defecto, []): una lista de colores para muestras m
ultiples.
Cuando haya m
as muestras que colores especificados, los colores que faltan se
eligen aleatoriamente. Vease color para mas informacion.
frequency (valor por defecto, absolute): indica la escala de los radios. Valores
admitidos son: absolute y relative.
ordering (valor por defecto, orderlessp): los valores admitidos para esta opcion
son: orderlessp y ordergreatp, indicando como se deben ordenar los resultados
muestrales sobre el eje-x.
sample keys (valor por defecto, []): es una lista de cadenas de texto a usar como
leyendas. Cuando la lista tenga una longitud diferente de cero o del n
umero de
muestras, se devolver
a un mensaje de error.
star center (valor por defecto, [0,0]): centro del diagrama.
star radius (valor por defecto, 1): radio del diagrama.
Todas las opciones globales de draw, excepto points_joined, point_type, and
key, que se asignan internamente por starplot. Si es necesario que el usuario
les de sus propios valores a estas opciones, o quiere construir una escena m
as
compleja, debe hacer uso de starplot_description.
La siguiente opci
on local de draw: line_width.
La funci
on starplot_description crea un objeto grafico u
til para formar escenas complejas, junto con otros objetos graficos. Se dispone tambien de la funcion
wxstarplot para crear histogramas incorporados en los interfaces wxMaxima y iMaxima.
Ejemplo:
Gr
afico basado en frecuencias absolutas. La localizacion y el radios lo define el usuario.
(%i1)
(%i2)
(%i3)
(%i4)

load (descriptive)$
l1: makelist(random(10),k,1,50)$
l2: makelist(random(10),k,1,200)$
starplot(
l1, l2,
stars_colors = [blue,red],
sample_keys = ["1st sample", "2nd sample"],
star_center = [1,2],
star_radius = 4,
proportional_axes = xy,
line_width = 2 ) $

658

Manual de Maxima

stemplot (m )
stemplot (m, option )

[Funcion]
[Funcion]

Dibuja diagrama de tallos y hojas.


La u
nica opci
on disponible es:
leaf unit (valor por defecto, 1): indica la unidad de las hojas; debe ser una
potencia de 10.
Ejemplo:
(%i1) load (descriptive)$
(%i2) load(distrib)$
(%i3) stemplot(
random_normal(15, 6, 100),
leaf_unit = 0.1);
-5|4
0|37
1|7
3|6
4|4
5|4
6|57
7|0149
8|3
9|1334588
10|07888
11|01144467789
12|12566889
13|24778
14|047
15|223458
16|4
17|11557
18|000247
19|4467799
20|00
21|1
22|2335
23|01457
24|12356
25|455
27|79
key: 6|3 = 6.3
(%o3)
done

Captulo 45: diag

659

45 diag
45.1 Funciones y variables para diag
diag (lm )

[Funcion]
Genera una matriz cuadrada con las matrices de lm en la diagonal, siendo lm una
lista de matrices o de escalares.
Ejemplo:
(%i1) load("diag")$
(%i2) a1:matrix([1,2,3],[0,4,5],[0,0,6])$
(%i3) a2:matrix([1,1],[1,0])$
(%i4) diag([a1,x,a2]);
[ 1
[
[ 0
[
[ 0
(%o4)
[
[ 0
[
[ 0
[
[ 0

0 ]
]
0 ]
]
0 ]
]
0 ]
]
1 ]
]
0 ]

Antes de hacer uso de esta funcion ejec


utese load("diag").

JF (lambda,n )

[Funcion]

Devuelve la celula de Jordan de orden n con valor propio lambda.


Ejemplo:
(%i1) load("diag")$
(%i2) JF(2,5);

(%o2)

[
[
[
[
[
[
[
[
[

(%i3) JF(3,2);
[ 3

1 ]

0 ]
]
0 ]
]
0 ]
]
1 ]
]
2 ]

660

Manual de Maxima

(%o3)

[
[ 0

]
3 ]

Antes de hacer uso de esta funcion ejec


utese load("diag").

jordan (mat )

[Funcion]
Devuelve la forma de Jordan de la matriz mat, pero en formato de lista de Maxima.
Para obtener la matriz correspondiente, llamese a la funcion dispJordan utilizando
como argumento la salida de jordan.
Ejemplo:
(%i1) load("diag")$
(%i3) a:matrix([2,0,0,0,0,0,0,0],
[1,2,0,0,0,0,0,0],
[-4,1,2,0,0,0,0,0],
[2,0,0,2,0,0,0,0],
[-7,2,0,0,2,0,0,0],
[9,0,-2,0,1,2,0,0],
[-34,7,1,-2,-1,1,2,0],
[145,-17,-16,3,9,-2,0,3])$
(%i34) jordan(a);
(%o4)
[[2, 3, 3, 1], [3, 1]]
(%i5) dispJordan(%);
[ 2 1 0 0 0 0 0 0
[
[ 0 2 1 0 0 0 0 0
[
[ 0 0 2 0 0 0 0 0
[
[ 0 0 0 2 1 0 0 0
(%o5)
[
[ 0 0 0 0 2 1 0 0
[
[ 0 0 0 0 0 2 0 0
[
[ 0 0 0 0 0 0 2 0
[
[ 0 0 0 0 0 0 0 3

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

Antes de hacer uso de esta funcion ejec


utese load("diag").
dispJordan y minimalPoly.

dispJordan (l )

Veanse tambien

[Funcion]
Devuelve la matriz de Jordan asociada a la codificacion dada por la lista l, que
habitualmente ser
a la salida de la funcion jordan.
Ejemplo:
(%i1) load("diag")$

Captulo 45: diag

661

(%i2) b1:matrix([0,0,1,1,1],
[0,0,0,1,1],
[0,0,0,0,1],
[0,0,0,0,0],
[0,0,0,0,0])$
(%i3) jordan(b1);
(%o3)
(%i4) dispJordan(%);
[
[
[
[
(%o4)
[
[
[
[
[

[[0, 3, 2]]
0

0 ]
]
0 ]
]
0 ]
]
1 ]
]
0 ]

Antes de hacer uso de esta funcion ejec


utese load("diag"). Veanse tambien jordan
y minimalPoly.

minimalPoly (l )

[Funcion]
Devuelve el polinomio mnimo asociado a la codificacion dada por la lista l, que
habitualmente ser
a la salida de la funcion jordan.
Ejemplo:
(%i1) load("diag")$
(%i2) a:matrix([2,1,2,0],
[-2,2,1,2],
[-2,-1,-1,1],
[3,1,2,-1])$
(%i3) jordan(a);
(%o3)
[[- 1, 1], [1, 3]]
(%i4) minimalPoly(%);
3
(%o4)
(x - 1) (x + 1)
Antes de hacer uso de esta funcion ejec
utese load("diag"). Veanse tambien jordan
y dispJordan.

ModeMatrix (A,l )

[Funcion]
Devuelve la matriz M tal que (M m1).A.M = J, donde J es la forma de Jordan de A.
La lista l es la forma codificada de la forma de Jordan tal como la devuelve la funcion
jordan.
Ejemplo:

662

Manual de Maxima

(%i1) load("diag")$
(%i2) a:matrix([2,1,2,0],
[-2,2,1,2],
[-2,-1,-1,1],
[3,1,2,-1])$
(%i3) jordan(a);
(%o3)
[[- 1, 1], [1, 3]]
(%i4) M: ModeMatrix(a,%);
[ 1
- 1
1
1 ]
[
]
[
1
]
[ - - 1
0
0 ]
[
9
]
[
]
(%o4)
[
13
]
[ - -1
- 1 0 ]
[
9
]
[
]
[ 17
]
[ -- 1
1
1 ]
[ 9
]
(%i5) is( (M^^-1).a.M = dispJordan(%o3)
(%o5)
true

);

Notese que dispJordan(%o3) es la forma de Jordan de la matriz a.


Antes de hacer uso de esta funcion ejec
utese load("diag"). Veanse tambien jordan
y dispJordan.

mat_function (f,mat )

[Funcion]
Devuelve f (mat), siendo f una funcion analtica y mat una matriz. Este calculo se
basa en la f
ormula integral de Cauchy, que establece que si f(x) es analtica y
mat=diag([JF(m1,n1),...,JF(mk,nk)]),

entonces
f(mat)=ModeMatrix*diag([f(JF(m1,n1)),...,f(JF(mk,nk))])
* ModeMatrix^^(-1)
Notese que hay otros metodos alternativos para realizar este calculo.
Se presentan algunos ejemplos.
Ejemplo 1:
(%i1) load("diag")$
(%i2) b2:matrix([0,1,0], [0,0,1], [-1,-3,-3])$
(%i3) mat_function(exp,t*b2);
2
- t

Captulo 45: diag

t %e
- t
- t
(%o3) matrix([-------- + t %e
+ %e
,
2
- t
- t
- t
2
%e
%e
- t
- t
%e
t (- ----- - ----- + %e
) + t (2 %e
- -----)
t
2
t
t
- t
- t
- t
- t
- t
%e
2 %e
%e
+ 2 %e
, t (%e
- -----) + t (----- - -----)
t
2
t
2
- t
- t
- t
- t
t %e
2
%e
%e
- t
+ %e
], [- --------, - t (- ----- - ----- + %e
),
2
t
2
t
- t
- t
2
- t
2 %e
%e
t %e
- t
- t (----- - -----)], [-------- - t %e
,
2
t
2
- t
- t
- t
2
%e
%e
- t
- t
%e
t (- ----- - ----- + %e
) - t (2 %e
- -----),
t
2
t
t
- t
- t
- t
2 %e
%e
- t
%e
t (----- - -----) - t (%e
- -----)])
2
t
t
(%i4) ratsimp(%);
[
2
- t ]
[ (t + 2 t + 2) %e
]
[ -------------------- ]
[
2
]
[
]
[
2
- t
]
(%o4) Col 1 = [
t %e
]
[
- -------]
[
2
]
[
]
[
2
- t
]
[
(t - 2 t) %e
]
[
---------------]
[
2
]
[
2
- t
]
[
(t + t) %e
]

663

664

Manual de Maxima

[
Col 2 = [
2
- t
[ - (t - t - 1) %e
[
[
2
- t
[
(t - 3 t) %e
[
2
- t
[
t %e
[
-------[
2
[
[
2
- t
Col 3 = [
(t - 2 t) %e
[ - ---------------[
2
[
[
2
- t
[ (t - 4 t + 2) %e
[ -------------------[
2

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

Ejemplo 2:
(%i5) b1:matrix([0,0,1,1,1],
[0,0,0,1,1],
[0,0,0,0,1],
[0,0,0,0,0],
[0,0,0,0,0])$
(%i6) mat_function(exp,t*b1);
[
2
]
[
t
]
[ 1 0 t t -- + t ]
[
2
]
[
]
(%o6)
[ 0 1 0 t
t
]
[
]
[ 0 0 1 0
t
]
[
]
[ 0 0 0 1
0
]
[
]
[ 0 0 0 0
1
]
(%i7) minimalPoly(jordan(b1));
3
(%o7)
x
(%i8) ident(5)+t*b1+1/2*(t^2)*b1^^2;
[
2
]

Captulo 45: diag

[
t
]
[ 1 0 t t -- + t ]
[
2
]
[
]
(%o8)
[ 0 1 0 t
t
]
[
]
[ 0 0 1 0
t
]
[
]
[ 0 0 0 1
0
]
[
]
[ 0 0 0 0
1
]
(%i9) mat_function(exp,%i*t*b1);
[
2 ]
[
t ]
[ 1 0 %i t %i t %i t - -- ]
[
2 ]
[
]
(%o9)
[ 0 1
0
%i t
%i t
]
[
]
[ 0 0
1
0
%i t
]
[
]
[ 0 0
0
1
0
]
[
]
[ 0 0
0
0
1
]
(%i10) mat_function(cos,t*b1)+%i*mat_function(sin,t*b1);
[
2 ]
[
t ]
[ 1 0 %i t %i t %i t - -- ]
[
2 ]
[
]
(%o10)
[ 0 1
0
%i t
%i t
]
[
]
[ 0 0
1
0
%i t
]
[
]
[ 0 0
0
1
0
]
[
]
[ 0 0
0
0
1
]
Ejemplo 3:
(%i11) a1:matrix([2,1,0,0,0,0],
[-1,4,0,0,0,0],
[-1,1,2,1,0,0],
[-1,1,-1,4,0,0],
[-1,1,-1,1,3,0],
[-1,1,-1,1,1,2])$
(%i12) fpow(x):=block([k],declare(k,integer),x^k)$

665

666

Manual de Maxima

(%i13) mat_function(fpow,a1);
[ k
k - 1 ]
[
k
[ 3 - k 3
]
[
k 3
[
]
[
[
k - 1
]
[ k
[ - k 3
]
[ 3 + k
[
]
[
[
k - 1
]
[
k
[ - k 3
]
[
k 3
(%o13) Col 1 = [
] Col 2 = [
[
k - 1
]
[
k
[ - k 3
]
[
k 3
[
]
[
[
k - 1
]
[
k
[ - k 3
]
[
k 3
[
]
[
[
k - 1
]
[
k
[ - k 3
]
[
k 3
[
0
]
[
0
[
]
[
[
0
]
[
0
[
]
[
[ k
k - 1 ]
[
k - 1
[ 3 - k 3
]
[
k 3
[
]
[
Col 3 = [
k - 1
] Col 4 = [ k
k - 1
[ - k 3
]
[ 3 + k 3
[
]
[
[
k - 1
]
[
k - 1
[ - k 3
]
[
k 3
[
]
[
[
k - 1
]
[
k - 1
[ - k 3
]
[
k 3
[
0
]
[
]
[ 0 ]
[
0
]
[
]
[
]
[ 0 ]
[
0
]
[
]
[
]
[ 0 ]
Col 5 = [
0
] Col 6 = [
]
[
]
[ 0 ]
[
k
]
[
]
[
3
]
[ 0 ]
[
]
[
]
[ k
k ]
[ k ]
[ 3 - 2 ]
[ 2 ]

- 1

]
]
]
k - 1 ]
3
]
]
- 1
]
]
]
- 1
]
]
]
- 1
]
]
]
- 1
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

Captulo 45: diag

Antes de hacer uso de esta funcion ejec


utese load("diag").

667

Captulo 46: distrib

669

46 distrib
46.1 Introducci
on a distrib
El paquete distrib contiene un conjunto de funciones para la realizacion de calculos probabilsticos con modelos univariantes, tanto discretos como continuos.
A continuaci
on un breve recordatorio de las deficiones basicas sobre distribuciones de
probabilidad.
Sea f (x) la funci
on de densidad de una variable aleatoria X absolutamente continua.
La funci
on de distribuci
on se define como
x

f (u) du

F (x) =

que es igual a la probabilidad Pr(X <= x).


La media es un par
ametro de localizacion y se define como
Z

E [X] =

x f (x) dx

La varianza es una medida de dispersion,


Z

f (x) (x E [X]) dx

V [X] =

que es un n
umero real positivo. La raz cuadrada de la varianza es la desviacion tpica,
D[X] = sqrt(V [X]), siendo otra medida de dispersion.
El coeficiente de asimetra es una medida de forma,
R

SK [X] =

f (x) (x E [X]) dx
3

D [X]

Y el coeficiente de curtosis mide el apuntamiento de la densidad,


R

KU [X] =

f (x) (x E [X]) dx
4

D [X]

Si X es normal, KU [X] = 0. De hecho, tanto la asimetra como la curtosis son parametros


de forma para medir la no normalidad de una distribucion.
Si la variable aleatoria X es discreta, su funcion de densidad, o de probabiliad, f (x)
toma valores positivos dentro de un conjunto numerable de valores xi , y cero en cualquier
otro lugar. En este caso, la funci
on de distribucion es
F (x) =

f (xi )

xi x

La media, varianza, desviaci


on tpica y los coeficientes de asimetra y curtosis adquieren
las formas
X
E [X] =
xi f (xi ),
xi

670

Manual de Maxima

V [X] =

f (xi ) (xi E [X]) ,

xi

D [X] =
P

xi

SK [X] =

V [X],
3

f (x) (x E [X]) dx
3

D [X]

y
P

KU [X] =

xi

f (x) (x E [X]) dx
D [X]

3,

respectivamente.
Por favor, cons
ultese cualquier manual introductorio de probabilidad y estadstica para
mas informaci
on sobre toda esta parafernalia matematica.
Se sigue cierta convenci
on a la hora de nombrar las funciones del paquete distrib. Cada
nombre tiene dos partes, el primero hace referencia a la funcion o parametro que se quiere
calcular,
Funciones:
Funci
on de densidad
(pdf_*)
Funci
on de distribuci
on
(cdf_*)
Cuantil
(quantile_*)
Media
(mean_*)
Varianza
(var_*)
Desviaci
on t
pica
(std_*)
Coeficiente de asimetr
a
(skewness_*)
Coeficiente de curtosis
(kurtosis_*)
Valor aleatorio
(random_*)
La segunda parte hace referencia explcita al modelo probabilstico,
Distribuciones continuas:
Normal
(*normal)
Student
(*student_t)
Chi^2
(*chi2)
Chi^2 no central
(*noncentral_chi2)
F
(*f)
Exponencial
(*exp)
Lognormal
(*lognormal)
Gamma
(*gamma)
Beta
(*beta)
Continua uniforme
(*continuous_uniform)
Log
stica
(*logistic)
Pareto
(*pareto)
Weibull
(*weibull)
Rayleigh
(*rayleigh)
Laplace
(*laplace)

Captulo 46: distrib

Cauchy
Gumbel

671

(*cauchy)
(*gumbel)

Distribuciones discretas:
Binomial
(*binomial)
Poisson
(*poisson)
Bernoulli
(*bernoulli)
Geom
etrica
(*geometric)
Uniforme discreta
(*discrete_uniform)
Hipergeom
etrica
(*hypergeometric)
Binomial negativa
(*negative_binomial)
Finita discreta
(*general_finite_discrete)
Por ejemplo, pdf_student_t(x,n) es la funcion de densidad de la distribucion de Student con n grados de libertad, std_pareto(a,b) es la desviacion tpica de la distribucion
de Pareto de par
ametros a y b, y kurtosis_poisson(m) es el coeficiente de curtosis de la
distribuci
on de Poisson de media m.
Para poder hacer uso del paquete distrib es necesario cargarlo primero tecleando
(%i1) load(distrib)$
Para comentarios, errores o sugerencias, por favor contactese conmigo en mario ARROBA edu PUNTO xunta PUNTO es.

46.2 Funciones y variables para distribuciones continuas


pdf_normal (x,m,s )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de la variable aleatoria Normal (m, s), con s > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_normal (x,m,s )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de la variable
aleatoria Normal (m, s), con s > 0. Esta funcion se define en terminos de la funcion
de error, erf, de Maxima.
(%i1) load (distrib)$
(%i2) assume(s>0)$ cdf_normal(x,m,s);
x - m
erf(---------)
sqrt(2) s
1
(%o3)
-------------- + 2
2

Vease tambien erf.

quantile_normal (q,m,s )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Normal (m, s), con s > 0; en otras
palabras, es la inversa de cdf_normal. El argumento q debe ser un n
umero de [0, 1].
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

672

Manual de Maxima

(%i1) load (distrib)$


(%i2) quantile_normal(95/100,0,1);
(%o2)
(%i3) float(%);
(%o3)

9
sqrt(2) inverse_erf(--)
10
1.644853626951472

mean_normal (m,s )

[Funcion]
Devuelve la media de una variable aleatoria Normal (m, s), con s > 0, es decir m.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

var_normal (m,s )

[Funcion]
Devuelve la varianza de una variable aleatoria Normal (m, s), con s > 0, es decir s^2.

std_normal (m,s )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Normal (m, s), con s > 0, es
decir s. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

skewness_normal (m,s )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Normal (m, s), con
s > 0, que es siempre igual a 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

kurtosis_normal (m,s )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria Normal (m, s), con s >
0, que es siempre igual a 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

random_normal (m,s )
random_normal (m,s,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Normal (m, s), con s > 0. Llamando a random_normal
con un tercer argumento n, se simula una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on es el de Box-Mueller, tal como esta descrito en Knuth, D.E.
(1981) Seminumerical Algorithms. The Art of Computer Programming. AddisonWesley.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_student_t (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Student t(n), con n > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_student_t (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Student t(n), con n > 0.
(%i1) load (distrib)$
(%i2) cdf_student_t(1/2, 7/3);
7 1 28

Captulo 46: distrib

673

beta_incomplete_regularized(-, -, --)
6 2 31
(%o2)
1 - ------------------------------------2
(%i3) float(%);
(%o3)
.6698450596140415

quantile_student_t (q,n )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Student t(n), con n > 0; en otras
palabras, se trata de la inversa de cdf_student_t. El argumento q debe ser un
n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_student_t (n )

[Funcion]
Devuelve la media de una variable aleatoria de Student t(n), con n > 0, que vale
siempre 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

var_student_t (n )

[Funcion]

Devuelve la varianza de una variable aleatoria de Student t(n), con n > 2.


(%i1) load (distrib)$
(%i2) assume(n>2)$ var_student_t(n);
n
(%o3)
----n - 2

std_student_t (n )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Student t(n), con n > 2.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_student_t (n )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Student t(n), con
n > 3, que vale siempre 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

kurtosis_student_t (n )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria de Student t(n), con n > 4.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_student_t (n )
random_student_t (n,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio t(n), con n > 0. Llamando a random_student_t con un
segundo argumento m, se obtiene una muestra aleatoria simulada de tama~
no m.
El algoritmo utilizado est
a basado en el hecho de que si Z es una variable aleatoria
normal N (0, 1) y S 2 es una chi cuadrada de n grados de libertad, Chi2 (n), entonces
Z
X=q 2
S
n

es una variable aleatoria de Student de n grados de libertad, t(n).


Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

674

Manual de Maxima

pdf_noncentral_student_t (x,n,ncp )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable aleatoria no central de Student nct (n, ncp), con n > 0 grados de libertad y parametro de no
centralidad ncp. Para hacer uso de esta funcion, ejec
utese primero load(distrib).
En ocasiones es necesario hacer alg
un trabajo extra para obtener el resultado final.
(%i1) load (distrib)$
(%i2) expand(pdf_noncentral_student_t(3,5,0.1));
.01370030107589574 sqrt(5)
(%o2) -------------------------sqrt(2) sqrt(14) sqrt(%pi)
1.654562884111515E-4 sqrt(5)
+ ---------------------------sqrt(%pi)
.02434921505438663 sqrt(5)
+ -------------------------%pi
(%i3) float(%);
(%o3)
.02080593159405669

cdf_noncentral_student_t (x,n,ncp )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable aleatoria no central de Student nct (n, ncp), con n > 0 grados de libertad y
par
ametro de no centralidad ncp. Esta funcion no tiene expresion compacta y se
calcula numericamente si la variable global numer vale true o si alguno de sus argumentos es un n
umero decimal, en otro caso devuelve una expresion nominal. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).
(%i1) load (distrib)$
(%i2) cdf_noncentral_student_t(-2,5,-5);
(%o2) cdf_noncentral_student_t(- 2, 5, - 5)
(%i3) cdf_noncentral_student_t(-2.0,5,-5);
(%o3)
.9952030093319743

quantile_noncentral_student_t (q,n,ncp )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria no central de Student nct (n, ncp),
con n > 0 grados de libertad y parametro de no centralidad ncp; en otras palabras,
se trata de la inversa de cdf_noncentral_student_t. El argumento q debe ser un
n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_noncentral_student_t (n,ncp )

[Funcion]
Devuelve la media de una variable aleatoria no central de Student nct (n, ncp), con
n > 1 grados de libertad y parametro de no centralidad ncp. Para hacer uso de esta
funci
on, ejec
utese primero load(distrib).
(%i1) load (distrib)$
(%i2) (assume(df>1), mean_noncentral_student_t(df,k));
df - 1
gamma(------) sqrt(df) k
2

Captulo 46: distrib

(%o2)

675

-----------------------df
sqrt(2) gamma(--)
2

var_noncentral_student_t (n,ncp )

[Funcion]
Devuelve la varianza de una variable aleatoria no central de Student nct (n, ncp), con
n > 2 grados de libertad y parametro de no centralidad ncp. Para hacer uso de esta
funci
on, ejec
utese primero load(distrib).

std_noncentral_student_t (n,ncp )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria no central de Student
nct (n, ncp), con n > 2 grados de libertad y parametro de no centralidad ncp. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_noncentral_student_t (n,ncp )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria no central de Student
nct (n, ncp), con n > 3 grados de libertad y parametro de no centralidad ncp. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

kurtosis_noncentral_student_t (n,ncp )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria no central de Student
nct (n, ncp), con n > 4 grados de libertad y parametro de no centralidad ncp. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_noncentral_student_t (n,ncp )
random_noncentral_student_t (n,ncp,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio nct (n, ncp), con n > 0. Llamando a random_noncentral_
student_t con un tercer argumento m, se obtiene una muestra aleatoria simulada de
tama~
no m.
El algoritmo utilizado est
a basado en el hecho de que si X es una variable aleatoria
normal N (ncp, 1) y S 2 es una chi cuadrada de n grados de libertad, Chi2 (n), entonces
X
U=q 2
S
n

es una variable aleatoria no central de Student de n grados de libertad y parametro


de no centralidad ncp, nct (n, ncp).
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_chi2 (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria chi-cuadrado Chi2 (n), con n > 0.

La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en la funci
on de densidad de la gamma.

676

Manual de Maxima

(%i1) load (distrib)$


(%i2) pdf_chi2(x,n);
n
pdf_gamma(x, -, 2)
2
(%i3) assume(x>0, n>0)$ pdf_chi2(x,n);
n/2 - 1
- x/2
x
%e
(%o4)
---------------n/2
n
2
gamma(-)
2
(%o2)

cdf_chi2 (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria chi-cuadrado Chi2 (n), con n > 0.
(%i1) load (distrib)$
(%i2) cdf_chi2(3,4);
3
(%o2)
1 - gamma_incomplete_regularized(2, -)
2
(%i3) float(%);
(%o3)
.4421745996289256

quantile_chi2 (q,n )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Chi2 (n), con n > 0; en otras palabras,
se trata de la inversa de cdf_chi2. El argumento q debe ser un n
umero de [0, 1].
Esta funci
on no tiene expresion compacta y se calcula numericamente si la variable
global numer vale true, en otro caso devuelve una expresion nominal basada en la
funci
on cuantil de la gamma, puesto que la variable aleatoria Chi2 (n) equivale a una
Gamma(n/2, 2).
(%i1) load (distrib)$
(%i2) quantile_chi2(0.99,9);
(%o2)
21.66599433346194
(%i3) quantile_chi2(0.99,n);
n
(%o3)
quantile_gamma(0.99, -, 2)
2

mean_chi2 (n )

[Funcion]
2

Devuelve la media de una variable aleatoria Chi (n), con n > 0.


La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en la media de la gamma.
(%i1) load (distrib)$
(%i2) mean_chi2(n);
n

Captulo 46: distrib

677

(%o2)

mean_gamma(-, 2)
2
(%i3) assume(n>0)$ mean_chi2(n);
(%o4)
n

var_chi2 (n )

[Funcion]

Devuelve la varianza de una variable aleatoria Chi2 (n), con n > 0.


La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en la varianza de la gamma.
(%i1) load (distrib)$
(%i2) var_chi2(n);
n
var_gamma(-, 2)
2
(%i3) assume(n>0)$ var_chi2(n);
(%o4)
2 n
(%o2)

std_chi2 (n )

[Funcion]

Devuelve la desviaci
on tpica de una variable aleatoria Chi2 (n), con n > 0.
La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en la desviacion tpica de la gamma.
(%i1) load (distrib)$
(%i2) std_chi2(n);
n
std_gamma(-, 2)
2
(%i3) assume(n>0)$ std_chi2(n);
(%o4)
sqrt(2) sqrt(n)
(%o2)

skewness_chi2 (n )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Chi2 (n), con n > 0.

La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en el coeficiente de asimetra de la gamma.
(%i1) load (distrib)$
(%i2) skewness_chi2(n);
n
skewness_gamma(-, 2)
2
(%i3) assume(n>0)$ skewness_chi2(n);
2 sqrt(2)
(%o4)
--------sqrt(n)
(%o2)

678

Manual de Maxima

kurtosis_chi2 (n )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Chi (n), con n > 0.
La variable aleatoria Chi2 (n) equivale a una Gamma(n/2, 2), por lo que cuando
Maxima no tiene suficiente informacion para obtener el resultado, devuelve una forma
nominal basada en el coeficiente de curtosis de la gamma.
(%i1) load (distrib)$
(%i2) kurtosis_chi2(n);
n
(%o2)
kurtosis_gamma(-, 2)
2
(%i3) assume(n>0)$ kurtosis_chi2(n);
12
(%o4)
-n
2

random_chi2 (n )
random_chi2 (n,m )

[Funcion]
[Funcion]
2
Devuelve un valor aleatorio Chi (n), con n > 0. Llamando a random_chi2 con un
segundo argumento m, se simulara una muestra aleatoria de tama~
no m.
La simulaci
on est
a basada en el algoritmo de Ahrens-Cheng. Vease random_gamma
para m
as detalles.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_noncentral_chi2 (x,n,ncp )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable aleatoria chi-cuadrado no centrada ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad
ncp >= 0. Para hacer uso de esta funcion ejec
utese primero load(distrib).

cdf_noncentral_chi2 (x,n,ncp )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria chi-cuadrado no centrada ncC hi2 (n, ncp), con n > 0 y parametro de no
centralidad ncp >= 0.

quantile_noncentral_chi2 (q,n,ncp )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria chi-cuadrado no centrada
ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad ncp >= 0; en otras
palabras, se trata de la inversa de cdf_noncentral_chi2. El argumento q debe ser
un n
umero de [0, 1].
Esta funci
on no tiene expresion compacta y se calcula numericamente si la variable
global numer vale true, en otro caso devuelve una expresion nominal.

mean_noncentral_chi2 (n,ncp )

[Funcion]
Devuelve la media de una variable aleatoria chi-cuadrado no centrada ncC hi2 (n, ncp),
con n > 0 y par
ametro de no centralidad ncp >= 0.

var_noncentral_chi2 (n,ncp )

[Funcion]
Devuelve la varianza de una variable aleatoria chi-cuadrado no centrada
ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad ncp >= 0.

Captulo 46: distrib

679

std_noncentral_chi2 (n,ncp )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria chi-cuadrado no centrada
ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad ncp >= 0.

skewness_noncentral_chi2 (n,ncp )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria chi-cuadrado no centrada
ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad ncp >= 0.

kurtosis_noncentral_chi2 (n,ncp )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria chi-cuadrado no centrada
ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad ncp >= 0.

random_noncentral_chi2 (n,ncp )
random_noncentral_chi2 (n,ncp,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio ncC hi2 (n, ncp), con n > 0 y parametro de no centralidad
ncp >= 0. Llamando a random_noncentral_chi2 con un tercer argumento m, se
simular
a una muestra aleatoria de tama~
no m.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_f (x,m,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria F (m, n), con m, n > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_f (x,m,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria F (m, n), con m, n > 0.
(%i1) load (distrib)$
(%i2) cdf_f(2,3,9/4);
9 3 3
(%o2)
1 - beta_incomplete_regularized(-, -, --)
8 2 11
(%i3) float(%);
(%o3)
0.66756728179008

quantile_f (q,m,n )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria F (m, n), con m, n > 0; en otras
palabras, se trata de la inversa de cdf_f. El argumento q debe ser un n
umero de
[0, 1].
Esta funci
on no tiene expresion compacta, por lo que es evaluada numericamente si
la variable global numer vale true, en caso contrario devuelve una forma nominal.
(%i1) load (distrib)$
(%i2) quantile_f(2/5,sqrt(3),5);
2
(%o2)
quantile_f(-, sqrt(3), 5)
5
(%i3) %,numer;
(%o3)
0.518947838573693

680

Manual de Maxima

mean_f (m,n )

[Funcion]
Devuelve la media de una variable aleatoria F (m, n), con m > 0, n > 2. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_f (m,n )

[Funcion]
Devuelve la varianza de una variable aleatoria F (m, n), con m > 0, n > 4. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_f (m,n )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria F (m, n), con m > 0, n > 4.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_f (m,n )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria F (m, n), con m > 0, n >
6. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_f (m,n )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria F (m, n), con m > 0, n > 8.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_f (m,n )
random_f (m,n,k )

[Funcion]
[Funcion]
Devuelve un valor aleatorio F (m, n), con m, n > 0. Llamando a random_f con un
tercer argumento k, se simulara una muestra aleatoria de tama~
no k.
El algoritmo de simulaci
on esta basado en el hecho de que si X es una variable
aleatoria Chi2 (m) y Y es una Chi2 (n), entonces
F =

nX
mY

es una variable aleatoria F con m y n grados de libertad, F (m, n).


Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_exp (x,m )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria Exponencial (m), con m > 0.
La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en la densidad de Weibull.
(%i1) load (distrib)$
(%i2) pdf_exp(x,m);
1
(%o2)
pdf_weibull(x, 1, -)
m
(%i3) assume(x>0,m>0)$ pdf_exp(x,m);
- m x
(%o4)
m %e

Captulo 46: distrib

681

cdf_exp (x,m )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Exponencial (m), con m > 0.
La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en la distribucion de Weibull.
(%i1) load (distrib)$
(%i2) cdf_exp(x,m);
1
(%o2)
cdf_weibull(x, 1, -)
m
(%i3) assume(x>0,m>0)$ cdf_exp(x,m);
- m x
(%o4)
1 - %e

quantile_exp (q,m )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Exponencial (m), con m > 0; en otras
palabras, se trata de la inversa de cdf_exp. El argumento q debe ser un n
umero de
[0, 1].
La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en el cuantil de la Weibull.
(%i1) load (distrib)$
(%i2) quantile_exp(0.56,5);
(%o2)
.1641961104139661
(%i3) quantile_exp(0.56,m);
1
(%o3)
quantile_weibull(0.56, 1, -)
m

mean_exp (m )

[Funcion]
Devuelve la media de una variable aleatoria Exponencial (m), con m > 0.
La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en la media de la Weibull.
(%i1) load (distrib)$
(%i2) mean_exp(m);
1
(%o2)
mean_weibull(1, -)
m
(%i3) assume(m>0)$ mean_exp(m);
1
(%o4)
m

var_exp (m )
Devuelve la varianza de una variable aleatoria Exponencial (m), con m > 0.

[Funcion]

682

Manual de Maxima

La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en la varianza de la Weibull.
(%i1) load (distrib)$
(%i2) var_exp(m);
(%o2)
(%i3) assume(m>0)$
(%o4)

1
var_weibull(1, -)
m
var_exp(m);
1
-2
m

std_exp (m )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Exponencial (m), con m > 0.

La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en la desviacion tpica de la Weibull.
(%i1) load (distrib)$
(%i2) std_exp(m);
(%o2)
(%i3) assume(m>0)$
(%o4)

1
std_weibull(1, -)
m
std_exp(m);
1
m

skewness_exp (m )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Exponencial (m), con
m > 0.

La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en el coeficiente de asimetra de la Weibull.
(%i1) load (distrib)$
(%i2) skewness_exp(m);
(%o2)
(%i3) assume(m>0)$
(%o4)

kurtosis_exp (m )

1
skewness_weibull(1, -)
m
skewness_exp(m);
2

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Exponencial (m), con m > 0.

Captulo 46: distrib

683

La variable aleatoria Exponencial (m) equivale a una Weibull (1, 1/m), por lo que
si Maxima no tiene suficiente informacion para calcular el resultado, devolvera una
forma nominal basada en el coeficiente de curtosis de la Weibull.
(%i1) load (distrib)$
(%i2) kurtosis_exp(m);
1
(%o2)
kurtosis_weibull(1, -)
m
(%i3) assume(m>0)$ kurtosis_exp(m);
(%o4)
6

random_exp (m )
random_exp (m,k )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Exponencial (m), con m > 0. Llamando a random_exp2
con un segundo argumento k, se simulara una muestra aleatoria de tama~
no k.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_lognormal (x,m,s )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria Lognormal (m, s), con s > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_lognormal (x,m,s )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Lognormal (m, s), con s > 0. Esta funcion se define en terminos de la funcion
de error, erf, de Maxima.
(%i1) load (distrib)$
(%i2) assume(x>0, s>0)$ cdf_lognormal(x,m,s);
log(x) - m
erf(----------)
sqrt(2) s
1
(%o3)
--------------- + 2
2
Vease tambien erf.

quantile_lognormal (q,m,s )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Lognormal (m, s), con s > 0; en otras
palabras, se trata de la inversa de cdf_lognormal. El argumento q debe ser un
n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_lognormal (m,s )

[Funcion]
Devuelve la media de una variable aleatoria Lognormal (m, s), con s > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_lognormal (m,s )

[Funcion]
Devuelve la varianza de una variable aleatoria Lognormal (m, s), con s > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

684

Manual de Maxima

std_lognormal (m,s )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Lognormal (m, s), con s > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_lognormal (m,s )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Lognormal (m, s), con
s > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_lognormal (m,s )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Lognormal (m, s), con s > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_lognormal (m,s )
random_lognormal (m,s,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Lognormal (m, s), con s > 0. Llamando a random_
lognormal con un tercer argumento n, se simulara una muestra aleatoria de tama~
no
n.
Las variables lognormales se simulan mediante variables normales. Vease random_
normal para m
as detalles.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_gamma (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria Gamma(a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_gamma (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Gamma(a, b), con a, b > 0.
(%i1) load (distrib)$
(%i2) cdf_gamma(3,5,21);
1
(%o2)
1 - gamma_incomplete_regularized(5, -)
7
(%i3) float(%);
(%o3)
4.402663157376807E-7

quantile_gamma (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Gamma(a, b), con a, b > 0; en otras
palabras, se trata de la inversa de cdf_gamma. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_gamma (a,b )

[Funcion]
Devuelve la media de una variable aleatoria Gamma(a, b), con a, b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_gamma (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria Gamma(a, b), con a, b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

Captulo 46: distrib

685

std_gamma (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Gamma(a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_gamma (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Gamma(a, b), con a, b >
0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_gamma (a,b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Gamma(a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_gamma (a,b )
random_gamma (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Gamma(a, b), con a, b > 0. Llamando a random_gamma
con un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on es una combinacion de dos procedimientos, seg
un sea el
valor del par
ametro a:
Para a >= 1, Cheng, R.C.H. y Feast, G.M. (1979). Some simple gamma variate
generators. Appl. Stat., 28, 3, 290-295.
Para 0 < a < 1, Ahrens, J.H. y Dieter, U. (1974). Computer methods for sampling
from gamma, beta, poisson and binomial distributions. Computing, 12, 223-246.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_beta (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria Beta(a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_beta (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Beta(a, b), con a, b > 0.
(%i1) load (distrib)$
(%i2) cdf_beta(1/3,15,2);
11
(%o2)
-------14348907
(%i3) float(%);
(%o3)
7.666089131388195E-7

quantile_beta (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Beta(a, b), con a, b > 0; en otras
palabras, se trata de la inversa de cdf_beta. El argumento q debe ser un n
umero de
[0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_beta (a,b )

[Funcion]
Devuelve la media de una variable aleatoria Beta(a, b), con a, b > 0. Para hacer uso
de esta funci
on, ejec
utese primero load(distrib).

686

Manual de Maxima

var_beta (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria Beta(a, b), con a, b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_beta (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Beta(a, b), con a, b > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_beta (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Beta(a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

kurtosis_beta (a,b )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria Beta(a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_beta (a,b )
random_beta (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Beta(a, b), con a, b > 0. Llamando a random_beta con
un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on es el decrito en Cheng, R.C.H. (1978). Generating Beta
Variates with Nonintegral Shape Parameters. Communications of the ACM, 21:317322.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_continuous_uniform (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable aleatoria Uniforme Continua(a, b), con a < b. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_continuous_uniform (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable aleatoria Uniforme Continua(a, b), con a < b. Para hacer uso de esta funcion,
ejec
utese primero load(distrib).

quantile_continuous_uniform (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Uniforme Continua(a, b), con a < b;
en otras palabras, se trata de la inversa de cdf_continuous_uniform. El argumento
q debe ser un n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

mean_continuous_uniform (a,b )

[Funcion]
Devuelve la media de una variable aleatoria Uniforme Continua(a, b), con a < b. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

var_continuous_uniform (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria Uniforme Continua(a, b), con a < b.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

Captulo 46: distrib

687

std_continuous_uniform (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Uniforme Continua(a, b), con
a < b. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

skewness_continuous_uniform (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Uniforme Continua(a, b),
con a < b. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_continuous_uniform (a,b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Uniforme Continua(a, b),
con a < b. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_continuous_uniform (a,b )
random_continuous_uniform (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Uniforme Continuo(a, b), con a < b. Llamando a random_
continuous_uniform con un tercer argumento n, se simulara una muestra aleatoria
de tama~
no n.
Esta funci
on es una aplicaci
on directa de la funcion random de Maxima.
Vease tambien random.
Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

pdf_logistic (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria Logstica(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_logistic (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Logstica(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

quantile_logistic (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Logstica(a, b), con b > 0; en otras
palabras, se trata de la inversa de cdf_logistic. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_logistic (a,b )

[Funcion]
Devuelve la media de una variable aleatoria Logstica(a, b), con b > 0. Para hacer uso
de esta funci
on, ejec
utese primero load(distrib).

var_logistic (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria Logstica(a, b), con b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_logistic (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Logstica(a, b), con b > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_logistic (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Logstica(a, b), con b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

688

Manual de Maxima

kurtosis_logistic (a,b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria Logstica(a, b), con b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_logistic (a,b )
random_logistic (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Logstico(a, b), con b > 0. Llamando a random_logistic
con un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_pareto (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Pareto(a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_pareto (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Pareto(a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

quantile_pareto (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Pareto(a, b), con a, b > 0; en otras
palabras, se trata de la inversa de cdf_pareto. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_pareto (a,b )

[Funcion]
Devuelve la media de una variable aleatoria de Pareto(a, b), con a > 1, b > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

var_pareto (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria de Pareto(a, b), con a > 2, b > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

std_pareto (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Pareto(a, b), con a > 2, b >
0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

skewness_pareto (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Pareto(a, b), con
a > 3, b > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_pareto (a,b )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria de Pareto(a, b), con a >
4, b > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_pareto (a,b )
random_pareto (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Pareto(a, b), con a > 0, b > 0. Llamando a random_
pareto con un tercer argumento n, se simulara una muestra aleatoria de tama~
no
n.

Captulo 46: distrib

689

El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_weibull (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Weibull (a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_weibull (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Weibull (a, b), con a, b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

quantile_weibull (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Weibull (a, b), con a, b > 0; en otras
palabras, se trata de la inversa de cdf_weibull. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_weibull (a,b )

[Funcion]
Devuelve la media de una variable aleatoria de Weibull (a, b), con a, b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_weibull (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria de Weibull (a, b), con a, b > 0. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

std_weibull (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Weibull (a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_weibull (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Weibull (a, b), con
a, b > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_weibull (a,b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria de Weibull (a, b), con a, b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_weibull (a,b )
random_weibull (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Weibull (a, b), con a, b > 0. Llamando a random_weibull
con un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_rayleigh (x,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Rayleigh(b), con b > 0.
La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la densidad de la Weibull.

690

Manual de Maxima

(%i1) load (distrib)$


(%i2) pdf_rayleigh(x,b);
1
pdf_weibull(x, 2, -)
b
(%i3) assume(x>0,b>0)$ pdf_rayleigh(x,b);
2 2
2
- b x
(%o4)
2 b x %e
(%o2)

cdf_rayleigh (x,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Rayleigh(b), con b > 0.

La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la distribuci
on de la Weibull.
(%i1) load (distrib)$
(%i2) cdf_rayleigh(x,b);
1
cdf_weibull(x, 2, -)
b
(%i3) assume(x>0,b>0)$ cdf_rayleigh(x,b);
2 2
- b x
(%o4)
1 - %e
(%o2)

quantile_rayleigh (q,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Rayleigh(b), con b > 0; en otras
palabras, se trata de la inversa de cdf_rayleigh. El argumento q debe ser un n
umero
de [0, 1].
La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en los cuantiles de la Weibull.
(%i1) load (distrib)$
(%i2) quantile_rayleigh(0.99,b);
1
quantile_weibull(0.99, 2, -)
b
(%i3) assume(x>0,b>0)$ quantile_rayleigh(0.99,b);
2.145966026289347
(%o4)
----------------b
(%o2)

mean_rayleigh (b )
Devuelve la media de una variable aleatoria de Rayleigh(b), con b > 0.

[Funcion]

Captulo 46: distrib

691

La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la media de la Weibull.
(%i1) load (distrib)$
(%i2) mean_rayleigh(b);
1
(%o2)
mean_weibull(2, -)
b
(%i3) assume(b>0)$ mean_rayleigh(b);
sqrt(%pi)
(%o4)
--------2 b

var_rayleigh (b )

[Funcion]

Devuelve la varianza de una variable aleatoria de Rayleigh(b), con b > 0.


La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la varianza de la Weibull.
(%i1) load (distrib)$
(%i2) var_rayleigh(b);
1
(%o2)
var_weibull(2, -)
b
(%i3) assume(b>0)$ var_rayleigh(b);
%pi
1 - --4
(%o4)
------2
b

std_rayleigh (b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Rayleigh(b), con b > 0.
La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la desviaci
on tpica de la Weibull.
(%i1) load (distrib)$
(%i2) std_rayleigh(b);
1
(%o2)
std_weibull(2, -)
b
(%i3) assume(b>0)$ std_rayleigh(b);
%pi
sqrt(1 - ---)
4
(%o4)
------------b

692

Manual de Maxima

skewness_rayleigh (b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Rayleigh(b), con
b > 0.
La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en el coeficiente de asimetra de la Weibull.
(%i1) load (distrib)$
(%i2) skewness_rayleigh(b);
1
(%o2)
skewness_weibull(2, -)
b
(%i3) assume(b>0)$ skewness_rayleigh(b);
3/2
%pi
3 sqrt(%pi)
------ - ----------4
4
(%o4)
-------------------%pi 3/2
(1 - ---)
4

kurtosis_rayleigh (b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria de Rayleigh(b), con b > 0.
La variable aleatoria Rayleigh(b) equivale a una Weibull (2, 1/b), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en el coeficiente de curtosis de la Weibull.
(%i1) load (distrib)$
(%i2) kurtosis_rayleigh(b);
1
(%o2)
kurtosis_weibull(2, -)
b
(%i3) assume(b>0)$ kurtosis_rayleigh(b);
2
3 %pi
2 - -----16
(%o4)
---------- - 3
%pi 2
(1 - ---)
4

random_rayleigh (b )
random_rayleigh (b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Rayleigh(b), con b > 0. Llamando a random_rayleigh
con un segundo argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

Captulo 46: distrib

693

pdf_laplace (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Laplace(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_laplace (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Laplace(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

quantile_laplace (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Laplace(a, b), con b > 0; en otras
palabras, se trata de la inversa de cdf_laplace. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_laplace (a,b )

[Funcion]
Devuelve la media de una variable aleatoria de Laplace(a, b), con b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_laplace (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria de Laplace(a, b), con b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_laplace (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Laplace(a, b), con b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_laplace (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Laplace(a, b), con
b > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_laplace (a,b )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria de Laplace(a, b), con b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

random_laplace (a,b )
random_laplace (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Laplace(a, b), con b > 0. Llamando a random_laplace
con un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_cauchy (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Cauchy(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_cauchy (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Cauchy(a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

694

Manual de Maxima

quantile_cauchy (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Cauchy(a, b), con b > 0; en otras
palabras, se trata de la inversa de cdf_cauchy. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_cauchy (a,b )
random_cauchy (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Cauchy(a, b), con b > 0. Llamando a random_cauchy con
un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_gumbel (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria de Gumbel (a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_gumbel (x,a,b )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Gumbel (a, b), con b > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

quantile_gumbel (q,a,b )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Gumbel (a, b), con b > 0; en otras
palabras, se trata de la inversa de cdf_gumbel. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_gumbel (a,b )

[Funcion]

Devuelve la media de una variable aleatoria de Gumbel (a, b), con b > 0.
(%i1) load (distrib)$
(%i2) assume(b>0)$ mean_gumbel(a,b);
(%o3)
%gamma b + a
donde el smbolo %gamma representa la constante de Euler-Mascheroni. Vease tambien
%gamma.

var_gumbel (a,b )

[Funcion]
Devuelve la varianza de una variable aleatoria de Gumbel (a, b), con b > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_gumbel (a,b )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Gumbel (a, b), con b > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_gumbel (a,b )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Gumbel (a, b), con
b > 0.
(%i1) load (distrib)$
(%i2) assume(b>0)$ skewness_gumbel(a,b);

Captulo 46: distrib

695

12 sqrt(6) zeta(3)
(%o3)
-----------------3
%pi
(%i4) numer:true$ skewness_gumbel(a,b);
(%o5)
1.139547099404649
donde zeta representa la funcion zeta de Riemann.

kurtosis_gumbel (a,b )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria de Gumbel (a, b), con
b > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_gumbel (a,b )
random_gumbel (a,b,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Gumbel (a, b), con b > 0. Llamando a random_gumbel con
un tercer argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on esta basado en el metodo inverso.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

46.3 Funciones y variables para distribuciones discretas


pdf_general_finite_discrete (x,v )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de densidad de una variable
aleatoria general discreta finita, con vector de probabilidades v, tal que Pr(X=i) =
v_i. El vector v puede ser una lista de expresiones no negativas, cuyas componentes
se normalizar
an para obtener un vector de probabilidades. Para hacer uso de esta
funci
on, ejec
utese primero load(distrib).
(%i1) load (distrib)$
(%i2) pdf_general_finite_discrete(2, [1/7, 4/7, 2/7]);
4
(%o2)
7
(%i3) pdf_general_finite_discrete(2, [1, 4, 2]);
4
(%o3)
7

cdf_general_finite_discrete (x,v )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria general discreta finita, con vector de probabilidades v.
Vease pdf_general_finite_discrete para mas detalles.
(%i1) load (distrib)$
(%i2) cdf_general_finite_discrete(2, [1/7, 4/7, 2/7]);
5
(%o2)
7

696

Manual de Maxima

(%i3) cdf_general_finite_discrete(2, [1, 4, 2]);


5
(%o3)
7
(%i4) cdf_general_finite_discrete(2+1/2, [1, 4, 2]);
5
(%o4)
7

quantile_general_finite_discrete (q,v )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria general discreta finita, con vector de
probabilidades v.
Vease pdf_general_finite_discrete para mas detalles.

mean_general_finite_discrete (v )

[Funcion]
Devuelve la media de una variable aleatoria general discreta finita, con vector de
probabilidades v.

Vease pdf_general_finite_discrete para mas detalles.

var_general_finite_discrete (v )

[Funcion]
Devuelve la varianza de una variable aleatoria general discreta finita, con vector de
probabilidades v.
Vease pdf_general_finite_discrete para mas detalles.

std_general_finite_discrete (v )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria general discreta finita, con
vector de probabilidades v.

Vease pdf_general_finite_discrete para mas detalles.

skewness_general_finite_discrete (v )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria general discreta finita,
con vector de probabilidades v.
Vease pdf_general_finite_discrete para mas detalles.

kurtosis_general_finite_discrete (v )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria general discreta finita,
con vector de probabilidades v.
Vease pdf_general_finite_discrete para mas detalles.

random_general_finite_discrete (v )
random_general_finite_discrete (v,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio de una variable aleatoria general discreta finita, con vector
de probabilidades v. Llamando a random_general_finite_discrete con un segundo
argumento n, se simular
a una muestra aleatoria de tama~
no n.
Vease pdf_general_finite_discrete para mas detalles.
(%i1) load (distrib)$
(%i2) random_general_finite_discrete([1,3,1,5]);

Captulo 46: distrib

697

(%o2)
4
(%i3) random_general_finite_discrete([1,3,1,5], 10);
(%o3)
[4, 2, 2, 3, 2, 4, 4, 1, 2, 2]

pdf_binomial (x,n,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria Binomial (n, p), con 0 < p < 1 y n entero positivo. Para hacer uso de esta
funci
on, ejec
utese primero load(distrib).

cdf_binomial (x,n,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Binomial (n, p), con 0 < p < 1 y n entero positivo.
(%i1) load (distrib)$
(%i2) cdf_binomial(5,7,1/6);
7775
(%o2)
---7776
(%i3) float(%);
(%o3)
.9998713991769548

quantile_binomial (q,n,p )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Binomial (n, p), con 0 < p < 1 y
n entero positivo; en otras palabras, se trata de la inversa de cdf_binomial. El
argumento q debe ser un n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

mean_binomial (n,p )

[Funcion]
Devuelve la media de una variable aleatoria Binomial (n, p), con 0 < p < 1 y n entero
positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

var_binomial (n,p )

[Funcion]
Devuelve la varianza de una variable aleatoria Binomial (n, p), con 0 < p < 1 y n
entero positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

std_binomial (n,p )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Binomial (n, p), con 0 < p < 1
y n entero positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

skewness_binomial (n,p )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Binomial (n, p), con
0 < p < 1 y n entero positivo. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

kurtosis_binomial (n,p )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria binomial Binomial (n, p),
con 0 < p < 1 y n entero positivo. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

698

Manual de Maxima

random_binomial (n,p )
random_binomial (n,p,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Binomial (n, p), con 0 < p < 1 y n entero positivo.
Llamando a random_binomial con un tercer argumento m, se simulara una muestra
aleatoria de tama~
no m.
El algoritmo de simulaci
on es el descrito en Kachitvichyanukul, V. y Schmeiser, B.W.
(1988) Binomial Random Variate Generation. Communications of the ACM, 31, Feb.,
216.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_poisson (x,m )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria de Poisson(m), con m > 0. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

cdf_poisson (x,m )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Poisson(m), con m > 0.
(%i1) load (distrib)$
(%i2) cdf_poisson(3,5);
(%o2)
gamma_incomplete_regularized(4, 5)
(%i3) float(%);
(%o3)
.2650259152973623

quantile_poisson (q,m )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Poisson(m), con m > 0; en otras
palabras, se trata de la inversa de cdf_poisson. El argumento q debe ser un n
umero
de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_poisson (m )

[Funcion]
Devuelve la media de una variable aleatoria de Poisson(m), con m > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

var_poisson (m )

[Funcion]
Devuelve la varianza de una variable aleatoria de Poisson(m), con m > 0. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

std_poisson (m )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Poisson(m), con m > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_poisson (m )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Poisson(m), con
m > 0. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_poisson (m )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria de Poisson(m), con m > 0.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

Captulo 46: distrib

699

random_poisson (m )
random_poisson (m,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Poisson(m), con m > 0. Llamando a random_poisson
con un segundo argumento n, se simulara una muestra aleatoria de tama~
no n.
El algoritmo de simulaci
on es el descrito en Ahrens, J.H. and Dieter, U. (1982) Computer Generation of Poisson Deviates From Modified Normal Distributions. ACM
Trans. Math. Software, 8, 2, June,163-179.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

pdf_bernoulli (x,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria de Bernoulli (p), con 0 < p < 1.
La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la funci
on de probabilidad de la binomial.
(%i1) load (distrib)$
(%i2) pdf_bernoulli(1,p);
(%o2)
pdf_binomial(1, 1, p)
(%i3) assume(0<p,p<1)$ pdf_bernoulli(1,p);
(%o4)
p

cdf_bernoulli (x,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria de Bernoulli (p), con 0 < p < 1. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

quantile_bernoulli (q,p )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria de Bernoulli (p), con 0 < p < 1; en
otras palabras, se trata de la inversa de cdf_bernoulli. El argumento q debe ser un
n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_bernoulli (p )

[Funcion]
Devuelve la media de una variable aleatoria de Bernoulli (p), con 0 < p < 1.
La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la media de la binomial.
(%i1) load (distrib)$
(%i2) mean_bernoulli(p);
(%o2)
mean_binomial(1, p)
(%i3) assume(0<p,p<1)$ mean_bernoulli(p);
(%o4)
p

var_bernoulli (p )

[Funcion]
Devuelve la varianza de una variable aleatoria de Bernoulli (p), con 0 < p < 1.
La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la varianza de la binomial.

700

Manual de Maxima

(%i1) load (distrib)$


(%i2) var_bernoulli(p);
(%o2)
var_binomial(1, p)
(%i3) assume(0<p,p<1)$ var_bernoulli(p);
(%o4)
(1 - p) p

std_bernoulli (p )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria de Bernoulli (p), con 0 < p < 1.

La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en la desviaci
on tpica de la binomial.
(%i1) load (distrib)$
(%i2) std_bernoulli(p);
(%o2)
std_binomial(1, p)
(%i3) assume(0<p,p<1)$ std_bernoulli(p);
(%o4)
sqrt(1 - p) sqrt(p)

skewness_bernoulli (p )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria de Bernoulli (p), con
0 < p < 1.

La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en el coeficiente de asimetra de la binomial.
(%i1) load (distrib)$
(%i2) skewness_bernoulli(p);
(%o2)
skewness_binomial(1, p)
(%i3) assume(0<p,p<1)$ skewness_bernoulli(p);
1 - 2 p
(%o4)
------------------sqrt(1 - p) sqrt(p)

kurtosis_bernoulli (p )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria de Bernoulli (p), con 0 <
p < 1.

La variable aleatoria Bernoulli (p) equivale a una Binomial (1, p), por lo que si Maxima
no tiene suficiente informaci
on para calcular el resultado, devolvera una forma nominal
basada en el coeficiente de curtosis de la binomial.
(%i1) load (distrib)$
(%i2) kurtosis_bernoulli(p);
(%o2)
kurtosis_binomial(1, p)
(%i3) assume(0<p,p<1)$ kurtosis_bernoulli(p);
1 - 6 (1 - p) p
(%o4)
--------------(1 - p) p

Captulo 46: distrib

701

random_bernoulli (p )
random_bernoulli (p,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Bernoulli (p), con 0 < p < 1. Llamando a random_
bernoulli con un segundo argumento n, se simulara una muestra aleatoria de tama~
no
n.
Es aplicaci
on directa de la funcion random de Maxima.
Vease tambien random.
Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

pdf_geometric (x,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria Geometrica(p), con 0 < p < 1. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

cdf_geometric (x,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Geometrica(p), con 0 < p < 1. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

quantile_geometric (q,p )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Geometrica(p), con 0 < p < 1; en
otras palabras, se trata de la inversa de cdf_geometric. El argumento q debe ser un
n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

mean_geometric (p )

[Funcion]
Devuelve la media de una variable aleatoria Geometrica(p), con 0 < p < 1. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

var_geometric (p )

[Funcion]
Devuelve la varianza de una variable aleatoria Geometrica(p), con 0 < p < 1. Para
hacer uso de esta funci
on, ejec
utese primero load(distrib).

std_geometric (p )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Geometrica(p), con 0 < p < 1.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

skewness_geometric (p )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Geometrica(p), con
0 < p < 1. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

kurtosis_geometric (p )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria Geometrica(p), con 0 <
p < 1. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_geometric (p )
random_geometric (p,n )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Geometrico(p), con 0 < p < 1. Llamando a random_
geometric con un segundo argumento n, se simulara una muestra aleatoria de tama~
no
n.
El algoritmo est
a basado en la simulacion de ensayos de Bernoulli.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

702

Manual de Maxima

pdf_discrete_uniform (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria Uniforme Discreta(n), con n entero positivo. Para hacer uso de esta funcion,
ejec
utese primero load(distrib).

cdf_discrete_uniform (x,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Uniforme Discreta(n), con n entero positivo. Para hacer uso de esta funcion,
ejec
utese primero load(distrib).

quantile_discrete_uniform (q,n )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Uniforme Discreta(n), con n entero
positivo; en otras palabras, se trata de la inversa de cdf_discrete_uniform. El
argumento q debe ser un n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

mean_discrete_uniform (n )

[Funcion]
Devuelve la media de una variable aleatoria Uniforme Discreta(n), con n entero
positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

var_discrete_uniform (n )

[Funcion]
Devuelve la varianza de una variable aleatoria Uniforme Discreta(n), con n entero
positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

std_discrete_uniform (n )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Uniforme Discreta(n), con n
entero positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

skewness_discrete_uniform (n )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Uniforme Discreta(n),
con n entero positivo.
Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

kurtosis_discrete_uniform (n )

[Funcion]
Devuelve el coeficiente de curtosis de una variable aleatoria Uniforme Discreta(n), con
n entero positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

random_discrete_uniform (n )
random_discrete_uniform (n,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio U nif ormeDiscreto(n), con n entero positivo. Llamando
a random_discrete_uniform con un segundo argumento m, se simulara una muestra
aleatoria de tama~
no m.
Se trata de una aplicaci
on directa de la funcion random de Maxima.
Vease tambien random.
load(distrib).

Para hacer uso de esta funcion, ejec


utese primero

pdf_hypergeometric (x,n1,n2,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria Hipergeometrica(n1, n2, n), con n1, n2 y n enteros positivos y n <= n1+n2.

Captulo 46: distrib

703

Siendo n1 el n
umero de objetos de la clase A, n2 el n
umero de objetos de la clase B y n
el tama~
no de una muestra sin reemplazamiento, esta funcion devuelve la probabilidad
del suceso "extraer exactamente x objetos de la clase A".
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

cdf_hypergeometric (x,n1,n2,n )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion of una variable
aleatoria Hipergeometrica(n1, n2, n), con n1, n2 y n enteros positivos y n <= n1+n2.
Vease pdf_hypergeometric para una descripcion mas completa.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

quantile_hypergeometric (q,n1,n2,n )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Hipergeometrica(n1, n2, n), con n1, n2
y n enteros positivos y n <= n1 + n2; en otras palabras, se trata de la inversa de
cdf_hypergeometric. El argumento q debe ser un n
umero de [0, 1]. Para hacer uso
de esta funci
on, ejec
utese primero load(distrib).

mean_hypergeometric (n1,n2,n )

[Funcion]
Devuelve la media de una variable aleatoria uniforme discreta Hyp(n1, n2, n), con n1,
n2 y n enteros positivos y n <= n1 + n2. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

var_hypergeometric (n1,n2,n )

[Funcion]
Devuelve la varianza de una variable aleatoria Hipergeometrica(n1, n2, n), con n1, n2
y n enteros positivos y n <= n1 + n2. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

std_hypergeometric (n1,n2,n )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Hipergeometrica(n1, n2, n),
con n1, n2 y n enteros positivos y n <= n1 + n2. Para hacer uso de esta funcion,
ejec
utese primero load(distrib).

skewness_hypergeometric (n1,n2,n )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Hipergeometrica(n1, n2, n), con n1, n2 y n enteros positivos y n <= n1 + n2. Para hacer
uso de esta funci
on, ejec
utese primero load(distrib).

random_hypergeometric (n1,n2,n )
random_hypergeometric (n1,n2,n,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Hipergeometrico(n1, n2, n), con n1, n2 y n enteros positivos y n <= n1+n2. Llamando a random_hypergeometric con un cuarto argumento
m, se simular
a una muestra aleatoria de tama~
no m.
Algoritmo descrito en Kachitvichyanukul, V., Schmeiser, B.W. (1985) Computer generation of hypergeometric random variates. Journal of Statistical Computation and
Simulation 22, 127-145.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

704

Manual de Maxima

pdf_negative_binomial (x,n,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de probabilidad de una variable
aleatoria Binomial Negativa(n, p), con 0 < p < 1 y n positivo. Para hacer uso de esta
funci
on, ejec
utese primero load(distrib).

cdf_negative_binomial (x,n,p )

[Funcion]
Devuelve el valor correspondiente a x de la funcion de distribucion de una variable
aleatoria Binomial Negativa(n, p), con 0 < p < 1 y n positivo.
(%i1) load (distrib)$
(%i2) cdf_negative_binomial(3,4,1/8);
3271
(%o2)
-----524288
(%i3) float(%);
(%o3)
.006238937377929687

quantile_negative_binomial (q,n,p )

[Funcion]
Devuelve el q-cuantil de una variable aleatoria Binomial Negativa(n, p), con 0 < p < 1
y n positivo; en otras palabras, se trata de la inversa de cdf_negative_binomial. El
argumento q debe ser un n
umero de [0, 1]. Para hacer uso de esta funcion, ejec
utese
primero load(distrib).

mean_negative_binomial (n,p )

[Funcion]
Devuelve la media de una variable aleatoria Binomial Negativa(n, p), con 0 < p < 1
and n positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

var_negative_binomial (n,p )

[Funcion]
Devuelve la varianza de una variable aleatoria Binomial Negativa(n, p), con 0 < p < 1
and n positivo. Para hacer uso de esta funcion, ejec
utese primero load(distrib).

std_negative_binomial (n,p )

[Funcion]
Devuelve la desviaci
on tpica de una variable aleatoria Binomial Negativa(n, p), con
0 < p < 1 and n positivo. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

skewness_negative_binomial (n,p )

[Funcion]
Devuelve el coeficiente de asimetra de una variable aleatoria Binomial Negativa(n, p),
con 0 < p < 1 and n positivo. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

kurtosis_negative_binomial (n,p )

[Funcion]
Devuelve el coeficiente de curtosis una variable aleatoria binomial negativa N B(n, p),
con 0 < p < 1 and n positivo. Para hacer uso de esta funcion, ejec
utese primero
load(distrib).

random_negative_binomial (n,p )
random_negative_binomial (n,p,m )

[Funcion]
[Funcion]
Devuelve un valor aleatorio Binomial Negativo(n, p), con 0 < p < 1 y n positivo.
Llamando a random_negative_binomial con un tercer argumento m, se simular
a
una muestra aleatoria de tama~
no m.

Captulo 46: distrib

705

Algoritmo descrito en Devroye, L. (1986) Non-Uniform Random Variate Generation.


Springer Verlag, p. 480.
Para hacer uso de esta funci
on, ejec
utese primero load(distrib).

Captulo 47: draw

707

47 draw
47.1 Introducci
on a draw
draw es un interfaz para comunicar Maxima con Gnuplot.
Tres son las funciones principales a utilizar a nivel de Maxima: draw2d, draw3d y draw.
Sgase este enlace para ver ejemplos mas elaborados de este paquete:
http://riotorto.users.sourceforge.net/gnuplot
Se necesita tener instalado Gnuplot 4.2 o superior para ejecutar este paquete.

47.2 Funciones y variables para draw


47.2.1 Escenas
gr2d (Opci
on gr
afica, ..., graphic_object, ...)

[Constructor de escena]
La funci
on gr2d construye un objeto que describe una escena 2d. Los argumentos son
opciones gr
aficas y objetos gr
aficos o listas que contengan elementos de ambos tipos.
Esta escena se interpreta secuencialmente: las opciones gr
aficas afectan a aquellos
objetos gr
aficos colocados a su derecha. Algunas opciones gr
aficas afectan al aspecto
global de la escena.
La lista de objetos gr
aficos disponibles para escenas en dos dimensiones: bars,
ellipse, explicit, image, implicit, label, parametric, points, polar, polygon,
quadrilateral, rectangle, triangle, vector y geomap (este u
ltimo definido en el
paquete worldmap).
Veanse tambien draw y draw2d.
Para utilizar este objecto, ejec
utese primero load(draw).

gr3d (Opci
on gr
afica, ..., graphic_object, ...)

[Constructor de escena]
La funci
on gr3d construye un objeto que describe una escena 3d. Los argumentos son
opciones gr
aficas y objetos gr
aficos o listas que contengan elementos de ambos tipos.
Esta escena se interpreta secuencialmente: las opciones gr
aficas afectan a aquellos
objetos gr
aficos colocados a su derecha. Algunas opciones gr
aficas afectan al aspecto
global de la escena.
La lista de objetos gr
aficos disponibles para escenas en tres dimensiones:
cylindrical, elevation_grid, explicit, implicit, label, mesh, parametric,
parametric_surface, points, quadrilateral, spherical, triangle, tube,
vector y geomap (este u
ltimo definido en el paquete worldmap).
Veanse tambien draw y draw3d.
Para utilizar este objeto, ejec
utese primero load(draw).

47.2.2 Funciones
draw (gr2d, ..., gr3d, ..., options, ...)

[Funcion]
Representa gr
aficamente una serie de escenas; sus argumentos son objetos gr2d y/o
gr3d, junto con algunas opciones, o listas de escenas y opciones. Por defecto, las
escenas se representan en una columna.

708

Manual de Maxima

La funci
on draw acepta las siguientes opciones globales: terminal, columns,
dimensions, file_name y delay.
Las funciones draw2d y draw3d son atajos a utilizar cuando se quiere representar una
u
nica escena en dos o tres dimensiones, respectivamente.
Veanse tambien gr2d y gr3d.
Para utilizar esta funci
on, ejec
utese primero load(draw).
Ejemplo:
(%i1) load(draw)$
(%i2) scene1: gr2d(title="Ellipse",
nticks=30,
parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
(%i3) scene2: gr2d(title="Triangle",
polygon([4,5,7],[6,4,2]))$
(%i4) draw(scene1, scene2, columns = 2)$
Las dos sentencias gr
aficas siguientes son equivalentes:
(%i1) load(draw)$
(%i2) draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)));
(%o2)
[gr3d(explicit)]
(%i3) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1));
(%o3)
[gr3d(explicit)]
Un fichero gif animado:
(%i1) load(draw)$
(%i2) draw(
delay
= 100,
file_name = "zzz",
terminal = animated_gif,
gr2d(explicit(x^2,x,-1,1)),
gr2d(explicit(x^3,x,-1,1)),
gr2d(explicit(x^4,x,-1,1)));
End of animation sequence
(%o2)
[gr2d(explicit), gr2d(explicit), gr2d(explicit)]
Veanse tambien gr2d, gr3d, draw2d y draw3d.

draw2d (option, graphic_object, ...)

[Funcion]
Esta funci
on es un atajo para draw(gr2d(options, ..., graphic_object, ...)).
Puede utilizarse para representar una u
nica escena en 2d.
Para utilizar esta funci
on, ejec
utese primero load(draw).
Veanse tambien draw y gr2d.

draw3d (option, graphic_object, ...)

[Funcion]
Esta funci
on es un atajo para draw(gr3d(options, ..., graphic_object, ...)).
Puede utilizarse para representar una u
nica escena en 3d.
Para utilizar esta funci
on, ejec
utese primero load(draw).
Veanse tambien draw y gr3d.

Captulo 47: draw

709

draw_file (Opci
on gr
afica, ..., Opci
on gr
afica, ...)

[Funcion]
Almacena el gr
afico actual en un fichero. Las opciones graficas que acepta son:
terminal, dimensions, file_name y background_color.
Ejemplo:
(%i1) load(draw)$
(%i2) /* dibujo en pantalla */
draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)))$
(%i3) /* same plot in eps format */
draw_file(terminal = eps,
dimensions = [5,5]) $

multiplot_mode (term )

[Funcion]
Esta funci
on permite a Maxima trabajar en modo de graficos m
ultiples en una sola
ventana del terminal term; argumentos validos para esta funcion son screen, wxt,
aquaterm y none.
Cuando el modo de gr
aficos m
ultiples esta activo, cada llamada a draw enva un
nuevo grafico a la misma ventana, sin borrar los anteriores. Para desactivar el modo
de gr
aficos m
ultiples escrbase multiplot_mode(none).
Cuando el modo de gr
aficos m
ultiples esta activo, la opcion global terminal se bloquea; para desbloquearla y cambiar de terminal es necesario desactivar previamente
el modo de gr
aficos m
ultiples.
Este modo de trabajo no funciona en plataformas Windows.
Ejemplo:
(%i1) load(draw)$
(%i2) set_draw_defaults(
xrange = [-1,1],
yrange = [-1,1],
grid
= true,
title = "Step by step plot" )$
(%i3) multiplot_mode(screen)$
(%i4) draw2d(color=blue, explicit(x^2,x,-1,1))$
(%i5) draw2d(color=red,
explicit(x^3,x,-1,1))$
(%i6) draw2d(color=brown, explicit(x^4,x,-1,1))$
(%i7) multiplot_mode(none)$

set_draw_defaults (Opci
on gr
afica, ..., Opci
on gr
afica, ...)

[Funcion]
Establece las opciones gr
aficas de usuario. Esta funcion es u
til para dibujar varios
gr
aficos con las mismas opciones. Llamando a la funcion sin argumentos se borran
las opciones de usuario por defecto.
Ejemplo:
(%i1) load(draw)$
(%i2) set_draw_defaults(
xrange = [-10,10],
yrange = [-2, 2],
color = blue,

710

Manual de Maxima

grid
= true)$
(%i3) /* dibujo con opciones de usuario */
draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$
(%i4) set_draw_defaults()$
(%i5) /* dibujo con opciones por defecto */
draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$
Para utilizar esta funci
on, ejec
utese primero load(draw).

47.2.3 Opciones gr
aficas
adapt_depth

[Opcion grafica]

Valor por defecto: 10


adapt_depth es el n
umero maximo de particiones utilizadas por la rutina grafica
adaptativa.
Esta opci
on s
olo es relevante para funciones de tipo explicit en 2d.

allocation

[Opcion grafica]

Valor por defecto: false


Con la opci
on allocation es posible colocar a voluntad una escena en la ventana
de salida, lo cual resulta de utilidad en el caso de graficos m
ultiples. Cuando la
opci
on toma el valor false, la escena se coloca de forma automatica, dependiendo
del valor asignado a la opci
on columns. En cualquier otro caso, a allocation se le
debe asignar una lista con dos pares de n
umeros; el primero se corresponde con la
posici
on de la esquina inferior izquierda del grafico y el segundo par hace referencia al
ancho y alto de la escena. Todas las cantidades deben darse en coordenadas relativas,
entre 0 y 1.
Ejemplos:
Gr
aficos internos.
(%i1) load(draw)$
(%i2) draw(
gr2d(
explicit(x^2,x,-1,1)),
gr2d(
allocation = [[1/4, 1/4],[1/2, 1/2]],
explicit(x^3,x,-1,1),
grid = true) ) $
Multiplot con dimensiones establecidas por el usuario.
(%i1) load(draw)$
(%i2) draw(
terminal = wxt,
gr2d(
allocation = [[0, 0],[1, 1/4]],
explicit(x^2,x,-1,1)),
gr3d(
allocation = [[0, 1/4],[1, 3/4]],
explicit(x^2+y^2,x,-1,1,y,-1,1) ))$

Captulo 47: draw

711

Vease tambien la opci


on columns.
[Opcion grafica]
Valor por defecto: true
Cuando axis_3d vale true, los ejes x, y y z permanecen visibles en las escenas 3d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(axis_3d = false,
explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$
Veanse tambien axis_bottom, axis_left, axis_top y axis_right for axis in 2d.

axis_3d

axis_bottom

[Opcion grafica]

Valor por defecto: true


Cuando axis_bottom vale true, el eje inferior permanece visible en las escenas 2d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(axis_bottom = false,
explicit(x^3,x,-1,1))$
Veanse tambien axis_left, axis_top, axis_right y axis_3d.

axis_left

[Opcion grafica]

Valor por defecto: true


Cuando axis_left vale true, el eje izquierdo permanece visible en las escenas 2d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(axis_left = false,
explicit(x^3,x,-1,1))$
Veanse tambien axis_bottom, axis_top, axis_right y axis_3d.
[Opcion grafica]
Valor por defecto: true
Cuando axis_right vale true, el eje derecho permanece visible en las escenas 2d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(axis_right = false,
explicit(x^3,x,-1,1))$
Veanse tambien axis_bottom, axis_left, axis_top y axis_3d.

axis_right

712

Manual de Maxima

[Opcion grafica]

axis_top
Valor por defecto: true

Cuando axis_top vale true, el eje superior permanece visible en las escenas 2d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(axis_top = false,
explicit(x^3,x,-1,1))$
Veanse tambien axis_bottom, axis_left, axis_right y axis_3d.

background_color

[Opcion grafica]

Valor por defecto: white


Establece el color de fondo en los terminales gif, png, jpg y gif. El color de fondo
por defecto es blanco.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Esta opci
on no es compatible con los terminales epslatex y epslatex_standalone.
Vease tambien color.
[Opcion grafica]

border
Valor por defecto: true

Cuando border vale true, los bordes de los polgonos se dibujan de acuerdo con
line_type y line_width.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: polygon, rectangle y ellipse.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(color
= brown,
line_width = 8,
polygon([[3,2],[7,2],[5,5]]),
border
= false,
fill_color = blue,
polygon([[5,2],[9,2],[7,5]]) )$

cbrange

[Opcion grafica]

Valor por defecto: auto


Cuando cbrange vale auto, el rango de los valores que se colorean cuando enhanced3d
es diferente de false se calcula automaticamente. Valores fuera del rango utilizan el
color del valor extremo m
as cercano.
Cuando enhanced3d o colorbox vale false, la opcion cbrange no tiene efecto alguno.
Si el usuario quiere especificar un intervalo para los valores a colorear, este debe
expresarse como una lista de Maxima, como en cbrange=[-2, 3].

Captulo 47: draw

713

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d (
enhanced3d
= true,
color
= green,
cbrange = [-3,10],
explicit(x^2+y^2, x,-2,2,y,-2,2)) $
Veanse tambien enhanced3d y cbtics.

cbtics

[Opcion grafica]

Valor por defecto: auto


Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas en la escala
de color cuando la opci
on enhanced3d sea diferente de false.
Cuando enhanced3d o colorbox vale false, la opcion cbtics no tiene efecto alguno.
Vease xtics para una descripcion completa.
Ejemplo :
(%i1) load(draw)$
(%i2) draw3d (
enhanced3d = true,
color
= green,
cbtics = {["High",10],["Medium",05],["Low",0]},
cbrange = [0, 10],
explicit(x^2+y^2, x,-2,2,y,-2,2)) $
See also enhanced3d, colorbox and cbrange.
[Opcion grafica]
Valor por defecto: blue
color especifica el color para dibujar lneas, puntos, bordes de polgonos y etiquetas.
Los colores se pueden dar a partir de sus nombres o en codigo hexadecimal rgb.
Los nombres de colores disponibles son: white, black, gray0, grey0, gray10,
grey10, gray20, grey20, gray30, grey30, gray40, grey40, gray50, grey50,
gray60, grey60, gray70, grey70, gray80, grey80, gray90, grey90, gray100,
grey100, gray, grey, light_gray, light_grey, dark_gray, dark_grey, red,
light_red, dark_red, yellow, light_yellow, dark_yellow, green, light_green,
dark_green, spring_green, forest_green, sea_green, blue, light_blue,
dark_blue, midnight_blue, navy, medium_blue, royalblue, skyblue, cyan,
light_cyan, dark_cyan, magenta, light_magenta, dark_magenta, turquoise,
light_turquoise, dark_turquoise, pink, light_pink, dark_pink, coral,
light_coral, orange_red, salmon, light_salmon, dark_salmon, aquamarine,
khaki, dark_khaki, goldenrod, light_goldenrod, dark_goldenrod, gold, beige,
brown, orange, dark_orange, violet, dark_violet, plum y purple.
Las componentes crom
aticas en codigo hexadecimal se introducen en el formato
"#rrggbb".

color

714

Manual de Maxima

Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^2,x,-1,1), /* default is black */
color = red,
explicit(0.5 + x^2,x,-1,1),
color = blue,
explicit(1 + x^2,x,-1,1),
color = light_blue,
explicit(1.5 + x^2,x,-1,1),
color = "#23ab0f",
label(["This is a label",0,1.2]) )$
Vease tambien fill_color.
[Opcion grafica]

colorbox
Valor por defecto: true

Cuando colorbox vale true, se dibuja una escala de colores sin ttulo al lado de los
objetos image en 2D o de objetos coloreados en 3D. Cuando colorbox vale false,
no se presenta la escala de colores. Cuando colorbox es una cadena de caracteres, se
mostrar
a la escala de colores con un ttulo.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
Escala de colores e im
agenes.
(%i1) load(draw)$
(%i2) im: apply(matrix,
makelist(makelist(random(200),i,1,30),i,1,30))$
(%i3) draw2d(image(im,0,0,30,30))$
(%i4) draw2d(colorbox = false, image(im,0,0,30,30))$
Escala de colores y objeto 3D coloreado.
(%i1) load(draw)$
(%i2) draw3d(
colorbox
= "Magnitude",
enhanced3d = true,
explicit(x^2+y^2,x,-1,1,y,-1,1))$
Vease tambien palette.
[Opcion grafica]

columns
Valor por defecto: 1
columns es el n
umero de columnas en graficos m
ultiples.

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Ejemplo:
(%i1) load(draw)$
(%i2) scene1: gr2d(title="Ellipse",

Captulo 47: draw

715

nticks=30,
parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
(%i3) scene2: gr2d(title="Triangle",
polygon([4,5,7],[6,4,2]))$
(%i4) draw(scene1, scene2, columns = 2)$
[Opcion grafica]
Valor por defecto: none
La opci
on contour permite al usuario decidir donde colocar las lneas de nivel. Valores
posibles son:
none: no se dibujan lneas de nivel.
base: las lneas de nivel se proyectan sobre el plano xy.
surface: las lneas de nivel se dibujan sobre la propia superficie.
both: se dibujan dos conjuntos de lneas de nivel: sobre la superficie y las que se
proyectan sobre el plano xy.
map: las lneas de nivel se proyectan sobre el plano xy y el punto de vista del
observador se coloca perpendicularmente a el.

contour

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
contour_levels = 15,
contour
= both,
surface_hide
= true) $
Vease tambien contour_levels.
[Opcion grafica]
Valor por defecto: 5
Esta opci
on gr
afica controla como se dibujaran las lneas de nivel. A contour_levels
se le puede asignar un n
umero entero positivo, una lista de tres n
umeros o un conjunto
numerico arbitrario:
Si a contour_levels se le asigna un entero positivo n, entonces se dibujaran n
lneas de nivel a intervalos iguales. Por defecto, se dibujaan cinco isolneas.
Si a contour_levels se le asigna una lista de tres n
umeros de la forma
[inf,p,sup], las isolneas se dibujaran desde inf hasta sup en pasos de
amplitud p.
Si a contour_levels se le asigna un conjunto de n
umeros de la forma {n1, n2,
...}, entonces se dibujaran las isolneas correspondientes a los niveles n1, n2, ...

contour_levels

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplos:
Diez isolneas igualmente espaciadas. El n
umero real puede ajustarse a fin de poder
conseguir etiquetas m
as sencillas.

716

Manual de Maxima

(%i1) load(draw)$
(%i2) draw3d(color = green,
explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
contour_levels = 10,
contour
= both,
surface_hide
= true) $
Desde -8 hasta 8 en pasos de amplitud 4.
(%i1) load(draw)$
(%i2) draw3d(color = green,
explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
contour_levels = [-8,4,8],
contour
= both,
surface_hide
= true) $
Lneas correspondientes a los niveles -7, -6, 0.8 y 5.
(%i1) load(draw)$
(%i2) draw3d(color = green,
explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
contour_levels = {-7, -6, 0.8, 5},
contour
= both,
surface_hide
= true) $
Vease tambien contour.

data_file_name

[Opcion grafica]

Valor por defecto: "data.gnuplot"


data_file_name es el nombre del fichero que almacena la informacion numerica que
necesita Gnuplot para crear el grafico solicitado.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Vease ejemplo en gnuplot_file_name.
[Opcion grafica]
Valor por defecto: 5
Este es el retraso en centesimas de segundo entre imagenes en los ficheros gif animados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Ejemplo:
(%i1) load(draw)$
(%i2) draw(
delay
= 100,
file_name = "zzz",
terminal = animated_gif,
gr2d(explicit(x^2,x,-1,1)),
gr2d(explicit(x^3,x,-1,1)),
gr2d(explicit(x^4,x,-1,1)));
End of animation sequence

delay

Captulo 47: draw

717

(%o2)
[gr2d(explicit), gr2d(explicit), gr2d(explicit)]
La opci
ob delay s
olo se activa en caso de gifs animados; se ignora en cualquier otro
caso.
Veanse tambien terminal, dimensions.
[Opcion grafica]
Valor por defecto: [600,500]
Dimensiones del terminal de salida. Su valor es una lista formada por el ancho y
el alto. El significado de estos dos n
umeros depende del terminal con el que se este
trabajando.
Con los terminales gif, animated_gif, png, jpg, svg, screen, wxt y aquaterm,
los enteros representan n
umeros de puntos en cada direccion. Si no son enteros se
redondean.
Con los terminales eps, eps_color, pdf y pdfcairo, los n
umeros representan
centesimas de cm, lo que significa que, por defecto, las imagenes en estos formatos
tienen 6 cm de ancho por 5 cm de alto.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Ejemplos:
La opci
on dimensions aplicada a un fichero de salida y al lienzo wxt.
(%i1) load(draw)$
(%i2) draw2d(
dimensions = [300,300],
terminal
= png,
explicit(x^4,x,-1,1)) $
(%i3) draw2d(
dimensions = [300,300],
terminal
= wxt,
explicit(x^4,x,-1,1)) $
La opci
on dimensions aplicada a una salida eps. En este caso queremos un fichero
eps con dimensiones A4.
(%i1) load(draw)$
(%i2) A4portrait: 100*[21, 29.7]$
(%i3) draw3d(
dimensions = A4portrait,
terminal
= eps,
explicit(x^2-y^2,x,-2,2,y,-2,2)) $

dimensions

[Opcion grafica]
Valor por defecto: true
Cuando vale true, las funciones a dibujar se consideran funciones complejas cuyas
partes reales se deben dibujar; cuando la opcion vale false, no se dibujara nada en
caso de que la funci
on no devuelve valores reales.
Esta opci
on afecta a los objetos explicit y parametric en 2D y 3D, y al objeto
parametric_surface.

draw_realpart

718

Manual de Maxima

Ejemplo:
La opci
on draw_realpart afecta a los objetos explicit y parametric.
(%i1) load(draw)$
(%i2) draw2d(
draw_realpart = false,
explicit(sqrt(x^2 - 4*x) - x, x, -1, 5),
color
= red,
draw_realpart = true,
parametric(x,sqrt(x^2 - 4*x) - x + 1, x, -1, 5) );

enhanced3d

[Opcion grafica]

Valor por defecto: none


Cuando enhanced3d vale none, las superficies no se colorean en escenas 3D. Para
obtener una superficie coloreada se debe asignar una lista a la opcion enhanced3d, en
la que el primer elemento es una expresion y el resto son los nombres de las variables
o par
ametros utilizados en la expresion. Una lista tal como [f(x,y,z), x, y, z]
significa que al punto [x,y,z] de la superficie se le asigna el n
umero f(x,y,z), el
cual ser
a coloreado de acuerdo con el valor actual de palette. Para aquellos objetos
gr
aficos 3D definidos en terminos de parametros, es posible definir el n
umero de color
en terminos de dichos par
ametros, como en [f(u), u], para los objetos parametric
y tube, o [f(u,v), u, v], para el objeto parametric_surface. Mientras que todos
los objetos 3D admiten el modelo basado en coordenadas absolutas, [f(x,y,z), x,
y, z], solamente dos de ellos, esto es explicit y elevation_grid, aceptan tambien
el modelo basado en las coordenadas [x,y], [f(x,y), x, y]. El objeto 3D implicit
acepta solamente el modelo [f(x,y,z), x, y, z]. El objeto points tambien acepta
el modelo [f(x,y,z), x, y, z], pero cuando los puntos tienen naturaleza cronologica
tambien admite el modelo [f(k), k], siendo k un parametro de orden.
Cuando a enhanced3d se le asigna algo diferente de none, se ignoran las opciones
color y surface_hide.
Los nombres de las variables definidas en las listas pueden ser diferentes de aquellas
utilizadas en las definiciones de los objetos graficos.
A fin de mantener compatibilidad con versiones anteriores, enhanced3d = false es
equivalente a enhanced3d = none y enhanced3d = true es equivalente a enhanced3d
= [z, x, y, z]. Si a enhanced3d se le asigna una expresion, sus variables deben ser
las mismas utilizadas en la definicion de la superficie. Esto no es necesario cuando se
utilizan listas.
Sobre la definici
on de paletas, vease palette.
Ejemplos:
Objeto explicit con coloreado definido por el modelo [f(x,y,z), x, y, z].
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = [x-z/10,x,y,z],
palette
= gray,
explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$

Captulo 47: draw

719

Objeto explicit con coloreado definido por el modelo [f(x,y), x, y]. Los nombres
de las variables definidas en las listas pueden ser diferentes de aquellas utilizadas en
las definiciones de los objetos graficos 3D; en este caso, r corresponde a x y s a y.
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = [sin(r*s),r,s],
explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$
Objeto parametric con coloreado definido por el modelo [f(x,y,z), x, y, z].
(%i1) load(draw)$
(%i2) draw3d(
nticks = 100,
line_width = 2,
enhanced3d = [if y>= 0 then 1 else 0, x, y, z],
parametric(sin(u)^2,cos(u),u,u,0,4*%pi)) $
Objeto parametric con coloreado definido por el modelo [f(u), u]. En este caso,
(u-1)^2 es una simplificaci
on de [(u-1)^2,u].
(%i1) load(draw)$
(%i2) draw3d(
nticks = 60,
line_width = 3,
enhanced3d = (u-1)^2,
parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2))$
Objeto elevation_grid con coloreado definido por el modelo [f(x,y), x, y].
(%i1) load(draw)$
(%i2) m: apply(
matrix,
makelist(makelist(cos(i^2/80-k/30),k,1,30),i,1,20)) $
(%i3) draw3d(
enhanced3d = [cos(x*y*10),x,y],
elevation_grid(m,-1,-1,2,2),
xlabel = "x",
ylabel = "y");
Objeto tube con coloreado definido por el modelo [f(x,y,z), x, y, z].
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = [cos(x-y),x,y,z],
palette = gray,
xu_grid = 50,
tube(cos(a), a, 0, 1, a, 0, 4*%pi) )$
Objeto tube con coloreado definido por el modelo [f(u), u]. En este caso,
enhanced3d = -a puede ser una simplificacion de enhanced3d = [-foo,foo].
(%i1) load(draw)$
(%i2) draw3d(
tube_extremes = [open, closed],

720

Manual de Maxima

palette = [26,15,-2],
enhanced3d = [-foo, foo],
tube(a, a, a^2, 1, a, -2, 2) )$
Objetos implicit y points con coloreado definido por el modelo [f(x,y,z), x, y,
z].
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = [x-y,x,y,z],
implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
x,-1,1,y,-1.2,2.3,z,-1,1)) $
(%i3) m: makelist([random(1.0),random(1.0),random(1.0)],k,1,2000)$
(%i4) draw3d(
point_type = filled_circle,
point_size = 2,
enhanced3d = [u+v-w,u,v,w],
points(m) ) $
cuando los puntos tienen naturaleza cronologica tambien se admite el modelo [f(k),
k], siendo k un par
ametro de orden.
(%i1) load(draw)$
(%i2) m:makelist([random(1.0), random(1.0), random(1.0)],k,1,5)$
(%i3) draw3d(
enhanced3d = [sin(j), j],
point_size = 3,
point_type = filled_circle,
points_joined = true,
points(m)) $
[Opcion grafica]
Valor por defecto: y
Dependiendo de su valor, el cual puede ser x, y o xy, el objeto grafico errors dibujar
a
puntos con barras de error horizontales, verticales, o ambas. Si error_type=boxes,
se dibujar
an cajas en lugar de cruces.
Vease tambien errors.

error_type

[Opcion grafica]
Valor por defecto: "maxima_out"
file_name es el nombre del fichero en el que los terminales png, jpg, gif, eps, eps_
color, pdf, pdfcairo y svg guardaran el grafico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(file_name = "myfile",
explicit(x^2,x,-1,1),
terminal = png)$
Veanse tambien terminal, dimensions.

file_name

Captulo 47: draw

fill_color

721

[Opcion grafica]

Valor por defecto: "red"


fill_color especifica el color para rellenar polgonos y funciones explcitas bidimensionales.
Vease color para m
as informacion sobre como definir colores.

fill_density

[Opcion grafica]

Valor por defecto: 0


fill_density es un n
umero entre 0 y 1 que especifica la intensidad del color de
relleno (dado por fill_color) en los objetos bars.
Vease bars para ejemplos.

filled_func

[Opcion grafica]

Valor por defecto: false


La opci
on filled_func establece como se van a rellenar las regiones limitadas por
funciones. Si filled_func vale true, la region limitada por la funcion definida en el
objeto explicit y el borde inferior del la ventana grafica se rellena con fill_color.
Si filled_func guarda la expresion de una funcion, entonces la region limitada por
esta funci
on y la definida en el objeto explicit sera la que se rellene. Por defecto,
las funciones explcitas no se rellenan.
Esta opci
on s
olo afecta al objeto grafico bidimensional explicit.
Ejemplo:
Regi
on limitada por un objeto explicit y el borde inferior de la ventana grafica.
(%i1) load(draw)$
(%i2) draw2d(fill_color = red,
filled_func = true,
explicit(sin(x),x,0,10) )$
Regi
on limitada por un objeto explicit y la funcion definida en la opcion filled_
func. N
otese que la variable en filled_func debe ser la misma que la utilizada en
explicit.
(%i1) load(draw)$
(%i2) draw2d(fill_color = grey,
filled_func = sin(x),
explicit(-sin(x),x,0,%pi));
Veanse tambien fill_color y explicit.
[Opcion grafica]

font
Valor por defecto: "" (cadena vaca)

Esta opci
on permite seleccionar el tipo de fuente a utilizar por el terminal. Solo se
puede utilizar un tipo de fuente y tama~
no por grafico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Vease tambien font_size.

722

Manual de Maxima

Gnuplot no puede gestionar por s mismo las fuentes, dejando esta tarea a las libreras que dan soporte a los diferentes terminales, cada uno con su propia manera
de controlar la tipografa. A continuacion un breve resumen:
x11 : Utiliza el mecanismo habitual para suministrar las fuentes en x11.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(font
= "Arial",
font_size = 20,
label(["Arial font, size 20",1,1]))$
windows: El terminal de windows no permite cambiar fuentes desde dentro del
gr
afico. Una vez se ha creado el grafico, se pueden cambiar las fuentes haciendo
clic derecho en el men
u de la ventana grafica.
png, jpeg, gif : La librera libgd utiliza la ruta a las fuentes almacenada en la
variable de entorno GDFONTPATH; en tal caso solo es necesario darle a la opcion
font el nombre de la fuente. Tambien es posible darle la ruta completa al fichero
de la fuente.
Ejemplos:
A la opci
on font se le puede dar la ruta completa al fichero de la fuente:
(%i1) load(draw)$
(%i2) path: "/usr/share/fonts/truetype/freefont/" $
(%i3) file: "FreeSerifBoldItalic.ttf" $
(%i4) draw2d(
font
= concat(path, file),
font_size = 20,
color
= red,
label(["FreeSerifBoldItalic font, size 20",1,1]),
terminal = png)$
Si la variable de entorno GDFONTPATH almacena la ruta a la carpeta donde se
alojan las fuentes, es posible darle a la opcion font solo el nombre de la fuente:
(%i1) load(draw)$
(%i2) draw2d(
font
= "FreeSerifBoldItalic",
font_size = 20,
color
= red,
label(["FreeSerifBoldItalic font, size 20",1,1]),
terminal = png)$
Postscript:
Las fuentes estandar de Postscript son:
"Times-Roman",
"Times-Italic",
"Times-Bold",
"Times-BoldItalic",
"Helvetica",
"Helvetica-Oblique",
"Helvetica-Bold",
"Helvetic-BoldOblique",
"Courier", "Courier-Oblique", "Courier-Bold" y "Courier-BoldOblique".
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
font
= "Courier-Oblique",

Captulo 47: draw

723

font_size = 15,
label(["Courier-Oblique font, size 15",1,1]),
terminal = eps)$
pdf : Utiliza las mismas fuentes que Postscript.
pdfcairo: Utiliza las mismas fuentes que wxt.
wxt: La librera pango encuentra las fuentes por medio de la utilidad fontconfig.
aqua: La fuente por defecto es "Times-Roman".

La documentaci
on de gnuplot es una importante fuente de informacion sobre terminales y fuentes.
[Opcion grafica]
Valor por defecto: 10
Esta opci
on permite seleccionar el tama~
no de la fuente a utilizar por el terminal. Solo
se puede utilizar un tipo de fuente y tama~
no por grafico. font_size solo se activa
cuando la opci
on font tiene un valor diferente de la cadena vaca.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Vease tambien font.

font_size

gnuplot_file_name

[Opcion grafica]

Valor por defecto: "maxout.gnuplot"


gnuplot_file_name es el nombre del fichero que almacena las instrucciones a ser
procesadas por Gnuplot.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
file_name = "my_file",
gnuplot_file_name = "my_commands_for_gnuplot",
data_file_name
= "my_data_for_gnuplot",
terminal
= png,
explicit(x^2,x,-1,1)) $
Vease tambien data_file_name.

grid

[Opcion grafica]
Valor por defecto: false
Cuando grid vale true, se dibujara una rejilla sobre el plano xy.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(grid = true,
explicit(exp(u),u,-2,2))$

724

Manual de Maxima

head_angle

[Opcion grafica]

Valor por defecto: 45


head_angle indica el
angulo, en grados, entre la flecha y el segmento del vector.
Esta opci
on s
olo es relevante para objetos de tipo vector.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,10],
yrange
= [0,9],
head_length = 0.7,
head_angle = 10,
vector([1,1],[0,6]),
head_angle = 20,
vector([2,1],[0,6]),
head_angle = 30,
vector([3,1],[0,6]),
head_angle = 40,
vector([4,1],[0,6]),
head_angle = 60,
vector([5,1],[0,6]),
head_angle = 90,
vector([6,1],[0,6]),
head_angle = 120,
vector([7,1],[0,6]),
head_angle = 160,
vector([8,1],[0,6]),
head_angle = 180,
vector([9,1],[0,6]) )$
Veanse tambien head_both, head_length y head_type.

head_both

[Opcion grafica]

Valor por defecto: false


Cuando head_both vale true, los vectores se dibujan bidireccionales. Si vale false,
se dibujan unidireccionales.
Esta opci
on s
olo es relevante para objetos de tipo vector.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,8],
yrange
= [0,8],
head_length = 0.7,
vector([1,1],[6,0]),
head_both
= true,
vector([1,7],[6,0]) )$
Veanse tambien head_length, head_angle y head_type.

head_length
Valor por defecto: 2

[Opcion grafica]

Captulo 47: draw

725

head_length indica, en las unidades del eje x, la longitud de las flechas de los vectores.
Esta opci
on s
olo es relevante para objetos de tipo vector.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,12],
yrange
= [0,8],
vector([0,1],[5,5]),
head_length = 1,
vector([2,1],[5,5]),
head_length = 0.5,
vector([4,1],[5,5]),
head_length = 0.25,
vector([6,1],[5,5]))$
Veanse tambien head_both, head_angle y head_type.
[Opcion grafica]

head_type
Valor por defecto: filled

head_type se utiliza para especificar como se habran de dibujar las flechas de los vectores. Los valores posibles para esta opcion son: filled (flechas cerradas y rellenas),
empty (flechas cerradas pero no rellenas) y nofilled (flechas abiertas).
Esta opci
on s
olo es relevante para objetos de tipo vector.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,12],
yrange
= [0,10],
head_length = 1,
vector([0,1],[5,5]), /* default type */
head_type = empty,
vector([3,1],[5,5]),
head_type = nofilled,
vector([6,1],[5,5]))$
Veanse tambien head_both, head_angle y head_length.

ip_grid

[Opcion grafica]

Valor por defecto: [50, 50]


ip_grid establece la rejilla del primer muestreo para los graficos de funciones
implcitas.
Esta opci
on s
olo es relevante para funciones de tipo implicit.

ip_grid_in

[Opcion grafica]

Valor por defecto: [5, 5]


ip_grid_in establece la rejilla del segundo muestreo para los graficos de funciones
implcitas.
Esta opci
on s
olo es relevante para funciones de tipo implicit.

726

Manual de Maxima

key

[Opcion grafica]
Valor por defecto: "" (cadena vaca)
key es la clave de una funci
on en la leyenda. Si key es una cadena vaca, las funciones
no tendr
an clave asociada en la leyenda.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points, polygon, rectangle, ellipse, vector, explicit, implicit,
parametric y polar.
gr3d: points, explicit, parametric, y parametric_surface.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(key
= "Sinus",
explicit(sin(x),x,0,10),
key
= "Cosinus",
color = red,
explicit(cos(x),x,0,10) )$

key_pos

[Opcion grafica]

Valor por defecto: "" (cadena vaca)


La opci
on key_pos establece en que posicion se colocara la leyenda. Si key es una
cadena vaca, entonces se utilizara por defecto la posicion "top_right". Los valores
disponibles para esta opci
on son: top_left, top_center, top_right, center_left,
center, center_right, bottom_left, bottom_center y bottom_right.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplos:
(%i1) load(draw)$
(%i2) draw2d(
key_pos = top_left,
key
= "x",
explicit(x, x,0,10),
color= red,
key
= "x squared",
explicit(x^2,x,0,10))$
(%i3) draw3d(
key_pos = center,
key
= "x",
explicit(x+y,x,0,10,y,0,10),
color= red,
key
= "x squared",
explicit(x^2+y^2,x,0,10,y,0,10))$
[Opcion grafica]
Valor por defecto: center
label_alignment se utiliza para especificar donde se escribiran las etiquetas con
respecto a las coordenadas de referencia. Los valores posibles para esta opcion son:
center, left y right.

label_alignment

Captulo 47: draw

727

Esta opci
on s
olo es relevante para objetos de tipo label.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,10],
yrange
= [0,10],
points_joined
= true,
points([[5,0],[5,10]]),
color
= blue,
label(["Centered alignment (default)",5,2]),
label_alignment = left,
label(["Left alignment",5,5]),
label_alignment = right,
label(["Right alignment",5,8]))$
Veanse tambien label_orientation y color.
[Opcion grafica]
Valor por defecto: horizontal
label_orientation se utiliza para especificar la orientacion de las etiquetas. Los
valores posibles para esta opcion son: horizontal y vertical.
Esta opci
on s
olo es relevante para objetos de tipo label.
Ejemplo:
En este ejemplo, el punto ficticio que se a~
nade sirve para obtener la imagen, ya que
el paquete draw necesita siempre de datos para construir la escena.
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,10],
yrange
= [0,10],
point_size = 0,
points([[5,5]]),
color
= navy,
label(["Horizontal orientation (default)",5,2]),
label_orientation = vertical,
color
= "#654321",
label(["Vertical orientation",1,5]))$
Veanse tambien label_alignment y color.

label_orientation

line_type

[Opcion grafica]

Valor por defecto: solid


line_type indica c
omo se van a dibujar las lneas; valores posibles son solid y
dots, que est
an disponibles en todos los terminales, y dashes, short_dashes, short_
long_dashes, short_short_long_dashes y dot_dash, que no esan disponibles en los
terminales png, jpg y gif.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points, polygon, rectangle, ellipse, vector, explicit, implicit,
parametric y polar.
gr3d: points, explicit, parametric y parametric_surface.

728

Manual de Maxima

Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(line_type = dots,
explicit(1 + x^2,x,-1,1),
line_type = solid, /* default */
explicit(2 + x^2,x,-1,1))$
Vease tambien line_width.

line_width

[Opcion grafica]

Valor por defecto: 1


line_width es el ancho de las lneas a dibujar. Su valor debe ser un n
umero positivo.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points, polygon, rectangle, ellipse, vector, explicit, implicit,
parametric y polar.
gr3d: points y parametric.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^2,x,-1,1), /* default width */
line_width = 5.5,
explicit(1 + x^2,x,-1,1),
line_width = 10,
explicit(2 + x^2,x,-1,1))$
Vease tambien line_type.
[Opcion grafica]
Valor por defecto: false
Cuando logcb vale true, la escala de colores se dibuja logartmicamente.
Cuando enhanced3d o colorbox vale false, la opcion logcb no tiene efecto alguno.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d (
enhanced3d = true,
color
= green,
logcb = true,
logz = true,
palette = [-15,24,-9],
explicit(exp(x^2-y^2), x,-2,2,y,-2,2)) $
Veanse tambien enhanced3d, colorbox y cbrange.

logcb

[Opcion grafica]

logx
Valor por defecto: false
Cuando logx vale true, el eje x se dibuja en la escala logartmica.

Captulo 47: draw

729

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(log(x),x,0.01,5),
logx = true)$
Veanse tambien logy, logx_secondary, logy_secondary y logz.

logx_secondary

[Opcion grafica]

Valor por defecto: false


Si logx_secondary vale true, el eje secundario de x se dibuja en la escala logartmica.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
grid = true,
key="x^2, linear scale",
color=red,
explicit(x^2,x,1,100),
xaxis_secondary = true,
xtics_secondary = true,
logx_secondary = true,
key = "x^2, logarithmic x scale",
color = blue,
explicit(x^2,x,1,100) )$
Veanse tambien logx, logy, logy_secondary y logz.

logy

[Opcion grafica]
Valor por defecto: false
Cuando logy vale true, el eje y se dibuja en la escala logartmica.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(logy = true,
explicit(exp(x),x,0,5))$
Veanse tambien logx, logx_secondary, logy_secondary y logz.

logy_secondary

[Opcion grafica]

Valor por defecto: false


Si logy_secondary vale true, el eje secundario de y se dibuja en la escala logartmica.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:

730

Manual de Maxima

(%i1) load(draw)$
(%i2) draw2d(
grid = true,
key="x^2, linear scale",
color=red,
explicit(x^2,x,1,100),
yaxis_secondary = true,
ytics_secondary = true,
logy_secondary = true,
key = "x^2, logarithmic y scale",
color = blue,
explicit(x^2,x,1,100) )$
Veanse tambien logx, logy, logx_secondary y logz.
[Opcion grafica]

logz
Valor por defecto: false
Cuando logz vale true, el eje z se dibuja en la escala logartmica.

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(logz = true,
explicit(exp(u^2+v^2),u,-2,2,v,-2,2))$
Veanse tambien logx and logy.
[Opcion grafica]

nticks
Valor por defecto: 29

En 2d, nticks es el n
umero de puntos a utilizar por el programa adaptativo que
genera las funciones explcitas. Tambien es el n
umero de puntos que se representan
en las curvas parametricas y polares.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: ellipse, explicit, parametric y polar.
gr3d: parametric.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(transparent = true,
ellipse(0,0,4,2,0,180),
nticks = 5,
ellipse(0,0,4,2,180,180) )$

palette

[Opcion grafica]

Valor por defecto: color


palette indica c
omo transformar niveles de gris en componentes cromaticas. Trabaja
conjuntamente con la opci
on enhanced3d en graficos 3D, la cual asocia cada punto

Captulo 47: draw

731

de una superficie con un n


umero real o nivel de gris. Tambien trabaja con imagenes
grises. Con palette, estos niveles se transforman en colores.
Hay dos formas de definir estas transformaciones.
En primer lugar, palette puede ser un vector de longitud tres con sus componentes
tomando valores enteros en el rango desde -36 a +36; cada valor es un ndice para
seleccionar una f
ormula que transforma los niveles numericos en las componentes
crom
aticas rojo, verde y azul:
0:
3:
6:
9:
12:
15:
18:
21:
24:
27:
30:
33:
36:

0
x
x^4
sin(90x)
(2x-1)^2
sin(360x)
|cos(360x)|
3x
|3x-1|
(3x-2)/2
x/0.32-0.78125
|2*x - 0.5|
2*x - 1

1:
4:
7:
10:
13:
16:
19:
22:
25:
28:
31:
34:

0.5
x^2
sqrt(x)
cos(90x)
sin(180x)
cos(360x)
|sin(720x)|
3x-1
|3x-2|
|(3x-1)/2|
2*x-0.84
2*x

2:
5:
8:
11:
14:
17:
20:
23:
26:
29:
32:
35:

1
x^3
sqrt(sqrt(x))
|x-0.5|
|cos(180x)|
|sin(360x)|
|cos(720x)|
3x-2
(3x-1)/2
|(3x-2)/2|
4x;1;-2x+1.84;x/0.08-11.5
2*x - 0.5

los n
umeros negativos se interpretan como colores invertidos de las componentes
crom
aticas. palette = gray y palette = color son atajos para palette = [3,3,3]
y palette = [7,5,15], respectivamente.
En segundo lugar, palette puede ser una paleta de colores definida por el usuario.
En este caso, el formato para crear una paleta de longitud n es palette=[color_1,
color_2, ..., color_n], donde color_i es un color correctamente definido (vease
la opci
on color), de tal manera que color_1 se asigna al valor mas bajo del nivel y
color_n al m
as alto. El resto de colores se interpolan.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplos:
Trabaja conjuntamente con la opcion enhanced3d en graficos 3D.
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = [z-x+2*y,x,y,z],
palette = [32, -8, 17],
explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$
Tambien trabaja con im
agenes grises.
(%i1) load(draw)$
(%i2) im: apply(
matrix,
makelist(makelist(random(200),i,1,30),i,1,30))$
(%i3) /* palette = color, default */
draw2d(image(im,0,0,30,30))$

732

Manual de Maxima

(%i4) draw2d(palette = gray, image(im,0,0,30,30))$


(%i5) draw2d(palette = [15,20,-4],
colorbox=false,
image(im,0,0,30,30))$
palette puede ser una paleta de colores definida por el usuario. En este ejemplo,
valores bajos de x se colorean en rojo y altos en amarillo.
(%i1) load(draw)$
(%i2) draw3d(
palette = [red, blue, yellow],
enhanced3d = x,
explicit(x^2+y^2,x,-1,1,y,-1,1)) $
Vease tambien colorbox y enhanced3d.

point_size

[Opcion grafica]

Valor por defecto: 1


point_size establece el tama~
no de los puntos dibujados. Debe ser un n
umero no
negativo.
Esta opci
on no tiene efecto alguno cuando a la opcion grafica point_type se le ha
dado el valor dot.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points.
gr3d: points.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
points(makelist([random(20),random(50)],k,1,10)),
point_size = 5,
points(makelist(k,k,1,20),makelist(random(30),k,1,20)))$

point_type

[Opcion grafica]

Valor por defecto: 1


point_type indica c
omo se van a dibujar los puntos aislados. Los valores para esta
opci
on pueden ser ndices enteros mayores o iguales que -1, o tambien nombres de
estilos: $none (-1), dot (0), plus (1), multiply (2), asterisk (3), square (4),
filled_square (5), circle (6), filled_circle (7), up_triangle (8), filled_up_
triangle (9), down_triangle (10), filled_down_triangle (11), diamant (12) y
filled_diamant (13).
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points.
gr3d: points.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange = [0,10],

Captulo 47: draw

733

yrange = [0,10],
point_size = 3,
point_type = diamant,
points([[1,1],[5,1],[9,1]]),
point_type = filled_down_triangle,
points([[1,2],[5,2],[9,2]]),
point_type = asterisk,
points([[1,3],[5,3],[9,3]]),
point_type = filled_diamant,
points([[1,4],[5,4],[9,4]]),
point_type = 5,
points([[1,5],[5,5],[9,5]]),
point_type = 6,
points([[1,6],[5,6],[9,6]]),
point_type = filled_circle,
points([[1,7],[5,7],[9,7]]),
point_type = 8,
points([[1,8],[5,8],[9,8]]),
point_type = filled_diamant,
points([[1,9],[5,9],[9,9]]) )$
[Opcion grafica]
Valor por defecto: false
Cuando points_joined vale true, los puntos se unen con segmentos; si vale false,
se dibujar
an puntos aislados. Un tercer valor posible para esta opcion grafica es
impulses; en tal caso, se dibujaran segmentos verticales desde los puntos hasta el
eje-x (2D) o hasta el plano-xy (3D).
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: points.
gr3d: points.

points_joined

Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,10],
yrange
= [0,4],
point_size
= 3,
point_type
= up_triangle,
color
= blue,
points([[1,1],[5,1],[9,1]]),
points_joined = true,
point_type
= square,
line_type
= dots,
points([[1,2],[5,2],[9,2]]),
point_type
= circle,
color
= red,
line_width
= 7,
points([[1,3],[5,3],[9,3]]) )$

734

Manual de Maxima

proportional_axes

[Opcion grafica]

Valor por defecto: none


Cuando proportional_axes es igual a xy o xy, una escena 2D o 3D se dibujara con
los ejes proporcionales a sus longitudes relativas.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Esta opci
on s
olo funciona con Gnuplot version 4.2.6 o superior.
Ejemplos:
Gr
afico en 2D.
(%i1) load(draw)$
(%i2) draw2d(
ellipse(0,0,1,1,0,360),
transparent=true,
color = blue,
line_width = 4,
ellipse(0,0,2,1/2,0,360),
proportional_axes = xy) $
Multiplot.
(%i1) load(draw)$
(%i2) draw(
terminal = wxt,
gr2d(proportional_axes = xy,
explicit(x^2,x,0,1)),
gr2d(explicit(x^2,x,0,1),
xrange = [0,1],
yrange = [0,2],
proportional_axes=xy),
gr2d(explicit(x^2,x,0,1)))$

surface_hide

[Opcion grafica]

Valor por defecto: false


Cuando surface_hide vale true, las partes ocultas no se muestran en las superficies
de las escenas 3d.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw(columns=2,
gr3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)),
gr3d(surface_hide = true,
explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)) )$

terminal
Valor por defecto: screen

[Opcion grafica]

Captulo 47: draw

735

Selecciona el terminal a utilizar por Gnuplot; valores posibles son: screen (por defecto), png, pngcairo, jpg, gif, eps, eps_color, epslatex, epslatex_standalone,
svg, dumb, dumb_file, pdf, pdfcairo, wxt, animated_gif, multipage_pdfcairo,
multipage_pdf, multipage_eps, multipage_eps_color y aquaterm.
Los terminales screen, wxt y aquaterm tambien se pueden definir como una lista de
dos elementos: el propio nombre del terminal y un n
umero entero no negativo. De
esta forma se pueden abrir varias ventanas al mismo tiempo, cada una de ellas con
su n
umero correspondiente. Esta modalidad no funciona en plataformas Windows.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia. Tambien puede usarse como argumento de la funcion draw.
pdfcairo necesita Gnuplot 4.3.
pdf necesita que Gnuplot haya sido
compilado con la opci
on --enable-pdf y libpdf debe estar instalado
(http://www.pdflib.com/en/download/pdflib-family/pdflib-lite/).
Ejemplos:
(%i1) load(draw)$
(%i2) /* screen terminal (default) */
draw2d(explicit(x^2,x,-1,1))$
(%i3) /* png file */
draw2d(terminal = png,
explicit(x^2,x,-1,1))$
(%i4) /* jpg file */
draw2d(terminal
= jpg,
dimensions = [300,300],
explicit(x^2,x,-1,1))$
(%i5) /* eps file */
draw2d(file_name = "myfile",
explicit(x^2,x,-1,1),
terminal = eps)$
(%i6) /* pdf file */
draw2d(file_name = "mypdf",
dimensions = 100*[12.0,8.0],
explicit(x^2,x,-1,1),
terminal = pdf)$
(%i7) /* wxwidgets window */
draw2d(explicit(x^2,x,-1,1),
terminal = wxt)$
Ventanas m
ultiples.
(%i1) load(draw)$
(%i2) draw2d(explicit(x^5,x,-2,2), terminal=[screen, 3])$
(%i3) draw2d(explicit(x^2,x,-2,2), terminal=[screen, 0])$
Un fichero gif animado.
(%i1) load(draw)$
(%i2) draw(
delay
= 100,
file_name = "zzz",

736

Manual de Maxima

terminal = animated_gif,
gr2d(explicit(x^2,x,-1,1)),
gr2d(explicit(x^3,x,-1,1)),
gr2d(explicit(x^4,x,-1,1)));
End of animation sequence
(%o2)
[gr2d(explicit), gr2d(explicit), gr2d(explicit)]
La opci
on delay s
olo se activa en caso de gifs animados; se ignora en cualquier otro
caso.
Salida multip
agina en formato eps.
(%i1) load(draw)$
(%i2) draw(
file_name = "parabol",
terminal = multipage_eps,
dimensions = 100*[10,10],
gr2d(explicit(x^2,x,-1,1)),
gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1))) $
Veanse tambien file_name, pic_width, pic_height y delay.
[Opcion grafica]
Valor por defecto: "" (cadena vaca)
La opci
on title almacena una cadena con el ttulo de la escena. Por defecto, no se
escribe ttulo alguno.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(exp(u),u,-2,2),
title = "Exponential function")$

title

[Opcion grafica]
Valor por defecto: none
Si transform vale none, el espacio no sufre transformacion alguna y los objetos
gr
aficos se representan tal cual se definen. Si es necesario transformar el espacio,
se debe asignar una lista a la opcion transform. En caso de una escena 2D, la lista
toma la forma [f1(x,y), f2(x,y), x, y]. En caso de una escena 3D, la lista debe
ser de la forma [f1(x,y,z), f2(x,y,z), f3(x,y,z), x, y, z].
Los nombres de las variables definidas en las listas pueden ser diferentes de aquellas
utilizadas en las definiciones de los objetos graficos.
Ejemplos:
Rotaci
on en 2D.
(%i1) load(draw)$
(%i2) th : %pi / 4$
(%i3) draw2d(
color = "#e245f0",
proportional_axes = xy,

transform

Captulo 47: draw

737

line_width = 8,
triangle([3,2],[7,2],[5,5]),
border
= false,
fill_color = yellow,
transform = [cos(th)*x - sin(th)*y,
sin(th)*x + cos(th)*y, x, y],
triangle([3,2],[7,2],[5,5]) )$
Traslaci
on en 3D.
(%i1) load(draw)$
(%i2) draw3d(
color
= "#a02c00",
explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
transform = [x+10,y+10,z+10,x,y,z],
color
= blue,
explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3) )$
[Opcion grafica]
Valor por defecto: false
Cuando transparent vale false, las regiones internas de los polgonos se rellenan de
acuerdo con fill_color.
Esta opci
on afecta a los siguientes objetos graficos:
gr2d: polygon, rectangle y ellipse.

transparent

Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(polygon([[3,2],[7,2],[5,5]]),
transparent = true,
color
= blue,
polygon([[5,2],[9,2],[7,5]]) )$
[Opcion grafica]
Valor por defecto: [open, open]
Una lista de dos elementos, open y closed, indicando si los extremos de un objeto
gr
afico tube permanece abiertos o si deben ser cerrados. Por defecto, ambos extremos
se dejan abiertos.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(
tube_extremes = [open, closed],
tube(0, 0, a, 1,
a, 0, 8) )$

tube_extremes

[Opcion grafica]
Valor por defecto: false
Cuando unit_vectors vale true, los vectores se dibujan con modulo unidad. Esta
opci
on es u
til para representar campos vectoriales. Cuando unit_vectors vale false,
los vectores se dibujan con su longitud original.

unit_vectors

738

Manual de Maxima

Esta opci
on s
olo es relevante para objetos de tipo vector.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [-1,6],
yrange
= [-1,6],
head_length = 0.1,
vector([0,0],[5,2]),
unit_vectors = true,
color
= red,
vector([0,3],[5,2]))$

user_preamble

[Opcion grafica]

Valor por defecto: "" (cadena vaca)


Usuarios expertos en Gnuplot pueden hacer uso de esta opcion para afinar el comportamiento de Gnuplot escribiendo codigo que sera enviado justo antes de la instruccion
plot o splot.
El valor dado a esta opci
on debe ser una cadena alfanumerica o una lista de cadenas
(una por lnea).
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
Se le indica a Gnuplot que dibuje los ejes encima de todos los demas objetos,
(%i1) load(draw)$
(%i2) draw2d(
xaxis =true, xaxis_type=solid,
yaxis =true, yaxis_type=solid,
user_preamble="set grid front",
region(x^2+y^2<1 ,x,-1.5,1.5,y,-1.5,1.5))$
[Opcion grafica]

view
Valor por defecto: [60,30]

~ 3 n del observador en una


Un par de
angulos, medidos en grados, indicando la direcciA
escena 3D. El primer
angulo es la rotacion vertical alrededor del eje x, dentro del
intervalo [0, 360]. El segundo es la rotacion horizontal alrededor del eje z, dentro del
intervalo [0, 360].
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(view = [170, 360],
explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$

wired_surface
Valor por defecto: false

[Opcion grafica]

Captulo 47: draw

739

Indica si las superficies en 3D en modo enhanced3d deben mostrar o no la malla que


unen los puntos.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d
= [sin(x),x,y],
wired_surface = true,
explicit(x^2+y^2,x,-1,1,y,-1,1)) $
[Opcion grafica]

x_voxel
Valor por defecto: 10

x_voxel es el n
umero de voxels en la direccion x a utilizar por el algoritmo marching
cubes implementado por el objeto implicit tridimensional. Tambien se utiliza como
opci
on del objeto gr
afico region.
[Opcion grafica]

xaxis
Valor por defecto: false
Si xaxis vale true, se dibujara el eje x.

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
xaxis
= true,
xaxis_color = blue)$
Veanse tambien xaxis_width, xaxis_type y xaxis_color.

xaxis_color

[Opcion grafica]

Valor por defecto: "black"


xaxis_color especifica el color para el eje x. Vease color para ver como se definen
los colores.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
xaxis
= true,
xaxis_color = red)$
Veanse tambien xaxis, xaxis_width y xaxis_type.

xaxis_secondary
Valor por defecto: false

[Opcion grafica]

740

Manual de Maxima

Si xaxis_secondary vale true, los valores de las funciones se pueden representar


respecto del eje x secundario, el cual se dibuja en la parte superior de la escena.
Notese que esta es una opci
on grafica local que solo afecta a objetos 2d.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
key
= "Bottom x-axis",
explicit(x+1,x,1,2),
color = red,
key
= "Above x-axis",
xtics_secondary = true,
xaxis_secondary = true,
explicit(x^2,x,-1,1)) $
Veanse tambien xrange_secondary, xtics_secondary, xtics_rotate_secondary,
xtics_axis_secondary y xaxis_secondary.
[Opcion grafica]
Valor por defecto: dots
xaxis_type indica c
omo se debe dibujar el eje x; valores admisibles son solid y
dots.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
xaxis
= true,
xaxis_type = solid)$
Veanse tambien xaxis, xaxis_width y xaxis_color.

xaxis_type

[Opcion grafica]
Valor por defecto: 1
xaxis_width es el ancho del eje x. Su valor debe ser un n
umero positivo.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
xaxis
= true,
xaxis_width = 3)$
Veanse tambien xaxis, xaxis_type y xaxis_color.

xaxis_width

[Opcion grafica]
Valor por defecto: "" (cadena vaca)
La opci
on xlabel almacena una cadena con la etiqueta del eje x. Por defecto, el eje
no tiene etiqueta.

xlabel

Captulo 47: draw

741

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xlabel = "Time",
explicit(exp(u),u,-2,2),
ylabel = "Population")$
Veanse tambien xlabel_secondary, ylabel, ylabel_secondary y zlabel.

xlabel_secondary

[Opcion grafica]

Valor por defecto: "" (cadena vaca)


La opci
on xlabel_secondary almacena una cadena con la etiqueta del eje x secundario. Por defecto, el eje no tiene etiqueta.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
xaxis_secondary=true,yaxis_secondary=true,
xtics_secondary=true,ytics_secondary=true,
xlabel_secondary="t[s]",
ylabel_secondary="U[V]",
explicit(sin(t),t,0,10) )$
Veanse tambien xlabel, ylabel, ylabel_secondary y zlabel.
[Opcion grafica]
Valor por defecto: auto
Cuando xrange vale auto, el rango de la coordenada x se calcula de forma automatica.
Si el usuario quiere especificar un intervalo para x, este debe expresarse como una
lista de Maxima, como en xrange=[-2, 3].
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange = [-3,5],
explicit(x^2,x,-1,1))$
Veanse tambien yrange y zrange.

xrange

[Opcion grafica]
Valor por defecto: auto
Cuando xrange_secondary vale auto, el rango del eje x secundario se calcula de
forma autom
atica.
Si el usuario quiere especificar un intervalo para el eje x secundario, este debe expresarse como una lista de Maxima, como en xrange_secondary=[-2, 3].

xrange_secondary

742

Manual de Maxima

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Veanse tambien xrange, yrange, zrange y yrange_secondary.
[Opcion grafica]

xtics
Valor por defecto: true

Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas del eje x.
Cuando a xtics se le da el valor true, las marcas se dibujaran de forma autom
atica.
Cuando a xtics se le da el valor false, no habra marcas en los ejes.
Cuando a xtics se le da un valor numerico positivo, se interpretara como la
distancia entre dos marcas consecutivas.
Cuando a xtics se le da una lista de longitud tres de la forma [start,incr,end],
las marcas se dibujar
an desde start hasta end a intervalos de longitud incr.
Cuando a xtics se le da un conjunto de n
umeros de la forma {n1, n2, ...}, las
marcas se dibujar
an exactamente en los valores n1, n2, ...
Cuando a xtics se le da un conjunto de pares de la forma {["label1", n1],
["label2", n2], ...}, las marcas correspondientes a los valores n1, n2, ... se
etiquetar
an con "label1", "label2", ..., respectivamente.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplos:
Marcas desactivadas.
(%i1) load(draw)$
(%i2) draw2d(xtics = false,
explicit(x^3,x,-1,1)

)$

Marcas cada 1/4 unidades.


(%i1) load(draw)$
(%i2) draw2d(xtics = 1/4,
explicit(x^3,x,-1,1)

)$

Marcas desde -3/4 hasta 3/4 en saltos de 1/8.


(%i1) load(draw)$
(%i2) draw2d(xtics = [-3/4,1/8,3/4],
explicit(x^3,x,-1,1) )$
Marcas en los puntos -1/2, -1/4 y 3/4.
(%i1) load(draw)$
(%i2) draw2d(xtics = {-1/2,-1/4,3/4},
explicit(x^3,x,-1,1) )$
Marcas etiquetadas.
(%i1) load(draw)$
(%i2) draw2d(xtics = {["High",0.75],["Medium",0],["Low",-0.75]},
explicit(x^3,x,-1,1) )$

Captulo 47: draw

xtics_axis

743

[Opcion grafica]

Valor por defecto: false


Si xtics_axis vale true, las marcas y sus etiquetas se dibujan sobre el propio eje x,
si vale false las marcas se colocan a lo largo del borde del grafico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

xtics_rotate

[Opcion grafica]

Valor por defecto: false


Si xtics_rotate vale true, las marcas del eje x se giran 90 grados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
[Opcion grafica]
Valor por defecto: false
Si xtics_rotate_secondary vale true, las marcas del eje x secundario se giran 90
grados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

xtics_rotate_secondary

[Opcion grafica]
Valor por defecto: auto
Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas del eje x
secundario.
Vease xtics para una descripcion completa.

xtics_secondary

[Opcion grafica]
Valor por defecto: false
Si xtics_secondary_axis vale true, las marcas y sus etiquetas se dibujan sobre el
propio eje x secundario, si vale false las marcas se colocan a lo largo del borde del
gr
afico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

xtics_secondary_axis

xu_grid

[Opcion grafica]

Valor por defecto: 30


xu_grid es el n
umero de coordenadas de la primera variable (x en superficies explctas
y u en las parametricas) para formar la rejilla de puntos muestrales.
Esta opci
on afecta a los siguientes objetos graficos:
gr3d: explicit y parametric_surface.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(xu_grid = 10,
yv_grid = 50,
explicit(x^2+y^2,x,-3,3,y,-3,3) )$
Vease tambien yv_grid.

744

Manual de Maxima

xy_file

[Opcion grafica]

Valor por defecto: "" (cadena vaca)


xy_file es el nombre del fichero donde se almacenaran las coordenadas despues de
hacer clic con el bot
on del raton en un punto de la imagen y pulsado la tecla x. Por
defecto, las coordenadas no se almacenan.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
[Graphic option]
Valor por defecto: false
Coloca el plano-xy en escenas 3D. Si xyplane vale false, el plano-xy se coloca autom
aticamente; en cambio, si toma un valor real, el plano-xy intersectara con el eje z
a ese nivel. Esta opci
on no tiene efecto alguno en escenas 2D.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(xyplane = %e-2,
explicit(x^2+y^2,x,-1,1,y,-1,1))$

xyplane

y_voxel

[Opcion grafica]

Valor por defecto: 10


y_voxel es el n
umero de voxels en la direccion y a utilizar por el algoritmo marching
cubes implementado por el objeto implicit tridimensional. Tambien se utiliza como
opci
on del objeto gr
afico region.
[Opcion grafica]
Valor por defecto: false
Si yaxis vale true, se dibujara el eje y.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
yaxis
= true,
yaxis_color = blue)$
Veanse tambien yaxis_width, yaxis_type y yaxis_color.

yaxis

[Opcion grafica]
Valor por defecto: "black"
yaxis_color especifica el color para el eje y. Vease color para ver como se definen
los colores.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:

yaxis_color

Captulo 47: draw

745

(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
yaxis
= true,
yaxis_color = red)$
Veanse tambien yaxis, yaxis_width y yaxis_type.
[Opcion grafica]
Valor por defecto: false
Si yaxis_secondary vale true, los valores de las funciones se pueden representar
respecto del eje y secundario, el cual se dibuja al lado derecho de la escena.
Notese que esta es una opci
on grafica local que solo afecta a objetos 2d.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
explicit(sin(x),x,0,10),
yaxis_secondary = true,
ytics_secondary = true,
color = blue,
explicit(100*sin(x+0.1)+2,x,0,10));
Veanse tambien yrange_secondary, ytics_secondary, ytics_rotate_secondary y
ytics_axis_secondary.

yaxis_secondary

[Opcion grafica]
Valor por defecto: dots
yaxis_type indica c
omo se debe dibujar el eje y; valores admisibles son solid y
dots.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
yaxis
= true,
yaxis_type = solid)$
Veanse tambien yaxis, yaxis_width y yaxis_color.

yaxis_type

[Opcion grafica]
Valor por defecto: 1
yaxis_width es el ancho del eje y. Su valor debe ser un n
umero positivo.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(x^3,x,-1,1),
yaxis
= true,
yaxis_width = 3)$
Veanse tambien yaxis, yaxis_type y yaxis_color.

yaxis_width

746

Manual de Maxima

ylabel

[Opcion grafica]

Valor por defecto: "" (cadena vaca)


La opci
on ylabel almacena una cadena con la etiqueta del eje y. Por defecto, el eje
no tiene etiqueta.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xlabel = "Time",
ylabel = "Population",
explicit(exp(u),u,-2,2) )$
Veanse tambien xlabel, xlabel_secondary, ylabel_secondary y zlabel.
[Opcion grafica]
Valor por defecto: "" (cadena vaca)
La opci
on ylabel_secondary almacena una cadena con la etiqueta del eje y secundario. Por defecto, el eje no tiene etiqueta.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
key="current",
xlabel="t[s]",
ylabel="I[A]",ylabel_secondary="P[W]",
explicit(sin(t),t,0,10),
yaxis_secondary=true,
ytics_secondary=true,
color=red,key="Power",
explicit((sin(t))^2,t,0,10)
)$
Veanse tambien xlabel, xlabel_secondary, ylabel and zlabel.

ylabel_secondary

[Opcion grafica]
Valor por defecto: auto
Cuando yrange vale auto, el rango de la coordenada y se calcula de forma automatica.
Si el usuario quiere especificar un intervalo para y, este debe expresarse como una
lista de Maxima, como en yrange=[-2, 3].
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(yrange = [-2,3],
explicit(x^2,x,-1,1),

yrange

Captulo 47: draw

747

xrange = [-3,3])$
Veanse tambien xrange y zrange.

yrange_secondary

[Opcion grafica]

Valor por defecto: auto


Cuando yrange_secondary vale auto, el rango del eje y secundario se calcula de
forma autom
atica.
Si el usuario quiere especificar un intervalo para el eje y secundario, este debe expresarse como una lista de Maxima, como en yrange_secondary=[-2, 3].
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
explicit(sin(x),x,0,10),
yaxis_secondary = true,
ytics_secondary = true,
yrange = [-3, 3],
yrange_secondary = [-20, 20],
color = blue,
explicit(100*sin(x+0.1)+2,x,0,10)) $
Veanse tambien xrange, yrange y zrange.
[Opcion grafica]
Valor por defecto: true
Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas del eje y.
Vease xtics para una descripcion completa.

ytics

[Opcion grafica]
Valor por defecto: false
Si ytics_axis vale true, las marcas y sus etiquetas se dibujan sobre el propio eje y,
si vale false las marcas se colocan a lo largo del borde del grafico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

ytics_axis

[Opcion grafica]
Valor por defecto: false
Si ytics_rotate vale true, las marcas del eje y se giran 90 grados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

ytics_rotate

[Opcion grafica]
Valor por defecto: false
Si ytics_rotate_secondary vale true, las marcas del eje y secundario se giran 90
grados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

ytics_rotate_secondary

748

Manual de Maxima

ytics_secondary

[Opcion grafica]

Valor por defecto: auto


Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas del eje y
secundario.
Vease xtics para una descripcion completa.

ytics_secondary_axis

[Opcion grafica]

Valor por defecto: false


Si ytics_secondary_axis vale true, las marcas y sus etiquetas se dibujan sobre el
propio eje y secundario, si vale false las marcas se colocan a lo largo del borde del
gr
afico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
[Opcion grafica]
Valor por defecto: 30
yv_grid es el n
umero de coordenadas de la segunda variable (y en superficies explctas
y v en las parametricas) para formar la rejilla de puntos muestrales.
Esta opci
on afecta a los siguientes objetos graficos:
gr3d: explicit y parametric_surface.

yv_grid

Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(xu_grid = 10,
yv_grid = 50,
explicit(x^2+y^2,x,-3,3,y,-3,3) )$
Vease tambien xu_grid.
[Opcion grafica]
Valor por defecto: 10
z_voxel es el n
umero de voxels en la direccion z a utilizar por el algoritmo marching
cubes implementado por el objeto implicit tridimensional.

z_voxel

[Opcion grafica]
Valor por defecto: false
Si zaxis vale true, se dibujara el eje z en escenas 3D. Esta opcion no tiene efecto
alguno en escenas 2D.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
zaxis
= true,
zaxis_type = solid,
zaxis_color = blue)$
Veanse tambien zaxis_width, zaxis_type y zaxis_color.

zaxis

Captulo 47: draw

zaxis_color

749

[Opcion grafica]

Valor por defecto: "black"


zaxis_color especifica el color para el eje z. Vease color para ver como se definen
los colores. Esta opci
on no tiene efecto alguno en escenas 2D.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
zaxis
= true,
zaxis_type = solid,
zaxis_color = red)$
Veanse tambien zaxis, zaxis_width y zaxis_type.

zaxis_type

[Opcion grafica]

Valor por defecto: dots


zaxis_type indica c
omo se debe dibujar el eje z; valores admisibles son solid y dots.
Esta opci
on no tiene efecto alguno en escenas 2D.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
zaxis
= true,
zaxis_type = solid)$
Veanse tambien zaxis, zaxis_width y zaxis_color.
[Opcion grafica]
Valor por defecto: 1
zaxis_width es el ancho del eje z. Su valor debe ser un n
umero positivo. Esta opcion
no tiene efecto alguno en escenas 2D.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
zaxis
= true,
zaxis_type = solid,
zaxis_width = 3)$
Veanse tambien zaxis, zaxis_type y zaxis_color.

zaxis_width

[Opcion grafica]
Valor por defecto: "" (cadena vaca)
La opci
on zlabel almacena una cadena con la etiqueta del eje z. Por defecto, el eje
no tiene etiqueta.

zlabel

750

Manual de Maxima

Puesto que esta es una opci


on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(zlabel = "Z variable",
ylabel = "Y variable",
explicit(sin(x^2+y^2),x,-2,2,y,-2,2),
xlabel = "X variable" )$
Veanse tambien xlabel y ylabel.
[Opcion grafica]

zrange
Valor por defecto: auto

Cuando zrange vale auto, el rango de la coordenada z se calcula de forma automatica.


Si el usuario quiere especificar un intervalo para z, este debe expresarse como una
lista de Maxima, como en zrange=[-2, 3].
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(yrange = [-3,3],
zrange = [-2,5],
explicit(x^2+y^2,x,-1,1,y,-1,1),
xrange = [-3,3])$
Veanse tambien xrange y yrange.

ztics

[Opcion grafica]

Valor por defecto: true


Esta opci
on gr
afica controla la forma en la que se dibujaran las marcas del eje z.
Vease xtics para una descripcion completa.

ztics_axis

[Opcion grafica]

Valor por defecto: false


Si ztics_axis vale true, las marcas y sus etiquetas se dibujan sobre el propio eje z,
si vale false las marcas se colocan a lo largo del borde del grafico.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

ztics_rotate

[Opcion grafica]

Valor por defecto: false


Si ztics_rotate vale true, las marcas del eje z se giran 90 grados.
Puesto que esta es una opci
on global, su posicion dentro de la descripcion de la escena
no reviste importancia.

Captulo 47: draw

751

47.2.4 Objetos gr
aficos
bars ([x1,h1,w1 ], [x2,h2,w2, ...])

[Objeto grafico]
Dibuja barras verticales en 2D.
2D
bars ([x1,h1,w1 ], [x2,h2,w2, ...]) dibuja barras centradas en los valores x1, x2,
... de alturas h1, h2, ... y anchos w1, w2, ...
Este objeto se ve afectado por las siguientes opciones gr
aficas: key, fill_color,
fill_density y line_width.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
key
= "Grupo A",
fill_color
= blue,
fill_density = 0.2,
bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4]),
key
= "Grupo B",
fill_color
= red,
fill_density = 0.6,
line_width
= 4,
bars([1.2,4,0.4],[2.2,-2,0.4],[3.2,5,0.4]),
xaxis = true);

cylindrical (radius,z,minz,maxz,azi,minazi,maxazi )

[Objeto grafico]

Dibuja funciones 3D definidas en coordenadas cilndricas.


3D
cylindrical (radius,z,minz,maxz,azi,minazi,maxazi ) dibuja la funcion
radius (z,azi ) definida en coordenadas cilndricas, con la variable z tomando
valores desde minz hasta maxz y el azimut azi tomando valores desde minazi hasta
maxazi.
Este objeto se ve afectado por las siguientes opciones gr
aficas: xu_grid, yv_grid,
line_type, key, wired_surface, enhanced3d y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(cylindrical(1,z,-2,2,az,0,2*%pi))$

elevation_grid (mat,x0,y0,width,height )

[Objeto grafico]
Dibuja la matriz mat en 3D. Los valores z se toman de mat, las abscisas van desde
x0 hasta x0 + width y las ordenadas desde y0 hasta y0 + height. El elemento a(1, 1)
se proyecta sobre el punto (x0, y0 + height), a(1, n) sobre (x0 + width, y0 + height),
a(m, 1) sobre (x0, y0) y a(m, n) sobre (x0 + width, y0).
Este objeto se ve afectado por las siguientes opciones gr
aficas: line_type, line_
width, key, wired_surface, enhanced3d y color.
En versiones antiguas de Maxima, elevation_grid se llamaba mesh. Vease tambien
mesh.
Ejemplo:

752

Manual de Maxima

(%i1) load(draw)$
(%i2) m: apply(
matrix,
makelist(makelist(random(10.0),k,1,30),i,1,20)) $
(%i3) draw3d(
color = blue,
elevation_grid(m,0,0,3,2),
xlabel = "x",
ylabel = "y",
surface_hide = true);

ellipse (xc, yc, a, b, ang1, ang2 )

[Objeto grafico]

Dibuja elipses y crculos en 2D.


2D
ellipse (xc, yc, a, b, ang1, ang2 ) dibuja una elipse de centro [xc, yc ] con
semiejes horizontal y vertical a y b, respectivamente, comenzando en el angulo ang1
y trazando un arco de amplitud igual al angulo ang2.
Este objeto se ve afectado por las siguientes opciones gr
aficas: nticks, transparent,
fill_color, border, line_width, line_type, key y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(transparent = false,
fill_color = red,
color
= gray30,
transparent = false,
line_width = 5,
ellipse(0,6,3,2,270,-270),
/* center (x,y), a, b, start & end in degrees */
transparent = true,
color
= blue,
line_width = 3,
ellipse(2.5,6,2,3,30,-90),
xrange
= [-3,6],
yrange
= [2,9] )$

errors ([x1,x2,...], [y1,y2,...])

[Objeto grafico]
Dibuja puntos con barras de error asociadas horizontales, verticales o de ambos tipos,
seg
un sea el valor de la opci
on error_type.

2D
Si error_type=x, los argumentos a errors deben ser de la forma [x,y,xdelta]
o [x,y,xlow,xhigh].
Si error_type=y, los argumentos deben ser del
tipo [x,y,ydelta] o [x,y,ylow,yhigh].
Si error_type=xy o error_
type=boxes, los argumentos deben ser de la forma [x,y,xdelta,ydelta] o
[x,y,xlow,xhigh,ylow,yhigh].
Vease tambien error_type.

Captulo 47: draw

753

Este objeto se ve afectado por las siguientes opciones gr


aficas: error_type, points_
joined, line_width, key, line_type, color, fill_density, xaxis_secondary y
yaxis_secondary.
La opci
on fill_density solo es relevante cuando error_type=boxes.
Ejemplos:
Barras de error horizontales.
(%i1) load(draw)$
(%i2) draw2d(
error_type = y,
errors([[1,2,1], [3,5,3], [10,3,1], [17,6,2]]))$
Barras de error horizontales y verticales.
(%i1) load(draw)$
(%i2) draw2d(
error_type = xy,
points_joined = true,
color = blue,
errors([[1,2,1,2], [3,5,2,1], [10,3,1,1], [17,6,1/2,2]]));

explicit (fcn,var,minval,maxval )
explicit (fcn,var1,minval1,maxval1,var2,minval2,maxval2 )

[Objeto grafico]
[Objeto grafico]

Dibuja funciones explcitas en 2D y 3D.


2D
explicit (fcn,var,minval,maxval ) dibuja la funcion explcita fcn, con la variable
var tomando valores desde minval hasta maxval.
Este objeto se ve afectado por las siguientes opciones gr
aficas: nticks, adapt_depth,
draw_realpart, line_width, line_type, key, filled_func, fill_color y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(line_width = 3,
color
= blue,
explicit(x^2,x,-3,3) )$
(%i3) draw2d(fill_color = brown,
filled_func = true,
explicit(x^2,x,-3,3) )$
3D
explicit (fcn,var1,minval1,maxval1,var2,minval2,maxval2 ) dibuja la funcion
explcita fcn, con la variable var1 tomando valores desde minval1 hasta maxval1 y la
variable var2 tomando valores desde minval2 hasta maxval2.
Este objeto se ve afectado por las siguientes opciones gr
aficas: draw_realpart, xu_
grid, yv_grid, line_type, line_width, key, wired_surface, enhanced3d y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(key
= "Gauss",
color = "#a02c00",

754

Manual de Maxima

explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
yv_grid
= 10,
color = blue,
key
= "Plane",
explicit(x+y,x,-5,5,y,-5,5),
surface_hide = true)$
Vease tambien filled_func para el relleno de curvas.

image (im,x0,y0,width,height )

[Objeto grafico]

Reproduce una imagen en 2D.


2D
image (im,x0,y0,width,height ): dibuja la imagen im en la region rectangular
desde el vertice (x0,y0 ) hasta el (x0+width,y0+height ) del plano real. El argumento im debe ser una matriz de n
umeros reales, una matriz de vectores de longitud
tres o un objeto de tipo picture.
Si im es una matriz de n
umeros reales, los valores de los pxeles se interpretan seg
un
indique la opci
on gr
afica palette, que es un vector de longitud tres con sus componentes tomando valores enteros en el rango desde -36 a +36; cada valor es un ndice
para seleccionar una f
ormula que transforma los niveles numericos en las componentes
crom
aticas rojo, verde y azul:
0: 0
1: 0.5
2: 1
3: x
4: x^2
5: x^3
6: x^4
7: sqrt(x)
8: sqrt(sqrt(x))
9: sin(90x)
10: cos(90x)
11: |x-0.5|
12: (2x-1)^2
13: sin(180x)
14: |cos(180x)|
15: sin(360x)
16: cos(360x)
17: |sin(360x)|
18: |cos(360x)|
19: |sin(720x)| 20: |cos(720x)|
21: 3x
22: 3x-1
23: 3x-2
24: |3x-1|
25: |3x-2|
26: (3x-1)/2
27: (3x-2)/2
28: |(3x-1)/2|
29: |(3x-2)/2|
30: x/0.32-0.78125 31: 2*x-0.84
32: 4x;1;-2x+1.84;x/0.08-11.5
33: |2*x - 0.5|
34: 2*x
35: 2*x - 0.5
36: 2*x - 1
los n
umeros negativos se interpretan como colores invertidos de las componentes
crom
aticas.
palette = gray y palette = color son atajos para palette = [3,3,3] y palette =
[7,5,15], respectivamente.
Si im es una matriz de vectores de longitud tres, estos se interpretaran como las
componentes crom
aticas rojo, verde y azul.
Ejemplos:
Si im es una matriz de n
umeros reales, los valores de los pxeles se interpretan seg
un
indique la opci
on gr
afica palette.
(%i1) load(draw)$
(%i2) im: apply(

Captulo 47: draw

755

matrix,
makelist(makelist(random(200),i,1,30),i,1,30))$
(%i3) /* palette = color, default */
draw2d(image(im,0,0,30,30))$
(%i4) draw2d(palette = gray, image(im,0,0,30,30))$
(%i5) draw2d(palette = [15,20,-4],
colorbox=false,
image(im,0,0,30,30))$
Vease tambien colorbox.
Si im es una matriz de vectores de longitud tres, estos se interpretaran como las
componentes crom
aticas rojo, verde y azul.
(%i1) load(draw)$
(%i2) im: apply(
matrix,
makelist(
makelist([random(300),
random(300),
random(300)],i,1,30),i,1,30))$
(%i3) draw2d(image(im,0,0,30,30))$
El paquete draw carga automaticamente el paquete picture. En este ejemplo, una
imagen de niveles se define a mano, reproduciendola a continuacion.
(%i1) load(draw)$
(%i2) im: make_level_picture([45,87,2,134,204,16],3,2);
(%o2)
picture(level, 3, 2, {Array: #(45 87 2 134 204 16)})
(%i3) /* default color palette */
draw2d(image(im,0,0,30,30))$
(%i4) /* gray palette */
draw2d(palette = gray,
image(im,0,0,30,30))$
Se lee un fichero xpm y se reproduce.
(%i1) load(draw)$
(%i2) im: read_xpm("myfile.xpm")$
(%i3) draw2d(image(im,0,0,10,7))$
Veanse tambien make_level_picture, make_rgb_picture y read_xpm.
En
http://www.telefonica.net/web2/biomates/maxima/gpdraw/image
encuentran ejemplos m
as elaborados.

implicit (fcn,x,xmin,xmax,y,ymin,ymax )
implicit (fcn,x,xmin,xmax,y,ymin,ymax,z,zmin,zmax )

se

[Objeto grafico]
[Objeto grafico]

Dibuja funciones implcitas en 2D y 3D.


2D
implicit (fcn,x,xmin,xmax,y,ymin,ymax ) dibuja la funcion implcita fcn, con la
variable x tomando valores desde xmin hasta xmax, y la variable y tomando valores
desde ymin hasta ymax.

756

Manual de Maxima

Este objeto se ve afectado por las siguientes opciones gr


aficas: ip_grid, ip_grid_in,
line_width, line_type, key y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(terminal = eps,
grid
= true,
line_type = solid,
key
= "y^2=x^3-2*x+1",
implicit(y^2=x^3-2*x+1, x, -4,4, y, -4,4),
line_type = dots,
key
= "x^3+y^3 = 3*x*y^2-x-1",
implicit(x^3+y^3 = 3*x*y^2-x-1, x,-4,4, y,-4,4),
title
= "Two implicit functions" )$
3D
implicit (fcn,x,xmin,xmax, y,ymin,ymax, z,zmin,zmax ) dibuja la funcion
implcita fcn, con la variable x tomando valores desde xmin hasta xmax, la variable
y tomando valores desde ymin hasta ymax y la variable z tomando valores desde
zmin hasta zmax. Este objeto esta programado con el algoritmo marching cubes.
Este objeto se ve afectado por las siguientes opciones gr
aficas: x_voxel, y_voxel,
z_voxel, line_width, line_type, key, wired_surface, enhanced3d y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(
color=blue,
implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
x,-1,1,y,-1.2,2.3,z,-1,1),
surface_hide=true);

label ([string,x,y ],...)


label ([string,x,y,z ],...)

[Objeto grafico]
[Objeto grafico]

Escribe etiquetas en 2D y 3D.


Las etiquetas coloreadas s
olo trabajan con Gnuplot 4.3. Este es un fallo conocido del
paquete draw.
Este objeto se ve afectado por las siguientes opciones gr
aficas: label_alignment,
label_orientation y color.
2D
label([string,x,y ]) escribe la cadena de caracteres string en el punto [x,y ].
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(yrange = [0.1,1.4],
color = red,
label(["Label in red",0,0.3]),
color = "#0000ff",
label(["Label in blue",0,0.6]),

Captulo 47: draw

757

color = light_blue,
label(["Label in light-blue",0,0.9],
["Another light-blue",0,1.2]) )$
3D
label([string,x,y,z ]) escribe la cadena de caracteres string en el punto [x,y,z ].
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
color = red,
label(["UP 1",-2,0,3], ["UP 2",1.5,0,4]),
color = blue,
label(["DOWN 1",2,0,-3]) )$

mesh (fila_1,fila_2,...)

[Objeto grafico]

Dibuja un enrejado cuadrangular en 3D.


3D
El argumento fila i es una lista de n puntos en 3D de la forma [[x_i1,y_i1,z_
i1], ...,[x_in,y_in,z_in]], siendo todas las filas de igual longitud. Todos estos
puntos definen una superficie arbitraria en 3D. En cierto sentido, se trata de una
generalizaci
on del objeto elevation_grid.
Este objeto se ve afectado por las siguientes opciones gr
aficas: line_type, line_
width, color, key, wired_surface, enhanced3d y transform.
Ejemplos:
Un sencillo ejemplo.
(%i1) load(draw)$
(%i2) draw3d(
mesh([[1,1,3],
[7,3,1],[12,-2,4],[15,0,5]],
[[2,7,8],
[4,3,1],[10,5,8], [12,7,1]],
[[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $
Dibujando un tri
angulo en 3D.
(%i1) load(draw)$
(%i2) draw3d(
line_width = 2,
mesh([[1,0,0],[0,1,0]],
[[0,0,1],[0,0,1]])) $
Dos cuadril
ateros.
(%i1) load(draw)$
(%i2) draw3d(
surface_hide = true,
line_width
= 3,
color = red,
mesh([[0,0,0], [0,1,0]],
[[2,0,2], [2,2,2]]),
color = blue,

758

Manual de Maxima

mesh([[0,0,2], [0,1,2]],
[[2,0,4], [2,2,4]])) $

parametric (xfun,yfun,par,parmin,parmax )
parametric (xfun,yfun,zfun,par,parmin,parmax )

[Objeto grafico]
[Objeto grafico]

Dibuja funciones parametricas en 2D y 3D.


Este objeto se ve afectado por las siguientes opciones gr
aficas: nticks, line_width,
line_type, key, color y enhanced3d.
2D
parametric (xfun,yfun,par,parmin,parmax ) dibuja la funcion parametrica
[xfun,yfun ], con el par
ametro par tomando valores desde parmin hasta parmax.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(explicit(exp(x),x,-1,3),
color = red,
key
= "This is the parametric one!!",
parametric(2*cos(rrr),rrr^2,rrr,0,2*%pi))$
3D
parametric (xfun,yfun,zfun,par,parmin,parmax ) dibuja la curva parametrica
[xfun,yfun,zfun ], con el parametro par tomando valores desde parmin hasta
parmax.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
color = royalblue,
parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2),
color
= turquoise,
line_width = 2,
parametric(t^2,sin(t),2+t,t,0,2),
surface_hide = true,
title = "Surface & curves" )$

parametric_surface
[Objeto grafico]
(xfun,yfun,zfun,par1,par1min,par1max,par2,par2min,par2max )
Dibuja superficies parametricas en 3D.
3D
parametric_surface (xfun,yfun,zfun,par1,par1min,par1max,par2,par2min,par2max )
dibuja la superficie parametrica [xfun,yfun,zfun ], con el parametro par1 tomando
valores desde par1min hasta par1max y el parametro par2 tomando valores desde
par2min hasta par2max.
Este objeto se ve afectado por las siguientes opciones gr
aficas: draw_realpart, xu_
grid, yv_grid, line_type, line_width, key, wired_surface, enhanced3d y color.
Ejemplo:

Captulo 47: draw

759

(%i1) load(draw)$
(%i2) draw3d(title
= "Sea shell",
xu_grid
= 100,
yv_grid
= 25,
view
= [100,20],
surface_hide
= true,
parametric_surface(0.5*u*cos(u)*(cos(v)+1),
0.5*u*sin(u)*(cos(v)+1),
u*sin(v) - ((u+3)/8*%pi)^2 - 20,
u, 0, 13*%pi, v, -%pi, %pi) )$
([[x1,y1 ], [x2,y2 ],...])
[Objeto grafico]
([x1,x2,...], [y1,y2,...])
[Objeto grafico]
([y1,y2,...])
[Objeto grafico]
([[x1,y1,z1 ], [x2,y2,z2 ],...])
[Objeto grafico]
([x1,x2,...], [y1,y2,...], [z1,z2,...])
[Objeto grafico]
(matrix )
[Objeto grafico]
(1d_y_array )
[Objeto grafico]
(1d_x_array, 1d_y_array )
[Objeto grafico]
(1d_x_array, 1d_y_array, 1d_z_array )
[Objeto grafico]
(2d_xy_array )
[Objeto grafico]
(2d_xyz_array )
[Objeto grafico]
Dibuja puntos en 2D y 3D.
Este objeto se ve afectado por las siguientes opciones gr
aficas: point_size, point_
type, points_joined, line_width, key, line_type y color. En modo 3D tambien
se ve afectado por enhanced3d.
2D
points ([[x1,y1 ], [x2,y2 ],...])
o
points ([x1,x2,...], [y1,y2,...])
dibuja los puntos [x1,y1 ], [x2,y2 ], etc. Si no se dan las abscisas, estas
se asignan autom
aticamente a enteros positivos consecutivos, de forma que
points([y1,y2,...]) dibuja los puntos [1,y1 ], [2,y2 ], etc. Si matrix es una
matriz de dos columnas o de dos filas, points (matrix ) dibuja los puntos asociados.
Si 1d y array es un array lisp de n
umeros en 1D, points (1d_y_array ) los dibujar
a
asignando las abscisas a n
umeros enteros consecutivos. points (1d_x_array, 1d_
y_array ) dibuja los puntos cuyas coordenadas se toman de los dos arrays pasados
como argumentos. Si 2d xy array es un array lisp 2D de dos filas, o de dos columnas,
points (2d_xy_array ) dibuja los correspondientes puntos del plano.
Ejemplos:
Dos tipos de argumentos para points, una lista de pares ordenados y dos listas con
las coordenadas separadas.
(%i1) load(draw)$
(%i2) draw2d(
key = "Small points",
points(makelist([random(20),random(50)],k,1,10)),
point_type
= circle,
point_size
= 3,

points
points
points
points
points
points
points
points
points
points
points

760

Manual de Maxima

points_joined = true,
key
= "Great points",
points(makelist(k,k,1,20),makelist(random(30),k,1,20)),
point_type
= filled_down_triangle,
key
= "Automatic abscissas",
color
= red,
points([2,12,8]))$
Dibujando impulsos.
(%i1) load(draw)$
(%i2) draw2d(
points_joined = impulses,
line_width
= 2,
color
= red,
points(makelist([random(20),random(50)],k,1,10)))$
Array con ordenadas.
(%i1)
(%i2)
(%i3)
(%i4)

load(draw)$
a: make_array (flonum, 100) $
for i:0 thru 99 do a[i]: random(1.0) $
draw2d(points(a)) $

Dos arrays con coordenadas separadas.


(%i1)
(%i2)
(%i3)
(%i4)

load(draw)$
x: make_array (flonum, 100) $
y: make_array (fixnum, 100) $
for i:0 thru 99 do (
x[i]: float(i/100),
y[i]: random(10) ) $
(%i5) draw2d(points(x, y)) $

Un array 2D de dos columnas.


(%i1) load(draw)$
(%i2) xy: make_array(flonum, 100, 2) $
(%i3) for i:0 thru 99 do (
xy[i, 0]: float(i/100),
xy[i, 1]: random(10) ) $
(%i4) draw2d(points(xy)) $
Dibujando un array rellenado con la funcion read_array.
(%i1)
(%i2)
(%i3)
(%i4)

load(draw)$
a: make_array(flonum,100) $
read_array (file_search ("pidigits.data"), a) $
draw2d(points(a)) $

3D
points ([[x1,y1,z1 ], [x2,y2,z2 ],...])
o
points ([x1,x2,...],
[y1,y2,...], [z1,z2,...]) dibuja los puntos [x1,y1,z1 ], [x2,y2,z2 ], etc. Si
matrix es una matriz de tres columnas o de tres filas, points (matrix ) dibuja los

Captulo 47: draw

761

puntos asociados. Si matrix es una matriz columna o fila, las abscisas se asignan
autom
aticamente.
En caso de que los argumentos sean arrays lisp, points (1d_x_array, 1d_y_array,
1d_z_array ) toma las coordenadas de los tres arrays unidimensionales.
Si
2d xyz array es un array 2D de tres columnas, o de tres filas, entonces points
(2d_xyz_array ) dibuja los puntos correspondientes.
Ejemplos:
Una muestra tridimensional,
(%i1) load(draw)$
(%i2) load (numericalio)$
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) draw3d(title = "Daily average wind speeds",
point_size = 2,
points(args(submatrix (s2, 4, 5))) )$
Dos muestras tridimensionales,
(%i1) load(draw)$
(%i2) load (numericalio)$
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) draw3d(
title = "Daily average wind speeds. Two data sets",
point_size = 2,
key
= "Sample from stations 1, 2 and 3",
points(args(submatrix (s2, 4, 5))),
point_type = 4,
key
= "Sample from stations 1, 4 and 5",
points(args(submatrix (s2, 2, 3))) )$
Arrays unidimensionales,
(%i1) load(draw)$
(%i2) x: make_array (fixnum, 10) $
(%i3) y: make_array (fixnum, 10) $
(%i4) z: make_array (fixnum, 10) $
(%i5) for i:0 thru 9 do (
x[i]: random(10),
y[i]: random(10),
z[i]: random(10) ) $
(%i6) draw3d(points(x,y,z)) $
Array bidimensional coloreado,
(%i1) load(draw)$
(%i2) xyz: make_array(fixnum, 10, 3) $
(%i3) for i:0 thru 9 do (
xyz[i, 0]: random(10),
xyz[i, 1]: random(10),
xyz[i, 2]: random(10) ) $
(%i4) draw3d(
enhanced3d = true,

762

Manual de Maxima

points_joined = true,
points(xyz)) $
N
umeros de colores especificados explcitamente por el usuario.
(%i1) load(draw)$
(%i2) pts: makelist([t,t^2,cos(t)], t, 0, 15)$
(%i3) col_num: makelist(k, k, 1, length(pts))$
(%i4) draw3d(
enhanced3d = [part(col_num,k),k],
point_size = 3,
point_type = filled_circle,
points(pts))$

polar (radius,ang,minang,maxang )

[Objeto grafico]

Dibuja funciones 2D definidas en coordenadas polares.


2D
polar (radius,ang,minang,maxang ) dibuja la funcion radius (ang ) definida en coordenadas polares, con la variable ang tomando valores desde minang hasta maxang.
Este objeto se ve afectado por las siguientes opciones gr
aficas: nticks, line_width,
line_type, key y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(user_preamble = "set grid polar",
nticks
= 200,
xrange
= [-5,5],
yrange
= [-5,5],
color
= blue,
line_width
= 3,
title
= "Hyperbolic Spiral",
polar(10/theta,theta,1,10*%pi) )$

polygon ([[x1,y1 ], [x2,y2 ],...])


polygon ([x1,x2,...], [y1,y2,...])

[Objeto grafico]
[Objeto grafico]

Dibuja polgonos en 2D.


2D
polygon ([[x1,y1 ], [x2,y2 ],...]) o polygon ([x1,x2,...], [y1,y2,...]):
dibuja en el plano un polgono de vertices [x1,y1 ], [x2,y2 ], etc..
Este objeto se ve afectado por las siguientes opciones gr
aficas: transparent, fill_
color, border, line_width, key, line_type y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(color
= "#e245f0",
line_width = 8,
polygon([[3,2],[7,2],[5,5]]),
border
= false,
fill_color = yellow,
polygon([[5,2],[9,2],[7,5]]) )$

Captulo 47: draw

quadrilateral (point_1, point_2, point_3, point_4 )

763

[Objeto grafico]

Dibuja un cuadril
atero.
2D
quadrilateral ([x1,y1 ], [x2,y2 ], [x3,y3 ], [x4,y4 ]) dibuja un cuadrilatero de
vertices [x1,y1 ], [x2,y2 ], [x3,y3 ] y [x4,y4 ].
Este objeto se ve afectado por las siguientes opciones gr
aficas: transparent, fill_
color, border, line_width, key, xaxis_secondary, yaxis_secondary, line_type,
transform y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
quadrilateral([1,1],[2,2],[3,-1],[2,-2]))$
3D
quadrilateral ([x1,y1,z1 ], [x2,y2,z2 ], [x3,y3,z3 ], [x4,y4,z4 ]) dibuja un
cuadril
atero de vertices [x1,y1,z1 ], [x2,y2,z2 ], [x3,y3,z3 ] y [x4,y4,z4 ].
Este objeto se ve afectado por las siguientes opciones gr
aficas: line_type, line_
width, color, key, enhanced3d y transform.

rectangle ([x1,y1 ], [x2,y2 ])

[Objeto grafico]
Dibuja rect
angulos en 2D.
2D
rectangle ([x1,y1 ], [x2,y2 ]) dibuja un rectangulo de vertices opuestos [x1,y1 ]
y [x2,y2 ].
Este objeto se ve afectado por las siguientes opciones gr
aficas: transparent, fill_
color, border, line_width, key, line_type y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(fill_color = red,
line_width = 6,
line_type
= dots,
transparent = false,
fill_color = blue,
rectangle([-2,-2],[8,-1]), /* opposite vertices */
transparent = true,
line_type
= solid,
line_width = 1,
rectangle([9,4],[2,-1.5]),
xrange
= [-3,10],
yrange
= [-3,4.5] )$

region (expr,var1,minval1,maxval1,var2,minval2,maxval2 )

[Objeto grafico]
Dibuja una regi
on del plano definida por desigualdades.
2D expr es una expresi
on formada por desigualdades y los operadores logicos and,
or y not. La regi
on est
a acotada por el rectangulo definido por [minval1, maxval1] y
[minval2, maxval2].

764

Manual de Maxima

Este objeto se ve afectado por las siguientes opciones gr


aficas: fill_color, key,
x_voxel y y_voxel.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
x_voxel = 30,
y_voxel = 30,
region(x^2+y^2<1 and x^2+y^2 > 1/2,
x, -1.5, 1.5, y, -1.5, 1.5));

spherical (radius,azi,minazi,maxazi,zen,minzen,maxzen )

[Objeto grafico]
Dibuja funciones 3D definidas en coordenadas esfericas.
3D
spherical (radius,azi,minazi,maxazi,zen,minzen,maxzen ) dibuja la funcion
radius (azi,zen ) definida en coordenadas esfericas, con el azimut azi tomando
valores desde minazi hasta maxazi y el zenit zen tomando valores desde minzen
hasta maxzen.
Este objeto se ve afectado por las siguientes opciones gr
aficas: xu_grid, yv_grid,
line_type, key, wired_surface, enhanced3d y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(spherical(1,a,0,2*%pi,z,0,%pi))$

triangle (punto_1, punto_2, punto_3 )

[Objeto grafico]
Dibuja un tri
angulo.
2D
triangle ([x1,y1 ], [x2,y2 ], [x3,y3 ]) dibuja un triangulo de vertices [x1,y1 ],
[x2,y2 ] y [x3,y3 ].
Este objeto se ve afectado por las siguientes opciones gr
aficas: transparent, fill_
color, border, line_width, key, xaxis_secondary, yaxis_secondary, line_type,
transform y color.
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(
triangle([1,1],[2,2],[3,-1]))$
3D
triangle ([x1,y1,z1 ], [x2,y2,z2 ], [x3,y3,z3 ]) dibuja un triangulo de vertices
[x1,y1,z1 ], [x2,y2,z2 ] y [x3,y3,z3 ].
Este objeto se ve afectado por las siguientes opciones gr
aficas: line_type, line_
width, color, key, enhanced3d y transform.

tube (xfun,yfun,zfun,rfun,p,pmin,pmax )
Dibuja un tubo en 3D de di
ametro variable.
3D

[Objeto grafico]

Captulo 47: draw

765

[xfun,yfun,zfun ] es la curva parametrica de parametro p, el cual toma valores


entre pmin y pmax. Se colocan crculos de radio rfun con sus centros sobre la curva
parametrica y perpendiculares a ella.
Este objeto se ve afectado por las siguientes opciones gr
aficas: xu_grid, yv_grid,
line_type, line_width, key, wired_surface, enhanced3d, color y tube_extremes.
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(
enhanced3d = true,
xu_grid = 50,
tube(cos(a), a, 0, cos(a/10)^2,
a, 0, 4*%pi) )$

vector ([x,y ], [dx,dy ])


vector ([x,y,z ], [dx,dy,dz ])

[Objeto grafico]
[Objeto grafico]

Dibuja vectores en 2D y 3D.


Este objeto se ve afectado por las siguientes opciones gr
aficas: head_both, head_
length, head_angle, head_type, line_width, line_type, key y color.
2D
vector ([x,y ], [dx,dy ]) dibuja el vector [dx,dy ] con origen en [x,y ].
Ejemplo:
(%i1) load(draw)$
(%i2) draw2d(xrange
= [0,12],
yrange
= [0,10],
head_length = 1,
vector([0,1],[5,5]), /* default type */
head_type = empty,
vector([3,1],[5,5]),
head_both = true,
head_type = nofilled,
line_type = dots,
vector([6,1],[5,5]))$
3D
vector([x,y,z ], [dx,dy,dz ]) dibuja el vector [dx,dy,dz ] con origen en [x,y,z ].
Ejemplo:
(%i1) load(draw)$
(%i2) draw3d(color = cyan,
vector([0,0,0],[1,1,1]/sqrt(3)),
vector([0,0,0],[1,-1,0]/sqrt(2)),
vector([0,0,0],[1,1,-2]/sqrt(6)) )$

766

Manual de Maxima

47.3 Funciones y variables para picture


get_pixel (pic,x,y )

[Funcion]
Devuelve el pixel de la imagen pic. Las coordenadas x e y van desde 0 hasta ancho-1
y alto-1, respectivamente.

make_level_picture (data )
make_level_picture (data,width,height )

[Funcion]
[Funcion]
Devuelve un objeto picture consistente en una imagen de niveles. make_level_
picture (data ) construye el objeto picture a partir de la matriz data. make_
level_picture (data,width,height ) construye el objeto a partir de una lista de
n
umeros, en cuyo caso deben indicarse el ancho width y la altura height en pxeles.
El objeto picture devuelto contiene los siguientes cuatro elemento:
1.
2.
3.
4.

el smbolo level
anchura de la imagen
altura de la imagen
un array de enteros con los valores de los pxeles entre 0 y 255. El argumento data
debe contener s
olo n
umeros entre 0 y 255; los cantidades negativas se transforman
en ceros y las que son mayores de 255 se igualan a este n
umero.

Ejemplo:
Imagen de niveles a partir de una matriz.
(%i1) load(draw)$
(%i2) make_level_picture(matrix([3,2,5],[7,-9,3000]));
(%o2)
picture(level, 3, 2, {Array: #(3 2 5 7 0 255)})
Imagen de niveles a partir de una lista numerica.
(%i1) load(draw)$
(%i2) make_level_picture([-2,0,54,%pi],2,2);
(%o2)
picture(level, 2, 2, {Array:

#(0 0 54 3)})

make_rgb_picture (redlevel,greenlevel,bluelevel )

[Funcion]
Devuelve un objeto picture conteniendo una imagen en color (RGB). Los tres argumentos deben ser im
agenes de niveles, para el rojo (R), verde (G) y azul (B).
El objeto picture devuelto contiene los siguientes cuatro elemento:
1.
2.
3.
4.

el smbolo rgb
anchura de la imagen
altura de la imagen
un array de enteros de 3*ancho*alto con los valores de los pxeles entre 0 y 255.
Cada valor de pixel se representa en el array con tres n
umeros consecutivos (rojo,
verde, azul).

Ejemplo:
(%i1) load(draw)$
(%i2) red: make_level_picture(matrix([3,2],[7,260]));
(%o2)
picture(level, 2, 2, {Array: #(3 2 7 255)})

Captulo 47: draw

(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

767

green: make_level_picture(matrix([54,23],[73,-9]));
picture(level, 2, 2, {Array: #(54 23 73 0)})
blue: make_level_picture(matrix([123,82],[45,32.5698]));
picture(level, 2, 2, {Array: #(123 82 45 33)})
make_rgb_picture(red,green,blue);
picture(rgb, 2, 2,
{Array: #(3 54 123 2 23 82 7 73 45 255 0 33)})

negative_picture (pic )

[Funcion]
Devuelve el negativo de la imagen, sea esta de tipo nivel (level) o color (rgb).

picture_equalp (x,y )

[Funcion]
Devuelve true si los dos argumentos son imagenes identicas, o false en caso contrario.

picturep (x )

[Funcion]
Devuelve true si el argumento es una imagen bien formada, o false en caso contrario.

read_xpm (xpm_file )

[Funcion]

Lee el fichero gr
afico en formato xpm y devuelve un objeto picture.

rgb2level (pic )

[Funcion]
Transforma una imagen en color rgb a otra de niveles level promediando los niveles.

take_channel (im,color )

[Funcion]
Si el argumento color es red, green o blue, la funcion take_channel devuelve el
canal de color correspondiente de la imagen im.
Ejemplo:
(%i1) load(draw)$
(%i2) red: make_level_picture(matrix([3,2],[7,260]));
(%o2)
picture(level, 2, 2, {Array: #(3 2 7 255)})
(%i3) green: make_level_picture(matrix([54,23],[73,-9]));
(%o3)
picture(level, 2, 2, {Array: #(54 23 73 0)})
(%i4) blue: make_level_picture(matrix([123,82],[45,32.5698]));
(%o4)
picture(level, 2, 2, {Array: #(123 82 45 33)})
(%i5) make_rgb_picture(red,green,blue);
(%o5) picture(rgb, 2, 2,
{Array: #(3 54 123 2 23 82 7 73 45 255 0 33)})
(%i6) take_channel(%,green); /* simple quote!!! */
(%o6)
picture(level, 2, 2, {Array: #(54 23 73 0)})

47.4 Funciones y variables para worldmap


Este paquete carga autom
aticamente el paquete draw.

47.4.1 Variables y Funciones


[Global variable]
Valor por defecto: false
boundaries_array es donde el objeto grafico geomap lee las coordenadas de las lneas
fronterizas.

boundaries_array

768

Manual de Maxima

Cada componente de boundaries_array es un array de n


umeros decimales en coma
flotante representando las coordenadas que definen un segmento poligonal o lnea
fronteriza.
Vease tambien geomap.

numbered_boundaries (nlist )

[Funcion]
Dibuja una lista de segmentos poligonales (lneas fronterizas), etiquetadas con sus
n
umeros correspondientes (coordenadas de boundaries_array). Esta funcion es de
mucha ayuda a la hora de definir nuevas entidades geograficas.
Ejemplo:
Mapa de Europa con las fronteras y costas etiquetadas con su componente numerica
de boundaries_array.
(%i1) load(worldmap)$
(%i2) european_borders:
region_boundaries(-31.81,74.92,49.84,32.06)$
(%i3) numbered_boundaries(european_borders)$

make_poly_continent (continent_name )
make_poly_continent (country_list )

[Funcion]
[Funcion]
Construye los polgonos necesarios para dibujar un continente o lista de pases coloreados.
Ejemplo:
(%i1) load(worldmap)$
(%i2) /* A continent */
make_poly_continent(Africa)$
(%i3) apply(draw2d, %)$
(%i4) /* A list of countries */
make_poly_continent([Germany,Denmark,Poland])$
(%i5) apply(draw2d, %)$

make_poly_country (country_name )

[Funcion]
Construye los polgonos necesarios para dibujar un pas coloreado. En caso de contener islas, un pas tendr
a asociados varios polgonos.
Ejemplo:
(%i1) load(worldmap)$
(%i2) make_poly_country(India)$
(%i3) apply(draw2d, %)$

make_polygon (nlist )

[Funcion]
Devuelve un objeto polygon a partie de una lista de lneas fronterizas y de costas. El
argumento nlist debe ser una lista de componentes de boundaries_array.
Ejemplo:
La variable Bhutan (But
an) esta definida con los n
umeros fronterizos 171, 173 y 1143,
de manera que make_polygon([171,173,1143]) concatena los arrays boundaries_
array[171], boundaries_array[173] y boundaries_array[1143] y devuelve un

Captulo 47: draw

769

objeto polygon apto para ser dibujado por draw. A fin de evitar mensajes de errores, los arrays deben ser compatibles en el sentido de que dos de ellos consecutivos
deben tener dos coordenadas comunes en los extremos. En este ejemplo, las dos
primeras componentes de boundaries_array[171] son iguales a las dos u
ltimas de
boundaries_array[173], y las dos primeras de boundaries_array[173] coinciden
con las dos primeras de boundaries_array[1143]; en conclusion, los n
umeros de
segmentos poligonales171, 173 y 1143 (en este orden) son compatibles y el polgono
coloreado se podr
a dibujar.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)

(%i4)
(%o4)

(%i5)
(%o5)

(%i6)
(%i7)

load(worldmap)$
Bhutan;
[[171, 173, 1143]]
boundaries_array[171];
{Array:
#(88.750549 27.14727 88.806351 27.25305 88.901367 27.282221
88.917877 27.321039)}
boundaries_array[173];
{Array:
#(91.659554 27.76511 91.6008 27.66666 91.598022 27.62499
91.631348 27.536381 91.765533 27.45694 91.775253 27.4161
92.007751 27.471939 92.11441 27.28583 92.015259 27.168051
92.015533 27.08083 92.083313 27.02277 92.112183 26.920271
92.069977 26.86194 91.997192 26.85194 91.915253 26.893881
91.916924 26.85416 91.8358 26.863331 91.712479 26.799999
91.542191 26.80444 91.492188 26.87472 91.418854 26.873329
91.371353 26.800831 91.307457 26.778049 90.682457 26.77417
90.392197 26.903601 90.344131 26.894159 90.143044 26.75333
89.98996 26.73583 89.841919 26.70138 89.618301 26.72694
89.636093 26.771111 89.360786 26.859989 89.22081 26.81472
89.110237 26.829161 88.921631 26.98777 88.873016 26.95499
88.867737 27.080549 88.843307 27.108601 88.750549
27.14727)}
boundaries_array[1143];
{Array:
#(91.659554 27.76511 91.666924 27.88888 91.65831 27.94805
91.338028 28.05249 91.314972 28.096661 91.108856 27.971109
91.015808 27.97777 90.896927 28.05055 90.382462 28.07972
90.396088 28.23555 90.366074 28.257771 89.996353 28.32333
89.83165 28.24888 89.58609 28.139999 89.35997 27.87166
89.225517 27.795 89.125793 27.56749 88.971077 27.47361
88.917877 27.321039)}
Bhutan_polygon: make_polygon([171,173,1143])$
draw2d(Bhutan_polygon)$

region_boundaries (x1,y1,x2,y2 )

[Funcion]
Detecta los segmentos poligonales almacenados en la variable global boundaries_
array totalmente contenidos en el rectangulo de vertices (x1,y1) -superior izquierdoy (x2,y2) -inferior derecho-.

770

Manual de Maxima

Ejemplo:
Devuelve los
(%i1)
(%i2)
(%o2)
(%i3)

n
umeros de los segmentos necesarios para dibujar el sur de Italia.
load(worldmap)$
region_boundaries(10.4,41.5,20.7,35.4);
[1846, 1863, 1864, 1881, 1888, 1894]
draw2d(geomap(%))$

region_boundaries_plus (x1,y1,x2,y2 )

[Funcion]
Detecta los segmentos poligonales almacenados en la variable global boundaries_
array con al menos un vertice dentro del rectangulo definido por los extremos (x1,y1)
-superior izquierdo- y (x2,y2) -inferior derecho-.
Ejemplo:
(%i1) load(worldmap)$
(%i2) region_boundaries_plus(10.4,41.5,20.7,35.4);
(%o2) [1060, 1062, 1076, 1835, 1839, 1844, 1846, 1858,
1861, 1863, 1864, 1871, 1881, 1888, 1894, 1897]
(%i3) draw2d(geomap(%))$

47.4.2 Objetos gr
aficos
geomap (numlist )
geomap (numlist,3Dprojection )

[Objeto grafico]
[Objeto grafico]

Dibuja mapas cartogr


aficos en 2D y 3D.
2D
Esta funci
on trabaja junto con la variable global boundaries_array.
El argumento numlist es una lista de n
umeros o de listas de n
umeros. Todos estos
n
umeros deben ser enteros mayores o iguales que cero, representando las componentes
del array global boundaries_array.
Cada componente de boundaries_array es un array de decimales en coma flotante,
las coordenadas de un segmento poligonal o lnea fronteriza.
geomap (numlist ) toma los enteros de sus argumentos y dibuja los segmentos poligonales asociados de boundaries_array.
Este objeto se ve afectado por las siguientes opciones gr
aficas: line_width, line_
type y color.
Ejemplos:
Un sencillo mapa hecho a mano:
(%i1) load(worldmap)$
(%i2) /* Vertices of boundary #0: {(1,1),(2,5),(4,3)} */
( bnd0: make_array(flonum,6),
bnd0[0]:1.0, bnd0[1]:1.0, bnd0[2]:2.0,
bnd0[3]:5.0, bnd0[4]:4.0, bnd0[5]:3.0 )$
(%i3) /* Vertices of boundary #1: {(4,3),(5,4),(6,4),(5,1)} */
( bnd1: make_array(flonum,8),
bnd1[0]:4.0, bnd1[1]:3.0, bnd1[2]:5.0, bnd1[3]:4.0,
bnd1[4]:6.0, bnd1[5]:4.0, bnd1[6]:5.0, bnd1[7]:1.0)$

Captulo 47: draw

771

(%i4) /* Vertices of boundary #2: {(5,1), (3,0), (1,1)} */


( bnd2: make_array(flonum,6),
bnd2[0]:5.0, bnd2[1]:1.0, bnd2[2]:3.0,
bnd2[3]:0.0, bnd2[4]:1.0, bnd2[5]:1.0 )$
(%i5) /* Vertices of boundary #3: {(1,1), (4,3)} */
( bnd3: make_array(flonum,4),
bnd3[0]:1.0, bnd3[1]:1.0, bnd3[2]:4.0, bnd3[3]:3.0)$
(%i6) /* Vertices of boundary #4: {(4,3), (5,1)} */
( bnd4: make_array(flonum,4),
bnd4[0]:4.0, bnd4[1]:3.0, bnd4[2]:5.0, bnd4[3]:1.0)$
(%i7) /* Pack all together in boundaries_array */
( boundaries_array: make_array(any,5),
boundaries_array[0]: bnd0, boundaries_array[1]: bnd1,
boundaries_array[2]: bnd2, boundaries_array[3]: bnd3,
boundaries_array[4]: bnd4 )$
(%i8) draw2d(geomap([0,1,2,3,4]))$
El paquete auxiliar worldmap asigna al array global boundaries_array lneas fronterizas reales en coordenadas (longitud, latitud). Estos datos son de dominio p
ublico
y proceden de http://www-cger.nies.go.jp/grid-e/gridtxt/grid19.html.
El paquete worldmap tambien define fronteras de pases, continentes y lneas
costeras a partir de las componentes de boundaries_array (vease el fichero
share/draw/worldmap.mac para mas informacion). El paquete worldmap carga
autom
aticamente el paquete draw.
(%i1) load(worldmap)$
(%i2) c1: gr2d(geomap(Canada,United_States,
Mexico,Cuba))$
(%i3) c2: gr2d(geomap(Africa))$
(%i4) c3: gr2d(geomap(Oceania,China,Japan))$
(%i5) c4: gr2d(geomap(France,Portugal,Spain,
Morocco,Western_Sahara))$
(%i6) draw(columns = 2,
c1,c2,c3,c4)$
worldmap se puede utilizar para dibujar pases como polgonos. En este caso, ya
no ser
a necesario hacer uso del objeto grafico geomap, pero s de polygon. Puesto
que en este caso se utilizan listas en lugar de arrays, los mapas se reproduciran de
forma m
as lenta. Veanse tambien make_poly_country y make_poly_continent para
comprender el siguiente c
odigo.
(%i1) load(worldmap)$
(%i2) mymap: append(
[color
= white], /* borders are white */
[fill_color = red],
make_poly_country(Bolivia),
[fill_color = cyan],
make_poly_country(Paraguay),
[fill_color = green],
make_poly_country(Colombia),
[fill_color = blue],
make_poly_country(Chile),
[fill_color = "#23ab0f"],
make_poly_country(Brazil),
[fill_color = goldenrod],
make_poly_country(Argentina),

772

Manual de Maxima

[fill_color = "midnight-blue"], make_poly_country(Uruguay))$


(%i3) apply(draw2d, mymap)$
3D
geomap (numlist ) proyecta los mapas sobre la esfera de radio 1 y centro (0,0,0).
Es posible cambiar la esfera o el tipo de proyeccion haciendo uso de geomap (numlist,3Dprojection ).
Proyecciones 3D disponibles:
[spherical_projection,x,y,z,r ]: proyecta los mapas sobre la esfera de radio
r y centro (x,y,z).
(%i1) load(worldmap)$
(%i2) draw3d(geomap(Australia), /* default projection */
geomap(Australia,
[spherical_projection,2,2,2,3]))$
[cylindrical_projection,x,y,z,r,rc ]: re-proyecta mapas esfericos sobre el
cilindro de radio rc cuyo eje pasa a traves de los polos del globo de radio r y
centro (x,y,z).
(%i1) load(worldmap)$
(%i2) draw3d(geomap([America_coastlines,Eurasia_coastlines],
[cylindrical_projection,2,2,2,3,4]))$
[conic_projection,x,y,z,r,alpha ]: re-proyecta mapas esfericos sobre los
conos de
angulo alpha, cuyos ejes pasan a traves de los polos del globo de radio
r y centro (x,y,z). Ambos conos, norte y sur, son tangentes a la esfera.
(%i1) load(worldmap)$
(%i2) draw3d(geomap(World_coastlines,
[conic_projection,0,0,0,1,90]))$
En http://www.telefonica.net/web2/biomates/maxima/gpdraw/geomap
ejemplos m
as elaborados.

hay

Captulo 48: drawdf

773

48 drawdf
48.1 Introducci
on a drawdf
La funci
on drawdf dibuja el campo de direcciones de una ecuacion diferencial ordinaria de
primer orden (EDO) o de un sistema de dos ecuaciones autonomas de primer orden.
Puesto que drawdf es un paquete adicional, es necesario cargarlo en memoria ejecutando
previamente la instrucci
on load(drawdf). drawdf utiliza el paquete draw, que necesita
como mnimo la versi
on 4.2 de Gnuplot.
Para dibujar el campo de direcciones de una EDO, esta debe escribirse de la forma
dy
= F (x, y)
dx
y ser la funci
on F la que se pase a drawdf como argumento. Si las variables independiente
y dependiente no son x e y, como en la ecuacion anterior, entonces deben nombrarse de
forma explcita en una lista que se pasara a drawdf (ver ejemplos mas abajo).
Para dibujar el campo de direcciones de un conjunto de dos EDOs autonomas, deben
escribirse de la forma
dy
dx
= G(x, y)
= F (x, y)
dt
dt
y ser
a una lista con las dos funciones G y F la que se pase a drawdf como argumento.
El orden de las funciones es importante; la primera sera la derivada de la abscisa respecto
del tiempo y la segunda la derivada de la ordenada respecto del tiempo. Si las variables no
son las x e y habituales, el segundo argumento que se pase a la funcion drawdf sera una
lista con los nombres de ambas variables, primero la correspondiente a las abscisas, seguida
de la asociada a las ordenadas.
Si solo se trata de una EDO, drawdf admitira por defecto que x=t y G(x,y)=1, transformanado la ecuaci
on no aut
onoma en un sistema de dos ecuaciones autonomas.

48.2 Funciones y variables para drawdf


48.2.1 Funciones
(dydx, ...options and objects...)
[Funcion]
(dvdu, [u,v ], ...opciones y objetos...)
[Funcion]
(dvdu, [u,umin,umax ], [v,vmin,vmax ], ...opciones y objetos...)
[Funcion]
([dxdt,dydt ], ...opciones y objetos...)
[Funcion]
([dudt,dvdt ], [u,v ], ...opciones y objetos...)
[Funcion]
([dudt,dvdt ], [u,umin,umax ], [v,vmin,vmax ], ...opciones y
[Funcion]
objetos...)
La funci
on drawdf dibuja un campo de direcciones 2D, incluyendo opcionalmente
curvas asociadas a soluciones particulares, as como otros objeto graficos del paquete
draw.
El primer argumento especifica la(s) derivada(s), el cual debe estar formado por una
expresi
on o una lista de dos expresiones. dydx, dxdt y dydt son expresiones que
dependen de x y y. dvdu, dudt y dvdt son expresiones que dependen de u y v.

drawdf
drawdf
drawdf
drawdf
drawdf
drawdf

774

Manual de Maxima

Si las variables independiente y dependiente no son x e y, sus nombres deben especificarse a continuaci
on de las derivadas, bien como una lista de dos nombres, [u,v], o
como dos listas de la forma [u,umin,umax] y [v,vmin,vmax].
El resto de argumentos son opciones gr
aficas, objetos gr
aficos, o listas conteniendo
elementos de ambos tipos. El conjunto de opciones y objetos graficos soportados por
drawdf incluye los soportados por draw2d y gr2d del paquete draw.
Los argumentos se iterpretan secuencialmente: las opciones gr
aficas afectan a todos
los objetos gr
aficos que le siguen. Ademas, los objetos gr
aficos se dibujan en el orden
en el que se especifican, pudiendo tapar otros graficos dibujados con anterioridad.
Algunas opciones gr
aficas afectan al aspecto general de la escena.
Los nuevos objetos gr
aficos que se definen en drawdf son: solns_at, points_at,
saddles_at, soln_at, point_at y saddle_at.
Las nuevas opciones gr
aficas que se definen en drawdf son: field_degree, soln_
arrows, field_arrows, field_grid, field_color, show_field, tstep, nsteps,
duration, direction, field_tstep, field_nsteps y field_duration.
Objetos gr
aficos que se heredan del paquete draw incluyen: explicit, implicit,
parametric, polygon, points, vector, label y cualesquiera otros soportados por
draw2d y gr2d.
Opciones gr
aficas que se heredan del paquete draw incluyen: points_joined, color,
point_type, point_size, line_width, line_type, key, title, xlabel, ylabel,
user_preamble, terminal, dimensions, file_name y cualesquiera otros soportados
por draw2d y gr2d.
Vease tambien draw2d.
Los usuarios de wxMaxima y Imaxima pueden hacer uso tambien wxdrawdf, que es
identica a drawdf, pero que inserta el grafico en el propio documento utilizando la
funci
on wxdraw.
Para hacer uso de esta funci
on, ejec
utese primero load(drawdf).
Ejemplos:
(%i1) load(drawdf)$
(%i2) drawdf(exp(-x)+y)$
/* default vars: x,y */
(%i3) drawdf(exp(-t)+y, [t,y])$ /* default range: [-10,10] */
(%i4) drawdf([y,-9*sin(x)-y/5], [x,1,5], [y,-2,2])$
A efectos de compatibilidad, drawdf acepta la mayor parte de parametros soportados
por plotdf.
(%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
[trajectory_at,0,0])$
soln_at y solns_at dibujan soluciones particulares que pasen por los puntos especificados, utilizando el integrador numerico de Runge Kutta de cuarto orden.
(%i6) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
solns_at([0,0.1],[0,-0.1]),
color=blue, soln_at(0,0))$
field_degree=2 hace que el campo se componga de splines cuadraticos basados
en las derivadas de primer y segundo orden en cada punto de la malla. field_
grid=[COLS,ROWS] especifica el n
umero de columnas y filas a utilizar en la malla.

Captulo 48: drawdf

775

(%i7) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],


field_degree=2, field_grid=[20,15],
solns_at([0,0.1],[0,-0.1]),
color=blue, soln_at(0,0))$
soln_arrows=true a~
nade flechas a las soluciones particulares y, por defecto, las borra.
Tambien cambia los colores por defecto para destacar las curvas de las soluciones
particulares.
(%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
soln_arrows=true,
solns_at([0,0.1],[0,-0.1],[0,0]))$
duration=40 especifica el intervalo temporal de la integracion numerica, cuyo valor
por defecto es 10. La integracion se detendra automaticamente si la solucion se aparta
mucho de la regi
on a dibujar, o si la derivada se vuelve compleja o infinita. Aqu
tambien hacemos field_degree=2 para dibujar splines cuadraticos. Las ecuaciones
de este ejemplo modelizan un sistema depredador-presa.
(%i9) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
field_degree=2, duration=40,
soln_arrows=true, point_at(1/2,1/2),
solns_at([0.1,0.2], [0.2,0.1], [1,0.8], [0.8,1],
[0.1,0.1], [0.6,0.05], [0.05,0.4],
[1,0.01], [0.01,0.75]))$
field_degree=solns hace que el campo se componga de muchas peque~
nas soluciones calculadas a partir del Runge Kutta de cuarto orden.
(%i10) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
field_degree=solns, duration=40,
soln_arrows=true, point_at(1/2,1/2),
solns_at([0.1,0.2], [0.2,0.1], [1,0.8],
[0.8,1], [0.1,0.1], [0.6,0.05],
[0.05,0.4], [1,0.01], [0.01,0.75]))$
saddles_at trata de linearizar automaticamente la ecuacion en cada punto de silla y
dibujar la soluci
on numerica correspondiente a cada vector propio, incluyendo las
separatrices. tstep=0.05 establece el salto temporal maximo para el integrador
numerico, cuyo valor por defecto es 0.1. Las siguientes ecuaciones modelizan un
pendulo amortiguado.
(%i11) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
soln_arrows=true, point_size=0.5,
points_at([0,0], [2*%pi,0], [-2*%pi,0]),
field_degree=solns,
saddles_at([%pi,0], [-%pi,0]))$
show_field=false elimina el campo completamente.
(%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
show_field=false, soln_arrows=true,
point_size=0.5,
points_at([0,0], [2*%pi,0], [-2*%pi,0]),
saddles_at([3*%pi,0], [-3*%pi,0],

776

Manual de Maxima

[%pi,0], [-%pi,0]))$
drawdf pasa todos los par
ametros que no reconoce a draw2d o gr2d, permitiendo
combinar la potencia del paquete draw con drawdf.
(%i13) drawdf(x^2+y^2, [x,-2,2], [y,-2,2], field_color=gray,
key="soln 1", color=black, soln_at(0,0),
key="soln 2", color=red, soln_at(0,1),
key="isocline", color=green, line_width=2,
nticks=100, parametric(cos(t),sin(t),t,0,2*%pi))$
drawdf acepta listas anidadas de opciones y objetos graficos, permitiendo el uso de
makelist y otras funciones de forma mas flexible para generar graficos.
(%i14) colors : [red,blue,purple,orange,green]$
(%i15) drawdf([x-x*y/2, (x*y - 3*y)/4],
[x,2.5,3.5], [y,1.5,2.5],
field_color = gray,
makelist([ key
= concat("soln",k),
color = colors[k],
soln_at(3, 2 + k/20) ],
k,1,5))$

Captulo 49: dynamics

777

49 dynamics
49.1 Introducci
on a dynamics
El paquete adicional dynamics incluye varias funciones para crear diversas representaciones gr
aficas de sistemas din
amicos y fractales, y ademas una implementacion del metodo
numerico de Runge-Kutta de cuarto orden, para resolver sistemas de ecuaciones diferenciales.
Para usar las funciones en este paquete sera necesario primero que todo cargarlo con
load("dynamics"), y las funciones que crean graficas necesitan que Xmaxima este instalado.

49.2 Funciones y variables para dynamics


chaosgame ([[x1, y1 ]...[xm, ym ]], [x0, y0 ], b, n, ...opciones...);

[Funcion]
Usa el metodo llamado juego del caos, para producir fractales: se dibuja un punto
inicial (x0, y0) y luego se elije aleatoriamente uno de los m puntos [x1, y1]...[xm,
ym]. Despues se dibuja un nuevo punto que estara en el segmento entre el u
ltimo
punto dibujado y el punto que se acabo de elegir aleatoriamente, a una distancia del
punto elegido que ser
a b veces la longitud del segmento. El proceso se repite n veces.

evolution (F, y0, n,...opciones...);

[Funcion]
Dibuja n+1 puntos en una grafica bidimensional (serie de tiempo), en que las coordenadas horizontales de los puntos son los n
umeros enteros 0, 1, 2, ..., n, y las
coordenadas verticales son los valores y(n) correspondientes, obtenidos a partir de la
relaci
on de recurrencia
yn+1 = F (yn )

Con valor inicial y(0) igual a y0. F debera ser una expresion que dependa u
nicamente
de la variable y (y no de n), y0 debera ser un n
umero real y n un n
umero entero
positivo.

evolution2d ([F, G ], [x0, y0 ], n, ...opciones...);

[Funcion]
Muestra, en una gr
afica bidimensional, los primeros n+1 puntos de la sucesion definida
a partir del sistema din
amico discreto con relaciones de recurrencia:


xn+1 = F (xn , yn )
yn+1 = G(xn , yn )

Con valores iniciales x0 y y0.


u
nicamente de x y y.

F y G deben ser dos expresiones que dependan

ifs ([r1,...,rm ],[A1,...,Am ], [[x1,y1 ]...[xm, ym ]], [x0,y0 ], n, ...opciones...);

[Funcion]
Usa el metodo del Sistema de Funciones Iteradas (IFS, en ingles Iterated Function
System). Ese metodo es semejante al metodo descrito en la funcion chaosgame, pero
en vez de aproximar el u
ltimo punto al punto elegido aleatoriamente, las dos coordenadas del u
ltimo punto se multiplican por una matriz 2 por 2 Ai correspondiente al
punto que fue elegido aleatoriamente.

778

Manual de Maxima

La selecci
on aleatoria de uno de los m puntos atractivos puede ser realizada con una
funci
on de probabilidad no uniforme, definida con los pesos r1,...,rm. Esos pesos deben
ser dados en forma acumulada; por ejemplo, si se quieren 3 puntos con probabilidades
0.2, 0.5 y 0.3, los pesos r1, r2 y r3 podran ser 2, 7 y 10, o cualquier otro grupo de
n
umeros que tengan la misma proporcion.

julia (x, y, ...opciones...)

[Funcion]
Crea un fichero gr
afico con la representacion del conjunto de Julia del n
umero complejo
(x + i y). Los par
ametros x y y deben ser reales. El fichero se crea en el directorio
actual o en el direct
orio del usuario, usando el formato grafico XPM. El programa
puede demorar varios segundos a ser ejecutado y cuando termina imprime un mensaje
con el nombre del fichero creado.
Se asignan diferentes colores a los puntos que no pertenecen al conjunto de Julia,
de acuerdo con el n
umero de iteraciones que demore la secuencia, comenzando en
ese punto, a salir fuera del crculo de convergencia con radio 2. El n
umero maximo
de iteraciones se define con la opcion levels; despues de ejecutadas ese n
umero de
iteraciones, si la secuencia aun esta dentro del crculo de convergencia, el punto ser
a
coloreado con el color definido por la opcion color.
Todos los colores usados para los puntos que no pertenecen al conjunto de Julia
tendr
an los mismos valores de saturacion (saturation) y valor (value), pero con diferentes
angulos de tonalidad, distribuidos uniformemente en el intervalo entre hue y
(hue + huerange).
Se puede dar a la funci
on una secuencia de opciones. La lista de posibles opciones
aparece en una secci
on m
as al frente.

mandelbrot (options )

[Funcion]
Crea un fichero gr
afico con la representacion del conjunto de Mandelbrot. El fichero
se crea en el direct
orio actual o en el directorio del usuario, usando el formato grafico
XPM. El programa puede demorar varios segundos a ser ejecutado y cuando termina
imprime un mensaje con el nombre del fichero creado.
Se asignan diferentes colores a los puntos que no pertenecen al conjunto de Mandelbrot, de acuerdo con el n
umero de iteraciones que demore la secuencia generada por
ese punto a salir fuera del crculo de convergencia con radio 2. El n
umero maximo
de iteraciones se define con la opcion levels; despues de ejecutadas ese n
umero de
iteraciones, si la secuencia aun esta dentro del crculo de convergencia, el punto ser
a
coloreado con el color definido por la opcion color.
Todos los colores usados para los puntos que no pertenecen al conjunto de Mandelbrot tendr
an los mismos valores de saturacion (saturation) y valor (value), pero con
diferentes
angulos de tonalidad, distribuidos uniformemente en el intervalo entre hue
y (hue + huerange).
Se puede dar a la funci
on una secuencia de opciones. La lista de posibles opciones
aparece en una secci
on m
as al frente.

orbits (F, y0, n1, n2, [x, x0, xf, xstep ], ...opciones...);

[Funcion]
Dibuja el diagrama de
orbitas de una familia de sistemas dinamicos discretos unidimensionales, con un par
ametro x; ese tipo de diagrama se usa para mostrar las
bifurcaciones de un sistema discreto unidimensional.

Captulo 49: dynamics

779

La funci
on F(y) define una secuencia que comienza con un valor inicial y0, igual que
en el caso de la funci
on evolution, pero en este caso la funcion tambien depender
a
del par
ametro x, el cual tomara valores comprendidos en el intervalo de x0 a xf,
con incrementos xstep. Cada valor usado para el parametro x se muestra en el
eje horizontal. En el eje vertical se mostraran n2 valores de la sucesion y(n1+1),...,
y(n1+n2+1), obtenidos despues de dejarla evolucionar durante n1 iteraciones iniciales.

staircase (F, y0, n, ...opciones...);

[Funcion]
Dibuja un diagrama de escalera (o diagrama de red) para la sucesion definida por la
ecuaci
on de recurrencia
yn+1 = F (yn )

La interpretaci
on y valores permitidos de los parametros de entrada es la misma que
para la funci
on evolution. Un diagrama de escalera consiste en una grafica de la
funci
on F(y), junto con la recta G(y) = y. Se comienza por dibujar un segmento
vertical desde el punto (y0, y0) en la recta, hasta el punto de interseccion con la
funci
on F. En seguida, desde ese punto se dibuja un segmento horizontal hasta el
punto de intersecci
on con la recta, (y1, y1); el procedimiento se repite n veces hasta
alcanzar el punto (yn, yn).
Opciones
Cada opci
on es una lista con dos o mas elementos. El primer elemento en la lista es el
nombre de la opci
on y el resto consiste en los argumentos para esa opcion.
Las opciones aceptadas por las funciones evolution, evolution2, staircase, orbits, ifs y
chaosgame son las siguientes:
domain especifica los valores mnimo y maximo de la variable independiente para la
grafica de la funci
on F representada por staircase.
pointsize define el radio de cada punto dibujado, en unidades de puntos. El valor por
omisi
on es 1.
xaxislabel es la etiqueta que se escribira en el eje horizontal.
xcenter es la coordenada x del punto que debera aparecer en el centro de la grafica.
Esta opci
on no es usada por la funcion orbits.
xradius es mitad de la longitud del intervalo de valores de x que sera representado.
Esta opci
on no es usada por la funcion orbits.
yaxislabel es la etiqueta que se escribira en el eje vertical.
ycenter es la coordenada y del punto que debera aparecer en el centro de la grafica.
yradius es mitad de la longitud del intervalo de valores de y que sera representado.
Las opciones aceptadas por los programas julia y mandelbrot son las siguientes:
size acepta uno o dos argumentos. Si se da solo un argumento, el ancho y la altura del
fichero gr
afico creado ser
an iguales a ese valor en pixels. Si se dan dos argumentos, esos
dos valores ser
an usados para el ancho y la altura. El valor por omision es 400 pixels
tanto para el ancho como para la altura. Si los dos valores no son iguales, el conjunto
aparecer
a distorcionado.
levels define el n
umero m
aximo de iteraciones, que es tambien el n
umero de colores
usado para los puntos que no pertenecem al conjunto. El valor por omision es 12;
valores mayores implican tiempos de procesamiento mas elevados.

780

Manual de Maxima

huerange define el intervalo de angulos usados para la tonalidad de los puntos que no
pertenecen al conjunto. El valor por omision es 360, que hace que los colores usados
abarcar
an todo el rango de tonalidades. Valores mayores que 360 implican repeticion
de algunos valores de la tonalidad, y pueden usarse valores negativos para que el angulo
de tonalidad sea menor a medida que el n
umero de iteraciones aumente.
hue define la tonalidad, en grados, del primer color usado para representar los puntos
que no pertenecen al conjunto. Su valor por omision es 300 grados, que corresponde al
color magenta; el color correspondiente para otros valores estandar es rojo 0, naranja
45, amarillo 60, verde 120, cian 180 y azul 240. Consulte tambien la opcion huerange.
saturation define el nivel de saturacion que sera usado para los colores de los puntos
que no pertenecen al conjunto. Debe ser un valor entre 0 y 1. El valor por omision es
0.46.
value define el valor de los colores usados para puntos que no pertenezcan al conjunto.
Debe estar comprendido entre 0 y 1; cuanto mayor sea, mas brilhantes seran los colores.
Su valor por omisi
on es 0.96.
color debe ir seguido de tres parametros que definen la tonalidad, saturacion y valor
del color que ser
a usado para los puntos del conjunto. El valor por omision es 0 para
los tres par
ametros, que corresponde al negro. Consulte las explicacion sobre el rango
de valores aceptados en la explicacion de las opciones hue, saturation y value.
center deber
a tener dos par
ametros reales que dan las coordenadas, en el plano complejo, del punto en el centro de la region representada. El valor por omision es 0 para
las dos coordenadas (el origen).
radius es el radio de el mayor crculo que cabe dentro de la region quadrada que ser
a
representada. El valor por omision es 2.
filename da el nombre del fichero donde se guardara la grafica producida. A ese nombre
se le acrecentar
a la terminaci
on .xpm. Si el fichero ya existe, sera substituido por el
fichero producido por la funci
on. El valor por omision es julia para el conjunto de Julia
y mandelbrot para el conjunto de Mandelbrot.

Ejemplos

Representaci
on gr
afica y diagrama de escalera de la secuencia: 2, cos(2), cos(cos(2)),...

(%i1) load("dynamics")$
(%i2) evolution(cos(y), 2, 11, [yaxislabel, "y"], [xaxislabel,"n"]);

Captulo 49: dynamics

781

(%i3) staircase(cos(y), 1, 11, [domain, 0, 1.2]);

1.5

y(n)

0.5

-0.5
0

10

1.2
1

y(n+1)

0.8
0.6
0.4
0.2
0
0

0.2

0.4

0.6
y(n)

0.8

1.2

Si su procesador es lento, tendra que reducir el n


umero de iteraciones usado en los
ejemplos siguientes. Y el valor de pointsize que da mejores resultados depende del monitor
y de la resoluci
on que use. Tendr
a que experimentar con diferentes valores.
Diagrama de
orbitas para el mapa cuadratico

yn+1 = x + yn2

782

Manual de Maxima

(%i4) orbits(y^2+x, 0, 50, 200, [x, -2, 0.25, 0.01], [pointsize, 0.9]);

2
1.5
1

0.5
0
-0.5
-1
-1.5
-2
-2

-1.5

-1

-0.5

Para ampliar la regi


on alrededor de la bifurcacion en la parte de abajo, cerca de x =
-1.25, use el comando:
(%i5) orbits(x+y^2, 0, 100, 400, [x,-1,-1.53,-0.001], [pointsize,0.9],
[ycenter,-1.2], [yradius,0.4]);

-0.8
-0.9
-1

-1.1
-1.2
-1.3
-1.4
-1.5
-1.6
-1.5

-1.4

-1.3

-1.2

-1.1

-1

Evoluci
on de un sistema en dos dimensiones, que conduce a un fractal:
(%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
(%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$

Captulo 49: dynamics

783

(%i8) evolution2d([f,g],[-0.5,0],50000,[pointsize,0.7]);

0.1
0
-0.1
-0.2

-0.3
-0.4
-0.5
-0.6
-0.7
-0.8
-0.9
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

Y una ampliaci
on de una peque~
na region en el fractal:
(%i9) evolution2d([f,g],[-0.5,0],300000,[pointsize,0.7], [xcenter,-0.7],
[ycenter,-0.3],[xradius,0.1],[yradius,0.1]);

-0.2

-0.25

-0.3

-0.35

-0.4
-0.8

-0.75

-0.7
x

-0.65

-0.6

Una gr
afica del triangulo de Sierpinsky, obtenida con el juego del caos:
(%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,

784

Manual de Maxima

30000, [pointsize,0.7]);
0.9
0.8
contraction factor: 0.5

0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0

0.1

El helecho
(%i10)
(%i11)
(%i12)
(%i13)
(%i14)
(%i15)
(%i16)
(%i17)
(%i18)
(%i19)

0.2 0.3 0.4 0.5 0.6 0.7 0.8


The chaos game with 3 points

0.9

de Barnsley, obtenido con el Sistema de Funciones Iteradas:


a1: matrix([0.85,0.04],[-0.04,0.85])$
a2: matrix([0.2,-0.26],[0.23,0.22])$
a3: matrix([-0.15,0.28],[0.26,0.24])$
a4: matrix([0,0],[0,0.16])$
p1: [0,1.6]$
p2: [0,1.6]$
p3: [0,0.44]$
p4: [0,0]$
w: [85,92,99,100]$
ifs(w,[a1,a2,a3,a4],[p1,p2,p3,p4],[5,0],50000,[pointsize,0.9]);

10
9
8
7
6
5
4
3
2
1
0
-3

-2
-1
0
1
2
3
4
Iterated Function System of 4 transformations

Para crear un fichero llamado dinamica9.xpm con la representacion grafica del conjunto
de Mandelbrot, con 12 colores, use el comando:
mandelbrot([filename,"dinamica9"])$
y el conjunto de Julia del n
umero (-0.55 + i 0.6) puede ser obtenido con:
julia(-0.55, 0.6, [levels, 36], [center, 0, 0.6], [radius, 0.3],
[hue, 240], [huerange, -180], [filename, "dinamica10"])$

Captulo 49: dynamics

785

la grafica se guardar
a en el fichero dinamica10.xpm y mostrara la region desde -0.3 hasta
0.3 en la direcci
on x, y desde 0.3 hasta 0.9 en la direccion y. Seran usados 36 colores,
comenzando con azul e terminando con amarillo.
Para resolver numericamente la ecuacion diferencial
dx
= t x2
dt
Con valor inicial x(t=0) = 1, en el intervalo de t desde 0 hasta 8, y con incrementos de
0.1, se usa:
(%i20) resultados: rk(t-x^2,x,1,[t,0,8,0.1])$
los resultados quedar
an guardados en la lista resultados.
Para resolver numericamente el sistema:

dx

dt = 4 x2 4y 2

dy = y 2 x2 + 1

dt

para t entre 0 y 4, con valores iniciales -1.25 y 0.75 para (x, y) en t=0:
(%i21) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$

Captulo 50: ezunits

787

50 ezunits
50.1 Introducci
on a ezunits
ezunits es un paquete para trabajar con magnitudes dimensionales, incluyendo algunas
funciones para realizar an
alisis dimensional. ezunits puede hacer operaciones aritmeticas
con magnitudes dimensionales y efectuar conversiones entre unidades. Las unidades que
se definen son las del Sistema Internacional (SI) y otras comunes en los Estados Unidos,
siendo posible declarar otras nuevas.
Vease tambien physical_constants, una coleccion de constantes fsicas.
Es necesario ejecutar primero load(ezunits) para utilizar este paquete.
Con
demo(ezunits) se podr
an ver algunos ejemplos de utilizacion. La funcion known_units
devuelve una lista con todas las unidades que estan definidas y display_known_unit_
conversions muestra las conversiones conocidas por el sistema en un formato de lectura
sencilla.
Una expresi
on tal como ab representa una magnitud dimensional, siendo a una magnitud
adimensional y b las unidades. Se puede utilizar un smbolo como unidad, sin necesidad
de declararlo como tal ni de que deba cumplir propiedades especiales. Tanto la magnitud
como la unidad de una expresi
on de la forma ab pueden extraerse invocando las funciones
qty y units, respectivamente.
Una expresi
on tal como a b c convierte las unidades b en c. El paquete ezunits
contiene funciones conversoras para unidades fundamentales del SI, unidades derivadas, as
como algunas otras unidades ajenas al SI. Las conversiones entre unidades que no esten
programadas en ezunits podr
an declararse a posteriori. Las conversiones conocidas por
ezunits est
an especificadas en la variable global known_unit_conversions, incluyendo
tanto las ya declaradas por defecto como aquellas introducidas por el usuario. Las conversiones para los productos, cocientes y potencias de unidades se derivan del conjunto de
conversiones ya conocidas.
En general, Maxima prefiere n
umeros exactos (enteros o racionales) a inexactos (decimales en coma flotante), por lo que ezunits respetara los exactos cuando aparezcan en expresiones de magnitudes dimensionales. Todas las conversiones del paquete se han definido
en terminos de n
umeros exactos.
No hay un sistema de representacion de unidades que se considere preferible, razon por
la cual las unidades no se convierten a otras a menos que se indique de forma explcita.
ezunits reconoce los prefijos m-, k-, M y G- para mili-, kilo-, mega- y giga-, respectivamente,
tal como se utilizan en el SI; estos prefijos solo se utilizan cuando as se indica de forma
explcita.
Las operaciones aritmeticas con magnitudes dimensionales se realizan de la forma convencional.
(x a) * (y b) es igual a (x y)(a b).
(x a) + (y a) es igual a (x + y)a.
(x a)^y es igual a xy ay si y es adimensional.
ezunits no necesita que las unidades en una suma tengan las mismas dimensiones; estos
terminos ser
an sumados sin emitirse mensaje de error.

788

Manual de Maxima

ezunits incluye funciones para el analisis dimensional elemental, como las dimensiones
fundamentales, las unidades fundamentales de una magnitud dimensional o el calculo de
magnitudes adimensionales y unidades naturales. Las funciones de analisis dimensional son
adaptaciones de funciones semejantes escritas por Barton Willis en otro paquete.
Con el fin de poder llevar a cabo analisis dimensionales, se mantiene una lista de dimensiones fundamentales y otra lista asociada de unidades fundamentales; por defecto,
las dimensiones fundamentales son longitud, masa, tiempo, carga, temperatura y cantidad
de materia, siendo las unidades fundamentales las propias del Sistema Internacional. En
cualquier caso, es posible declarar otras dimensiones y unidades fundamentales.

50.2 Introducci
on a physical constants
physical_constants contiene constantes fsicas recomendadas por el CODATA 2006
(http://physics.nist.gov/constants). La instruccion load(physical_constants)
carga este paquete en memoria junto con el propio ezunits, si este no estaba previamente
cargado.
Una constante fsica se representa por un smbolo con la propiedad de ser un valor
constante. El valor constante es una magnitud dimensional en la sintaxis de ezunits. La
funcion constvalue extrae el valor constante, el cual no es el valor ordinario del smbolo,
por lo que las constantes fsicas se mantienen inalteradas en las expresiones evaluadas hasta
que sus valores sea extrado con la funcion constvalue.
physical_constants incluye cierta informacion adicional, como la descripcion de cada
constante, una estimaci
on del error de su valor numerico y una propiedad para ser representada en TeX. Para identificar constantes fsicas, cada smbolo tiene la propiedad physical_
constant, de forma que propvars(physical_constant) muestra la lista de todas las constantes fsicas.
physical_constants contiene las siguientes constantes:
%c

velocidad de la luz en el vaco

%mu_0

constante magnetica

%e_0

constante electrica

%Z_0

impedancia caracterstica del vaco

%G

constante gravitatoria de Newton

%h

constante de Planck

%h_bar

constante de Planck

%m_P

masa de Planck

%T_P

temperature de Planck

%l_P

longitud de Planck

%t_P

tiempo de Planck

%%e

carga elemental

%Phi_0

flujo magnetico cu
antico

Captulo 50: ezunits

%G_0

conductancia cu
antica

%K_J

constante de Josephson

%R_K

constante de von Klitzing

%mu_B

magnet
on de Bohr

%mu_N

magnet
on nuclear

%alpha

constante de estructura fina

%R_inf

constante de Rydberg

%a_0

radio de Bohr

%E_h

energa de Hartree

%ratio_h_me
cuanto de circulaci
on
%m_e

masa del electr


on

%N_A

n
umero de Avogadro

%m_u

constante de masa at
omica atomic mass constant

%F

constante de Faraday

%R

constante molar de los gases

%%k

constante de Boltzmann

%V_m

volumen molar del gas ideal

%n_0

constante de Loschmidt

%ratio_S0_R
constante de Sackur-Tetrode (constante de entropa absoluta)
%sigma

constante de Stefan-Boltzmann

%c_1

primera constante de radiacion

%c_1L

primera constante de radiacion para radiancia espectral

%c_2

segunda constante de radiacion

%b

Constante de la ley del desplazamiento de Wien

%b_prime

Constante de la ley del desplazamiento de Wien

Ejemplos:
Lista de todos los smbolos que tienen la propiedad physical_constant.
(%i1) load (physical_constants)$
(%i2) propvars (physical_constant);
(%o2) [%c, %mu_0, %e_0, %Z_0, %G, %h, %h_bar, %m_P, %T_P, %l_P,
%t_P, %%e, %Phi_0, %G_0, %K_J, %R_K, %mu_B, %mu_N, %alpha,
%R_inf, %a_0, %E_h, %ratio_h_me, %m_e, %N_A, %m_u, %F, %R, %%k,
%V_m, %n_0, %ratio_S0_R, %sigma, %c_1, %c_1L, %c_2, %b, %b_prime]
Propiedades de la constante fsica %c.

789

790

Manual de Maxima

(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
$$c$$
(%o6)

load (physical_constants)$
constantp (%c);
true
get (%c, description);
speed of light in vacuum
constvalue (%c);
m
299792458 s
get (%c, RSU);
0
tex (%c);
false

Energa equivalente de una libra-masa. El smbolo %c se mantiene hasta que su valor es


extrado con la llamada a la funci
on constvalue.
(%i1) load (physical_constants)$
(%i2) m * %c^2;
2
(%o2)
%c m
(%i3) %, m = 1 lbm;
2
(%o3)
%c lbm
(%i4) constvalue (%);

(%o4)

2
lbm m
89875517873681764 -----2
s

(%i5) E : % J;
Computing conversions to base units; may take a moment.
366838848464007200
(%o5)
------------------ J
9
(%i6) E GJ;
458548560580009
(%o6)
--------------- GJ
11250000
(%i7) float (%);
(%o7)
4.0759872051556356e+7 GJ

50.3 Funciones y variables para ezunits

[Operador]
Operador de magnitud dimensional. Una expresion tal como ab representa una magnitud dimensional, siendo a una magnitud adimensional y b las unidades. Se puede

Captulo 50: ezunits

791

utilizar un smbolo como unidad, sin necesidad de declararlo como tal ni de que deba
cumplir propiedades especiales. Tanto la magnitud como la unidad de una expresion
de la forma ab pueden extraerse invocando las funciones qty y units, respectivamente.
Las operaciones aritmeticas con magnitudes dimensionales se realizan de la forma
convencional.
(x a) * (y b) es igual a (x y)(a b).
(x a) + (y a) es igual a (x + y)a.
(x a)^y es igual a xy ay si y es adimensional.
ezunits no necesita que las unidades en una suma tengan las mismas dimensiones;
estos terminos ser
an sumados sin emitirse mensaje de error.
Para utilizar este operador ejec
utese primero load(ezunits).
Ejemplos:
Unidades del Sistema Internacional.
(%i1) load (ezunits)$
(%i2) foo : 10 m;
(%o2)
10 m
(%i3) qty (foo);
(%o3)
10
(%i4) units (foo);
(%o4)
m
(%i5) dimensions (foo);
(%o5)
length
Unidades definidas por el usuario.
(%i1) load (ezunits)$
(%i2) bar : x acre;
(%o2)
x acre
(%i3) dimensions (bar);
2
(%o3)
length
(%i4) fundamental_units (bar);
2
(%o4)
m
Unidades ad hoc.
(%i1) load (ezunits)$
(%i2) baz : 3 sheep + 8 goat + 1 horse;
(%o2)
8 goat + 3 sheep + 1 horse
(%i3) subst ([sheep = 3*goat, horse = 10*goat], baz);
(%o3)
27 goat
(%i4) baz2 : 1000gallon/fortnight;
gallon
(%o4)
1000 --------fortnight
(%i5) subst (fortnight = 14*day, baz2);

792

Manual de Maxima

(%o5)
Operaciones
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

(%i5)
(%o5)
(%i6)
(%o6)

500
gallon
--- -----7
day
aritmeticas y magnitudes dimensionales.
load (ezunits)$
100 kg + 200 kg;
300 kg
100 m^3 - 100 m^3;
3
0 m
(10 kg) * (17 m/s^2);
kg m
170 ---2
s
(x m) / (y s);
x
m
- y
s
(a m)^2;
2
2
a m

[Operador]
Operador de conversi
on de unidades. Una expresion tal como abc convierte las
unidades b en c. El paquete ezunits contiene funciones conversoras para unidades
fundamentales del SI, unidades derivadas, as como algunas otras unidades ajenas al
SI. Las conversiones entre unidades que no esten programadas en ezunits podran
declararse a posteriori. Las conversiones conocidas por ezunits estan especificadas
en la variable global known_unit_conversions, incluyendo tanto las ya declaradas
por defecto como aquellas introducidas por el usuario. Las conversiones para los
productos, cocientes y potencias de unidades se derivan del conjunto de conversiones
ya conocidas.
No hay un sistema de representacion de unidades que se considere preferible, razon
por la cual las unidades no se convierten a otras a menos que se indique de forma
explcita. Del mismo modo, ezunits no transforma prefijos (milli-, centi-, deci-, etc)
a menos que se le indique.
Para utilizar este operador ejec
utese primero load(ezunits).
Ejemplos:
Conjunto de conversiones conocidas.
(%i1) load (ezunits)$
(%i2) display2d : false$
(%i3) known_unit_conversions;
(%o3) {acre = 4840*yard^2,Btu = 1055*J,cfm = feet^3/minute,
cm = m/100,day = 86400*s,feet = 381*m/1250,ft = feet,
g = kg/1000,gallon = 757*l/200,GHz = 1000000000*Hz,

Captulo 50: ezunits

793

GOhm = 1000000000*Ohm,GPa = 1000000000*Pa,


GWb = 1000000000*Wb,Gg = 1000000*kg,Gm = 1000000000*m,
Gmol = 1000000*mol,Gs = 1000000000*s,ha = hectare,
hectare = 100*m^2,hour = 3600*s,Hz = 1/s,inch = feet/12,
km = 1000*m,kmol = 1000*mol,ks = 1000*s,l = liter,
lbf = pound_force,lbm = pound_mass,liter = m^3/1000,
metric_ton = Mg,mg = kg/1000000,MHz = 1000000*Hz,
microgram = kg/1000000000,micrometer = m/1000000,
micron = micrometer,microsecond = s/1000000,
mile = 5280*feet,minute = 60*s,mm = m/1000,
mmol = mol/1000,month = 2629800*s,MOhm = 1000000*Ohm,
MPa = 1000000*Pa,ms = s/1000,MWb = 1000000*Wb,
Mg = 1000*kg,Mm = 1000000*m,Mmol = 1000000000*mol,
Ms = 1000000*s,ns = s/1000000000,ounce = pound_mass/16,
oz = ounce,Ohm = s*J/C^2,
pound_force = 32*ft*pound_mass/s^2,
pound_mass = 200*kg/441,psi = pound_force/inch^2,
Pa = N/m^2,week = 604800*s,Wb = J/A,yard = 3*feet,
year = 31557600*s,C = s*A,F = C^2/J,GA = 1000000000*A,
GC = 1000000000*C,GF = 1000000000*F,GH = 1000000000*H,
GJ = 1000000000*J,GK = 1000000000*K,GN = 1000000000*N,
GS = 1000000000*S,GT = 1000000000*T,GV = 1000000000*V,
GW = 1000000000*W,H = J/A^2,J = m*N,kA = 1000*A,
kC = 1000*C,kF = 1000*F,kH = 1000*H,kHz = 1000*Hz,
kJ = 1000*J,kK = 1000*K,kN = 1000*N,kOhm = 1000*Ohm,
kPa = 1000*Pa,kS = 1000*S,kT = 1000*T,kV = 1000*V,
kW = 1000*W,kWb = 1000*Wb,mA = A/1000,mC = C/1000,
mF = F/1000,mH = H/1000,mHz = Hz/1000,mJ = J/1000,
mK = K/1000,mN = N/1000,mOhm = Ohm/1000,mPa = Pa/1000,
mS = S/1000,mT = T/1000,mV = V/1000,mW = W/1000,
mWb = Wb/1000,MA = 1000000*A,MC = 1000000*C,
MF = 1000000*F,MH = 1000000*H,MJ = 1000000*J,
MK = 1000000*K,MN = 1000000*N,MS = 1000000*S,
MT = 1000000*T,MV = 1000000*V,MW = 1000000*W,
N = kg*m/s^2,R = 5*K/9,S = 1/Ohm,T = J/(m^2*A),V = J/C,
W = J/s}
Converiones de unidades fundamentales.
(%i1) load (ezunits)$
(%i2) 1 ft m;
Computing conversions to base units; may take a moment.
381
(%o2)
---- m
1250
(%i3) %, numer;
(%o3)
0.3048 m
(%i4) 1 kg lbm;

794

Manual de Maxima

(%o4)

441
--- lbm
200

(%i5) %, numer;
(%o5)
(%i6) 1 W Btu/hour;

2.205 lbm

(%o6)

720
Btu
--- ---211
hour

(%i7) %, numer;
Btu
(%o7)
3.412322274881517 ---hour
(%i8) 100 degC degF;
(%o8)
212 degF
(%i9) -40 degF degC;
(%o9)
(- 40) degC
(%i10) 1 acre*ft m^3;
60228605349
3
(%o10)
----------- m
48828125
(%i11) %, numer;
3
(%o11)
1233.48183754752 m
Transformando pies a metros y viceversa.
(%i1) load (ezunits)$
(%i2) 100 m + 100 ft;
(%o2)
100 m + 100 ft
(%i3) (100 m + 100 ft) ft;
163100
(%o3)
------ ft
381
(%i4) %, numer;
(%o4)
428.0839895013123 ft
(%i5) (100 m + 100 ft) m;
3262
(%o5)
---- m
25
(%i6) %, numer;
(%o6)
130.48 m
An
alisis dimensional para encontrar dimensiones y unidades fundamentales.
(%i1) load (ezunits)$
(%i2) foo : 1 acre * ft;
(%o2)
1 acre ft
(%i3) dimensions (foo);
3

Captulo 50: ezunits

795

(%o3)
length
(%i4) fundamental_units (foo);
3
(%o4)
m
(%i5) foo m^3;
60228605349
3
(%o5)
----------- m
48828125
(%i6) %, numer;
(%o6)

3
1233.48183754752 m

Declaraci
on de conversiones.
(%i1) load (ezunits)$
(%i2) declare_unit_conversion (MMBtu = 10^6*Btu, kW = 1000*W);
(%o2)
done
(%i3) declare_unit_conversion (kWh = kW*hour, MWh = 1000*kWh,
bell = 1800*s);
(%o3)
done
(%i4) 1 kW*s MWh;
Computing conversions to base units; may take a moment.
1
(%o4)
------- MWh
3600000
(%i5) 1 kW/m^2 MMBtu/bell/ft^2;
1306449
MMBtu
(%o5)
---------- -------8242187500
2
bell ft

constvalue (x )
declare_constvalue (a, x )
remove_constvalue (a )

[Funcion]
[Funcion]
[Funcion]
Devuelve la constante declarada para un smbolo. Los valores constantes se declaran
con declare_constvalue.
Los valores constantes reconocidos por constvalue son distintos de los valores
declarados por numerval y reconocidos por constantp.
El paquete physical_units declara los valores constantes de las constantes fsicas.
remove_constvalue deshace la accion de declare_constvalue.
Para utilizar estas funciones ejec
utese primero load(ezunits).
Ejemplos:
Valor de una constante fsica.
(%i1) load (physical_constants)$
(%i2) constvalue (%G);
3
m

796

Manual de Maxima

(%o2)

6.67428 ----2
kg s
(%i3) get (%G, description);
(%o3)
Newtonian constant of gravitation

Declarando una nueva constante.


(%i1) load (ezunits)$
(%i2) declare_constvalue (FOO, 100 lbm / acre);
lbm
(%o2)
100 ---acre
(%i3) FOO * (50 acre);
(%o3)
50 FOO acre
(%i4) constvalue (%);
(%o4)
5000 lbm

units (x )
declare_units (a, u )

[Funcion]
[Funcion]
Devuelve las unidades de la magnitud dimensional x, o 1 en caso de que x sea adimensional.
x puede ser una expresi
on literal dimensional ab, un smbolo con unidades declaradas
por medio de declare_units, o una expresion que contenga cualquiera o ambos de
los anteriores.
declare_constvalue declara que units(a ) debe devolver u, siendo u una expresion.
Para utilizar estas funciones ejec
utese primero load(ezunits).
Ejemplos:
units aplicado a expresiones dimensionales literales.
(%i1) load (ezunits)$
(%i2) foo : 100 kg;
(%o2)
(%i3) bar : x m/s;
(%o3)
(%i4) units (foo);
(%o4)
(%i5) units (bar);
(%o5)

100 kg
m
x s
kg
m
s

(%i6) units (foo * bar);


(%o6)
(%i7) units (foo / bar);

kg m
---s

Captulo 50: ezunits

(%o7)

797

kg s
---m

(%i8) units (foo^2);


2
(%o8)
kg
units aplicado a smbolos con unidades declaradas.
(%i1) load (ezunits)$
(%i2) linenum:0;
(%o0)
0
(%i1) units (aa);
(%o1)
1
(%i2) declare_units (aa, J);
(%o2)
J
(%i3) units (aa);
(%o3)
J
(%i4) units (aa^2);
2
(%o4)
J
(%i5) foo : 100 kg;
(%o5)
100 kg
(%i6) units (aa * foo);
(%o6)
kg J

qty (x )
declare_qty (a, x )

[Funcion]
[Funcion]
qty devuelve la parte adimensional de la magnitud dimensional x, o x, si x es adimensional. x puede ser una expresion literal dimensional ab, un smbolo con unidades
declaradas o una expresi
on que contenga cualquiera o ambos de los anteriores.
declare_qty declara que qty(a ) debe devolver x, siendo x una magnitud dimensional.
Para utilizar estas funciones ejec
utese primero load(ezunits).
Ejemplos:
qty aplicado a expresiones dimensionales literales.
(%i1) load (ezunits)$
(%i2) foo : 100 kg;
(%o2)
100 kg
(%i3) qty (foo);
(%o3)
100
(%i4) bar : v m/s;
m
(%o4)
v s
(%i5) foo * bar;
kg m
(%o5)
100 v ----

798

Manual de Maxima

s
(%i6) qty (foo * bar);
(%o6)

100 v

qty aplicado a smbolos con unidades declaradas.


(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load (ezunits)$
declare_qty (aa, xx);
xx
qty (aa);
xx
qty (aa^2);

(%o4)
(%i5) foo : 100 kg;
(%o5)
(%i6) qty (aa * foo);
(%o6)

2
xx
100 kg
100 xx

unitp (x )

[Funcion]
Devuelve true si x es una expresion dimensional literal, un smbolo declarado como
dimensional o una expresi
on en la que su operador principal ha sido declarado como
dimensional. En cualquier otro caso, unitp devuelve false.
Para utilizar esta funci
on ejec
utese primero load(ezunits).
Ejemplos:
unitp aplicado a expresiones dimensionales literales.
(%i1) load (ezunits)$
(%i2) unitp (100 kg);
(%o2)

true

unitp applied to a symbol declared dimensional.


(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

load (ezunits)$
unitp (foo);
false
declare (foo, dimensional);
done
unitp (foo);
true

unitp aplicado a una expresi


on en la que el operador principal se declara dimensional.
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

load (ezunits)$
unitp (bar (x, y, z));
false
declare (bar, dimensional);
done
unitp (bar (x, y, z));
true

Captulo 50: ezunits

799

declare_unit_conversion (u = v, ...)

[Funcion]
A~
nade las ecuaciones u = v, ... a la lista de conversiones de unidades conocidas por el
operador de conversi
on . u y v son terminos multiplicativos en las que las variables
son unidades o expresiones dimensionales literales.
De momento, es imperativo expresar las conversiones de forma que el miembro
izquierdo de cada ecuaci
on sea una unidad simple (en opsicion a una expresion
multiplicativa) o una expresion dimensional literal con la cantidad igual a 1 y con
unidad simple. Est
a previsto eliminar esta restriccion en versiones futuras.
known_unit_conversions es la lista de conversiones de unidades conocidas.
Para utilizar esta funci
on ejec
utese primero load(ezunits).
Ejemplos:
Conversi
on de unidades expresadas por ecuaciones con terminos multiplicativos.
(%i1) load (ezunits)$
(%i2) declare_unit_conversion (nautical_mile = 1852 * m,
fortnight = 14 * day);
(%o2)
done
(%i3) 100 nautical_mile / fortnight m/s;
Computing conversions to base units; may take a moment.
463
m
(%o3)
---- 3024
s
Conversi
on de unidades expresadas por ecuaciones con expresiones dimensionales literales.
(%i1) load (ezunits)$
(%i2) declare_unit_conversion (1 fluid_ounce = 2 tablespoon);
(%o2)
done
(%i3) declare_unit_conversion (1 tablespoon = 3 teaspoon);
(%o3)
done
(%i4) 15 fluid_ounce teaspoon;
Computing conversions to base units; may take a moment.
(%o4)
90 teaspoon

declare_dimensions (a_1, d_1, ..., a_n, d_n )


remove_dimensions (a_1, ..., a_n )

[Funcion]
[Funcion]
declare_dimensions declara a 1, ..., a n con las dimensiones d 1, ..., d n, respectivamente.
Cada a k es un smbolo o lista de smbolos. En caso de ser una lista, cada smbolo
en a k se declara de dimensi
on d k.
remove_dimensions invierte el efecto de declare_dimensions.
Ejec
utese load(ezunits) para hacer uso de estas funciones.
Ejemplos:
(%i1) load (ezunits) $
(%i2) declare_dimensions ([x, y, z], length, [t, u], time);
(%o2)
done

800

Manual de Maxima

(%i3) dimensions (y^2/u);


2
length
(%o3)
------time
(%i4) fundamental_units (y^2/u);
0 errors, 0 warnings
2
m
(%o4)
-s

declare_fundamental_dimensions (d_1, d_2, d_3, ...)


remove_fundamental_dimensions (d_1, d_2, d_3, ...)
fundamental_dimensions

[Funcion]
[Funcion]
[Variable global]
declare_fundamental_dimensions declara dimensiones fundamentales.
Los
smbolos d 1, d 2, d 3, ... se a~
naden a la lista de dimensiones fundamentales si no
est
an ya presentes en la lista.
remove_fundamental_dimensions invierte el efecto de declare_fundamental_
dimensions.
fundamental_dimensions es la lista de dimensiones fundamentales. Por defecto, la
lista comprende algunas dimensiones fsicas.
Ejec
utese load(ezunits) para hacer uso de estas funciones.
Ejemplos:
(%i1) load (ezunits) $
(%i2) fundamental_dimensions;
(%o2) [length, mass, time, current, temperature, quantity]
(%i3) declare_fundamental_dimensions (money, cattle, happiness);
(%o3)
done
(%i4) fundamental_dimensions;
(%o4) [length, mass, time, current, temperature, quantity,
money, cattle, happiness]
(%i5) remove_fundamental_dimensions (cattle, happiness);
(%o5)
done
(%i6) fundamental_dimensions;
(%o6) [length, mass, time, current, temperature, quantity, money]

declare_fundamental_units (u_1, d_1, ..., u_n, d_n )


remove_fundamental_units (u_1, ..., u_n )

[Funcion]
[Funcion]
declare_fundamental_units declara u 1, ..., u n de dimensiones d 1, ..., d n, respectivamente. Todos los argumentos deben smbolos.
Tras la llamada a declare_fundamental_units, dimensions(u_k ) devuelve d k
para cada argumento u 1, ..., u n, y fundamental_units(d_k ) devuelve u k para
cada d 1, ..., d n.
remove_fundamental_units invierte el efecto de declare_fundamental_units.
Ejec
utese load(ezunits) para hacer uso de estas funciones.

Captulo 50: ezunits

801

Ejemplos:
(%i1) load (ezunits) $
(%i2) declare_fundamental_dimensions (money, cattle, happiness);
(%o2)
done
(%i3) declare_fundamental_units (dollar, money, goat, cattle,
smile, happiness);
(%o3)
[dollar, goat, smile]
(%i4) dimensions (100 dollar/goat/km^2);
money
(%o4)
-------------2
cattle length
(%i5) dimensions (x smile/kg);
happiness
(%o5)
--------mass
(%i6) fundamental_units (money*cattle/happiness);
0 errors, 0 warnings
dollar goat
(%o6)
----------smile

dimensions (x )
dimensions_as_list (x )

[Funcion]
[Funcion]
dimensions devuelve las dimensiones de la magnitud dimensional x en forma de
expresi
on que contiene productos y potencias de dimensiones fundamentales.
dimensions_as_list devuelve las dimensiones de la magnitud dimensional x en
forma de lista, cuyos elementos indican las potencias de las dimensiones fundamentales correspondientes.
Para utilizar estas funciones ejec
utese primero load(ezunits).
Ejemplos:
(%i1) load (ezunits)$
(%i2) dimensions (1000 kg*m^2/s^3);
2
length mass
(%o2)
-----------3
time
(%i3) declare_units (foo, acre*ft/hour);
acre ft
(%o3)
------hour
(%i4) dimensions (foo);
3
length
(%o4)
-------

802

Manual de Maxima

time
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)

load (ezunits)$
fundamental_dimensions;
[length, mass, time, charge, temperature, quantity]
dimensions_as_list (1000 kg*m^2/s^3);
[2, 1, - 3, 0, 0, 0]
declare_units (foo, acre*ft/hour);
acre ft
(%o4)
------hour
(%i5) dimensions_as_list (foo);
(%o5)
[3, 0, - 1, 0, 0, 0]

fundamental_units (x )
fundamental_units ()

[Funcion]
[Funcion]
fundamental_units(x ) devuelve las unidades asociadas a las dimensiones fundamentales de x, tal como queda determinada por dimensions(x ).
x puede ser una expresi
on literal dimensional ab, un smbolo con unidades declaradas
a traves de declare_units o una expresion que contenga a ambos.
fundamental_units() devuelve una lista con las unidades fundamentales conocidas,
tal como fueron declaradas por declare_fundamental_units.
Para utilizar esta funci
on ejec
utese primero load(ezunits).
Ejemplos:
(%i1) load (ezunits)$
(%i2) fundamental_units ();
(%o2)
[m, kg, s, A, K, mol]
(%i3) fundamental_units (100 mile/hour);
m
(%o3)
s
(%i4) declare_units (aa, g/foot^2);
g
(%o4)
----2
foot
(%i5) fundamental_units (aa);
kg
(%o5)
-2
m

dimensionless (L )

[Funcion]
Devuelve una expresi
on sin dimensiones que se puede formar a partir de una lista L
de cantidades dimensionales
Para utilizar esta funci
on ejec
utese primero load(ezunits).
Ejemplos:

Captulo 50: ezunits

803

(%i1) load (ezunits) $


(%i2) dimensionless ([x m, y m/s, z s]);
0 errors, 0 warnings
0 errors, 0 warnings
y z
(%o2)
[---]
x
Cantidades adimensionales obtenidas a partir de cantidades fsicas. Notese que el
primer elemento de la lista es proporcional a la constante de estructura fina.
(%i1) load (ezunits) $
(%i2) load (physical_constants) $
(%i3) dimensionless([%h_bar, %m_e, %m_P, %%e, %c, %e_0]);
0 errors, 0 warnings
0 errors, 0 warnings
2
%%e
%m_e
(%o3)
[--------------, ----]
%c %e_0 %h_bar %m_P

natural_unit (expr, [v_1, ..., v_n ])

[Funcion]
Busca los exponentes e 1, ..., e n tales que dimension(expr ) = dimension(v_1 ^e_1
... v_n ^e_n ).
Para utilizar esta funci
on ejec
utese primero load(ezunits).

Captulo 51: f90

805

51 f90
51.1 Funciones y variables para f90
f90 (expr_1, . . . , expr_n )

[Funcion]
Imprime una o m
as expresiones expr 1, . . . , expr n como un programa Fortran 90.
El programa se obtiene a traves de la salida estandar.
La funci
on f90 imprime su salida en el llamado formato libre de Fortran 90: no se
presta atenci
on alguna a las posiciones de caracteres respecto de las columnas y los
renglones largos se dividen a un ancho fijo con el caracter & indicando continuacion
de c
odigo.
Ejec
utese load(f90) antes de utilizar esta funcion.
Vease tambien fortran.
Ejemplos:
(%i1) load (f90)$
(%i2) foo : expand ((xxx + yyy + 7)^4);
4
3
3
2
2
2
(%o2) yyy + 4 xxx yyy + 28 yyy + 6 xxx yyy + 84 xxx yyy
2
3
2
+ 294 yyy + 4 xxx yyy + 84 xxx yyy + 588 xxx yyy + 1372 yyy
4
3
2
+ xxx + 28 xxx + 294 xxx + 1372 xxx + 2401
(%i3) f90 (foo = foo);
foo = yyy**4+4*xxx*yyy**3+28*yyy**3+6*xxx**2*yyy**2+84*xxx*yyy**2&
+294*yyy**2+4*xxx**3*yyy+84*xxx**2*yyy+588*xxx*yyy+1372*yyy+xxx**&
4+28*xxx**3+294*xxx**2+1372*xxx+2401
(%o3)
false
Expresiones m
ultiples. Captura de la salida estandar a un fichero por medio de la
funci
on with_stdout.
(%i1) load (f90)$
(%i2) foo : sin (3*x + 1) - cos (7*x - 2);
(%o2)
sin(3 x + 1) - cos(7 x - 2)
(%i3) with_stdout ("foo.f90",
f90 (x=0.25, y=0.625, foo=foo, stop, end));
(%o3)
false
(%i4) printfile ("foo.f90");
x = 0.25
y = 0.625
foo = sin(3*x+1)-cos(7*x-2)
stop
end
(%o4)
foo.f90

Captulo 52: finance

807

52 finance
52.1 Introducci
on a finance
Este es el Paquete "Finance" (Ver 0.1).
En todas las funciones, rate es la tasa de interes compuesto, num es el n
umero de periodos
y debe ser positivo, y flow se refiere al flujo de caja; entonces, si se tiene un egreso el flujo
es negativo y para un ingreso un valor positivo.
Note que antes de usar las funciones definidas en este paquete, debe cargarla escribiendo
load(finance)$.
Autor: Nicol
as Guarin Zapata.

52.2 Funciones y Variables para finance


days360 (a~
no1,mes1,dia1,a~
no2,mes2,dia2 )

[Function]
Calcula la distancia entre 2 fechas, asumiendo a~
nos de 360 dias y meses de 30 das.
Ejemplo:
(%i1) load(finance)$
(%i2) days360(2008,12,16,2007,3,25);
(%o2)
- 621

fv (rate,PV,num )

[Function]
Calcular el Valor Futuro a partir de uno en el Presente para una tasa de interes dada.
rate es la tasa de interes, PV es el valor prestente y num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) fv(0.12,1000,3);
(%o2)

1404.928

pv (rate,FV,num )

[Function]
Calcula el valor actual de un valor futuro dada la tasa de interes. rate es la tasa de
interes, FV es el valor futuro y num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) pv(0.12,1000,3);
(%o2)
711.7802478134108

graph_flow (val )

[Function]
Grafica el flujo de caja en una lnea de tiempo, los valores positivos estan en azul y
hacia arriba; los negativos estan en rojo y hacia abajo. La direccion del flujo est
a
dada por el signo de los valores. val es una lista de los valores del flujo de caja.
Ejemplo:
(%i1) load(finance)$
(%i2) graph_flow([-5000,-3000,800,1300,1500,2000])$

808

Manual de Maxima

annuity_pv (rate,PV,num )

[Function]
Calcula una anualidad conociendo el valor presente (tipo deuda), para unos pagos
peri
odicos y constantes. rate es la tasa de interes, PV es el valor presente y num es
el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) annuity_pv(0.12,5000,10);
(%o2)
884.9208207992202

annuity_fv (rate,FV,num )

[Function]
Calcula una anualidad conociendo el valor deseado (valor futuro), para una serie de
pagos peri
odicos y constantes. rate es la tasa de interes, FV es el valor futuroe y num
es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) annuity_fv(0.12,65000,10);
(%o2)
3703.970670389863

geo_annuity_pv (rate,growing_rate,PV,num )

[Function]
Calcula una anualidad conociendo el valor presente (tipo deuda) en una serie de pagos
periodicos crecientes. rate es la tasa de interes, growing rate es el crecimiento de los
pagos, PV es el valor presente, y num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) geo_annuity_pv(0.14,0.05,5000,10);
(%o2)
802.6888176505123

geo_annuity_fv (rate,growing_rate,FV,num )

[Function]
Calcular una anualidad conociendo el valor deseado (valor futuro) en una serie de
pagos periodicos crecientes. rate es la tasa de interes, growing rate es el crecimiento
de los pagos, FV es el valor futuro, y num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) geo_annuity_fv(0.14,0.05,5000,10);
(%o2)
216.5203395312695

amortization (rate,amount,num )

[Function]
La tabla de amortizaci
on determinada por una tasa. Siendo rate es la tasa de interes,
amount es el valor de la deuda, and num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) amortization(0.05,56000,12)$
"n"
"Balance"
"Interest"
"Amortization" "Payment"
0.000
56000.000
0.000
0.000
0.000
1.000
52481.777
2800.000
3518.223
6318.223
2.000
48787.643
2624.089
3694.134
6318.223

Captulo 52: finance

3.000
4.000
5.000
6.000
7.000
8.000
9.000
10.000
11.000
12.000

809

44908.802
40836.019
36559.597
32069.354
27354.599
22404.106
17206.088
11748.170
6017.355
0.000

2439.382
2245.440
2041.801
1827.980
1603.468
1367.730
1120.205
860.304
587.408
300.868

3878.841
4072.783
4276.422
4490.243
4714.755
4950.493
5198.018
5457.919
5730.814
6017.355

6318.223
6318.223
6318.223
6318.223
6318.223
6318.223
6318.223
6318.223
6318.223
6318.223

arit_amortization (rate,increment,amount,num )

[Function]
La tabla de amortizaci
on determinada por una tasa especfica y unos pagos crecientes
se puede hallar con arit_amortization. Notese que los pagos no son constantes,
estos presentan un crecimiento aritmetico, el incremento es la diferencia entre dos
filas consecutivas en la columna "Payment". rate es la tasa de interes, increment es
el incremento, amount es el valor de la deuda, and num es el n
umero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) arit_amortization(0.05,1000,56000,12)$
"n"
"Balance"
"Interest"
"Amortization" "Payment"
0.000
56000.000
0.000
0.000
0.000
1.000
57403.679
2800.000
-1403.679
1396.321
2.000
57877.541
2870.184
-473.863
2396.321
3.000
57375.097
2893.877
502.444
3396.321
4.000
55847.530
2868.755
1527.567
4396.321
5.000
53243.586
2792.377
2603.945
5396.321
6.000
49509.443
2662.179
3734.142
6396.321
7.000
44588.594
2475.472
4920.849
7396.321
8.000
38421.703
2229.430
6166.892
8396.321
9.000
30946.466
1921.085
7475.236
9396.321
10.000
22097.468
1547.323
8848.998
10396.321
11.000
11806.020
1104.873
10291.448
11396.321
12.000
-0.000
590.301
11806.020
12396.321

geo_amortization (rate,growing_rate,amount,num )

[Function]
La tabla de amortizaci
on determinada por la tasa, el valor de la deuda, y el n
umero
de periodos se puede hallar con geo_amortization. Notese que los pagos no son
constantes, estos presentan un crecimiento geometrico, growin rate es entonces el
cociente entre dos filas consecutivas de la columna "Payment". rate es la tasa de
interes, growing rate es el crecimeinto de los pagos, amount es el valor de la deuda,
y num es el numero de periodos.
Ejemplo:
(%i1) load(finance)$
(%i2) geo_amortization(0.05,0.03,56000,12)$
"n"
"Balance"
"Interest"
"Amortization" "Payment"
0.000
56000.000
0.000
0.000
0.000

810

Manual de Maxima

1.000
2.000
3.000
4.000
5.000
6.000
7.000
8.000
9.000
10.000
11.000
12.000

53365.296
50435.816
47191.930
43612.879
39676.716
35360.240
30638.932
25486.878
19876.702
13779.481
7164.668
0.000

2800.000
2668.265
2521.791
2359.596
2180.644
1983.836
1768.012
1531.947
1274.344
993.835
688.974
358.233

2634.704
2929.480
3243.886
3579.051
3936.163
4316.475
4721.309
5152.054
5610.176
6097.221
6614.813
7164.668

5434.704
5597.745
5765.677
5938.648
6116.807
6300.311
6489.321
6684.000
6884.520
7091.056
7303.787
7522.901

saving (rate,amount,num )

[Function]
La tabla que presenta los valores para un ahorro constante y periodico se pueden hallar
con saving. amount representa la cantidad deseada y num el n
umero de periodos
durante los que se ahorrar
a.
Ejemplo:
(%i1) load(finance)$
(%i2) saving(0.15,12000,15)$
"n"
"Balance"
"Interest"
0.000
0.000
0.000
1.000
252.205
0.000
2.000
542.240
37.831
3.000
875.781
81.336
4.000
1259.352
131.367
5.000
1700.460
188.903
6.000
2207.733
255.069
7.000
2791.098
331.160
8.000
3461.967
418.665
9.000
4233.467
519.295
10.000
5120.692
635.020
11.000
6141.000
768.104
12.000
7314.355
921.150
13.000
8663.713
1097.153
14.000
10215.474
1299.557
15.000
12000.000
1532.321

npv (rate,val )

"Payment"
0.000
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205
252.205

[Function]
Calcular el valor presente neto de una serie de valores para evaluar la viabilidad de
un proyecto. flowValues es una lista con los valores para cada periodo.
Ejemplo:
(%i1) load(finance)$
(%i2) npv(0.25,[100,500,323,124,300]);
(%o2)
714.4703999999999

Captulo 52: finance

811

irr (val,IO )

[Function]
Tasa interna de retorno (en ingles Internal Rate of Return - IRR), es el valor de tasa
que hace que el Valor Presente Neto (NPV) sea cero. flowValues los valores para cada
periodo (para periodos mayores a 0) y I0 el valor para el periodo cero.
Ejemplo:
(%i1) load(finance)$
(%i2) res:irr([-5000,0,800,1300,1500,2000],0)$
(%i3) rhs(res[1][1]);
(%o3)
.03009250374237132

benefit_cost (rate,input,output )

[Function]
Calcular la relaci
on Beneficio/Costo, Beneficio es el Valor Presente Neto (NPV) de
los flujos de caja positivos (inputs), y Costo es el Valor Presente Neto de los flujos
de caja negativos (outputs). Notese que si se desea tener un valor de cero para un
periodo especifico, esta entrada/salida debe indicarse como cero para ese periodo.
rate es la tasa de interes, input es una lista con los ingresos, y output es una lista con
los egresos.
Ejemplo:
(%i1) load(finance)$
(%i2) benefit_cost(0.24,[0,300,500,150],[100,320,0,180]);
(%o2)
1.427249324905784

Captulo 53: fractals

813

53 fractals
53.1 Introducci
on a fractals
Este paquete define algunos fractales:
- con IFS (Iterated Function System) aleatorias: triangulo de Sierpinsky, un arbol y un
helecho.
- Fractales complejos: conjuntos de Mandelbrot y de Julia.
- Copos de Koch.
- Funciones de Peano: funciones de Sierpinski y Hilbert.
Autor: Jose Rammrez Labrador.
Para preguntas, sugerencias y fallos,
pepe DOT ramirez AAATTT uca DOT es

53.2 Definiciones para IFS fractals


Algunos fractales se pueden generar por medio de la aplicacion iterativa de transformaciones
afines contractivas de forma aleatoria; vease
Hoggar S. G., "Mathematics for computer graphics", Cambridge University Press 1994.
Definimos una lista con varias transformaciones afines contractivas, luego las vamos seleccionando de forma aleatoria y recursiva. La probabilidad de seleccion de una transformacion
debe estar relacionada con la raz
on de contraccion.
Se pueden cambiar las transformaciones y encontrar nuevos fractales.

sierpinskiale (n )

[Funcion]
Tri
angulo de Sierpinski: 3 aplicaciones contractivas; constante de contraccion de 0.5
y traslaciones. Todas las aplicaciones tienen la misma constante de contraccion. El
argumento n debe ser suficientemente alto, 10000 o mayor.
Ejemplo:
(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,sierpinskiale(n)], [style,dots])$

treefale (n )

[Funcion]
3 aplicaciones contractivas, todas ellas con el mismo coeficiente de contraccion. El
argumento n debe ser suficientemente alto, 10000 o mayor.
Ejemplo:
(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,treefale(n)], [style,dots])$

fernfale (n )

[Funcion]
4 aplicaciones contractivas, cuyas probabilidades de seleccion deben estar relacionadas
con su constante de contraccion. El argumento n debe ser suficientemente alto, 10000
o mayor.
Ejemplo:

814

Manual de Maxima

(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,fernfale(n)], [style,dots])$

53.3 Definiciones para fractales complejos


mandelbrot_set (x, y )

[Funcion]

Conjunto de Mandelbrot.
Esta funci
on debe realizar muchas operaciones y puede tardar bastante tiempo en
ejecutarse, tiempo que tambien depende del n
umero de puntos de la malla.
Ejemplo:
(%i1) load(fractals)$
(%i2) plot3d (mandelbrot_set, [x, -2.5, 1], [y, -1.5, 1.5],
[gnuplot_preamble, "set view map"],
[gnuplot_pm3d, true],
[grid, 150, 150])$

julia_set (x, y )

[Funcion]

Conjuntos de Julia.
Esta funci
on debe realizar muchas operaciones y puede tardar bastante tiempo en
ejecutarse, tiempo que tambien depende del n
umero de puntos de la malla.
Ejemplo:
(%i1) load(fractals)$
(%i2) plot3d (julia_set, [x, -2, 1], [y, -1.5, 1.5],
[gnuplot_preamble, "set view map"],
[gnuplot_pm3d, true],
[grid, 150, 150])$
Vease tambien julia_parameter.

julia_parameter

[Variable opcional]

Valor por defecto: %i


Par
ametro complejo para fractales de Julia. Su valor por defecto es %i, y otros que
se sugieren son: -.745+%i*.113002, -.39054-%i*.58679, -.15652+%i*1.03225, .194+%i*.6557 y .011031-%i*.67037.

julia_sin (x, y )

[Funcion]
Mientras que la funci
on julia_set implementa la transformacion julia_
parameter+z^2, la funci
on julia_sin implementa julia_parameter*sin(z).
Vease el c
odigo fuente para mas detalles.
Este programa es lento porque calcula muchos senos; el tiempo de ejecucion tambien
depende del n
umero de puntos de la malla.
Ejemplo:
(%i1) load(fractals)$
(%i2) julia_parameter:1+.1*%i$
(%i3) plot3d (julia_sin, [x, -2, 2], [y, -3, 3],

Captulo 53: fractals

815

[gnuplot_preamble, "set view map"],


[gnuplot_pm3d, true],
[grid, 150, 150])$
Vease tambien julia_parameter.

53.4 Definiciones para cops de Koch


snowmap (ent, nn )

[Funcion]
Copos de Koch. La funci
on snowmap dibuja el copo de Koch sobre los vertices de un
polgono convexo inicial del plano complejo. La orientacion del polgono es importante. El argumento nn es el n
umero de recursividades de la transformacion de Koch,
el cual debe ser peque~
no (5 o 6).
Ejemplos:
(%i1) load(fractals)$
(%i2) plot2d([discrete,
snowmap([1,exp(%i*%pi*2/3),exp(-%i*%pi*2/3),1],4)])$
(%i3) plot2d([discrete,
snowmap([1,exp(-%i*%pi*2/3),exp(%i*%pi*2/3),1],4)])$
(%i4) plot2d([discrete, snowmap([0,1,1+%i,%i,0],4)])$
(%i5) plot2d([discrete, snowmap([0,%i,1+%i,1,0],4)])$

53.5 Definiciones para curvas de Peano


Funciones continuas que cubren un area. Aviso: el n
umero de puntos crece exponencialmente con n.

hilbertmap (nn )

[Funcion]
Curva de Hilbert. El argumento nn debe ser peque~
no (por ejemplo, 5). Maxima se
puede detener si nn es 7 o mayor.
Ejemplo:
(%i1) load(fractals)$
(%i2) plot2d([discrete,hilbertmap(6)])$

sierpinskimap (nn )

[Funcion]
Curva de Sierpinski. El argumento nn debe ser peque~
no (por ejemplo, 5). Maxima
se puede detener si nn es 7 o mayor.
Ejemplo:
(%i1) load(fractals)$
(%i2) plot2d([discrete,sierpinskimap(6)])$

Captulo 54: ggf

817

54 ggf
54.1 Funciones y variables para ggf
[Variable opcional]
Valor por defecto: 3
Variable opcional para la funcion ggf.
Cuando se calcula la fracci
on continua de la funcion generatriz, si un cociente parcial
tiene grado estrictamente mayor que GGFINFINITY sera descartado y la convergencia alcanzada hasta ese momento sera considerada como exacta para la funcion
generatriz. Lo m
as frecuente es que el grado de todos los cocientes parciales sea 0 o 1,
de modo que si se utiliza un valor mayor se deberan dar mas terminos para conseguir
un c
alculo m
as exacto.
Vease tambien ggf.

GGFINFINITY

[Variable opcional]
Valor por defeco: 3
Variable opcional para la funcion ggf.
Cuando se calcula la fracci
on continua de la funcion generatriz, si no se ha encontrado un resultado aceptable (vease la variable GGFINFINITY ) despues de haber
calculado GGFCFMAX cocientes parciales, la funcion generatriz sera considerada no
equivalente a una fracci
on racional y la funcion ggf se detendra. Puede asignarsele a
GGFCFMAX un valor mayor para funciones generatrices mas complicadas.
Vease tambien ggf.

GGFCFMAX

ggf (l )

[Funcion]
Calcula la funci
on generatriz de una sucesion de la que se suministran tan solo los
primeros valores y cuyo termino general es una fraccion algebraica (cociente de dos
polinomios).
La soluci
on se devuelve como una fraccion de polinomios. En caso de no poder
encontrar una soluci
on, se devuelve done.
Esta funci
on est
a controlada por las variables globales GGFINFINITY y GGFCFMAX. Veanse tambien GGFINFINITY y GGFCFMAX.
Antes de hacer uso de esta funcion ejec
utese load("ggf").

Captulo 55: graphs

819

55 graphs
55.1 Introducci
on a graphs
El paquete graphs permite trabajar con estructuras de grafos y digrafos en Maxima. Tanto
~ oltiples ni
los grafos como los digrafos son de estructura simples (no tienen ni aristas mA
bucles), pero los digrafos pueden tener una arista dirigida desde u hasta v y otra desde v
hasta u.
Los grafos se representan internamente como listas de adyacencia y se implementan como
estructuras de lisp. Los vertices se identifican por sus n
umeros de identificaci
n (siempre
enteros). Las aristas/arcos se representan por listas de longitud 2. Se pueden asignar
etiquetas a los vertices de los grafos/digrafos y pesos a sus aristas/arcos.
La funci
on draw_graph dibuja grafos siguiendo un criterio rgido de posicionamiento
de los vertices.
Tambien puede hacer uso del programa graphviz disponible en
http://www.graphviz.org. La funcion draw_graph utiliza el paquete draw de Maxima.
Para hacer uso de este paquete, ejec
utese primero load(graphs).

55.2 Funciones y variables para graphs


55.2.1 Construyendo grafos
create_graph (v_list, e_list )
create_graph (n, e_list )
create_graph (v_list, e_list, directed )

[Funcion]
[Funcion]
[Funcion]

Crea un nuevo grafo sobre el conjunto de vertices v list con aristas e list.
v list es una lista de vertices ([v1, v2,..., vn]) o una lista de vertices junto con
sus respectivas etiquetas ([[v1,l1], [v2,l2],..., [vn,ln]]).
n es el n
umero de vertices, los cuales se identificaran desde 0 hasta n-1.
e list es una lista de aristas ([e1, e2,..., em]) o una lista de aristas con sus respectivas ponderaciones ([[e1, w1], ..., [em, wm]]).
Si directed is not false, se devolvera un grafo orientado.
Ejemplos:
Crea un ciclo de 3 vertices.
(%i1) load (graphs)$
(%i2) g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
(%i3) print_graph(g)$
Graph on 3 vertices with 3 edges.
Adjacencies:
3 : 1 2
2 : 3 1
1 : 3 2
Crea un ciclo de 3 vertices y aristas ponderadas:
(%i1) load (graphs)$
(%i2) g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],

820

Manual de Maxima

[[1,3], 3.0]])$
(%i3) print_graph(g)$
Graph on 3 vertices with 3 edges.
Adjacencies:
3 : 1 2
2 : 3 1
1 : 3 2
Crea un grafo orientado:
(%i1) load (graphs)$
(%i2) d : create_graph(
[1,2,3,4],
[
[1,3], [1,4],
[2,3], [2,4]
],
directed = true)$
(%i3) print_graph(d)$
Digraph on 4 vertices with 4 arcs.
Adjacencies:
4 :
3 :
2 : 4 3
1 : 4 3

copy_graph (g )

[Funcion]

Devuelve una copia del grafo g.

circulant_graph (n, d )

[Funcion]

Devuelve un grafo cirlulante de parametros n y d.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : circulant_graph(10, [1,3])$
(%i3) print_graph(g)$
Graph on 10 vertices with 20 edges.
Adjacencies:
9 : 2 6 0 8
8 : 1 5 9 7
7 : 0 4 8 6
6 : 9 3 7 5
5 : 8 2 6 4
4 : 7 1 5 3
3 : 6 0 4 2
2 : 9 5 3 1
1 : 8 4 2 0
0 : 7 3 9 1

clebsch_graph ()
Devuelve el grafo de Clebsch.

[Funcion]

Captulo 55: graphs

821

complement_graph (g )

[Funcion]

Devuelve el complemento del grafo g.

complete_bipartite_graph (n, m )

[Funcion]

Devuelve el grafo bipartido completo de n+m vertices.

complete_graph (n )

[Funcion]

Devuelve el grafo completo de n vertices.

cycle_digraph (n )

[Funcion]

Devuelve el ciclo dirigido de n vertices.

cycle_graph (n )

[Funcion]

Devuelve el ciclo de n vertices.

cuboctahedron_graph (n )

[Funcion]

Devuelve el grafo cubooctaedrico.

cube_graph (n )

[Funcion]

Devuelve el cubo de n dimensiones.

dodecahedron_graph ()

[Funcion]

Devuelve el grafo del dodecaedro.

empty_graph (n )

[Funcion]

Devuelve el grafo vaco de n vertices.

flower_snark (n )
Devuelve el grafo de flor de 4n vertices.
Ejemplo:
(%i1) load (graphs)$
(%i2) f5 : flower_snark(5)$
(%i3) chromatic_index(f5);
(%o3)

[Funcion]

from_adjacency_matrix (A )

[Funcion]

Devuelve el grafo definido por la matriz de adyacencia A.

frucht_graph ()

[Funcion]

Devuelve el grafo de Frucht.

graph_product (g1, g1 )

[Funcion]

Devuelve el producto dirigido de los grafos g1 y g2.


Ejemplo:
(%i1) load (graphs)$
(%i2) grid : graph_product(path_graph(3), path_graph(4))$
(%i3) draw_graph(grid)$

graph_union (g1, g1 )
Devuelve la uni
on (suma) de los grafos g1 y g2.

[Funcion]

822

Manual de Maxima

grid_graph (n, m )

[Funcion]

Devuelve la rejilla n x m.

great_rhombicosidodecahedron_graph ()

[Funcion]

Devuelve el grafo gran rombicosidodecaedrico.

great_rhombicuboctahedron_graph ()

[Funcion]

Devuelve el grafo gran rombicocubicooctaedrico.

grotzch_graph ()

[Funcion]

Devuelve el grafo de Grotzch.

heawood_graph ()

[Funcion]

Devuelve el grafo de Heawood.

icosahedron_graph ()

[Funcion]

Devuelve el grafo icosaedrico.

icosidodecahedron_graph ()

[Funcion]

Devuelve el grafo icosidodecaedrico.

induced_subgraph (V, g )

[Funcion]

Devuelve el grafo inducido por el subconjunto V de vertices del grafo g.


Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) V : [0,1,2,3,4]$
(%i4) g : induced_subgraph(V, p)$
(%i5) print_graph(g)$
Graph on 5 vertices with 5 edges.
Adjacencies:
4 : 3 0
3 : 2 4
2 : 1 3
1 : 0 2
0 : 1 4

line_graph (g )

[Funcion]

Devuelve el grafo de lnea del grafo g.

make_graph (vrt, f )
make_graph (vrt, f, oriented )

[Funcion]
[Funcion]

Crea un grafo por medio de la funcion de predicado f.


vrt es una lista o conjunto de vertices o un simplemente un n
umero entero. Si vrt es
un n
umero entero, entonces los vertices del grafo seran los enteros desde 1 hasta vrt.
f es una funci
on de predicado. Dos vertices a y b se conectaran si f(a,b)=true.
Si directed no es false, entonces en grafo sera dirigido.
Ejemplo 1:

Captulo 55: graphs

(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

823

load(graphs)$
g : make_graph(powerset({1,2,3,4,5}, 2), disjointp)$
is_isomorphic(g, petersen_graph());
true
get_vertex_label(1, g);
{1, 2}

Ejemplo 2:
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)
(%i5)
(%o5)

load(graphs)$
f(i, j) := is (mod(j, i)=0)$
g : make_graph(20, f, directed=true)$
out_neighbors(4, g);
[8, 12, 16, 20]
in_neighbors(18, g);
[1, 2, 3, 6, 9]

mycielski_graph (g )

[Funcion]

Devuelve el grafo de Mycielski del grafo g.

new_graph ()

[Funcion]

Devuelve el grafo sin vertices ni aristas.

path_digraph (n )

[Funcion]

Devuelve el camino dirigido de n vertices.

path_graph (n )

[Funcion]

Devuelve el camino de n vertices.

petersen_graph ()
petersen_graph (n, d )

[Funcion]
[Funcion]
Devuelve el grafo de Petersen P {n,d}. Los valores por defecto para n y d son n=5 y
d=2.

random_bipartite_graph (a, b, p )

[Funcion]
Devuelve un grafo aleatorio bipartido a partir de los vertices a+b. Cada arista se
genera con probabilidad p.

random_digraph (n, p )

[Funcion]
Devuelve un grafo aleatorio dirigido de n vertices. Cada arco se presenta con una
probabilidad p.

random_regular_graph (n )
random_regular_graph (n, d )

[Funcion]
[Funcion]
Devuelve un grafo aleatorio d-regular de n vertices. El valor por defecto para d es
d=3.

random_graph (n, p )

[Funcion]
Devuelve un grafo aleatorio de n vertices. Cada arco se presenta con una probabilidad
p.

824

Manual de Maxima

random_graph1 (n, m )

[Funcion]

Devuelve un grafo aleatorio de n vertices y m arcos aleatorios.

random_network (n, p, w )

[Funcion]
Devuelve una red aleatoria de n vertices. Cada arco se presenta con probabilidad p
y tiene un peso dentro del rango [0,w]. La funcion devuelve una lista [network,
source, sink].
Ejemplo:
(%i1) load (graphs)$
(%i2) [net, s, t] : random_network(50, 0.2, 10.0);
(%o2)
[DIGRAPH, 50, 51]
(%i3) max_flow(net, s, t)$
(%i4) first(%);
(%o4)
27.65981397932507

random_tournament (n )

[Funcion]

Devuelve un torneo aleatorio de n vertices.

random_tree (n )

[Funcion]

Devuelve un
arbol aleatorio de n vertices.

small_rhombicosidodecahedron_graph ()

[Funcion]

Devuelve el grafo peque~


no rombicosidodecaedrico.

small_rhombicuboctahedron_graph ()

[Funcion]

Devuelve el grafo peque~


no rombicocubicooctaedrico.

snub_cube_graph ()

[Funcion]

Devuelve el grafo c
ubico volteado.

snub_dodecahedron_graph ()

[Funcion]

Devuelve el grafo dodecaedrico volteado.

truncated_cube_graph ()

[Funcion]

Devuelve el grafo c
ubico truncado.

truncated_dodecahedron_graph ()

[Funcion]

Devuelve el grafo dodecaedrico truncado.

truncated_icosahedron_graph ()

[Funcion]

Devuelve el grafo icosaedrico truncado.

truncated_tetrahedron_graph ()

[Funcion]

Devuelve el grafo del tetraedro truncado.

tutte_graph ()

[Funcion]

Devuelve el grafo de Tutte.

underlying_graph (g )

[Funcion]

Devuelve el grafo asociado al grafo orientado g.

wheel_graph (n )
Devuelve el grafo de rueda de n+1 vertices.

[Funcion]

Captulo 55: graphs

825

55.2.2 Propiedades de los grafos


adjacency_matrix (gr )
Devuelve la matriz de adyacencia del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) c5 : cycle_graph(4)$
(%i3) adjacency_matrix(c5);
[ 0
[
[ 1
(%o3)
[
[ 0
[
[ 1

[Funcion]

average_degree (gr )

1 ]
]
0 ]
]
1 ]
]
0 ]
[Funcion]

Devuelve el grado medio de los vertices del garfo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) average_degree(grotzch_graph());
40
(%o2)
-11

biconnected_components (gr )

[Funcion]
Devuelve los subconjuntos de vertices biconectados del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph(
[1,2,3,4,5,6,7],
[
[1,2],[2,3],[2,4],[3,4],
[4,5],[5,6],[4,6],[6,7]
])$
(%i3) biconnected_components(g);
(%o3)
[[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]

bipartition (gr )

[Funcion]
Devuelve una bipartici
on de los vertices del grafo gr, o una lista vaca si gr no es
bipartido.
Ejemplo:
(%i1) load (graphs)$
(%i2) h : heawood_graph()$
(%i3) [A,B]:bipartition(h);
(%o3)
[[8, 12, 6, 10, 0, 2, 4], [13, 5, 11, 7, 9, 1, 3]]
(%i4) draw_graph(h, show_vertices=A, program=circular)$

826

Manual de Maxima

chromatic_index (gr )
Devuelve el ndice crom
atico del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) chromatic_index(p);
(%o3)

[Funcion]

chromatic_number (gr )

[Funcion]

Devuelve el n
umero crom
atico del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) chromatic_number(cycle_graph(5));
(%o2)
3
(%i3) chromatic_number(cycle_graph(6));
(%o3)
2

clear_edge_weight (e, gr )

[Funcion]

Elimina el peso del arco e del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
(%i3) get_edge_weight([0,1], g);
(%o3)
1.5
(%i4) clear_edge_weight([0,1], g)$
(%i5) get_edge_weight([0,1], g);
(%o5)
1

clear_vertex_label (v, gr )
Elimina la etiqueta del vertice v del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph([[0,"Zero"],
(%i3) get_vertex_label(0, g);
(%o3)
(%i4) clear_vertex_label(0, g);
(%o4)
(%i5) get_vertex_label(0, g);
(%o5)

[Funcion]

[1, "One"]], [[0,1]])$


Zero
done
false

connected_components (gr )
Devuelve las
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)

componentes conexas del grafo gr.


load (graphs)$
g: graph_union(cycle_graph(5), path_graph(4))$
connected_components(g);
[[1, 2, 3, 4, 0], [8, 7, 6, 5]]

[Funcion]

Captulo 55: graphs

diameter (gr )

827

[Funcion]

Devuelve el di
ametro del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) diameter(dodecahedron_graph());
(%o2)
5

edge_coloring (gr )

[Funcion]

Devuelve una coloraci


on
optima de los arcos del grafo gr.
La funci
on devuelve el ndice cromatico y una lista que representa el coloreado de los
arcos de gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) [ch_index, col] : edge_coloring(p);
(%o3) [4, [[[0, 5], 3], [[5, 7], 1], [[0, 1], 1], [[1, 6], 2],
[[6, 8], 1], [[1, 2], 3], [[2, 7], 4], [[7, 9], 2], [[2, 3], 2],
[[3, 8], 3], [[5, 8], 2], [[3, 4], 1], [[4, 9], 4], [[6, 9], 3],
[[0, 4], 2]]]
(%i4) assoc([0,1], col);
(%o4)
1
(%i5) assoc([0,5], col);
(%o5)
3

degree_sequence (gr )

[Funcion]

Devuelve una lista con los grados de los vertices del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) degree_sequence(random_graph(10, 0.4));
(%o2)
[2, 2, 2, 2, 2, 2, 3, 3, 3, 3]

edge_connectivity (gr )

[Funcion]

Devuelve la conectividad de las aristas del grafo gr.


Vease tambien min_edge_cut.

edges (gr )

[Funcion]

Devuelve la lista de las aristas (arcos) del grafo (dirigido) gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) edges(complete_graph(4));
(%o2)
[[2, 3], [1, 3], [1, 2], [0, 3], [0, 2], [0, 1]]

get_edge_weight (e, gr )
get_edge_weight (e, gr, ifnot )
Devuelve el peso de la arista e del grafo gr.

[Funcion]
[Funcion]

828

Manual de Maxima

Si la arista no tiene peso, la funcion devuelve 1. Si la arista no pertenece al grafo, la


funci
on emite un mensaje de error o devuelve el argumento opcional ifnot.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

load (graphs)$
c5 : cycle_graph(5)$
get_edge_weight([1,2], c5);
1
set_edge_weight([1,2], 2.0, c5);
done
get_edge_weight([1,2], c5);
2.0

get_vertex_label (v, gr )

[Funcion]

Devuelve la etiqueta del vertice v del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
(%i3) get_vertex_label(0, g);
(%o3)
Zero

graph_charpoly (gr, x )

[Funcion]

Devuelve el polinomio caracterstico (de variable x) del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_charpoly(p, x), factor;
(%o3)

5
4
(x - 3) (x - 1) (x + 2)

graph_center (gr )

[Funcion]

Devuelve el centro del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : grid_graph(5,5)$
(%i3) graph_center(g);
(%o3)

[12]

graph_eigenvalues (gr )

[Funcion]
Devuelve los valores propios del grafo gr. La funcion devuelve los valores propios en
el mismo formato en el que lo hace la funcion eigenvalue.
Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_eigenvalues(p);
(%o3)
[[3, - 2, 1], [1, 4, 5]]

Captulo 55: graphs

829

graph_periphery (gr )

[Funcion]

Devuelve la periferia del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : grid_graph(5,5)$
(%i3) graph_periphery(g);
(%o3)

[24, 20, 4, 0]

graph_size (gr )

[Funcion]

Devuelve el n
umero de aristas del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_size(p);
(%o3)

15

graph_order (gr )

[Funcion]

Devuelve el n
umero de vertices del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) graph_order(p);
(%o3)

10

girth (gr )

[Funcion]

Devuelve la longitud del ciclo mas corto del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : heawood_graph()$
(%i3) girth(g);
(%o3)

hamilton_cycle (gr )

[Funcion]
Devuelve el ciclo de Hamilton del grafo gr o una lista vaca si gr no es hamiltoniano.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)

load (graphs)$
c : cube_graph(3)$
hc : hamilton_cycle(c);
[7, 3, 2, 6, 4, 0, 1, 5, 7]
draw_graph(c, show_edges=vertices_to_cycle(hc))$

hamilton_path (gr )

[Funcion]
Devuelve el camino de Hamilton del grafo gr o una lista vaca si gr no los tiene.
Ejemplo:

830

Manual de Maxima

(%i1)
(%i2)
(%i3)
(%o3)
(%i4)

load (graphs)$
p : petersen_graph()$
hp : hamilton_path(p);
[0, 5, 7, 2, 1, 6, 8, 3, 4, 9]
draw_graph(p, show_edges=vertices_to_path(hp))$

isomorphism (gr1, gr2 )

[Funcion]
Devuelve un isomorfismo entre los grafos/digrafos gr1 y gr2. Si gr1 y gr2 no son
isomorfos, devuelve una lista vaca.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)

load (graphs)$
clk5:complement_graph(line_graph(complete_graph(5)))$
isomorphism(clk5, petersen_graph());
[9 -> 0, 2 -> 1, 6 -> 2, 5 -> 3, 0 -> 4, 1 -> 5, 3 -> 6,
4 -> 7, 7 -> 8, 8 -> 9]

in_neighbors (v, gr )

[Funcion]

Devuelve la lista de los nodos hijos del vertice v del grafo orientado gr.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
p : path_digraph(3)$
in_neighbors(2, p);
[1]
out_neighbors(2, p);
[]

is_biconnected (gr )

[Funcion]

Devuelve true si gr est


a biconectado y false en caso contrario.
Ejemplo:
Example:
(%i1) load (graphs)$
(%i2) is_biconnected(cycle_graph(5));
(%o2)
true
(%i3) is_biconnected(path_graph(5));
(%o3)
false

is_bipartite (gr )
Devuelve true si gr es bipartido (2-coloreable) y false en caso contrario.
Ejemplo:
(%i1) load (graphs)$
(%i2) is_bipartite(petersen_graph());
(%o2)
false
(%i3) is_bipartite(heawood_graph());
(%o3)
true

[Funcion]

Captulo 55: graphs

is_connected (gr )

831

[Funcion]

Devuelve true si el grafo gr es conexo y false en caso contrario.


Ejemplo:
(%i1) load (graphs)$
(%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
(%o2)
false

is_digraph (gr )

[Funcion]
Devuelve true si gr es un grafo orientado (digrafo) y false en caso contrario.
Ejemplo:
(%i1) load (graphs)$
(%i2) is_digraph(path_graph(5));
(%o2)
false
(%i3) is_digraph(path_digraph(5));
(%o3)
true

is_edge_in_graph (e, gr )

[Funcion]
Devuelve true si e es una arista (arco) del grafo (digrafo) g y false en caso contrario.
Ejemplo:
(%i1) load (graphs)$
(%i2) c4 : cycle_graph(4)$
(%i3) is_edge_in_graph([2,3], c4);
(%o3)
true
(%i4) is_edge_in_graph([3,2], c4);
(%o4)
true
(%i5) is_edge_in_graph([2,4], c4);
(%o5)
false
(%i6) is_edge_in_graph([3,2], cycle_digraph(4));
(%o6)
false

is_graph (gr )

[Funcion]

Devuelve true si gr es un grafo y false en caso contrario.


Ejemplo:
(%i1) load (graphs)$
(%i2) is_graph(path_graph(5));
(%o2)
true
(%i3) is_graph(path_digraph(5));
(%o3)
false

is_graph_or_digraph (gr )

[Funcion]
Devuelve true si gr es una grafo, orientado o no, y false en caso contrario.
Ejemplo:
(%i1) load (graphs)$
(%i2) is_graph_or_digraph(path_graph(5));
(%o2)
true
(%i3) is_graph_or_digraph(path_digraph(5));
(%o3)
true

832

Manual de Maxima

is_isomorphic (gr1, gr2 )

[Funcion]
Devuelve true si los grafos/digrafos gr1 y gr2 son isomorfos y false en caso contrario.
Vease tambien isomorphism.
Ejemplo:
(%i1) load (graphs)$
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
(%i3) is_isomorphic(clk5, petersen_graph());
(%o3)
true

is_planar (gr )

[Funcion]

Devuelve true si gr es un grafo planar y false en caso contrario.


El algoritmo utilizado es el de Demoucron, que es de tiempo cuadratico.
Ejemplo:
(%i1)
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
is_planar(dodecahedron_graph());
true
is_planar(petersen_graph());
false
is_planar(petersen_graph(10,2));
true

is_sconnected (gr )

[Funcion]
Devuelve true si el grafo orientado gr es fuertemente conexo, devolviendo false en
caso contrario.
Ejemplo:
(%i1) load (graphs)$
(%i2) is_sconnected(cycle_digraph(5));
(%o2)
true
(%i3) is_sconnected(path_digraph(5));
(%o3)
false

is_vertex_in_graph (v, gr )

[Funcion]

Devuelve true si v es un vertice del grafo g y false en caso contrario.


Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
c4 : cycle_graph(4)$
is_vertex_in_graph(0, c4);
true
is_vertex_in_graph(6, c4);
false

is_tree (gr )
Devuelve true si gr es un
arbol y false en caso contrario.
Ejemplo:

[Funcion]

Captulo 55: graphs

833

(%i1) load (graphs)$


(%i2) is_tree(random_tree(4));
(%o2)
true
(%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
(%o3)
false

laplacian_matrix (gr )

[Funcion]

Devuelve el laplaciano de la matriz del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) laplacian_matrix(cycle_graph(5));
[ 2
- 1
0
[
[ - 1
2
- 1
[
(%o2)
[ 0
- 1
2
[
[ 0
0
- 1
[
[ - 1
0
0

0
0
- 1
2
- 1

- 1 ]
]
0 ]
]
0 ]
]
- 1 ]
]
2 ]

max_clique (gr )

[Funcion]

Devuelve el clique m
aximo del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : random_graph(100, 0.5)$
(%i3) max_clique(g);
(%o3)
[6, 12, 31, 36, 52, 59, 62, 63, 80]

max_degree (gr )

[Funcion]
Devuelve el grado m
aximo de los vertices del grafo gr y un vertice de grado maximo.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
g : random_graph(100, 0.02)$
max_degree(g);
[6, 79]
vertex_degree(95, g);
3

max_flow (net, s, t )

[Funcion]

Devuelve el flujo maximal de la red net con origen en s y final en t.


La funci
on devuelve el valor del flujo maximal y una lista con los pesos de los arcos
del flujo
optimo.
Ejemplo:
Example:

834

Manual de Maxima

(%i1) load (graphs)$


(%i2) net : create_graph(
[1,2,3,4,5,6],
[[[1,2], 1.0],
[[1,3], 0.3],
[[2,4], 0.2],
[[2,5], 0.3],
[[3,4], 0.1],
[[3,5], 0.1],
[[4,6], 1.0],
[[5,6], 1.0]],
directed=true)$
(%i3) [flow_value, flow] : max_flow(net, 1, 6);
(%o3) [0.7, [[[1, 2], 0.5], [[1, 3], 0.2], [[2, 4], 0.2],
[[2, 5], 0.3], [[3, 4], 0.1], [[3, 5], 0.1], [[4, 6], 0.3],
[[5, 6], 0.4]]]
(%i4) fl : 0$
(%i5) for u in out_neighbors(1, net)
do fl : fl + assoc([1, u], flow)$
(%i6) fl;
(%o6)
0.7

max_independent_set (gr )

[Funcion]

Devuelve un conjunto maximal independiente de vertices del grafo gr.


Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)

load (graphs)$
d : dodecahedron_graph()$
mi : max_independent_set(d);
[0, 3, 5, 9, 10, 11, 18, 19]
draw_graph(d, show_vertices=mi)$

max_matching (gr )

[Funcion]

Devuelve un conjunto maximal independiente de aristas del grafo gr.


Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)

load (graphs)$
d : dodecahedron_graph()$
m : max_matching(d);
[[5, 7], [8, 9], [6, 10], [14, 19], [13, 18], [12, 17],
[11, 16], [0, 15], [3, 4], [1, 2]]
(%i4) draw_graph(d, show_edges=m)$

min_degree (gr )

[Funcion]
Devuelve el grado mnimo de los vertices del grafo gr y un vertice de grado mnimo.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : random_graph(100, 0.1)$

Captulo 55: graphs

835

(%i3) min_degree(g);
(%o3)
(%i4) vertex_degree(21, g);
(%o4)

[3, 49]
9

min_edge_cut (gr )

[Funcion]
Devuelve el mnimo edge cut del grafo gr. Un edge cut es un conjunto de aristas cuya
eliminaci
on aumenta el n
umero de componentes del grafo.
Vease tambien edge_connectivity.

min_vertex_cover (gr )

[Funcion]

Devuelve el mnimo nodo covering del grafo gr.

min_vertex_cut (gr )

[Funcion]

Devuelve el mnimo vertex cut del grafo gr.


Vease tambien vertex_connectivity.

minimum_spanning_tree (gr )

[Funcion]

Devuelve el grafo de expansi


on mnimo del grafo gr.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%i4)

load (graphs)$
g : graph_product(path_graph(10), path_graph(10))$
t : minimum_spanning_tree(g)$
draw_graph(g, show_edges=edges(t))$

neighbors (v, gr )

[Funcion]

Devuelve la lista de los vecinos del vertice v del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) p : petersen_graph()$
(%i3) neighbors(3, p);
(%o3)

[4, 8, 2]

odd_girth (gr )

[Funcion]

Devuelve la longitud del ciclo impar mas corto del grafo gr.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
g : graph_product(cycle_graph(4), cycle_graph(7))$
girth(g);
4
odd_girth(g);
7

out_neighbors (v, gr )
Devuelve la lista de los nodos padres del vertice v del grafo orientado gr.
Ejemplo:

[Funcion]

836

Manual de Maxima

(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
p : path_digraph(3)$
in_neighbors(2, p);
[1]
out_neighbors(2, p);
[]

planar_embedding (gr )

[Funcion]
Devuelve la lista de caminos faciales en una proyeccion planar de gr, o false si gr no
es un grafo planar.
El grafo gr debe estar biconectado.
El algoritmo utilizado es el de Demoucron, que es de tiempo cuadratico.
Ejemplo:
(%i1) load (graphs)$
(%i2) planar_embedding(grid_graph(3,3));
(%o2) [[3, 6, 7, 8, 5, 2, 1, 0], [4, 3, 0, 1], [3, 4, 7, 6],
[8, 7, 4, 5], [1, 2, 5, 4]]

print_graph (gr )

[Funcion]

Muestra alguna informaci


on sobre el grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) c5 : cycle_graph(5)$
(%i3) print_graph(c5)$
Graph on 5 vertices with 5 edges.
Adjacencies:
4 : 0 3
3 : 4 2
2 : 3 1
1 : 2 0
0 : 4 1
(%i4) dc5 : cycle_digraph(5)$
(%i5) print_graph(dc5)$
Digraph on 5 vertices with 5 arcs.
Adjacencies:
4 : 0
3 : 4
2 : 3
1 : 2
0 : 1
(%i6) out_neighbors(0, dc5);
(%o6)

radius (gr )
Devuelve el radio del grafo gr.
Ejemplo:

[1]
[Funcion]

Captulo 55: graphs

(%i1) load (graphs)$


(%i2) radius(dodecahedron_graph());
(%o2)

837

set_edge_weight (e, w, gr )

[Funcion]

Asigna el peso w a la arista e del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph([1, 2], [[[1,2], 1.2]])$
(%i3) get_edge_weight([1,2], g);
(%o3)
1.2
(%i4) set_edge_weight([1,2], 2.1, g);
(%o4)
done
(%i5) get_edge_weight([1,2], g);
(%o5)
2.1

set_vertex_label (v, l, gr )

[Funcion]
Asigna la etiqueta l al vertice v del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
(%i3) get_vertex_label(1, g);
(%o3)
One
(%i4) set_vertex_label(1, "oNE", g);
(%o4)
done
(%i5) get_vertex_label(1, g);
(%o5)
oNE

shortest_path (u, v, gr )

[Funcion]

Devuelve el camino m
as corto desde u hasta v del grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) d : dodecahedron_graph()$
(%i3) path : shortest_path(0, 7, d);
(%o3)
[0, 1, 19, 13, 7]
(%i4) draw_graph(d, show_edges=vertices_to_path(path))$

shortest_weighted_path (u, v, gr )

[Funcion]
Devuelve la longitud del camino mas corto ponderado y el propio camino mas corto
ponderado desde u hasta v en el grafo gr.
La longitud del camino ponderado es la suma de los pesos de las aristas del camino.
Si una arista no tiene peso asignado, su valor por defecto es la unidad.
Ejemplo:
(%i1) load (graphs)$
(%i2) g: petersen_graph(20, 2)$
(%i3) for e in edges(g) do set_edge_weight(e, random(1.0), g)$

838

Manual de Maxima

(%i4) shortest_weighted_path(0, 10, g);


(%o4) [2.575143920268482, [0, 20, 38, 36, 34, 32, 30, 10]]

strong_components (gr )
Devuelve las
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

[Funcion]

componentes fuertes del grafo orientado gr.


load (graphs)$
t : random_tournament(4)$
strong_components(t);
[[1], [0], [2], [3]]
vertex_out_degree(3, t);
3

topological_sort (dag )

[Funcion]
Devuelve el orden topol
ogico de los vertices del grafo orientado dag o una lista vaca
si dag no es un grafo orientado acclico.
Ejemplo:
(%i1) load (graphs)$
(%i2) g:create_graph(
[1,2,3,4,5],
[
[1,2], [2,5], [5,3],
[5,4], [3,4], [1,3]
],
directed=true)$
(%i3) topological_sort(g);
(%o3)
[1, 2, 5, 3, 4]

vertex_connectivity (g )

[Funcion]

Devuelve la conectividad de los vertices del grafo g.


Vease tambien min_vertex_cut.

vertex_degree (v, gr )

[Funcion]

Devuelve el grado del vertice v del grafo gr.

vertex_distance (u, v, gr )

[Funcion]
Devuelve la longitud del camino mas corto entre u y v del grafo o digrafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) d : dodecahedron_graph()$
(%i3) vertex_distance(0, 7, d);
(%o3)
4
(%i4) shortest_path(0, 7, d);
(%o4)
[0, 1, 19, 13, 7]

vertex_eccentricity (v, gr )
Devuelve la excentricidad del vertice v del grafo gr.
Ejemplo:

[Funcion]

Captulo 55: graphs

839

(%i1) load (graphs)$


(%i2) g:cycle_graph(7)$
(%i3) vertex_eccentricity(0, g);
(%o3)
3

vertex_in_degree (v, gr )

[Funcion]

Devuelve el grado de entrada del vertice v del grafo orientado gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) p5 : path_digraph(5)$
(%i3) print_graph(p5)$
Digraph on 5 vertices with 4 arcs.
Adjacencies:
4 :
3 : 4
2 : 3
1 : 2
0 : 1
(%i4) vertex_in_degree(4, p5);
(%o4)
(%i5) in_neighbors(4, p5);
(%o5)

1
[3]

vertex_out_degree (v, gr )

[Funcion]

Devuelve el grado de salida del vertice v del grafo orientado gr.


Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

load (graphs)$
t : random_tournament(10)$
vertex_out_degree(0, t);
2
out_neighbors(0, t);
[7, 1]

vertices (gr )

[Funcion]

Devuelve la lista de vertices del grafo gr.


Example
(%i1) load (graphs)$
(%i2) vertices(complete_graph(4));
(%o2)
[3, 2, 1, 0]

vertex_coloring (gr )

[Funcion]

Devuelve un coloreado
optimo de los vertices del grafo gr.
La funci
on devuelve el n
umero cromatico y una lista representando el coloreado de
los vertices de gr.
Ejemplo:

840

Manual de Maxima

(%i1)
(%i2)
(%i3)
(%o3)

load (graphs)$
p:petersen_graph()$
vertex_coloring(p);
[3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3],
[6, 1], [7, 1], [8, 2], [9, 2]]]

wiener_index (gr )

[Funcion]

Devuelve el ndice de Wiener del grafo gr.


Ejemplo:
(%i1) wiener_index(dodecahedron_graph());
(%o1)
500

55.2.3 Modificaci
on de grafos
add_edge (e, gr )

[Funcion]

A~
nade la arista e al grafo gr.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)

load (graphs)$
p : path_graph(4)$
neighbors(0, p);
[1]
add_edge([0,3], p);
done
neighbors(0, p);
[3, 1]

add_edges (e_list, gr )

[Funcion]

A~
nade las aristas de la lista e list al grafo gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : empty_graph(3)$
(%i3) add_edges([[0,1],[1,2]], g)$
(%i4) print_graph(g)$
Graph on 3 vertices with 2 edges.
Adjacencies:
2 : 1
1 : 2 0
0 : 1

add_vertex (v, gr )
A~
nade el vertice v al grafo gr.
Ejemplo:
(%i1)
(%i2)
(%i3)
(%i4)

load (graphs)$
g : path_graph(2)$
add_vertex(2, g)$
print_graph(g)$

[Funcion]

Captulo 55: graphs

841

Graph on 3 vertices with 1 edges.


Adjacencies:
2 :
1 : 0
0 : 1

add_vertices (v_list, gr )

[Funcion]

A~
nade los vertices de la lista v list al grafo gr.

connect_vertices (v_list, u_list, gr )

[Funcion]
Conecta todos los vertices de la lista v list con los vertices de la lista u list del grafo
gr.
v list y u list pueden ser vertices aislados o una lista de vertices.
Ejemplo:
(%i1) load (graphs)$
(%i2) g : empty_graph(4)$
(%i3) connect_vertices(0, [1,2,3], g)$
(%i4) print_graph(g)$
Graph on 4 vertices with 3 edges.
Adjacencies:
3 : 0
2 : 0
1 : 0
0 : 3 2 1

contract_edge (e, gr )
Contrae la arista e del gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) g: create_graph(
8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
(%i3) print_graph(g)$
Graph on 8 vertices with 7 edges.
Adjacencies:
7 : 4
6 : 4
5 : 4
4 : 7 6 5 3
3 : 4 2 1 0
2 : 3
1 : 3
0 : 3
(%i4) contract_edge([3,4], g)$
(%i5) print_graph(g)$
Graph on 7 vertices with 6 edges.
Adjacencies:
7 : 3

[Funcion]

842

Manual de Maxima

6
5
3
2
1
0

:
:
:
:
:
:

3
3
5
3
3
3

remove_edge (e, gr )

[Funcion]

Elimina la arista e del grafo gr.


Ejemplo:
(%i1) load (graphs)$
(%i2) c3 : cycle_graph(3)$
(%i3) remove_edge([0,1], c3)$
(%i4) print_graph(c3)$
Graph on 3 vertices with 2 edges.
Adjacencies:
2 : 0 1
1 : 2
0 : 2

remove_vertex (v, gr )

[Funcion]

Elimina el vertice v del grafo gr.

vertex_coloring (gr )

[Funcion]

Devuelve un coloreado
optimo de los vertice del grafo gr.
La funci
on devuelve el n
umero cromatico y una lista representando el coloreado de
los vertices de gr.
Ejemplo:
(%i1) load (graphs)$
(%i2) p:petersen_graph()$
(%i3) vertex_coloring(p);
(%o3) [3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3],
[6, 1], [7, 1], [8, 2], [9, 2]]]

55.2.4 Lectura y escritura de ficheros


dimacs_export (gr, fl )
dimacs_export (gr, fl, comment1, ..., commentn )

[Funcion]
[Funcion]
Exporta el grafo al fichero fl en formato DIMACS. Los comentarios adicionales se
an~
adir
an al comienzo del fichero.

dimacs_import (fl )

[Funcion]

Lee el grafo almacenado en el fichero fl en formato DIMACS.

graph6_decode (str )

[Funcion]

Devuelve el grafo codificado en formato graph6 en la cadena str.

graph6_encode (gr )
Devuelve una cadena codificando el grafo gr en formato graph6.

[Funcion]

Captulo 55: graphs

graph6_export (gr_list, fl )

843

[Funcion]

Exporta los grafos de la lista gr list al fichero fl en formato graph6.

graph6_import (fl )

[Funcion]

Lee la lista de grafos almacenados en el fichero fl en formato graph6.

sparse6_decode (str )

[Funcion]

Devuelve el grafo codificado en formato sparse6 en la cadena str.

sparse6_encode (gr )

[Funcion]

Devuelve una cadena codificando el grafo gr en formato sparse6.

sparse6_export (gr_list, fl )

[Funcion]

Exporta los grafos de la lista gr list al fichero fl en formato sparse6.

sparse6_import (fl )

[Funcion]

Lee la lista de grafos almacenados en el fichero fl en formato sparse6.

55.2.5 Visualizaci
on
draw_graph (graph )
draw_graph (graph, option1, ..., optionk )

[Funcion]
[Funcion]

Dibuja el grafo utilizando el paquete draw.


El algoritmo utilizado para posicionar los vertices se especifica con el argumento opcional program, cuyo valor por defecto es program=spring_embedding. draw graph
tambien puede utilizar los programas de graphviz para posicionar los vertices, para
lo cual deber
a instalarse separadamente el programa graphviz.
Ejemplo 1:
(%i1) load (graphs)$
(%i2) g:grid_graph(10,10)$
(%i3) m:max_matching(g)$
(%i4) draw_graph(g,
spring_embedding_depth=100,
show_edges=m, edge_type=dots,
vertex_size=0)$
Ejemplo 2:
(%i1) load (graphs)$
(%i2) g:create_graph(16,
[
[0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
[5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
[8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
[10,14],[15,14],[13,14]
])$
(%i3) t:minimum_spanning_tree(g)$
(%i4) draw_graph(
g,
show_edges=edges(t),

844

Manual de Maxima

show_edge_width=4,
show_edge_color=green,
vertex_type=filled_square,
vertex_size=2
)$
Ejemplo 3:
(%i1) load (graphs)$
(%i2) mi : max_independent_set(g)$
(%i3) draw_graph(
g,
show_vertices=mi,
show_vertex_type=filled_up_triangle,
show_vertex_size=2,
edge_color=cyan,
edge_width=3,
=true,
text_color=brown
)$
Ejemplo 4:
(%i1) load (graphs)$
(%i2) net : create_graph(
[0,1,2,3,4,5],
[
[[0,1], 3], [[0,2], 2],
[[1,3], 1], [[1,4], 3],
[[2,3], 2], [[2,4], 2],
[[4,5], 2], [[3,5], 2]
],
directed=true
)$
(%i3) draw_graph(
net,
show_weight=true,
vertex_size=0,
show_vertices=[0,5],
show_vertex_type=filled_square,
head_length=0.2,
head_angle=10,
edge_color="dark-green",
text_color=blue
)$
Ejemplo 5:
(%i1) load(graphs)$
(%i2) g: petersen_graph(20, 2);
(%o2)
GRAPH

Captulo 55: graphs

(%i3)
(%o3)
Ejemplo 6:
(%i1)
(%i2)
(%o2)
(%i3)

845

draw_graph(g, redraw=true, program=planar_embedding);


done
load(graphs)$
t: tutte_graph();

GRAPH
draw_graph(t, redraw=true,
fixed_vertices=[1,2,3,4,5,6,7,8,9]);
(%o3)
done

draw_graph_program

[Variable opcional]

Valor por defecto: spring embedding


Programa a utilizar por defecto para posicionar los vertices en la funcion draw_graph.
[Opcion de draw graph]
Valor por defecto: false
umeros identificadores de los vertices.
Si show id vale true entonces se muestran los n

show_id

[Opcion de draw graph]


Valor por defecto: false
Si show label vale true entonces se muestran las etiquetas de los vertices.

show_label

[Opcion de draw graph]


Valor por defecto: center
Indica c
omo se deben alinear las etiquetas o n
umeros identificadores de los vertices.
Puede ser: left, center or right.

label_alignment

[Opcion de draw graph]


Valor por defecto: false
si show weight vale true entonces se mostraran los pesos de las aristas.

show_weight

[Opcion de draw graph]


Valor por defecto: circle
Establece c
omo se mostrar
an los vertices. Vease la opcion point type del paquete
draw.

vertex_type

vertex_size

[Opcion de draw graph]

Taman~
o de los vertices.

vertex_color

[Opcion de draw graph]

Color a utilizar en los vertices.


[Opcion de draw graph]
Valor por defecto: []
Dibuja los vertices seleccionados en la lista con colores diferentes.

show_vertices

[Opcion de draw graph]


Establece c
omo se mostrar
an los vertices de show vertices. Vease la opcion point type
del paquete draw.

show_vertex_type

846

Manual de Maxima

show_vertex_size

[Opcion de draw graph]

Taman~
os de los vertices de show vertices.

show_vertex_color

[Opcion de draw graph]

Color a utilizar en los vertices de la lista show vertices.

vertex_partition

[Opcion de draw graph]

Valor por defecto: []


Una partici
on [[v1,v2,...],...,[vk,...,vn]] de los vertices del grafo.
vertices de cada lista se dibujaran de diferente color.

Los

[Opcion de draw graph]


Colores de los vertices. Los colores col deben especificarse en el mismo formato que
el devuelto por vertex coloring.

vertex_coloring

edge_color

[Opcion de draw graph]

Color a utilizar en las aristas.

edge_width

[Opcion de draw graph]

Ancho de las aristas.


[Opcion de draw graph]
Establece c
omo se dibujar
an las aristas. Vease la opcion line type del paquete draw.

edge_type

show_edges

[Opcion de draw graph]

Dibuja las aristas de la lista e list con colores diferentes.

show_edge_color

[Opcion de draw graph]

Color a utilizar en las aristas de la lista show edges.

show_edge_width

[Opcion de draw graph]

Anchos de las aristas de show edges.


[Opcion de draw graph]
Establece c
omo se dibujar
an las aristas de show edges. Vease la opcion line type del
paquete draw.

show_edge_type

[Opcion de draw graph]


Una partici
on [[e1,e2,...],...,[ek,...,em]] de las aristas del grafo. Las aristas
de cada lista se dibujar
an de diferente color.

edge_partition

[Opcion de draw graph]


Colores de las aristas. Los colores col deben especificarse en el mismo formato que el
devuelto por edge coloring.

edge_coloring

redraw

[Opcion de draw graph]

Valor por defecto: false


Si redraw vale true, las posiciones de los vertices se recalculan incluso si las posiciones
est
an almacenadas de un dibujo previo del grafo.

Captulo 55: graphs

head_angle

847

[Opcion de draw graph]

Valor por defecto: 15

Angulo
de las flechas de los arcos en los grafos orientados.

head_length

[Opcion de draw graph]

Valor por defecto: 0.1


Longitud de las flechas de los arcos en los grafos orientados.

spring_embedding_depth

[Opcion de draw graph]

Valor por defecto: 50


N
umero de iteraciones del algoritmo de dibujo de grafos.
[Opcion de draw graph]
Terminal utilizado para ver el grafo. Vease la opcion terminal del paquete draw.

terminal

[Opcion de draw graph]


Nombre del fichero cuando el terminal especificado no es la pantalla.

file_name

[Opcion de draw graph]


establece el programa para posicionado de vertices del grafo. Puede ser cualquiera
de los programas graphviz (dot, neato, twopi, circ, fdp), circular o spring embedding
o planar embedding; planar embedding slo esta disponible para grafos planares 2conectados. Si program=spring_embedding, se puede especificar un conjunto de
vertices de posici
on fija con la opcion fixed vertices.

program

[Opcion de draw graph]


Especifica una lista de vertices con posiciones fijas en un polgono regular. Se puede
utilizar cuando program=spring_embedding.

fixed_vertices

vertices_to_path (v_list )

[Funcion]
Convierte una lista v list de vertices en la lista de aristas del camino definido por la
propia v list.

vertices_to_cycle (v_list )

[Funcion]
Convierte una lista v list de vertices en la lista de aristas del ciclo definido por la
propia v list.

Captulo 56: grobner

849

56 grobner
56.1 Introducci
on a grobner
grobner es un paquete para operar con bases de Groebner en Maxima.
Para hacer uso de las funciones de este paquete es necesario cargar previamente el archivo
grobner.lisp:
load(grobner);
Es posible ejecutar una demostracion haciendo
demo("grobner.demo");
o
batch("grobner.demo")
Algunos de los c
alculos de la demostracion pueden llevar tiempo, razon por la cual sus
resultados se han guardado en el archivo grobner-demo.output, que se encuentra en el
mismo directorio que el archivo de demostracion.

56.1.1 Notas sobre el paquete grobner


El autor del paquete es
Marek Rychlik
http://alamos.math.arizona.edu
habiendo sido distribuido el 24-05-2002 bajo los terminos de la General Public License
(GPL) (ver archivo grobner.lisp). Esta documentacion ha sido extrada de los archivos
README, grobner.lisp, grobner.demo y grobner-demo.output
por G
unter Nowak. Las sugerencias para mejorar la documentacion se pueden hacer en la
lista de correos de maxima, [email protected].
El codigo est
a algo anticuado. Las implementaciones modernas utilizan el algoritmo F4,
mas rapido, descrito en
A new efficient algorithm for computing Gr
obner bases (F4)
Jean-Charles Faug`ere
LIP6/CNRS Universite Paris VI
January 20, 1999

56.1.2 Implementaciones de
ordenes admisibles de monomios
lex
lexicogr
afico puro; orden por defecto para la comparacion de monomios.
grlex
grado total, con empates resueltos por el orden lexicografico.
grevlex
grado total, con empates resueltos por el orden lexicografico inverso.
invlex
orden lexicogr
afico inverso.

850

Manual de Maxima

56.2 Funciones y variables para grobner


56.2.1 Variables opcionales
[Variable opcional]
Valor por defecto: lex
Controla que orden de monomios utiliza en los calculos con polinomios y bases de
Groebner. Si no se le asigna valor alguno, se utilizara lex.

poly_monomial_order

poly_coefficient_ring

[Variable opcional]

Valor por defecto: expression_ring


Indica el anillo de coeficientes de los polinomios que se va a utilizar en los calculos.
Si no se le asigna ning
un valor, se utilizara el anillo de expresiones propio de maxima.
A esta variable se le puede asignar el valor ring_of_integers.
[Variable opcional]
Valor por defecto: false
Nombre del orden por defecto para las variables eliminadas en las funciones basadas
en eliminaciones. Si no se le asigna ning
un valor, se utilizara lex.

poly_primary_elimination_order

[Variable opcional]
Valor por defecto: false
Nombre del orden por defecto para las variables almacenadas en funciones basadas
en eliminaciones. Si no se le asigna ning
un valor, se utilizara lex.

poly_secondary_elimination_order

[Variable opcional]
Valor por defecto: false
Nombre del orden de eliminacion por defecto utilizado en los calculos de eliminacion.
Si se le asigna un valor, ignorara los guardados en poly_primary_elimination_
order y poly_secondary_elimination_order. El usuario se asegurara que este es
un orden v
alido de eliminaci
on.

poly_elimination_order

[Variable opcional]
Valor por defecto: false
Si vale true, todas las funciones de este paquete devolveran los polinomios como una
lista de terminos en el orden activo de monomios, en lugar de una expresion ordinaria
de maxima.

poly_return_term_list

poly_grobner_debug

[Variable opcional]

Valor por defecto: false


Si vale true, genera una salida de seguimiento y depuracion.

poly_grobner_algorithm
Valor por defecto: buchberger
Valores posibles:
buchberger
parallel_buchberger

[Variable opcional]

Captulo 56: grobner

851

gebauer_moeller
Es el nombre del algoritmo utilizado para encontrar las bases de Groebner.

poly_top_reduction_only

[Variable opcional]

Valor por defecto: false


Si no vale false, siempre que sea posible el algoritmo de division se detendra tras la
primera reducci
on.

56.2.2 Operadores simples


poly_add, poly_subtract, poly_multiply y poly_expt son los operadores aritmeticos
para polinomios. Se ejecutan utilizando la representacion interna, pero los resultados se
devuelven en forma de expresi
on ordinaria de maxima.

poly_add (poly1, poly2, varlist )

[Funcion]

Suma los polinomios poly1 y poly2.


(%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
2
(%o1)
x y + x

poly_subtract (poly1, poly2, varlist )

[Funcion]

Resta el polinomio poly2 de poly1.


(%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
2
(%o1)
2 z + x y - x

poly_multiply (poly1, poly2, varlist )

[Funcion]

Multiplica poly1 por poly2.


(%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
(%o1)
0

poly_s_polynomial (poly1, poly2, varlist )

[Funcion]
Devuelve el polinomio syzygy (S-polinomio) de dos polinomios poly1 y poly2.

poly_primitive_part (poly1, varlist )

[Funcion]

Devuelve el polinomio poly dividido por el MCD de sus coeficientes.


(%i1) poly_primitive_part(35*y+21*x,[x,y]);
(%o1)
5 y + 3 x

poly_normalize (poly, varlist )

[Funcion]
Devuelve el polinomio poly dividido por el coeficiente principal. Da por supuesto
que la divisi
on es posible, lo cual puede no ser siempre cierto en anillos que no son
campos.

852

Manual de Maxima

56.2.3 Otras funciones


poly_expand (poly, varlist )

[Funcion]
Esta funci
on expande los polinomios. Equivale a expand(poly ) si poly es un polinomio. Si la representaci
on no es compatible con un polinomio de variables varlist,
devuelve un error.
(%i1) poly_expand((x-y)*(y+x),[x,y]);
2
2
(%o1)
x - y
(%i2) poly_expand((y+x)^2,[x,y]);
2
2
(%o2)
y + 2 x y + x
(%i3) poly_expand((y+x)^5,[x,y]);
5
4
2 3
3 2
4
5
(%o3)
y + 5 x y + 10 x y + 10 x y + 5 x y + x
(%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
2
y
x
(%o4)
- x %e + ------- - 1
sqrt(y)
(%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
2
(%o5)
- sin (x) + sin(x) - 1

poly_expt (poly, number, varlist )

[Funcion]
Eleva el polinomio poly a la potencia number, siendo este un entero positivo. Si
number no es un n
umero entero positivo, devolvera un error.
(%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
(%o1)
0

poly_content (poly. varlist )

[Funcion]

poly_content calcula el MCD de los coeficientes.


(%i1) poly_content(35*y+21*x,[x,y]);
(%o1)

poly_pseudo_divide (poly, polylist, varlist )

[Funcion]
Realiza la seudo-divisi
on del polinomio poly por la lista de n polinomios de polylist.
Devuelve varios resultados. El primer resultado es una lista de cocientes a. El segundo resultado es el resto r. El tercer resultado es un coeficiente escalar c, tal que
c poly puede dividirse por polylist dentro del anillo de coeficientes, el cual no es
necesariamente un campo. Por u
ltimo, el cuarto resultado es un entero que guarda el
recuento de reducciones realizadas. El objeto resultante satisface la ecuacion:

Captulo 56: grobner

853

c poly =

n
X

(ai polylisti ) + r

i=1

poly_exact_divide (poly1, poly2, varlist )

[Funcion]
Divide el polinomio poly1 por otro polinomio poly2. Da por supuesto que es posible
la divisi
on de resto nulo. Devuelve el cociente.

poly_normal_form (poly, polylist, varlist )

[Funcion]
poly_normal_form encuentra la forma normal de un polinomio poly respecto de un
conjunto de polinomios polylist.

poly_buchberger_criterion (polylist, varlist )

[Funcion]
Devuelve true si polylist es una base de Groebner respecto del orden de terminos
activo, utilizando el criterio de Buchberger: para cualesquiera polinomios h1 y h2 de
polylist el S-polinomio S(h1, h2) se reduce a 0 modulo polylist.

poly_buchberger (polylist_fl varlist )

[Funcion]
poly_buchberger ejecuta el algoritmo de Buchberger sobre una lista de polinomios
y devuelve la base de Groebner resultante.

56.2.4 Postprocesamiento est


andar de bases de Groebner
El k-esimo ideal de eliminaci
on Ik de un ideal I sobre K[x1 , ..., x1 ] es I K[xk+1 , ..., xn ].
El ideal I : J es el ideal {h|w J : wh I}.
El ideal I : p es el ideal {h|n N : pn h I}.
El ideal I : J es el ideal {h|n N, p J : pn h I}.

El ideal radical I es el ideal {h|n N : hn I}.

poly_reduction (polylist, varlist )

[Funcion]
poly_reduction reduce una lista de polinomios polylist de manera que cada polinomio se reduce completamente respecto de los otros polinomios.

poly_minimization (polylist, varlist )

[Funcion]
Devuelve una sublista de la lista de polinomios polylist con el mismo ideal de
monomios que polylist, pero mnimo, esto es, ning
un monomio principal de los
polinomios de la sublista divide a los monomios principales de los demas polinomios.

poly_normalize_list (polylist, varlist )

[Funcion]
poly_normalize_list aplica poly_normalize a cada polinomio de la lista. Esto
significa que divide cada polinomio de polylist por su coeficiente principal.

poly_grobner (polylist, varlist )

[Funcion]
Devuelve la base de Groebner del ideal asociado a los polinomios de polylist. El
resultado depende de las variables globales.

poly_reduced_grobner (polylist, varlist )

[Funcion]
Devuelve la base de Groebner reducida del ideal asociado a los polinomios de polylist.
El resultado depende de las variables globales.

854

Manual de Maxima

poly_depends_p (poly, var, varlist )

[Funcion]

poly_depends comprueba si el polinomio depende de la variable var.

poly_elimination_ideal (polylist, n, varlist )

[Funcion]
poly_elimination_ideal devuelve la base de Groebner del n-esimo ideal de eliminaci
on de un ideal especificado como una lista de polinomios generadores (no necesariamente una base de Groebner).

poly_colon_ideal (polylist1, polylist2, varlist )

[Funcion]

Devuelve la base de Groebner reducida del ideal


I(polylist1) : I(polylist2)
siendo polylist1 y polylist2 dos listas de polinomios.

poly_ideal_intersection (polylist1, polylist2, varlist )

[Funcion]

poly_ideal_intersection devuelve la interseccion de dos ideales.

poly_lcm (poly1, poly2, varlist )

[Funcion]

Devuelve el MCM de poly1 y poly2.

poly_gcd (poly1, poly2, varlist )

[Funcion]

Devuelve el MCD de poly1 y poly2.


Veanse tambien ezgcd, gcd, gcdex y gcdivide.
Ejemplo:
(%i1) p1:6*x^3+19*x^2+19*x+6;
3
2
(%o1)
6 x + 19 x + 19 x + 6
(%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
5
4
3
2
(%o2)
6 x + 13 x + 12 x + 13 x + 6 x
(%i3) poly_gcd(p1, p2, [x]);
2
(%o3)
6 x + 13 x + 6

poly_grobner_equal (polylist1, polylist2, varlist )

[Funcion]
poly_grobner_equal comprueba si dos bases de Groebner generan el mismo ideal.
Devuelve true si dos listas de polinomios polylist1 y polylist2, supuestas bases de
Groebner, generan el mismo ideal, o false en caso contrario. Eso equivale a comprobar si cada polinomio de la primera base se reduce a 0 modulo la segunda base
y viceversa. N
otese que en el ejemplo que sigue la primera lista no es una base de
Groebner, por lo que el resultado es false.
(%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
(%o1)
false

poly_grobner_subsetp (polylist1, polylist2, varlist )

[Funcion]
poly_grobner_subsetp comprueba si el ideal generado por polylist1 esta contenido
en el ideal generado por polylist2. Para que esta comprobacion tenga exito, polylist2
debe ser una base de Groebner.

Captulo 56: grobner

855

poly_grobner_member (poly, polylist, varlist )

[Funcion]
Devuelve true si el polinomio poly pertenece al ideal generado por la lista de polinomios polylist, la cual se supone una base de Groebner. Devolvera false en caso
contrario.

poly_ideal_saturation1 (polylist, poly, varlist )

[Funcion]

Devuelve la base de Groebner reducida de la saturacion del ideal


I(polylist) : poly
Desde un punto de vista geometrico, sobre un campo algebraicamente cerrado, este
es el conjunto de polinomios del ideal generado por polylist que no se anulan sobre la
variedad de poly.

poly_ideal_saturation (polylist1, polylist2, varlist )

[Funcion]

Devuelve la base de Groebner reducida de la saturacion del ideal


I(polylist1) : I(polylist2)
Desde un punto de vista geometrico, sobre un campo algebraicamente cerrado, este
es el conjunto de polinomios del ideal generado por polylist1 que no se anulan sobre
la variedad de polylist2.

poly_ideal_polysaturation1 (polylist1, polylist2, varlist )

[Funcion]
polylist2 es una lista de n poliomios [poly1,...,polyn]. Devuelve la base de Groebner reducida del ideal
I(polylist) : poly1 : ... : polyn

obtenida a partir de una secuencia de saturaciones sucesivas de los polinomios de la


lista polylist2 del ideal generado por la lista de polinomios polylist1.

poly_ideal_polysaturation (polylist, polylistlist, varlist )

[Funcion]
polylistlist es una lista de n listas de polinomios [polylist1,...,polylistn]. Devuelve la base de Groebner reducida de la saturacion del ideal
I(polylist) : I(polylist1 ) : ... : I(polylistn )

poly_saturation_extension (poly, polylist, varlist1, varlist2 )

[Funcion]

poly_saturation_extension ejecuta el truco de Rabinowitz.

poly_polysaturation_extension (poly, polylist, varlist1,


varlist2 )

[Funcion]

Captulo 57: impdiff

857

57 impdiff
57.1 Funciones y variables para impdiff
implicit_derivative (f,indvarlist,orderlist,depvar )

[Funcion]
Calcula las derivadas implcitas de funciones multivariantes. f es una funcion array, los
ndices son los grados de las derivadas en el orden establecido en indvarlist, indvarlist
es la lista de variables independientes, orderlist es el orden deseado y depvar es la
variable dependiente.
Antes de hacer uso de esta funcion ejec
utese load("impdiff").

Captulo 58: interpol

859

58 interpol
58.1 Introducci
on a interpol
El paquete interpol desarrolla los metodos de interpolacion polinomica de Lagrange, lineal
y de splines c
ubicos.
Para comentarios, fallos o sugerencias, contactar con mario ARROBA edu PUNTO
xunta PUNTO es.

58.2 Funciones y variables para interpol


lagrange (points )
lagrange (points, option )

[Funcion]
[Funcion]
Calcula el polinomio de interpolacion por el metodo de Lagrange. El argumento
points debe ser:
una matriz de dos columnas, p:matrix([2,4],[5,6],[9,3]),
una lista de pares de n
umeros, p: [[2,4],[5,6],[9,3]],
una lista de n
umeros, p: [4,6,3], en cuyo caso las abscisas se asignaran autom
aticamente a 1, 2, 3, etc.

En los dos primeros casos los pares se ordenan con respecto a la primera coordenada
antes de proceder a los c
alculos.
Mediante el argumento option es posible seleccionar el nombre de la variable independiente, que por defecto es x; para definir otra, escrbase algo como varname=z.
Tengase en cuenta que cuando se trabaja con polinomios de grado alto, los calculos
con n
umeros decimales en coma flotante pueden ser muy inestables.
Veanse tambien linearinterpol, cspline y ratinterpol.
Ejemplos:
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) lagrange(p);
(x - 7) (x - 6) (x - 3) (x - 1)
(%o3) ------------------------------35
(x - 8) (x - 6) (x - 3) (x - 1)
- ------------------------------12
7 (x - 8) (x - 7) (x - 3) (x - 1)
+ --------------------------------30
(x - 8) (x - 7) (x - 6) (x - 1)
- ------------------------------60
(x - 8) (x - 7) (x - 6) (x - 3)
+ -------------------------------

860

Manual de Maxima

84
(%i4) f(x):=%;
(x - 7) (x - 6) (x - 3) (x - 1)
(%o4) f(x) := ------------------------------35
(x - 8) (x - 6) (x - 3) (x - 1)
- ------------------------------12
7 (x - 8) (x - 7) (x - 3) (x - 1)
+ --------------------------------30
(x - 8) (x - 7) (x - 6) (x - 1)
- ------------------------------60
(x - 8) (x - 7) (x - 6) (x - 3)
+ ------------------------------84
(%i5) /* Evaluate the polynomial at some points */
expand(map(f,[2.3,5/7,%pi]));
4
3
2
919062 73 %pi
701 %pi
8957 %pi
(%o5) [- 1.567535, ------, ------- - -------- + --------84035
420
210
420
5288 %pi
186
- -------- + ---]
105
5
(%i6) %,numer;
(%o6) [- 1.567535, 10.9366573451538, 2.89319655125692]
(%i7) load(draw)$ /* load draw package */
(%i8) /* Plot the polynomial together with points */
draw2d(
color
= red,
key
= "Lagrange polynomial",
explicit(f(x),x,0,10),
point_size = 3,
color
= blue,
key
= "Sample points",
points(p))$
(%i9) /* Change variable name */
lagrange(p, varname=w);
(w - 7) (w - 6) (w - 3) (w - 1)
(%o9) ------------------------------35
(w - 8) (w - 6) (w - 3) (w - 1)
- ------------------------------12
7 (w - 8) (w - 7) (w - 3) (w - 1)

Captulo 58: interpol

861

+ --------------------------------30
(w - 8) (w - 7) (w - 6) (w - 1)
- ------------------------------60
(w - 8) (w - 7) (w - 6) (w - 3)
+ ------------------------------84

charfun2 (x, a, b )

[Funcion]
Devuelve true si el n
umero x pertenece al intervalo [a, b), y false en caso contrario.

linearinterpol (points )
linearinterpol (points, option )

[Funcion]
[Funcion]

Calcula rectas de interpolaci


on. El argumento points debe ser:
una matriz de dos columnas, p:matrix([2,4],[5,6],[9,3]),
una lista de pares de n
umeros, p: [[2,4],[5,6],[9,3]],
una lista de n
umeros, p: [4,6,3], en cuyo caso las abscisas se asignaran autom
aticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada
antes de proceder a los c
alculos.
Mediante el argumento option es posible seleccionar el nombre de la variable independiente, que por defecto es x; para definir otra, escrbase algo como varname=z.
Veanse tambien lagrange, cspline y ratinterpol.
Ejemplos:
(%i1) load(interpol)$
(%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
(%i3) linearinterpol(p);
13
3 x
(%o3) (-- - ---) charfun2(x, minf, 3)
2
2
+ (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
5 x
+ (--- - 3) charfun2(x, 3, 6)
3
(%i4) f(x):=%;
13
3 x
(%o4) f(x) := (-- - ---) charfun2(x, minf, 3)
2
2
+ (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
5 x
+ (--- - 3) charfun2(x, 3, 6)
3
(%i5) /* Evaluate the polynomial at some points */

862

Manual de Maxima

map(f,[7.3,25/7,%pi]);
62 5 %pi
(%o5)
[2.3, --, ----- - 3]
21
3
(%i6) %,numer;
(%o6) [2.3, 2.952380952380953, 2.235987755982989]
(%i7) load(draw)$ /* load draw package */
(%i8) /* Plot the polynomial together with points */
draw2d(
color
= red,
key
= "Linear interpolator",
explicit(f(x),x,-5,20),
point_size = 3,
color
= blue,
key
= "Sample points",
points(args(p)))$
(%i9) /* Change variable name */
linearinterpol(p, varname=s);
13
3 s
(%o9) (-- - ---) charfun2(s, minf, 3)
2
2
+ (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
5 s
+ (--- - 3) charfun2(s, 3, 6)
3

cspline (points )
cspline (points, option1, option2, ...)

[Funcion]
[Funcion]
Calcula el polinomio de interpolacion por el metodo de los splines c
ubicos. El argumento points debe ser:
una matriz de dos columnas, p:matrix([2,4],[5,6],[9,3]),
una lista de pares de n
umeros, p: [[2,4],[5,6],[9,3]],
una lista de n
umeros, p: [4,6,3], en cuyo caso las abscisas se asignaran autom
aticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada
antes de proceder a los c
alculos.
Esta funci
on dispone de tres opciones para acomodarse a necesidades concretas:
d1, por defecto unknown, es la primera derivada en x1 ; si toma el valor
unknown, la segunda derivada en x1 se iguala a 0 (spline c
ubico natural); en
caso de tomar un valor numerico, la segunda derivada se calcula en base a este
n
umero.
dn, por defecto unknown, es la primera derivada en xn ; si toma el valor
unknown, la segunda derivada en xn se iguala a 0 (spline c
ubico natural); en
caso de tomar un valor numerico, la segunda derivada se calcula en base a este
n
umero.

Captulo 58: interpol

863

varname, por defecto x, es el nombre de la variable independiente.


Veanse tambien lagrange, linearinterpol y ratinterpol.
Ejemplos:
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) /* Unknown first derivatives at the extremes
is equivalent to natural cubic splines */
cspline(p);
3
2
1159 x
1159 x
6091 x
8283
(%o3) (------- - ------- - ------ + ----) charfun2(x, minf, 3)
3288
1096
3288
1096
3
2
2587 x
5174 x
494117 x
108928
+ (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
1644
137
1644
137
3
2
4715 x
15209 x
579277 x
199575
+ (------- - -------- + -------- - ------) charfun2(x, 6, 7)
1644
274
1644
274
3
2
3287 x
2223 x
48275 x
9609
+ (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
4932
274
1644
274
(%i4) f(x):=%$
(%i5) /* Some evaluations */
map(f,[2.3,5/7,%pi]), numer;
(%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
(%i6) load(draw)$ /* load draw package */
(%i7) /* Plotting interpolating function */
draw2d(
color
= red,
key
= "Cubic splines",
explicit(f(x),x,0,10),
point_size = 3,
color
= blue,
key
= "Sample points",
points(p))$
(%i8) /* New call, but giving values at the derivatives */
cspline(p,d1=0,dn=0);
3
2
1949 x
11437 x
17027 x
1247
(%o8) (------- - -------- + ------- + ----) charfun2(x, minf, 3)
2256
2256
2256
752
3
2

864

Manual de Maxima

1547 x
35581 x
68068 x
173546
+ (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
564
564
141
141
3
2
607 x
35147 x
55706 x
38420
+ (------ - -------- + ------- - -----) charfun2(x, 6, 7)
188
564
141
47
3
2
3895 x
1807 x
5146 x
2148
+ (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
5076
188
141
47
(%i8) /* Defining new interpolating function */
g(x):=%$
(%i9) /* Plotting both functions together */
draw2d(
color
= black,
key
= "Cubic splines (default)",
explicit(f(x),x,0,10),
color
= red,
key
= "Cubic splines (d1=0,dn=0)",
explicit(g(x),x,0,10),
point_size = 3,
color
= blue,
key
= "Sample points",
points(p))$

ratinterpol (points, numdeg )


ratinterpol (points, numdeg, option1 )

[Funcion]
[Funcion]
Genera el interpolador racional para los datos dados por points y con grado numdeg
en el numerador; el grado del denominador se calcula automaticamente. El argumento
points debe ser:
una matriz de dos columnas, p:matrix([2,4],[5,6],[9,3]),
una lista de pares de n
umeros, p: [[2,4],[5,6],[9,3]],
una lista de n
umeros, p: [4,6,3], en cuyo caso las abscisas se asignaran autom
aticamente a 1, 2, 3, etc.
En los dos primeros casos los pares se ordenan con respecto a la primera coordenada
antes de proceder a los c
alculos.
Esta funci
on dispone de una opcion para acomodarse a necesidades concretas:
varname, por defecto x, es el nombre de la variable independiente.
Veanse tambien lagrange, linearinterpol, cspline, minpack_lsquares y lbfgs.
Ejemplos:
(%i1) load(interpol)$
(%i2) load(draw)$
(%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$
(%i4) for k:0 thru length(p)-1 do

Captulo 58: interpol

865

draw2d(
explicit(ratinterpol(p,k),x,0,9),
point_size = 3,
points(p),
title = concat("Grado del numerador = ",k),
yrange=[0,10])$

Captulo 59: lapack

867

59 lapack
59.1 Introducci
on a lapack
lapack es una traducci
on autom
atica a Common Lisp (con el programa f2c) de la librera
LAPACK escrita en Fortran.

59.2 Funciones y variables para lapack


dgeev (A )
dgeev (A, right_p, left_p )

[Funcion]
[Funcion]
Calcula los autovalores y, opcionalmente, tambien los autovectores de la matriz A.
Todos los elementos de A deben ser enteros o n
umeros decimales en coma flotante.
Adem
as, A debe ser cuadrada (igual n
umero de filas que de columnas) y puede ser o
no simetrica.
dgeev(A ) calcula s
olo los autovalores de A. dgeev(A, right_p, left_p ) calcula los
autovalores de A y los autovectores por la derecha cuando right p = true, y los
autovectores por la izquierda cuando left p = true.
La funci
on devuelve una lista de tres elementos. El primer elemento es una lista con
los autovalores. El segundo elemento es false o la matriz de autovectores por la
derecha. El tercer elemento es false o la matriz de autovectores por la izquierda.
El autovector por la derecha v(j) (la j-esima columna de la matriz de autovectores
por la derecha) satisface
A.v(j) = lambda(j).v(j)
donde lambda(j) es su autovalor asociado.
El autovector por la izquierda u(j) (la j-esima columna de la matriz de autovectores
por la izquierda) satisface
u(j) H.A = lambda(j).u(j) H
donde u(j) H denota la transpuesta conjugada de u(j).
La funci
on de Maxima ctranspose calcula la transpuesta conjugada.
Los autovectores calculados estan normalizados para que su norma eucldea valga 1
y su componente mayor tenga su parte imaginaria igual a cero.
Ejemplo:
(%i1) load (lapack)$
(%i2) fpprintprec : 6;
(%o2)
6
(%i3) M : matrix ([9.5, 1.75], [3.25, 10.45]);
[ 9.5
1.75 ]
(%o3)
[
]
[ 3.25 10.45 ]
(%i4) dgeev (M);
(%o4)
[[7.54331, 12.4067], false, false]
(%i5) [L, v, u] : dgeev (M, true, true);
[ - .666642 - .515792 ]

868

Manual de Maxima

(%o5) [[7.54331, 12.4067], [


[

.745378

],
- .856714 ]
[ - .856714 - .745378 ]
[
]]
[ .515792
- .666642 ]

(%i6) D : apply (diag_matrix, L);


[ 7.54331
0
]
(%o6)
[
]
[
0
12.4067 ]
(%i7) M . v - v . D;
[
0.0
- 8.88178E-16 ]
(%o7)
[
]
[ - 8.88178E-16
0.0
]
(%i8) transpose (u) . M - D . transpose (u);
[ 0.0 - 4.44089E-16 ]
(%o8)
[
]
[ 0.0
0.0
]

dgeqrf (A )

[Funcion]
Calcula la descomposici
on QR de la matriz A. Todos los elementos de A deben ser
enteros o n
umeros reales. No es necesario que A tenga el mismo n
umero de filas que
de columnas.

La funci
on devuelve una lista con dos elementos; el primero es la matriz cuadrada
ortonormal Q, con el mismo n
umero de filas que A, y el segundo es la matriz triangular
superior R, de iguales dimensiones que A. El producto Q . R , siendo "." el operador
de la multiplicaci
on matricial, es igual a A, ignorando errores de redondeo.
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)

(%i5)
(%o5)
(%i6)
(%o6)

dgesv (A, b )

load (lapack) $
fpprintprec : 6 $
M : matrix ([1, -3.2, 8], [-11, 2.7, 5.9]) $
[q, r] : dgeqrf (M);
[ - .0905357 .995893 ]
[[
],
[ .995893
.0905357 ]
[ - 11.0454
2.97863
[
[
0
- 2.94241
q . r - M;
[ - 7.77156E-16
1.77636E-15
- 8.88178E-16
[
[
0.0
- 1.33227E-15
8.88178E-16
mat_norm (%, 1);
3.10862E-15

5.15148 ]
]]
8.50131 ]
]
]
]

[Funcion]
Calcula la soluci
on x de la ecuacion Ax = b, siendo A una matriz cuadrada y b otra
matriz con el mismo n
umero de filas que A y un n
umero arbitrario de columnas. Las
dimensiones de la soluci
on x son las mismas de b.

Captulo 59: lapack

869

Los elementos de A y b deben ser reducibles a n


umeros decimales si se les aplica
la funci
on float, por lo que tales elementos pueden en principio ser de cualquier
tipo numerico, constantes numericas simbolicas o cualesquiera expresiones reducibles
a un n
umero decimal. Los elementos de x son siempre n
umeros decimales. Todas las
operaciones aritmeticas se realizan en coma flotante.
dgesv calcula la soluci
on mediante la descomposicion LU de A.
Ejemplos:
dgesv calcula la soluci
on x de la ecuacion Ax = b.
(%i1) A : matrix ([1, -2.5], [0.375, 5]);
[
1
- 2.5 ]
(%o1)
[
]
[ 0.375
5
]
(%i2) b : matrix ([1.75], [-0.625]);
[ 1.75
]
(%o2)
[
]
[ - 0.625 ]
(%i3) x : dgesv (A, b);
[ 1.210526315789474 ]
(%o3)
[
]
[ - 0.215789473684211 ]
(%i4) dlange (inf_norm, b - A.x);
(%o4)
0.0
b una matriz con el mismo n
umero de filas que A y un n
umero arbitrario de columnas.
Las dimensiones de x son las mismas de b.
(%o0)
done
(%i1) A : matrix ([1, -0.15], [1.82, 2]);
[ 1
- 0.15 ]
(%o1)
[
]
[ 1.82
2
]
(%i2) b : matrix ([3.7, 1, 8], [-2.3, 5, -3.9]);
[ 3.7
1
8
]
(%o2)
[
]
[ - 2.3 5 - 3.9 ]
(%i3) x : dgesv (A, b);
[ 3.103827540695117
1.20985481742191
6.781786185657722 ]
(%o3)
[
]
[ - 3.974483062032557 1.399032116146062 - 8.121425428948527 ]
(%i4) dlange (inf_norm, b - A . x);
(%o4)
1.1102230246251565E-15
Los elementos de A y b deben ser reducibles a n
umeros decimales.
(%i1) A : matrix ([5, -%pi], [1b0, 11/17]);
[
5
- %pi
[
(%o1)
[
11
[ 1.0b0
--

]
]
]
]

870

Manual de Maxima

(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)

[
17
]
b : matrix ([%e], [sin(1)]);
[
%e
]
[
]
[ sin(1) ]
x : dgesv (A, b);
[ 0.690375643155986 ]
[
]
[ 0.233510982552952 ]
dlange (inf_norm, b - A . x);
2.220446049250313E-16

dgesvd (A )
dgesvd (A, left_p, right_p )

[Funcion]
[Funcion]
Calcula la descomposici
on singular (SVD, en ingles) de la matriz A, que contiene
los valores singulares y, opcionalmente, los vectores singulares por la derecha o por
la izquierda. Todos los elementos de A deben ser enteros o n
umeros decimales en
coma flotante. La matriz A puede ser cuadrada o no (igual n
umero de filas que de
columnas).
Sea m el n
umero de filas y n el de columnas de A. La descomposicion singular de A
consiste en calcular tres matrices: U, Sigma y V^T, tales que
A = U .Sigma.V T
donde U es una matriz unitaria m-por-m, Sigma es una matriz diagonal m-por-n y
V^T es una matriz unitaria n-por-n.
Sea sigma[i] un elemento diagonal de Sigma, esto es, Sigma[i, i] = sigma[i]. Los elementos sigma[i] se llaman valores singulares de A, los cuales son reales y no negativos,
siendo devueltos por la funci
on dgesvd en orden descendente.
Las primeras min(m, n) columnas de U y V son los vectores singulares izquierdo y
derecho de A. N
otese que dgesvd devuelve la transpuesta de V, no la propia matriz
V.
dgesvd(A ) calcula u
nicamente los valores singulares de A. dgesvd(A, left_p,
right_p ) calcula los valores singulares de A y los vectores sigulares por la izquierda
cuando left p = true, y los vectores sigulares por la derecha cuando right p = true.
La funci
on devuelve una lista de tres elementos. El primer elemento es una lista con
los valores singulares. El segundo elemento es false o la matriz de vectores singulares
por la izquierda. El tercer elemento es false o la matriz de vectores singulares por
la derecha.
Ejemplo:
(%i1) load (lapack)$
(%i2) fpprintprec : 6;
(%o2)
6
(%i3) M: matrix([1, 2, 3], [3.5, 0.5, 8], [-1, 2, -3], [4, 9, 7]);
[ 1
2
3 ]
[
]
[ 3.5 0.5
8 ]

Captulo 59: lapack

(%o3)

871

[
[ - 1
[
[ 4

2
9

]
- 3 ]
]
7 ]

(%i4) dgesvd (M);


(%o4)
[[14.4744, 6.38637, .452547], false, false]
(%i5) [sigma, U, VT] : dgesvd (M, true, true);
(%o5) [[14.4744, 6.38637, .452547],
[ - .256731 .00816168
.959029
- .119523 ]
[
]
[ - .526456
.672116
- .206236
- .478091 ]
[
],
[ .107997
- .532278 - .0708315 - 0.83666 ]
[
]
[ - .803287 - .514659 - .180867
.239046 ]
[ - .374486 - .538209 - .755044 ]
[
]
[ .130623
- .836799
0.5317
]]
[
]
[ - .917986
.100488
.383672 ]
(%i6) m : length (U);
(%o6)
4
(%i7) n : length (VT);
(%o7)
3
(%i8) Sigma:
genmatrix(lambda ([i, j], if i=j then sigma[i] else 0),
m, n);
[ 14.4744
0
0
]
[
]
[
0
6.38637
0
]
(%o8)
[
]
[
0
0
.452547 ]
[
]
[
0
0
0
]
(%i9) U . Sigma . VT - M;
[ 1.11022E-15
0.0
1.77636E-15 ]
[
]
[ 1.33227E-15
1.66533E-15
0.0
]
(%o9)
[
]
[ - 4.44089E-16 - 8.88178E-16 4.44089E-16 ]
[
]
[ 8.88178E-16
1.77636E-15
8.88178E-16 ]
(%i10) transpose (U) . U;
[
1.0
5.55112E-17
2.498E-16
2.77556E-17
[
[ 5.55112E-17
1.0
5.55112E-17
4.16334E-17
(%o10) [

]
]
]
]

872

Manual de Maxima

[ 2.498E-16
5.55112E-17
1.0
- 2.08167E-16 ]
[
]
[ 2.77556E-17 4.16334E-17 - 2.08167E-16
1.0
]
(%i11) VT . transpose (VT);
[
1.0
0.0
- 5.55112E-17 ]
[
]
(%o11)
[
0.0
1.0
5.55112E-17 ]
[
]
[ - 5.55112E-17 5.55112E-17
1.0
]

dlange (norm, A )
zlange (norm, A )

[Funcion]
[Funcion]

Calcula una norma o seudonorma de la matriz A.


max

Calcula max(abs(A(i, j))), siendo i y j n


umeros de filas y columnas,
respectivamente, de A. Notese que esta funcion no es una norma matricial.

one_norm

Calcula la norma L[1] de A, esto es, el maximo de la suma de los valores


absolutos de los elementos de cada columna.

inf_norm

Calcula la norma L[inf ] de A, esto es, el maximo de la suma de los valores


absolutos de los elementos de cada fila.

frobenius
Calcula la norma de Frobenius de A, esto es, la raz cuadrada de la suma
de los cuadrados de los elementos de la matriz.

dgemm (A, B )
dgemm (A, B, options )

[Funcion]
[Funcion]
Calcula el producto de dos matrices y, opcionalmente, suma este producto con una
tercera matriz.
En su forma m
as simple, dgemm(A, B ) calcula el producto de las matrices reales A y
B.
En la segunda forma, dgemm calcula alpha A B + beta C, donde A, B y C son
matrices reales de dimensiones apropiadas, siendo alpha y beta n
umeros reales. De
forma opcional, tanto A como B pueden transponerse antes de calcular su producto.
Los par
ametros adicionales se pueden especificar en cualquier orden, siendo su sintaxis
de la forma clave=valor. Las claves reconocidas son:
C

La matriz C que debe ser sumada. El valor por defecto es false, lo que
significa que no se sumara ninguna matriz.

alpha

El producto de A por B se multiplicara por este vaalor. El valor por


defecto es 1.

beta

Si se da la matriz C, se multiplicara por este valor antes de ser sumada. El


valor por defecto es 0, lo que significa que C no se suma, incluso estando
presente. Por lo tanto, tengase cuidado en especificar un valor no nulo
para beta.

transpose_a
Si toma el valor true, se utilizara la transpuesta de A, en lugar de la
propia matriz A, en el producto. El valor por defecto es false.

Captulo 59: lapack

873

transpose_b
Si toma el valor true, se utilizara la transpuesta de B, en lugar de la
propia matriz B, en el producto. El valor por defecto es false.
(%i1) load (lapack)$
(%i2) A : matrix([1,2,3],[4,5,6],[7,8,9]);
[ 1 2 3 ]
[
]
(%o2)
[ 4 5 6 ]
[
]
[ 7 8 9 ]
(%i3) B : matrix([-1,-2,-3],[-4,-5,-6],[-7,-8,-9]);
[ - 1 - 2 - 3 ]
[
]
(%o3)
[ - 4 - 5 - 6 ]
[
]
[ - 7 - 8 - 9 ]
(%i4) C : matrix([3,2,1],[6,5,4],[9,8,7]);
[ 3 2 1 ]
[
]
(%o4)
[ 6 5 4 ]
[
]
[ 9 8 7 ]
(%i5) dgemm(A,B);
[ - 30.0
- 36.0
- 42.0 ]
[
]
(%o5)
[ - 66.0
- 81.0
- 96.0 ]
[
]
[ - 102.0 - 126.0 - 150.0 ]
(%i6) A . B;
[ - 30
- 36
- 42 ]
[
]
(%o6)
[ - 66
- 81
- 96 ]
[
]
[ - 102 - 126 - 150 ]
(%i7) dgemm(A,B,transpose_a=true);
[ - 66.0 - 78.0
- 90.0 ]
[
]
(%o7)
[ - 78.0 - 93.0
- 108.0 ]
[
]
[ - 90.0 - 108.0 - 126.0 ]
(%i8) transpose(A) . B;
[ - 66 - 78
- 90 ]
[
]
(%o8)
[ - 78 - 93
- 108 ]
[
]
[ - 90 - 108 - 126 ]

874

Manual de Maxima

(%i9) dgemm(A,B,c=C,beta=1);
[ - 27.0 - 34.0
[
(%o9)
[ - 60.0 - 76.0
[
[ - 93.0 - 118.0
(%i10) A . B + C;
[ - 27 - 34
[
(%o10)
[ - 60 - 76
[
[ - 93 - 118
(%i11) dgemm(A,B,c=C,beta=1, alpha=-1);
[ 33.0
38.0
[
(%o11)
[ 72.0
86.0
[
[ 111.0 134.0
(%i12) -A . B + C;
[ 33
38
[
(%o12)
[ 72
86
[
[ 111 134

- 41.0

]
]
- 92.0 ]
]
- 143.0 ]

- 41

]
]
- 92 ]
]
- 143 ]
43.0

]
]
100.0 ]
]
157.0 ]

43

]
]
100 ]
]
157 ]

Captulo 60: lbfgs

875

60 lbfgs
60.1 Introducci
on a lbfgs
La funci
on lbfgs implementa el llamado algoritmo L-BFGS [1] para resolver problemas de
minimizaci
on sin restricciones mediante una tecnica cuasi-Newton con memoria limitada
(BFGS). El termino memoria limitada procede del hecho de que se almacena una aproximacion de rango bajo de la inversa de la matriz hessiana, en lugar de la matriz completa.
El programa fue originalmente escrito en Fortran [2] por Jorge Nocedal, incorporando algunas funciones escritas originalmente por Jorge J. More y David J. Thuente, traducidas
posteriormente a Lisp autom
aticamente con el programa f2cl. El paquete lbfgs contiene
el codigo traducido, junto con una funcion interfaz que para controlar ciertos detalles.
Referencias:
[1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large scale
optimization". Mathematical Programming B 45:503528 (1989)
[2] http://netlib.org/opt/lbfgs_um.shar

60.2 Funciones y variables para lbfgs


lbfgs (FOM, X, X0, epsilon, iprint )
lbfgs ([FOM, grad ] X, X0, epsilon, iprint )

[Funcion]
[Function]
Encuentra una soluci
on aproximada para el problema de minimizacion
sin restricciones de la funcion objetivo FOM para la lista de variables X, partiendo de los estimadores iniciales X0, de tal manera que
norm(grad(F OM )) < epsilon max(1, norm(X)).
Si el argumento grad est
a presente, debe ser el gradiente de FOM respecto de las
variables X. grad puede ser una lista o una funcion que devuelva una lista con igual
n
umero de elementos que X. Si el argumento no esta presente, el gradiente se calcula
autom
aticamente mediante derivacion simbolica. Si FOM es una funcion, el gradiente
grad debe ser suministrado por el usuario.
El algoritmo utilizado es una tecnica cuasi-Newton con memoria limitada (BFGS) [1].
El termino memoria limitada procede del hecho de que se almacena una aproximacion
de rango bajo de la inversa de la matriz hessiana, en lugar de la matriz completa.
Cada iteraci
on del algoritmo es una b
usqueda a lo largo de una recta, cuya direccion
se calcula a partir de la matriz inversa aproximada del hessiano. La funcion objetivo
decrece siempre tras cada b
usqueda exitosa a lo largo de la recta; ademas, casi siempre
decrece tambien el m
odulo del gradiente de la funcion.
El argumento iprint controla los mensajes de progreso que enva la funcion lbfgs.
iprint[1]
iprint [1] controla la frecuencia con la que se emiten los mensajes.
iprint[1] < 0
No se envan mensajes.
iprint[1] = 0
Mensajes u
nicamente en la primera y u
ltima iteraciones.

876

Manual de Maxima

iprint[1] > 0
Imprime un mensaje cada iprint [1] iteraciones.
iprint[2]
iprint [2] controla la cantidad de informacion contenida en los mensajes.
iprint[2] = 0
Imprime contador de iteraciones, n
umero de evaluaciones de
FOM, valor de FOM, modulo del gradiente de FOM y amplitud del paso.
iprint[2] = 1
Igual que iprint [2] = 0, incluyendo X0 y el gradiente de
FOM evaluado en X0.
iprint[2] = 2
Igual que iprint [2] = 1, incluyendo los valores de X en cada
iteracion.
iprint[2] = 3
Igual que iprint [2] = 2, incluyendo el gradiente de FOM
en cada iteracion.
Las columnas devueltas por lbfgs son las siguientes:
I

N
umero de iteraciones. Se incremente tras cada b
usqueda a lo largo de
una recta.

NFN

N
umero de evaluaciones de la funcion objetivo.

FUNC

Valor de la funci
on objetivo al final de cada iteracion.

GNORM

M
odulo del gradiente de la funcion objetivo al final de cada iteracion.

STEPLENGTH
Un par
ametro interno del algoritmo de b
usqueda.
Para m
as informaci
on sobre el algoritmo se puede acudir a los comentarios en el codigo
original en Fortran [2].
Veanse tambien lbfgs_nfeval_max y lbfgs_ncorrections.
Referencias:
[1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large scale
optimization". Mathematical Programming B 45:503528 (1989)
[2] http://netlib.org/opt/lbfgs_um.shar
Ejemplos:
La misma funci
on objetivo utilizada por FGCOMPUTE en el programa sdrive.f del
paquete LBFGS de Netlib. Notese que las variables en cuestion estan subindicadas.
La funci
on objetivo tiene un mnimo exacto igual a cero en u[k] = 1, para k = 1, ..., 8.
(%i1) load (lbfgs)$
(%i2) t1[j] := 1 - u[j];
(%o2)
t1 := 1 - u
j
j

Captulo 60: lbfgs

877

(%i3) t2[j] := 10*(u[j + 1] - u[j]^2);


(%o3)

NFN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

3
4
5
6
7
8
9
10
11
12
13
15
16
17
18
20
22
23
24
25
27
28
29
31
32

2
t2 := 10 (u
- u )
j
j + 1
j

(%i4) n : 8;
(%o4)
8
(%i5) FOM : sum (t1[2*j - 1]^2 + t2[2*j - 1]^2, j, 1, n/2);
2 2
2
2 2
2
(%o5) 100 (u - u ) + (1 - u ) + 100 (u - u ) + (1 - u )
8
7
7
6
5
5
2 2
2
2 2
2
+ 100 (u - u ) + (1 - u ) + 100 (u - u ) + (1 - u )
4
3
3
2
1
1
(%i6) lbfgs (FOM, [u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8]],
[-1.2, 1, -1.2, 1, -1.2, 1, -1.2, 1], 1e-3, [1, 0]);
*************************************************
N=
8
NUMBER OF CORRECTIONS=25
INITIAL VALUES
F= 9.680000000000000D+01
GNORM= 4.657353755084533D+02
*************************************************
FUNC
GNORM
STEPLENGTH
1.651479526340304D+01
1.650209316638371D+01
1.645461701312851D+01
1.636867301275588D+01
1.612153014409201D+01
1.569118407390628D+01
1.510361958398942D+01
1.391077875774294D+01
1.165625686278198D+01
9.859422687859137D+00
7.815442521732281D+00
7.346380905773160D+00
6.330460634066370D+00
5.238763939851439D+00
3.754016790406701D+00
3.001238402309352D+00
2.794390709718290D+00
2.563783562918759D+00
2.019429976377856D+00
1.428003167670903D+00
1.197874264861340D+00
9.023848941942773D-01
5.508226405863770D-01
3.902893258815567D-01
3.207542206990315D-01

4.324359291335977D+00
3.575788161060007D+00
6.230869903601577D+00
1.177589920974980D+01
2.292797147151288D+01
3.687447158775571D+01
4.501931728123680D+01
4.526061463810632D+01
2.748348965356917D+01
2.111494974231644D+01
6.110762325766556D+00
2.165281166714631D+01
1.401220851762050D+01
1.702473787613255D+01
7.981845727704576D+00
3.925482944716691D+00
8.243329982546473D+00
1.035413426521790D+01
1.065187312346769D+01
2.475962450826961D+00
8.441707983493810D+00
1.113189216635162D+01
2.380830600326308D+00
5.625595816584421D+00
1.149444645416472D+01

7.926153934390631D-04
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.285316401779533D-01
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
2.333129631296807D-01
2.503577283782332D-01
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
4.303451060808756D-01
1.000000000000000D+00
1.000000000000000D+00
4.834988416524465D-01
1.000000000000000D+00

878

26
27
28
29
30
31
32
33
34
35
36

Manual de Maxima

33
34
35
36
37
38
39
40
41
42
43

1.874468266362791D-01
9.575763380706598D-02
4.085145107543406D-02
1.931106001379290D-02
6.894000721499670D-03
1.443296033051864D-03
1.571766603154336D-04
1.288011776581970D-05
1.806140173752971D-06
1.769004645459358D-07
3.312164100763217D-10

3.632482152880997D+00
4.816497446154354D+00
2.087009350166495D+00
3.886818608498966D+00
3.198505796342214D+00
1.590265471025043D+00
3.098257063980634D-01
1.207784183577257D-02
4.587890233385193D-02
1.790537375052208D-02
6.782068426119681D-04

1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00

THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.


IFLAG = 0
(%o6) [u = 1.000005339816132, u = 1.000009942840108,
1
2
u = 1.000005339816132, u = 1.000009942840108,
3
4
u = 1.000005339816132, u = 1.000009942840108,
5
6
u = 1.000005339816132, u = 1.000009942840108]
7
8
Un problema de regresi
on. La funcion objetivo es el cuadrado medio de la diferencia
entre la predicci
on F (X[i]) y el valor observado Y [i]. La funcion F es monotona y
acotada (llamada en ocasiones "sigmoidal"). En este ejemplo, lbfgs calcula valores
aproximados para los par
ametros de F y plot2d hace una representacion grafica
comparativa de F junto con los datos observados.
(%i1) load (lbfgs)$
(%i2) FOM : ((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1,
length(X)));
2
sum((F(X ) - Y ) , i, 1, length(X))
i
i
(%o2)
----------------------------------length(X)
(%i3) X : [1, 2, 3, 4, 5];
(%o3)
[1, 2, 3, 4, 5]
(%i4) Y : [0, 0.5, 1, 1.25, 1.5];
(%o4)
[0, 0.5, 1, 1.25, 1.5]
(%i5) F(x) := A/(1 + exp(-B*(x - C)));
A
(%o5)
F(x) := ---------------------1 + exp((- B) (x - C))
(%i6) FOM;
A
2
A
2
(%o6) ((----------------- - 1.5) + (----------------- - 1.25)

Captulo 60: lbfgs

879

- B (5 - C)
- B (4 - C)
%e
+ 1
%e
+ 1
A
2
A
2
+ (----------------- - 1) + (----------------- - 0.5)
- B (3 - C)
- B (2 - C)
%e
+ 1
%e
+ 1
2
A
+ --------------------)/5
- B (1 - C)
2
(%e
+ 1)
(%i7) estimates : lbfgs (FOM, [A, B, C], [1, 1, 1], 1e-4, [1, 0]);
*************************************************
N=
3
NUMBER OF CORRECTIONS=25
INITIAL VALUES
F= 1.348738534246918D-01
GNORM= 2.000215531936760D-01
*************************************************
I

NFN

1
2
3
4
5
6
7
8
9

3
6
8
9
10
11
12
13
14

FUNC

GNORM

STEPLENGTH

1.177820636622582D-01
2.302653892214013D-02
1.496348495303004D-02
7.900460841091138D-03
7.314495451266914D-03
6.750147275936668D-03
5.850716021108202D-03
5.778664230657800D-03
5.777818823650780D-03

9.893138394953992D-02
1.180098521565904D-01
9.611201567691624D-02
1.325041647391314D-02
1.510670810312226D-02
1.914964958023037D-02
1.028089194579382D-02
3.676866074532179D-04
3.010740179797108D-04

8.554435968992371D-01
2.100000000000000D+01
5.257340567840710D-01
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00

THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.


IFLAG = 0
(%o7) [A = 1.461933911464101, B = 1.601593973254801,
C = 2.528933072164855]
(%i8) plot2d ([F(x), [discrete, X, Y]], [x, -1, 6]), estimates;
(%o8)
Especificando el gradiente de la funcion objetivo en lugar de calcularlo
simb
olicamente.
(%i1) load (lbfgs)$
(%i2) F(a, b, c) := (a - 5)^2 + (b - 3)^4 + (c - 2)^6$
(%i3) define(F_grad(a, b, c),
map (lambda ([x], diff (F(a, b, c), x)), [a, b, c]))$
(%i4) estimates : lbfgs ([F, F_grad],
[a, b, c], [0, 0, 0], 1e-4, [1, 0]);
*************************************************
N=
3
NUMBER OF CORRECTIONS=25

880

Manual de Maxima

INITIAL VALUES
F= 1.700000000000000D+02
GNORM= 2.205175729958953D+02
*************************************************
I

NFN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

FUNC

GNORM

STEPLENGTH

6.632967565917637D+01
4.368890936228036D+01
2.685298972775191D+01
1.909064767659852D+01
1.006493272061515D+01
1.215263596054292D+00
1.080252896385329D-02
8.407195124830860D-03
5.022091686198525D-03
2.277152808939775D-03
6.489384688303218D-04
2.075791943844547D-04
7.349472666162258D-05
2.293617477985238D-05
7.683645404048675D-06

6.498411132518770D+01
3.784147651974131D+01
1.640262125898520D+01
9.733664001790506D+00
6.344808151880209D+00
2.204727876126877D+00
1.431637116951845D-01
1.126344579730008D-01
7.750731829225275D-02
5.032810859286796D-02
1.932007150271009D-02
6.964319310814365D-03
4.017449067849554D-03
1.334590390856715D-03
6.011057038099202D-04

4.534785987412505D-03
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00
1.000000000000000D+00

THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.


IFLAG = 0
(%o4) [a = 5.000086823042934, b = 3.052395429705181,
c = 1.927980629919583]
[Variable]
Valor por defecto: 100
La variable lbfgs_nfeval_max almacena el n
umero maximo de evaluaciones de la
funci
on objetivo en lbfgs. Cuando se alcanza el valor lbfgs_nfeval_max, lbfgs
devuelve el resultado logrado en la u
ltima iteracion exitosa.

lbfgs_nfeval_max

lbfgs_ncorrections

[Variable]

Valor por defecto: 25


La variable lbfgs_ncorrections almacena el n
umero de correcciones aplicadas a la
matriz inversa aproximada del hessiano, la cual es gestionada por lbfgs.

Captulo 61: lindstedt

881

61 lindstedt
61.1 Funciones y variables para lindstedt
Lindstedt (eq,pvar,torder,ic )

[Funcion]
Este es el primer paso hacia un programa para resolver ecuaciones de Lindstedt.
Puede resolver problemas con condiciones iniciales, las cuales pueden ser constantes
arbitrarias (no pueden usarse %k1 ni %k2) donde las condiciones iniciales sobre las
ecuaciones de perturbaci
on son z[i] = 0, z 0 [i] = 0 para i > 0. El argumento ic es la
lista de condiciones iniciales.
Ejemplo:
(%i1) load("makeOrders")$
(%i2) load("lindstedt")$
(%i3) Lindstedt(diff(x,t,2)+x-(e*x^3)/6,e,2,[1,0]);
2
e (cos(5 T) - 24 cos(3 T) + 23 cos(T))
(%o3) [[[--------------------------------------36864
e (cos(3 T) - cos(T))
- --------------------- + cos(T)],
192
2
7 e
e
T = (- ---- - -- + 1) t]]
3072
16
Antes de hacer uso de esta funcion ejec
utense load("makeOrders")
load("lindstedt").

Captulo 62: linearalgebra

62 linearalgebra
62.1 Introducci
on a linearalgebra
El paquete linearalgebra contiene una batera de funciones para algebra lineal.
Ejemplo:
(%i1) M : matrix ([1, 2], [1, 2]);
[ 1 2 ]
(%o1)
[
]
[ 1 2 ]
(%i2) nullspace (M);
[ 1 ]
[
]
(%o2)
span([
1 ])
[ - - ]
[
2 ]
(%i3) columnspace (M);
[ 1 ]
(%o3)
span([
])
[ 1 ]
(%i4) ptriangularize (M - z*ident(2), z);
[ 1
2 - z
]
(%o4)
[
]
[
2 ]
[ 0 3 z - z ]
(%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
[ 1 - z
2
3
]
[
]
(%o5)
[
4
5 - z
6
]
[
]
[
7
8
9 - z ]
(%i6) MM : ptriangularize (M, z);
[ 4 5 - z
6
]
[
]
[
2
]
[
66
z
102 z
132
]
[ 0
-- -- + ----- + --]
(%o6)
[
49
7
49
49
]
[
]
[
3
2
]
[
49 z
245 z
147 z ]
[ 0
0
----- - ------ - ----- ]
[
264
88
44
]
(%i7) algebraic : true;
(%o7)
true
(%i8) tellrat (MM [3, 3]);

883

884

Manual de Maxima

3
2
(%o8)
[z - 15 z - 18 z]
(%i9) MM : ratsimp (MM);
[ 4 5 - z
6
]
[
]
[
2
]
(%o9)
[
66
7 z - 102 z - 132 ]
[ 0
-- ------------------ ]
[
49
49
]
[
]
[ 0
0
0
]
(%i10) nullspace (MM);
[
1
]
[
]
[
2
]
[ z - 14 z - 16 ]
[ -------------- ]
(%o10)
span([
8
])
[
]
[
2
]
[
z - 18 z - 12 ]
[ - -------------- ]
[
12
]
(%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8],
[9, 10, 11, 12], [13, 14, 15, 16]);
[ 1
2
3
4 ]
[
]
[ 5
6
7
8 ]
(%o11)
[
]
[ 9
10 11 12 ]
[
]
[ 13 14 15 16 ]
(%i12) columnspace (M);
[ 1 ] [ 2 ]
[
] [
]
[ 5 ] [ 6 ]
(%o12)
span([
], [
])
[ 9 ] [ 10 ]
[
] [
]
[ 13 ] [ 14 ]
(%i13) apply (orthogonal_complement, args (nullspace (transpose (M))));
[ 0 ] [ 1 ]
[
] [
]
[ 1 ] [ 0 ]
(%o13)
span([
], [
])
[ 2 ] [ - 1 ]
[
] [
]

Captulo 62: linearalgebra

885

[ 3 ]

[ - 2 ]

62.2 Funciones y variables para linearalgebra


addmatrices (f, M_1, . . . , M_n )

[Funcion]
Utiliza la funci
on f como una funcion aditiva, devolviendo la suma de las matrices M 1, . . . , M n. La funcion f debe ser tal que acepte un n
umero arbitrario de
argumentos; en otras palabras, sera una funcion n-aria de Maxima.
Ejemplos:
(%i1)
(%i2)
(%i3)
(%o3)
(%i4)
(%o4)

m1 : matrix([1,2],[3,4])$
m2 : matrix([7,8],[9,10])$
addmatrices(max,m1,m2);
matrix([7,8],[9,10])
addmatrices(max,m1,m2,5*m1);
matrix([7,10],[15,20])

blockmatrixp (M )

[Funcion]
Devuelve el valor true si y solo si M es una matriz cuyos elementos son a su vez
matrices.

columnop (M, i, j, theta )

[Funcion]
Si M es una matriz, devuelve la matriz que resulta de hacer la operacion columna
C_i <- C_i - theta * C_j. Si M carece de cualquiera de las filas i o j, devuelve un
mensaje de error.

columnswap (M, i, j )

[Funcion]
Si M es una matriz, intercambia las columnas i y j. Si M carece de cualquiera de las
filas i o j, devuelve un mensaje de error.

columnspace (M )

[Funcion]
Si M es una matriz, devuelve span (v_1, ..., v_n), donde el conjunto {v_1, ...,
v_n} es la base del espacio generado por las columnas de M.

copy (e )

[Funcion]
Devuelve una copia de la expresion e de Maxima. Aunque e puede ser cualquier
expresi
on de Maxima, la funcion copy es especialmente u
til cuando e es una lista o
una matriz. Considerese el siguiente ejemplo:
(%i1)
(%i2)
(%i3)
(%i4)
(%o4)
(%i5)
(%o5)

m : [1,[2,3]]$
mm : m$
mm[2][1] : x$
m;
[1,[x,3]]
mm;
[1,[x,3]]

Veamos el mismo ejemplo siendo ahora mm una copia de m


(%i6) m : [1,[2,3]]$
(%i7) mm : copy(m)$

886

Manual de Maxima

(%i8) mm[2][1] : x$
(%i9) m;
(%o9)
(%i10) mm;
(%o10)

[1,[2,3]]
[1,[x,3]]

En esta ocasi
on, la asignaci
on a mm no cambia el valor de m.

cholesky (M )
cholesky (M, field )

[Funcion]
[Funcion]
Devuelve la factorizaci
on de Cholesky de la matriz autoadjunta (o hermtica) M. El
valor por defecto del segundo argumento es generalring. Para una descripcion de
los posibles valores para field, vease lu_factor.

ctranspose (M )

[Funcion]
Devuelve la transpuesta compleja conjugada de la matriz M. La funcion ctranspose
utiliza matrix_element_transpose para transponer cada elemento de la matriz.

diag_matrix (d_1, d_2, . . . , d_n )

[Funcion]
Devuelve una matriz diagonal con los elementos de la diagonal iguales a d 1, d 2,
. . . , d n; cuando estos son matrices, los elementos nulos de la matriz devuelta son
matrices nulas de tama~
no apropiado. Por ejemplo:
(%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));

(%o1)

[
[
[
[
[
[
[

[ 1
[
[ 0

0 ]
]
2 ]

[ 0
[
[ 0

[ 0
[
[ 0

0 ]
]
0 ]

[ 3
[
[ 0

[ p
[
[ 0

0 ]
]
q ]

0 ] ]
] ]
0 ] ]
]
0 ] ]
] ]
4 ] ]

(%i2) diag_matrix(p,q);

(%o2)

dotproduct (u, v )

[Funcion]
Devuelve el producto escalar de los vectores u y v. Equivale a conjugate (transpose
(u )) . v . Los argumentos u y v deben ser vectores columna.

eigens_by_jacobi (A )
eigens_by_jacobi (A, field_type )

[Funcion]
[Funcion]
Calcula los valores y vectores propios de A por el metodo de las rotaciones de Jacobi.
A debe ser una matriz simetrica (aunque no necesariamente definida o semidefinida
positiva). El argumento field type indica el tipo numerico sobre el que se realizan los
calculos, que puede ser tanto floatfield como bigfloatfield. En caso de que no
se especifique field type, su valor por defecto sera floatfield.

Captulo 62: linearalgebra

887

Los elementos de A deben ser n


umeros o expresiones reducibles a n
umeros mediante
la ejecuci
on de float o bfloat, seg
un sea el valor de field type.
Ejemplos:
(%i1) S : matrix ([1/sqrt(2), 1/sqrt(2)], [- 1/sqrt(2), 1/sqrt(2)]);
[
1
1
]
[ ------------- ]
[ sqrt(2)
sqrt(2) ]
(%o1)
[
]
[
1
1
]
[ - ------- ------- ]
[
sqrt(2) sqrt(2) ]
(%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
[ sqrt(3)
0
]
(%o2)
[
]
[
0
sqrt(5) ]
(%i3) M : S . L . transpose (S);
[ sqrt(5)
sqrt(3) sqrt(5)
sqrt(3) ]
[ ------- + ------- ------- - ------- ]
[
2
2
2
2
]
(%o3)
[
]
[ sqrt(5)
sqrt(3) sqrt(5)
sqrt(3) ]
[ ------- - ------- ------- + ------- ]
[
2
2
2
2
]
(%i4) eigens_by_jacobi (M);
The largest percent change was 0.1454972243679
The largest percent change was 0.0
number of sweeps: 2
number of rotations: 1
(%o4) [[1.732050807568877, 2.23606797749979],
[ 0.70710678118655
0.70710678118655 ]
[
]]
[ - 0.70710678118655 0.70710678118655 ]
(%i5) float ([[sqrt(3), sqrt(5)], S]);
(%o5) [[1.732050807568877, 2.23606797749979],
[ 0.70710678118655
0.70710678118655 ]
[
]]
[ - 0.70710678118655 0.70710678118655 ]
(%i6) eigens_by_jacobi (M, bigfloatfield);
The largest percent change was 1.454972243679028b-1
The largest percent change was 0.0b0
number of sweeps: 2
number of rotations: 1
(%o6) [[1.732050807568877b0, 2.23606797749979b0],
[ 7.071067811865475b-1
7.071067811865475b-1 ]
[
]]
[ - 7.071067811865475b-1 7.071067811865475b-1 ]

888

Manual de Maxima

get_lu_factors (x )

[Funcion]
Cuando x = lu_factor (A ), entonces get_lu_factors devuelve una lista de la forma
[P, L, U], donde P es una matriz permutacion, L es triangular inferior con unos en
la diagonal y U es triangular superior, verificandose que A = P L U .

hankel (col )
hankel (col, row )

[Funcion]
[Funcion]
Devuelve la matriz de Hankel H. La primera columna de H coincide con col, excepto
en el primer elemento, la u
ltima fila de H es row. El valor por defecto para row es el
vector nulo con igual n
umero de elementos que col.

hessian (f, x )

[Funcion]
Devuelve la matriz hessiana de f con respecto de la lista de variables x. El elemento
(i, j)-esimo de la matriz hessiana es diff(f, x [i], 1, x [j], 1).
Ejemplos:
(%i1) hessian (x * sin (y), [x, y]);
[
0
cos(y)
]
(%o1)
[
]
[ cos(y) - x sin(y) ]
(%i2) depends (F, [a, b]);
(%o2)
[F(a, b)]
(%i3) hessian (F, [a, b]);
[
2
2
]
[ d F
d F ]
[ ------- ]
[
2
da db ]
[ da
]
(%o3)
[
]
[
2
2
]
[ d F
d F ]
[ ------- ]
[ da db
2 ]
[
db
]

hilbert_matrix (n )

[Funcion]
Devuelve la matriz de Hilbert n por n. Si n no es un entero positivo, emite un mensaje
de error.

identfor (M )
identfor (M, fld )

[Funcion]
[Funcion]
Devuelve una matriz identidad con la misma forma que la matriz M. Los elementos
de la diagonal de la matriz identidad son la identidad multiplicativa del campo fld;
el valor por defecto para fld es generalring.

El primer argumento M debe ser una matriz cuadrada o no ser matriz en absoluto.
Si M es una matriz, sus elementos pueden ser matrices cuadradas. La matriz puede
tener bloques a cualquier nivel finito de profundidad.
Vease tambien zerofor

Captulo 62: linearalgebra

889

invert_by_lu (M, (rng generalring))

[Funcion]
Invierte la matriz M mediante la factorizacion LU, la cual se hace utilizando el anillo
rng.

jacobian (f, x )

[Funcion]
Devuelve la matriz jacobiana de la lista de funciones f respecto de la lista de variables
x. El elemento (i, j)-esimo de la matriz jacobiana es diff(f [i], x [j]).
Ejemplos:
(%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
[ cos(v - u) - cos(v - u) ]
(%o1)
[
]
[ v cos(u v)
u cos(u v) ]
(%i2) depends ([F, G], [y, z]);
(%o2)
[F(y, z), G(y, z)]
(%i3) jacobian ([F, G], [y, z]);
[ dF dF ]
[ -- -- ]
[ dy dz ]
(%o3)
[
]
[ dG dG ]
[ -- -- ]
[ dy dz ]

kronecker_product (A, B )

[Funcion]

Devuelve el producto de Kroneckerde las matrices A y B.

listp (e, p )
listp (e )

[Funcion]
[Funcion]
Dado el argumento opcional p, devuelve true si e es una lista de Maxima y p toma
el valor true al aplicarlo a cada elemento de la lista. Si a listp no se le suministra
el argumento opcional, devuelve true si e es una lista de Maxima. En cualquier otro
caso, el resultado es false.

locate_matrix_entry (M, r_1, c_1, r_2, c_2, f, rel )

[Funcion]
El primer argumento debe ser una matriz, mientras que los argumentos desde r 1
hasta c 2 determinan la submatriz de M tomando las filas desde r 1 hasta r 2 y las
columnas desde c 1 hasta c 2.
La funci
on locate_matrix_entry busca en la submatriz de M un elemento que satisfaga cierta propiedad. hay tres posibilidades:
(1) rel = bool y f es un predicado:

Rastrea la submatriz de izquierda a derecha y de arriba hacia abajo, devolviendo el


ndice del primer elemento que satisface el predicado f ; si ning
un elemento lo satisface,
el resultado es false.
(2) rel = max y f una funcion real:
Rastrea la submatriz buscando el elemento que maximice f, devolviendo el ndice
correspondiente.

890

Manual de Maxima

(3) rel = min y f una funcion real:


Rastrea la submatriz buscando el elemento que minimice f, devolviendo el ndice
correspondiente.

lu_backsub (M, b )

[Funcion]
Si M = lu_factor (A, field ), entonces lu_backsub (M, b ) resuelve el sistema de
ecuaciones lineales A x = b .

lu_factor (M, field )

[Funcion]
Devuelve una lista de la forma [LU, perm, fld ], o [LU, perm, fld, lower-cnd
upper-cnd ], donde
La matriz LU contiene la factorizacion de M de forma empaquetada, lo que
significa tres cosas. En primer lugar, que las filas de LU estan permutadas de
acuerdo con la lista perm; por ejemplo, si perm es la lista [3,2,1], la primera
fila de la factorizaci
on LU es la tercera fila de la matriz LU. En segundo lugar,
el factor triangular inferior de M es la parte triangular inferior de LU con los
elementos de la diagonal sustituidos por unos. Por u
ltimo, el factor triangular
superior de M es la parte triangular superior de LU.
Si el campo es floatfield o complexfield, los n
umeros lower-cnd y upper-cnd
son las cotas inferior y superior del n
umero de condicion de la norma infinita de
M. El n
umero de condicion no se puede estimar para todos los campos, en cuyo
caso lu_factor devuelve una lista de dos elementos. Tanto la cota inferior como
la superior pueden diferir de sus valores verdaderos. Vease tambien mat_cond.
El argumento M debe ser una matriz cuadrada.
El argumento opcional fld debe ser un smbolo que determine un anillo o un campo.
Los anillos y campos predefinidos son:
a. generalring el anillo de las expresiones de Maxima
b. floatfield el campo de los n
umeros decimales en coma flotante de doble
precisi
on
c. complexfield el campo de los n
umeros complejos decimales en coma flotante
de doble precisi
on
d. crering el anillo de las expresiones canonicas racionales (Canonical Rational
Expression o CRE) de Maxima
e. rationalfield el campo de los n
umeros racionales
f. runningerror controla los errores de redondeo de las operaciones en coma
flotante
g. noncommutingring el anillo de las expresiones de Maxima en las que el producto
es el operador no conmutativo "."
Si el campo es floatfield, complexfield o runningerror, el algoritmo utiliza pivoteo parcial; para los dem
as campos, las filas se cambian cuando se necesita evitar
pivotes nulos.
La suma aritmetica en coma flotante no es asociativa, por lo que el significado de
campo no coincide exactamente con su definicion matematica.

Captulo 62: linearalgebra

891

Un elemento del campo runningerror consiste en una lista de Maxima de la forma


[x,n], donde x es un n
umero decimal en coma flotante y n un enetro. La diferencia
relativa entre el valor real de x y x esta aproximadamente acotado por el valor epsilon
de la m
aquina multiplicado por n.
No es posible la definici
on de un nuevo campo por parte del usuario, a menos que este
tenga conocimientos de Common Lisp. Para hacerlo, el usuario debe definir funciones
para las operaciones aritmeticas y para convertir de la representacion del campo a
Maxima y al reves. Adem
as, en los campos ordenados, donde se hace uso del pivoteo
parcial, el usuario debe definir funciones para el modulo y para comparar n
umeros
del campo. Despues de lo anterior, tan solo queda definir una estructura Common
Lisp mring. El fichero mring tiene muchos ejemplos.
Para calcular la factorizaci
on, la primera tarea consiste en convertir cada elemento
de la matriz a un elemento del campo especificado. Si la conversion no es posible,
la factorizaci
on se detiene con un mensaje de error. Los elementos del campo no
necesitan ser expresiones de Maxima; por ejemplo, los elementos de complexfield
son n
umeros complejos de Common Lisp. Tras la factorizacion, los elementos de la
matriz deben convertirse nuevamente a expresiones de Maxima.
Vease tambien get_lu_factors.
Ejemplos:
(%i1) w[i,j] := random (1.0) + %i * random (1.0);
(%o1)
w
:= random(1.) + %i random(1.)
i, j
(%i2) showtime : true$
Evaluation took 0.00 seconds (0.00 elapsed)
(%i3) M : genmatrix (w, 100, 100)$
Evaluation took 7.40 seconds (8.23 elapsed)
(%i4) lu_factor (M, complexfield)$
Evaluation took 28.71 seconds (35.00 elapsed)
(%i5) lu_factor (M, generalring)$
Evaluation took 109.24 seconds (152.10 elapsed)
(%i6) showtime : false$
(%i7) M : matrix ([1 - z, 3], [3, 8 - z]);
[ 1 - z
3
]
(%o7)
[
]
[
3
8 - z ]
(%i8) lu_factor (M, generalring);
[ 1 - z
3
]
[
]
(%o8)
[[
3
9
], [1, 2], generalring]
[ ----- - z - ----- + 8 ]
[ 1 - z
1 - z
]
(%i9) get_lu_factors (%);
[
1
0 ] [ 1 - z
3
]
[ 1 0 ] [
] [
]
(%o9) [[
], [
3
], [
9
]]

892

Manual de Maxima

[ 0

1 ]

[ ----- 1 ] [
0
- z - ----- + 8 ]
[ 1 - z
] [
1 - z
]
(%i10) %[1] . %[2] . %[3];
[ 1 - z
3
]
(%o10)
[
]
[
3
8 - z ]

mat_cond (M, 1)
mat_cond (M, inf)

[Funcion]
[Funcion]
Devuelve el n
umero de condicion de la p-norma de la matriz M. Los valores admisibles
para p son 1 y inf. Esta funcion utiliza la factorizacion LU para invertir la matriz M,
por lo que el tiempo de ejecucion de mat_cond es proporcional al cubo del tama~
no
de la matriz; lu_factor determina las cotas inferior y superior para el n
umero de
condici
on de la norma infinita en un tiempo proporcional al cuadrado del tama~
no de
la matriz.

mat_norm (M, 1)
mat_norm (M, inf)
mat_norm (M, frobenius)

[Funcion]
[Funcion]
[Funcion]
Devuelve la p-norma de la matriz M. Los valores admisibles para p son 1, inf y
frobenius (la norma matricial de Frobenius). La matriz M no debe contener bloques.

matrixp (e, p )
matrixp (e )

[Funcion]
[Funcion]
Dado el argumento opcional p, devuelve true si e es una matriz y p toma el valor
true al aplicarlo a cada elemento de la matriz. Si a matrixp no se le suministra el
argumento opcional, devuelve true si e es una matriz. En cualquier otro caso, el
resultado es false.
Vease tambien blockmatrixp

matrix_size (M )

[Funcion]

Devuelve una lista con el n


umero de filas y columnas de la matriz M.

mat_fullunblocker (M )

[Funcion]
Si M es una matriz de bloques, transforma la matriz llevando todos los elementos de
los bloques al primer nivel. Si M es una matriz, devuelve M ; en cualquier otro caso,
enva un mensaje de error.

mat_trace (M )

[Funcion]
Calcula la traza de la matriz M. Si M no es una matriz, devuelve una forma nominal. Si M es una matriz de bloques, mat_trace(M) calcula el mismo valor que
mat_trace(mat_unblocker(m)).

mat_unblocker (M )

[Funcion]
Si M es una matriz de bloques, deshace los bloques de un nivel. Si M es una matriz,
mat_unblocker (M) devuelve M ; en cualquier otro caso, enva un mensaje de error.
Si todos los elementos de M son matrices, mat_unblocker (M) devuelve una matriz sin
bloques, pero si los elementos de M son a su vez matrices de bloques, mat_unblocker
(M) devuelve una matriz con el nivel de bloques disminuido en uno.

Captulo 62: linearalgebra

893

En caso de trabajar con matrices de bloques, quizas sea conveniente darle a matrix_
element_mult el valor "." y a matrix_element_transpose el valor transpose.
Vease tambien mat_fullunblocker.
Ejemplo:
(%i1) A : matrix ([1, 2], [3, 4]);
[ 1 2 ]
(%o1)
[
]
[ 3 4 ]
(%i2) B : matrix ([7, 8], [9, 10]);
[ 7 8 ]
(%o2)
[
]
[ 9 10 ]
(%i3) matrix ([A, B]);
[ [ 1 2 ] [ 7 8 ] ]
(%o3)
[ [
] [
] ]
[ [ 3 4 ] [ 9 10 ] ]
(%i4) mat_unblocker (%);
[ 1 2 7 8 ]
(%o4)
[
]
[ 3 4 9 10 ]

nullspace (M )

[Funcion]
Si M es una matriz, devuelve span (v_1, ..., v_n), siendo {v_1, ..., v_n} la base
del espacio nulo de M. Si el espacio nulo contiene un u
nico elemento, devuelve span
().

nullity (M )

[Funcion]

Si M es una matriz, devuelve la dimension del espacio nulo de M.

orthogonal_complement (v_1, . . . , v_n )

[Funcion]
Devuelve span (u_1, ..., u_m), siendo {u_1, ..., u_m} la base del complemento
ortogonal del conjunto (v_1, ..., v_n), cuyos elementos deben ser vectores columna.

polynomialp (p, L, coeffp, exponp )


polynomialp (p, L, coeffp )
polynomialp (p, L )

[Funcion]
[Funcion]
[Funcion]
Devuelve true si p es un polinomio cuyas variables son las de la lista L, el predicado
coeffp toma el valor true al aplicarlo a cada coeficiente y el predicado exponp tambien
alcanza el valor true al ser aplicado a los exponentes de las variables listadas en L. En
caso de necesitar que exponp no sea un predicado por defecto, se debera especificar
tambien el predicado coeffp, aunque aqu se desee su comportamiento por defecto.
La instrucci
on polynomialp (p, L, coeffp ) equivale a polynomialp (p, L,
coeffp, nonnegintegerp), al tiempo que polynomialp (p, L ) equivale a
polynomialp (p, L, constantp, nonnegintegerp).
No es necesario expandir el polinomio:
(%i1) polynomialp ((x + 1)*(x + 2), [x]);
(%o1)
true

894

Manual de Maxima

(%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);


(%o2)
false
Un ejemplo utilizando valores distintos a los utilizados por defecto en coeffp y en
exponp:
(%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x],
numberp, numberp);
(%o1)
true
(%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x],
numberp, numberp);
(%o2)
true
Polinomios con dos variables:
(%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
(%o1)
false
(%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
(%o2)
true

polytocompanion (p, x )

[Funcion]
Si p es un polinomio en x, devuelve la matriz compa~
nera de p. Para un polinomio
monico p de grado n se tiene p = (-1)^n charpoly (polytocompanion (p, x )).
Si p no es un polinomio en x, se devuelve un mensaje de error.

ptriangularize (M, v )

[Funcion]
Si M es una matriz en la que sus elementos son polinomios en v, devuelve una matriz
M2 tal que
1. M2 es triangular superior,
2. M2 = E_n ... E_1 M , donde E 1, ..., E n son matrices elementales cuyos elementos son polinomios en v,
3. |det (M )| = |det (M2 )|,
Nota: esta funci
on no comprueba si los elementos de la matriz son polinomios en v.

rowop (M, i, j, theta )

[Funcion]
Si M es una matriz, devuelve la matriz que resulta de relizar la transformacion R_i
<- R_i - theta * R_j con las filas R_i y R_j. Si M no tiene estas filas, devuelve un
mensaje de error.

rank (M )

[Funcion]
Calcula el rango de la matriz M. El rango es la dimension del espacio columna.
Ejemplo:
(%i1) rank(matrix([1,2],[2,4]));
(%o1)
1
(%i2) rank(matrix([1,b],[c,d]));
Proviso: {d - b c # 0}
(%o2)
2

rowswap (M, i, j )

[Funcion]
Si M es una matriz, intercambia las filas i y j. Si M carece de estas filas, devuelve un
mensaje de error.

Captulo 62: linearalgebra

895

toeplitz (col )
toeplitz (col, row )

[Funcion]
[Funcion]
Devuelve una matriz de Toeplitz T. La primera columna de T es col, excepto su
primer elemento. La primera fila de T es row. El valor por defecto para row es el
complejo conjugado de col. Ejemplo:
(%i1) toeplitz([1,2,3],[x,y,z]);
[ 1 y z ]
[
]
(%o1)
[ 2 1 y ]
[
]
[ 3 2 1 ]
(%i2) toeplitz([1,1+%i]);

(%o2)

[
1
[
[ %I + 1

1 - %I ]
]
1
]

vandermonde_matrix ([x_1, ..., x_n ])

[Funcion]
Devuelve una matriz n por n, cuya i-esima fila es [1, x_i, x_i ^2, ... x_i ^(n -1)].

zerofor (M )
zerofor (M, fld )

[Funcion]
[Funcion]
Devuelve la matriz nula con la misma estructura que la matriz M. Cada elemento
de la matriz nula es la identidad aditiva del campo fld; el valor por defecto de fld es
generalring.
El primer argumento de M debe ser una matriz cuadrada o no ser matriz en absoluto.
Si M es una matriz, cada uno de sus elementos puede ser una matriz cuadrada, por
lo que M puede ser una matriz de Maxima definida por bloques.
Vease tambien identfor.

zeromatrixp (M )

[Funcion]
Si M no es una matriz definida por bloques, devuelve true si is (equal (e, 0)) es
verdadero para todo elemento e de M. Si M es una matriz por bloques, devuelve true
si zeromatrixp devuelve a su vez true para cada elemento de e.

Captulo 63: lsquares

897

63 lsquares
63.1 Funciones y variables para lsquares
lsquares_estimates (D, x, e, a )
lsquares_estimates (D, x, e, a, initial = L, tol = t )

[Funcion]
[Funcion]
Estima los par
ametros a que mejor se ajusten a la ecuacion e de variables x y a a los
datos D por el metodo de los mnimos cuadrados. La funcion lsquares_estimates
busca primero una soluci
on exacta, y si no la encuentra, buscara una aproximada.
El resultado es una lista de listas de ecuaciones de la forma [a = ..., b = ..., c =
...]. Cada elemento de la lista es un mnimo diferente de error cuadratico medio.
Los datos deben darse en formato matricial. Cada fila es un dato (el cual suele
denominarse registro o caso en ciertos contextos), y las columnas contienen los
valores para cada una de las variables. La lista de variables x asigna un nombre a
cada una de las columnas de D, incluso a aquellas que no intervienen en el analisis. La
lista a asigna nombres a los parametros cuyas estimaciones se buscan. El argumento
e es una expresi
on o ecuaci
on de variables x y a; si e no es una ecuacion (es decir,
carece de igualdad), se trata como si fuese e = 0.
Se pueden dar argumentos adicionales a lsquares_estimates en forma de ecuaciones,
las cuales se pasan tal cual a la funcion lbfgs, que es la que se encarga de calcular
las estimaciones por el metodo numerico cuando no encuentra una solucion exacta.
Cuando se pueda encontrar una solucion exacta, mediante solve, los datos en D
pueden contener valores no numericos. Sin embargo, cuando no exista solucion exacta, todos los elementos de D deben ser necesariamente numericos, lo cual incluye
constantes numericas tales como %pi o %e y n
umeros literales (enteros, racionales y
decimales en coma flotante, tanto los de doble precision como los de precision arbitraria). Los c
alculos numericos se realizan en doble precision con aritmetica de
punto flotante, por lo que n
umeros de cualesquiera otro tipo son convenientemente
convertidos antes de proceder con los calculos.
Antes de utilizar esta funci
on ejec
utese load(lsquares).
Veanse tambien lsquares_estimates_exact, lsquares_estimates_approximate,
lsquares_mse, lsquares_residuals y lsquares_residual_mse.
Ejemplos:
Un problema con soluci
on exacta.
(%i1) load (lsquares)$
(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]

898

Manual de Maxima

[
[
[
[
[
[

1 ]
]
]
2 ]
]
1 ]

2 2
(%i3) lsquares_estimates (
M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
59
27
10921
107
(%o3)
[[A = - --, B = - --, C = -----, D = - ---]]
16
16
1024
32
un problema para el que no se encuentra solucion exacta, por lo que lsquares_
estimates recurre a la aproximacion numerica.
(%i1) load (lsquares)$
(%i2) M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
[ 1 1 ]
[
]
[
7 ]
[ 2 - ]
[
4 ]
[
]
(%o2)
[
11 ]
[ 3 -- ]
[
4 ]
[
]
[
13 ]
[ 4 -- ]
[
4 ]
(%i3) lsquares_estimates (
M, [x,y], y=a*x^b+c, [a,b,c], initial=[3,3,3], iprint=[-1,0]);
(%o3) [[a = 1.387365874920637, b = .7110956639593767,
c = - .4142705622439105]]

lsquares_estimates_exact (MSE, a )

[Funcion]
Estima los valores de los par
ametros a que minimizan el error cuadratico medio MSE
mediante un sistema de ecuaciones que intentara resolver simbolicamente con solve.
El error cuadr
atico medio es una expresion con parametros a, como los devueltos por
lsquares_mse.
El valor devuelto por la funcion es una lista de listas de ecuaciones de la forma [a
= ..., b = ..., c = ...]. El resultado puede contener cero, uno o mas elementos.
Cuando la respuesta contiene mas de una solucion, todas ellas representan mnimos
del error cuadr
atico medio.
Veanse tambien lsquares_estimates,
lsquares_estimates_approximate,
lsquares_mse, lsquares_residuals y lsquares_residual_mse.
Ejemplo:
(%i1) load (lsquares)$

Captulo 63: lsquares

899

(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]
[ - 2 1 ]
[ 4
]
[
]
[ 3 2 2 ]
[
]
[ 2 2 1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
5
====
\
2
2
>
((D + M
) - C - M
B - M
A)
/
i, 1
i, 3
i, 2
====
i = 1
(%o3)
--------------------------------------------5
(%i4) lsquares_estimates_exact (mse, [A, B, C, D]);
59
27
10921
107
(%o4)
[[A = - --, B = - --, C = -----, D = - ---]]
16
16
1024
32

lsquares_estimates_approximate (MSE, a, initial = L, tol = t )

[Funcion]
Estima los valores de los par
ametros a que minimizan el error cuadratico medio MSE
mediante el algoritmo numerico lbfgs. El error cuadratico medio es una expresion
con par
ametros a, como los devueltos por lsquares_mse.
La soluci
on devuelta por la funcion es un mnimo local (posiblemente global) del error
cuadr
atico medio.
Por consistencia con lsquares_estimates_exact, el valor devuelto es una lista
anidada con un u
nico elemento, consistente en una lista de ecuaciones de la forma
[a = ..., b = ..., c = ...].
Los argumentos adicionales de lsquares_estimates_approximate se especifican
como ecuaciones y se pasan de esta forma a la funcion lbfgs.

MSE debe devolver un n


umero cuando a sus parametros se les asignen valores
numericos, lo cual implica que los datos a partir de los cuales se ha generado MSE
contengan u
nicamente constantes numericas tales como %pi o %e y n
umeros literales
(enteros, racionales y decimales en coma flotante, tanto los de doble precision como
los de precisi
on arbitraria). Los calculos numericos se realizan en doble precision

900

Manual de Maxima

con aritmetica de punto flotante, por lo que n


umeros de cualesquiera otro tipo son
convenientemente convertidos antes de proceder con los calculos.
Antes de utilizar esta funci
on ejec
utese load(lsquares).
Veanse tambien lsquares_estimates, lsquares_estimates_exact, lsquares_mse,
lsquares_residuals y lsquares_residual_mse.
Ejemplo:
(%i1) load (lsquares)$
(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]
[ - 2 1 ]
[ 4
]
[
]
[ 3 2 2 ]
[
]
[ 2 2 1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
5
====
\
2
2
>
((D + M
) - C - M
B - M
A)
/
i, 1
i, 3
i, 2
====
i = 1
(%o3)
--------------------------------------------5
(%i4) lsquares_estimates_approximate (
mse, [A, B, C, D], iprint = [-1, 0]);
(%o4) [[A = - 3.67850494740174, B = - 1.683070351177813,
C = 10.63469950148635, D = - 3.340357993175206]]

lsquares_mse (D, x, e )

[Funcion]
Devuelve el error medio cuadratico (MSE) para la ecuacion e de variables x respecto
de los datos D. El resultado devuelto es una suma, definida como
n
1 X
2
[lhs (ei ) rhs (ei )] ,
n i=1

siendo n el n
umero de datos y e [i] es la ecuacion e evaluada cuando a sus variables
x se le asignan los valores asociados al dato i-esimo D [i].

Captulo 63: lsquares

901

Antes de utilizar esta funci


on ejec
utese load(lsquares).
Ejemplo:
(%i1) load (lsquares)$
(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]
[ - 2 1 ]
[ 4
]
[
]
[ 3 2 2 ]
[
]
[ 2 2 1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
5
====
\
2
2
>
((D + M
) - C - M
B - M
A)
/
i, 1
i, 3
i, 2
====
i = 1
(%o3)
--------------------------------------------5
(%i4) diff (mse, D);
5
====
\
2
4 >
(D + M
) ((D + M
) - C - M
B - M
A)
/
i, 1
i, 1
i, 3
i, 2
====
i = 1
(%o4) ---------------------------------------------------------5
(%i5) mse, nouns;
2
2
9 2
2
(%o5) (((D + 3) - C - 2 B - 2 A) + ((D + -) - C - B - 2 A)
4
2
2
3 2
2
+ ((D + 2) - C - B - 2 A) + ((D + -) - C - 2 B - A)
2
2
2

902

Manual de Maxima

+ ((D + 1)

- C - B - A) )/5

lsquares_residuals (D, x, e, a )

[Funcion]

Devuelve los residuos para la ecuacion e de parametros a y datos D.


D es una matriz, x una lista de variables y e es una ecuacion o expresion general; si
e no es una ecuaci
on (es decir, carece de igualdad), se trata como si fuese e = 0. La
lista a contiene ecuaciones que especifican valores para cualesquiera parametros de e
que no esten en x.
Los residuos se definen como
lhs (ei ) rhs (ei ) ,
siendo e [i] la ecuaci
on e evaluada cuando las variables x toman los valores asociados
al dato i-esimo D [i], y haciendo las asignaciones indicadas en a al resto de variables.
Antes de utilizar esta funci
on ejec
utese load(lsquares).
Ejemplo:
(%i1) load (lsquares)$
(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]
[ - 2 1 ]
[ 4
]
[
]
[ 3 2 2 ]
[
]
[ 2 2 1 ]
(%i3) a : lsquares_estimates (
M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
59
27
10921
107
(%o3)
[[A = - --, B = - --, C = -----, D = - ---]]
16
16
1024
32
(%i4) lsquares_residuals (
M, [z,x,y], (z+D)^2 = A*x+B*y+C, first(a));
13
13
13 13 13
(%o4)
[--, - --, - --, --, --]
64
64
32 64 64

lsquares_residual_mse (D, x, e, a )

[Funcion]
Devuelve el residuo del error cuadratico medio (MSE) de la ecuacion e para los valores
par
ametricos a y datos D.

Captulo 63: lsquares

903

El residuo del error cuadr


atico medio (MSE) se define como
n
1 X
2
[lhs (ei ) rhs (ei )] ,
n i=1

siendo e [i] la ecuaci


on e evaluada cuando las variables x toman los valores asociados
al dato i-esimo D [i], y haciendo las asignaciones indicadas en a al resto de variables.
Antes de utilizar esta funci
on ejec
utese load(lsquares).
Ejemplo:
(%i1) load (lsquares)$
(%i2) M : matrix (
[1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
[ 1 1 1 ]
[
]
[ 3
]
[ - 1 2 ]
[ 2
]
[
]
(%o2)
[ 9
]
[ - 2 1 ]
[ 4
]
[
]
[ 3 2 2 ]
[
]
[ 2 2 1 ]
(%i3) a : lsquares_estimates (
M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
59
[[A = - --, B = 16
(%i4) lsquares_residual_mse
M, [z,x,y], (z
(%o3)

(%o4)

27
10921
107
--, C = -----, D = - ---]]
16
1024
32
(
+ D)^2 = A*x + B*y + C, first (a));
169
---2560

plsquares (Mat,VarList,depvars )
plsquares (Mat,VarList,depvars,maxexpon )
plsquares (Mat,VarList,depvars,maxexpon,maxdegree )

[Funcion]
[Funcion]
[Funcion]
Ajuste de una funci
on polin
omica multivariante a una tabla de datos por el metodo
de los mnimos cuadrados. Mat es la matriz con los datos empricos, VarList es la
lista con los nombres de las variables (una por cada columna de Mat, pero puede
usarse - en lugar de los nombres de variables para ignorar las columnas de Mat),
depvars es el nombre de la variable dependiente o una lista con uno o mas nombres de
variables dependientes (cuyos nombres deben estar tambien en VarList), maxexpon
es un argumento opcional para indicar el maximo exponente para cada una de las

904

Manual de Maxima

variables independientes (1 por defecto) y maxdegree es otro argumento opcional para


el grado del polinomio (maxexpon por defecto); notese que la suma de exponentes de
cada termino debe ser igual o menor que maxdegree. Si maxdgree = 0 entonces no se
aplicar
a ning
un lmite.
Si depvars es el nombre de una variable dependiente (no en una lista), plsquares
devuelve el polinomio ajustado. Si depvars es una lista de una o mas variables dependientes, plsquares devuelve una lista con los polinomios ajustados. Los coeficientes
de determinaci
on se muestran en su orden correspondiente para informar sobre la bondad del ajuste. Estos valores se almacenan tambien en la variable global DETCOEF
en un formato de lista si depvars es a su vez una lista.
Un ejemplo sencillo de ajuste lineal multivariante:
(%i1) load("plsquares")$
(%i2) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
[x,y,z],z);
Determination Coefficient for z = .9897039897039897
11 y - 9 x - 14
(%o2)
z = --------------3
El mismo ejemplo sin restricciones en el grado:
(%i3) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
[x,y,z],z,1,0);
Determination Coefficient for z = 1.0
x y + 23 y - 29 x - 19
(%o3)
z = ---------------------6
Calculo del n
umero de diagonales de un polgono de N lados
(%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
[N,diagonals],diagonals,5);
Determination Coefficient for diagonals = 1.0
2
N - 3 N
(%o4)
diagonals = -------2
(%i5) ev(%, N=9);
/* Testing for a 9 sides polygon */
(%o5)
diagonals = 27
Calculo del n
umero de formas de colocar dos reinas en un tablero n x n de manera
que no se amenacen.
(%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
[n,positions],[positions],4);
Determination Coefficient for [positions] = [1.0]
4
3
2
3 n - 10 n + 9 n - 2 n
(%o6)
[positions = -------------------------]
6

Captulo 63: lsquares

(%i7) ev(%[1], n=8); /* Testing for a (8 x 8) chessboard */


(%o7)
positions = 1288
Un ejemplo con seis variables dependientes:
(%i8) mtrx:matrix([0,0,0,0,0,1,1,1],[0,1,0,1,1,1,0,0],
[1,0,0,1,1,1,0,0],[1,1,1,1,0,0,0,1])$
(%i8) plsquares(mtrx,[a,b,_And,_Or,_Xor,_Nand,_Nor,_Nxor],
[_And,_Or,_Xor,_Nand,_Nor,_Nxor],1,0);
Determination Coefficient for
[_And, _Or, _Xor, _Nand, _Nor, _Nxor] =
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
(%o2) [_And = a b, _Or = - a b + b + a,
_Xor = - 2 a b + b + a, _Nand = 1 - a b,
_Nor = a b - b - a + 1, _Nxor = 2 a b - b - a + 1]
Antes de hacer uso de esta funcion ejec
utese load("plsquares").

905

Captulo 64: makeOrders

907

64 makeOrders
64.1 Funciones y variables para makeOrders
makeOrders (indvarlist,orderlist )

[Funcion]
Devuelve una lista con las potencias de las variables de un polinomio termino a
termino.
(%i1) load("makeOrders")$

(%i2) makeOrders([a,b],[2,3]);
(%o2) [[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1],
[1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3]]
(%i3) expand((1+a+a^2)*(1+b+b^2+b^3));
2 3
3
3
2 2
2
2
2
(%o3) a b + a b + b + a b + a b + b + a b + a b
2
+ b + a + a + 1
donde [0, 1] se asocia al termino b y [2, 3] a a2 b3 .
Antes de hacer uso de esta funcion ejec
utese load("makeOrders").

Captulo 65: minpack

909

65 minpack
65.1 Introducci
on a minpack
Minpack es una traducci
on a Common Lisp (via f2cl) de la librera MINPACK escrita en
Fortran, tal como se puede obtener de Netlib.

65.2 Funciones y variables para minpack


minpack_lsquares (flist, varlist, guess [, tolerance, jacobian ])

[Funcion]
Calcula el punto x que minimiza la suma de los cuadrados de las funciones de la lista
flist. Las variables se escriben en la lista varlist. El argumento guess debe guardar
una estimaci
on inicial del punto optimo.
Los argumentos opcionales tolerance y jacobian permiten mantener cierto control
sobre el algoritmo; tolerance es el error relativo estimado que se desea en la suma
de cuadrados, mientras que jacobian puede utilizarse para especificar el jacobiano.
Si jacobian no se suministra, o se le da el valor true, el que ya tiene por defecto,
el jacobiano se calcula a partir de flist. Si jacobian vale false, se utilizara una
aproximaci
on numerica.
minpack_lsquares devuelve una lista, siendo su primer elemento la solucion estimada, el segundo la suma de cuadrados y el tercero indica la bondad del algoritmo,
siendo sus posibles valores los siguientes:
0

N
umero incorrecto de parametros.

El algoritmo estima que el error relativo de la suma de cuadrados es,


como mucho, igual a tolerance.

El algoritmo estima que el error relativo entre x y la solucion es, como


mucho, igual a tolerance.

Las dos condiciones anteriores se cumplen.

El vector formado por las funciones evaluadas en el punto x es ortogonal


a las columnas del jacobiano dentro de la precision de la maquina.

El n
umero de llamadas a las funciones ha alcanzado 100*(n+1), siendo n
el n
umero de variables.

La tolerancia es demasiado peque~


na, no siendo posible reducir mas la
suma de cuadrados.

La tolerancia es demasiado peque~


na, no siendo posible mejorar la solucion
aproximada x.
/* Problem 6: Powell singular function */
(%i1) powell(x1,x2,x3,x4) :=
[x1+10*x2, sqrt(5)*(x3-x4), (x2-2*x3)^2,
sqrt(10)*(x1-x4)^2]$
(%i2) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4],
[3,-1,0,1]);

910

Manual de Maxima

(%o2) [[1.652117596168394e-17, - 1.652117596168393e-18,


2.643388153869468e-18, 2.643388153869468e-18],
6.109327859207777e-34, 4]
/* Same problem but use numerical approximation to Jacobian */
(%i3) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4],
[3,-1,0,1], jacobian = false);
(%o3) [[5.060282149485331e-11, - 5.060282149491206e-12,
2.179447843547218e-11, 2.179447843547218e-11],
3.534491794847031e-21, 5]

minpack_solve (flist, varlist, guess [, tolerance, jacobian ])

[Funcion]
Resuelve un sistema de n ecuaciones con n incognitas. Las n ecuaciones forman la
lista flist, estando la lista varlist formada por las incognitas. El argumento guess es
una estimaci
on inicial de la solucion.
Los argumentos opcionales tolerance y jacobian permiten mantener cierto control
sobre el algoritmo; tolerance es el error relativo estimado que se desea en la suma
de cuadrados, mientras que jacobian puede utilizarse para especificar el jacobiano.
Si jacobian no se suministra, o se le da el valor true, el que ya tiene por defecto,
el jacobiano se calcula a partir de flist. Si jacobian vale false, se utilizara una
aproximaci
on numerica.
minpack_solve devuelve una lista, siendo su primer elemento la solucion estimada,
el segundo la suma de cuadrados y el tercero indica la bondad del algoritmo, siendo
sus posibles valores los siguientes:
0

N
umero incorrecto de parametros.

El algoritmo estima que el error relativo de la suma de cuadrados es,


como mucho, igual a tolerance.

El n
umero de llamadas a las funciones ha alcanzado 100*(n+1), siendo n
el n
umero de inc
ognitas.

La tolerancia es demasiado peque~


na, no siendo posible reducir mas la
suma de cuadrados.

El algoritmo no progresa adecuadamente.

Captulo 66: mnewton

911

66 mnewton
66.1 Funciones y variables para mnewton
newtonepsilon

[Variable opcional]

Valor por defecto: 10.0^(-fpprec/2)


Precisi
on que determina cuando la funcion mnewton ha conseguido una convergencia
aceptable. Si newtonepsilon es un n
umero decimal de precision arbitraria (bigfloat),
entonces mnewton realiza los calculos en ese formato.
Vease tambien mnewton.
[Variable opcional]
Valor por defecto: 50
N
umero m
aximo de iteraciones para la funcion mnewton en caso de que no se produzca
convergencia, o de que esta se haga muy lenta.
Vease tambien mnewton.

newtonmaxiter

mnewton (FuncList,VarList,GuessList )

[Funcion]
Resoluci
on de sistemas de ecuaciones no lineales por el metodo de Newton. FuncList
es la lista de ecuaciones a resolver, VarList es la lista con los nombres de las incognitas
y GuessList es la lista de aproximaciones iniciales.
La soluci
on se devuelve en el mismo formato que lo hace la funcion solve(). Si no
se le encuentra soluci
on al sistema, se obtiene [] como respuesta.
Esta funci
on se controla con las variables globales newtonepsilon y newtonmaxiter.
(%i1) load("mnewton")$
(%i2) mnewton([x1+3*log(x1)-x2^2, 2*x1^2-x1*x2-5*x1+1],
[x1, x2], [5, 5]);
(%o2) [[x1 = 3.756834008012769, x2 = 2.779849592817897]]
(%i3) mnewton([2*a^a-5],[a],[1]);
(%o3)
[[a = 1.70927556786144]]
(%i4) mnewton([2*3^u-v/u-5, u+2^v-4], [u, v], [2, 2]);
(%o4) [[u = 1.066618389595407, v = 1.552564766841786]]
La variable newtonepsilon controla la precision de las aproximaciones. Tambien
controla si los c
alculos se realizan con precision doble o arbitraria (bigfloats).
(%i1) load(mnewton)$
(%i2) (fpprec : 25, newtonepsilon : bfloat(10^(-fpprec+5)))$
(%i3) mnewton([2*3^u-v/u-5, u+2^v-4], [u, v], [2, 2]);
(%o3) [[u = 1.066618389595406772591173b0,
v = 1.552564766841786450100418b0]]
Antes de hacer uso de esta funcion ejec
utese load("mnewton"). Veanse tambien
newtonepsilon y newtonmaxiter.

Captulo 67: numericalio

913

67 numericalio
67.1 Introducci
on a numericalio
El paquete numericalio define funciones para leer y escribir ficheros de datos y flujos. Las
funciones de entrada y salida en formato texto pueden leer y escribir n
umeros (enteros,
decimales o decimales grandes), smbolos y cadenas. Las funciones de entrada y salida en
formato binario s
olo pueden leer y escribir n
umeros decimales.
Si ya existe una lista, matriz o array para almacenar los datos de entrada, las funciones
de entrada de numericalio pueden escribir los datos directamente en estos objetos. En
caso contrario, numericalio tratara de generar el objeto apropiado para almacenar estos
datos.

67.1.1 Entrada y salida en formato texto


In plain-text input and output, it is assumed that each item to read or write is an atom:
En la entrada y salida de datos en formato texto se supone que cada dato es un atomo: un
n
umero entero, decimal, decimal grande, una cadena o un smbolo; no se admiten fracciones,
n
umeros complejos o cualquier otra expresion no atomica. Estas funciones pueden llegar
a realizar operaciones v
alidas con expresiones no atomicas, pero estos resultados no se
documentan y est
an sujetos a cambios ulteriores.
Los atomos, tanto en los ficheros de entrada como en los de salida, tienen el mismo
formato que en los ficheros por lotes de Maxima o en la consola interactiva. En particular,
las cadenas deben encerrarse entre comillas dobles, la barra invertida \ evita cualquier
interpretaci
on especial del car
acter siguiente, y el smbolo de interrogacion ? se reconoce
como el comienzo de un smbolo de Lisp. No se reconoce ning
un caracter de continuacion
de lnea interrumpida.

67.1.2 Separadores v
alidos para lectura
Las funciones para la entrada y salida de datos en formato texto tiene un argumento opcional, separator flag, para indicar que caracter se utiliza como separador.
Para la entrada de texto se reconocen los siguientes valores de la variable separator flag:
comma para los valores separados por comas, pipe para los valores separados por el caracter
de la barra vertical |, semicolon para los valores separados por punto y coma ;, y space
para cuando los valores se separan por espacios o tabulaciones. Si el nombre del fichero
tiene extensi
on .csv y no se especifica el argumento separator flag, se tomara por defecto
comma. Si el fichero tiene cualquier otra extension diferente de .csv y no se especifica
separator_flag, se usar
a por defecto space.
En la entrada de texto, varios espacios y tabulaciones sucesivos cuentan como un u
nico
separador. Sin embargo, varias comas, barras verticales o punto y comas sucesivos se
interpretan que tienen el smbolo false entre ellos; por ejemplo, 1234,,Foo se interpreta
lo mismo que si fuese 1234,false,Foo. En la salida, los atomos false deben escribirse
explcitamente, por lo que la lista [1234, false, Foo] debe escribirse 1234,false,Foo.

67.1.3 Separadores v
alidos para escritura
Para la entrada de texto se acepta tab como valor de separator flag para datos separados
por tabuladores, as como comma, pipe, semicolon y space.

914

Manual de Maxima

En la escritura de texto, el
atomofalse se escribe tal cual y una lista [1234, false,
Foo] se escribe 1234,false,Foo.

67.1.4 Entrada y salida de decimales en formato binario


Las funciones de numericalio pueden leer y escribir n
umeros decimales en coma flotante
de 8 bytes del est
andar IEEE 754. Estos n
umeros se pueden escribir empezando por el byte
menos significativo o por el m
as significativo, seg
un lo indique la variable global assume_
external_byte_order. Por defecto, numericalio los almacena con el byte mas significativo primero.
Cualesquiera otros tipos de decimales son transformados a 8 bytes. El paquete
numericalio no puede leer ni escribir datos binarios no numericos.
Ciertos entornos Lisp no reconocen valores especiales del estandar IEEE 754 (mas o
menos infinito, valores no numericos, valores no normales). El efecto que pueda producir la
lectura de tales valores por parte de numericalio es imprevisible.
numericalio incluye funciones para abrir un flujo de lectura o escritura de flujos de
bytes.

67.2 Funciones y variables para entrada y salida en formato


texto
(S )
[Funcion]
(S, M )
[Funcion]
(S, separator_flag )
[Funcion]
(S, M, separator_flag )
[Funcion]
read_matrix(S ) lee la fuente S y devuelve su contenido completo en forma de matriz.
El tama~
no de la matriz se deduce de los datos de entrada: cada fila del fichero forma
una fila de la matriz. Si hay filas con diferente n
umero de elementos, read_matrix
emite un mensaje de error.
read_matrix(S, M ) lee la fuente S y va almacenando su contenido en la matriz M,
hasta que M este llena o hasta que se consuma la fuente. Los datos se almacenan fila
a fila. Los datos de entrada no necesitan tener el mismo n
umero de filas y columnas
que M.
La fuente S puede ser el nombre de un fichero o de un flujo.
Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.

read_matrix
read_matrix
read_matrix
read_matrix

read_array (S, A )
read_array (S, A, separator_flag )

[Funcion]
[Funcion]
Guarda el contenido de la fuente S en el array A, hasta que A este lleno o hasta que
se consuma la fuente. Los datos se almacenan fila a fila. Los datos de entrada no
necesitan tener el mismo n
umero de filas y columnas que A.
La fuente S puede ser el nombre de un fichero o de un flujo.
Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.

Captulo 67: numericalio

915

read_hashed_array (S, A )
read_hashed_array (S, A, separator_flag )

[Funcion]
[Funcion]
Lee la fuente S y devuelve su contenido completo en forma de array de claves. La
fuente S puede ser el nombre de un fichero o de un flujo.
read_hashed_array interpreta el primer elemento de cada fila como una clave, asociando el resto de la fila, en formato de lista, a la clave. Por ejemplo, la secuencia
567 12 17 32 55 equivale a A[567]: [12, 17, 32, 55]$. Las filas no necesitan tener
todas ellas el mismo n
umero de elementos.

Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.

read_nested_list (S )
read_nested_list (S, separator_flag )

[Funcion]
[Funcion]
Lee la fuente S y devuelve su contenido completo en forma de lista anidada. La fuente
S puede ser el nombre de un fichero o de un flujo.
read_nested_list devuelve una lista que tiene una sublista por cada fila de entrada.
Los filas de entrada no necesitan tener todas ellas el mismo n
umero de elementos.
Las filas en blanco no se ignoran, sino que se convierten en listas vacas
Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.
(S )
[Funcion]
(S, L )
[Funcion]
(S, separator_flag )
[Funcion]
(S, L, separator_flag )
[Funcion]
read_list(S ) lee la fuente S y devuelve su contenido como una lista simple.

read_list
read_list
read_list
read_list

read_list(S, L ) guarda el contenido de la fuente S en la lista L, hasta que L este


llena o hasta que se consuma la fuente.
La fuente S puede ser el nombre de un fichero o de un flujo.
Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.

write_data (X, D )
write_data (X, D, separator_flag )

[Funcion]
[Funcion]

Escribe el objeto X en el destino D.


write_data escribe una matriz fila a fila; cada lnea de entrada se corresponde con
una fila.
write_data escribe un array creado por array o make_array fila a fila, con una nueva
lnea al final de cada bloque de datos. Los bloques de mayores dimensiones se separan
con lneas adicionales.
write_data escribe un array de claves con cada clave seguida de su lista asociada en
una sola lnea.

916

Manual de Maxima

write_data escribe una lista anidada con una sublista por lnea.
write_data escribe una lista simple en una u
nica fila.
El destino D puede ser el nombre de un fichero o un flujo; en el primer caso, la variable
global file_output_append controla si el fichero de salida es ampliado con la nueva
informaci
on o si se borra antes; en el segundo caso, no se realiza ning
un tipo de accion
por parte de write_data despues de que se hayan escrito los datos; en particular, el
flujo se mantiene abierto.
Los valores aceptados para separator flag son: comma, pipe, semicolon y space. Si
no se especifica un valor para separator flag, se supone que los datos estan separados
por espacios.

67.3 Funciones y variables para entrada y salida en formato


binario
assume_external_byte_order (byte_order_flag )

[Funcion]
Le indica a numericalio el orden de los bytes en que debe leer y escribir los datos.
Los valores que reconoce byte order flag son dos: lsb, que indica que el byte menos
significativo debe ser el primero, y msb, que indica que el byte mas significativo es el
que debe ir en primer lugar.
En caso de no hacer ninguna seleccion, numericalio interpreta que es el byte m
as
significativo el que se debe leer o escribir primero.

openr_binary (file_name )

[Funcion]
Devuelve un flujo de entrada de bytes no signados para la lectura del fichero de nombre
file name.

openw_binary (file_name )

[Funcion]
Devuelve un flujo de entrada de bytes no signados para la escritura en el fichero de
nombre file name.

opena_binary (file_name )

[Funcion]
Devuelve un flujo de entrada de bytes no signados para a~
nadir datos al fichero de
nombre file name.

read_binary_matrix (S, M )

[Funcion]
Lee n
umeros decimales en coma flotante de 8 bytes desde la fuente S y los va almacenando en la matriz M, bien hasta que M se llene, o bien hasta que la fuente se haya
consumido. La matriz M se rellena fila a fila.
La fuente S puede ser el nombre de un fichero o un flujo.
El orden de los bytes de los datos procedentes de la fuente se especifican mediante
assume_external_byte_order.

read_binary_array (S, A )

[Funcion]
Lee n
umeros decimales en coma flotante de 8 bytes desde la fuente S y los va almacenando en el array A, bien hasta que A se llene, o bien hasta que la fuente se haya
consumido. A debe ser un array creado por array o por make_array. El array A se
rellena fila a fila.

Captulo 67: numericalio

917

La fuente S puede ser el nombre de un fichero o un flujo.


El orden de los bytes de los datos procedentes de la fuente se especifican mediante
assume_external_byte_order.

read_binary_list (S )
read_binary_list (S, L )

[Funcion]
[Funcion]
read_binary_list(S ) lee el contenido completo de la fuente de datos S como una
secuencia de n
umeros decimales en coma flotante de 8 bytes en formato binario,
devolviendolos en forma de lista.
La fuente S puede ser el nombre de un fichero o un flujo.
read_binary_list(S, L ) lee n
umeros decimales en coma flotante de 8 bytes en formato binario desde la fuente S y los almacena en la lista L, bien hasta que esta este
llena, o bien hasta que se consuman los datos de la fuente.
El orden de los bytes de los datos procedentes de la fuente se especifican mediante
assume_external_byte_order.

write_binary_data (X, D )

[Funcion]
Escribe el objeto X, que contiene n
umeros decimales en coma flotante de 8 bytes
del est
andar IEEE 754, en el destino D. Cualesquiera otros tipos de decimales son
transformados a 8 bytes. write_binary_data no puede escribir datos no numericos.
El objeto X puede ser una lista, una lista anidada, una matriz, o un array creado con
array o make_array; X no puede ser ni un array no declarado ni cualquier otro tipo
de objeto distinto a los citados. write_binary_data escribe las listas anidadas, las
matrices y los arrays fila a fila.
El destino D puede ser el nombre de un fichero o un flujo; en el primer caso, la
variable global file_output_append controla si el fichero de salida es ampliado con
la nueva informaci
on o si se borra antes; en el segundo caso, no se realiza ning
un tipo
de acci
on por parte de write_binary_data despues de que se hayan escrito los datos;
en particular, el flujo se mantiene abierto.
El orden de los bytes de los datos procedentes de la fuente se especifican mediante
assume_external_byte_order.

Captulo 68: opsubst

919

68 opsubst
68.1 Funciones y variables para opsubst
opsubst (f,g,e )
opsubst (g =f,e )
opsubst ([g1 =f1,g2 =f2,..., gn =fn ],e )

[Funcion]
[Funcion]
[Funcion]
La funci
on opsubst es similar a la funcion subst, excepto por el hecho de que opsubst
tan solo hace sustituciones de operadores en las expresiones. En general, si f es un
operador en la expresi
on e, lo cambia por g en la expresion e.

Para determinar el operador, opsubst asigna a inflag el valor true, lo cual significa
que opsubst sustituye el operador interno de la expresion, no el mostrado en la salida
formateada.
Ejemplo:
(%i1) load (opsubst)$
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)

opsubst(f,g,g(g(x)));
f(f(x))
opsubst(f,g,g(g));
f(g)
opsubst(f,g[x],g[x](z));
f(z)
opsubst(g[x],f, f(z));
g (z)
x
opsubst(tan, sin, sin(sin));
tan(sin)
opsubst([f=g,g=h],f(x));
h(x)

Internamente, Maxima no hace uso de los operadores de negacion unaria, de division


ni de la resta, por lo que:
(%i8) opsubst("+","-",a-b);
(%o8)
a - b
(%i9) opsubst("f","-",-a);
(%o9)
- a
(%i10) opsubst("^^","/",a/b);
a
(%o10)
b
La representaci
on interna de -a*b es *(-1,a,b), de modo que
(%i11) opsubst("[","*", -a*b);
(%o11)
[- 1, a, b]
Si alguno de los operadores no es un smbolo de Maxima, se emitira un mensaje de
error:

920

Manual de Maxima

(%i12) opsubst(a+b,f, f(x));


Improper name or value in functional position:
b + a
-- an error. Quitting. To debug this try debugmode(true);
Sin embargo se permiten operadores subindicados:
(%i13) opsubst(g[5],f, f(x));
(%o13)
g (x)
5
Antes de hacer uso de esta funcion ejec
utese load("opsubst").

Captulo 69: orthopoly

921

69 orthopoly
69.1 Introducci
on a polinomios ortogonales
El paquete orthopoly contiene funciones para la evaluacion simbolica y numerica de diversos tipos de polinomios ortogonales, como los de Chebyshev, Laguerre, Hermite, Jacobi,
Legendre y ultraesfericos (Gegenbauer). Ademas, orthopoly soporta las funciones esfericas
de Bessel, Hankel y arm
onicas.
Referencias:
Abramowitz y Stegun, Handbook of Mathematical Functions, (1972, decima
reimpresi
on, captulo 22)
Gradshteyn y Ryzhik, Table of Integrals, Series y Products, (1980, edicion corregida y
ampliada)
Eugen Merzbacher, Quantum Mechanics, (1970, segunda edicion)
El paquete orthopoly, junto con su documentacion, fue escrito por Barton Willis de la
Universidad de Nebraska en Kearney. El paquete se distribuye con la licencia GNU General
Public License (GPL).

69.1.1 Inici
andose con orthopoly
load (orthopoly) carga el paquete orthopoly.
Para obtener el polinomio de Legendre de tercer orden,
(%i1) legendre_p (3, x);
3
2
5 (1 - x)
15 (1 - x)
(%o1)
- ---------- + ----------- - 6 (1 - x) + 1
2
2
Para expresarlo como una suma de potencias de x, aplquese ratsimp o rat al resultado.
(%i2) [ratsimp (%), rat (%)];
3
3
5 x - 3 x 5 x - 3 x
(%o2)/R/
[----------, ----------]
2
2
De forma alternativa, conviertase el segundo argumento de to legendre_p (su variable
principal) a una expresi
on racional canonica (canonical rational expression, CRE)).
(%i1) legendre_p (3, rat (x));
3
5 x - 3 x
(%o1)/R/
---------2
Para la evaluaci
on numerica, orthopoly hace uso del analisis de error de ejecucion para
estimar una cota superior del error. Por ejemplo,
(%i1) jacobi_p (150, 2, 3, 0.2);
(%o1) interval(- 0.062017037936715, 1.533267919277521E-11)

922

Manual de Maxima

Los intervalos tienen la forma interval (c, r ), donde c es el centro y r el radio del
intervalo. Puesto que Maxima no soporta aritmetica de intervalos, en algunas situaciones,
como en los gr
aficos, puede ser necesario ignorar el error y utilizar el centro del intervalo.
Para conseguirlo conviene asignar a la variable orthopoly_returns_intervals el valor
false.
(%i1) orthopoly_returns_intervals : false;
(%o1)
false
(%i2) jacobi_p (150, 2, 3, 0.2);
(%o2)
- 0.062017037936715
Vease la secci
on Evaluaci
on numerica para mas informacion.
La mayor parte de las funciones de orthopoly tienen una propiedad gradef; as,
(%i1) diff (hermite (n, x), x);
(%o1)
2 n H
(x)
n - 1
(%i2) diff (gen_laguerre (n, a, x), x);
(a)
(a)
n L
(x) - (n + a) L
(x) unit_step(n)
n
n - 1
(%o2)
-----------------------------------------x
La funci
on unit_step del segundo ejemplo evita el error que aparecera al evaluar la
expresion con n igual a 0.
(%i3) ev (%, n = 0);
(%o3)
0
La propiedad "gradef" s
olo se aplica a la variable principal; derivadas respecto de las
otras variables dar
an lugar normalmente a mensajes de error; por ejemplo,
(%i1) diff (hermite (n, x), x);
(%o1)
2 n H
(x)
n - 1
(%i2) diff (hermite (n, x), n);
Maxima doesnt know the derivative of hermite with
respect the first argument
-- an error. Quitting. To debug this try debugmode(true);
Generalmente, las funciones de orthopoly se distribuyen sobre listas y matrices. Al
objeto de que la evaluaci
on se realice completamente, las variables opcionales doallmxops y
listarith deben valer ambas true, que es el valor por defecto. Para ilustrar la distribucion
sobre matrices sirve el siguiente ejemplo
(%i1) hermite (2, x);
2
(%o1)
- 2 (1 - 2 x )
(%i2) m : matrix ([0, x], [y, 0]);
[ 0 x ]
(%o2)
[
]
[ y 0 ]

Captulo 69: orthopoly

923

(%i3) hermite (2, m);


[
[
- 2
(%o3)
[
[
2
[ - 2 (1 - 2 y )

2 ]
- 2 (1 - 2 x ) ]
]
]
- 2
]

En el segundo ejemplo, el elemento i, j-esimo es hermite (2, m[i,j]), que no es lo


mismo que calcular -2 + 4 m . m, seg
un se ve en el siguiente ejemplo.
(%i4) -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
[ 4 x y - 2
0
]
(%o4)
[
]
[
0
4 x y - 2 ]
Si se eval
ua una funci
on en un punto fuera de su dominio de definicion, generalmente
orthopoly devolver
a la funci
on sin evaluar. Por ejemplo,
(%i1) legendre_p (2/3, x);
(%o1)

P
(x)
2/3

orthopoly da soporte a la traduccion de expresiones al formato TeX y la representacion


bidimensional en el terminal.
(%i1) spherical_harmonic (l, m, theta, phi);
m
(%o1)
Y (theta, phi)
l
(%i2) tex (%);
$$Y_{l}^{m}\left(\vartheta,\varphi\right)$$
(%o2)
false
(%i3) jacobi_p (n, a, a - b, x/2);
(a, a - b) x
(%o3)
P
(-)
n
2
(%i4) tex (%);
$$P_{n}^{\left(a,a-b\right)}\left({{x}\over{2}}\right)$$
(%o4)
false

69.1.2 Limitaciones
Cuando una expresi
on contenga varios polinomios ortogonales con ordenes simbolicos, es
posible que aunque la expresi
on sea nula, Maxima sea incapaz de simplificarla a cero, por
lo que si se divide por esta cantidad, apareceran problemas. Por ejemplo, la siguiente
expression se anula para enteros n mayores que 1, no pudiendo Maxima reducirla a cero.
(%i1) (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x)
+ (1 - n) * legendre_p (n - 2, x);
(%o1) (2 n - 1) P
(x) x - n P (x) + (1 - n) P
(x)
n - 1
n
n - 2
Para un valor especfico de n se puede reducir la expresion a cero.

924

Manual de Maxima

(%i2) ev (% ,n = 10, ratsimp);


(%o2)
0
Generalmente, la forma polinomial de un polinomio ortogonal no es la mas apropiada
para su evaluaci
on numerica. Aqu un ejemplo.
(%i1) p : jacobi_p (100, 2, 3, x)$
(%i2) subst (0.2, x, p);
(%o2)
3.4442767023833592E+35
(%i3) jacobi_p (100, 2, 3, 0.2);
(%o3) interval(0.18413609135169, 6.8990300925815987E-12)
(%i4) float(jacobi_p (100, 2, 3, 2/10));
(%o4)
0.18413609135169
Este resultado se puede mejorar expandiendo el polinomio y evaluando a continuacion,
lo que da una aproximaci
on mejor.
(%i5) p : expand(p)$
(%i6) subst (0.2, x, p);
(%o6) 0.18413609766122982
Sin embargo esto no vale como regla general; la expansion del polinomio no siempre da
como resultado una expresi
on m
as facil de evaluar numericamente. Sin duda, la mejor manera de hacer la evaluaci
on numerica consiste en hacer que uno o mas de los argumentos de
la funcion sean decimales en coma flotante; de esta forma se utilizaran algoritmos decimales
especializados para hacer la evaluacion.
La funci
on float de Maxima trabaja de forma indiscriminada; si se aplica float a
una expresi
on que contenga un polinomio ortogonal con el grado u orden simbolico, estos
se pueden transformar en decimales y la expresion no ser evaluada de forma completa.
Considerese
(%i1) assoc_legendre_p (n, 1, x);
1
(%o1)
P (x)
n
(%i2) float (%);
1.0
(%o2)
P
(x)
n
(%i3) ev (%, n=2, x=0.9);
1.0
(%o3)
P
(0.9)
2
La expresi
on en (%o3) no da como resultado un decimal en coma flotante; orthopoly no
reconoce decimales donde espera que haya enteros. De forma semejante, la evaluacion
numerica de la funci
on pochhammer para ordenes que excedan pochhammer_max_index
puede ser problem
atica; considerese
(%i1) x : pochhammer (1, 10), pochhammer_max_index : 5;
(%o1)
(1)
10
Aplicando float no da para x un valor decimal

Captulo 69: orthopoly

(%i2) float (x);


(%o2)

925

(1.0)
10.0

A fin de evaluar x como decimal, es necesario asignar a pochhammer_max_index en valor


11 o mayor y aplicar float a x.
(%i3) float (x), pochhammer_max_index : 11;
(%o3)
3628800.0
El valor por defecto de pochhammer_max_index es 100; cambiese este valor tras cargar
el paquete orthopoly.
Por u
ltimo, tengase en cuenta que las referencias bibliograficas no coinciden a la hora de
definir los polinomios ortogonales; en orthopoly se han utilizado normalmente las convenciones seguidas por Abramowitz y Stegun.
Cuando se sospeche de un fallo en orthopoly, compruebense algunos casos especiales a
fin de determinar si las definiciones de las que el usuario parte coinciden con las utilizadas
por el paquete orthopoly. A veces las definiciones difieren por un factor de normalizacion;
algunos autores utilizan versiones que hacen que las familias sean ortogonales en otros
intervalos diferentes de (1, 1). As por ejemplo, para definir un polinomio de Legendre
ortogonal en (0, 1) defnase
(%i1) shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$
(%i2) shifted_legendre_p (2, rat (x));
2
(%o2)/R/
6 x - 6 x + 1
(%i3) legendre_p (2, rat (x));
2
3 x - 1
(%o3)/R/
-------2

69.1.3 Evaluaci
on num
erica
La mayor parte de las funciones de orthopoly realizan analisis de errores en tiempo de
ejecucion para estimar el error en la evaluacion decimal, a excepcion de las funciones esfericas
de Bessel y los polinomios asociados de Legendre de segunda especie. Para la evaluacion
numerica, las funciones esfericas de Bessel hacen uso de funciones SLATEC. No se lleva
a cabo ning
un metodo especial de evaluacion numerica para los polinomios asociados de
Legendre de segunda especie.
Es posible, aunque improbable, que el error obtenido en las evaluaciones numericas
exceda al error estimado.
Los intervalos tienen la forma interval (c, r ), siendo c el centro del intervalo y r su
radio. El centro del intervalo puede ser un n
umero complejo, pero el radio sera siempre un
n
umero real positivo.
He aqu un ejemplo:
(%i1) fpprec : 50$
(%i2) y0 : jacobi_p (100, 2, 3, 0.2);

926

Manual de Maxima

(%o2) interval(0.1841360913516871, 6.8990300925815987E-12)


(%i3) y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
(%o3) 1.8413609135168563091370224958913493690868904463668b-1
Se comprueba que el error es menor que el estimado
(%i4) is (abs (part (y0, 1) - y1) < part (y0, 2));
(%o4)
true
En este ejemplo el error estimado es una cota superior para el error verdadero.
Maxima no da soporte a la aritmetica de intervalos.
(%i1) legendre_p (7, 0.1) + legendre_p (8, 0.1);
(%o1) interval(0.18032072148437508, 3.1477135311021797E-15)
+ interval(- 0.19949294375000004, 3.3769353084291579E-15)
El usuario puede definir operadores aritmeticos para los intervalos. Para definir la suma
de intervalos se puede hacer
(%i1) infix ("@+")$
(%i2) "@+"(x,y) := interval (part (x, 1) + part (y, 1),
part (x, 2) + part (y, 2))$
(%i3) legendre_p (7, 0.1) @+ legendre_p (8, 0.1);
(%o3) interval(- 0.019172222265624955, 6.5246488395313372E-15)
Las rutinas especiales para c
alculo numerico son llamadas cuando los argumentos son
complejos. Por ejemplo,
(%i1) legendre_p (10, 2 + 3.0*%i);
(%o1) interval(- 3.876378825E+7 %i - 6.0787748E+7,
1.2089173052721777E-6)
Comp
arese con el valor verdadero.
(%i1) float (expand (legendre_p (10, 2 + 3*%i)));
(%o1)
- 3.876378825E+7 %i - 6.0787748E+7
Adem
as, cuando los argumentos son n
umeros decimales grandes (big floats), se realizan
llamadas a las rutinas numericas especiales; sin embargo, los decimales grandes se convierten
previamente a doble precisi
on y de este tipo seran tambien los resultados.
(%i1) ultraspherical (150, 0.5b0, 0.9b0);
(%o1) interval(- 0.043009481257265, 3.3750051301228864E-14)

69.1.4 Gr
aficos y orthopoly
Para representar gr
aficamente expresiones que contengan polinomios ortogonales se deben
hacer dos cosas:
1. Asignar a la variable opcional orthopoly_returns_intervals el valor false,
2. Comentar (con ap
ostrofo) las llamadas a las funciones de orthopoly.
Si las llamadas a las funciones no se comentan, Maxima las eval
ua a polinomios antes
de hacer el gr
afico, por lo que el c
odigo especializado en el calculo numerico no es llamado.
Aqu hay un ejemplo de c
omo se debe hacer para representar graficamente una expresion
que contiene un polinomio de Legendre:

Captulo 69: orthopoly

927

(%i1) plot2d ((legendre_p (5, x)), [x, 0, 1]),


orthopoly_returns_intervals : false;
(%o1)
1

-63*(1-x)5/8+315*(1-x)4/8-70*(1-x)3+105*(1-x)2/2-15*(1-x)+1

0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6

0.2

0.4

0.6

0.8

La expresi
on legendre_p (5, x) se comenta completamente, que no es lo mismo que
comentar el nombre de la funci
on, como en legendre_p (5, x ).

69.1.5 Miscel
anea de funciones
El paquete orthopoly define el smbolo de Pochhammer y la funcion de escalon unidad en
sentencias gradef.
Para convertir los smbolos de Pochhammer en cocientes o funciones gamma, hagase uso
de makegamma.
(%i1) makegamma (pochhammer (x, n));
gamma(x + n)
(%o1)
-----------gamma(x)
(%i2) makegamma (pochhammer (1/2, 1/2));
1
(%o2)
--------sqrt(%pi)
Las derivadas del smbolo de Pochhammer se dan en terminos de la funcion psi.
(%i1) diff (pochhammer (x, n), x);
(%o1)
(x) (psi (x + n) - psi (x))
n
0
0
(%i2) diff (pochhammer (x, n), n);
(%o2)
(x) psi (x + n)
n
0
Es necesario tener cuidado con la expresion en (%o1), pues la diferencia de las funciones psi tiene polos cuando x = -1, -2, .., -n . Estos polos se cancelan con factores
de pochhammer (x, n ) haciendo que la derivada sea un polinomio de grado n - 1 si n es
entero positivo.
El smbolo de Pochhammer se define para ordenes negativos a traves de su representacion
como cociente de funciones gamma. Considerese

928

Manual de Maxima

(%i1) q : makegamma (pochhammer (x, n));


gamma(x + n)
(%o1)
-----------gamma(x)
(%i2) sublis ([x=11/3, n= -6], q);
729
(%o2)
- ---2240
De forma alternativa, es posible llegar a este resultado directamente.
(%i1) pochhammer (11/3, -6);
729
(%o1)
- ---2240
La funci
on de escal
on unidad es continua por la izquierda; as,
(%i1) [unit_step (-1/10), unit_step (0), unit_step (1/10)];
(%o1)
[0, 0, 1]
En caso de ser necesaria una funcion escalon unidad que no sea continua ni por la
izquierda ni por la derecha en el origen, se puede definir haciendo uso de signum; por
ejemplo,
(%i1) xunit_step (x) := (1 + signum (x))/2$
(%i2) [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
1
(%o2)
[0, -, 1]
2
No se debe redefinir la funci
on unit_step, ya que parte del codigo de orthopoly requiere
que la funci
on escal
on sea continua por la izquierda.

69.1.6 Algoritmos
En general, el paquete orthopoly gestiona la evaluacion simbolica a traves de la representacion hipergeometrica de los polinomios ortogonales. Las funciones hipergeometricas
se eval
uan utilizando las funciones (no documentadas) hypergeo11 y hypergeo21. Excepciones son las funciones de Bessel de ndice semi-entero y las funciones asociadas de Legendre
de segunda especie; las funciones de Bessel de ndice semi-entero se eval
uan utilizando una
representaci
on explcita, mientras que la funcion asociada de Legendre de segunda especie
se eval
ua recursivamente.
En cuanto a la evaluaci
on numerica, la mayor parte de las funciones se convierten a su
forma hipergeometrica, evalu
andolas mediante recursion. Ademas, las excepciones son las
funciones de Bessel de ndice semi-entero y las funciones asociadas de Legendre de segunda
especie. Las funciones de Bessel de ndice semi-entero se eval
uan numericamente con codigo
SLATEC.

69.2 Funciones y variables para polinomios ortogonales


assoc_legendre_p (n, m, x )
Funci
on asociada de Legendre de primera especie de grado n y orden m.

[Funcion]

Captulo 69: orthopoly

929

Referencia: Abramowitz y Stegun, ecuaciones 22.5.37, pagina 779, 8.6.6 (segunda


ecuaci
on), p
agina 334 y 8.2.5, pagina 333.

assoc_legendre_q (n, m, x )

[Funcion]

Funci
on asociada de Legendre de segunda especie de grado n y orden m.
Referencia: Abramowitz y Stegun, ecuaciones 8.5.3 y 8.1.8.

chebyshev_t (n, x )

[Funcion]

Funci
on de Chebyshev de primera especie.
Referencia: Abramowitz y Stegun, ecuacion 22.5.47, pagina 779.

chebyshev_u (n, x )

[Funcion]

Funci
on de Chebyshev de segunda especie.
Referencia: Abramowitz y Stegun, ecuacion 22.5.48, pagina 779.

gen_laguerre (n, a, x )

[Funcion]

Polinomio de Laguerre generalizado de grado n.


Referencia: Abramowitz y Stegun, ecuacion 22.5.54, pagina 780.

hermite (n, x )

[Funcion]

Polinomio de Hermite.
Referencia: Abramowitz y Stegun, ecuacion 22.5.55, pagina 780.

intervalp (e )

[Funcion]

Devuelve true si la entrada es un intervalo y false en caso contrario.

jacobi_p (n, a, b, x )

[Funcion]

Polinomio de Jacobi.
Los polinomios de Jacobi estan definidos para todo a y b; sin embargo, el peso (1 x )^a (1 + x )^b no es integrable para a <= -1 o b <= -1.
Referencia: Abramowitz y Stegun, ecuacion 22.5.42, pagina 779.

laguerre (n, x )

[Funcion]

Polinomio de Laguerre.
Referencia: Abramowitz y Stegun, ecuaciones 22.5.16 y 22.5.54, pagina 780.

legendre_p (n, x )

[Funcion]

Polinomio de Legendre de primera especie.


Referencia: Abramowitz y Stegun, ecuaciones 22.5.50 y 22.5.51, pagina 779.

legendre_q (n, x )

[Funcion]

Polinomio de Legendre de segunda especie.


Referencia: Abramowitz y Stegun, ecuaciones 8.5.3 y 8.1.8.

orthopoly_recur (f, args )

[Funcion]
Devuelve una relaci
on recursiva para la familia de funciones ortogonales f con argumentos args. La recursi
on se hace con respecto al grado del polinomio.

930

Manual de Maxima

(%i1) orthopoly_recur (legendre_p, [n, x]);


(2 n + 1) P (x) x - n P
(x)
n
n - 1
(%o1)
P
(x) = ------------------------------n + 1
n + 1
El segundo argumento de orthopoly_recur debe ser una lista con el n
umero correcto
de argumentos para la funci
on f ; si no lo es, Maxima emite un mensaje de error.
(%i1) orthopoly_recur (jacobi_p, [n, x]);
Function jacobi_p needs 4 arguments, instead it received 2
-- an error. Quitting. To debug this try debugmode(true);
Adem
as, si f no es el nombre de ninguna de las familias de polinomios ortogonales,
se emite otro mensaje de error.
(%i1) orthopoly_recur (foo, [n, x]);
A recursion relation for foo isnt known to Maxima
-- an error. Quitting. To debug this try debugmode(true);
[Variable opcional]
Valor por defecto: true
Si orthopoly_returns_intervals vale true, los n
umeros decimales en coma flotante
se retornan con el formato interval (c, r ), donde c es el centro del intervalo y r su
radio. El centro puede ser un n
umero complejo, en cuyo caso el intervalo es un disco
en el plano complejo.

orthopoly_returns_intervals

orthopoly_weight (f, args )

[Funcion]
Devuelve una lista con tres elementos; el primer elemento es la formula del peso para
la familia de polinomios ortogonales f con los argumentos dados por la lista args;
el segundo y tercer elementos son los extremos inferior y superior del intervalo de
ortogonalidad. Por ejemplo,
(%i1) w : orthopoly_weight (hermite, [n, x]);
2
- x
(%o1)
[%e
, - inf, inf]
(%i2) integrate (w[1] * hermite (3, x) * hermite (2, x), x, w[2], w[3]);
(%o2)
0
La variable principal de f debe ser un smbolo, en caso contrario Maxima emite un
mensaje de error.

pochhammer (n, x )

[Funcion]
Smbolo de Pochhammer. Para enteros no negativos n con n <= pochhammer_max_
index, la expresi
on pochhammer (x, n ) se eval
ua como el producto x (x + 1) (x +
2) ... (x + n - 1) si n > 0 y como 1 si n = 0. Para n negativo, pochhammer (x, n )
se define como (-1)^n / pochhammer (1 - x, -n ). As por ejemplo,
(%i1) pochhammer (x, 3);
(%o1)
x (x + 1) (x + 2)

Captulo 69: orthopoly

931

(%i2) pochhammer (x, -3);


1
- ----------------------(1 - x) (2 - x) (3 - x)
A fin de convertir el smbolo de Pochhammer en un cociente de funciones gamma
(vease Abramowitz y Stegun, ecuacion 6.1.22), hagase uso de makegamma. Por ejemplo,
(%i1) makegamma (pochhammer (x, n));
gamma(x + n)
(%o1)
-----------gamma(x)
Si n es mayor que pochhammer_max_index o si n es simbolico, pochhammer devuelve
una forma nominal.
(%i1) pochhammer (x, n);
(%o1)
(x)
n
(%o2)

[Variable opcional]
Valor por defecto: 100
pochhammer (n, x ) se eval
ua como un producto si y solo si n <= pochhammer_max_
index.
Ejemplos:
(%i1) pochhammer (x, 3), pochhammer_max_index : 3;
(%o1)
x (x + 1) (x + 2)
(%i2) pochhammer (x, 4), pochhammer_max_index : 3;
(%o2)
(x)
4
Referencia: Abramowitz y Stegun, ecuacion 6.1.16, pagina 256.

pochhammer_max_index

spherical_bessel_j (n, x )

[Funcion]

Funci
on de Bessel esferica de primera especie.
Referencia: Abramowitz y Stegun, ecuaciones 10.1.8, pagina 437 y 10.1.15, pagina
439.

spherical_bessel_y (n, x )

[Funcion]
Funci
on de Bessel esferica de segunda especie.
Referencia: Abramowitz y Stegun, ecuaciones 10.1.9, pagina 437 y 10.1.15, pagina
439.

spherical_hankel1 (n, x )

[Funcion]

Funci
on esferica de Hankel de primera especie.
Referencia: Abramowitz y Stegun, ecuacion 10.1.36, pagina 439.

spherical_hankel2 (n, x )
Funci
on esferica de Hankel de segunda especie.
Referencia: Abramowitz y Stegun, ecuacion 10.1.17, pagina 439.

[Funcion]

932

Manual de Maxima

spherical_harmonic (n, m, x, y )

[Funcion]

Funci
on arm
onica esferica.
Referencia: Merzbacher 9.64.

unit_step (x )

[Funcion]
Funci
on de escal
on unidad continua por la izquierda, definida de tal forma que unit_
step (x ) se anula para x <= 0 y es igual a 1 para x > 0.
En caso de ser necesaria una funcion escalon unidad que tome el valor 1/2 en el origen,
utilcese (1 + signum (x ))/2.

ultraspherical (n, a, x )
Polinomio ultraesferico o de Gegenbauer.
Referencia: Abramowitz y Stegun, ecuacion 22.5.46, pagina 779.

[Funcion]

Captulo 70: romberg

933

70 romberg
70.1 Funciones y variables para romberg
romberg (expr, x, a, b )
romberg (F, a, b )

[Funcion]
[Funcion]

Integra numericamente por el metodo de Romberg.


La llamada romberg(expr, x, a, b ) devuelve una estimacion de la integral
integrate(expr, x, a, b ). El argumento expr debe ser una expresion reducible a
un valor decimal en coma flotante cuando x es a su vez un n
umero decimal.
La llamada romberg(F, a, b ) devuelve una estimacion de la integral
integrate(F (x), x, a, b ), siendo x el u
nico argumento de F. El argumento F
debe ser una funci
on en Lisp o en Maxima que devuelva un valor decimal en coma
flotante cuando x es a su vez un n
umero decimal; F puede ser el nombre de una
funci
on de Maxima traducida o compilada.
La exactitud de romberg se controla con las variables globales rombergabs y
rombergtol. La funci
on romberg termina con exito su calculo cuando la diferencia
absoluta entre sucesivas aproximaciones es menor que rombergabs, o cuando la
diferencia relativa de sucesivas aproximaciones es menor que rombergtol. As,
cuando rombergabs vale 0.0 (su valor por defecto) solo tiene efecto el test del error
relativo basado en romberg.
La funci
on romberg reduce a mitades sucesivas la amplitud del paso un maximo de
rombergit veces antes de abandonar el computo; el n
umero maximo de evaluaciones
del integrando es, por consiguiente, igual a 2^rombergit. De no satisfacerse el criterio
de error establecido por rombergabs y rombergtol, romberg devuelve un mensaje de
error. La funci
on romberg hace siempre al menos rombergmin iteraciones; se trata
de una heurstica para evitar la finalizacion prematura cuando el integrando oscila
mucho.
La funci
on romberg eval
ua el integrando repetidamente tras asignarle a la variable
de integraci
on un valor especfico. Este criterio permite anidar llamadas a romberg
para calcular integrales m
ultiples. Sin embargo, los errores de calculo no tienen
en cuenta los errores de las integraciones anidadas, por lo que tales errores pueden
subestimarse. Por otro lado, metodos especialmente desarrollados para integraciones
m
ultiples pueden dar la misma exactitud con menos evaluaciones del integrando.
Para hacer uso de esta funci
on ejec
utese primero load(romberg).
Vease tambien QUADPACK, un conjunto de funciones para integracion numerica.
Ejemplos:
Una integraci
on unidimensional.
(%i1) load (romberg);
(%o1)
/usr/share/maxima/5.11.0/share/numeric/romberg.lisp
(%i2) f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000)
+ 1/((x - 3)^2 + 1/200);
1
1
1
(%o2) f(x) := -------------- + --------------- + --------------

934

Manual de Maxima

1
2
1
2
1
(x - 1) + --(x - 2) + ---(x - 3) + --100
1000
200
(%i3) rombergtol : 1e-6;
(%o3)
9.9999999999999995E-7
(%i4) rombergit : 15;
(%o4)
15
(%i5) estimate : romberg (f(x), x, -5, 5);
(%o5)
173.6730736617464
(%i6) exact : integrate (f(x), x, -5, 5);
(%o6) 10 sqrt(10) atan(70 sqrt(10))
+ 10 sqrt(10) atan(30 sqrt(10)) + 10 sqrt(2) atan(80 sqrt(2))
+ 10 sqrt(2) atan(20 sqrt(2)) + 10 atan(60) + 10 atan(40)
(%i7) abs (estimate - exact) / exact, numer;
(%o7)
7.5527060865060088E-11
Una integraci
on bidimensional, implementada mediante llamadas anidadas a romberg.
(%i1) load (romberg);
(%o1)
/usr/share/maxima/5.11.0/share/numeric/romberg.lisp
(%i2) g(x, y) := x*y / (x + y);
x y
(%o2)
g(x, y) := ----x + y
(%i3) rombergtol : 1e-6;
(%o3)
9.9999999999999995E-7
(%i4) estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
(%o4)
0.81930239628356
(%i5) assume (x > 0);
(%o5)
[x > 0]
(%i6) integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
3
2 log(-) - 1
9
2
9
(%o6)
- 9 log(-) + 9 log(3) + ------------ + 2
6
2
(%i7) exact : radcan (%);
26 log(3) - 26 log(2) - 13
(%o7)
- -------------------------3
(%i8) abs (estimate - exact) / exact, numer;
(%o8)
1.3711979871851024E-10
[Variable opcional]
Valor por defecto: 0.0
La exactitud de romberg se controla con las variables globales rombergabs y
rombergtol. La funci
on romberg termina con exito su calculo cuando la diferencia
absoluta entre sucesivas aproximaciones es menor que rombergabs, o cuando la
diferencia relativa de sucesivas aproximaciones es menor que rombergtol. As,

rombergabs

Captulo 70: romberg

935

cuando rombergabs vale 0.0 (su valor por defecto) solo tiene efecto el test del error
relativo basado en romberg.
Veanse tambien rombergit y rombergmin.

rombergit

[Variable opcional]

Valor por defecto: 11


La funci
on romberg reduce a mitades sucesivas la amplitud del paso un maximo de
rombergit veces antes de abandonar el computo; el n
umero maximo de evaluaciones
del integrando es, por consiguiente, igual a 2^rombergit. La funcion romberg hace
siempre al menos rombergmin iteraciones; se trata de una heurstica para evitar la
finalizaci
on prematura cuando el integrando oscila mucho.
Veanse tambien rombergabs y rombergtol.

rombergmin

[Variable opcional]

Valor por defecto: 0


La funci
on romberg hace siempre al menos rombergmin iteraciones; se trata de una
heurstica para evitar la finalizacion prematura cuando el integrando oscila mucho.
Veanse tambien rombergit, rombergabs y rombergtol.
[Variable opcional]
Valor por defecto: 1e-4
La exactitud de romberg se controla con las variables globales rombergabs y
rombergtol. La funci
on romberg termina con exito su calculo cuando la diferencia
absoluta entre sucesivas aproximaciones es menor que rombergabs, o cuando la
diferencia relativa de sucesivas aproximaciones es menor que rombergtol. As,
cuando rombergabs vale 0.0 (su valor por defecto) solo tiene efecto el test del error
relativo basado en romberg.
Veanse tambien rombergit y rombergmin.

rombergtol

Captulo 71: simplex

937

71 simplex
71.1 Introducci
on a simplex
El paquete simplex utiliza el algoritmo simplex para programacion lineal.
Ejemplo:
(%i1) load("simplex")$
(%i2) minimize_lp(x+y, [3*x+2*y>2, x+4*y>3]);
9
7
1
(%o2)
[--, [y = --, x = -]]
10
10
5

71.2 Funciones y variables para simplex


[Variable opcional]

epsilon_lp
Valor por defecto: 10^-8

Error epsilon utilizado en los calculos numericos de linear_program.


Vease tambien linear_program.

linear_program (A, b, c )

[Funcion]
La funci
on linear_program es una implementacion del algoritmo simplex. La instrucci
on linear_program(A, b, c) calcula un vector x tal que minimiza c.x bajo
las restricciones A.x = b y x >= 0. El argumento A es una matriz y los argumentos b
y c son listas.
La funci
on linear_program devuelve una lista que contiene el vector solucion x y el
valor mnimo de c.x. Si el problema no esta acotado, devuelve el mensaje "Problem
not bounded!" y si el problema no es factible, devuelve el mensaje "Problem not
feasible!".
Para usar esta funci
on,
load(simplex);.

carguese primero el paquete con la instruccion

Ejemplo:
(%i2)
(%i3)
(%i4)
(%i5)

A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$


b: [1,1,6]$
c: [1,-2,0,0]$
linear_program(A, b, c);
13
19
3
(%o5)
[[--, 4, --, 0], - -]
2
2
2
Veanse tambien minimize_lp, scale_lp y epsilon_lp.

maximize_lp (obj, cond, [pos ])

[Funcion]
Maximiza la funci
on objetivo lineal obj sujeta a ciertas restricciones lineales cond.
Vease minimize_lp para una descripcion detallada de los argumentos y de la respuesta dada por esta funci
on.

938

Manual de Maxima

minimize_lp (obj, cond, [pos ])

[Funcion]
Minimiza la funci
on objetivo lineal obj sujeta a ciertas restricciones lineales cond,
siendo esta una lista de ecuaciones o inecuaciones lineales. En las inecuaciones estrictas se reemplaza > por >= y < por <=. El argumento opcional pos es una lista de
variables de decisi
on que se suponen positivas.
Si el mnimo existe, minimize_lp devuelve una lista que contiene el valor mnimo de
la funci
on objetivo y una lista de valores para las variables de decision con los que
se alcanza el mnimo. Si el problema no esta acotado, devuelve el mensaje "Problem
not bounded!" y si el problema no es factible, devuelve el mensaje "Problem not
feasible!".
Las variables de decisi
on no se suponen no negativas. Si todas las variables de decision
son no negativas, asgnese el valor true a la variable nonegative_lp. Si solo algunas
de las variables de decisi
on son positivas, lstense en el argumento opcional pos, lo
cual es m
as eficiente que a~
nadir restricciones.
La funci
on minimize_lp utiliza el algoritmo simplex implementado en la funcion
linear_program de Maxima.
Para usar esta funci
on, carguese primero el paquete con la instruccion
load(simplex);.
Ejemplos:
(%i1) minimize_lp(x+y, [3*x+y=0, x+2*y>2]);
4
6
2
(%o1)
[-, [y = -, x = - -]]
5
5
5
(%i2) minimize_lp(x+y, [3*x+y>0, x+2*y>2]), nonegative_lp=true;
(%o2)
[1, [y = 1, x = 0]]
(%i3) minimize_lp(x+y, [3*x+y=0, x+2*y>2]), nonegative_lp=true;
(%o3)
Problem not feasible!
(%i4) minimize_lp(x+y, [3*x+y>0]);
(%o4)
Problem not bounded!
Veanse tambien maximize_lp, nonegative_lp y epsilon_lp.
[Variable opcional]
Valor por defecto: false
Si nonegative_lp vale true todas las variables de decision pasadas a minimize_lp
y a maximize_lp se suponen positivas.
Vease tambien minimize_lp.

nonegative_lp

Captulo 72: simplification

939

72 simplification
72.1 Introducci
on a simplification
El directorio maxima/share/simplification contiene programas que implementan algunas
reglas y funciones para simplificar expresiones, as como ciertas funciones no relacionadas
con la simplificaci
on.

72.2 Paquete absimp


El paquete absimp contiene reglas para aplicar patrones que extienden el sistema de reglas
nativo de Maxima para las funciones abs y signum, respetando las relaciones establecidas
con la funci
on assume o con declaraciones tales como modedeclare (m, even, n, odd) para
enteros pares o impares.
En el paquete absimp se definen las funciones unitramp y unitstep en terminos de abs
y signum.
La instrucci
on load (absimp) carga este paquete y demo (absimp) desarrolla una demostraci
on sobre el uso del mismo.
Ejemplos:
(%i1) load (absimp)$
(%i2) (abs (x))^2;
2
(%o2)
x
(%i3) diff (abs (x), x);
x
(%o3)
-----abs(x)
(%i4) cosh (abs (x));
(%o4)
cosh(x)

72.3 Paquete facexp


El paquete facexp contiene varias funciones que le aportan al usuario la posibilidad de
estructurar expresiones controlando su expansion. Esta capacidad es especialmente u
til
cuando la expresi
on contiene variables con significado fsico, ya que se suele dar el caso de
que la forma m
as sencilla para estas expresiones se obtiene cuando se expanden respecto de
estas variables y luego se factoriza respecto de sus coeficientes. Si bien es cierto que este
procedimiento no es difcil de llevar a cabo con las funciones estandar de Maxima, pueden
ser necesarios algunos retoques adicionales que s pueden ser mas difciles de hacer.
La funci
on facsum y sus formas relacionadas proporcionan un metodo para controlar la
estructura de expresiones. La funcion collectterms puede usarse para a~
nadir dos o m
as
expresiones que ya hayan sido simplificadas de la forma indicada, sin necesidad de volver a
simplificar la expresi
on completa. Esta funcion puede ser u
til cuando las expresiones sean
largas.
La instrucci
on load (facexp) carga este paquete y demo (facexp) hace una
demostraci
on sobre su uso.

940

Manual de Maxima

facsum (expr, arg_1, ..., arg_n )

[Funcion]
Devuelve una expresi
on equivalente a expr, la cual depende de los argumentos arg 1,
..., arg n, y estos pueden ser de cualquiera de las formas aceptables para ratvars, o
listas de estas formas. Si los argumentos no son listas, la forma devuelta se expande
completamente con respecto de los argumentos, siendo los coeficientes de tales argumentos factorizados. Estos coeficientes no contienen a ninguno de los argumentos,
excepto quiz
as de una forma no racional.
En caso de que cualquiera de los argumentos sea una lista, entonces todos ellos se
combinan en una u
nica lista, y en lugar de llamar a factor para los coeficientes de
los argumentos, facsum se llama a s misma utilizando esta nueva lista u
nica como
lista de argumentos.
Es posible que se quiera utilizar facsum con respecto a expresiones mas complicadas,
tales como log (x + y). Estos argumentos son tambien admisibles.
En ocasiones puede ser necesario obtener cualquiera de las formas anteriores especificadas por sus operadores principales. Por ejemplo, se puede querer aplicar facsum
con respecto a todos los log; en este caso, se puede incluir entre los argumentos bien
los log especficos que se quieran tratar de esta manera, bien la expresion operator
(log) o operator (log). Si se quiere aplicar facsum a expr con respecto a los
operadores op 1, ..., op n, se debe evaluar facsum (expr, operator (op_1, ...,
op_n )). La forma operator puede aparecer tambien dentro de las listas de argumentos.
Adem
as, d
andole valores a las variables opcionales facsum_combine y
nextlayerfactor se puede controlar el resultado de facsum.
[Variable global]
Valor por defecto: false
Si nextlayerfactor vale true, las llamadas recursivas de facsum se aplican a los
factores de la forma factorizada de los coeficientes de los argumentos.
Si vale false, facsum se aplica a cada coeficiente como un todo cada vez que se
efect
uen llamadas recursivas a facsum.
La inclusi
on del
atomo nextlayerfactor en la lista de argumentos de facsum tiene
el mismo efecto que nextlayerfactor: true, pero solamente para el siguiente nivel
de la expresi
on. Puesto que nextlayerfactor toma siempre uno de los valores true
o false, debe aparecer comentado (comilla simple) cada vez que aparezca en la lista
de argumentos de facsum.

nextlayerfactor

[Variable global]
Valor por defecto: true
La variable facsum_combine controla la forma del resultado final devuelto por facsum
si su argumento es un cociente de polinomios. Si facsum_combine vale false, el
resultado ser
a una suma completamente expandida, pero si vale true, la expresion
devuelta es un cociente de polinomios.

facsum_combine

factorfacsum (expr, arg_1, ... arg_n )

[Funcion]
Devuelve una expresi
on equivalente a expr obtenida aplicando facsum a los factores
de expr, de argumentos arg 1, ... arg n. Si alguno de los factores de expr se eleva a
una potencia, tanto el factor como el exponente se procesaran de esta manera.

Captulo 72: simplification

941

collectterms (expr, arg_1, . . . , arg_n )

[Funcion]
Si algunas expresiones fueron ya simplificadas con facsum, factorfacsum,
factenexpand, facexpten o factorfacexpten, debiendo ser luego sumadas, puede
ser conveniente combinarlas utilizando la funcion collecterms, la cual admite
como argumentos todos aquellos que se puedan pasar a las anteriormente citadas
funciones, con la excepci
on de nextlayerfactor, que no tiene efecto alguno sobre
collectterms. La ventaja de collectterms es que devuelve una forma similar a
la de facsum, pero debido a que suma expresiones que ya han sido previamente
procesadas, no necesita repetir esta operacion, lo cual resulta ser especialmente u
til
cuando las expresiones a sumar son muy grandes.

72.4 Paquete functs


rempart (expr, n )

[Funcion]
Elimina la parte n de la expresion expr.
Si n es una lista de la forma [l, m ], entonces las partes desde l a m seran eliminadas.
Para hacer uso de esta funci
on ejecutar load(functs).

wronskian ([f_1, ..., f_n ], x )

[Funcion]
Devuelve la matriz wronskiana de las expresiones f 1, ..., f n dependeientes de la
variable x. El determinante de la matriz wronskiana es el determinante wronskiano
de la lista de expresiones.
Para hacer uso de esta funci
on ejecutar load(functs).
Ejemplo:
(%i1) load(functs)$
(%i2) wronskian([f(x), g(x)],x);
(%o2) matrix([f(x),g(x)],[diff(f(x),x,1),diff(g(x),x,1)])

tracematrix (M )

[Funcion]

Devuelve la traza (suma de los elementos de la diagonal) de la matriz M.


Para hacer uso de esta funci
on ejecutar load(functs).

rational (z )

[Funcion]
Multiplica el numerador y denominador de z por el complejo conjugado del denominador, racionalizando as el denominador. Devuelve la expresion canonica racional
(canonical rational expression, CRE) si el argumento z es de esta forma, en caso
contrario devuelve una expresion en formato com
un.
Para hacer uso de esta funci
on ejecutar load(functs).

nonzeroandfreeof (x, expr )

[Funcion]
Devuelve true si expr es diferente de cero y freeof (x, expr ) devuelve true. En
caso contrario devuelve false.
Para hacer uso de esta funci
on ejecutar load(functs).

linear (expr, x )

[Funcion]
Si expr es una expresi
on de la forma a *x + b , siendo a no nulo y los argumentos a
y b no contienen a x, linear devuelve una lista con tres ecuaciones, una por cada
variable b, a y x. Si no se cumple la condicion anterior, linear devuelve false.

942

Manual de Maxima

Para hacer uso de esta funci


on ejecutar load(functs).
Ejemplo:
(%i1) load (antid);
(%o1)
/usr/share/maxima/5.29.1/share/integration/antid.mac
(%i2) linear ((1 - w)*(1 - x)*z, z);
(%o2) [bargumentb = 0, aargumenta = (w - 1) x - w + 1, xargumentx = z]
(%i3) linear (cos(u - v) + cos(u + v), u);
(%o3)
false

gcdivide (p, q )

[Funcion]
Si la variable opcional takegcd vale true, que es su valor por defecto, gcdivide
divide los polinomios p y q por su maximo com
un divisor y devuelve el cociente
de los resultados. gcdivide hace una llamada a la funcion ezgcd para dividir los
polinomios por su m
aximo com
un divisor.
Si takegcd vale false, gcdivide devuelve el cociente p /q .
Para hacer uso de esta funci
on ejecutar load(functs).
Veanse tambien ezgcd, gcd, gcdex y poly_gcd.
Ejemplos:
(%i1) load(functs)$
(%i2) p1:6*x^3+19*x^2+19*x+6;
3
2
(%o2)
6 x + 19 x + 19 x + 6
(%i3) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
5
4
3
2
(%o3)
6 x + 13 x + 12 x + 13 x + 6 x
(%i4) gcdivide(p1, p2);
x + 1
(%o4)
-----3
x + x
(%i5) takegcd:false;
(%o5)
false
(%i6) gcdivide(p1, p2);
3
2
6 x + 19 x + 19 x + 6
(%o6)
---------------------------------5
4
3
2
6 x + 13 x + 12 x + 13 x + 6 x
(%i7) ratsimp(%);
x + 1
(%o7)
-----3
x + x

Captulo 72: simplification

943

arithmetic (a, d, n )

[Funcion]
Devuelve el n-esimo termino de la progresion aritmetica a, a + d, a + 2*d, ..., a
+ (n - 1)*d .
Para hacer uso de esta funci
on ejecutar load(functs).

geometric (a, r, n )

[Funcion]
Devuelve el n-esimo termino de la progresion geometrica a, a *r, a *r ^2, ...,
a *r ^(n - 1).
Para hacer uso de esta funci
on ejecutar load(functs).

harmonic (a, b, c, n )

[Funcion]
Devuelve el n-esimo termino de la progresion armonica a /b, a /(b + c ), a /(b +
2*c ), ..., a /(b + (n - 1)*c ).
Para hacer uso de esta funci
on ejecutar load(functs).

arithsum (a, d, n )

[Funcion]
Devuelve la suma de la progresion aritmetica desde hasta el n-esimo termino.
Para hacer uso de esta funci
on ejecutar load(functs).

geosum (a, r, n )

[Funcion]
Devuelve la suma de la sucesion geometrica hasta el n-esimo termino. Si n es infinito
(inf) la suma ser
a finita s
olo si el valor absoluto de r es menor que 1.
Para hacer uso de esta funci
on ejecutar load(functs).

gaussprob (x )
Devuelve la funci
on de densidad de probabilidad,
sqrt(2*%pi).
Para hacer uso de esta funci
on ejecutar load(functs).

gd (x )

[Funcion]
normal %e^(-x ^2/2) /

[Funcion]

Devuelve la funci
on de Gudermann, 2*atan(%e^x)-%pi/2.
Para hacer uso de esta funci
on ejecutar load(functs).

agd (x )

[Funcion]
Devuelve la inversa de la funcion de Gudermann, log (tan (%pi/4 + x/2)).
Para hacer uso de esta funci
on ejecutar load(functs).

vers (x )

[Funcion]

Devuelve 1 - cos (x).


Para hacer uso de esta funci
on ejecutar load(functs).

covers (x )

[Funcion]

Devuelve 1 - sin (x ).
Para hacer uso de esta funci
on ejecutar load(functs).

exsec (x )
Devuelve sec (x ) - 1.
Para hacer uso de esta funci
on ejecutar load(functs).

[Funcion]

944

Manual de Maxima

hav (x )

[Funcion]

Devuelve (1 - cos(x))/2.
Para hacer uso de esta funci
on ejecutar load(functs).

combination (n, r )

[Funcion]

Calcula el n
umero de combinaciones de n objetos tomados de r en r.
Para hacer uso de esta funci
on ejecutar load(functs).

permutation (n, r )

[Funcion]
Calcula el n
umero de permutaciones de r, seleccionados de un conjunto de n.
Para hacer uso de esta funci
on ejecutar load(functs).

72.5 Paquete ineq


El paquete ineq contiene reglas de simplificacion para desigualdades
Una sesi
on de ejemplo:
(%i1) load(ineq)$
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
Warning: Putting rules on + or * is inefficient, and
(%i2) a>=4; /* a sample inequality */
(%o2)
a >= 4
(%i3) (b>c)+%; /* add a second, strict inequality */
(%o3)
b + a > c + 4
(%i4) 7*(x<y); /* multiply by a positive number */
(%o4)
7 x < 7 y
(%i5) -2*(x>=3*z); /* multiply by a negative number */
(%o5)
- 2 x <= - 6 z
(%i6) (1+a^2)*(1/(1+a^2)<=1); /* Maxima knows that 1+a^2
2
(%o6)
1 <= a + 1
(%i7) assume(x>0)$ x*(2<3); /* assuming x>0 */
(%o7)
2 x < 3 x
(%i8) a>=b; /* another inequality */
(%o8)
a >= b
(%i9) 3+%; /* add something */
(%o9)
a + 3 >= b + 3
(%i10) %-3; /* subtract it out */
(%o10)
a >= b
(%i11) a>=c-b; /* yet another inequality */
(%o11)
a >= c - b
(%i12) b+%; /* add b to both sides */

may
may
may
may
may
may
may
may

not
not
not
not
not
not
not
not

> 0 */

work.
work.
work.
work.
work.
work.
work.
work.

Captulo 72: simplification

945

(%o12)
b + a >= c
(%i13) %-c; /* subtract c from both sides */
(%o13)
- c + b + a >= 0
(%i14) -%; /* multiply by -1 */
(%o14)
c - b - a <= 0
(%i15) (z-1)^2>-2*z; /* determining truth of assertion */
2
(%o15)
(z - 1) > - 2 z
(%i16) expand(%)+2*z; /* expand this and add 2*z to both sides */
2
(%o16)
z + 1 > 0
(%i17) %,pred;
(%o17)
true
Debe tenerse cuidado con el uso de parentesis que incluyan desigualdades; si se escribe
(A > B) + (C = 5) el resultado es A + C > B + 5, pero A > B + C = 5 es un error sintactico y
(A > B + C) = 5 es una cosa completamente diferente.
Ejec
utese disprule (all) para ver la lista completa de las reglas definidas.
Maxima preguntar
a al usuario cuando desconozca el signo de una cantidad que multiplica
a una desigualdad.
Los fallos m
as comunes son:
eq: a > b;
2*eq;
% - eq;
Otro problema es el producto de una desigualdad por cero. Si se escribe x*some_
inequality y Maxima pregunta por el signo de x y se responde que vale zero (o z),
el programa devuelve x*some_inequality sin hacer uso de la informacion de que x es 0.
En tal caso se debera escribir ev (%, x: 0), ya que la base de datos solo sera utilizada para
fines comparativos y no para evaluar x.
El usuario puede apreciar que las respuestas son mas lentas al cargarse este paquete, ya
que el simplificador deber
a examinar mas reglas que cuando no se hace uso del paquete, por
lo que puede ser conveniente borrar estas reglas cuando ya no se haga uso de ellas. Ejec
utese
kill (rules) para eliminar todas las reglas (incluidas las definidas por el usuario); tambien
es posible eliminar parte de ellas o utilizar remrule sobre una reglas especfica.
Notese que si se carga este paquete despues de haber definido otras reglas de igual nombre,se borrar
an las antiguas. Las reglas de este paquete son: *rule1, ..., *rule8, +rule1,
..., +rule18, debiendose encerrar entre comillas el nombre de la reglas para referenciarse
a ellas, como en remrule ("+", "+rule1") para eliminar la primera regla sobre "+", o
disprule ("*rule2") para mostrar la definicion de la segunda regla multiplicativa.

72.6 Paquete rducon


reduce_consts (expr )

[Funcion]
Sustituye subexpresiones constantes de expr por atomos, guardando la definicion de
todos ellos en la lista de ecuaciones const_eqns y devolviendo el expresion expr ya
modificada. Se consideran partes constantes de expr aquellas que devuelven true

946

Manual de Maxima

cuando se les aplica la funcion constantp, por lo que antes de llamar a reduce_
consts se debe ejecutar
declare ([objetos a los que se quiera dar la propiedad de ser constantes ], constant)$
para crear la base de datos de las cantidades constantes presentes en la expresion.
Si se pretende generar c
odigo Fortran despues de estos calculos simbolicos, una de las
primeras secciones del c
odigo debe ser el calculo de las constantes. Para generar este
segmento de c
odigo hacer
map (fortran, const_eqns)$
Junto a const_eqns, otras variables que afectan a reduce_consts son:
const_prefix (Valor por defecto: xx) es la cadena de caracteres utilizada como prefijo para todos los smbolos generados por reduce_consts para representar subexpresiones constantes.
const_counter (Valor por defecto: 1) es el ndice entero utilizado para generar los
smbolos que representen a las subexpresiones constantes encontradas por reduce_
consts.
La instrucci
on load (rducon) carga esta funcion y demo (rducon) hace una demostraci
on sobre su uso.

72.7 Paquete scifac


gcfac (expr )

[Funcion]
Es una funci
on de factorizacion que intenta aplicar la misma heurstica que los humanos cuando tratan de hacer las expresiones mas simples, limitandose a la factorizaci
on de monomios. En caso de sumas, gcfac hace lo siguiente:
1. Factoriza los enteros.
2. Factoriza las potencias mayores de los terminos que aparecen como coeficientes,
independientemente de su complejidad.
3. Utiliza (1) y (2) en la factorizacion de pares de terminos adyacentes.
4. Aplica estas tecnicas repetida y recursivamente hasta que la expresion deje de
sufrir cambios.
En general, el apartado (3) no hace una factorizacion optima debido a la naturaleza
combinatoria y compleja de encontrar cual de todas las ordenaciones posibles de los
pares da lugar a la expresi
on mas compacta.
La instrucci
on load (scifac) carga esta funcion y demo (scifac) hace una demostraci
on sobre su uso.

72.8 Paquete sqdnst


sqrtdenest (expr )

[Funcion]
Reduce expresiones en las que se encuentren races cuadradas anidadas, siempre que
sea posible
Ejemplo:

Captulo 72: simplification

947

(%i1) load (sqdnst)$


(%i2) sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
sqrt(3)
sqrt(------- + 1)
2
(%o2)
--------------------sqrt(11 sqrt(2) - 12)
(%i3) sqrtdenest(%);
sqrt(3)
1
------- + 2
2
(%o3)
------------1/4
3/4
3 2
- 2
A veces conviene aplicar sqrtdenest mas de una vez, como en el caso (19601-13860
sqrt(2))^(7/4).
La sentencia load (sqdnst) carga esta funcion.

Captulo 73: solve rec

949

73 solve rec
73.1 Introducci
on a solve rec
El paquete solve_rec resuelve expresiones recurrentes lineales con coeficientes polinomiales.
Ejec
utese demo(solve_rec); para ver una demostracion sobre la utilizacion de este
paquete.
Ejemplo:
(%i1) load("solve_rec")$
(%i2) solve_rec((n+4)*s[n+2] + s[n+1] - (n+1)*s[n], s[n]);
n
%k (2 n + 3) (- 1)
%k
1
2
(%o2)
s = -------------------- + --------------n
(n + 1) (n + 2)
(n + 1) (n + 2)

73.2 Funciones y variables para solve rec


reduce_order (rec, sol, var )

[Funcion]
Reduce el orden de la expresion recurrente lineal rec cuando se conoce una solucion
particular sol. La recurrencia reducida puede utilizarse para obterner mas soluciones.
Ejemplo:
(%i3) rec: x[n+2] = x[n+1] + x[n]/n;
x
n
(%o3)
x
= x
+ -n + 2
n + 1
n
(%i4) solve_rec(rec, x[n]);
WARNING: found some hypergeometrical solutions!
(%o4)
x = %k n
n
1
(%i5) reduce_order(rec, n, x[n]);
(%t5)
x = n %z
n
n

(%t6)

(%o6)

n - 1
====
\
%z = >
%u
n
/
%j
====
%j = 0
(- n - 2) %u
- %u
n + 1
n

950

Manual de Maxima

(%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);


n
%k (- 1)
1
(%o6)
%u = ---------n
(n + 1)!
So the general solution is
n - 1
====
j
\
(- 1)
%k n >
-------- + %k n
2
/
(j + 1)!
1
====
j = 0
[Variable opcional]
Valor por defecto: true
Si simplify_products vale true, solve_rec intentara simplificar los productos del
resultado.
Vease tambien solve_rec.

simplify_products

simplify_sum (expr )

[Funcion]
Intenta reducir todas las sumas que aparecen en expr a una forma cerrada.
Para utilizar esta funci
on c
arguese previamente el paquete simplify_sum ejecutando
la instrucci
on load(simplify_sum).
Ejemplo:
(%i1) load("simplify_sum")$
(%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
n
n
====
====
\
binomial(n + k, k)
\
(%o2)
>
------------------ + >
binomial(2 n, 2 k)
/
k
/
====
2
====
k = 1
k = 1
(%i3) simplify_sum(%);

(%o3)

solve_rec (eqn, var, [init ])

2 n - 1
n
2
+ 2 - 2

[Funcion]
Obtiene las soluciones hipergeometricas de la expresion recurrente eqn con coeficientes
lineales en la variable var. Los argumentos opcionales init son condiciones iniciales.
La funci
on solve_rec puede resolver expresiones recurrentes con coeficientes constantes, encuentra soluciones hipergeometricas de expresiones recurrentes lineales ho-

Captulo 73: solve rec

951

mogeneas con coeficientes polinomiales, obtiene soluciones racionales de expresiones


recurrentes lineales con coeficientes lineales y resuelve tambien expresiones recurrentes
de Ricatti.
Notese que el tiempo de ejecucion del algoritmo para encontrar soluciones hipergeometricas es exponencial respecto del grado del coeficiente principal.
Para hacer uso de esta funci
on ejec
utese previamente load(solve_rec);.
Ejemplo de recurrencia lineal con coeficientes constantes:
(%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
n
n
(sqrt(5) - 1) %k (- 1)
1
n
(%o2) a = ------------------------- - ---n
n
n
2
5 2
n
(sqrt(5) + 1) %k
2
2
+ ------------------ - ---n
n
2
5 2
Ejemplo de recurrencia lineal con coeficientes polinomiales:
(%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
2
(%o7) (x - 1) y
- (x + 3 x - 2) y
+ 2 x (x + 1) y
x + 2
x + 1
x
(%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
x
3 2
x!
(%o9)
y = ---- - -x
4
2
Ejemplo de recurrencia de Ricatti:
(%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
y
y
x + 1
x
(%o2)
x y y
- ------ + ----- = 0
x x + 1
x + 2
x - 1
(%i3) solve_rec(%, y[x], y[3]=5)$
(%i4) ratsimp(minfactorial(factcomb(%)));
3
30 x - 30 x
(%o4) y = - ------------------------------------------------x
6
5
4
3
2
5 x - 3 x - 25 x + 15 x + 20 x - 12 x - 1584
Veanse tambien solve_rec_rat, simplify_products y product_use_gamma.

952

Manual de Maxima

solve_rec_rat (eqn, var, [init ])

[Funcion]
Calcula las soluciones racionales de las expresiones recurrentes lineales. Vease solve_
rec para la descripci
on de sus argumentos.
Para hacer uso de esta funci
on ejec
utese previamente load(solve_rec);.
Ejemplo:
(%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
(%o1) (x + 4) a
+ (x + 3) a
- x a
x + 3
x + 2
x + 1
2
+ (x - 1) a
x
(%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
1
(%o2)
a = --------------x
(x - 1) (x + 1)
Vease tambien solve_rec.

product_use_gamma

[Variable opcional]

Valor por defecto:true


Si product_use_gamma vale true, solve_rec introduce la funcion gamma en la expresi
on del resultado cuando se simplifican productos.
Veanse tambien simplify_products y solve_rec.

summand_to_rec (summand, k, n )

[Funcion]

Devuelve la expresi
on recurrente que satisface la suma
inf
====
\
>
sumando
/
====
k = minf
donde el sumando es hipergeometrico en k y n.
Para hacer uso de esta funci
on deben cargarse previamente los paquetes zeilberger
y solve_rec mediante la ejecucion de las sentencias load(solve_rec) y
load(zeilberger).
(%i17) load("zeilberger")$
(%i18) summand: binom(3*k+1,k)*binom(3*(n-k),n-k)/(3*k+1)$
(%i19) summand_to_rec(summand, k, n);
Dependent equations eliminated: (3 2)
(%o19) - 4 (n + 2) (2 n + 3) (2 n + 5) sm
n + 2
2
+ 12 (2 n + 3) (9 n + 27 n + 22) sm
n + 1

Captulo 73: solve rec

- 81 (n + 1) (3 n + 2) (3 n + 4) sm
n
(%i21) sum(summand, k, 0, n), n=0;
(%o21)
1
(%i22) sum(summand, k, 0, n), n=1;
(%o22)
4
(%i23) product_use_gamma: false$
(%i24) solve_rec(%o19, sm[n], sm[0]=1, sm[1]=4);
n - 1
n - 1
/===\
/===\
! !
! !
n
( ! !
(3 %j + 2)) ( ! !
(3 %j + 4)) 3
! !
! !
%j = 0
%j = 0
(%o24) sm = -----------------------------------------n
n - 1
/===\
! !
n
( ! !
(2 %j + 3)) 2 n!
! !
%j = 0

953

Captulo 74: stats

955

74 stats
74.1 Introducci
on a stats
El paquete stats contiene procedimientos clasicos sobre inferencia estadstica y contraste
de hipotesis.
Todas estas funciones devuelven un objeto Maxima de tipo inference_result, el cual
contiene los resultados necesarios para hacer inferencias sobre la poblacion y toma de decisiones.
La variable global stats_numer controla si los resultados deben darse en formato decimal
o simbolico y racional; su valor por defecto es true, por lo que el formato de salida es decimal.
El paquete descriptive contiene algunas utilidades para manipular estructuras de datos
(listas y matrices); por ejemplo para extraer submuestras. Tambien contiene algunos ejemplos sobre c
omo utilizar el paquete numericalio para leer datos de ficheros en texto plano.
Veanse descriptive y numericalio para mas detalles.
El paquete stats carga en memoria los paquetes descriptive, distrib y inference_
result.
Para comentarios, errores o sugerencias, contactese con el autor en
mario ARROBA edu PUNTO xunta PUNTO es.

74.2 Funciones y variables para inference result


inference_result (title, values, numbers )
Construye un objeto inference_result del tipo devuelto
estadsticas. El argumento title es una cadena con el nombre
values es una lista con elementos de la forma symbol = value
lista con enteros positivos desde uno hasta length(values ), que
ser
an mostrados por defecto.

[Funcion]
por las funciones
del procedimiento;
y numbers es una
indican que valores

Ejemplo:
Este es un ejemplo que muestra los resultados asociados a un rectangulo. El ttulo
de este objeto es la cadena "Rectangle", el cual almacena cinco resultados, a saber,
base, height, diagonal, area y perimeter, pero solo muestra el primero,
segundo, quinto y cuarto. El resultado diagonal tambien se almacena en este objeto,
pero no se muestra por defecto; para tener acceso a este valor, hagase uso de la funcion
take_inference.
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) inference_result("Rectangle",
[base=b,
height=h,
diagonal=sqrt(b^2+h^2),
area=b*h,
perimeter=2*(b+h)],
[1,2,5,4] );

956

Manual de Maxima

|
Rectangle
|
|
base = 3
|
(%o3)
|
height = 2
|
| perimeter = 10
|
|
area = 6
(%i4) take_inference(diagonal,%);
(%o4)
sqrt(13)
Vease tambien take_inference.

inferencep (obj )

[Funcion]
Devuelve true o false, dependiendo de que obj sea un objeto de tipo inference_
result o no.

items_inference (obj )

[Funcion]
Devuelve una lista con los nombres de los elementos almacenados en obj, el cual debe
ser un objeto de tipo inference_result.
Ejemplo:

El objeto inference_result almacena dos valores, cuyos nombres son pi y e, pero


solo se muestra el segundo. La funcion items_inference devuelve los nombres de
todos los elementos almacenados, independientemente de que sean mostrados o no.
(%i1) load(inference_result)$
(%i2) inference_result("Hi", [pi=%pi,e=%e],[2]);
|
Hi
(%o2)
|
| e = %e
(%i3) items_inference(%);
(%o3)
[pi, e]

take_inference (n, obj )


take_inference (name, obj )
take_inference (list, obj )

[Funcion]
[Funcion]
[Funcion]
Si n es un entero positivo, devuelve el n-esimo valor almacenado en obj; si el smbolo
name es el nombre de uno de los elementos almacenados, tambien devuelve su valor. Si
el primer elemento es una lista de n
umeros y/o smbolos, la funcion take_inference
devuelve una lista con los resultados correspondientes.
Ejemplo:
Dado un objeto inference_result, la funcion take_inference es invocada para
extraer cierta informaci
on almacenada en el.
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) sol: inference_result("Rectangle",
[base=b,

Captulo 74: stats

957

height=h,
diagonal=sqrt(b^2+h^2),
area=b*h,
perimeter=2*(b+h)],
[1,2,5,4] );
Rectangle

(%o3)

(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)
(%i7)
(%o7)

|
|
|
base = 3
|
|
height = 2
|
| perimeter = 10
|
|
area = 6
take_inference(base,sol);
3
take_inference(5,sol);
10
take_inference([1,diagonal],sol);
[3, sqrt(13)]
take_inference(items_inference(sol),sol);
[3, 2, sqrt(13), 6, 10]

Veanse tambien inference_result y take_inference.

74.3 Funciones y variables para stats


stats_numer

[Variable opcional]

Valor por defecto: true


Cuando stats_numer vale true, las funciones de inferencia estadstica devuelven sus
resultados en formato decimal de coma flotante. Cuando vale false, los resultados
se devuelven en formato simbolico y racional.

test_mean (x )
test_mean (x, options ...)

[Funcion]
[Funcion]
Es el test t de la media. El argumento x es una lista o matriz columna con los datos de
una muestra unidimensional. Tambien realiza el test asintotico basado en el Teorema
Central del lmite si se le asigna a la opcion asymptotic el valor true.
Opciones:
mean, valor por defecto 0, es el valor de la media a contrastar.
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
dev, valor por defecto unknown, este es el valor de la desviacion tpica cuando
se conoce; valores v
alidos son: unknown o una expresion con valor positivo.
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).

958

Manual de Maxima

asymptotic, valor por defecto false, indica si debe realizar el test exacto
basado en la t de Student, o el asintotico basado en el Teorema Central del
lmite; valores v
alidos son true y false.
El resultado devuelto por la funcion test_mean es un objeto inference_result con
los siguientes apartados:
1. mean_estimate: la media muestral.
2. conf_level: nivel de confianza seleccionado por el usuario.
3. conf_interval: intervalo de confianza para la media poblacional.
4. method: procedimiento de inferencia.
5. hypotheses: hip
otesis nula y alternativa a ser contrastada.
6. statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
7. distribution:
par
ametro(s).

distribucion del estadstico de contraste, junto con su(s)

8. p_value: p-valor del test.


Ejemplos:
Realiza el contraste exacto t con varianza desconocida. La hipotesis nula es H0 :
mean = 50, frente a la alternativa unilatera H1 : mean < 50; de acuerdo con los
resultados, no hay evidencia para rechazar H0 , pues el p-valor es muy grande.
(%i1) load("stats")$
(%i2) data: [78,64,35,45,45,75,43,74,42,42]$
(%i3) test_mean(data,conflevel=0.9,alternative=less,mean=50);
|
MEAN TEST
|
|
mean_estimate = 54.3
|
|
conf_level = 0.9
|
| conf_interval = [minf, 61.51314273502712]
|
(%o3)
| method = Exact t-test. Unknown variance.
|
| hypotheses = H0: mean = 50 , H1: mean < 50
|
|
statistic = .8244705235071678
|
|
distribution = [student_t, 9]
|
|
p_value = .7845100411786889
En esta ocasi
on Maxima realiza un test asintotico.
La hipotesis nula es
H0 : equal(mean, 50) frente a la alternativa bilatera H1 : notequal(mean, 50); de
acuerdo con los resultados, H0 debe rechazarse en favor de la alternativa H1 , pues el
p-valor es muy peque~
no. N
otese que, tal como indica la componente Method, este
procedimiento s
olo puede aplicarse en muestras grandes.

Captulo 74: stats

959

(%i1) load("stats")$
(%i2) test_mean([36,118,52,87,35,256,56,178,57,57,89,34,25,98,35,
98,41,45,198,54,79,63,35,45,44,75,42,75,45,45,
45,51,123,54,151],
asymptotic=true,mean=50);
|
MEAN TEST
|
|
mean_estimate = 74.88571428571429
|
|
conf_level = 0.95
|
| conf_interval = [57.72848600856194, 92.04294256286663]
|
(%o2)
|
method = Large sample z-test. Unknown variance.
|
|
hypotheses = H0: mean = 50 , H1: mean # 50
|
|
statistic = 2.842831192874313
|
|
distribution = [normal, 0, 1]
|
|
p_value = .004471474652002261

test_means_difference (x1, x2 )
test_means_difference (x1, x2, options ...)

[Funcion]
[Funcion]
Este es el test t para la diferencia de medias con muestras. Los argumentos x1 y x2
son listas o matrices columna que contienen dos muestras independientes. En caso de
varianzas diferentes y desconocidas (veanse las opciones dev1, dev2 y varequal
mas abajo) los grados de libertad se calculan mediante la aproximacion de Welch.
Tambien realiza el test asintotico basado en el Teorema Central del lmite si se le
asigna a la opci
on asymptotic el valor true.
Opciones:

alternative, valor por defecto twosided, es la hipotesis alternativa; valores


v
alidos son: twosided, greater y less.
dev1, valor por defecto unknown, es el valor de la desviacion tpica de la muestra
x1 cuando se conoce; valores validos son: unknown o una expresion positiva.
dev2, valor por defecto unknown, es el valor de la desviacion tpica de la muestra
x2 cuando se conoce; valores validos son: unknown o una expresion positiva.
varequal, valor por defecto false, indica si las varianzas deben considerarse
iguales o no; esta opci
on solo toma efecto cuando dev1 y/o dev2 tienen el valor
unknown.
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).

960

Manual de Maxima

asymptotic, valor por defecto false, indica si debe realizar el test exacto
basado en la t de Student, o el asintotico basado en el Teorema Central del
lmite; valores v
alidos son true y false.
El resultado devuelto por la funcion test_means_difference es un objeto
inference_result con los siguientes apartados:
1.
2.
3.
4.
5.
6.
7.

diff_estimate: el estimador de la diferencia de medias.


conf_level: nivel de confianza seleccionado por el usuario.
conf_interval: intervalo de confianza para la diferencia de medias.
method: procedimiento de inferencia.
hypotheses: hip
otesis nula y alternativa a ser contrastada.
statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
distribution: distribucion del estadstico de contraste, junto con su(s)
par
ametro(s).
8. p_value: p-valor del test.

Ejemplos:
La igualdad de medias se contrasta con dos peque~
nas muestras x y y, contra la
alternativa H1 : m1 > m2 , siendo m1 y m2 las medias poblacionales; las varianzas son
desconocidas y se supone que diferentes.
(%i1)
(%i2)
(%i3)
(%i4)

load("stats")$
x: [20.4,62.5,61.3,44.2,11.1,23.7]$
y: [1.2,6.9,38.7,20.4,17.2]$
test_means_difference(x,y,alternative=greater);
|
DIFFERENCE OF MEANS TEST
|
|
diff_estimate = 20.31999999999999
|
|
conf_level = 0.95
|
|
conf_interval = [- .04597417812882298, inf]
|
(%o4)
|
method = Exact t-test. Welch approx.
|
| hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
|
|
statistic = 1.838004300728477
|
|
distribution = [student_t, 8.62758740184604]
|
|
p_value = .05032746527991905
El mismo test que antes, pero ahora se suponen las varianzas iguales.
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: matrix([1.2],[6.9],[38.7],[20.4],[17.2])$

Captulo 74: stats

961

(%i4) test_means_difference(x,y,
alternative=greater,
varequal=true);
|
DIFFERENCE OF MEANS TEST
|
|
diff_estimate = 20.31999999999999
|
|
conf_level = 0.95
|
|
conf_interval = [- .7722627696897568, inf]
|
(%o4)
|
method = Exact t-test. Unknown equal variances
|
| hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
|
|
statistic = 1.765996124515009
|
|
distribution = [student_t, 9]
|
|
p_value = .05560320992529344

test_variance (x )
test_variance (x, options ...)

[Funcion]
[Funcion]
Este es el test chi^2 de la varianza. El argumento x es una lista o matriz columna
con los datos de una muestra unidimensional extrada de una poblacion normal.
Opciones:
mean, valor por defecto unknown, es la media de la poblacion, si se conoce.
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
variance, valor por defecto 1, este es el valor (positivo) de la varianza a contrastar.
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).
El resultado devuelto por la funcion test_variance es un objeto inference_result
con los siguientes apartados:
1. var_estimate: la varianza muestral.
2. conf_level: nivel de confianza seleccionado por el usuario.
3. conf_interval: intervalo de confianza para la varianza poblacional.
4. method: procedimiento de inferencia.
5. hypotheses: hip
otesis nula y alternativa a ser contrastada.
6. statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
7. distribution: distribucion del estadstico de contraste, junto con su
par
ametro.
8. p_value: p-valor del test.

962

Manual de Maxima

Ejemplos:
Se contrasta si la varianza de una poblacion de media desconocida es igual o mayor
que 200.
(%i1) load("stats")$
(%i2) x: [203,229,215,220,223,233,208,228,209]$
(%i3) test_variance(x,alternative=greater,variance=200);
|
VARIANCE TEST
|
|
var_estimate = 110.75
|
|
conf_level = 0.95
|
|
conf_interval = [57.13433376937479, inf]
|
(%o3)
| method = Variance Chi-square test. Unknown mean.
|
|
hypotheses = H0: var = 200 , H1: var > 200
|
|
statistic = 4.43
|
|
distribution = [chi2, 8]
|
|
p_value = .8163948512777689

test_variance_ratio (x1, x2 )
test_variance_ratio (x1, x2, options ...)

[Funcion]
[Funcion]
Este es el test F del cociente de las varianzas para dos poblaciones normales. Los
argumentos x1 y x2 son listas o matrices columna que contienen los datos de dos
muestras independientes.
Opciones:
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
mean1, valor por defecto unknown, es la media de la poblacion de la que procede
x1 cuando se conoce.
mean2, valor por defecto unknown, es la media de la poblacion de la que procede
x2 cuando se conoce.
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza del cociente; debe ser una expresion que tome un valor en el intervalo
(0,1).

El resultado devuelto por la funcion test_variance_ratio es un objeto inference_


result con los siguientes resultados
1. ratio_estimate: el cociente de varianzas muestral.
2. conf_level: nivel de confianza seleccionado por el usuario.
3. conf_interval: intervalo de confianza para el cociente de varianzas.

Captulo 74: stats

963

4.
5.
6.
7.

method: procedimiento de inferencia.


hypotheses: hip
otesis nula y alternativa a ser contrastada.
statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
distribution: distribucion del estadstico de contraste, junto con sus
par
ametros.
8. p_value: p-valor del test.

Ejemplos:
Se contrasta la igualdad de varianzas de dos poblaciones normales frente a la alternativa de que la primera es mayor que la segunda.
(%i1)
(%i2)
(%i3)
(%i4)

load("stats")$
x: [20.4,62.5,61.3,44.2,11.1,23.7]$
y: [1.2,6.9,38.7,20.4,17.2]$
test_variance_ratio(x,y,alternative=greater);
|
VARIANCE RATIO TEST
|
|
ratio_estimate = 2.316933391522034
|
|
conf_level = 0.95
|
|
conf_interval = [.3703504689507268, inf]
|
(%o4)
| method = Variance ratio F-test. Unknown means.
|
| hypotheses = H0: var1 = var2 , H1: var1 > var2
|
|
statistic = 2.316933391522034
|
|
distribution = [f, 5, 4]
|
|
p_value = .2179269692254457

test_proportion (x, n )
test_proportion (x, n, options ...)

[Funcion]
[Funcion]
Inferencias sobre una proporcion. El argumento x es el n
umero de exitos observados
en n pruebas de Bernoulli con probabilidad desconocida.
Opciones:
proportion, valor por defecto 1/2, es el valor de la probabilidad a contrastar.
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).
asymptotic, valor por defecto false, indica si debe realizar el test exacto
basado en la binomial, o el asintotico basado en el Teorema Central del lmite;
valores v
alidos son true y false.

964

Manual de Maxima

correct, valor por defecto true, indica si se aplica o no la correccion de Yates.


El resultado devuelto por la funcion test_proportion es un objeto inference_
result con los siguientes apartados:
1.
2.
3.
4.
5.
6.
7.

sample_proportion: proporcion muestral.


conf_level: nivel de confianza seleccionado.
conf_interval: intervalo de confianza de Wilson para la proporcion.
method: procedimiento de inferencia.
hypotheses: hip
otesis nula y alternativa a ser contrastada.
statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
distribution: distribucion del estadstico de contraste, junto con sus
par
ametros.
8. p_value: p-valor del test.

Ejemplos:
Realiza un contraste exacto. La hipotesis nula es H0 : p = 1/2 y la alternativa
unil
atera es H1 : p < 1/2.
(%i1) load("stats")$
(%i2) test_proportion(45, 103, alternative = less);
|
PROPORTION TEST
|
| sample_proportion = .4368932038834951
|
|
conf_level = 0.95
|
| conf_interval = [0, 0.522714149150231]
|
(%o2)
|
method = Exact binomial test.
|
| hypotheses = H0: p = 0.5 , H1: p < 0.5
|
|
statistic = 45
|
| distribution = [binomial, 103, 0.5]
|
|
p_value = .1184509388901454
Un contraste asint
otico bil
atero. El nivel de confianza es 99/100.
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportion(45, 103,
conflevel = 99/100, asymptotic=true);
|
PROPORTION TEST
|
|
sample_proportion = .43689
|

Captulo 74: stats

965

|
conf_level = 0.99
|
|
conf_interval = [.31422, .56749]
|
(%o3) | method = Asympthotic test with Yates correction.
|
|
hypotheses = H0: p = 0.5 , H1: p # 0.5
|
|
statistic = .43689
|
|
distribution = [normal, 0.5, .048872]
|
|
p_value = .19662

test_proportions_difference (x1, n1, x2, n2 )


test_proportions_difference (x1, n1, x2, n2, options ...)

[Funcion]
[Funcion]
Inferencias sobre la diferencia de dos proporciones. El argumento x1 es el n
umero
de exitos en n1 experimentos de Bernoulli en la primera poblacion y x2 y n2 son los
valores correspondientes para la segunda poblacion. Las muestras son independientes
y el contraste es asint
otico.
Opciones:
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son:: twosided (p1 # p2), greater (p1 > p2) and less (p1 < p2).
conflevel, valor por defecto 95/100, nivel de confianza para el intervalo de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).
correct, valor por defecto true, indica si se aplica o no la correccion de Yates.
El resultado devuelto por la funcion test_proportions_difference es un objeto
inference_result con los siguientes apartados:
1. proportions: lista con las dos proporciones muestrales.
2. conf_level: nivel de confianza seleccionado.
3. conf_interval: intervalo de confianza para la diferencia de proporciones p1 p2.
4. method: procedimiento de inferencia y mensaje de aviso en caso de que alguno
de los tama~
nos muestrales sea menor de 10.
5. hypotheses: hip
otesis nula y alternativa a ser contrastada.
6. statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
7. distribution: distribucion del estadstico de contraste, junto con sus
par
ametros.
8. p_value: p-valor del test.
Ejemplos:
Una m
aquina produce 10 piezas defectuosas en un lote de 250. Despues de ciertas
tareas de mantenimiento, produce 4 piezas defectuosas de un lote de 150. A fin de
saber si la tarea de mantenimiento produjo alguna mejora, se contrasta la hipotesis

966

Manual de Maxima

nula H0:p1=p2 contra la alternativa H0:p1>p2, donde p1 y p2 son las probabilidades


de que un artculo producido por la maquina sea defectuoso, antes y despues de la
reparaci
on. De acuerdo con el p valor, no hay evidencia suficiente para aceptar la
alternativa.
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportions_difference(10, 250, 4, 150,
alternative = greater);
|
DIFFERENCE OF PROPORTIONS TEST
|
|
proportions = [0.04, .02666667]
|
|
conf_level = 0.95
|
|
conf_interval = [- .02172761, 1]
|
(%o3) | method = Asymptotic test. Yates correction.
|
|
hypotheses = H0: p1 = p2 , H1: p1 > p2
|
|
statistic = .01333333
|
|
distribution = [normal, 0, .01898069]
|
|
p_value = .2411936
Desviaci
on tpica exacta de la distribucion normal asintotica con datos desconocidos.
(%i1)
(%i2)
(%i3)
(%i4)

load("stats")$
stats_numer: false$
sol: test_proportions_difference(x1,n1,x2,n2)$
last(take_inference(distribution,sol));
1
1
x2 + x1
(-- + --) (x2 + x1) (1 - -------)
n2
n1
n2 + n1
(%o4)
sqrt(---------------------------------)
n2 + n1

test_sign (x )
test_sign (x, options ...)

[Funcion]
[Funcion]
Este es el test no parametrico de los signos para contrastes sobre la mediana de una
poblaci
on continua. El argumento x es una lista o matriz columna que contiene los
datos de una muestra unidimensional.
Opciones:
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
median, valor por defecto 0, es el valor de la mediana a contrastar.

Captulo 74: stats

967

El resultado devuelto por la funcion test_sign es un objeto inference_result con


los siguientes apartados:
1.
2.
3.
4.
5.

med_estimate: la mediana muestral.


method: procedimiento de inferencia.
hypotheses: hip
otesis nula y alternativa a ser contrastada.
statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
distribution: distribucion del estadstico de contraste, junto con sus
par
ametros.
6. p_value: p-valor del test.

Ejemplos:
Contrasta si la mediana de la poblacion de la que se ha extraido la muestra es 6,
frente a la alternativa H1 : median > 6.
(%i1) load("stats")$
(%i2) x: [2,0.1,7,1.8,4,2.3,5.6,7.4,5.1,6.1,6]$
(%i3) test_sign(x,median=6,alternative=greater);
|
SIGN TEST
|
|
med_estimate = 5.1
|
|
method = Non parametric sign test.
|
(%o3)
| hypotheses = H0: median = 6 , H1: median > 6
|
|
statistic = 7
|
|
distribution = [binomial, 10, 0.5]
|
|
p_value = .05468749999999989

test_signed_rank (x )
test_signed_rank (x, options ...)

[Funcion]
[Funcion]
Este el test de los rangos signados de Wilcoxon para hacer inferencias sobre la mediana
de una poblaci
on continua. El argumento x es una lista o matriz columna que contiene
los datos de una muestra unidimensional. Realiza la aproximacion normal si el tama~
no
muestral es mayor que 20, o si en la muestra aparece alg
un cero o hay empates.
Veanse tambien pdf_rank_test y cdf_rank_test.

Opciones:
median, valor por defecto 0, es el valor de la mediana a ser contrastado.
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
El resultado devuelto por la funcion test_signed_rank es un objeto inference_
result con los siguientes apartados:
1. med_estimate: la mediana muestral.

968

Manual de Maxima

2. method: procedimiento de inferencia.


3. hypotheses: hip
otesis nula y alternativa a ser contrastada.
4. statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
5. distribution:
par
ametro(s).

distribucion del estadstico de contraste, junto con su(s)

6. p_value: p-valor del test.


Ejemplos:
Contrasta la hip
otesis nula H0 : median = 15 frente a la alternativa H1 : median >
15. Este test es exacto, puesto que no hay empates.
(%i1) load("stats")$
(%i2) x: [17.1,15.9,13.7,13.4,15.5,17.6]$
(%i3) test_signed_rank(x,median=15,alternative=greater);
|
SIGNED RANK TEST
|
|
med_estimate = 15.7
|
|
method = Exact test
|
(%o3)
| hypotheses = H0: med = 15 , H1: med > 15
|
|
statistic = 14
|
|
distribution = [signed_rank, 6]
|
|
p_value = 0.28125
Contrasta la hip
otesis nula H0 : equal(median, 2.5) frente a la alternativa H1 :
notequal(median, 2.5). Este es un test asintotico, debido a la presencia de empates.
(%i1) load("stats")$
(%i2) y:[1.9,2.3,2.6,1.9,1.6,3.3,4.2,4,2.4,2.9,1.5,3,2.9,4.2,3.1]$
(%i3) test_signed_rank(y,median=2.5);
|
SIGNED RANK TEST
|
|
med_estimate = 2.9
|
|
method = Asymptotic test. Ties
|
(%o3)
|
hypotheses = H0: med = 2.5 , H1: med # 2.5
|
|
statistic = 76.5
|
| distribution = [normal, 60.5, 17.58195097251724]
|
|
p_value = .3628097734643669

Captulo 74: stats

969

test_rank_sum (x1, x2 )
test_rank_sum (x1, x2, option )

[Funcion]
[Funcion]
Este es el test de Wilcoxon-Mann-Whitney para comparar las medianas de dos poblaciones continuas. Los dos primeros argumentos x1 y x2 son listas o matrices columna
con los datos de dos muestras independientes. Realiza la aproximacion normal si
alguna de las muestras tiene tama~
no mayor que 10, o si hay empates.
Opci
on:
alternative, valor por defecto twosided, es la hipotesis alternativa; valores
v
alidos son: twosided, greater y less.
El resultado devuelto por la funcion test_rank_sum es un objeto inference_result
con los siguientes apartados:
1. method: procedimiento de inferencia.
2. hypotheses: hip
otesis nula y alternativa a ser contrastada.
3. statistic: valor del estadstico de contraste utilizado para probar la hipotesis.
4. distribution:
par
ametros.

distribucion del estadstico de contraste, junto con sus

5. p_value: p-valor del test.


Ejemplos:
Contrasta si dos poblaciones tiene medianas similares. Al ser los tama~
nos muestrales
peque~
nos, se realiza el test exacto.
(%i1)
(%i2)
(%i3)
(%i4)

load("stats")$
x:[12,15,17,38,42,10,23,35,28]$
y:[21,18,25,14,52,65,40,43]$
test_rank_sum(x,y);
|
RANK SUM TEST
|
|
method = Exact test
|
| hypotheses = H0: med1 = med2 , H1: med1 # med2
(%o4)
|
|
statistic = 22
|
|
distribution = [rank_sum, 9, 8]
|
|
p_value = .1995886466474702

Ahora, con muestras mayores y empates, el procedimiento realiza la aproximacion


normal. La hip
otesis alternativa es H1 : median1 < median2.
(%i1)
(%i2)
(%i3)
(%i4)

load("stats")$
x: [39,42,35,13,10,23,15,20,17,27]$
y: [20,52,66,19,41,32,44,25,14,39,43,35,19,56,27,15]$
test_rank_sum(x,y,alternative=less);
|
RANK SUM TEST
|

970

Manual de Maxima

(%o4)

|
method = Asymptotic test. Ties
|
| hypotheses = H0: med1 = med2 , H1: med1 < med2
|
|
statistic = 48.5
|
| distribution = [normal, 79.5, 18.95419580097078]
|
|
p_value = .05096985666598441

test_normality (x )

[Funcion]
Test de Shapiro-Wilk para el contraste de normalidad. El argumento x es una lista
de n
umeros, con tama~
no muestral mayor que 2 y menor o igual que 5000; bajo cualesquiera otras condiciones, la funcion test_normality emite un mensaje de error.
Referencia:
[1] Algorithm AS R94, Applied Statistics (1995), vol.44, no.4, 547-551
El resultado devuelto por la funcion test_normality es un objeto inference_result
con los siguientes apartados:
1. statistic: valor del estadstico W.
2. p_value: p-valor bajo la hipotesis de normalidad.
Ejemplos:
Contrasta la
(%i1)
(%i2)
(%i3)

normalidad de una poblacion a partir de una muestra de tama~


no 9.
load("stats")$
x:[12,15,17,38,42,10,23,35,28]$
test_normality(x);
|
SHAPIRO - WILK TEST
|
(%o3)
| statistic = .9251055695162436
|
| p_value = .4361763918860381

linear_regression (x )
linear_regression (x option )

[Funcion]
[Funcion]
Regresi
on lineal m
ultiple, yi = b0 + b1 x1 i + b2 x2 i + ... + bk xk i + ui , donde ui son
variables aleatorias independientes N (0, sigma). El argumento x debe ser una matriz
con m
as de una columna. La u
ltima columna se considera que son las respuestas (yi ).
Opci
on:
conflevel, valor por defecto 95/100, nivel de confianza para los intervalos de
confianza; debe ser una expresion que tome un valor en el intervalo (0,1).
El resultado devuelto por la funcion linear_regression es un objeto inference_
result de Maxima con los siguientes campos:
1. b_estimation: estimadores de los coeficientes de regresion.
2. b_covariances: matriz de covarianzas de los estimadores de los coeficientes de
regresi
on.

Captulo 74: stats

3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

971

b_conf_int: intervalos de confianza para los coeficientes de regresion.


b_statistics: estadsticos para los contrastes de los coeficientes.
b_p_values: p-valores para los contrastes de los coeficientes.
b_distribution: distribucion de probabilidad para los contrastes de los coeficientes.
v_estimation: estimador insesgado de la varianza.
v_conf_int: intervalo de confianza de la varianza.
v_distribution: distribucion de probabilidad para el contraste de la varianza.
residuals: residuos.
adc: coeficiente de determinacion ajustado.
aic: Criterio de informacion de Akaike.
bic: Criterio de informacion de Bayes.

Solamente los apartados 1, 4, 5, 6, 7, 8, 9 y 11, en este orden, se muestran por


defecto. El resto permanecen ocultos hasta que el usuario haga uso de las funciones
items_inference y take_inference.
Ejemplo:
Ajustando un modelo lineal a una muestra tridimensional. La u
ltima columna se
considera que son las respuestas (yi ).
(%i2) load("stats")$
(%i3) X:matrix(
[58,111,64],[84,131,78],[78,158,83],
[81,147,88],[82,121,89],[102,165,99],
[85,174,101],[102,169,102])$
(%i4) fpprintprec: 4$
(%i5) res: linear_regression(X);
|
LINEAR REGRESSION MODEL
|
| b_estimation = [9.054, .5203, .2397]
|
| b_statistics = [.6051, 2.246, 1.74]
|
| b_p_values = [.5715, .07466, .1423]
|
(%o5)
|
b_distribution = [student_t, 5]
|
|
v_estimation = 35.27
|
|
v_conf_int = [13.74, 212.2]
|
|
v_distribution = [chi2, 5]
|
|
adc = .7922
(%i6) items_inference(res);
(%o6) [b_estimation, b_covariances, b_conf_int, b_statistics,

972

Manual de Maxima

b_p_values, b_distribution, v_estimation, v_conf_int,


v_distribution, residuals, adc, aic, bic]
(%i7) take_inference(b_covariances, res);
[ 223.9
- 1.12
- .8532 ]
[
]
(%o7)
[ - 1.12
.05367
- .02305 ]
[
]
[ - .8532 - .02305
.01898 ]
(%i8) take_inference(bic, res);
(%o8)
30.98
(%i9) load("draw")$
(%i10) draw2d(
points_joined = true,
grid = true,
points(take_inference(residuals, res)) )$

74.4 Funciones y variables para distribuciones especiales


pdf_signed_rank (x, n )

[Funcion]
Funci
on de densidad de probabilidad de la distribucion exacta del estadstico de contraste del test de los rangos signados. El argumento x es un n
umero real y n un entero
positivo.
Vease tambien test_signed_rank.

cdf_signed_rank (x, n )

[Funcion]
Funci
on de probabilidad acumulada de la distribucion exacta del estadstico de contraste del test de los rangos signados. El argumento x es un n
umero real y n un entero
positivo.
Vease tambien test_signed_rank.

pdf_rank_sum (x, n, m )

[Funcion]
Funci
on de densidad de probabilidad de la distribucion exacta del estadstico de contraste de Wilcoxon-Mann-Whitney. El argumento x es un n
umero real y n y m son
ambos enteros positivos.
Vease tambien test_rank_sum.

cdf_rank_sum (x, n, m )

[Funcion]
Funci
on de probabilidad acumulada de la distribucion exacta del estadstico de contraste de Wilcoxon-Mann-Whitney. El argumento x es un n
umero real y n y m son
ambos enteros positivos.
Vease tambien test_rank_sum.

Captulo 75: stirling

973

75 stirling
75.1 Funciones y variables para stirling
stirling (z,n )
stirling (z,n,pred )

[Funcion]
[Funcion]
Sustituye gamma(x) por la f
ormula de Stirling O(1/x( 2n 1)). Si n no es un entero
no negativo, emite un mensaje de error. Con el tercer argumento opcional pred, la
formula de Stirling s
olo se aplica si pred vale true.
Referencia: Abramowitz & Stegun, " Handbook of mathematical functions", 6.1.40.
Ejemplos:
(%i1) load (stirling)$
(%i2) stirling(gamma(%alpha+x)/gamma(x),1);
1/2 - x
x + %alpha - 1/2
(%o2) x
(x + %alpha)
1
1
--------------- - ---- - %alpha
12 (x + %alpha)
12 x
%e
(%i3) taylor(%,x,inf,1);
%alpha
2
%alpha
%alpha
x
%alpha - x
%alpha
(%o3)/T/ x
+ -------------------------------- + . . .
2 x
(%i4) map(factor,%);
%alpha - 1
%alpha
(%alpha - 1) %alpha x
(%o4)
x
+ ------------------------------2

La funci
on stirling conoce la diferencia existente entre la variable gamma y la
funci
on gamma:
(%i5) stirling(gamma + gamma(x),0);
x - 1/2
- x
(%o5)
gamma + sqrt(2) sqrt(%pi) x
%e
(%i6) stirling(gamma(y) + gamma(x),0);
y - 1/2
- y
(%o6) sqrt(2) sqrt(%pi) y
%e
x - 1/2
- x
+ sqrt(2) sqrt(%pi) x
%e
Para aplicar la f
ormula de Stirling solo a aquellos terminos que contengan la variable
k, h
agase uso del tercer argumento opcional; por ejemplo,
(%i7) makegamma(pochhammer(a,k)/pochhammer(b,k));
(%o7) (gamma(b)*gamma(k+a))/(gamma(a)*gamma(k+b))

974

Manual de Maxima

(%i8) stirling(%,1, lambda([s], not(freeof(k,s))));


(%o8) (%e^(b-a)*gamma(b)*(k+a)^(k+a-1/2)*(k+b)^(-k-b+1/2))/gamma(a)
Los terminos gamma(a) y gamma(b) no contienen a k, por lo que la formula de Stirling
no ha sido aplicada a ellos.
Antes de hacer uso de esta funcion ejec
utese load("stirling").

Captulo 76: stringproc

975

76 stringproc
76.1 Introducci
on al procesamiento de cadenas
El paquete stringproc ampla las capacidades de Maxima para manipular cadenas de
caracteres, al tiempo que a~
nade algunas funciones u
tiles para la lectura y escritura de
ficheros.
Para dudas y fallos, por favor contactese con volkervannek at gmail dot com.
En Maxima, una cadena de caracteres se construye facilmente escribiendola entre comillas dobles, como en "texto". La funcion stringp comprueba si el argumento es una cadena.
(%i1) m: "text";
(%o1)
text
(%i2) stringp(m);
(%o2)
true
Los caracteres se representan como cadenas de longitud unidad. No se tratan como
caracteres Lisp. Se pueden chequear con la funcion charp (o con lcharp para los caracteres
Lisp). La conversi
on de caracteres Lisp a caracteres Maxima se realiza con la funcion
cunlisp.
(%i1) c: "e";
(%o1)
e
(%i2) [charp(c),lcharp(c)];
(%o2)
[true, false]
(%i3) supcase(c);
(%o3)
E
(%i4) charp(%);
(%o4)
true
Todos los caracteres devueltos por las funciones de stringproc son caracteres de Maxima. Puesto que los caracteres introducidos son cadenas de longitud igual a la unidad, se
pueden utilizar las funciones de cadenas tambien para los caracteres, como se ha hecho con
supcase en el anterior ejemplo.
Es importante tener en cuenta que el primer caracter en una cadena de Maxima ocupa
la posici
on 1. Esto se ha dise~
nado as para mantener la compatibilidad con las listas de
Maxima. Veanse las definiciones de charat y charlist para ver ejemplos.
Las funciones de cadena se utilizan frecuentemente cuando se trabaja con ficheros. El
siguiente ejemplo muestra algunas de estas funciones en accion.
Ejemplo:
La funci
on openw enva un flujo de salida hacia un fichero, entonces printf permitir
a
formatera la escritura en este fichero. Vease printf para mas detalles.
(%i1) s: openw("E:/file.txt");
(%o1)
#<output stream E:/file.txt>
(%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) );
(%o2)
done
(%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%",
42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );

976

Manual de Maxima

(%o3)
false
(%i4) close(s);
(%o4)
true
Una vez cerrado el flujo, se podra abrir nuevamente. La funcion readline devuelve el
renglon entero como una u
nica cadena. El paquete stringproc dispone de muchas funciones
para manipular cadenas. La separacion de palabras se puede hacer con split o tokens.
(%i5) s: openr("E:/file.txt");
(%o5)
#<input stream E:/file.txt>
(%i6) readline(s);
(%o6)
0 1 1 2 3 5 8 13 21 34 55
(%i7) line: readline(s);
(%o7)
42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
(%i8) list: tokens(line);
(%o8)
[42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
(%i9) map( parsetoken, list );
(%o9)
[42, 1.234, false, false, 0.01, 0.01, false]
La funci
on parsetoken s
olo analiza sintacticamente n
umeros enteros y decimales. El
analisis de smbolos y n
umeros decimales grandes (big floats) necesita parse_string, que
se cargar autom
aticamente desde eval_string.lisp.
(%i5) s: openr("E:/file.txt");
(%o5)
#<input stream E:/file.txt>
(%i6) readline(s);
(%o6)
0 1 1 2 3 5 8 13 21 34 55
(%i7) line: readline(s);
(%o7)
42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
(%i8) list: tokens(line);
(%o8)
[42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
(%i9) map( parse_string, list );
(%o9)
[42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
(%i10) float(%);
(%o10) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01,
0.01, 0.01]
(%i11) readline(s);
(%o11)
false
(%i12) close(s)$
La funci
on readline devuelve false cuando se alcanza el final del fichero.

76.2 Funciones y variables para entrada y salida


Ejemplo:
(%i1) s: openw("E:/file.txt");
(%o1)
#<output stream E:/file.txt>
(%i2) control:
"~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2t\
and an integer: ~20t~d~%"$
(%i3) printf( s,control, true,[1,2,3],42 )$

Captulo 76: stringproc

977

(%o3)
false
(%i4) close(s);
(%o4)
true
(%i5) s: openr("E:/file.txt");
(%o5)
#<input stream E:/file.txt>
(%i6) while stringp( tmp:readline(s) ) do print(tmp)$
An atom:
true
and a list:
one two three
and an integer:
42
(%i7) close(s)$

close (stream )

[Funcion]
Cierra el flujo de datos stream y devuelve true si stream haba sido abierto.

flength (stream )

[Funcion]
Devuelve el n
umero de elementos en stream, el cual debe ser un flujo de datos desde
o hacia un fichero.

fposition (stream )
fposition (stream, pos )

[Funcion]
[Funcion]
Devuelve la posici
on actual en el flujo de datos stream si no se utiliza pos. Si se utiliza
pos, fposition fija la posici
on en stream. stream debe ser un flujo de datos desde o
hacia un fichero y pos debe ser un entero positivo que hace corresponder al primer
elemento de stream la posici
on 1.

freshline ()
freshline (stream )

[Funcion]
[Funcion]
Escribe una nueva lnea (en el flujo de datos stream) si la posicion actual no corresponde al inicio de la lnea.
Vease tambien newline.

get_output_stream_string (stream )

[Funcion]
Devuelve una cadena con todos los caracteres presentes en stream, que debe ser un
flujo de datos de salida abiero. Los caracteres devueltos son eliminados de stream.
Para un ejemplo, vease make_string_output_stream .

make_string_input_stream (string )
make_string_input_stream (string, start )
make_string_input_stream (string, start, end )

[Funcion]
[Funcion]
[Funcion]
Devuelve un flujo de entrada que contiene partes de string junto con el caracter de
final de fichero. Sin argumentos opcionales, el flujo contiene la cadena entera y se
posiciona frente al primer caracter. Los argumentos start y end definen la subcadena
contenida en el flujo. El primer caracter esta disponible en la posicion 1.
Ejemplo:
(%i1) istream : make_string_input_stream("text", 1, 4);
(%o1)
#<string-input stream from "text">
(%i2) (while (c : readchar(istream)) # false do sprint(c), newline())$
t e x
(%i3) close(istream)$

978

Manual de Maxima

make_string_output_stream ()

[Funcion]
Devuelve un flujo de salida que acepta caracteres. Los caracteres de este flujo podran
obtenerse con get_output_stream_string.

Ejemplo:
(%i1) ostream : make_string_output_stream();
(%o1)
#<string-output stream 09622ea0>
(%i2) printf(ostream, "foo")$
(%i3) printf(ostream, "bar")$
(%i4) string : get_output_stream_string(ostream);
(%o4)
foobar
(%i5) printf(ostream, "baz")$
(%i6) string : get_output_stream_string(ostream);
(%o6)
baz
(%i7) close(ostream)$

newline ()
newline (stream )

[Funcion]
[Funcion]

Escribe una nueva lnea (en el flujo de datos stream).


Vease sprint para un ejemplo de uso de newline().
Notese que hay algunos casos en los que newline no trabaja seg
un lo esperado.

opena (file )

[Funcion]
Devuelve un flujo de datos al fichero file. Si se abre un fichero ya existente, opena
a~
nade elementos al final del fichero.

openr (file )

[Funcion]
Devuelve un flujo de datos de entrada al fichero file. Si file no existe, sera creado.

openw (file )

[Funcion]
Devuelve un flujo de datos de salida al fichero file. Si file no existe, sera creado. Si
se abre un fichero ya existente, openw lo modifica borrando el contenido anterior.

printf (dest, string )


printf (dest, string, expr_1, ..., expr_n )

[Funcion]
[Funcion]
Genera una cadena de caracteres a partir de la cadena de control string, teniendo en
cuenta que las tildes introducen directivas. El caracter que va despues de la tilde,
posiblemente precedido por parametros y modificadores, especifica el tipo de formato
que se desea. La mayor parte de las directivas usan uno o mas elementos de los
argumentos expr 1, ..., expr n para crear la salida.

Si dest es un flujo o vale true, entonces printf devuelve false. En otro caso, printf
devuelve una cadena conteniendo la salida.
printf da acceso a la funci
on format de Common Lisp. El siguiente ejemplo muestra
la relaci
on entre estas dos funciones.

Captulo 76: stringproc

979

(%i1) printf(true, "R~dD~d~%", 2, 2);


R2D2
(%o1)
false
(%i2) :lisp (format t "R~dD~d~%" 2 2)
R2D2
NIL
La siguiente descripci
on es un simple resumen de las posibilidades de printf. La
funci
on format de Common Lisp se encuentra descrita en detalle en muchas referencias, como el manual libre "Common Lisp the Language" de Guy L. Steele; en
particular, el captulo 22.3.3.
~%
~&
~t
~$
~d
~b
~o
~x
~br
~r
~p
~f
~e
~g
~h
~a
~s
~~
~<
~(
~[
~{

nueva l
nea
l
nea de refresco
tabulaci
on
moneda
entero en base decimal
entero en base binaria
entero en base octal
entero en base hexadecimal
entero en base b
deletrea un entero
plural
decimal en coma flotante
notaci
on cient
fica
~f o ~e, dependiendo de la magnitud
n
umero decimal grande (bigfloat )
utiliza la funci
on string de Maxima
como ~a, pero las cadenas se devuelven entre "comillas dobles"
~
justificaci
on, ~> termina
conversor may
uscula/min
uscula, ~) termina
selecci
on, ~] termina
iteraci
on, ~} termina

La directiva ~h para n
umeros decimales grandes no pertenece al estandar de Lisp, por
lo que se ilustra m
as abajo.
La directiva ~* no est
a soportada.
Ejemplos:
Si dest es un flujo o vale true, entonces printf devuelve false. En otro caso, printf
devuelve una cadena conteniendo la salida.
(%i1) printf( false, "~a ~a ~4f ~a ~@r",
"String",sym,bound,sqrt(12),144), bound = 1.234;
(%o1)
String sym 1.23 2*sqrt(3) CXLIV
(%i2) printf( false,"~{~a ~}",["one",2,"THREE"] );
(%o2)
one 2 THREE
(%i3) printf(true,"~{~{~9,1f ~}~%~}",mat ),
mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$

980

Manual de Maxima

1.1
2.0
3.3
4.0
5.0
6.0
7.0
8.9
9.0
(%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
(%i5) printf( false,control, n,n,if n=1 then 1 else 2 ), n=2;
(%o5)
Two birds are singing.
La directiva ~h se ha introducido para formatear decimales grandes.
~w,d,e,x,o,p@H
w : width
d : decimal digits behind floating point
e : minimal exponent digits
x : preferred exponent
o : overflow character
p : padding character
@ : display sign for positive numbers
(%i1) fpprec : 1000$
(%i2) printf(true, "|~h|~%", 2.b0^-64)$
|0.0000000000000000000542101086242752217003726400434970855712890625|
(%i3) fpprec : 26$
(%i4) printf(true, "|~h|~%", sqrt(2))$
|1.4142135623730950488016887|
(%i5) fpprec : 24$
(%i6) printf(true, "|~h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i7) printf(true, "|~28h|~%", sqrt(2))$
|
1.41421356237309504880169|
(%i8) printf(true, "|~28,,,,,*h|~%", sqrt(2))$
|***1.41421356237309504880169|
(%i9) printf(true, "|~,18h|~%", sqrt(2))$
|1.414213562373095049|
(%i10) printf(true, "|~,,,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-3|
(%i11) printf(true, "|~,,2,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-03|
(%i12) printf(true, "|~20h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i13) printf(true, "|~20,,,,+h|~%", sqrt(2))$
|++++++++++++++++++++|

readchar (stream )

[Funcion]
Elimina y devuelve el primer caracter de stream. Si se ha alcanzado el final del fichero,
readchar devuelve false.
Para un ejemplo, vease make_string_input_stream.

readline (stream )

[Funcion]
Devuelve una cadena con los caracteres desde la posicion actual en el flujo de datos
stream hasta el final de la lnea, o false si se ha alcanzado el final del fichero.

Captulo 76: stringproc

981

sprint (expr_1, ..., expr_n )

[Funcion]
Eval
ua y muestra sus argumentos uno tras otro en un renglon comenzando por su
extremo izquierdo.
La funci
on newline(), que se carga automaticamente desde stringproc.lisp, puede
ser de utilidad si se quiere intercalar un salto de lnea.
(%i1) for n:0 thru 19 do sprint( fib(n) )$
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
(%i2) for n:0 thru 22 do (
sprint(fib(n)), if mod(n,10)=9 then newline() )$
0 1 1 2 3 5 8 13 21 34
55 89 144 233 377 610 987 1597 2584 4181
6765 10946 17711

76.3 Funciones y variables para caracteres


alphacharp (char )

[Funcion]

Devuelve true si char es una caracter alfabetico.

alphanumericp (char )

[Funcion]

Devuelve true si char es una caracter alfabetico o un dgito.

ascii (int )

[Funcion]
Devuelve el car
acter correspondiente al n
umero ASCII int, debiendo ser 1 < int <
256.
(%i1) for n from 0 thru 255 do (
tmp: ascii(n),
if alphacharp(tmp) then sprint(tmp), if n=96 then newline() )$
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z

cequal (char_1, char_2 )

[Funcion]

Devuelve true si char 1 y char 2 son el mismo caracter.

cequalignore (char_1, char_2 )

[Funcion]

Como cequal, pero ignora si las letras estan en may


usculas o min
usculas.

cgreaterp (char_1, char_2 )

[Funcion]

Devuelve true si el n
umero ASCII de char 1 es mayor que el de char 2.

cgreaterpignore (char_1, char_2 )

[Funcion]
Como cgreaterp, pero ignora si las letras estan en may
usculas o min
usculas.

charp (obj )

[Funcion]

Devuelve true si obj es un caracter de Maxima.

cint (char )

[Funcion]

Devuelve el n
umero ASCII de char.

clessp (char_1, char_2 )


Devuelve true si el n
umero ASCII de char 1 es menor que el de char 2.

[Funcion]

982

Manual de Maxima

clesspignore (char_1, char_2 )

[Funcion]

Como clessp, pero ignora si las letras estan en may


usculas o min
usculas.

constituent (char )

[Funcion]
Devuelve true si char es un caracter grafico y no el caracter espacio. Un caracter
gr
afico es el que se puede ver y con un espacio a~
nadido; constituent esta definido
por Paul Graham, ANSI Common Lisp, 1996, page 67.
(%i1) for n from 0 thru 255 do (
tmp: ascii(n), if constituent(tmp) then
! " # % ( ) * + , - . / 0 1 2 3 4 5
C D E F G H I J K L M N O P Q R S T U V
d e f g h i j k l m n o p q r s t u v w

sprint(tmp)
6 7 8 9 : ;
W X Y Z [ \
x y z { | }

)$
< = > ? @ A B
] ^ _ a b c
~

cunlisp (lisp_char )

[Funcion]
Convierte un car
acter Lisp en uno de Maxima. El uso de esta funcion por parte del
usuario no ser
a necesario.

digitcharp (char )

[Funcion]

Devuelve true si char es un dgito.

lcharp (obj )

[Funcion]
Devuelve true si obj es un caracter de Lisp. El uso de esta funcion por parte del
usuario no ser
a necesario.

lowercasep (char )

[Funcion]

Devuelve true si char es un caracter en min


uscula.
[Variable]

newline
El car
acter de nueva lnea.

[Variable]

space
El car
acter de espacio.

[Variable]

tab
El car
acter de tabulaci
on.

uppercasep (char )

[Funcion]

Devuelve true si char es un caracter en may


uscula.

76.4 Funciones y variables para cadenas


base64 (string )

[Funcion]
Devuelve la representaci
on en base 64 de string en formato de cadena de caracteres.
Ejemplo:
(%i1) base64 : base64("foo bar baz");
(%o1)
Zm9vIGJhciBiYXo=
(%i2) string : base64_decode(base64);
(%o2)
foo bar baz

Captulo 76: stringproc

983

base64_decode (base64-string )

[Funcion]
Decodifica la cadena de caracteres base64-string, codificada en base 64, y devuelve la
cadena original.
Para un ejemplo, vease base64.

charat (string, n )

[Funcion]
Devuelve el n-esimo car
acter de string. Al primer caracter de string le corresponde n
= 1.
(%i1) charat("Lisp",1);
(%o1)
L

charlist (string )

[Funcion]

Devuelve una lista con todos los caracteres de string.


(%i1) charlist("Lisp");
(%o1)
[L, i, s, p]
(%i2) %[1];
(%o2)
L

eval_string (str )

[Funcion]
Analiza sint
acticamente la cadena str como una expresion de Maxima y la eval
ua. La
cadena str puede terminar o no con cualquiera de los smbolos de final de sentencia
(d
olar $ o punto y coma ;). Solo se analiza la primera expresion si hay mas de una.
Se emitir
a un mensaje de error si str no es una cadena.
Ejemplos:
(%i1) eval_string ("foo: 42; bar: foo^2 + baz");
(%o1)
42
(%i2) eval_string ("(foo: 42, bar: foo^2 + baz)");
(%o2)
baz + 1764
Vease tambien parse_string.

md5sum (string )

[Funcion]
Devuelve, en formato de cadena de caracteres, el resultado de la suma de verificacion
md5 del argumento string. Para obtener el valor devuelto por la funcion como n
umero
entero, fijar la base numerica de entrada a 16 y a~nadir como prefijo el cero.
Ejemplo:
(%i1) string : md5sum("foo bar baz");
(%o1)
ab07acbb1e496801937adfa772424bf7
(%i2) ibase : obase : 16.$
(%i3) integer : parse_string(sconcat(0, string));
(%o3)
0ab07acbb1e496801937adfa772424bf7

parse_string (str )

[Funcion]
Analiza sint
acticamente la cadena str como una expresion de Maxima, pero no la
eval
ua. La cadena str puede terminar o no con cualquiera de los smbolos de final de
sentencia (d
olar $ o punto y coma ;). Solo se analiza la primera expresion si hay m
as
de una.

984

Manual de Maxima

Se emitir
a un mensaje de error si str no es una cadena.
Ejemplos:
(%i1) parse_string ("foo: 42; bar: foo^2 + baz");
(%o1)
foo : 42
(%i2) parse_string ("(foo: 42, bar: foo^2 + baz)");
2
(%o2)
(foo : 42, bar : foo + baz)
Vease tambien eval_string.

scopy (string )

[Funcion]

Devuelve una copia nueva de la cadena string.

sdowncase (string )
sdowncase (string, start )
sdowncase (string, start, end )

[Funcion]
[Funcion]
[Funcion]

Convierte caracteres en min


uscula a may
uscula. Vease tambien supcase.

sequal (string_1, string_2 )

[Funcion]

Devuelve true si string 1 y string 2 son dos cadenas de caracteres iguales.

sequalignore (string_1, string_2 )

[Funcion]

Igual que sequal pero no diferencia entre min


usculas y may
usculas..

sexplode (string )

[Funcion]

El nombre sexplode es un seudonimo de la funcion charlist.

simplode (list )
simplode (list, delim )

[Funcion]
[Funcion]
La funci
on simplode admite como entrada una lista de expresiones para luego convertirla en una cadena de caracteres. Si no se utiliza la opcion delim para indicar el
delimitador, entonces simplode no hace uso de ninguno. El valor de delim puede ser
cualquier cadena.
(%i1) simplode(["xx[",3,"]:",expand((x+y)^3)]);
(%o1)
xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
(%i2) simplode( sexplode("stars")," * " );
(%o2)
s * t * a * r * s
(%i3) simplode( ["One","more","coffee."]," " );
(%o3)
One more coffee.

sinsert (seq, string, pos )

[Funcion]
Devuelve la concatenaci
on de las cadenas substring (string, 1, pos - 1), seq y
substring (string, pos ). Notese que al primer caracter de string le corresponde
la posici
on 1.
(%i1) s: "A submarine."$
(%i2) concat( substring(s,1,3),"yellow ",substring(s,3) );
(%o2)
A yellow submarine.
(%i3) sinsert("hollow ",s,3);
(%o3)
A hollow submarine.

Captulo 76: stringproc

985

sinvertcase (string )
sinvertcase (string, start )
sinvertcase (string, start, end )

[Funcion]
[Funcion]
[Funcion]
Devuelve la misma cadena string pero con todos sus caracteres desde la posicion start
hasta end invertidos, esto es, las may
usculas se convierten en min
usculas y estas en
may
usculas. Si no se incluye el argumento end, se invierten todos los caracteres desde
start hasta el final de la cadena.
(%i1) sinvertcase("sInvertCase");
(%o1)
SiNVERTcASE

slength (string )

[Funcion]

Devuelve el n
umero de caracteres de string.

smake (num, char )

[Funcion]
Construye una cadena de longitud num con todos sus caracteres iguales a char.
(%i1) smake(3,"w");
(%o1)

www

smismatch (string_1, string_2 )


smismatch (string_1, string_2, test )

[Funcion]
[Funcion]
Devuelve la posici
on del primer caracter de string 1 distinto del correpondiente a
string 2. La respuesta ser
a false si no existe tal caracter. Por defecto, la funcion
de comparaci
on es sequal. Si se quiere ignorar la diferencia entre may
usculas y
min
usculas, h
agase uso de sequalignore para el argumento test.
(%i1) smismatch("seven","seventh");
(%o1)
6

split (string )
split (string, delim )
split (string, delim, multiple )

[Funcion]
[Funcion]
[Funcion]
Devuelve la lista de todos los lexemas (tokens) de string. La funcion split utiliza
delim como delimitador, y en caso de no ser utilizado este argumento, sera utilizado el
espacio en blanco como delimitador por defecto. El argumento multiple es una variable booleana con valor true por defecto. Los delimitadores m
ultiples se leen como
uno solo, lo que resulta de utilidad si las tabulaciones son almacenadas como secuencias de espacios en blanco. Si a multiple se le asigna el valor false, se consirararan
todos los delimitadores.
(%i1) split("1.2
2.3
3.4
4.5");
(%o1)
[1.2, 2.3, 3.4, 4.5]
(%i2) split("first;;third;fourth",";",false);
(%o2)
[first, , third, fourth]

sposition (char, string )

[Funcion]
Devuelve la posici
on del primer caracter de string que coincide con char. Al primer
car
acter de string le corresponde la posicion 1. Para cuando se quiera ignorar la
diferencia entre may
usculas y min
usculas, vease ssearch.

986

Manual de Maxima

(seq, string )
[Funcion]
(seq, string, test )
[Funcion]
(seq, string, test, start )
[Funcion]
(seq, string, test, start, end )
[Funcion]
Devuelve la cadena string pero sin las subcadenas que coinciden con seq. La funcion de
comparaci
on por defecto es sequal. Si se quiere ignorar la diferencia entre may
usculas
y min
usculas, h
agase uso de sequalignore para el argumento test. Utilcense start y
end para acotar la b
usqueda. Al primer caracter de string le corresponde la posicion
1.

sremove
sremove
sremove
sremove

(%i1) sremove("nt","I dont like coffee.");


(%o1)
I do like coffee.
(%i2) sremove ("DO ",%,sequalignore);
(%o2)
I like coffee.

sremovefirst
sremovefirst
sremovefirst
sremovefirst

(seq, string )
(seq, string, test )
(seq, string, test, start )
(seq, string, test, start, end )
Act
ua de forma similar a la funcion sremove, pero solo elimina la primera
de la subcadena seq.

[Funcion]
[Funcion]
[Funcion]
[Funcion]
aparicion

sreverse (string )

[Funcion]

Devuelve una cadena con todos los caracteres de string en orden inverso.
(seq, string )
[Funcion]
(seq, string, test )
[Funcion]
(seq, string, test, start )
[Funcion]
(seq, string, test, start, end )
[Funcion]
Devuelve la posici
on de la primera subcadena de string que coincide con la cadena seq.
La funci
on de comparaci
on por defecto es sequal. Si se quiere ignorar la diferencia
entre may
usculas y min
usculas, hagase uso de sequalignore para el argumento test.
Utilcense start y end para acotar la b
usqueda. Al primer caracter de string le
corresponde la posici
on 1.

ssearch
ssearch
ssearch
ssearch

(%i1) ssearch("~s","~{~S ~}~%",sequalignore);


(%o1)
4

ssort (string )
ssort (string, test )

[Funcion]
[Funcion]
Devuelve una cadena con todos los caracteres de string en un orden tal que no haya
dos caracteres sucesivos c y d que verifiquen que test (c, d ) sea igual false y
test (d, c ) igual a true. La funcion de comparacion test por defecto es clessp,
siendo el conjunto de posibles valores para este argumento {clessp, clesspignore,
cgreaterp, cgreaterpignore, cequal, cequalignore}.
(%i1) ssort("I dont like Mondays.");
(%o1)
.IMaddeiklnnoosty
(%i2) ssort("I dont like Mondays.",cgreaterpignore);
(%o2)
ytsoonnMlkIiedda.

Captulo 76: stringproc

987

(new, old, string )


[Funcion]
(new, old, string, test )
[Funcion]
(new, old, string, test, start )
[Funcion]
(new, old, string, test, start, end )
[Funcion]
Devuelve una cadena similar a string pero en la que aquellas subcadenas coincidentes
con old han sido sustituidas por new. Las subcadenas old y new no necesitan ser
de la misma longitud. La funcion de comparacion por defecto es sequal. Si se
quiere ignorar la diferencia entre may
usculas y min
usculas durante la b
usqueda de
old, h
agase uso de sequalignore para el argumento test. Utilcense start y end para
acotar la b
usqueda. Al primer caracter de string le corresponde la posicion 1.
(%i1) ssubst("like","hate","I hate Thai food. I hate green tea.");
(%o1)
I like Thai food. I like green tea.
(%i2) ssubst("Indian","thai",%,sequalignore,8,12);
(%o2)
I like Indian food. I like green tea.

ssubst
ssubst
ssubst
ssubst

(new, old, string )


[Funcion]
(new, old, string, test )
[Funcion]
(new, old, string, test, start )
[Funcion]
(new, old, string, test, start, end )
[Funcion]
Act
ua de forma similar a la funcion subst, pero solo hace la sustitucion en la primera
coincidencia con old.

ssubstfirst
ssubstfirst
ssubstfirst
ssubstfirst

strim (seq,string )

[Funcion]
Devuelve la cadena string pero recortando los caracteres de seq que tuviese en sus
extremos.
(%i1) "/* comment */"$
(%i2) strim(" /*",%);
(%o2)
comment
(%i3) slength(%);
(%o3)
7

striml (seq, string )

[Funcion]
Act
ua de forma similar a strim, pero solo recorta en el extremo final de string.

strimr (seq, string )

[Funcion]
Act
ua de forma similar a strim, pero solo recorta en el extremo inicial de string.

stringp (obj )

[Funcion]

Devuelve true si obj es una cadena. Vease un ejemplo en la introduccion.

substring (string, start )


substring (string, start, end )

[Funcion]
[Funcion]
Devuelve la subcadena de string que comienza en la posicion start y termina en la
posici
on end. El car
acter en la posicion end no se incluye. En caso de no suministrarse
el argumento end, la subcadena se extendera hasta el final. Al primer caracter de
string le corresponde la posicion 1.
(%i1) substring("substring",4);
(%o1)
string

988

Manual de Maxima

(%i2) substring(%,4,6);
(%o2)

in

supcase (string )
supcase (string, start )
supcase (string, start, end )

[Funcion]
[Funcion]
[Funcion]
Devuelve la cadena string con todos sus caracteres entre las posiciones start y end
en min
uscula transformados a may
uscula. En caso de no suministrarse el argumento
end, los cambios se extender
an hasta el final.
(%i1) supcase("english",1,2);
(%o1)
English

tokens (string )
tokens (string, test )

[Funcion]
[Funcion]
Devuelve la lista de todos los lexemas (tokens) de string. Los lexemas son subcadenas
cuyos caracteres satisfacen la condicion test. Si no se suministra el argumento test,
se utilizar
a la condici
on constituent, siendo el conjunto de las otras alternativas
{constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp,
characterp, alphanumericp}.
(%i1) tokens("24 October 2005");
(%o1)
[24, October, 2005]
(%i2) tokens("05-10-24",digitcharp);
(%o2)
[05, 10, 24]
(%i3) map(parse_string,%);
(%o3)
[5, 10, 24]

Captulo 77: to poly solve

989

77 to poly solve
77.1 Funciones y variables para to poly solve
Los paquetes to_poly y to_poly_solve son experimentales, siendo posible que las especificaciones de sus funciones puedan cambiar en el futuro, o que algunas de estas funciones
puedan ser incorporadas a otras partes de Maxima.
Los paquetes to_poly y to_poly_solve, junto con su documentacion, fue escrito por
Barton Willis de la Universidad de Nebraska en Kearney.

%and

[Operador]
El operador %and es una conjuncion logica. Maxima simplifica una expresion %and a
true, false o a una expresi
on logicamente equivalente, pero simplificada. El operador
%and es asociativo, conmutativo e idempotente. As, cuando %and devuelva una forma
nominal, sus argumentos no seran redundantes; por ejemplo,
(%i1) a %and (a %and b);
(%o1)

a %and b

Si uno de los argumentos de la conjuncion es la negacion de otro argumento, %and


devuelve false:
(%i2) a %and (not a);
(%o2) false
Si cualquiera de los argumentos vale false, la conjuncion devuelve false, incluso
cuando haya alg
un otro argumento que sea una expresion no booleana; por ejemplo,
(%i2) a %and (not a);
(%o2)

false

Los argumentos de la expresi


on %and que sean inecuaciones se reducen con la simplificaci
on de Fourier; el metodo que se aplica dispone de un pre-procesador que convierte
algunas, pero no todas, las inecuaciones no lineales a lineales. Por ejemplo, el metodo
de simplificaci
on de Fourier simplifica abs(x) + 1 > 0 a true:
(%i4) (x < 1) %and (abs(x) + 1 > 0);
(%o4)
x < 1
Notas
La variable opcional prederror no altera la simplificacion de las expresiones
%and.
Para evitar errores en la precedencia de las operaciones, se recomienda utilizar
parentesis en las expresiones combinadas en las que aparezcan los operadores
%and, %or y not .
Los operadores and y or, tal como estan programados en Maxima, no conocen
las propiedades asociativa ni conmutativa.
Limitaciones La conjunci
on %and simplifica inecuaciones locamente, no globalmente,
lo que significa que conjunciones tales como
(%i5) (x < 1) %and (x > 1);
(%o5)
(x > 1) %and (x < 1)

990

Manual de Maxima

no simplifican a false. Ademas, las rutinas de eliminacion de Fourier ignoran los


hechos almacenados en la base de datos.
(%i6) assume(x > 5);
(%o6)
[x > 5]
(%i7) (x > 1) %and (x > 2);
(%o7)
(x > 1) %and (x > 2)
Por u
ltimo, las inecuaciones no lineales que no se puedan reducir de manera sencilla
a formas lineales, no se simplifican.
No est
a soportada la distributividad de %and respecto de %or, ni la negacion respecto
de %and.
Para hacer uso de este operador, ejec
utese load(to_poly_solve).
Veanse tambien %or, %if, and, or y not.

%if ( bool, a, b )

[Operador]
El operador %if es un condicional. La condicion bool debe tomar un valor logico;
cuando sea true, se devolvera el segundo argumento, y cuando valga false, el segundo. En cualquier otro caso, se obtiene una forma nominal.
En Maxima, las expresiones con desigualdades o igualdades no adquieren valores
logicos; por ejemplo, 5 < 6 no se simplifica a true, ni 5 = 6 false. Sin embargo, en
la condici
on de una sentencia %if, Maxima intenta determinar el valor logico de la
expresi
on de forma autom
atica. Vease un ejemplo:
(%i1) f : %if(x # 1, 2, 8);
(%o1)
%if(x - 1 # 0, 2, 8)
(%i2) [subst(x = -1,f), subst(x=1,f)];
(%o2)
[2, 8]
Si en la condici
on aparece una inecuacion, Maxima la reduce con una simplificacion
de Fourier.
Notas
bullet Si la condici
on no se reduce a un valor logico, Maxima devuelve una forma nominal:
(%i3) %if(42,1,2);
(%o3)
%if(42, 1, 2)
bullet El operador if de Maxima es n-ario, pero el operador %if no lo es.
Por u
ltimo, las inecuaciones no lineales que no se puedan reducir de manera sencilla
a formas lineales, no se simplifican.
Para hacer uso de este operador, ejec
utese load(to_poly_solve).

%or

[Operador]
El operador %or es una disyuncion logica. Maxima simplifica una expresion %or a
true, false o a una expresi
on logicamente equivalente, pero simplificada. El operador
%or es asociativo, conmutativo e idempotente. As, cuando %or devuelva una forma
nominal, sus argumentos no seran redundantes; por ejemplo,
(%i1) a %or (a %or b);
(%o1)
a %or b

Captulo 77: to poly solve

991

Si uno de los argumentos de la disyuncion es la negacion de otro argumento, %or


devuelve true:
(%i2) a %or (not a);
(%o2)
true
Si cualquiera de los argumentos vale true, la disyuncion devuelve true, incluso
cuando haya alg
un otro argumento que sea una expresion no booleana; por ejemplo,
(%i3) 42 %or true;
(%o3)
true
Los argumentos de la expresion %or que sean inecuaciones se reducen con la simplificaci
on de Fourier. Por ejemplo, el metodo de simplificacion de Fourier simplifica
abs(x) + 1 > 0 a true:
(%i4) (x < 1) %or (abs(x) + 1 > 0);
(%o4)
true
Notas
La variable opcional prederror no altera la simplificacion de las expresiones %or.
Para evitar errores en la precedencia de las operaciones, se recomienda utilizar
parentesis en las expresiones combinadas en las que aparezcan los operadores
%and, %or y not .
Los operadores and y or, tal como estan programados en Maxima, no conocen
las propiedades asociativa ni conmutativa.
Limitaciones La conjunci
on %or simplifica inecuaciones locamente, no globalmente, lo
que significa que disyunciones tales como
(%i1) (x < 1) %or (x >= 1);
(%o1) (x > 1) %or (x >= 1)
no simplifican a true. Ademas, las rutinas de eliminacion de Fourier ignoran los
hechos almacenados en la base de datos.
(%i2) assume(x > 5);
(%o2)
[x > 5]
(%i3) (x > 1) %and (x > 2);
(%o3)
(x > 1) %and (x > 2)
Por u
ltimo, las inecuaciones no lineales que no se puedan reducir de manera sencilla
a formas lineales, no se simplifican.
No est
a soportada la distributividad de %or respecto de %and, ni la negacion respecto
de %or.
Para hacer uso de este operador, ejec
utese load(to_poly_solve).
Veanse tambien %and, %if, and, or y not.

complex_number_p (x )

[Funcion]
La funci
on complex_number_p devuelve true si su argumento es de cualquiera de
las formas a + %i * b, a, %i b o %i, donde a y b son racionales o decimales en coma
flotante, de precisi
on doble o arbitraria (bigfloats); para cualesquiera otros argumentos, complex_number_p devuelve false.
Ejemplo:

992

Manual de Maxima

(%i1) map(complex_number_p,[2/3, 2 + 1.5 * %i, %i]);


(%o1)
[true, true, true]
(%i2) complex_number_p((2+%i)/(5-%i));
(%o2)
false
(%i3) complex_number_p(cos(5 - 2 * %i));
(%o3)
false
Vease tambien isreal_p.
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

compose_functions (l )

[Funcion]
La funci
on compose_functions(l) devuelve una expresion lambda que es la composici
on de las funciones presentes en la lista l. Las funciones se aplican de derecha a
izquierda.
Ejemplo:
(%i1) compose_functions([cos, exp]);
%g151
(%o1)
lambda([%g151], cos(%e
))
(%i2) %(x);
x
(%o2)
cos(%e )
Si la lista est
a vaca devuelve la funcion identidad:
(%i3) compose_functions([]);
(%o3)
lambda([%g152], %g152)
(%i4) %(x);
(%o4)
x
Notas
Cuando Maxima detecta que un miembro de la lista no es un smbolo o expresion
lambda, la funci
on funmake (no compose_functions) muestra un mensaje de
error:
(%i5) compose_functions([a < b]);
funmake: first argument must be a symbol, subscripted symbol,
string, or lambda expression; found: a < b
#0: compose_functions(l=[a < b])(to_poly_solve.mac line 40)
-- an error. To debug this try: debugmode(true);
Para evitar conflictos de nombres, la variable independiente se determina con la
funci
on new_variable:
(%i6) compose_functions([%g0]);
(%o6)
lambda([%g154], %g0(%g154))
(%i7) compose_functions([%g0]);
(%o7)
lambda([%g155], %g0(%g155))
Aunque las variables dependientes sean diferentes, Maxima es capaz de determinar que las expresiones lambda son semanticamente equivalentes:
(%i8) is(equal(%o6,%o7));
(%o8)
true

Captulo 77: to poly solve

993

Para hacer uso de esta funci


on, ejec
utese load(to_poly_solve).

dfloat (x )

[Funcion]
La funci
on dfloat es similar a float, pero dfloat aplica rectform cuando float
no puede evaluar a un n
umero decimal de coma flotante de doble precision. Ejemplo:
(%i1) float(4.5^(1 + %i));
%i + 1
(%o1)
4.5
(%i2) dfloat(4.5^(1 + %i));
(%o2)
4.48998802962884 %i + .3000124893895671
Notas
La forma rectangular de una expresion puede no ser la mas adecuada para calculos
numericos
El identificador float es al mismo tiempo una variable opcional, cuyo valor por
defecto es false y el nombre de una funcion.
Veanse tambien float y bfloat.
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

elim (l, x )

[Funcion]
La funci
on elim elimina las variables que se indican en el conjunto o lista x del
conjunto o lista de ecuaciones en l. Cada elemento de x debe ser un smbolo, mientras
que los elementos de l pueden ser ecuaciones o expresiones que se suponen igualadas
a cero.
La funci
on elim devuelve una lista formada por dos listas; la primera esta formada
por las expresiones con las variables eliminadas y la segunda es la lista de pivotes o,
en otras palabras, es la lista de expresiones que elim ha utilizado para proceder con
la eliminaci
on.
Ejemplo:
Eliminaci
on entre ecuaciones lineales. Eliminando x e y se obtiene una u
nica ecuacion
2 z - 7 = 0; las ecuaciones y + 7 = 0 y z - z + 1 = 1 se han utilizado como pivotes.
(%i1) elim(set(x + y + z = 1, x - y - z = 8, x - z = 1),
set(x,y));
(%o1)
[[2 z - 7], [y + 7, z - x + 1]]
Eliminando las tres variables de estas ecuaciones se triangulariza el sistema lineal:
(%i2) elim(set(x + y + z = 1, x - y - z = 8, x - z = 1),
set(x,y,z));
(%o2)
[[], [2 z - 7, y + 7, z - x + 1]]
Las ecuaciones no necesitan ser lineales:
(%i3) elim(set(x^2 - 2 * y^3 = 1, x - y = 5), [x,y]);
3
2
(%o3)
[[], [2 y - y - 10 y - 24, y - x + 5]]
El usuario no puede controlar el orden en el que se eliminan las variables. El algoritmo
utiliza una heurstica con la que intenta escoger el mejor pivote y el mejor orden de
eliminaci
on.
Notas

994

Manual de Maxima

Al contrario que la funcion relacionada eliminate, la funcion elim no llama a


la funci
on solve cuando el n
umero de ecuaciones iguala al de variables.
La funci
on elim trabaja aplicando resultantes; la variable opcional resultant
determina que algoritmo va a utilizar Maxima. Con sqfr, Maxima factoriza cada
resultante y suprime ceros m
ultiples.
elim triangulariza un conjunto de ecuaciones polinomicas no lineales; el conjunto
soluci
on del conjunto triangularizado puede ser mayor que el conjunto de soluciones del conjunto no triangularizado, por lo que las ecuaciones triangularizadas
pueden tener soluciones falsas.
Veanse tambien elim_allbut, eliminate_using, eliminate y resultant.
Para hacer uso de esta funci
on, ejec
utese load(to_poly).

elim_allbut (l, x )

[Funcion]
Es similar a elim, excepto por el hecho de que elimina todas las variables que aparecen
en la lista de ecuaciones l que no estan en x.

Ejemplo:
(%i1) elim_allbut([x+y = 1, x - 5*y = 1],[]);
(%o1)
[[], [y, y + x - 1]]
(%i2) elim_allbut([x+y = 1, x - 5*y = 1],[x]);
(%o2)
[[x - 1], [y + x - 1]]
Para hacer uso de esta funci
on, ejec
utese load(to_poly).
Veanse tambien elim, eliminate_using, eliminate y resultant.

eliminate_using (l, e, x )

[Funcion]
Elmina el smbolo x de la lista o conjunto de ecuaciones l haciendo uso del pivote e.
Ejemplos:
(%i1) eq : [x^2 - y^2 - z^3 , x*y - z^2 - 5, x - y + z];
3
2
2
2
(%o1)
[- z - y + x , - z + x y - 5, z - y + x]
(%i2) eliminate_using(eq,first(eq),z);
3
2
2
3
2
(%o2) {y + (1 - 3 x) y + 3 x y - x - x ,
4
3 3
2 2
4
y - x y + 13 x y - 75 x y + x + 125}
(%i3) eliminate_using(eq,second(eq),z);
2
2
4
3 3
2 2
4
(%o3) {y - 3 x y + x + 5, y - x y + 13 x y - 75 x y + x
+ 125}
(%i4) eliminate_using(eq, third(eq),z);
2
2
3
2
2
3
2
(%o4) {y - 3 x y + x + 5, y + (1 - 3 x) y + 3 x y - x - x }
Para hacer uso de esta funci
on, ejec
utese load(to_poly).
Veanse tambien elim, elim_allbut, eliminate y resultant.

Captulo 77: to poly solve

fourier_elim ([eq1, eq2, ...], [var1, var, ...])

995

[Funcion]
La instrucci
on fourier_elim([eq1,eq2,...], [var1,var2,...] aplica el
algoritmo de eliminaci
on de Fourier para resolver el sistema de inecuaciones lineales
[eq1,eq2,...] respecto de las variables [var1,var2,...].
Ejemplos:
(%i1) fourier_elim([y-x < 5, x - y < 7, 10 < y],[x,y]);
(%o1)
[y - 5 < x, x < y + 7, 10 < y]
(%i2) fourier_elim([y-x < 5, x - y < 7, 10 < y],[y,x]);
(%o2)
[max(10, x - 7) < y, y < x + 5, 5 < x]
Eliminando primero respecto de x y luego respecto de y, se obtienen lmites inferior
y superior para x que dependen de y, y lmites numericos para y. Si se eliminan en
orden inverso, se obtienen los lmites de y en funcion de x, y los de x son n
umeros.
De ser necesario, fourier_elim devuelve una disyuncion de listas de ecuaciones:
(%i3) fourier_elim([x # 6],[x]);
(%o3)
[x < 6] or [6 < x]
Si no existe soluci
on, fourier_elim devuelve emptyset, y si la solucion son todos los
reales, fourier_elim devuelve universalset:
(%i4) fourier_elim([x < 1, x > 1],[x]);
(%o4)
emptyset
(%i5) fourier_elim([minf < x, x < inf],[x]);
(%o5)
universalset
En caso de que las inecuaciones no sean lineales, fourier_elim devuelve una lista de
inecuaciones simplificadas:
(%i6) fourier_elim([x^3 - 1 > 0],[x]);
2
2
(%o6) [1 < x, x + x + 1 > 0] or [x < 1, - (x + x + 1) > 0]
(%i7) fourier_elim([cos(x) < 1/2],[x]);
(%o7)
[1 - 2 cos(x) > 0]
En lugar de una lista de inecuaciones, el primer argumento pasado a fourier_elim
puede ser una conjunci
on o disyuncion logica.
(%i8) fourier_elim((x + y < 5) and (x - y >8),[x,y]);
3
(%o8)
[y + 8 < x, x < 5 - y, y < - -]
2
(%i9) fourier_elim(((x + y < 5) and x < 1) or (x - y >8),[x,y]);
(%o9)
[y + 8 < x] or [x < min(1, 5 - y)]
La funci
on fourier_elim soporta los operadores de desigualdad <, <=, >, >=, # y =.
La rutina de eliminaci
on de Fourier dispone de un preprocesador que convierte algunas
inecuaciones no lineales formadas con las funciones del valor absoluto, mnimo y
maximo a inecuaciones lineales. Ademas, el preprocesador admite algunas expresiones
que son productos o cocientes de terminos lineales:
(%i10) fourier_elim([max(x,y) > 6, x # 8, abs(y-1) > 12],[x,y]);
(%o10) [6 < x, x < 8, y < - 11] or [8 < x, y < - 11]
or [x < 8, 13 < y] or [x = y, 13 < y] or [8 < x, x < y, 13 < y]

996

Manual de Maxima

or [y < x, 13 < y]
(%i11) fourier_elim([(x+6)/(x-9) <= 6],[x]);
(%o11)
[x = 12] or [12 < x] or [x < 9]
(%i12) fourier_elim([x^2 - 1 # 0],[x]);
(%o12)
[- 1 < x, x < 1] or [1 < x] or [x < - 1]
Para hacer uso de esta funci
on, ejec
utese load(fourier_elim).

isreal_p (e )

[Funcion]
El predicado isreal_p devuelve true si e representa un n
umero real y false si no
representa un punto de la recta; en cualquier otro caso devuelve una forma nominal.
(%i1) map(isreal_p, [-1, 0, %i, %pi]);
(%o1)
[true, true, false, true]
Las variables de Maxima se interpretan como n
umeros reales:
(%i2) isreal_p(x);
(%o2)
true
La funci
on isreal_p consulta los hechos almacenados en la base de datos:
(%i3) declare(z,complex)$
(%i4) isreal_p(z);
(%o4)
isreal_p(z)
Con frecuencia, isreal_p devuelve una forma nominal cuando debera devolver
false; por ejemplo, la funcion logartmica no toma valores reales en toda la recta
real, por lo que isreal_p(log(x)) debera devolver false, sin embargo:
(%i5) isreal_p(log(x));
(%o5)
isreal_p(log(x))
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).
Vease tambien complex_number_p.
La funci
on isreal_p es experimental; sus especificaciones pueden cambiar y su funcionalidad puede incorporarse a otras funciones de Maxima.

new_variable (type )

[Funcion]
Devuelve un smbolo de la forma %[z,n,r,c,g]k, siendo k un n
umero entero. Los
valores admisibles para type son integer, natural_number, real, natural_number
y general. Por n
umero natural se entiende entero negativo, de manera que el ceero
es un n
umero natural.
Cuando type no es de ninguno de los tipos indicados mas arriba, type toma por
defecto el valor general. Para enteros, n
umeros naturales y n
umeros complejos,
Maxima a~
nade esta informacion a la base de datos de forma automatica.
(%i1) map(new_variable,
[integer, natural_number, real, complex, general]);
(%o1)
[%z144, %n145, %r146, %c147, %g148]
(%i2) nicedummies(%);
(%o2)
[%z0, %n0, %r0, %c0, %g0]
(%i3) featurep(%z0, integer);
(%o3)
true

Captulo 77: to poly solve

997

(%i4) featurep(%n0, integer);


(%o4)
true
(%i5) is(%n0 >= 0);
(%o5)
true
(%i6) featurep(%c0, complex);
(%o6)
true
Es recomendable que al argumento de new_variable se le aplique el operador de
comilla simple para evitar su evaluacion, de esta manera se evitan errores como el
siguiente:
(%i7) integer : 12$
(%i8) new_variable(integer);
(%o8)
%g149
(%i9) new_variable(integer);
(%o9)
%z150
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).
Vease tambien nicedummies.
[Funcion]
La funci
on nicedummies reescribe los ndices, comenzando por cero, de las variables
de una expresi
on qua hayan sido introducidas por new_variable:
(%i1) new_variable(integer) + 52 * new_variable(integer);
(%o1)
52 %z136 + %z135
(%i2) new_variable(integer) - new_variable(integer);
(%o2)
%z137 - %z138
(%i3) nicedummies(%);
(%o3)
%z0 - %z1
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).
Vease tambien new_variable.

nicedummies

parg (x )

[Funcion]
La funci
on parg es una version con capacidades simplificadoras de la funcion de
argumento complejo carg:
(%i1) map(parg,[1,1+%i,%i, -1 + %i, -1]);
%pi %pi 3 %pi
(%o1)
[0, ---, ---, -----, %pi]
4
2
4
Si el argumento pasado a la funcion parg no es una constante, se devolvera una forma
nominal:
(%i2) parg(x + %i * sqrt(x));
(%o2)
parg(x + %i sqrt(x))
Si sign detecta que la entrada es un n
umero real negativo o positivo, parg devuelve
una forma no nominal aunque la entrada no sea una constante:
(%i3) parg(abs(x));
(%o3) 0

998

Manual de Maxima

(%i4) parg(-x^2-1);
(%o4)

%pi

La funci
on sign suele ignorar las variables declaradas complejas
(declare(x,complex)); en tales casos, parg puede retornar valores incorrectos:
(%i1) declare(x,complex)$
(%i2) parg(x^2 + 1);
(%o2) 0
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).
Veanse tambien carg, isreal_p.

real_imagpart_to_conjugate (e )

[Funcion]
La funci
on real_imagpart_to_conjugate reemplaza todas las llamadas a realpart
y imagpart presentes en una expresion por llamadas a conjugate, obteniendo otra
expresi
on equivalente:
(%i1) declare(x, complex)$
(%i2) real_imagpart_to_conjugate(realpart(x) + imagpart(x) = 3);
conjugate(x) + x
%i (x - conjugate(x))
(%o2)
---------------- - --------------------- = 3
2
2
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

rectform_log_if_constant (e )

[Funcion]
La funci
on rectform_log_if_constant convierte todos los terminos de la forma
log(c) a rectform(log(c)), siendo c una expresion constante o declarada como tal.
(%i1) rectform_log_if_constant(log(1-%i) - log(x - %i));
log(2)
%i %pi
(%o1)
- log(x - %i) + ------ - -----2
4
(%i2) declare(a,constant, b,constant)$
(%i3) rectform_log_if_constant(log(a + %i*b));
2
2
log(b + a )
(%o3)
------------ + %i atan2(b, a)
2
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

simp_inequality (e )

[Funcion]
La funci
on simp_inequality aplica ciertas simplificaciones a conjunciones y disyunciones de inecuaciones.
Limitaciones La funci
on simp_inequality esta limitada en al menos dos aspectos;
en primer lugar, las simplificaciones son locales:

Captulo 77: to poly solve

999

(%i1) simp_inequality((x > minf) %and (x < 0));


(%o2) (x>1) %and (x<1)
En segundo lugar, simp_inequality no tiene en cuenta los hechos de la base de datos:
(%i2) assume(x > 0)$
(%i3) simp_inequality(x > 0);
(%o3)
x > 0
Para hacer uso de esta funci
on, ejec
utese load(fourier_elim).

standardize_inverse_trig (e )

[Funcion]
Esta funci
on aplica las identidades cot(x) = atan(1/x) y acsc(x) = asin(1/x) y
similares con asec, acoth y acsch. Cons
ultese Abramowitz y Stegun, ecuaciones
4.4.6 a 4.4.8 y 4.6.4 a 4.6.6.
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

subst_parallel (l, e )

[Funcion]
Dada la ecuaci
on o lista de ecuaciones l y la expresion e, sustituye en paralelo en e
los miembros izquierdos de las ecuaciones por los derechos:
(%i1) load(to_poly_solve)$
(%i2) subst_parallel([x=y,y=x], [x,y]);
(%o2)
[y, x]
Comp
arese el resultado anterior con las sustituciones hechas en serie:
(%i3) subst([x=y,y=x],[x,y]);
(%o3)
[x, x]
La funci
on subst_parallel es similar a sublis, excepto por el hecho de que subst_
parallel permite la sustitucion de expresiones no atomicas:
(%i4) subst_parallel([x^2 = a, y = b], x^2 * y);
(%o4)
a b
(%i5) sublis([x^2 = a, y = b], x^2 * y);

2
sublis: left-hand side of equation must be a symbol; found: x
-- an error. To debug this try: debugmode(true);
Las sustituciones hechas por subst_parallel son literales, no semanticas, por lo que
subst_parallel no reconoce que x y sea una subexpresion de x2 y:
(%i6) subst_parallel([x * y = a], x^2 * y);
2
(%o6)
x y
La funci
on subst_parallel realiza todas las sustituciones antes de proceder a la
simplificaci
on, lo que permite sustituciones en expresiones condicionales que podrn
producir errores en caso de simplificar antes de sustituir:
(%i7) subst_parallel([x = 0], %if(x < 1, 5, log(x)));
(%o7)
5
(%i8) subst([x = 0], %if(x < 1, 5, log(x)));

1000

Manual de Maxima

log: encountered log(0).


-- an error. To debug this try: debugmode(true);
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve_extra.lisp).
Veanse tambien subst, sublis y ratsubst.

to_poly (e, l )

[Funcion]
La funci
on to_poly intenta convertir la ecuacion e en un sistema de polinomios, junto
con restricciones en forma de desigualdades. Las soluciones del sistema polinomico
que cumplan las restricciones son, a su vez, las soluciones de la ecuacion e. Dicho
de manera informal, to_poly intenta pasar a forma de polinomio la ecuacion e; un
ejemplo ayudar
a a aclarar su comportamiento:
(%i1) load(to_poly_solve)$
(%i2) to_poly(sqrt(x) = 3, [x]);
2
(%o2) [[%g130 - 3, x = %g130 ],
%pi
%pi
[- --- < parg(%g130), parg(%g130) <= ---], []]
2
2
Las condiciones -%pi/2<parg(%g130),parg(%g130)<=%pi/2 dicen que %g130 esta en
el rango de la funci
on radical; cuando eso se cumpla, el conjunto de ecuaciones de
sqrt(x) = 3 coincide con el de %g130-3,x=%g130^2.
Para convertir a forma polinomica una expresion trigonometrica, es necesario introducir una sustituci
on no algebraica; tal sustitucion se devuelve en la tercera lista de
la respuesta de to_poly:
(%i3) to_poly(cos(x),[x]);
2
%i x
(%o3)
[[%g131 + 1], [2 %g131 # 0], [%g131 = %e
]]
Los terminos constantes no se transforman a polinomios a menos que el n
umero uno
se introduzca en la lista de variables:
(%i4) to_poly(x = sqrt(5),[x]);
(%o4)
[[x - sqrt(5)], [], []]
(%i5) to_poly(x = sqrt(5),[1,x]);
2
(%o5) [[x - %g132, 5 = %g132 ],
%pi
%pi
[- --- < parg(%g132), parg(%g132) <= ---], []]
2
2
Para generar un polinomio que tenga sqrt(5) + sqrt(7) como raz puede hacerse lo
siguiente:
(%i6) first(elim_allbut(first(to_poly(x = sqrt(5) + sqrt(7),
[1,x])), [x]));
4
2
(%o6)
[x - 24 x + 4]

Captulo 77: to poly solve

1001

Para hacer uso de esta funci


on, ejec
utese load(to_poly).
Vease tambien to_poly_solve.

to_poly_solve (e, l, [options])

[Funcion]
La funci
on to_poly_solve intenta resolver las ecuaciones e de incognitas l. El argumento e puede ser una u
nica ecuacion, o una lista o conjunto de ecuaciones; de forma
similar, l puede ser un smbolo o una lista o conjunto de smbolos. Cuando uno de
los elementos de e no sea una igualdad, como x2 1, se supodra que es igual a cero.
La estrategia b
asica de to_poly_solve consiste en convertir la entrada en un polinomio y luego invocar a la funcion algsys. Internamente, to_poly_solve asigna
a algexact el valor true. Para cambiar el valor de algexact, debe an~
nadirse
algexact=false a la lista de argumentos de to_poly_solve.
Cuando to_poly_solve consigue determinar el conjunto de soluciones, cada miembro
del conjunto de soluciones es una lista en un objeto %union:
(%i1) load(to_poly_solve)$
(%i2) to_poly_solve(x*(x-1) = 0, x);
(%o2)
%union([x = 0], [x = 1])
Cuando to_poly_solve es incapaz de determinar el conjunto de soluciones, devuelve
una forma nominal de %solve y muestra un mensaje de aviso:
(%i3) to_poly_solve(x^k + 2* x + 1 = 0, x);

Nonalgebraic argument given to to_poly


unable to solve
k
(%o3)
%solve([x + 2 x + 1 = 0], [x])
A veces se puede obtener la solucion haciendo una sustitucion en %solve:
(%i4) subst(k = 2, %);
(%o4)
%union([x = - 1])
Especialmente en el caso de las funciones trigonometricas, los resultados pueden incorporar n
umeros enteros arbitrarios de la forma %zXXX, siendo XXX un ndice entero:
(%i5) to_poly_solve(sin(x) = 0, x);
(%o5)
%union([x = 2 %pi %z33 + %pi], [x = 2 %pi %z35])
Para inicializar los ndices, h
agase uso de nicedummies:
(%i6) nicedummies(%);
(%o6)
%union([x = 2 %pi %z0 + %pi], [x = 2 %pi %z1])
En ocasiones, se introducen n
umeros complejos arbitrarios de la forma %cXXX, o reales
de la forma %rXXX. La funci
on nicedummies inicializa estos identificadores a cero.
Tambien a veces, la soluci
on incorpora versiones simplificadas de los operadores logicos
%and, %or y %if, que representan, respectivamente, la conjuncion, la disyuncion y la
implicaci
on:
(%i7) sol : to_poly_solve(abs(x) = a, x);
(%o7) %union(%if(isnonnegative_p(a), [x = - a], %union()),
%if(isnonnegative_p(a), [x = a], %union()))

1002

Manual de Maxima

(%i8) subst(a = 42, sol);


(%o8)
%union([x = - 42], [x = 42])
(%i9) subst(a = -42, sol);
(%o9)
%union()
El conjunto vaco se representa por %union.
La funci
on to_poly_solve es capaz de resolver algunas ecuaciones con potencias
racionales, potencias no racionales, valores absolutos, funciones trigonometricas y
funciones del mnimo y del maximo. Tambien puede resolver algunas ecuaciones
resolubles en terminos de la funcion W de Lambert:
(%i1) load(to_poly_solve)$
(%i2) to_poly_solve(set(max(x,y) = 5, x+y = 2), set(x,y));
(%o2)
%union([x = - 3, y = 5], [x = 5, y = - 3])
(%i3) to_poly_solve(abs(1-abs(1-x)) = 10,x);
(%o3)
%union([x = - 10], [x = 12])
(%i4) to_poly_solve(set(sqrt(x) + sqrt(y) = 5, x + y = 10),
set(x,y));
3/2
3/2
5
%i - 10
5
%i + 10
(%o4) %union([x = - ------------, y = ------------],
2
2
3/2
3/2
5
%i + 10
5
%i - 10
[x = ------------, y = - ------------])
2
2
(%i5) to_poly_solve(cos(x) * sin(x) = 1/2,x,
simpfuncs = [expand, nicedummies]);
%pi
(%o5)
%union([x = %pi %z0 + ---])
4
(%i6) to_poly_solve(x^(2*a) + x^a + 1,x);
2 %i %pi %z81
------------1/a
a
(sqrt(3) %i - 1)
%e
(%o6) %union([x = -----------------------------------],
1/a
2
2 %i %pi %z83
------------1/a
a
(- sqrt(3) %i - 1)
%e
[x = -------------------------------------])
1/a
2
(%i7) to_poly_solve(x * exp(x) = a, x);

Captulo 77: to poly solve

1003

(%o7)
%union([x = lambert_w(a)])
En el caso de inecuaciones lineales, to_poly_solve aplica automaticamente la eliminaci
on de Fourier:
(%i8) to_poly_solve([x + y < 1, x - y >= 8], [x,y]);
7
(%o8) %union([x = y + 8, y < - -],
2
7
[y + 8 < x, x < 1 - y, y < - -])
2
Los argumentos opcionales deben tener forma de ecuacion; generalmente, el orden de
estas opciones no reviste importancia.
simpfuncs = l, siendo l una lista de funciones, aplica la composicion de los
elementos de l a cada solucion:
(%i1) to_poly_solve(x^2=%i,x);
1/4
1/4
(%o1)
%union([x = - (- 1)
], [x = (- 1)
])
(%i2) to_poly_solve(x^2= %i,x, simpfuncs = [rectform]);
%i
1
%i
1
(%o2) %union([x = - ------- - -------], [x = ------- + -------])
sqrt(2)
sqrt(2)
sqrt(2)
sqrt(2)
A veces, una simplificacion puede anular una simplificacion anterior:
(%i3) to_poly_solve(x^2=1,x);
(%o3)
%union([x = - 1], [x = 1])
(%i4) to_poly_solve(x^2= 1,x, simpfuncs = [polarform]);
%i %pi
(%o4)
%union([x = 1], [x = %e
]
Maxima no comprueba que los elementos de la lista de funciones l sean todos
simplificaciones:
(%i5) to_poly_solve(x^2 = %i,x, simpfuncs = [lambda([s],s^2)]);
(%o5)
%union([x = %i])
Para convertir cada solucion a real de doble precision hagase uso de simpfunc =
[dfloat]:
(%i6) to_poly_solve(x^3 +x + 1 = 0,x,
simpfuncs = [dfloat]), algexact : true;
(%o6) %union([x = - .6823278038280178],
[x = .3411639019140089 - 1.161541399997251 %i],
[x = 1.161541399997251 %i + .3411639019140089])
Con la opci
on use_grobner = true se aplica la funcion poly_reduced_grobner
a las ecuaciones antes de intentar resolverlas. En primer lugar, esta opcion proporciona una manera de soslayar algunas debilidades de la funcion algsys:
(%i7) to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y],
use_grobner = true);
sqrt(7) - 1
sqrt(7) + 1

1004

Manual de Maxima

(%o7) %union([x = - -----------, y = -----------],


2
2
sqrt(7) + 1
sqrt(7) - 1
[x = -----------, y = - -----------])
2
2
(%i8) to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y]);
(%o8)
%union()
maxdepth = k, siendo k un positivo entero, controla el nivel de recursion. El
valor por defecto es cinco. Cuando se excede el nivel de recursion se obtiene un
mensaje de error:
(%i9) to_poly_solve(cos(x) = x,x, maxdepth = 2);
Unable to solve
Unable to solve
(%o9)
%solve([cos(x) = x], [x], maxdepth = 2)
Con parameters = l, siendo l una lista de smbolos, el programa intenta encontrar una soluci
on v
alida para todos los miembros de la lista l:
(%i10) to_poly_solve(a * x = x, x);
(%o10)
%union([x = 0])
(%i11) to_poly_solve(a * x = x, x, parameters = [a]);
(%o11) %union(%if(a - 1 = 0, [x = %c111], %union()),
%if(a - 1 # 0, [x = 0], %union()))
En (%o2), el programa introduce una variable ficticia; para reinicializarla, u
sese
la funci
on nicedummies:
(%i12) nicedummies(%);
(%o12) %union(%if(a - 1 = 0, [x = %c0], %union()),
%if(a - 1 # 0, [x = 0], %union()))
to_poly_solve utiliza informacion almacenada en el array one_to_one_reduce
para resolver ecuaciones de la forma f (a) = f (b). La asignacion one_to_one_
reduce[f,f] : lambda([a,b], a=b) le dice a to_poly_solve que el conjunto de
soluciones de f (a) = f (b) es igual al conjunto de soluciones de a = b:
(%i13) one_to_one_reduce[f,f] : lambda([a,b], a=b)$
(%i14) to_poly_solve(f(x^2-1) = f(0),x);
(%o14)
%union([x = - 1], [x = 1])
De forma m
as general, la asignacion one_to_one_reduce[f,g] : lambda([a,b],
w(a,b)=0 le indica a to_poly_solve que el cojunto de soluciones de f (a) = f (b) es
igual al conjunto de soluciones de w(a, b) = 0:
(%i15) one_to_one_reduce[f,g] : lambda([a,b], a = 1 + b/2)$
(%i16) to_poly_solve(f(x) - g(x),x);
(%o16)
%union([x = 2])
Adem
as, to_poly_solve utiliza informacion almacenada en el array function_
inverse para resolver ecuaciones de la forma f (a) = b.
La asignacion

Captulo 77: to poly solve

1005

function_inverse[f] : lambda([s], g(s)) le dice a to_poly_solve que el


conjunto de soluciones de f (x) = b es igual al conjunto de soluciones de x = g(b):
(%i17) function_inverse[Q] : lambda([s], P(s))$
(%i18) to_poly_solve(Q(x-1) = 2009,x);
(%o18)
%union([x = P(2009) + 1])
(%i19) function_inverse[G] : lambda([s], s+new_variable(integer));
(%o19)
lambda([s], s + new_variable(integer))
(%i20) to_poly_solve(G(x - a) = b,x);
(%o20)
%union([x = b + a + %z125])
Notas
Las inc
ognitas a resolver no necesitan ser smbolos, lo cual es cierto cuando
fullratsubst es capaz de hacer las sustituciones de forma apropiadas:
(%i1) to_poly_solve([x^2 + y^2 + x * y = 5, x * y = 8],
[x^2 + y^2, x * y]);
2
2
(%o1)
%union([x y = 8, y + x = - 3])
Cuando las ecuaciones involucran conjugados de complejos, el programa a~
nade
autom
aticamente las ecuaciones conjugadas:
(%i1) declare(x,complex)$
(%i2) to_poly_solve(x + (5 + %i) * conjugate(x) = 1, x);
%i + 21
(%o2)
%union([x = - -----------])
25 %i - 125
(%i3) declare(y,complex)$
(%i4) to_poly_solve(set(conjugate(x) - y = 42 + %i,
x + conjugate(y) = 0), set(x,y));
%i - 42
%i + 42
(%o4)
%union([x = - -------, y = - -------])
2
2
Cuando las funciones involucran valores absolutos, to_poly_solve consulta los
hechos de la base de datos para decidir si los argumentos de los valores absolutos
son n
umeros complejos:
(%i1) to_poly_solve(abs(x) = 6, x);
(%o1)
%union([x = - 6], [x = 6])
(%i2) declare(z,complex)$
(%i3) to_poly_solve(abs(z) = 6, z);
(%o3) %union(%if((%c11 # 0) %and (%c11 conjugate(%c11) - 36 =
0), [z = %c11], %union()))
Esta es la u
nica situaci
on en la que to_poly_solve consulta la base de datos; si
una inc
ognita se declara, por ejemplo, como entero, to_poly_solve lo ignora.
Para hacer uso de esta funci
on, ejec
utese load(to_poly_solve).

1006

Manual de Maxima

Vease tambien algexact, resultant, algebraic y to_poly.

Captulo 78: unit

1007

78 unit
78.1 Introducci
on a units
El paquete unit permite al usuario hacer cambios de unidades y llevar a cabo el analisis
dimensional de las ecuaciones. La forma de operar de este paquete es radicalmente diferente
de la del paquete original de Maxima; mientras que en el paquete original era tan solo una
lista de definiciones, aqu se utiliza un conjunto de reglas que permiten seleccionar al usuario
en que unidades debe devolverse la expresion final.
Junto con el an
alisis dimensional, el paquete aporta una serie de herramientas para
controlar las opciones de conversi
on y simplificacion. Ademas de la conversion automatica
adaptable a las necesidades del usuario, el paquete unit permite hacer conversiones a la
manera tradicional.
Nota: Cuando los factores de conversion no son exactos, Maxima los transformara a
fracciones como consecuencia de la metodologa utilizada para simplificar las unidades. Los
mensajes de aviso concernientes a estas transformaciones estan desactivados por defecto en
el caso de las unidades (lo habitual es que esten activados en otros contextos) debido a
que al ser una operaci
on muy frecuente, seran un estorbo. El estado previo de la variable
ratprint queda restaurado tras la conversion de las unidades, de manera que se mantendr
a
la opcion seleccionada por el usuario; en caso de que este necesite ver dichos avisos, podr
a
hacer la asignaci
on unitverbose:on para reactivarlos desde el proceso de conversion de
unidades.
El paquete unit se aloja en el directorio share/contrib/unit y se ajusta a las convenciones de Maxima para la carga de paquetes:
(%i1) load("unit")$
*******************************************************************
*
Units version 0.50
*
*
Definitions based on the NIST Reference on
*
*
Constants, Units, and Uncertainty
*
*
Conversion factors from various sources including
*
*
NIST and the GNU units package
*
*******************************************************************
Redefining necessary functions...
WARNING: DEFUN/DEFMACRO:
redefining function TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
Initializing unit arrays...
Done.
Los avisos del tipo WARNING son normales y no deben interpretarse como errores; tan
solo indican que el paquete unit esta redefiniendo funciones que ya estaban definidas en
Maxima. Esto es necesario para que las unidades se gestionen de forma correcta. El usuario
debe tener en cuenta que si otros paquetes han cambiado las definiciones de estas funciones,
tales cambios ser
an ignorados por el proceso de carga de unit.

1008

Manual de Maxima

El paquete unit tambien carga el fichero de Lisp unit-functions.lisp, el cual contiene


las funciones Lisp necesarias.
El autor principal de este paquete es Clifford Yapp, quien ha recibido ayuda y asistencia,
entre otros, de Barton Willis y Robert Dodier.

78.2 Funciones y variables para units


setunits (list )

[Funcion]
El paquete unit no utiliza por defecto dimensiones derivadas, pero convierte todas
las unidades a las siete fundamentales en unidades MKS.
(%i2) N;
kg m
---2
s

(%o2)

(%i3) dyn;
1
kg m
(------) (----)
100000
2
s

(%o3)

(%i4) g;
1
(----) (kg)
1000

(%o4)
(%i5) centigram*inch/minutes^2;
(%o5)

127
kg m
(-------------) (----)
1800000000000
2
s

Este es el comportamiento que se desea en ciertos casos. Si el usuario necesita utilizar


otras unidades, habr
a de utilizar la instruccion setunits:
(%i6) setunits([centigram,inch,minute]);
(%o6)
done
(%i7) N;
1800000000000
%in cg
(%o7)
(-------------) (------)
127
2
%min
(%i8) dyn;
18000000
%in cg
(%o8)
(--------) (------)
127
2
%min
(%i9) g;
(%o9)
(100) (cg)

Captulo 78: unit

1009

(%i10) centigram*inch/minutes^2;
%in cg
-----2
%min

(%o10)

La especificaci
on de las variables es relativamente flexible. Por ejemplo, si se quiere
volver a utilizar kilogramos, metros y segundos como unidades por defecto, podemos
hacer:
(%i11) setunits([kg,m,s]);
(%o11)
(%i12) centigram*inch/minutes^2;
(%o12)

done

127
kg m
(-------------) (----)
1800000000000
2
s

Las unidades derivadas tambien se controlan con esta misma instruccion:


(%i17) setunits(N);
(%o17)
(%i18) N;
(%o18)
(%i19) dyn;

done
N
1
(------) (N)
100000

(%o19)
(%i20) kg*m/s^2;
(%o20)
(%i21) centigram*inch/minutes^2;
(%o21)

127
(-------------) (N)
1800000000000

Tengase en cuenta que el paquete unit reconoce que la combinacion de masa, longitud
e inversa del cuadrado del tiempo da lugar a una fuerza, convirtiendola a newtons.
Esta es la forma general en la que trabaja Maxima. Si el usuario prefiere dinas a
newtons, tan solo tendr
a que hacer lo siguiente:
(%i22) setunits(dyn);
(%o22)
done
(%i23) kg*m/s^2;
(%o23)
(100000) (dyn)
(%i24) centigram*inch/minutes^2;
127
(%o24)
(--------) (dyn)
18000000
Para desactivar una unidad se utiliza la instruccion uforget:
(%i26) uforget(dyn);
(%o26)

false

1010

Manual de Maxima

(%i27) kg*m/s^2;
kg m
---2
s

(%o27)

(%i28) centigram*inch/minutes^2;
(%o28)

127
kg m
(-------------) (----)
1800000000000
2
s

Esto tambien hubiese funcionado con uforget(N) o uforget(%force).


Vease tambien uforget. Para hacer uso de esta funcion ejec
utese load("unit").

uforget (list )

[Funcion]
Por defecto, el paquete unit convierte todas las unidades a las siete fundamentales
del sistema MKS. Este comportamiento puede alterarse mediante la instruccion
setunits. Despues, si el usuario quiere restaurar el comportamiento por defecto
podr
a hacerlo para una dimension determinada haciendo uso de la instruccion
uforget:
(%i13) setunits([centigram,inch,minute]);
(%o13)
done
(%i14) centigram*inch/minutes^2;
%in cg
(%o14)
-----2
%min
(%i15) uforget([cg,%in,%min]);
(%o15)
[false, false, false]
(%i16) centigram*inch/minutes^2;
127
kg m
(%o16)
(-------------) (----)
1800000000000
2
s

La instrucci
on uforget opera sobre dimensiones, no sobre unidades, de modo que
valdr
a para cualquier unidad de una dimension concreta. La propia dimension es una
argumento v
alido para esta funcion.
Vease tambien setunits. Para hacer uso de esta funcion ejec
utese load("unit").

convert (expr, list )

[Funcion]
La funci
on convert permite conversiones de una sola vez sin alterar el entorno global
de ejecuci
on. Acepta tanto un u
nico argumento como una lista de unidades a utilizar
en las conversiones. Cuando se realiza una llamada a convert se ignora el sistema
global de evaluaci
on, con el fin de evitar que el resultado deseado sea nuevamente
transformado. Como consecuencia de esto, en los calculos con decimales, los avisos de
tipo rat se har
an visibles si la variable global ratprint vale true. Otra propiedad
de convert es que permite al usuario hacer conversiones al sistema fundamental

Captulo 78: unit

1011

de dimensiones incluso cuando el entorno ha sido ajustado para simplificar a una


dimensi
on derivada.

(%i2) kg*m/s^2;
(%o2)

kg m
---2
s

(%i3) convert(kg*m/s^2,[g,km,s]);
g km
---2
s
(%i4) convert(kg*m/s^2,[g,inch,minute]);

(%o3)

rat replaced 39.37007874015748 by 5000/127 = 39.37007874015748


18000000000
%in g
(%o4)
(-----------) (-----)
127
2
%min
(%i5) convert(kg*m/s^2,[N]);
(%o5)
N
(%i6) convert(kg*m^2/s^2,[N]);
(%o6)
m N
(%i7) setunits([N,J]);
(%o7)
done
(%i8) convert(kg*m^2/s^2,[N]);
(%o8)
m N
(%i9) convert(kg*m^2/s^2,[N,inch]);
rat replaced 39.37007874015748 by 5000/127 = 39.37007874015748
5000
(%o9)
(----) (%in N)
127
(%i10) convert(kg*m^2/s^2,[J]);
(%o10)
J
(%i11) kg*m^2/s^2;
(%o11)
J
(%i12) setunits([g,inch,s]);
(%o12)
done
(%i13) kg*m/s^2;
(%o13)
N
(%i14) uforget(N);
(%o14)
false

1012

Manual de Maxima

(%i15) kg*m/s^2;
5000000
%in g
(-------) (-----)
127
2
s
(%i16) convert(kg*m/s^2,[g,inch,s]);

(%o15)

rat replaced 39.37007874015748 by 5000/127 = 39.37007874015748


5000000
%in g
(%o16)
(-------) (-----)
127
2
s
Veanse tambien setunits y uforget. Para hacer uso de esta funcion ejec
utese
load("unit").
[Variable opcional]
Valor por defecto: ninguno
En caso de que el usuario desee que el comportamiento por defecto del paquete unit
sea distinto del descrito, puede hacer uso del fichero maxima-init.mac y de la variable
global usersetunits. El paquete unit comprobara al ser cargado si se le ha dado
a esta variable una lista de unidades; en caso afirmativo, aplicara setunits a las
unidades de esta lista y las utilizara por defecto. Una llamada a la funcion uforget
permitir
a retornar al comportamiento establecido por defecto por el usuario. Por
ejemplo, si en el archivo maxima-init.mac se tiene el siguiente codigo:
usersetunits : [N,J];
observaramos el siguiente comportamiento:
(%i1) load("unit")$
*******************************************************************
*
Units version 0.50
*
*
Definitions based on the NIST Reference on
*
*
Constants, Units, and Uncertainty
*
*
Conversion factors from various sources including
*
*
NIST and the GNU units package
*
*******************************************************************

usersetunits

Redefining necessary functions...


WARNING: DEFUN/DEFMACRO: redefining
TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining
WARNING: DEFUN/DEFMACRO: redefining
WARNING: DEFUN/DEFMACRO: redefining
Initializing unit arrays...
Done.
User defaults found...
User defaults initialized.
(%i2) kg*m/s^2;
(%o2)

function
function MSETCHK ...
function KILL1 ...
function NFORMAT ...

Captulo 78: unit

1013

(%i3) kg*m^2/s^2;
(%o3)
J
(%i4) kg*m^3/s^2;
(%o4)
J m
(%i5) kg*m*km/s^2;
(%o5)
(1000) (J)
(%i6) setunits([dyn,eV]);
(%o6)
done
(%i7) kg*m/s^2;
(%o7)
(100000) (dyn)
(%i8) kg*m^2/s^2;
(%o8)
(6241509596477042688) (eV)
(%i9) kg*m^3/s^2;
(%o9)
(6241509596477042688) (eV m)
(%i10) kg*m*km/s^2;
(%o10)
(6241509596477042688000) (eV)
(%i11) uforget([dyn,eV]);
(%o11)
[false, false]
(%i12) kg*m/s^2;
(%o12)
N
(%i13) kg*m^2/s^2;
(%o13)
J
(%i14) kg*m^3/s^2;
(%o14)
J m
(%i15) kg*m*km/s^2;
(%o15)
(1000) (J)
De no haber hecho uso de usersetunits, las entradas iniciales hubiesen sido convertidas a unidades MKS y cualquier llamada a uforget hubiese retornado tambien a
MKS. Sin embargo, las preferencias establecidas por el usuario se respetan en ambos
casos. Para eliminar las preferencias del usuario y volver a utilizar las establecidas
por defecto por el paquete unit, debe utilizarse la instruccion dontusedimension. La
funci
on uforget puede restaurar nuevamente las preferencias del usuario, pero solo si
usedimension mantiene su valor. Alternativamente, kill(usersetunits) eliminar
a
completamente cualquier vestigio de las preferencias del usuario durante la sesion
actual. Veanse a continuaci
on algunos ejemplos de aplicacion de estas opciones:
(%i2)
(%o2)
(%i3)
(%o3)
(%i4)
(%o4)
(%i5)
(%o5)
(%i6)
(%o6)

kg*m/s^2;
N
kg*m^2/s^2;
J
setunits([dyn,eV]);
done
kg*m/s^2;
(100000) (dyn)
kg*m^2/s^2;
(6241509596477042688) (eV)

1014

Manual de Maxima

(%i7) uforget([dyn,eV]);
(%o7)
(%i8) kg*m/s^2;
(%o8)
(%i9) kg*m^2/s^2;
(%o9)
(%i10) dontusedimension(N);
(%o10)
(%i11) dontusedimension(J);
(%o11)
(%i12) kg*m/s^2;
(%o12)

[false, false]
N
J
[%force]
[%energy, %force]
kg m
---2
s

(%i13) kg*m^2/s^2;

(%o13)

2
kg m
----2
s

(%i14) setunits([dyn,eV]);
(%o14)
(%i15) kg*m/s^2;

done

(%o15)

kg m
---2
s

(%i16) kg*m^2/s^2;

(%o16)

(%i17) uforget([dyn,eV]);
(%o17)
(%i18) kg*m/s^2;
(%o18)

2
kg m
----2
s
[false, false]
kg m
---2
s

(%i19) kg*m^2/s^2;

(%o19)

2
kg m
----2
s

Captulo 78: unit

(%i20) usedimension(N);
Done. To have Maxima simplify to this dimension, use
setunits([unit]) to select a unit.
(%o20)
true
(%i21) usedimension(J);
Done. To have Maxima simplify to this dimension, use
setunits([unit]) to select a unit.
(%o21)
true
(%i22) kg*m/s^2;
kg m
(%o22)
---2
s
(%i23) kg*m^2/s^2;
2
kg m
(%o23)
----2
s
(%i24) setunits([dyn,eV]);
(%o24)
done
(%i25) kg*m/s^2;
(%o25)
(100000) (dyn)
(%i26) kg*m^2/s^2;
(%o26)
(6241509596477042688) (eV)
(%i27) uforget([dyn,eV]);
(%o27)
[false, false]
(%i28) kg*m/s^2;
(%o28)
N
(%i29) kg*m^2/s^2;
(%o29)
J
(%i30) kill(usersetunits);
(%o30)
done
(%i31) uforget([dyn,eV]);
(%o31)
[false, false]
(%i32) kg*m/s^2;
kg m
(%o32)
---2
s
(%i33) kg*m^2/s^2;
2
kg m
(%o33)
----2
s

1015

1016

Manual de Maxima

Desafortunadamente, esta amplia variedad de opciones puede resultar confusa en un


primer momento, pero una vez se practica un poco con ellas, el usuario comprobar
a
que tiene un control absoluto sobre su entorno de trabajo.

metricexpandall (x )

[Funcion]
Reconstruye autom
aticamente las listas globales de unidades creando todas los
m
ultiplos y subm
ultiplos metricos necesarios. El argumento numerico x se utiliza
para especificar cu
antos prefijos numericos quiere utilizar el usuario. Los argumentos
son los siguientes:
0 - none. Only base units
1 - kilo, centi, milli
(por defecto) 2 - giga, mega, kilo, hecto, deka, deci, centi,
milli, micro, nano
3 - peta, tera, giga, mega, kilo, hecto, deka,
deci, centi, milli, micro, nano, pico,
femto
4 - todos
Normalmente, Maxima no definira el juego completo de m
ultiplos y subm
ultiplos,
lo que implica un n
umero muy grande de unidades, pero metricexpandall puede
utilizarse para reconstruir la lista. La variable fundamental del paquete unit es
%unitexpand.
[Variable opcional]
Valor por defecto: 2
Es el valor suministrado a metricexpandall durante la carga del paquete unit.

%unitexpand

Captulo 79: zeilberger

1017

79 zeilberger
79.1 Introducci
on a zeilberger
El paquete zeilberger implementa el algoritmo de Zeilberger para la suma hipergeometrica
definida y el algoritmo de Gosper para la suma hipergeometrica indefinida. Ademas, hace
uso del metodo de optimizaci
on por filtrado desarrollado por Axel Riese.
El autor de este paquete es Fabrizio Caruso.
Antes de hacer uso de las funciones aqu definidas, ejec
utese la sentencia load
(zeilberger).

79.1.1 El problema de la suma indefinida


El paquete zeilberger implementa el algoritmo de Gosper para la suma hipergeometrica
indefinida. Dado el termino general hipergeometrico Fk de ndice k, se plantea el problema
de encontrar su antidiferencia hipergeometrica, esto es, el termino hipergeometrico tal que
Fk = fk+1 fk .

79.1.2 El problema de la suma definida


El paquete zeilberger implementa el algoritmo de Zeilberger para la suma hipergeometrica
definida. Dados el termino hipergeometrico propio F( n, k), de ndices n y k, y el entero
positivo d, se plantea el problema de encontrar una expresion recurrente lineal de orden d
con coeficientes polinomiales en n y una funcion racional R en n y k tales que
a0 F( n, k) + ... + ad F( n + d), k = DeltaK (R(n, k)F( n, k))
donde Deltak es el k-esimo operador diferencia hacia adelante, esto es, Deltak (tk ) :=
t( k + 1) tk .

79.1.3 Niveles de informaci


on
Hay versiones extendidas de los nombres de las instrucciones, que se construyen a~
nadiendo
uno de los siguientes prefijos:
Summary

Tan solo muestra un sumario al final

Verbose

Alguna informaci
on en los niveles intermedios

VeryVerbose
M
as informaci
on
Extra

A
un m
as informaci
on, incluida alguna sobre el sistema lineal en el algoritmo de
Zeilberger.

Por ejemplo:
GosperVerbose,
AntiDifferenceSummary.

parGosperVeryVerbose,

ZeilbergerExtra,

1018

Manual de Maxima

79.2 Funciones y variables para zeilberger


AntiDifference (F_k, k )
Returns the hypergeometric anti-difference of Fk , if it exists.
AntiDifference returns no_hyp_antidifference.

[Funcion]
Otherwise

Gosper (F_k, k )

[Funcion]
Devuelve, si existe, el elemento racional asociado a F k, esto es, la funcion racional
que verifica
Fk = R (k + 1) Fk+1 R (k) Fk ,

En caso de no existir este elemento, Gosper devuelve no_hyp_sol.

GosperSum (F_k, k, a, b )

[Funcion]
Devuelve la suma de los terminos Fk desde k = a hasta k = b si Fk tiene una
antidiferencia hipergeometrica. En caso contrario, GosperSum devuelve nongosper_
summable.
Ejemplos:
(%i1) load (zeilberger)$
(%i2) GosperSum ((-1)^k*k / (4*k^2 - 1), k, 1, n);
Dependent equations eliminated: (1)
3
n + 1
(n + -) (- 1)
2
1
(%o2)
- ------------------ - 2
4
2 (4 (n + 1) - 1)
(%i3) GosperSum (1 / (4*k^2 - 1), k, 1, n);
3
- n - 2
1
(%o3)
-------------- + 2
2
4 (n + 1) - 1
(%i4) GosperSum (x^k, k, 1, n);
n + 1
x
x
(%o4)
------ - ----x - 1
x - 1
(%i5) GosperSum ((-1)^k*a! / (k!*(a - k)!), k, 1, n);
n + 1
a! (n + 1) (- 1)
a!
(%o5)
- ------------------------- - ---------a (- n + a - 1)! (n + 1)!
a (a - 1)!
(%i6) GosperSum (k*k!, k, 1, n);
Dependent equations eliminated: (1)
(%o6)
(n + 1)! - 1

Captulo 79: zeilberger

1019

(%i7) GosperSum ((k + 1)*k! / (k + 1)!, k, 1, n);


(n + 1) (n + 2) (n + 1)!
(%o7)
------------------------ - 1
(n + 2)!
(%i8) GosperSum (1 / ((a - k)!*k!), k, 1, n);
(%o8)
NON_GOSPER_SUMMABLE

parGosper (F_{n,k}, k, n, d )

[Funcion]

Intenta calcular una recurrecia de orden d para F {n,k}.


El algoritmo devuelve una secuencia [s1 , s2 , ..., sm ] de soluciones, cada una de las
cuales tiene la forma
[R(n, k), [a0 , a1 , ..., ad ]].
La funci
on parGosper devuelve [] si no encuentra ninguna recurrencia.

Zeilberger (F_{n,k}, k, n )

[Funcion]

Intenta calcular la suma hipergeometrica indefinida de F {n,k}.


La funci
on Zeilberger invoca en primer lugar a Gosper, y en caso de no encontrar
una soluci
on, llama despues a parGosper con los ordenes 1, 2, 3, ..., hasta max_ord. Si
Zeilberger encuentra una solucion antes de alcanzar max_ord, se detiene su ejecucion
y devuelve el resultado.
El algoritmo devuelve una secuencia [s1 , s2 , ..., sm ] de soluciones, cada una de las
cuales tiene la forma
[R(n, k), [a0 , a1 , ..., ad ]].
La funci
on Zeilberger devuelve [] si no encuentra ninguna solucion.
La funci
on Zeilberger llama a Gosper solo si Gosper_in_Zeilberger tiene el valor
true.

max_ord

[Variable opcional]

Valor por defecto: 5


max_ord es el m
aximo orden de recurrencia que ensayara la funcion Zeilberger.

simplified_output

[Variable opcional]

Valor por defecto: false


Si simplified_output vale true, las funciones del paquete zeilberger tratan de
presentar las soluciones simplificadas.

linear_solver

[Variable opcional]

Valor por defecto: linsolve


La variable linear_solver guarda el nombre de la funcion que se utilizara para
resolver el sistema de ecuaciones del algoritmo de Zeilberger.

warnings

[Variable opcional]

Valor por defecto: true


Si warnings vale true, las funciones del paquete zeilberger emiten mensajes de
aviso durante su ejecuci
on.

1020

Manual de Maxima

Gosper_in_Zeilberger

[Variable opcional]

Valor por defecto: true


Si Gosper_in_Zeilberger vale true, la funcion Zeilberger llama a la funcion
Gosper antes de llamar a parGosper. En caso contrario, Zeilberger invoca inmediatamente a parGosper.
[Variable opcional]
Valor por defecto: true
Si trivial_solutions vale true, la funcion Zeilberger devuelve soluciones triviales.

trivial_solutions

[Variable opcional]
Valor por defecto: false
Si mod_test vale true, la funcion parGosper ejecuta una prueba modular para descartar sistemas sin soluciones.

mod_test

[Variable opcional]
Valor por defecto: linsolve
La variable modular_linear_solver guarda el nombre de la funcion que debera ser
llamada por la prueba modular de parGosper para resolver sistemas lineales.

modular_linear_solver

[Variable opcional]
Valor por defecto: big_primes[10]
La variable ev_point guarda el valor para el que debe evaluarse n durante la ejecucion
de la prueba modular de parGosper.

ev_point

[Variable opcional]
Valor por defecto: big_primes[1]
La variable mod_big_prime guarda el modulo utilizado por la prueba modular de
parGosper.

mod_big_prime

mod_threshold

[Variable opcional]

Valor por defecto: 4


La variable mod_threshold es el maximo orden que ensaya la prueba modular de
parGosper.

Captulo 80: Indice de Funciones y Variables

80 Indice de Funciones y Variables

1021

Apendice A: Indice de Funciones y Variables

1023

Ap
endice A Indice de Funciones y Variables
!

! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
!! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

/
/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

%
% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
%and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
%c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
%e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
%e_to_numlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
%edispflag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
%emode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
%enumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
%f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
%gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
%i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
%iargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
%if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990
%k1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
%k2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
%m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
%or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990
%phi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
%pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
%piargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
%rnum_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
%s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
%th . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
%unitexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
%w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

:
:..............................................
:: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
::= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
:= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87
89
89
91

<
< . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
<= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

=
= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

>
> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
>= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

?
? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
?? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

@
@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

[ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52, 383

*
* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
** . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

]
] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

^
^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
^^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

_ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1024

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792

|
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

~
~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

A
abasep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
absboxchar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
absint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
absolute_real_time . . . . . . . . . . . . . . . . . . . . . . . . . 510
acos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
acosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
acot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
acoth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
acsc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
acsch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
activate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
activecontexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
adapt_depth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210, 710
add_edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
add_edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
add_vertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
add_vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
addcol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
additive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
addmatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
addrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
adim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
adjacency_matrix. . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
adjoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
adjoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
af . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
aform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
agd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
airy_ai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
airy_bi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
airy_dai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
airy_dbi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
alg_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
algebraic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
algepsilon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263, 325
algexact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
algsys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
all_dotsimp_denoms . . . . . . . . . . . . . . . . . . . . . . . . . 386
allbut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
allroots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

Manual de Maxima

allsym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
alphabetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
alphacharp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
alphanumericp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
amortization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
annuity_fv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
annuity_pv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
antid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
antidiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
AntiDifference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
antisymmetric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
appendfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
apply1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
apply2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
applyb1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
apropos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
args . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
arit_amortization . . . . . . . . . . . . . . . . . . . . . . . . . . 809
arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
arithsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
arrayapply. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
arrayinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
arraymake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
arraysetapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
ascii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
asec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
asech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
asin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
asinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
askexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
askinteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
asksign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
assoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
assoc_legendre_p. . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
assoc_legendre_q. . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
assume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
assume_external_byte_order . . . . . . . . . . . . . . . . 916
assume_pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
assume_pos_pred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
assumescalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
asymbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
atan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
atan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
atanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
atensimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
atom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
atomgrad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
atrig1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
atvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
augcoefmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
augmented_lagrangian_method . . . . . . . . . . . . . . . 609
av . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

Apendice A: Indice de Funciones y Variables

average_degree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axis_3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axis_bottom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axis_left . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axis_right . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
axis_top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
azimuth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

825
211
711
711
711
711
712
211

B
background_color. . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
backsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
backtrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
barsplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
barsplot_description . . . . . . . . . . . . . . . . . . . . . . . 650
base64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
base64_decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
bashindices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
batchload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
bc2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
bdvac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
belln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
benefit_cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
berlefact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
bern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
bernpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
bernstein_approx. . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
bernstein_expand. . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
bernstein_explicit . . . . . . . . . . . . . . . . . . . . . . . . . 611
bernstein_poly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
bessel_i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
bessel_j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
bessel_k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
bessel_y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
besselexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
beta_args_sum_to_integer . . . . . . . . . . . . . . . . . . 274
beta_expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
beta_incomplete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
beta_incomplete_generalized . . . . . . . . . . . . . . . 272
beta_incomplete_regularized . . . . . . . . . . . . . . . 270
bezout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
bf_find_root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
bf_fmin_cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
bfallroots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
bffac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
bfhzeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
bfloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
bfloatp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
bfpsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
bfpsi0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
bftorat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
bftrunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
bfzeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
biconnected_components . . . . . . . . . . . . . . . . . . . . . 825

1025

bindtest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
bipartition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
blockmatrixp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
bode_gain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
bode_phase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
border . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
bothcoef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
boundaries_array. . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115, 211
boxchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
boxplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
boxplot_description . . . . . . . . . . . . . . . . . . . . . . . . 652
break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
breakup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
bug_report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
build_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
build_sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
buildq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
burn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

C
cabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
canform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
canten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cardinality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
carg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cartan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cartesian_product . . . . . . . . . . . . . . . . . . . . . . . . . .
catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cauchy_matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cauchysum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cbffac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cbrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cbtics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_continuous_uniform . . . . . . . . . . . . . . . . . . . . .
cdf_discrete_uniform . . . . . . . . . . . . . . . . . . . . . . .
cdf_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_general_finite_discrete . . . . . . . . . . . . . . .
cdf_geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_negative_binomial . . . . . . . . . . . . . . . . . . . . . .
cdf_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . . . . .
cdf_noncentral_student_t . . . . . . . . . . . . . . . . . .
cdf_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

153
401
400
536
154
294
536
566
362
456
263
712
713
699
685
697
693
676
686
702
681
679
684
695
701
694
703
693
687
683
704
678
674
671

1026

cdf_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_rank_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_signed_rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_student_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdf_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cdisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ceiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
central_moment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cequalignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cfdisrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cfexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cflength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cframe_flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cgeodesic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cgreaterp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cgreaterpignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
changename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
changevar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chaosgame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charfun2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
charpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chebyshev_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chebyshev_u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
check_overlaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
checkdiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chinese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
christof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chromatic_index . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chromatic_number. . . . . . . . . . . . . . . . . . . . . . . . . . . .
cint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
circulant_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
clear_edge_weight . . . . . . . . . . . . . . . . . . . . . . . . . .
clear_rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
clear_vertex_label . . . . . . . . . . . . . . . . . . . . . . . . .
clebsch_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
clessp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
clesspignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
closefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cmetric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cnonmet_flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
coeff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
coefmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cograd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
col . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
collapse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
collectterms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211,
colorbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211,

Manual de Maxima

688
698
972
690
972
672
689
437
150
638
981
981
472
473
474
474
442
436
981
981
391
303
777
983
190
861
983
981
363
929
929
386
436
472
886
426
826
826
981
820
826
529
826
820
981
982
977
219
423
442
234
363
435
364
116
941
713
714

columnop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
columnspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
columnswap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
columnvector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
combination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944
combine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
commutative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
comp2pui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
compfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
compile_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
complement_graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
complete_bipartite_graph . . . . . . . . . . . . . . . . . . 821
complete_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
complex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
complex_number_p. . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
compose_functions . . . . . . . . . . . . . . . . . . . . . . . . . . 992
concan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
concat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
conjugate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
conmetderiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
connect_vertices. . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
connected_components . . . . . . . . . . . . . . . . . . . . . . . 826
cons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
constantp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
constituent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
constvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
cont2part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
continuous_freq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
contortion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
contour_levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
contour_plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
contract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394, 487
contract_edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
contragrad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
contrib_ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
coord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
copy_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
copylist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
copymatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
cor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
cosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
cosnpiflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
cot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
coth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
cov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
cov1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644

Apendice A: Indice de Funciones y Variables

covdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
covect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
covers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
create_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
create_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
csc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
csch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
csetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
cspline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
ct_coords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
ct_coordsys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
ctaylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
ctaypov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ctaypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ctayswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ctayvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ctorsion_flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ctransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
ctranspose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
ctrgsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
cube_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
cuboctahedron_graph . . . . . . . . . . . . . . . . . . . . . . . . 821
cunlisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
current_let_rule_package . . . . . . . . . . . . . . . . . . 516
cv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
cycle_digraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
cycle_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
cylindrical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751

D
data_file_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
days360 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
dblint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
deactivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
debugmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
declare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
declare_constvalue . . . . . . . . . . . . . . . . . . . . . . . . . 795
declare_dimensions . . . . . . . . . . . . . . . . . . . . . . . . . 799
declare_fundamental_dimensions . . . . . . . . . . . 800
declare_fundamental_units . . . . . . . . . . . . . . . . . 800
declare_qty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
declare_translated . . . . . . . . . . . . . . . . . . . . . . . . . 586
declare_unit_conversion . . . . . . . . . . . . . . . . . . . 799
declare_units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
declare_weights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
decreasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
decsym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
default_let_rule_package . . . . . . . . . . . . . . . . . . 516
defcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
define_variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
defint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
defmatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
defrule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
defstruct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
deftaylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
degree_sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827

1027

del . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
deleten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
delta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
demoivre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
denom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
depends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
derivabbrev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
derivdegree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
derivlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
derivsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
describe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
desolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
determinant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
detout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
dfloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
dgauss_a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
dgauss_b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
dgeev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
dgemm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
dgeqrf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868
dgesv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868
dgesvd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
diag_matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
diagmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
diagmatrixp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
diagmetric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
diameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297, 298, 402
digitcharp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
dim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
dimacs_export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
dimacs_import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
dimensionless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717, 801
dimensions_as_list . . . . . . . . . . . . . . . . . . . . . . . . . 801
direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
discrete_freq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
disjoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
disjointp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
disolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
disp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
dispcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
dispflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
dispform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
dispfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
dispJordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
display_format_internal . . . . . . . . . . . . . . . . . . . . . 29
display2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
disprule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
dispterms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
distrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

1028

distribute_over . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
divide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
divisors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
divsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dkummer_m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dkummer_u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dlange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
doallmxops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dodecahedron_graph . . . . . . . . . . . . . . . . . . . . . . . . .
domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
domxexpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
domxmxops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
domxnctimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dontfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
doscmxops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
doscmxplus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dot0nscsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotassoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotconstrules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotdistrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotexptsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotident . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotproduct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotscrules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dotsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw_graph_program . . . . . . . . . . . . . . . . . . . . . . . . .
draw_realpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
draw3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
drawdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dscalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Manual de Maxima

138
236
537
474
625
625
872
589
365
821
139
365
366
366
366
366
366
366
366
367
367
367
367
886
367
386
117
707
709
843
845
717
708
708
773
436

E
echelon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
edge_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
edge_coloring . . . . . . . . . . . . . . . . . . . . . . . . . . 827, 846
edge_connectivity . . . . . . . . . . . . . . . . . . . . . . . . . . 827
edge_partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
edge_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
edge_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
eigens_by_jacobi. . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
eigenvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
eigenvectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
eighth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
einstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
eivals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
eivects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
elapsed_real_time . . . . . . . . . . . . . . . . . . . . . . . . . . 510
elapsed_run_time. . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
ele2comp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
ele2polynome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

ele2pui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
elem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
elementp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
elevation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
elevation_grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
elim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
elim_allbut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
eliminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
eliminate_using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
elliptic_e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
elliptic_ec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
elliptic_eu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
elliptic_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
elliptic_kc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
elliptic_pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
ematrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
empty_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
emptyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
endcons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
enhanced3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
entermatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
entertensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
entier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
epsilon_lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
equal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
equalp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
equiv_classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
erf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
erf_generalized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
erf_representation . . . . . . . . . . . . . . . . . . . . . . . . . 277
erfc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
erfflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
erfi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
errcatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
error_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
error_syms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
error_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
errormsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
ev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
ev_point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
eval_string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
even . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
evenfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
evenp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
every . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
evflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
evfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
evolution2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
evundiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Apendice A: Indice de Funciones y Variables

expandwrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
expandwrt_denom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
expandwrt_factored . . . . . . . . . . . . . . . . . . . . . . . . . 141
expintegral_chi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_ci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_e1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_ei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_shi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintegral_si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
expintrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
explicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
explose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
expon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
exponentialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
expop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
express . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
expt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
exptdispflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
exptisolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
exptsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
exsec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
extdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
extract_linear_equations . . . . . . . . . . . . . . . . . . 386
extremal_subset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
ezgcd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

F
f90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
facexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
facsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
facsum_combine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
factcomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
factlim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
factorfacsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
factorflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
factorial_expand. . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
factorout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
factors_only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
factorsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
facts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
false . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
fast_central_elements . . . . . . . . . . . . . . . . . . . . . . 386
fast_linsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
fasttimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
fb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
featurep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
fernfale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
fft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
fib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
fibtophi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

1029

fifth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
file_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720, 847
file_output_append . . . . . . . . . . . . . . . . . . . . . . . . . 219
file_search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
file_search_demo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_search_lisp. . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_search_maxima . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_search_tests . . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_search_usage . . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
file_type_lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
file_type_maxima. . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
filename_merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
fill_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
fill_density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
fillarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
filled_func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
find_root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
find_root_abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
find_root_error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
find_root_rel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
findde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
first . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
fix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
fixed_vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
flatten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
flength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
flipflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
float2bf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
floatnump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
floor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
flower_snark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
flush1deriv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
flushd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
flushnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
fmin_cobyla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
font_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
forget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
fortindent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
fortspaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
fourcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
fourexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
fourier_elim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
fourint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
fourintcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
fourintsin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
foursimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
foursin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
fourth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
fposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
fpprec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
fpprintprec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1030

frame_bracket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
freeof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
freshline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fresnel_c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fresnel_s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
from_adjacency_matrix . . . . . . . . . . . . . . . . . . . . . .
frucht_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
full_listify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fullmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fullmapl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fullratsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fullratsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fullsetify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
funcsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fundamental_dimensions . . . . . . . . . . . . . . . . . . . . .
fundamental_units . . . . . . . . . . . . . . . . . . . . . . . . . .
fundef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
funmake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
funp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Manual de Maxima

431
117
977
277
277
821
821
541
572
572
241
242
541
330
572
800
802
573
573
468
807

G
gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gamma_expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gamma_greek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gamma_incomplete. . . . . . . . . . . . . . . . . . . . . . . . . . . .
gamma_incomplete_generalized . . . . . . . . . . . . . .
gamma_incomplete_regularized . . . . . . . . . . . . . .
gammalim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gauss_a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gauss_b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gaussprob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcdex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcdivide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcfac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gdet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gen_laguerre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
generalized_lambert_w . . . . . . . . . . . . . . . . . . . . . .
genfact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
genindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
genmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gensumnum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gensym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geo_amortization. . . . . . . . . . . . . . . . . . . . . . . . . . . .
geo_annuity_fv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geo_annuity_pv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geomap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geometric_mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
geosum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get_edge_weight . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
get_lu_factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

263
265
265
265
265
265
266
625
625
943
242
243
942
946
243
943
442
929
282
158
511
371
511
511
809
808
808
770
943
642
943
179
827
888

get_output_stream_string . . . . . . . . . . . . . . . . . . 977
get_pixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
get_plot_option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
get_tex_environment . . . . . . . . . . . . . . . . . . . . . . . . 229
get_tex_environment_default . . . . . . . . . . . . . . . 229
get_vertex_label. . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
gfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
gfactorsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
ggf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
GGFCFMAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
GGFINFINITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
girth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
global_variances. . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
globalsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
gnuplot_close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_curve_styles . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_curve_titles . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_default_term_command . . . . . . . . . . . . . . 216
gnuplot_dumb_term_command . . . . . . . . . . . . . . . . . 216
gnuplot_file_name . . . . . . . . . . . . . . . . . . . . . . . . . . 723
gnuplot_out_file. . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
gnuplot_pm3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
gnuplot_preamble. . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_ps_term_command . . . . . . . . . . . . . . . . . . . 216
gnuplot_replot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
gnuplot_term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
Gosper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Gosper_in_Zeilberger . . . . . . . . . . . . . . . . . . . . . . 1020
GosperSum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
gr2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
gr3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
gradef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
gradefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
gramschmidt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
graph_center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
graph_charpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
graph_eigenvalues . . . . . . . . . . . . . . . . . . . . . . . . . . 828
graph_flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
graph_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
graph_periphery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
graph_product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
graph_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
graph_union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
graph6_decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
graph6_encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
graph6_export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
graph6_import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
great_rhombicosidodecahedron_graph . . . . . . . 822
great_rhombicuboctahedron_graph . . . . . . . . . . 822
grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212, 723
grid_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
grind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
grobner_basis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
grotzch_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822

Apendice A: Indice de Funciones y Variables

H
halfangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hamilton_cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hamilton_path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hankel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hankel_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hankel_2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
harmonic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
harmonic_mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
head_angle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724,
head_both . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
head_length. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724,
head_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
heawood_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hermite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hessian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hgfred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hilbert_matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hilbertmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hipow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
histogram_description . . . . . . . . . . . . . . . . . . . . . .
hodge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
horner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
hypergeometric_representation . . . . . . . . . . . . .

165
829
829
888
260
261
943
642
944
847
724
847
725
822
929
888
281
888
815
243
653
653
417
350
278
277

I
ibase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
ic_convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
ic1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
ic2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
icc1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
icc2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
ichr1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
ichr2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
icosahedron_graph . . . . . . . . . . . . . . . . . . . . . . . . . . 822
icosidodecahedron_graph . . . . . . . . . . . . . . . . . . . 822
icounter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
icurvature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
ident . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
identfor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
idiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
idim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
idummy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
idummyx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
ieqn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
ieqnprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
ifactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
ifb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
ifc1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
ifc2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
ifg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
ifgi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

1031

ifr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
iframe_bracket_form . . . . . . . . . . . . . . . . . . . . . . . . 412
ifri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
ifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
igcdex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
igeodesic_coords. . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
igeowedge_flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
ikt1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
ikt2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
ilt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
imaginary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
imagpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
imetric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
implicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
implicit_derivative . . . . . . . . . . . . . . . . . . . . . . . . 857
in_neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
inchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
increasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
ind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
indexed_tensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
induced_subgraph. . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
inf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
inference_result. . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
inferencep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
infeval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
infinity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
infix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
inflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
infolists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
init_atensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
init_ctensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
inm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
inmc1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
inmc2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
innerproduct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
inpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
inprod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
inrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
intanalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
integer_partitions . . . . . . . . . . . . . . . . . . . . . . . . . 542
integerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
integervalued . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
integrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
integrate_use_rootsof . . . . . . . . . . . . . . . . . . . . . . 311
integration_constant . . . . . . . . . . . . . . . . . . . . . . . 309
integration_constant_counter . . . . . . . . . . . . . . 310
intersect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
intervalp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
intfaclim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
intopois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
intosum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
inv_mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
invariant1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
inverse_fft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

1032

inverse_jacobi_cd . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_cn . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_cs . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_dc . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_dn . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_ds . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_nc . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_nd . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_ns . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_sc . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_sd . . . . . . . . . . . . . . . . . . . . . . . . . .
inverse_jacobi_sn . . . . . . . . . . . . . . . . . . . . . . . . . .
invert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
invert_by_lu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ip_grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ip_grid_in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
irr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
irrational . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_biconnected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_bipartite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_connected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_digraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_edge_in_graph. . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_graph_or_digraph . . . . . . . . . . . . . . . . . . . . . . . .
is_isomorphic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_planar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_sconnected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
is_vertex_in_graph . . . . . . . . . . . . . . . . . . . . . . . . .
ishow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
isolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
isolate_wrt_times . . . . . . . . . . . . . . . . . . . . . . . . . .
isomorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
isqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
isreal_p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
items_inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
itr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Manual de Maxima

286
285
285
286
285
286
285
286
285
285
285
285
373
889
725
725
811
182
188
830
830
831
831
831
831
831
832
832
832
832
832
391
119
120
830
477
996
956
413

J
jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_cn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_dc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_dn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_ds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_nc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_nd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_ns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_sc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_sd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobi_sn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
jacobian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

477
285
284
285
285
285
285
285
285
285
929
285
285
284
889
659

join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
julia_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
julia_set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
julia_sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814

K
kdels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
kdelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
keepfloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
key_pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
killcontext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
kinvariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
kostka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
kron_delta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
kronecker_product . . . . . . . . . . . . . . . . . . . . . . . . . . 889
kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
kummer_m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
kummer_u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
kurtosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
kurtosis_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . 700
kurtosis_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
kurtosis_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . 697
kurtosis_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
kurtosis_continuous_uniform . . . . . . . . . . . . . . . 687
kurtosis_discrete_uniform . . . . . . . . . . . . . . . . . 702
kurtosis_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
kurtosis_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
kurtosis_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
kurtosis_general_finite_discrete . . . . . . . . . 696
kurtosis_geometric . . . . . . . . . . . . . . . . . . . . . . . . . 701
kurtosis_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
kurtosis_laplace. . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
kurtosis_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . 688
kurtosis_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . 684
kurtosis_negative_binomial . . . . . . . . . . . . . . . . 704
kurtosis_noncentral_chi2 . . . . . . . . . . . . . . . . . . 679
kurtosis_noncentral_student_t . . . . . . . . . . . . . 675
kurtosis_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
kurtosis_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
kurtosis_poisson. . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
kurtosis_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . 692
kurtosis_student_t . . . . . . . . . . . . . . . . . . . . . . . . . 673
kurtosis_weibull. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

L
label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756
label_alignment . . . . . . . . . . . . . . . . . . . . . . . . 726, 845
label_orientation . . . . . . . . . . . . . . . . . . . . . . . . . . 727
labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
laguerre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

Apendice A: Indice de Funciones y Variables

lambert_w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
laplacian_matrix. . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
lassociative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
lbfgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
lbfgs_ncorrections . . . . . . . . . . . . . . . . . . . . . . . . . 880
lbfgs_nfeval_max. . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
lc_l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
lc_u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
lc2kdt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
lcharp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
lcm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
ldefint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
ldisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
ldisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
legend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
legendre_p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
legendre_q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
leinstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
let_rule_packages . . . . . . . . . . . . . . . . . . . . . . . . . . 521
letrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
letrules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
letsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
levi_civita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
lfg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
lfreeof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
lg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
lgtreillis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
lhospitallim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
lhs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
liediff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
limsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Lindstedt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
line_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
line_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
line_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142, 941
linear_program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
linear_regression . . . . . . . . . . . . . . . . . . . . . . . . . . 970
linear_solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
linearinterpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
linechar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
linel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
linenum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
linsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
linsolve_params . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
linsolvewarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
lispdisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
list_correlations . . . . . . . . . . . . . . . . . . . . . . . . . . 647
list_matrix_entries . . . . . . . . . . . . . . . . . . . . . . . . 373
list_nc_monomials . . . . . . . . . . . . . . . . . . . . . . . . . . 386
listarith . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
listarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

1033

listconstvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
listdummyvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
listify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
listoftens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
listofvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
listp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56,
lmax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lmxchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
load_pathname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
loadfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
loadprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
locate_matrix_entry . . . . . . . . . . . . . . . . . . . . . . . .
log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
log_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logarc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logcb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logconcoeffp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logcontract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lognegint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212,
logx_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212,
logy_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
logz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lopow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lorentz_gauge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lowercasep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lratsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lreduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lriem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lriemann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lsquares_estimates . . . . . . . . . . . . . . . . . . . . . . . . .
lsquares_estimates_approximate . . . . . . . . . . .
lsquares_estimates_exact . . . . . . . . . . . . . . . . . .
lsquares_mse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lsquares_residual_mse . . . . . . . . . . . . . . . . . . . . . .
lsquares_residuals . . . . . . . . . . . . . . . . . . . . . . . . .
lsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ltreillis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lu_backsub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lu_factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lucas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

120
120
543
391
121
889
153
153
373
221
221
222
222
577
889
160
264
161
161
728
161
162
162
162
162
728
729
729
729
730
245
408
982
121
245
544
443
427
897
899
898
900
902
902
451
491
890
890
477

M
m1pbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
macroexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
macroexpand1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
macroexpansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
mainvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

1034

make_array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
make_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
make_level_picture . . . . . . . . . . . . . . . . . . . . . . . . . 766
make_poly_continent . . . . . . . . . . . . . . . . . . . . . . . . 768
make_poly_country . . . . . . . . . . . . . . . . . . . . . . . . . . 768
make_polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
make_random_state . . . . . . . . . . . . . . . . . . . . . . . . . . 170
make_rgb_picture. . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
make_string_input_stream . . . . . . . . . . . . . . . . . . 977
make_string_output_stream . . . . . . . . . . . . . . . . . 978
make_transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
makebox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
makefact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
makegamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
makelist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
makeOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
makeset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
mandelbrot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
mandelbrot_set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
manual_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
mapatom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
maperror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
maplist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
mapprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
mat_cond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
mat_fullunblocker . . . . . . . . . . . . . . . . . . . . . . . . . . 892
mat_function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
mat_norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
mat_trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
mat_unblocker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
matchdeclare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
matchfix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
matrix_element_add . . . . . . . . . . . . . . . . . . . . . . . . . 376
matrix_element_mult . . . . . . . . . . . . . . . . . . . . . . . . 377
matrix_element_transpose . . . . . . . . . . . . . . . . . . 378
matrix_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
matrixmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
matrixp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376, 892
mattrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
max_clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
max_degree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
max_flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
max_independent_set . . . . . . . . . . . . . . . . . . . . . . . . 834
max_matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
max_ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
maxapplydepth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
maxapplyheight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
maxima_tempdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
maxima_userdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
maximize_lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
maxnegex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
maxposex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
maxpsifracdenom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
maxpsifracnum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
maxpsinegint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Manual de Maxima

maxpsiposint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
maxtayorder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
maybe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
md5sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
mean_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
mean_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
mean_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
mean_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
mean_continuous_uniform . . . . . . . . . . . . . . . . . . . 686
mean_deviation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
mean_discrete_uniform . . . . . . . . . . . . . . . . . . . . . . 702
mean_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
mean_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
mean_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
mean_general_finite_discrete . . . . . . . . . . . . . . 696
mean_geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
mean_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
mean_hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . 703
mean_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
mean_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
mean_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
mean_negative_binomial . . . . . . . . . . . . . . . . . . . . . 704
mean_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . . . . 678
mean_noncentral_student_t . . . . . . . . . . . . . . . . . 674
mean_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
mean_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
mean_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
mean_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
mean_student_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
mean_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
median . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
median_deviation. . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
mesh_lines_color. . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
metricexpandall. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
min_degree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
min_edge_cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
min_vertex_cover. . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
min_vertex_cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
minf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
minfactorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
minimalPoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
minimize_lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938
minimum_spanning_tree . . . . . . . . . . . . . . . . . . . . . . 835
minor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
minpack_lsquares. . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
minpack_solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
mnewton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
mod_big_prime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
mod_test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
mod_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
mode_check_errorp . . . . . . . . . . . . . . . . . . . . . . . . . . 580
mode_check_warnp. . . . . . . . . . . . . . . . . . . . . . . . . . . . 581

Apendice A: Indice de Funciones y Variables

mode_checkp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
mode_declare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
mode_identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
ModeMatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
modular_linear_solver . . . . . . . . . . . . . . . . . . . . . 1020
modulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
moebius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
mon2schur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
monomial_dimensions . . . . . . . . . . . . . . . . . . . . . . . . 386
multi_elem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
multi_orbit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
multi_pui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
multibernstein_poly . . . . . . . . . . . . . . . . . . . . . . . . 612
multinomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
multinomial_coeff . . . . . . . . . . . . . . . . . . . . . . . . . . 545
multiplicative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
multiplicities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
multiplot_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
multsym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
multthru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
mycielski_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
myoptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

N
nary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95, 144
natural_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
nc_degree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
ncexpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
ncharpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
negative_picture. . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
negdistrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
negsumdispflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
new_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
new_variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996
newcontext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
newdet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
newline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978, 982
newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
newtonepsilon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
newtonmaxiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
next_prime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
nextlayerfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
nicedummies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
niceindices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
niceindicespref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
ninth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
nm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
nmc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
noeval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
nofix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
nolabels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
nonarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
noncentral_moment . . . . . . . . . . . . . . . . . . . . . . . . . . 638
nonegative_lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938

1035

noninteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
nonmetricity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
nonnegintegerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
nonscalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
nonscalarp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
nonzeroandfreeof. . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
notequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
noun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
noundisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
nounify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
nouns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
np . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
npi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
nptetrad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
npv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
nroots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
nterms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
ntermst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
nthroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
nticks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212, 730
ntrig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
nullity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
nullspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
num . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
num_distinct_partitions . . . . . . . . . . . . . . . . . . . 546
num_partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
numbered_boundaries . . . . . . . . . . . . . . . . . . . . . . . . 768
numberp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
numer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
numer_pbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
numerval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
numfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
nusum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
nzeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
nzetai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
nzetar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

O
obase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
odd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
odd_girth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
oddfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
oddp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
ode_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
ode2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
odelin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
op . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
opena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
opena_binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
openr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
openr_binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
openw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
openw_binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
operatorp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
opproperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
opsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123, 919

1036

optimize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
optimprefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
optionset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
orbit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
orbits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
ordergreat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
ordergreatp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
orderless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
orderlessp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
orthogonal_complement . . . . . . . . . . . . . . . . . . . . . . 893
orthopoly_recur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
orthopoly_returns_intervals . . . . . . . . . . . . . . . 930
orthopoly_weight. . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
out_neighbors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
outative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
outchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
outermap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
outofpois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

P
packagefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222, 512
pade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212, 730
parabolic_cylinder_d . . . . . . . . . . . . . . . . . . . . . . . 279
parametric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
parametric_surface . . . . . . . . . . . . . . . . . . . . . . . . . 758
parg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
parGosper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
parse_string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
part2cont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
partfrac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
partition_set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
partpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
partswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
path_digraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
path_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
pathname_directory . . . . . . . . . . . . . . . . . . . . . . . . . 222
pathname_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
pathname_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
pdf_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
pdf_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
pdf_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
pdf_cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
pdf_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
pdf_continuous_uniform . . . . . . . . . . . . . . . . . . . . . 686
pdf_discrete_uniform . . . . . . . . . . . . . . . . . . . . . . . 702
pdf_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
pdf_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
pdf_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
pdf_general_finite_discrete . . . . . . . . . . . . . . . 695
pdf_geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
pdf_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
pdf_hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . . 702
pdf_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693

Manual de Maxima

pdf_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
pdf_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
pdf_negative_binomial . . . . . . . . . . . . . . . . . . . . . . 704
pdf_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . . . . . 678
pdf_noncentral_student_t . . . . . . . . . . . . . . . . . . 674
pdf_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
pdf_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
pdf_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
pdf_rank_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
pdf_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
pdf_signed_rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
pdf_student_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
pdf_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
pearson_skewness. . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
permanent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
permut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
permutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944
permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
petersen_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
petrov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
pfeformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
pickapart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
picture_equalp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
picturep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
piece . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
piechart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
piechart_description . . . . . . . . . . . . . . . . . . . . . . . 655
planar_embedding. . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
playback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
plog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
plot_format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
plot_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
plot_realpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
plot2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
plotdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
ploteq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
plsquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
pochhammer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
pochhammer_max_index . . . . . . . . . . . . . . . . . . . . . . . 931
point_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
point_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213, 732
points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
points_joined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
poisdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
poisexpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poisint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poislim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poismap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poisplus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poissimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poissubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
poistimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
polar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
polar_to_xy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
polarform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
polartorect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Apendice A: Indice de Funciones y Variables

poly_add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_buchberger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_buchberger_criterion . . . . . . . . . . . . . . . . . 853
poly_coefficient_ring . . . . . . . . . . . . . . . . . . . . . . 850
poly_colon_ideal. . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
poly_content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
poly_depends_p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
poly_elimination_ideal . . . . . . . . . . . . . . . . . . . . . 854
poly_elimination_order . . . . . . . . . . . . . . . . . . . . . 850
poly_exact_divide . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
poly_expt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
poly_gcd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
poly_grobner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_grobner_algorithm . . . . . . . . . . . . . . . . . . . . . 850
poly_grobner_debug . . . . . . . . . . . . . . . . . . . . . . . . . 850
poly_grobner_equal . . . . . . . . . . . . . . . . . . . . . . . . . 854
poly_grobner_member . . . . . . . . . . . . . . . . . . . . . . . . 855
poly_grobner_subsetp . . . . . . . . . . . . . . . . . . . . . . . 854
poly_ideal_intersection . . . . . . . . . . . . . . . . . . . 854
poly_ideal_polysaturation . . . . . . . . . . . . . . . . . 855
poly_ideal_polysaturation1 . . . . . . . . . . . . . . . . 855
poly_ideal_saturation . . . . . . . . . . . . . . . . . . . . . . 855
poly_ideal_saturation1 . . . . . . . . . . . . . . . . . . . . . 855
poly_lcm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
poly_minimization . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_monomial_order . . . . . . . . . . . . . . . . . . . . . . . . 850
poly_multiply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_normal_form. . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_normalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_normalize_list . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_polysaturation_extension . . . . . . . . . . . . . 855
poly_primary_elimination_order . . . . . . . . . . . 850
poly_primitive_part . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_pseudo_divide . . . . . . . . . . . . . . . . . . . . . . . . . 852
poly_reduced_grobner . . . . . . . . . . . . . . . . . . . . . . . 853
poly_reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
poly_return_term_list . . . . . . . . . . . . . . . . . . . . . . 850
poly_s_polynomial . . . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_saturation_extension . . . . . . . . . . . . . . . . . 855
poly_secondary_elimination_order . . . . . . . . . 850
poly_subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
poly_top_reduction_only . . . . . . . . . . . . . . . . . . . 851
polydecomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
polyfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
polymod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
polynome2ele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
polynomialp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
polytocompanion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
posfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
postfix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
power_mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
powerdisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
powers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
powerseries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
powerset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

1037

pred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
prederror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
prev_prime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
primep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
primep_number_of_tests . . . . . . . . . . . . . . . . . . . . . 479
principal_components . . . . . . . . . . . . . . . . . . . . . . . 648
print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
print_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
printfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
printpois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
printprops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
prodrac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
product_use_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . 952
program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
programmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
proportional_axes . . . . . . . . . . . . . . . . . . . . . . . . . . 734
props . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
propvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
psexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
psfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
psi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274, 432
psubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
ptriangularize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
pui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
pui_direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
pui2comp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
pui2ele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
pui2polynome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
puireduc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
pv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807

Q
qput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
qrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
qty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qagi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qagp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qawc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qawf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qawo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quad_qaws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quadrilateral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quantile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quantile_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . .
quantile_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
quantile_binomial . . . . . . . . . . . . . . . . . . . . . . . . . .
quantile_cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

182
640
797
324
314
316
323
315
318
319
320
321
763
640
699
685
697
694

1038

Manual de Maxima

quantile_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
quantile_continuous_uniform . . . . . . . . . . . . . . . 686
quantile_discrete_uniform . . . . . . . . . . . . . . . . . 702
quantile_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
quantile_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
quantile_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
quantile_general_finite_discrete . . . . . . . . . 696
quantile_geometric . . . . . . . . . . . . . . . . . . . . . . . . . 701
quantile_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
quantile_hypergeometric . . . . . . . . . . . . . . . . . . . 703
quantile_laplace. . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
quantile_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . 687
quantile_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . 683
quantile_negative_binomial . . . . . . . . . . . . . . . . 704
quantile_noncentral_chi2 . . . . . . . . . . . . . . . . . . 678
quantile_noncentral_student_t . . . . . . . . . . . . . 674
quantile_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
quantile_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
quantile_poisson. . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
quantile_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . 690
quantile_student_t . . . . . . . . . . . . . . . . . . . . . . . . . 673
quantile_weibull. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
quartile_skewness . . . . . . . . . . . . . . . . . . . . . . . . . . 644
quit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
qunit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
quotient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

R
radcan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
radexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
radius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
radsubstflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_bernoulli. . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_bipartite_graph . . . . . . . . . . . . . . . . . . . . .
random_cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_continuous_uniform . . . . . . . . . . . . . . . . .
random_digraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_discrete_uniform . . . . . . . . . . . . . . . . . . .
random_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_general_finite_discrete . . . . . . . . . . .
random_geometric. . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_graph1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_hypergeometric . . . . . . . . . . . . . . . . . . . . . .
random_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_lognormal. . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_negative_binomial . . . . . . . . . . . . . . . . . .
random_network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
random_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . .

145
146
836
253
171
701
686
698
823
694
678
687
823
702
683
680
685
696
701
823
824
695
703
693
688
684
704
824
679

random_noncentral_student_t . . . . . . . . . . . . . . . 675
random_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
random_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
random_permutation . . . . . . . . . . . . . . . . . . . . . . . . . 548
random_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
random_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
random_regular_graph . . . . . . . . . . . . . . . . . . . . . . . 823
random_student_t. . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
random_tournament . . . . . . . . . . . . . . . . . . . . . . . . . . 824
random_tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
random_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379, 894
rassociative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
rat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
ratalgdenom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
ratchristof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
ratcoef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
ratdenom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
ratdenomdivide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
ratdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
ratdisrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
rateinstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
ratepsilon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
ratexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
ratfac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
ratinterpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
rational . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182, 941
rationalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
ratmx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
ratnumer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
ratnump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
ratp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
ratprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
ratriemann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
ratsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
ratsimpexpons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
ratsubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
ratvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
ratvarswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
ratweight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
ratweights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
ratweyl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
ratwtlvl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
read_array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
read_binary_array . . . . . . . . . . . . . . . . . . . . . . . . . . 916
read_binary_list. . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
read_binary_matrix . . . . . . . . . . . . . . . . . . . . . . . . . 916
read_hashed_array . . . . . . . . . . . . . . . . . . . . . . . . . . 915
read_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
read_matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
read_nested_list. . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
read_xpm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
readchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
readline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
readonly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

Apendice A: Indice de Funciones y Variables

real_imagpart_to_conjugate . . . . . . . . . . . . . . . . 998
realonly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
realpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
realroots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
rearray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
rectform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
rectform_log_if_constant . . . . . . . . . . . . . . . . . . 998
recttopolar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
rediff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
redraw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
reduce_consts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
reduce_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
refcheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
region_boundaries . . . . . . . . . . . . . . . . . . . . . . . . . . 769
region_boundaries_plus . . . . . . . . . . . . . . . . . . . . . 770
rem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
remainder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
remarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
rembox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
remcomps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
remcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
remcoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
remfun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
remfunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
remlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
remove_constvalue . . . . . . . . . . . . . . . . . . . . . . . . . . 795
remove_dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . 799
remove_edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
remove_fundamental_dimensions . . . . . . . . . . . . . 800
remove_fundamental_units . . . . . . . . . . . . . . . . . . 800
remove_vertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
rempart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
remrule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
remsym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
remvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
residue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
resolvante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
resolvante_alternee1 . . . . . . . . . . . . . . . . . . . . . . . 500
resolvante_bipartite . . . . . . . . . . . . . . . . . . . . . . . 500
resolvante_diedrale . . . . . . . . . . . . . . . . . . . . . . . . 500
resolvante_klein. . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
resolvante_klein3 . . . . . . . . . . . . . . . . . . . . . . . . . . 501
resolvante_produit_sym . . . . . . . . . . . . . . . . . . . . . 501
resolvante_unitaire . . . . . . . . . . . . . . . . . . . . . . . . 501
resolvante_vierer . . . . . . . . . . . . . . . . . . . . . . . . . . 502
rest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
resultant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256, 257
return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
reveal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
revert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
revert2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
rgb2level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767

1039

rhs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
ric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
ricci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
riem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
riemann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
rinvariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
risch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
rk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
rmxchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
rncombine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
rombergabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
rombergit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
rombergmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
rombergtol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
room . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
rootsconmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
rootscontract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
rootsepsilon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
round . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
row . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
rowop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
rowswap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
rreduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
run_testsuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
run_viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

S
save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
savedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
savefactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
saving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
scalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
scalarmatrixp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
scalarp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
scaled_bessel_i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
scaled_bessel_i0. . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
scaled_bessel_i1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
scanmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
scatterplot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655, 656
scatterplot_description . . . . . . . . . . . . . . . . . . . 656
schur2comp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
sconcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
scopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
scsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
scurvature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
sdowncase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
sec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
sech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
second . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
sequal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
sequalignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
set_draw_defaults . . . . . . . . . . . . . . . . . . . . . . . . . . 709
set_edge_weight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
set_partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
set_plot_option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
set_random_state. . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

1040

set_tex_environment . . . . . . . . . . . . . . . . . . . . . . . . 229
set_tex_environment_default . . . . . . . . . . . . . . . 229
set_up_dot_simplifications . . . . . . . . . . . . . . . . 385
set_vertex_label. . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
setcheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
setcheckbreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
setdifference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
setelmx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
setequalp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
setify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
setp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
setunits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
setup_autoload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
setval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
seventh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
sexplode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
sf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
shortest_path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
shortest_weighted_path . . . . . . . . . . . . . . . . . . . . . 837
show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
show_edge_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_edge_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_edge_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
show_label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
show_vertex_color . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_vertex_size. . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
show_vertex_type. . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
show_vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
show_weight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
showcomps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
showratvars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
showtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
sierpinskiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
sierpinskimap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
signum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
similaritytransform . . . . . . . . . . . . . . . . . . . . . . . . 380
simp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
simp_inequality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
simplified_output . . . . . . . . . . . . . . . . . . . . . . . . . 1019
simplify_products . . . . . . . . . . . . . . . . . . . . . . . . . . 950
simplify_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
simplode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
simpmetderiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
simpsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
simtran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
sinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
sinnpiflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
sinsert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
sinvertcase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
sixth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
skewness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
skewness_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . 700
skewness_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
skewness_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . 697

Manual de Maxima

skewness_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
skewness_continuous_uniform . . . . . . . . . . . . . . . 687
skewness_discrete_uniform . . . . . . . . . . . . . . . . . 702
skewness_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
skewness_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
skewness_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
skewness_general_finite_discrete . . . . . . . . . 696
skewness_geometric . . . . . . . . . . . . . . . . . . . . . . . . . 701
skewness_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
skewness_hypergeometric . . . . . . . . . . . . . . . . . . . 703
skewness_laplace. . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
skewness_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . 687
skewness_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . 684
skewness_negative_binomial . . . . . . . . . . . . . . . . 704
skewness_noncentral_chi2 . . . . . . . . . . . . . . . . . . 679
skewness_noncentral_student_t . . . . . . . . . . . . . 675
skewness_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
skewness_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
skewness_poisson. . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
skewness_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . 692
skewness_student_t . . . . . . . . . . . . . . . . . . . . . . . . . 673
skewness_weibull. . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
slength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
smake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
small_rhombicosidodecahedron_graph . . . . . . . 824
small_rhombicuboctahedron_graph . . . . . . . . . . 824
smax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
smin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
smismatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
snowmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
snub_cube_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
snub_dodecahedron_graph . . . . . . . . . . . . . . . . . . . 824
solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
solve_rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
solve_rec_rat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
solvedecomposes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
solveexplicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
solvefactors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
solvenullwarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
solveradcan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
solvetrigwarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
some . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
somrac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
sparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
sparse6_decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
sparse6_encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
sparse6_export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
sparse6_import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
specint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
spherical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
spherical_bessel_j . . . . . . . . . . . . . . . . . . . . . . . . . 931
spherical_bessel_y . . . . . . . . . . . . . . . . . . . . . . . . . 931
spherical_hankel1 . . . . . . . . . . . . . . . . . . . . . . . . . . 931
spherical_hankel2 . . . . . . . . . . . . . . . . . . . . . . . . . . 931
spherical_harmonic . . . . . . . . . . . . . . . . . . . . . . . . . 932
spherical_to_xyz. . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Apendice A: Indice de Funciones y Variables

splice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
sposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
spring_embedding_depth . . . . . . . . . . . . . . . . . . . . . 847
sprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
sqrtdenest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
sqrtdispflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
sremove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
sremovefirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
sreverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ssearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ssort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
sstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
ssubst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
ssubstfirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
staircase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
standardize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
standardize_inverse_trig . . . . . . . . . . . . . . . . . . 999
stardisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
starplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
starplot_description . . . . . . . . . . . . . . . . . . . . . . . 657
stats_numer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
std . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
std_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
std_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
std_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
std_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
std_continuous_uniform . . . . . . . . . . . . . . . . . . . . . 687
std_discrete_uniform . . . . . . . . . . . . . . . . . . . . . . . 702
std_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
std_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
std_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
std_general_finite_discrete . . . . . . . . . . . . . . . 696
std_geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
std_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
std_hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . . 703
std_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
std_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
std_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
std_negative_binomial . . . . . . . . . . . . . . . . . . . . . . 704
std_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . . . . . 679
std_noncentral_student_t . . . . . . . . . . . . . . . . . . 675
std_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
std_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
std_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
std_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
std_student_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
std_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
std1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
stemplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
stirling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
stirling1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
stirling2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
strim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
striml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
strimr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987

1041

string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
stringdisp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
stringout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
stringp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
strong_components . . . . . . . . . . . . . . . . . . . . . . . . . . 838
structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
struve_h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
struve_l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
sublis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
sublis_apply_lambda . . . . . . . . . . . . . . . . . . . . . . . . 131
sublist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
sublist_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
submatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
subnumsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
subsample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
subset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
subsetp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
subst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
subst_parallel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
substinpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
substpart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
substring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
subvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
subvarp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
sumcontract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
sumexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
summand_to_rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
sumsplitfact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
supcase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
supcontext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
surface_hide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
symbolp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
symmdifference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
symmetric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
symmetricp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

T
tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
take_channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
take_inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
taylor_logexpand. . . . . . . . . . . . . . . . . . . . . . . . . . . .
taylor_order_coefficients . . . . . . . . . . . . . . . . .
taylor_simplifier . . . . . . . . . . . . . . . . . . . . . . . . . .
taylor_truncate_polynomials . . . . . . . . . . . . . . .
taylordepth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
taylorinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
taylorp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
taytorat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcl_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tcontract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tellrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

982
767
956
167
167
462
466
466
466
467
465
466
466
467
513
502
257

1042

tellsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
tellsimpafter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
tensorkill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
tentex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
tenth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734, 847
test_mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
test_means_difference . . . . . . . . . . . . . . . . . . . . . . 959
test_normality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
test_proportion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
test_proportions_difference . . . . . . . . . . . . . . . 965
test_rank_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969
test_sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
test_signed_rank. . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
test_variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961
test_variance_ratio . . . . . . . . . . . . . . . . . . . . . . . . 962
testsuite_files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
tex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
tex1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
texput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
third . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
timedate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
timer_devalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
timer_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
tldefint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
tlimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
tlimswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
to_lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
to_poly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
to_poly_solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
todd_coxeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
toeplitz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
topological_sort. . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
totaldisrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
totalfourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
totient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
tpartpol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
tr_array_as_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
tr_bound_function_applyp . . . . . . . . . . . . . . . . . . 584
tr_file_tty_messagesp . . . . . . . . . . . . . . . . . . . . . . 584
tr_float_can_branch_complex . . . . . . . . . . . . . . . 584
tr_function_call_default . . . . . . . . . . . . . . . . . . 584
tr_numer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
tr_optimize_max_loop . . . . . . . . . . . . . . . . . . . . . . . 584
tr_semicompile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
tr_state_vars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
tr_warn_bad_function_calls . . . . . . . . . . . . . . . . 585
tr_warn_fexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
tr_warn_meval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
tr_warn_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
tr_warn_undeclared . . . . . . . . . . . . . . . . . . . . . . . . . 585
tr_warn_undefined_variable . . . . . . . . . . . . . . . . 585

Manual de Maxima

tr_warnings_get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
trace_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
tracematrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
transcompile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
transform_sample. . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
transform_xy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
translate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
translate_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
transparent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
transpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
transrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
tree_reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
treefale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
treillis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
treinat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
triangularize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
trigexpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
trigexpandplus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
trigexpandtimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
triginverses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
trigrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
trigreduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
trigsign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
trigsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
trivial_solutions . . . . . . . . . . . . . . . . . . . . . . . . . 1020
true . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
trunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
truncated_cube_graph . . . . . . . . . . . . . . . . . . . . . . . 824
truncated_dodecahedron_graph . . . . . . . . . . . . . . 824
truncated_icosahedron_graph . . . . . . . . . . . . . . . 824
truncated_tetrahedron_graph . . . . . . . . . . . . . . . 824
ttyoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
tube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
tube_extremes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
tutte_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824

U
ueivects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
ufg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
uforget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
ug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
ultraspherical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
und . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
underlying_graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
undiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
unit_step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
unit_vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
uniteigenvectors. . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
unitp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
unitvector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
unknown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

Apendice A: Indice de Funciones y Variables

unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
unorder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
unsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
untellrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
untimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
untrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
uppercasep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
uric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
uricci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
uriem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
uriemann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
use_fast_arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
user_preamble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
usersetunits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
uvect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

V
values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
vandermonde_matrix . . . . . . . . . . . . . . . . . . . . . . . . . 895
var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
var_bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
var_beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
var_binomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
var_chi2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
var_continuous_uniform . . . . . . . . . . . . . . . . . . . . . 686
var_discrete_uniform . . . . . . . . . . . . . . . . . . . . . . . 702
var_exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
var_f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
var_gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
var_general_finite_discrete . . . . . . . . . . . . . . . 696
var_geometric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
var_gumbel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
var_hypergeometric . . . . . . . . . . . . . . . . . . . . . . . . . 703
var_laplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
var_logistic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
var_lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
var_negative_binomial . . . . . . . . . . . . . . . . . . . . . . 704
var_noncentral_chi2 . . . . . . . . . . . . . . . . . . . . . . . . 678
var_noncentral_student_t . . . . . . . . . . . . . . . . . . 675
var_normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
var_pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
var_poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
var_rayleigh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
var_student_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
var_weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
var1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
vectorpotential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
vectorsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
verbify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
verbose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
vers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
vertex_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
vertex_coloring . . . . . . . . . . . . . . . . . . . 839, 842, 846
vertex_connectivity . . . . . . . . . . . . . . . . . . . . . . . . 838
vertex_degree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
vertex_distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838

1043

vertex_eccentricity . . . . . . . . . . . . . . . . . . . . . . . .
vertex_in_degree. . . . . . . . . . . . . . . . . . . . . . . . . . . .
vertex_out_degree . . . . . . . . . . . . . . . . . . . . . . . . . .
vertex_partition. . . . . . . . . . . . . . . . . . . . . . . . . . . .
vertex_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vertex_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vertices_to_cycle . . . . . . . . . . . . . . . . . . . . . . . . . .
vertices_to_path. . . . . . . . . . . . . . . . . . . . . . . . . . . .
view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

838
839
839
846
845
845
839
847
847
738

W
warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
weyl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428, 444
wheel_graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
wiener_index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
wired_surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
with_stdout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
write_binary_data . . . . . . . . . . . . . . . . . . . . . . . . . . 917
write_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
writefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
wronskian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941

X
x.............................................
x_voxel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xaxis_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xaxis_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xaxis_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xaxis_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xlabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214,
xlabel_secondary. . . . . . . . . . . . . . . . . . . . . . . . . . . .
xrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xrange_secondary. . . . . . . . . . . . . . . . . . . . . . . . . . . .
xreduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xthru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xtics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xtics_axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xtics_rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xtics_rotate_secondary . . . . . . . . . . . . . . . . . . . . .
xtics_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xtics_secondary_axis . . . . . . . . . . . . . . . . . . . . . . .
xu_grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xy_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xyplane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

214
739
739
739
739
740
740
740
741
741
741
556
147
742
743
743
743
743
743
743
744
744

Y
y.............................................
y_voxel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
yaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
yaxis_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
yaxis_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
yaxis_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

214
744
744
744
745
745

1044

yaxis_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ylabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214,
ylabel_secondary. . . . . . . . . . . . . . . . . . . . . . . . . . . .
yrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
yrange_secondary. . . . . . . . . . . . . . . . . . . . . . . . . . . .
ytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ytics_axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ytics_rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ytics_rotate_secondary . . . . . . . . . . . . . . . . . . . . .
ytics_secondary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ytics_secondary_axis . . . . . . . . . . . . . . . . . . . . . . .
yv_grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Manual de Maxima

745
746
746
746
747
747
747
747
747
748
748
748

Z
z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
z_voxel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
zaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
zaxis_color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
zaxis_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
zaxis_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
Zeilberger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
zeroa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
zerob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

zerobern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zeroequiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zerofor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zeromatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zeromatrixp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zeta%pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zlabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215,
zlange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_add_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_determinant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_invert_by_lu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_mult_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_power_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_primroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_primroot_limit . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_primroot_p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
zn_primroot_pretest . . . . . . . . . . . . . . . . . . . . . . . .
zn_primroot_verbose . . . . . . . . . . . . . . . . . . . . . . . .
zrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ztics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ztics_axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ztics_rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

479
193
895
382
895
479
480
749
872
480
480
481
481
482
483
483
484
485
485
486
486
750
750
750
750

También podría gustarte