manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf ·...

303
R. Ipanaqué BREVE MANUAL DE ξΣ M publicaciones e u e m d n e t 0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3 -0.5 0 0.5 1 1.5 2 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Segunda Edición

Transcript of manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf ·...

Page 1: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

R. Ipanaqué

BREVE MANUAL DE

ξΣM

publicacioneseu em d net

0 0.5 1 1.5 2 2.5 3 00.5

11.5

22.5

3

-0.50

0.51

1.52

-1-0.8-0.6-0.4-0.200.20.40.60.81

Segunda Edición

Page 2: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima
Page 3: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Breve Manual de Maxima

Segunda Edición

Page 4: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Breve Manual de Maxima

Segunda Edición

R. Ipanaqué

Departamento de Matemática

Universidad Nacional de Piura

Page 5: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Robert Ipanaqué Chero

Departamento de Matemática

Universidad Nacional de Piura

Urb. Miraflores s/n, Castilla, Piura

PERÚ

https://sites.google.com/site/ripanaque

[email protected]

La composición de BREVE MANUAL DE MAXIMA, Segunda Edición,

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

Este documento es libre;

se puede redistribuir y/o modificar bajo los términos de la

GNU General Public License tal como lo publica la Free Software Foundation.

Para más detalles véase la GNU General Public License en

http://www.gnu.org/copyleft/gpl.html

Primera Edición: Mayo 2010,

Segunda Edición: Enero 2012.

Publicado por el grupo eumed•net.

Grupo de Investigación de la Universidad de Málaga, España

http://www.eumed.net

Hecho el depósito legal en la Biblioteca Nacional de España

con Registro N◦ 10/101865

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

Page 6: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

En memoria de mi padre,

Juan A. Ipanaqué Vargas

Page 7: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Índice general

Prólogo xi

1. Obtención de Maxima 1

1.1. Descarga . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. Instalación . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Funcionamiento de Maxima 9

2.1. Interfaz de cuaderno . . . . . . . . . . . . . . . . . . . 9

2.2. Interfaz basada en texto . . . . . . . . . . . . . . . . . 10

3. Uso del sistema Maxima 12

3.1. La estructura de Maxima . . . . . . . . . . . . . . . . 12

3.2. Cuadernos como documentos . . . . . . . . . . . . . . 14

3.3. Con�guración de opciones y estilos . . . . . . . . . . . 17

3.4. Búsqueda de ayuda . . . . . . . . . . . . . . . . . . . . 20

3.5. Reinicio . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.6. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . 23

3.7. Paquetes en Maxima . . . . . . . . . . . . . . . . . . . 24

3.8. Advertencias y mensajes . . . . . . . . . . . . . . . . . 25

3.9. Interrupción de cálculos . . . . . . . . . . . . . . . . . 25

v

Page 8: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

vi Índice

4. Cálculos numéricos 26

4.1. Aritmética . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.2. Resultados exactos y aproximados . . . . . . . . . . . 27

4.3. Algunas funciones matemáticas . . . . . . . . . . . . . 30

4.4. Cálculos con precisión arbitraria . . . . . . . . . . . . 33

4.5. Números complejos . . . . . . . . . . . . . . . . . . . . 35

5. Generación de cálculos 37

5.1. Uso de entradas y salidas previas . . . . . . . . . . . . 37

5.2. De�nición de variables . . . . . . . . . . . . . . . . . . 39

5.3. Secuencia de operaciones . . . . . . . . . . . . . . . . . 42

5.4. Impresión de expresiones sin evaluar . . . . . . . . . . 44

6. Cálculos algebraicos 47

6.1. Cálculo simbólico . . . . . . . . . . . . . . . . . . . . . 47

6.2. Valores para símbolos . . . . . . . . . . . . . . . . . . 50

6.3. Transformación de expresiones algebraicas . . . . . . . 54

6.4. Simpli�cación de expresiones algebraicas . . . . . . . . 56

6.5. Expresiones puestas en diferentes formas . . . . . . . . 58

6.6. Simpli�cación con asunciones . . . . . . . . . . . . . . 64

6.7. Selección de partes de expresiones algebraicas . . . . . 66

7. Matemáticas simbólicas 68

7.1. Límites . . . . . . . . . . . . . . . . . . . . . . . . . . 68

7.2. Diferenciación . . . . . . . . . . . . . . . . . . . . . . . 70

7.3. Integración . . . . . . . . . . . . . . . . . . . . . . . . 73

7.4. Sumas y Productos . . . . . . . . . . . . . . . . . . . . 78

7.5. Operadores relacionales y lógicos . . . . . . . . . . . . 81

7.6. Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . 84

Page 9: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Índice vii

7.7. Solución de Ecuaciones Algebraicas . . . . . . . . . . . 85

7.8. Solución de Ecuaciones Trascendentales . . . . . . . . 87

7.9. Sistemas de Inecuaciones Lineales . . . . . . . . . . . . 92

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

7.11. Ecuaciones diferenciales ordinarias . . . . . . . . . . . 95

7.12. Sistemas de ecuaciones diferenciales ordinarias lineales 97

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

7.14. Transformada de Laplace . . . . . . . . . . . . . . . . 102

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

8. Matemáticas numéricas 105

8.1. Solución numérica de ecuaciones . . . . . . . . . . . . 105

8.2. Integrales numéricas . . . . . . . . . . . . . . . . . . . 107

9. Funciones y programas 109

9.1. De�nición de funciones . . . . . . . . . . . . . . . . . . 109

9.2. Reglas de transformación para funciones . . . . . . . . 118

9.3. Funciones de�nidas a partir de expresiones . . . . . . . 121

9.4. Funciones de�nidas a trozos . . . . . . . . . . . . . . . 124

10.Listas 129

10.1. Juntar objetos . . . . . . . . . . . . . . . . . . . . . . 129

10.2. Generación de listas . . . . . . . . . . . . . . . . . . . 130

10.3. Elección de elementos de una lista . . . . . . . . . . . 133

10.4. Prueba y búsqueda de elementos de una lista . . . . . 136

10.5. Combinación de listas . . . . . . . . . . . . . . . . . . 137

10.6. Reordenamiento de listas . . . . . . . . . . . . . . . . 138

10.7. Agregar y quitar elementos de una lista . . . . . . . . 140

10.8. Reorganización de listas . . . . . . . . . . . . . . . . . 141

10.9. Funciones adicionales para listas . . . . . . . . . . . . 142

Page 10: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

viii Índice

11.Arrays 144

12.Matrices 147

12.1. Generación de Matrices . . . . . . . . . . . . . . . . . 147

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

12.3. Operaciones matriciales . . . . . . . . . . . . . . . . . 151

12.4. Funciones adicionales para matrices . . . . . . . . . . 155

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

12.6. Autovalores y autovectores . . . . . . . . . . . . . . . 159

13.Conjuntos 161

13.1. Generación de conjuntos . . . . . . . . . . . . . . . . . 161

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

13.3. Elección de elementos de un conjunto . . . . . . . . . 164

13.4. Prueba y búsqueda de elementos de un conjunto . . . 165

13.5. Agregar y quitar elementos de un conjunto . . . . . . 167

13.6. Reorganización de conjuntos . . . . . . . . . . . . . . . 168

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

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

14.Grá�cos 173

14.1. Grá�cos básicos . . . . . . . . . . . . . . . . . . . . . . 174

14.2. Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . 176

14.3. Grá�cos de puntos y líneas . . . . . . . . . . . . . . . 180

14.4. Grá�cos paramétricos y polares . . . . . . . . . . . . . 183

14.5. Combinación de grá�cos . . . . . . . . . . . . . . . . . 185

14.6. Grá�cos de super�cies tridimensionales . . . . . . . . . 185

14.7. Grá�cos de densidad y contornos . . . . . . . . . . . . 190

14.8. Grá�cos animados . . . . . . . . . . . . . . . . . . . . 191

Page 11: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Índice ix

15.Utilidades de los menúes de wxMaxima 194

15.1. El menú Archivo . . . . . . . . . . . . . . . . . . . . . 194

15.2. El menú Editar . . . . . . . . . . . . . . . . . . . . . . 197

15.3. El menú Celda . . . . . . . . . . . . . . . . . . . . . . 200

15.4. El menú Maxima . . . . . . . . . . . . . . . . . . . . 203

15.5. El menú Ecuaciones . . . . . . . . . . . . . . . . . . 204

15.6. El menú Álgebra . . . . . . . . . . . . . . . . . . . . 207

15.7. El menú Análisis . . . . . . . . . . . . . . . . . . . . . 211

15.8. El menú Simplificar . . . . . . . . . . . . . . . . . . . 214

15.9. El menú Gráficos . . . . . . . . . . . . . . . . . . . . 216

15.10.El menú Numérico . . . . . . . . . . . . . . . . . . . 219

15.11.El menú Ayuda . . . . . . . . . . . . . . . . . . . . . 220

16.Grá�cos con draw 222

16.1. Objetos grá�cos bidimensionales . . . . . . . . . . . . 223

16.2. Opciones para los objetos grá�cos bidimensionales . . 234

16.2.1. Opciones locales . . . . . . . . . . . . . . . . . 234

16.2.2. Opciones locales genéricas . . . . . . . . . . . . 237

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

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

16.3. Objetos grá�cos tridimensionales . . . . . . . . . . . . 246

16.4. Opciones para objetos grá�cos tridimensionales . . . . 254

16.4.1. Opciones locales . . . . . . . . . . . . . . . . . 254

16.4.2. Opciones locales genéricas . . . . . . . . . . . . 255

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

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

16.5. Fijación de valores para opciones . . . . . . . . . . . . 260

16.6. Grá�cos múltiples . . . . . . . . . . . . . . . . . . . . 261

16.7. Grá�cos animados . . . . . . . . . . . . . . . . . . . . 263

Page 12: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

x Índice

17.Campos de direcciones con plotdf 267

18.Archivos y operaciones externas 271

18.1. Generación de expresiones y archivos TEX . . . . . . . 271

18.2. Generación de archivos HTML . . . . . . . . . . . . . 274

18.3. Generación de expresiones Lisp y Fortran . . . . . . . 275

19.Programación con Maxima 276

19.1. Operadores relacionales y lógicos . . . . . . . . . . . . 276

19.2. Operadores y argumentos . . . . . . . . . . . . . . . . 279

19.3. Programación funcional . . . . . . . . . . . . . . . . . 282

19.4. Implementación del paquete: ejemplo . . . . . . . . . 284

Page 13: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Prólogo

Este manual da una introducción al Software Libre Maxima v5.25.1,presentándolo como un potente Sistema de Álgebra Computacional(Computer Algebra System, o CAS) cuyo objeto es la realización decálculos matemáticos, tanto simbólicos como numéricos; además deser expandible, pues posee un lenguaje de programación propio.

Las razones para apostar por el uso de Software Libre puedendeducirse de las cuatro libertades asociadas a este tipo de Software:libertad de ejecutarlo, para cualquier propósito; libertad de estudiar

cómo trabaja, y cambiarlo a voluntad de quien lo usa; libertad de re-

distribuir copias para ayudar al prójimo; y libertad de mejorarlo y

publicar sus mejoras, y versiones modi�cadas en general, para que se

bene�cie toda la comunidad.

De hecho, las libertades asociadas a todo Software Libre y, enparticular, al CASMaxima hacen de éste una formidable herramientapedagógica accesible a todos los presupuestos, tanto institucionalescomo individuales. No obstante, somos sinceros en señalar que noposee toda la versatilidad de sus símiles comerciales; pero el hechoque sea gratuito minimiza tal carencia. Hay que señalar, también,que cualquier actualización de un Software Libre puede obtenerse sinobstáculo alguno y así es posible contar inmediatamente con la últimaversión del mismo. Algo que no sucede con el Software Comercial, amenos que se tenga disponibilidad inmediata de dinero para pagar laactualización.

La idea de elaborar este manual surge de la necesidad de contar conbibliografía propia acerca de un CAS Libre para trabajar con alumnosde un curso de pregrado, los cuales ya estaban familiarizados con el usode un CAS Comercial. La experiencia ha sido bastante satisfactoria y

xi

Page 14: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

xii Prólogo

quedan en el tintero los borradores para la futura elaboración de unlibro en el que se plasmen los resultados obtenidos en tal curso.

Este manual se compone de diecinueve capítulos en los cuales sedescriben resumidamente las principales características de las funcio-nes incorporadas en el núcleo de Maxima, así como de algunos paque-tes que son de gran utilidad. Además, en el último capítulo se dan loslineamientos generales para la elaboración de paquetes de funciones.Esto con la �nalidad que el usuario obtenga el máximo provecho enel uso de Maxima.

Las nuevas herramientas incluidas en las últimas versiones de Ma-

xima, así como la constante revisión y mejora de los aportes hechospor diferentes usuarios ha motivado esta segunda edición del manual.

R. Ipanaqué

Piura, Perú

Page 15: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO1

Obtención de Maxima

Maxima puede funcionar en distintos sistemas operativos, entre ellosdiversas variantes de Windows y de GNU/Linux. En este capítulo setratará acerca de la descarga e instalación de Maxima en el sistemaoperativo Windows (95 o posterior). El lector interesado en utilizarMaxima en alguna variante de GNU/Linux, puede acceder a la secciónDownload de la web de Maxima y seguir las instrucciones que en ellase indican.

1.1 Descarga

Maxima se descarga gratuitamente desde la página de sourceforgeque alberga a una gran cantidad de instaladores de softwares de có-digo abierto1. Debemos destacar que por el hecho de ser gratuito norequiere de ningún password que siempre está asociado con el softwarecomercial (también llamado software propietario o más acertadamen-te software privativo).

La dirección especí�ca donde esta alojado Maxima es la siguiente:

http://sourceforge.net/projects/maxima/files

1Código abierto (en inglés open source) es el término con el que se conoce alsoftware distribuido y desarrollado libremente. El código abierto tiene un puntode vista más orientado a los bene�cios prácticos de compartir el código que a lascuestiones morales y/o �losó�cas las cuales destacan en el llamado software libre.

1

Page 16: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

2 Cap. 1. Obtención de Maxima

Figura 1.1: Porción de la página de descarga de Maxima-5.25.1.exe.El botón señalado permite la descarga directa deMaxima

para Windows.

desde donde puede descargarse el archivo Maxima-5.25.1.exe que esel instalador de Maxima para Windows. Este instalador ocupa 29.0MB de espacio en memoria.

Una vez descargado el instalador se verá un icono, como el que seaprecia en la �gura 1.2, en la carpeta donde éste se haya descargado.

1.2 Instalación

Después de la descarga se procede a instalar Maxima, lo cual debehacerse siguiendo los pasos que se detallan a continuación.

Figura 1.2: Icono del instalador de Maxima-5.25.1.exe.

1. Hacer doble clic sobre el icono del instalador.

Page 17: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 1.2. Instalación 3

2. Si aparece un cuadro como el de la �gura 1.3, hacer clic sobreel botón

�� ��Ejecutar .

Figura 1.3: Cuadro de veri�cación.

3. Seleccionar el idioma Español y hacer clic sobre el botón�� ��Aceptar

(�g. 1.4).

Figura 1.4: Cuadro para seleccionar el idioma.

4. Hacer clic sobre el botón�� ��Siguiente del cuadro Bienvenido

al asistente de instalación de Maxima (�g. 1.5).

5. Seleccionar la opción Acepto el acuerdo del cuadro Acuer-do de Licencia. Luego hacer clic en el botón

�� ��Siguiente delmismo cuadro (�g. 1.6).

6. Hacer clic en el botón�� ��Siguiente del cuadro Información (�g.

1.7).

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

Page 18: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

4 Cap. 1. Obtención de Maxima

Figura 1.5: Cuadro Bienvenido al asistente de instalación de Ma-xima.

Figura 1.6: Cuadro Acuerdo de Licencia.

hacer clic en el botón�� ��Siguiente del cuadro Seleccione la

Carpeta de Destino (�g. 1.8).

8. En el cuadro Seleccione los Componentes desmarcar lascasillas Portugués y Portugués Brasileño ya que sólo utiliza-remos el idioma Español. Esto permite, a su vez, el ahorro dememoria (�g. 1.9).

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

Page 19: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 1.2. Instalación 5

Figura 1.7: Cuadro Información.

Figura 1.8: Cuadro Seleccione la Carpeta de Destino.

car el icono de acceso a Maxima (generalmente se deja la car-peta que aparece por defecto) y luego hacer clic en el botón�� ��Siguiente del cuadro Seleccione la Carpeta del Menú Ini-cio (�g. 1.10).

10. Hacer clic en el botón�� ��Siguiente del cuadro seleccione las

Tareas Adicionales para que el asistente cree un icono de ac-ceso directo a Maxima en el escritorio (�g. 1.11).

11. Hacer clic en el botón�� ��Instalar del cuadro Listo para Instalar

Page 20: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

6 Cap. 1. Obtención de Maxima

Figura 1.9: Cuadro Seleccione los Componentes.

Figura 1.10: Cuadro Seleccione la Carpeta del Menú Inicio.

(�g. 1.12).

12. Hacer clic en el botón�� ��Siguiente del cuadro Información (�g.

1.13).

13. Por último, hacer clic en el botón�� ��Finalizar del cuadro Com-

pletando la Instalación de Maxima (�g. 1.14).

Después de seguir el procedimiento anterior deben haberse insta-lado: el núcleo de Maxima que es el responsable de todos los cálculos

Page 21: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 1.2. Instalación 7

Figura 1.11: Cuadro Seleccione las Tareas Adicionales.

Figura 1.12: Cuadro Listo para Instalar.

y permite una interfaz de texto, el entorno grá�co wxMaxima que per-mite una interfaz grá�ca (o interfaz de �cuaderno�) bastante amigable,el entorno grá�co XMaxima que también permite una interfaz grá-�ca (aunque menos amigable que wxMaxima) y una aplicación parausuarios de habla hispana. Además, debe haberse creado automáti-camente, en el escritorio de su ordenador (computadora), el icono deacceso directo al entorno grá�co wxMaxima (�g. 1.15).

Page 22: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

8 Cap. 1. Obtención de Maxima

Figura 1.13: Cuadro Información.

Figura 1.14: Cuadro Completando la Instalación de Maxima.

Figura 1.15: Icono de acceso directo a wxMaxima.

Page 23: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO2

Funcionamiento de Maxima

2.1 Interfaz de cuaderno

utilice un icono o elmenú de Inicio

formas grá�cas de inicializar Maxima

�nalizar texto con�� ��Shift�� ��Enter

entrada para Maxima

elegir el ítem salida delmenú

salir de Maxima

Funcionamiento de Maxima en una interfaz de cuaderno.

El acceso a una interfaz de �cuaderno� es factible en un ordenadorusado vía una interfaz puramente grá�ca (como Windows). En unainterfaz de cuaderno, es posible interactuar con Maxima, a travésde wxMaxima, creando documentos interactivos. Para ello el usuariodebe hacer doble clic en el icono de inicio de wxMaxima, despuésde lo cual se desplegará un cuaderno en blanco. En este cuaderno elusuario digita la entrada (input), luego presiona (en simultáneo) lasteclas

�� ��Shift�� ��Enter y Maxima añade punto y coma al �nal de tal

entrada, etiqueta la entrada con ( %in) , la procesa y devuelve lacorrespondiente salida (output) etiquetada con ( %on) .

9

Page 24: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

10 Cap. 2. Funcionamiento de Maxima

Maxima

El usuario digita 1+1, luego �naliza su entrada con�� ��Shift

�� ��Enter . Maxima añade

punto y coma al �nal de ésta, la etiqueta con ( %i1) , la procesa e inmediatamente

después devuelve la respectiva salida etiquetada con ( %o1) .

( %i1) 1+1;

( %o1) 2

Debe recordarse que los cuadernos corresponden al entorno grá-�co wxMaxima. El núcleo de Maxima es el que realiza realmente loscálculos (sección 3.1).

Para salir de wxMaxima, el usuario elige el ítem salida del respec-tivo menú en la interfaz de cuaderno.

2.2 Interfaz basada en texto

maxima comando del sistema operativo parainicializar Maxima

�nalizar texto con �;� y�� ��Enterentrada para Maxima

quit(); salir de Maxima

Funcionamiento de Maxima en una interfaz basada en texto.

Con una interfaz basada en texto, el usuario interactúa con suordenador digitando texto mediante el teclado.

Para inicializar Maxima en una interfaz basada en texto, se digitael comando maxima en el prompt del sistema operativo. Cuando Ma-

xima ha inicializado, imprimirá el prompt ( %i1), esto signi�ca queesta lista para que el usuario haga su entrada. Éste puede entoncesdigitar su entrada, terminándola con �;� y presionando luego

�� ��Enter .

Maxima procesa la entrada y genera un resultado, el mismo queetiquetará con ( %o1).

Obsérvese que la mayor parte de los diálogos dados en el libromuestran salidas en la forma que se obtendrían con una interfaz de

Page 25: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 2.2. Interfaz basada en texto 11

cuaderno de Maxima; la salida con una interfaz basada en texto lucesimilar, pero carece de características tales como caracteres especialesy cambio de tamaño de fuente.

Para salir de Maxima, debe digitarse Quit(); en el prompt de laentrada.

Page 26: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO3

Uso del sistema Maxima

3.1 La estructura de Maxima

Maxima núcleo responsable de todos los cálcu-los

wxMaxima interfaz de cuaderno que se ocupa deinteractuar con el usuario (muy ami-gable)

XMaxima interfaz grá�ca que se ocupa de inter-actuar con el usuario (menos amigableque wxMaxima)

Partes básicas del Sistema Maxima.

Maxima es un potente motor de cálculo simbólico aunque, en suorigen, no destacaba por tener una interfaz grá�ca más amigable paralos usuarios que la simple consola de texto. Con el tiempo este hechoha ido cambiando y han aparecido distintos entornos de ejecución queintentan facilitar la interacción con los usuarios. Entre ellos, estánXMaxima y wxMaxima.

XMaxima es la primera interfaz grá�ca que fue desarrollada, esmantenida �o�cialmente� por el equipo de desarrollo de Maxima. EnWindows se instala automáticamente. Presenta algunas ventajas co-mo la integración en formato HTML de manuales de ayuda. Sin em-

12

Page 27: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.1. La estructura de Maxima 13

Figura 3.1: Un cuaderno que mezcla texto, grá�cos con entradas ysalidas de Maxima.

bargo, también tiene algunas desventajas con respecto a otras inter-faces más modernas.

wxMaxima1, basada en la biblioteca grá�ca wxwidgets, graciasa la cual existen versiones nativas tanto para sistemas operativosGNU/Linux como para Windows. Integra elementos especí�cos pa-ra la navegación de la ayuda, introducción de matrices, creación degrá�cas, cálculo de límites, derivadas o integrales, etc. Actualmentetambién se instala automáticamente en Windows.

1wxMaxima fue desarrollada por Andrej Vodopivec y está disponible enhttp://wxmaxima.sourceforge.net

Page 28: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

14 Cap. 3. Uso del sistema Maxima

Figura 3.2: Un diálogo con Maxima usando una interfaz basada entexto.

interfaz de cuaderno conwxMaxima

documentos interactivos

interfaz basada en texto texto desde el teclado

Tipos comunes de interfaz con Maxima.

En algunos casos, puede que el usuario no necesite usar la interfazde cuaderno, y que desee en cambio interactuar directamente con elnúcleo de Maxima. Es posible hacer esto usando la interfaz basada entexto, en la cual se digita el texto en el teclado y éste va directamenteal núcleo.

3.2 Cuadernos como documentos

Los cuadernos de wxMaxima permiten crear documentos que puedenverse interactivamente en la pantalla o imprimirse en papel. En los

Page 29: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.2. Cuadernos como documentos 15

Figura 3.3: Un cuaderno de wxMaxima como documento.

cuadernos extensos, es común tener los capítulos, secciones etc., repre-sentados cada uno en grupos de celdas. La extensión de estos gruposde celdas es indicada por el botón asociado a la celda dominante quees una celda de estilo título, sección o subsección.

Un grupo de celdas puede estar abierto o cerrado. Cuando estáabierto se puede ver todas sus celdas explícitamente. Pero cuando estácerrado, sólo puede verse la celda que encabeza el grupo de celdas.

Los cuadernos extensos son a menudo distribuidos con muchosgrupos de celdas cerradas, para que cuando sean vistos por primeravez el cuaderno muestre solamente una lista de su contenido. Es posi-ble abrir las partes en las que el usuario esté interesado haciendo clicsobre el botón apropiado.

A cada celda dentro de un cuaderno se le asigna un estilo enparticular que indica su rol dentro del cuaderno.

La interfaz de wxMaxima provee menúes y métodos abreviadosde teclas para insertar celdas con diferentes estilos todos ellos estándisponibles en el último bloque del menú Cell.

Así, por ejemplo, el material entendido como entrada para serejecutado por el núcleo deMaxima está en el estilo de Input (entrada),

Page 30: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

16 Cap. 3. Uso del sistema Maxima

Figura 3.4: Haciendo clic sobre el botón que corresponde a la cel-da dominante se cierra el grupo, dejando sólo la primeracelda visible.

Figura 3.5: Cuando el grupo está cerrado, el botón que le correspondeaparece relleno en color negro. Haciendo clic sobre estebotón se abre nuevamente el grupo.

Figura 3.6: El recuadro muestra los menúes y métodos abreviados deteclas para insertar celdas con diferentes estilos.

Page 31: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.3. Con�guración de opciones y estilos 17

Figura 3.7: Esto muestra celdas en diferentes estilos. Los estilos nosólo de�nen el formato del contenido de las celdas, sinoque también su ubicación y espaciado.

Figura 3.8: Primer paso para con�gurar las opciones y estilos.

mientras que el que se entiende para ser leído como solamente de textoestá en estilo Text (texto).

3.3 Con�guración de opciones y estilos

Como se vio en la sección 3.2 los cuadernos pueden editarse a manerade documentos. wxMaxima incorpora una con�guración prede�nidapara los estilos de los títulos, secciones, etc. Sin embargo, es posiblecambiar algunos aspectos de dicha con�guración haciendo clic en laopción Preferencias del menú Editar.

Después de hacer clic en la opción Preferencias se desplega laventana Configuración de wxMaxima que incorpora dos pestañas:Opciones y Estilo.

Page 32: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

18 Cap. 3. Uso del sistema Maxima

Figura 3.9: Activando o desactivando las casillas de veri�cación secambia la con�guración de las opciones.

Cuadro 3.1: Valores asignados en la con�guración de Fuentes

Fuentes Tipo

Fuente predeterminada Courier New (12)Fuente matemática Courier New (12)

Por ejemplo, cuando está activa la casilla de veri�cación de la op-ción Hacer coincidir los paréntesis en los controles de texto (dela pestaña Opciones), wxMaxima cierra automáticamente cualquierparéntesis que se abra en una celda de estilo Input. Al desactivar estacasilla, y hacer clic en

�� ��Aceptar , wxMaxima no volverá a cerrar au-tomáticamente ningún paréntesis sino que esperará a que el usuariolo haga.

En la pestaña Estilo se presenta una lista de todos los estilos quepueden con�gurarse a gusto del usuario y la forma de hacerlo es bas-tante intuitiva.

Por ejemplo, con�gurando los estilos con los valores indicados enlos cuadros 3.1 y 3.2 se obtienen cuadernos con un aspecto elegante.

Page 33: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.3. Con�guración de opciones y estilos 19

Cuadro 3.2: Valores asignados en la con�guración de Estilos

Estilos Color Fuente Aspecto Tam.

Nombre de funciones rgb(0,0,0) Courier New Gruesa, 12Itálica

Celda de texto rgb(0,0,0) Tahoma Normal 12Celda de subsección rgb(188,73,18) Tahoma Gruesa 16Celda de sección rgb(188,73,18) Tahoma Gruesa 18Celda de título rgb(54,95,145) Tahoma Gruesa 24Fondo de celda rgb(252,250,245)

de textoFondo rgb(252,250,245)

Figura 3.10: Un cuaderno de wxMaxima como documento, despuésde haber editado la con�guración de estilo.

Page 34: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

20 Cap. 3. Uso del sistema Maxima

Figura 3.11: Un ejemplo de búsqueda de información básica sobreuna función en el Índice de la Ayuda de Maxima

3.4 Búsqueda de ayuda

Todas las funciones incorporadas en Maxima están descritas en elmanual en línea del usuario, el cual puede ser consultado en diferentesformas. La más usada es desde el menú Ayuda, de la barra de menúes,que da acceso a la opción Ayuda de Maxima la cual sirve como unpunto de entrada a la gran cantidad de documentación en línea paraMaxima.

También es factible buscar ayuda desde un cuaderno de trabajo.Para ello puede utilizarse la función describe2 o también el símboloespecial ?.

2describe no evalúa su argumento. La función describe devuelve true si en-cuentra la documentación solicitada y false en caso contrario.

Page 35: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.4. Búsqueda de ayuda 21

describe(string) encuentra el elemento, si existe, cuyotítulo coincide exactamente con string

(ignorando la diferencia entre mayús-culas y minúsculas)

describe(string,exact) equivale a describe(string)

describe(string,inexact) encuentra todos los elementos docu-mentados que contengan string en sustítulos

Sintaxis de la función describe, la cual permite recibir información de las funcionesde Maxima.

?name equivale a describe("name")

??name equivale adescribe("name",inexact)

Otras formas de recibir información.

Maxima

Esta sentencia da información de la función incorporada max.

( %i1) describe("max");- -Función: max(<x_1>,. . . ,<x_n>)

Devuelve un valor simpli�cado de la mayor delas expresiones desde <x_1> hasta <x_n>. Si`get(trylevel,maxmin)' es 2 o más, `max' aplica la sim-pli�cación `max(e,e)�>|e|'. Si `get(trylevel,maxmin)' es3 o más, `max' intenta eliminar las expresiones que es-tén entre dos de los argumentos dados; por ejemplo,`max(x,2*x,3*x)�>max(x,3*x)'. Para asignar el valor 2a `trylevel' se puede hacer `put(trylevel,2,maxmin)'.

There are also some inexact matches for `max'.

Try `?? max' to see them.

( %o1) true

Page 36: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

22 Cap. 3. Uso del sistema Maxima

Maxima

Esta sentencia encuentra todos los elementos documentados que contienen "plus"

en sus títulos. No devuelve true o false hasta que el usuario seleccione las op-

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

( %i2) describe("plus",inexact);0: doscmxplus (Funciones y variables para las matricesy el álgebra lineal).1: poisplus (Series de Poisson)2: region_boundaries_plus (Funciones y variables paraworldmap)3: trigexpandplus (Funciones y variables para trigono-metría)

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

Maxima

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

( %i3) describe("plus",inexact);0: doscmxplus (Funciones y variables para las matricesy el álgebra lineal).1: poisplus (Series de Poisson)2: region_boundaries_plus (Funciones y variables paraworldmap)3: trigexpandplus (Funciones y variables para trigono-metría)

Enter space-separated numbers, `all' or `none': 0 2:

- -Variable opcional: doscmxplus

Valor por defecto: `false'.Cuando `doscmxplus' vale `true', las operaciones entre escalaresy matrices dan como resultado una matriz.

- -Función : region_boundaries_plus(<x1>,<y1>,<x2>,<y2>)

Page 37: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.5. Reinicio 23

Detecta los segmentos poligonales almacenados en la va-riable global `boundaries_array' con al menos un vér-tice dentro del rectángulo de�nido por los extremos(<x1>,<y1>) -superior izquierdo- y (<x2>,<y2>) -inferior derecho-.Ejemplo.

(%i1) load(worldmap)$;(%i2) region_boundaries(10.4,41.5,20.7,35.4);(%o2) [1846, 1863, 1864, 1881, 1888, 1894](%i3) draw2d(geomap(%))$

( %o3) true

3.5 Reinicio

La forma brusca de reiniciar Maxima es saliendo de wxMaxima. Noobstante, en muchos casos resulta útil reiniciar Maxima sin salir dewxMaxima. Para reiniciar Maxima sin salir de wxMaxima se elige laopción Reiniciar Maxima del menú Maxima.

Figura 3.12: Reiniciando Maxima en una interfaz de cuaderno.

3.6 Comentarios

Los comentarios son toda una serie de caracteres que no afectan loscálculos. En Maxima los comentarios se escriben entre las marcas /∗y ∗/.

Page 38: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

24 Cap. 3. Uso del sistema Maxima

/∗comentario/∗ con esta sintaxis comentario es inter-pretado como un comentario

Escribiendo comentarios.

Maxima

Aquí se muestra un cálculo y un comentario.

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

( %o1) 9

3.7 Paquetes en Maxima

Una de las características más importantes de Maxima es que es unsistema extensible, hay una cierta cantidad de funciones incorporadasen Maxima pero, usando el lenguaje de programación de Maxima,siempre es posible añadir más funciones.

Para muchos tipos de cálculos, lo incorporado en la versión están-dar de Maxima será su�ciente. Sin embargo, si se trabaja en particu-lar en un área especializada, es posible encontrarse en la necesidad deutilizar ciertas funciones no incorporadas en Maxima.

En tales casos, podría ser factible encontrar (o elaborar) un pac-kage (paquete) de funciones de Maxima que contenga las funcionesque sean necesarias.

load(�paquete�) lee un paquete de Maxima

Leyendo paquetes de Maxima.

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

Maxima

Con estas sentencias se está inicializando y utilizando una función de un paquete

en particular de Maxima.

( %i1) load(�simplex�)$

Page 39: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 3.8. Advertencias y mensajes 25

( %i2) minimize_lp(x+y,[3*x+2*y>2,x+4*y>3]);

( %o2) [ 910 , [y = 7

10 , x = 15 ]]

El hecho de que Maxima pueda extenderse usando paquetes signi-�ca que las posibilidades de Maxima son ilimitadas. En lo que al usoconcierne, no hay en realidad ninguna diferencia entre las funcionesde�nidas en paquetes y las funciones incorporadas en Maxima.

3.8 Advertencias y mensajes

Maxima �sigue� el trabajo del usuario silenciosamente, dando salidasolamente cuando éste lo requiere. Sin embargo, si Maxima se perca-ta de algo que se pretende hacer y que de�nitivamente no entiende,imprimirá un mensaje de advertencia.

Maxima

La función para calcular la raíz cuadrada debe tener solamente un argumento.

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

número de argumentos.

( %i1) sqrt(4,5);

sqrt: wrong number of arguments. - - an error. To debugthis try: debugmode(true);

3.9 Interrupción de cálculos

Probablemente habrá veces en que el usuario desee detener Maxima

en medio de un cálculo. Tal vez él se da cuenta que pidió a Maxima

hacer un cálculo incorrecto. O quizás el cálculo tarda demasiado, yquiere saber que es lo que pasa. La forma en que se interrumpe uncálculo en Maxima depende de qué clase de interfaz está utilizando.

Clic en el botón interfaz de cuaderno�� ��Ctrl +�� ��C interfaz basada en texto

Formas de interrumpir cálculos en Maxima.

Page 40: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO4

Cálculos numéricos

4.1 Aritmética

Los cálculos aritméticos se realizan con números literales (enteros,racionales, decimales ordinarios y decimales grandes). Excepto en elcaso de la exponenciación, todas las operaciones aritméticas con nú-meros dan lugar a resultados en forma de números.

El usuario puede hacer aritmética con Maxima tal y como lo haríacon una calculadora

Maxima

Aquí tenemos la suma de dos números.

( %i1) 5.6+3.7;

( %o1) 9.3

Maxima

Con ∗ indicamos el producto de dos números.

( %i2) 5.6*3.7;

( %o2) 20.72

Maxima

Es posible digitar operaciones aritméticas haciendo uso de los paréntesis.

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

26

Page 41: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 4.2. Resultados exactos y aproximados 27

( %o3) 73

x^y ó x∗∗y potencia

−x menos

x/y división

x∗y∗z producto

x+y+z suma

Operaciones aritméticas en Maxima.

Las operaciones aritméticas enMaxima se agrupan de acuerdo conlas convenciones estándares de la matemática. Como es usual, 2+3/7,por ejemplo, signi�ca 2+(3/7), y no (2+3)/7. El usuario siempre pue-de controlar la forma de agrupar explícitamente usando los paréntesis.

4.2 Resultados exactos y aproximados

Una calculadora electrónica hace todos sus cálculos con una preci-sión determinada, digamos de diez dígitos decimales. Con Maxima,en cambio, es posible obtener resultados exactos.

Maxima

Maxima da un resultado exacto para 2300.

( %i1) 2^300;

( %o1) 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376

El usuario puede pedir aMaxima que devuelva un resultado aproxi-mado, tal como lo daría una calculadora, para ello puede usar la fun-ción float o la variable numer o una combinación de ambos.

Maxima

Esto da un resultado numérico aproximado.

( %i2) 2^300,float;

( %o2) 2.0370359763344861 1090

Page 42: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

28 Cap. 4. Cálculos numéricos

float(expr) da un valor numérico aproximado paraciertas expr

expr , float equivale a float(expr)

expr , numer da un valor numérico aproximado paraciertas expr

float(expr), numer da un valor numérico aproximado pa-ra cualquier expr que no sea una cons-tante

Obteniendo aproximaciones numéricas.

Maxima

Esta forma también da un resultado numérico aproximado.

( %i3) float(2^300);

( %o3) 2.0370359763344861 1090

Maxima

Para el cálculo previo la constante numer no es útil.

( %i4) 2^300,numer;

( %o4) 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376

Maxima

Maxima puede dar resultados en términos de números racionales.

( %i5) 1/3+2/7;

( %o5) 1321

Maxima

En este caso, tanto con float como con numer, se obtiene un resultado numérico

aproximado.

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

( %o6) 0.61904761904762

Page 43: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 4.2. Resultados exactos y aproximados 29

( %i7) 1/3+2/7,numer;

( %o7) 0.61904761904762

Cuando el usuario digita un entero como 7, Maxima asume que esexacto. Si digita un número como 4.5, con un punto decimal explícito,Maxima asume que desea efectuar cálculo numérico aproximado.

Maxima

Esto es tomado como un número racional exacto, y es llevado a una fracción

irreducible.

( %i8) 26/78;

( %o8) 13

Maxima

Cuando el usuario digita un número con un punto decimal explícito, Maxima

produce un resultado numérico aproximado.

( %i9) 26.7/78;

( %o9) 0.34230769230769

Maxima

Aquí, la presencia del punto decimal seguido del cero hace que Maxima dé un

resultado numérico aproximado.

( %i10) 26.0/78;

( %o10) 0.33333333333333

Maxima

Cuando cualquier número en una expresión aritmética es digitado con un punto

decimal seguido del cero, el usuario obtiene un resultado numérico aproximado.

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

( %o11) 4.490384615384615

Page 44: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

30 Cap. 4. Cálculos numéricos

4.3 Algunas funciones matemáticas

Maxima incluye una gran colección de funciones matemáticas. A con-tinuación se mencionan las más comunes.

sqrt(x ) raíz cuadrada (√x)

exp(x ) exponencial (ex)

log(x ) logaritmo neperiano (loge x)

sin(x ), cos(x ), tan(x ),cot(x ), sec(x ), csc(x )

funciones trigonométricas (con argu-mentos en radianes)

asin(x ), acos(x ),atan(x ), acot(x ),asec(x ), acsc(x )

funciones trigonométricas inversas

n! factorial de n (producto de los enteros1, 2, . . . , n)

n!! 1×3×. . .×n (n impar) ó 2×4×. . .×n(n par)

abs(x ) valor absoluto

round(x ) redondeo

mod(n,m) n módulo m (resto de la división de nentre m)

floor(x ) mayor entero menor o igual que x

ceiling(x ) menor entero mayor o igual que x

random(x ) número seudo aleatorio r, tal que 0 ≤r < x, si x ∈ N ó 0 < r < x, si x ∈ R+

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

máximo, mínimo de x,y,. . .

ifactor(n) factores primos de n

Algunas de las funciones matemáticas más comunes.

• Los argumentos de todas las funciones en Maxima se colocanentre paréntesis.

• Los nombres de las funciones incorporadas en Maxima empie-zan con letra minúscula.

Dos puntos importantes acerca de funciones en Maxima.

Page 45: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 4.3. Algunas funciones matemáticas 31

Maxima

Esto da loge 15.7.

( %i1) log(15.7);

( %o1) 2.753660712354262

Maxima

Maxima no incluye una función para el logaritmo de base 10 u otras bases. Para

salvar esta di�cultad el usuario puede hacer uso de la fórmula logb x =loge xloge b

. Así,

por ejemplo, lo siguiente devuelve un resultado numérico para log2 1024.

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

( %o2) 10.0

Maxima

Esto devuelve√64 como un número exacto.

( %i3) sqrt(64);

( %o3) 8

Maxima

Esto da un valor numérico aproximado para√6.

( %i4) sqrt(6),numer;

( %o4) 2.449489742783178

Maxima

La presencia explícita de un punto decimal seguido de un cero le indica a Maxima

que dé un resultado numérico aproximado.

( %i5) sqrt(6.0);

( %o5) 2.449489742783178

Maxima

En este caso Maxima devuelve un número en forma simbólica exacta.

( %i6) sqrt(6);

Page 46: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

32 Cap. 4. Cálculos numéricos

( %o6)√

6

Maxima

Aquí tenemos un resultado entero exacto para 40× 39× . . .× 1.

( %i7) 40!;

( %o7) 815915283247897734345611269596115894272000000000

Maxima

Esto da un valor numérico aproximado del factorial.

( %i8) float(40!);

( %o8) 8.1591528324789768 1047

%e e ≈ 2.718281828459045

%i i=√−1

inf representa al in�nito real positivo

minf representa al in�nito real negativo

infinity representa al in�nito complejo

und representa un resultado inde�nido

%pi π ≈ 3.141592653589793

Algunas constantes matemáticas comunes.

Maxima

Este es el valor numérico de π2.

( %i9) %pi^2,numer;

( %o9) 9.869604401089358

Maxima

Esto devuelve el valor exacto para sen(π/2).

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

( %o10) 1

Page 47: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 4.4. Cálculos con precisión arbitraria 33

4.4 Cálculos con precisión arbitraria

Cuando el usuario utiliza float, numer o una combinación de ambospara obtener un resultado numérico, Maxima devuelve el resultadocon un número �jo de cifras signi�cativas. No obstante, es posibleindicar a Maxima las cifras signi�cativas con las que se desea operar.Esto permite obtener resultados numéricos en Maxima con cualquiergrado de precisión.

fpprec :n$ bfloat(expr)ó

fpprec :n$ expr , bfloat

valor numérico de expr calculado conn dígitos de precisión (el valor por de-fecto es 16)

Evaluación numérica con precisión arbitraria.

Maxima

Esto devuelve el valor numérico de π con un número �jo de cifras signi�cativas.

( %i1) float( %pi);

( %o1) 3.141592653589793

Maxima

Esto devuelve π con 50 dígitos.

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

( %o2) 3.1415926535897932384626433832795028841971693993751b0

Cabe mencionar que el símbolo de dolar que aparece después delnúmero que indica la cantidad de dígitos signi�cativos se utiliza, engeneral, para �nalizar una sentencia y, a diferencia del punto y coma,no permite que aparezca ninguna salida en pantalla (subsec. 5.3).

Al realizar cualquier tipo de cálculo numérico el usuario puedeintroducir pequeños errores de redondeo en sus resultados. Cuando seaumenta la precisión numérica estos errores se hacen más pequeños.Asegurarse que se obtiene la misma respuesta al aumentar la precisiónnumérica es a menudo una buena forma de veri�car los resultados.

Page 48: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

34 Cap. 4. Cálculos numéricos

Maxima

La cantidad eπ√163 esta bastante próxima a ser entera. Para veri�car que el

resultado no es un entero, el usuario tiene que usar la precisión numérica su�ciente.

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

( %o3) 2.625374126407687439999999999992500725972b17

El usuario que desee, por ejemplo, visualizar π con una precisión de200 cifras signi�cativas, o 21000 con el total de las cifras, utilizando lassentencias aquí descritas encontrará que la salida se muestra truncadaen la parte central, en donde aparece un número que indica la cantidadde dígitos faltantes.

Maxima

Esto devuelve una salida de π con 200 dígitos, la cual ha sido truncada. El dato

entre los corchetes indica que se han obviado 443 dígitos

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

( %o4) 3.1415926535897932384626433832[443digits]8857527248912279381830119491b0

Para obtener una salida completa se selecciona ascii como el algo-ritmo de salida matemática de la opción Cambiar pantalla 2D delmenú Maxima y luego se ejecutan las sentencias de ( %i4) .

Téngase presente que el algoritmo de salida matemática, previa-mente seleccionado (ascii), prevalecerá hasta que el usuario vuelva aseleccionar como algoritmo de salida matemática a xml.

Maxima

Después de cambiar el algoritmo de salida matemática se devuelve la salida π con

200 dígitos.

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

( %o5) 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930382b0

Page 49: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 4.5. Números complejos 35

Figura 4.1: Seleccionando ascii como el algoritmo de salida.

4.5 Números complejos

Es posible ingresar números complejos en Maxima con sólo incluir laconstante %i, igual a

√−1. Note que una i ordinaria signi�ca una

variable llamada i, pero no√−1.

x+%i∗y el número complejo x+ i y

realpart(z) parte real

imagpart(z) parte imaginaria

conjugate(z) complejo conjugado z∗ ó z

cabs(z) módulo de z

carg(z) el argumento ϕ en |z|eiϕ

Operaciones con números complejos.

Maxima

Esto devuelve como resultado el número imaginario 2i.

( %i1) sqrt(-4);

( %o1) 2 %i

Maxima

Esto devuelve la división de dos números complejos.

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

Page 50: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

36 Cap. 4. Cálculos numéricos

( %o2) −6 %i− 2

Maxima

Aquí tenemos el valor exacto de un exponencial complejo.

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

( %o3) %e11

%i sin (5) + %e11

cos (5)

Maxima

Aquí tenemos el valor numérico de un exponencial complejo.

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

( %o4) 16984.02989166794− 57414.76791532402 %i

Page 51: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO5

Generación de cálculos

5.1 Uso de entradas y salidas previas

Al realizar cálculos, muchas veces se necesita usar expresiones pre-viamente ingresadas u obtenidas. En Maxima, _ y% siempre hacenreferencia a la última expresión de entrada y salida, respectivamente.

_ la última expresión de entrada

% la última expresión de salida

%in la expresión de la entrada %in

%on la expresión de la salida %on

%th(i) la expresión de la i -ésima salida ante-rior

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

Para efectos didácticos, a partir de esta sección se supone un reini-cio de Maxima (sec. 3.5).

Maxima

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

( %i1) 5^3;

( %o1) 125

37

Page 52: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

38 Cap. 5. Generación de cálculos

Maxima

Esto agrega 6 a la expresión de la última salida.

( %i2) %+6;

( %o2) 131

Maxima

Esto utiliza las dos expresiones de las salidas previas.

( %i3) 5+%o1+%;

( %o3) 261

Maxima

Esto suma las expresiones de las salidas ( %o1) y ( %o3) .

( %i4) %o1+%o3;

( %o4) 386

Maxima

Aquí se eleva al cuadrado la expresión de la salida ( %o2) .

( %i5) %o2^2;

( %o5) 17161

Si se utiliza una interfaz basada en texto en Maxima, entonces laslíneas sucesivas de entradas y salidas aparecerán siempre en orden.Sin embargo, si se utiliza una interfaz de cuaderno, varias líneas su-cesivas de entradas y salidas no necesariamente aparecen en orden.Es posible, por ejemplo, �volver atrás� e insertar el cálculo siguientedondequiera que se desee en el cuaderno. Téngase en cuenta que%siempre invoca el último resultado que Maxima generó. Éste puede ono ser el resultado que aparece inmediatamente encima de su actualposición en el cuaderno. Con una interfaz de cuaderno, la única ma-nera de saber cuándo un resultado particular fue generado es mirar laetiqueta de ( %on) que tiene. Como es posible insertar y suprimir entodas partes en un cuaderno, de acuerdo a la necesidad del usuario,el ordenamiento de los resultados, por lo general, no tiene ningunarelación con el orden en el cual los resultados fueron generados.

Page 53: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 5.2. De�nición de variables 39

5.2 De�nición de variables

Cuando se efectúan cálculos extensos, muchas veces es convenientedar nombre a los resultados intermedios. De igual modo que en lasmatemáticas tradicionales o en otros lenguajes de programación, esposible hacer esto introduciendo variables con un nombre especí�co.

Maxima

Esto inicializa el valor de la variable x con 6.

( %i1) x:6;

( %o1) 6

Maxima

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

( %i2) x^3-25

( %o2) 191

Maxima

Esto asigna un nuevo valor para x.

( %i3) x:11+5

( %o3) 16

Maxima

pi es inicializada con el valor numérico de π con 20 dígitos de exactitud.

( %i4) fpprec:20$( %i5) pi: %pi,bfloat;

( %o5) 3.1415926535897932385b0

Maxima

Aquí esta el valor de sqrt(pi).

( %i6) sqrt(pi)

( %o6) 1.7724538509055160273b0

Page 54: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

40 Cap. 5. Generación de cálculos

x : valor asigna un valor a la variable x

x : y : valor asigna un valor a las variable x e y

kill(x) quita cualquier valor asignado a x

kill(x,y) quita cualquier valor asignado a x e y

values muestra las variables a las que se lesha asignado un valor

Manipulación de variables.

Es muy importante recordar que los valores asignados a las varia-bles son permanentes. Una vez que el usuario ha asignado un valora una variable en particular, el valor será almacenado hasta que és-te lo remueva explícitamente. El valor, claro está, desaparecerá si elusuario inicia una nueva sesión con Maxima.

Olvidarse de las de�niciones hechas es la causa más común deerrores al usar Maxima. Si el usuario pusiera x:5, Maxima asumeque éste siempre quiere que x tenga el valor 5, hasta o a menos quese le indique explícitamente otra cosa. Para evitar los errores, debenquitarse los valores de�nidos en cuanto se haya terminado de usarlos.

• Quite valores que asigne a las variables en cuanto termine deusarlos.

Un principio útil al usar Maxima.

Maxima

Inicializando el valor de la variable y con 9.

( %i7) y:9;

( %o7) 9

Maxima

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

( %i8) values;

( %o8) [x, π, y]

Page 55: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 5.2. De�nición de variables 41

Maxima

Sentencia para quitar el valor asignado a la variable x.

( %i9) kill(x);

( %o9) done

Maxima

Sentencia para quitar el valor asignado a todas las variables.

( %i10) kill(values);

( %o10) done

Las variables que el usuario de�ne pueden tener cualquier nom-bre. No hay límite para la longitud de sus nombres. Un inconveniente,sin embargo, es que los nombres de las variables nunca pueden em-pezar con números. Por ejemplo, x3 puede ser una variable, pero 3x

corresponde a una sintaxis incorrecta en Maxima.

Maxima

He aquí cuatro variables diferentes.

( %i11) EstoEsUnaVariable:4/3;

( %o11)4

3( %i12) Esto_Es_Una_Variable:5^3;

( %o12) 125

( %i13) estoesunavariable:8;

( %o13) 8

( %i14) esto_es_una_variable:sqrt(7);

( %o14)√

7

Maxima

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

( %i15) values;

( %o15) [EstoEsUnaVariable, Esto_Es_Una_Variable,estoesunavariable, esto_es_una_variable]

Page 56: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

42 Cap. 5. Generación de cálculos

Maxima

Es posible realizar operaciones diversas con estas variables.

( %i16) (Esto_Es_Una_Variable^2+esto_es_una_variable*

estoesunavariable)/EstoEsUnaVariable;

( %o16)3(8√

7 + 15625)

4

Maxima

Con kill(all) también se quita el valor asignado a todas las variables.

( %i17) kill(all);

( %o17) done

Maxima

Esta vez values no encuantra ninguan variable con valor asignado.

( %i18) values;

( %o18) [ ]

5.3 Secuencia de operaciones

Al realizar cálculos con Maxima, usualmente se lo hace mediante unasecuencia de pasos. Si el usuario desea puede realizar cada paso enuna línea separada. A veces, sin embargo, es conveniente ingresarvarios pasos en una misma línea. Es posible hacer esto simplementeseparando cada una de las partes ingresadas con punto y coma (siquiere verse las salidas en pantalla) o con signo de dolar (si no quiereverse salida alguna).

Page 57: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 5.3. Secuencia de operaciones 43

expr1; expr2; . . . ; exprn; hace varias operaciones y da el resul-tado de todas ellas

expr1 $ expr2 $ . . . $exprn $

hace varias operaciones y no muestraningún resultado

expr1 $ expr2 $ . . . $exprn;

hace varias operaciones y da el resul-tado de la última línea

Formas de hacer secuencias de operaciones en Maxima.

Maxima

Esto realiza tres operaciones en una misma línea y muestra todos los resultados.

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

( %o1) 3

( %o2) 4

( %o3) 7

Maxima

Esto realiza tres operaciones en una misma línea sin mostrar resultados.

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

Maxima

Esto realiza tres operaciones en una misma línea y muestra el resultado de la

última operación.

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

( %o10) 7

Si el usuario �naliza su entrada con un signo de dolar, esto esinterpretado por Maxima como si estuviera ingresando una secuenciade operaciones con un signo de dolar al �nal; así que tiene el efectode hacer que Maxima calcule las operaciones especi�cadas, pero nomuestre la salida.

expr $ realiza una operación, pero no muestrala salida

Inhibiendo la salida.

Page 58: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

44 Cap. 5. Generación de cálculos

Maxima

Añadiendo un signo de dolar al �nal de la línea se le indica a Maxima que no

muestre la salida.

( %i11) x:47+5$

Maxima

Usando % se puede visualizar la salida anterior.

( %i12) %( %o12) 52

5.4 Impresión de expresiones sin evaluar

El operador comilla simple evita la evaluación. Aplicado a un sím-bolo, la comilla simple evita la evaluación del símbolo. Aplicado a lainvocación de una función, la comilla simple evita la evaluación dela función invocada, aunque los argumentos de la función son eva-luados (siempre y cuando la evaluación no se evite de otra manera).Aplicado a una expresión con paréntesis, la comilla simple evita laevaluación de todos los símbolos y llamadas a funciones que hubiesenen la expresión.

Maxima

Esto asigna valores a las variables a y b.

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

'a evita la evaluación del símbolo a

'f (x) evita la evaluación de la función f, perono de sus argumentos

'(expr) evita la evaluación de todos los símbo-los y llamadas a funciones que hayanen la expresión expr

Evitando la evaluación.

Page 59: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 5.4. Impresión de expresiones sin evaluar 45

Maxima

El operador comilla simple (') aplicado a la variable a evita la evaluación de ésta.

( %i3) 'a

( %o3) a

Maxima

El operador ' aplicado a la función integrate evita la evaluación de ésta.

( %i4) 'integrate(x^3,x);

( %o4)

∫x3dx

Maxima

Un uso interesante del operador '.

( %i5) 'integrate(x^3,x)=integrate(x^3,x);

( %o5)

∫x3dx =

x4

4

Maxima

El operador ' no evita la evaluación de los argumentos de una función.

( %i6) 'integrate((2+3)*x^3,x);

( %o6) 5

∫x3dx

Maxima

El operador ' aplicado a una expresión.

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

( %o7) b

∫x3dx+ 2

√a

Page 60: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

46 Cap. 5. Generación de cálculos

Maxima

Otro uso interesante del operador '.

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

b*integrate(x^3,x));

( %o8) b

∫x3dx+ 2

√a = 14x4 + 6

√5

Page 61: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO6

Cálculos algebraicos

6.1 Cálculo simbólico

Una de las características importantes de Maxima es que puede hacercálculos simbólicos y numéricos. Esto signi�ca que puede manejarfórmulas algebraicas así como números.

Maxima

He aquí un típico cálculo numérico.

( %i1) 4+36-1;

( %o1) 39

Maxima

Este es un cálculo simbólico.

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

( %o2) 4 x+ 6

Cálculo numérico 4 + 36− 1→ 39

Cálculo simbólico 7x− 3x+ 6→ 4x+ 6

Cálculo simbólico y numérico.

47

Page 62: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

48 Cap. 6. Cálculos algebraicos

Maxima

El usuario puede digitar cualquier expresión algebraica en Maxima.

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

( %o3) x3 + 2x− 1

Maxima

Maxima realiza automáticamente simpli�caciones algebraicas básicas. Aquí com-

bina a x2 y a −4x2 para dar −3x2.

( %i4) x^2+x-4*x^2;

( %o4) x− 3x2

Es posible digitar cualquier expresión algebraica usando los ope-radores enumerados en la sección 4.1. No debe olvidarse ingresar elasterisco para el producto, por ejemplo: x ∗ y, de lo contrario Maxima

asumirá que se trata de una sola variable.

Maxima

Maxima reordena y combina términos usando las reglas estándares del álgebra.

( %i5) x*y+2*x^2*y+y^2*x^2-2*y*x;

( %o5) x2 y2 + 2x2 y − x y

Maxima

He aquí otra expresión algebraica.

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

( %o6) (x− 2)2 (2 y + x+ 1)

Maxima

La función expand amplía productos y potencias.

( %i7) expand(%);

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

Page 63: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.1. Cálculo simbólico 49

Maxima

factor hace lo inverso de expand.

( %i8) factor(%);

( %o8) (x− 2)2 (2y + x+ 1)

Cuando se digita expresiones complicadas, es importante ponerlos paréntesis en los lugares correctos. Así, por ejemplo, debe dar laexpresión x4y en la forma x^(4*y). Si no se colocan los paréntesis, seinterpretará como x4y.

Maxima

He aquí una fórmula más complicada, que requiere de varios paréntesis.

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

( %o9)√2 (26390n+1103) (4n)!

9801 (n!4+1)

Cuando el usuario digita una expresión, Maxima aplica automá-ticamente su gran repertorio de reglas para transformar las expresio-nes. Estas reglas incluyen las reglas estándares del álgebra, tales comox− x = 0, junto con reglas mucho más so�sticadas.

Maxima

Maxima utiliza reglas estándares del álgebra para sustituir (√x+ 1)4 por (x+1)2.

( %i10) sqrt(x+1)^4;

( %o10) (x+ 1)2

Maxima

Maxima no conoce ninguna regla para esta expresión, así que deja expresión en

la forma original que usted le dio.

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

( %o11) log (cosx+ 1)

Page 64: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

50 Cap. 6. Cálculos algebraicos

6.2 Valores para símbolos

Cuando Maxima transforma una expresión por ejemplo x + x en 2 x,está tratando la variable x en forma puramente simbólica o formal. Entales casos, x es un símbolo que puede representar cualquier expresión.

A menudo, sin embargo, se necesita sustituir un símbolo como x

por un �valor� determinado. Algunas veces este valor será un número;aunque puede que sea una expresión.

Para sustituir el símbolo x, que aparece en la expresión 1 + 2x,con un valor determinado; el usuario puede utilizar la función ev ouna sintaxis alternativa de la misma.

ev(expr, x=valor) reemplaza x por valor en la expresiónexp

ev(expr, x=valor,

y=valor)

realiza varios reemplazos

expr, x=valor reemplaza x por valor en la expresiónexp

expr, x=valor, y=valor realiza varios reemplazos

Sustitución de símbolos por valores en expresiones.

Maxima

Esto realiza la regla de sustitución x = 3 en la expresión 1+ 2x.

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

( %o1) 7

Maxima

También es posible sustituir x por cualquier expresión. Aquí cada ocurrencia de x

es sustituida por 2− y.

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

( %o2) −y + (2− y)2

+ 3

Maxima

Maxima trata las reglas de sustitución como cualquier otra expresión simbólica.

( %i3) x=y+3;

Page 65: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.2. Valores para símbolos 51

( %o3) x = y + 3

Maxima

Esto aplica la regla de sustitución última a la expresión x2 − 9.

( %i4) x^2-9,%;

( %o4) (y + 3)2 − 9

Maxima

Es posible aplicar varias reglas de sustitución juntas.

( %i5) (x+y)*(x-y)^2,x=3,y=1-a;

( %o5) (4− a) (a+ 2)2

La función ev o su sintaxis alternativa, permiten aplicar reglas desustitución a una expresión particular. A veces, sin embargo, se querráde�nir reglas de sustitución que se apliquen siempre. Por ejemplo,puede ser que se desee sustituir x por 3 siempre que aparezca x. Segúnlo discutido en la sección 5.2, puede hacerse esto asignando el valor3 a x, usando x : 3. Una vez que se haya hecho la asignación x : 3, xsiempre será sustituido por 3, cuando aparezca.

Maxima

Esto asigna el valor de 3 a x.

( %i6) x:3;

( %o6) 3

Maxima

Ahora x será sustituido automáticamente por 3 dondequiera que aparezca.

( %i7) x^2-1;

( %o7) 8

Maxima

Esto asigna la expresión 1+ a a x.

( %i8) x:a+1;

Page 66: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

52 Cap. 6. Cálculos algebraicos

( %o8) a+ 1

Maxima

Ahora x es reemplazado por a+ 1.

( %i9) x^2-1;

( %o9) (a+ 1)2 − 1

Es posible de�nir como valor de un símbolo a cualquier expresión,no solamente a un número. Debe recordarse que una vez que se ha-ya dado tal de�nición, ésta continuará siendo utilizada siempre queaparezca el símbolo, hasta que el usuario la cambie o quite explíci-tamente. Para la mayoría de usuarios, el olvidarse quitar valores quehan asignado a los símbolos es la causa más común de errores al usarMaxima.

x:valor de�ne un valor para x que será utili-zado siempre

kill(x) remueve cualquier valor de�nido parax

Asignando valores a símbolos.

Maxima

El símbolo x todavía tiene el valor que le asignó arriba.

( %i10) x+5-2*x;

( %o10) −2 (a+ 1) + a+ 6

Maxima

Esto quita el valor que asignó a x.

( %i11) kill(x)

( %o11) done

Page 67: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.2. Valores para símbolos 53

Maxima

Ahora x no tiene ningún valor de�nido, así que puede ser utilizado como variable

puramente simbólica.

( %i12) x+5-2*x;

( %o12) 5− x

Los lenguajes de programación tradicionales que no soportan elcálculo simbólico permiten que las variables sean utilizadas solamentecomo nombres para objetos, típicamente números, que se han asig-nado como valores para ellos. En Maxima, sin embargo, x se puedetambién tratar como variable puramente formal, a la cual se le puedeaplicar varias reglas de transformación. Por supuesto, si el usuarioda explícitamente una de�nición, por ejemplo x : 3, entonces x serásustituida siempre por 3, y no sirve más como variable formal.

Debe recordarse que las de�niciones explícitas por ejemplo x : 3tienen un efecto global. Por otra parte, un reemplazo tal como

expr , x = 3

afecta solamente a la expresión especí�ca expr.

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

Maxima

Esto asigna un valor al símbolo t.

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

( %o13) x2 + 1

Maxima

Esto asigna un valor al símbolo x.

( %i14) t,x=2;

( %o14) 5

Page 68: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

54 Cap. 6. Cálculos algebraicos

Maxima

Esto encuentra el valor de t para un valor diferente de x.

( %i15) t,x=5*a;

( %o15) 25a2 + 1

Maxima

Esto encuentra el valor de t cuando x es sustituido por %pi, y luego evalúa el

resultado numéricamente.

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

( %o16) 10.86960440108936

Maxima

No obstante, el símbolo t preserva la de�nición original.

( %i17) t;

( %o17) x2 + 1

6.3 Transformación de expresiones algebraicas

A menudo hay muchas formas diferentes de escribir la misma expre-sión algebraica. Como un ejemplo, la expresión (x + 1)2 puede serescrita como x2 + 2x + 1. Maxima proporciona una gran colecciónde funciones para hacer conversiones entre las diferentes formas deexpresiones algebraicas.

Maxima

expand da la �forma expandida� de una expresión, con los productos y las potencias

desarrolladas.

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

( %o1) x2 + 2x+ 1

Page 69: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.3. Transformación de expresiones algebraicas 55

expand(expr) desarrolla productos y potencias, es-cribiendo el resultado como suma detérminos

expr,expand equivale a expand(expr)

factor(expr) escribe expr como un producto de fac-tores mínimos

expr,factor equivale a factor(expr)

Dos funciones comunes para transformar expresiones algebraicas.

Maxima

factor recupera la forma original.

( %i2) factor(%);

( %o2) (x+ 1)2

Maxima

Es fácil generar expresiones complicadas con expand.

( %i3) (x+3*y+1)^4,expand;

( %o3) 81 y4 + 108x y3 + 108 y3 + 54x2 y2 + 108x y2+ 54 y2 +12x3 y+ 36x2 y+ 36x y+ 12 y+x4 + 4x3+ 6x2 + 4x+ 1

Maxima

factor a menudo le da expresiones más simples.

( %i4) %,factor;

( %o4) (3 y + x+ 1)4

Maxima

Hay algunos casos donde factor puede dar expresiones más complicadas.

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

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

) (x4 + 1

)

Page 70: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

56 Cap. 6. Cálculos algebraicos

Maxima

En este caso, expand da la forma �más simple�.

( %i6) %,expand;

( %o6) x8 − 1

6.4 Simpli�cación de expresiones algebraicas

En muchas situaciones el usuario desea escribir una expresión alge-braica en la forma más simple posible. Aunque sea difícil saber exacta-mente lo que se entiende por la �forma más simple�, un procedimientopráctico que vale la pena seguir es analizar varias formas diferentesde una expresión, y elegir la de menor número de partes

rat(expr) convierte expr al formato canónico ra-cional

ratsimp(expr) simpli�ca la expresión expr y todassus subexpresiones, incluyendo los ar-gumentos de funciones no racionales

expr,ratsimp equivale a ratsimp(expr)

fullratsimp(expr) aplica repetidamente ratsimp a unaexpresión, seguida de simpli�cacionesno racionales, hasta que no se obtie-nen más transformaciones; entoncesdevuelve el resultado

expr,fullratsimp equivale a fullratsimp(expr)

Simplificación de expresiones algebraicas.

Se puede utilizar, a menudo, ratsimp para �mejorar� expresionescomplicadas que se obtienen como resultado de cálculos.

Maxima

He aquí la integral de1

x4 − 1.

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

Page 71: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.4. Simpli�cación de expresiones algebraicas 57

( %o1) − log(x+1)4 − arctan x

2 + log(x−1)4

Maxima

Al derivar el último resultado debería volverse a la expresión original. En este caso,

como es común, se obtiene una versión más complicada de la expresión original.

( %i2) diff(%,x);

( %o2) − 12 (x2+1) −

14 (x+1) + 1

4 (x−1)

Maxima

ratsimp permite volver a la forma original de la expresión.

( %i3) ratsimp(%);

( %o3) 1x4−1

Las expresiones pueden incluir funciones no racionales y los argu-mentos de tales funciones son también racionalmente simpli�cados.

Maxima

He aquí una expresión que incluye funciones no racionales cuyos argumentos ad-

miten ser racionalmente simpli�cados.

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

( %o4) sen(

xx2+x

)= %e(log x+1)2−log2 x

Maxima

ratsimp simpli�ca los argumentos de tales funciones.

( %i5) %,ratsimp;

( %o5) sen(

1x+1

)= %e x2

Ante expresiones no racionales, una llamada a ratsimp puede noser su�ciente para conseguir un resultado simpli�cado. En ocasiones

Page 72: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

58 Cap. 6. Cálculos algebraicos

serán necesarias más de una llamada a ratsimp, que es lo que haceprecisamente fullratsimp.

Maxima

Esto de�ne la variable expresion.

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

( %o6)(xa/2−1)

2(xa/2+1)

2

xa−1

Maxima

En general, rat no simpli�ca otras funciones que no sean la suma, resta, multipli-

cación, división y exponenciación de exponente entero.

( %i7) rat(expresion);

( %o7)(xa/2)

4−2 (xa/2)2+1

xa−1

Maxima

Con ratsimp se consigue una �mejor� simpli�cación.

( %i8) ratsimp(expresion);

( %o8) x2 a−2 xa+1xa−1

Maxima

Con fullratsimp se consigue simpli�car la expresión al máximo.

( %i9) fullratsimp(expresion);

( %o9) xa − 1

6.5 Expresiones puestas en diferentes formas

Las expresiones algebraicas complicadas se pueden escribir general-mente en varias maneras. Maxima proporciona una variedad de fun-ciones para convertir expresiones de una forma a otra. Los más comu-nes de estas funciones son expand, factor y ratsimp. Sin embargo,

Page 73: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.5. Expresiones puestas en diferentes formas 59

cuando se tiene expresiones racionales que contienen cocientes, puedeser necesario utilizar otras funciones.

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

expande la expresión expr con respec-to a las variables var1, . . . , varn y pordefecto no expande los denominadores

expand(expr) expande la expresión expr

factor(expr) factoriza la expresión expr

partfrac(expr,var) expande la expresión expr en fraccio-nes parciales respecto de la variableprincipal var

Comandos para transformar expresiones algebraicas.

Maxima

He aquí una expresión racional, la cual puede ser escrita en varias formas diferen-

tes.

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

( %o1)(x−1)2 (x+2)

(x−3)2 (x+1)

Maxima

expandwrt expande el numerador de la expresión, pero deja el denominador en

forma factorizada.

( %i2) expandwrt(e,x);

( %o2) x3

(x−3)2 (x+1)− 3 x

(x−3)2 (x+1)+ 2

(x−3)2 (x+1)

Maxima

expand expande todo, incluyendo el denominador.

( %i3) expand(e);

( %o3) x3

x3−5 x2+3 x+9 −3 x

x3−5 x2+3 x+9 + 2x3−5 x2+3 x+9

Page 74: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

60 Cap. 6. Cálculos algebraicos

Maxima

partfrac separa la expresión en términos con denominadores simples.

( %i4) partfrac(%,x);

( %o4) 14 (x+1) + 19

4 (x−3) + 5(x−3)2 + 1

Maxima

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

( %i5) factor(%);

( %o5)(x−1)2 (x+2)

(x−3)2 (x+1)

collectterms(expr,var) agrupa juntas todos las potencias devar

Reordenamiento de expresiones en varias variables.

Maxima

He aquí una expresión algebraica en dos variables.

( %i6) v:expand((3+2*x)^2*(x+2*y)^2);

( %o6) 16x2 y2+48x y2+36 y2+16x3 y+48x2 y+36x y+ 4x4 +12x3 + 9x2

Maxima

Esto agrupa los términos de v afectados por la misma potencia de x.

( %i7) collectterms(v,x);

( %o7) x(48 y2 + 36 y

)+ x2

(16 y2 + 48 y + 9

)+ 6 y2 +

x3 (16 y + 12) + 4x4

Maxima

Esto agrupa juntas las potencias de y.

( %i8) collectterms(v,y);

Page 75: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.5. Expresiones puestas en diferentes formas 61

( %o8)(16x2 + 48x+ 36

)y2+

(16x3 + 48x2 + 36x

)y+ 4x4 +

12x3 + 9x2

Como acaba de verse, cuando el usuario se limita a expresionespolinómicas racionales, hay muchas formas de escribir cualquier ex-presión particular. Si éste considera expresiones más complicadas, queincluyan, por ejemplo, funciones matemáticas trascendentes, la varie-dad de formas posibles llega a ser mayor. Por consiguiente, es imposi-ble tener una función incorporada especí�co enMaxima para producircada forma posible. Más bien, Maxima le permite construir sistemasarbitrarios de reglas de transformación para hacer diversas conversio-nes1. Sin embargo, hay algunas funciones incorporadas adicionales deMaxima para transformar expresiones.

trigexpand(expr) expande funciones trigonométricas ehiperbólicas de sumas de ángulos y demúltiplos de ángulos presentes en laexpresión expr

expr,trigexpand equivale a trigexpand(expr)

trigsimp(expr) utiliza las identidades sen(x)2 +cos(x)2 = 1 y cosh(x)2− senh(x)2 = 1para simpli�car expresiones que con-tienen tan, sec, etc.

trigreduce(expr,var) combina productos y potencias de se-nos y cosenos trigonométricos e hiper-bólicos de var, transformándolos enotros que son múltiplos de var

trigreduce(expr) si no se introduce el argumento var,entonces se utilizan todas las variablesde expr

expr,trigreduce equivale a trigreduce(expr)

Algunas funciones más para transformar expresiones.

1Para más detalle al respecto consulte sobre las funciones scsimp y defrule

en la ayuda de Maxima.

Page 76: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

62 Cap. 6. Cálculos algebraicos

trigrat(expr) devuelve una forma canónica simpli�-cada cuasi-lineal de una expresión tri-gonométrica

exponentialize(expr) convierte las funciones trigonométri-cas e hiperbólicas de expr a exponen-ciales

expr,exponentialize equivale a exponentialize(expr)

demoivre(expr) convierte exponenciales complejos enexpresiones equivalentes pero en tér-minos de las funciones trigonométricas

expr,demoivre equivale a demoivre(expr)

rectform(expr) devuelve una expresión de la forma a+b%i equivalente a expr, con a y b reales

expr,rectform equivale a rectform(expr)

polarform(expr) devuelve una expresión de la formar%e%i θ equivalente a expr, con r yθ reales

expr,polarform equivale a polarform(expr)

radcan(expr) simpli�ca la expresión expr, que puedecontener logaritmos, exponenciales yradicales, convirtiéndola a una formacanónica

expr,radcan equivale a radcan(expr)

prod,radexpand:all las raíces n-ésimas de los factores delproducto prod, que sean potencias den, se extraen del símbolo radical (p.ej.,√

4x2 → 2x)

logcontract(expr) analiza la expresión expr re-cursivamente, transforman-do subexpresiones de la for-ma a1*log(b1)+a2*log(b2)+c

en expresiones de la formalog(ratsimp(b1^a1*b2^a2))+c

expr,logcontract equivale a logcontract(expr)

Algunas funciones más para transformar expresiones.

Page 77: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.5. Expresiones puestas en diferentes formas 63

Maxima

Esto expande la expresión trigonométrica, escribiéndola de modo que todas las

funciones tengan argumento x.

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

( %o9)(cos3 x− 3 cosx sin2 x

)tanx

Maxima

Esto reduce la expresión usando ángulos múltiples.

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

( %o10) tanx cos (3x)

Maxima

Esto expande el seno asumiendo que x e y son reales.

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

( %o11) %i cosx sinh y + sinx cosh y

Maxima

Con logcontract se �contrae� una expresión logarítimica.

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

( %o12) a log(x2 y4

)Las transformaciones hechas por funciones como expand y factor

siempre son correctas, independientemente del valor que puedan te-ner las variables simbólicas en las expresiones. A veces, sin embargo,es útil realizar transformaciones que sólo son correctas para algunosposibles valores de las variables simbólicas. Transformaciones comoéstas las realizan radcan y radexpand:all.

Maxima

Maxima no expande automáticamente potencias no enteras de productos y co-

cientes.

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

Page 78: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

64 Cap. 6. Cálculos algebraicos

( %o13)

√x5 yw3

Maxima

radcan hace la expansión.

( %i14) %,radcan;

( %o14)x

52√y

w32

Maxima

En este caso Maxima aplica una equivalencia matemática.

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

( %o15)|x|3 |y||w|5

Maxima

Utilizando la variable opcional radexpand con el valor asignado all, Maxima pasa

por alto la equivalencia anterior.

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

( %o16) x3 yw5

6.6 Simpli�cación con asunciones

assume(pred1, . . . , predn) añade los predicados pred1, . . . , prednal contexto actual

forget(pred1, . . . , predn) borra los predicados establecidos porassume

facts() devuelve una lista con los predicadosasociados al contexto actual

Asunción de predicados.

Page 79: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.6. Simpli�cación con asunciones 65

Maxima

assume devuelve una lista con los predicados que han sido añadidos al contexto.

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

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

Maxima

Maxima realiza simpli�caciones asumiendo los predicados ingresados.

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

( %o2)[x,√y]

Maxima

Otra simpli�cación asumiendo los predicados ingresados.

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

( %o3) −x y

Maxima

facts muestra los predicados asociadas al contexto actual.

( %i4) facts();

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

Maxima

forget borra los predicados previamente establecidos.

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

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

Maxima

Después de borrar los predicados con forget, la llamada facts() devuelve una

lista vacía.

( %i6) facts();

( %o6) [ ]

Page 80: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

66 Cap. 6. Cálculos algebraicos

6.7 Selección de partes de expresiones algebraicas

coeff(expr,x,n) devuelve el coe�ciente de xn en expr

(el argumento n puede omitirse si esigual a la unidad)

hipow(expr,x) devuelve el mayor exponente explícitode x en expr (si x no aparece en expr,hipow devuelve 0)

part(expr,n1, . . . , nk) devuelve la parte de expr que se espe-ci�ca por los índices n1, . . . , nk (pri-mero se obtiene la parte n1 de expr,después la parte n2 del resultado an-terior, y así sucesivamente)

Comandos para seleccionar partes de polinomios.

Maxima

He aquí una expresión algebraica.

( %i1) e:expand((1+3*x+4*y^2)^2);

( %o1) 16 y4 + 24x y2 + 8 y2 + 9x2 + 6x+ 1

Maxima

Esto da el coe�ciente de x en e.

( %i2) coeff(e,x);

( %o2) 24 y2 + 6

Maxima

hipow(expr,y) da la mayor potencia de y que aparece en expr.

( %i3) hipow(e,y);

( %o3) 4

Maxima

Esto da el cuarto término en e.

( %i4) part(e,4);

Page 81: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 6.7. Selección de partes de expresiones algebraicas 67

( %o4) 9x2

num(expr) devuelve el numerador de expr (si exprno es una fracción, devuelve expr)

denom(expr) devuelve el denominador de expr (siexpr no es una fracción, devuelve 1)

Comandos para seleccionar partes de expresiones racionales.

Maxima

He aquí una expresión racional.

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

( %o5) x+12 (2−y)

Maxima

denom selecciona el denominador.

( %i6) denom(r);

( %o6) 2 (2− y)

Maxima

denom da 1 para las expresiones que no son cocientes.

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

( %o7) 1

Page 82: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO7

Matemáticas simbólicas

La capacidad de Maxima de tratar con expresiones simbólicas, así co-mo numéricas, le permite usarlo para muchas áreas de la matemática,siendo la más común el cálculo.

7.1 Límites

limit(f,x,x0) el límite lımx→x0

f

limit(f,x,x0,plus) el límite lımx→x+

0

f

limit(f,x,x0,minus) el límite lımx→x−

0

f

Límites.

Maxima

He aquí la expresiónsenx

x.

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

( %o1)sin(x)x

Maxima

Si se sustituye x por 0, la expresión se hace 0/0, y se obtiene un mensaje de error.

( %i2) f,x=0;

68

Page 83: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.1. Límites 69

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

Maxima

Si se evalúa sen(x)x

para un x próximo a 0, se consigue un resultado próximo a 1.

( %i3) f,x=0.01;

( %o3) 0.99998333341667

Maxima

Esto encuentra el límite de sen(x)x

cuando x tiende a 0.

( %i4) limit(f,x,0);

( %o4) 1

inf +∞minf −∞und inde�nido

ind inde�nido pero acotado

zeroa in�nitesimal mayor que cero

zerob in�nitesimal menor que cero

infinity in�nito complejo

Símbolos especiales para límites.

La función limit con un solo argumento se utiliza frecuentementepara simpli�car expresiones en las que aparecen los símbolos especia-les para límites.

Maxima

Esto da un resultado para 1− (−∞).

( %i5) limit(1-minf);

( %o5) ∞

Page 84: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

70 Cap. 7. Matemáticas simbólicas

Maxima

He aquí la simpli�cación de una expresión que incluye un in�nitesimal mayor que

cero.

( %i6) limit(x+zeroa);

( %o6) x

7.2 Diferenciación

diff(f,x) devuelve la primera derivada de f res-pecto de la variable x

diff(f,x,n) devuelve la n-esima derivada de f res-pecto de x

diff(f,x1, n1, . . . , xm, nm) devuelve la derivada parcial de f conrespecto de x1, . . . , xm y equivale adiff(. . .(diff(f,xm, nm . . .), x1, n1)

diff(f ) devuelve el diferencial total de f

Diferenciación con Maxima.

Maxima

He aquí la derivada xn con respecto a x.

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

( %o1) nxn−1

Maxima

Maxima conoce las derivadas de todas las funciones matemáticas estándar.

( %i2) diff(atan(x),x);

( %o2) 1x2+1

Maxima

La tercera derivada con respecto a x.

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

Page 85: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.2. Diferenciación 71

( %o3) (n− 2) (n− 1) nxn−3

Si no se indica la variable, Maxima asume que se quiere calcularla diferencial total. En notación matemática, diff(f,x) es como d

dxf ,mientras diff(f ) es como df .

Maxima

Esto da la diferencial total d(xn). delx y deln son los diferenciales dx y dn,

respectivamente.

( %i4) diff(x^ n);

( %o4) nxn−1 del (x) + xn log x del (n)

Así como se trata variables simbólicamente, también es posibletratar funciones simbólicamente en Maxima. Así, por ejemplo, puedeencontrarse fórmulas para las derivadas de f(x), sin especi�car unaforma explícita para la función f. Para esto hay que indicar a Maxi-

ma la dependencia de la función, lo que se consigue con la funcióndepends.

Maxima

Esto declara la dependencia f(x2).

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

( %o5)[f(x2)]

Maxima

Ahora Maxima puede utilizar la regla de cadena para simpli�car la derivada.

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

( %o6) 4(

dd x2 f

)x2 + 2 f

Page 86: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

72 Cap. 7. Matemáticas simbólicas

depends(φ, ϕ) declara la dependencia funcional φ(ϕ)

depends(φ1, ϕ1, . . . , φn,ϕn)

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

depends([φ1, . . . , φn] , ϕ) declara la dependencia funcionalφ1 (ϕ) , . . . , φn (ϕ)

depends(φ, [ϕ1 . . . , ϕn]) declara la dependencia funcionalφ (ϕ1, . . . , ϕn)

depends([φ1, . . . , φn] ,[ϕ1, . . . , ϕm])

declara la dependencia funcionalφ1 (ϕ1, . . . , ϕm) , . . . , φn (ϕ1, . . . , ϕm)

dependencies lista de átomos que tienen algún tipode dependencia funcional

remove(φ, dependency) elimina la dependencia funcional aso-ciada con φ

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

elimina la dependencia funcional aso-ciada con φ1, . . . , φn

remove(all, dependency) elimina la dependencia funcional detodos los átomos que la tengan

Declaración y remonición de dependencia funcional.

Maxima

Esto declara las dependencias u(x) y v(x).

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

( %o7) [u (x) , v (x)]

Maxima

Aquí se obtiene una fórmula para ddx

(uv), donde u = u(x) y v = v(x).

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

( %o8) uv log u(dd x v

)+ uv−1

(dd x u

)v

Maxima

Esto permite apreciar todas las dependencias declaradas hasta el momento.

( %i9) dependencies;

Page 87: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.3. Integración 73

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

]

Maxima

Con esta sentencia se borran todas las dependencias.

( %i10) remove(all,dependency);

( %o10) done

7.3 Integración

integrate(f,x) la integral inde�nida∫fdx

integrate(f,x,a,b) la integral de�nida∫ bafdx

integrate(f=g,x) la integral de�nida de una ecuación,equivale a

∫fdx =

∫gdx

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

hace el cambio de variable dado porφ(x, y) = 0 en la expresión expr quedepende de x (la nueva variable seráy)

Integración.

integration_constant variable del sistema cuyo valor por de-fecto es %c

integration_

constant_counter

variable del sistema cuyo valor por de-fecto es 0

Constantes y contadores de constantes para integrar ecuaciones.

Maxima

Para calcular la integral∫xndx, Maxima, pregunta si n+ 1 = 0 o n+ 1 6= 0. En

este caso se le ha indicado la elección de la opción n+ 1 = 0, es decir, n 6= −1.

( %i1) integrate(x^ n,x);Is n+1 zero or nonzero? n;

Page 88: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

74 Cap. 7. Matemáticas simbólicas

( %o1) xn+1

n+1

Maxima

He aquí la integral∫xndx, cuando n = −1.

( %i2) integrate(x^ n,x);Is n+1 zero or nonzero? z;

( %o2) log(x)

Maxima

Este es un ejemplo ligeramente más complicado.

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

( %o3) − log(x+a)4 a3 + log(x−a)

4 a3 − arctan( xa )

2 a3

Maxima

Recuérdese que logcontract �contrae� los logaritmos.

( %i4) integrate(1/(x^4-a^4),x),logcontract;

( %o4) − log( x+ax−a )+2 arctan( x

a )4 a3

Maxima resuelve casi cualquier integral que puede ser expresadaen términos de funciones matemáticas estándares. Pero debe com-prenderse que aun cuando un integrando pueda contener sólo funcio-nes simples, su integral puede implicar funciones mucho más compli-cadas, o puede no ser expresable en absoluto en términos de funcionesmatemáticas estándares.

Maxima

He aquí una integral simple.

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

( %o5) x(log(1− x2

)− 2)

+ log(x+1x−1

)

Page 89: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.3. Integración 75

Maxima

Esta integral puede ser expresada sólo en términos de una función dilogarítmica1.

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

( %o6) log(x) log(1− x2

)+ li2(1−x2)

2

Maxima

Esta integral involucra la función erf2.

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

( %o7)√π e erf(x)

2

Maxima

Esta integral simplemente no puede ser expresada en términos de funciones ma-

temáticas estándares. Por consiguiente, Maxima la deja como está.

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

( %o8)

∫xx dx

Maxima

He aquí la integral de�nida∫ b

asen2(x) dx.

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

( %o9)sin(2 a)−2 a

4 − sin(2 b)−2 b4

Maxima

He aquí otra integral de�nida.

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

( %o10)√π2

Page 90: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

76 Cap. 7. Matemáticas simbólicas

Maxima

Maxima no puede darle una fórmula para esta integral de�nida.

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

( %o11)

∫ 1

0

xx dx

Maxima

Esto evalúa la integral múltiple∫ 1

0

∫ x

0(x2 + y2) dy dx.

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

( %o12) 13

Cuando una constante de integración se crea durante la integra-ción de�nida de una ecuación, el nombre de la constante se construyeconcatenando las variables (del sistema) integration_constant eintegration_constant_counter.

Maxima

Esto calcula la integral de�nida de una ecuación.

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

( %o13) x3

3 = %c1 − cos(x)

Maxima

A integration_constant se le puede asignar un símbolo cualquiera.

( %i14) integration_constant: 'K;

( %o14) K

Maxima

Esto calcula la integral de�nida de una ecuación a la que se le ha reiniciado la

constante de integración por defecto.

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

Page 91: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.3. Integración 77

( %o15) x3

3 = K2 − cosx

Maxima

Es posible reiniciar el contador de integration_constant_counter.

( %i16) reset(integration_constant_counter);

( %o16) [integration_constant_counter ]

Maxima

Aquí se aprecia que el contador ha sido reiniciado.

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

( %o17) x3

3 = K1 − cosx

Es posible realizar un cambio de variable en una integral inde�nidao de�nida usando la función changevar. Para que Maxima puedarealizar esto debe mantenerse la integral sin evaluar (sección 5.4).

Maxima

He aquí una integral clásica sin evaluar.

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

( %o18)

∫%e√y dy

Maxima

Esto realiza un cambio de variable en una integral inde�nida.

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

( %o19)

∫%e√y dy

Page 92: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

78 Cap. 7. Matemáticas simbólicas

Maxima

Esto realiza un cambio de variable en una integral de�nida.

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

y-z^2,z,y);

( %o20) −2

∫ 0

−2z%ez dz

7.4 Sumas y Productos

sum(f ,i,imin, imax) la suma∑imax

iminf

lsum(f ,i,L) representa la suma de f para cada ele-mento i en L

Sumas.

Maxima

Esto construye la suma

7∑i=1

xi

i.

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

( %o1) x7

7 + x6

6 + x5

5 + x4

4 + x3

3 + x2

2 + x

Maxima

Esto devuelve la suman∑i=1

i2 sin realizar ningún cambio.

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

( %o2)

n∑i=1

i2

Maxima

Agregando simpsum la suma es calculada simbólicamente como una función de n.

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

Page 93: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.4. Sumas y Productos 79

( %o3) 2n3+3n2+n6

Maxima

Combinando simpsum con factor se obtiene un resultado factorizado.

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

( %o4)n (n+1) (2n+1)

6

Maxima

Maxima también puede dar un resultado exacto para esta suma in�nita.

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

( %o5) π4

90

Maxima

Esta es la suma múltiple3∑i=1

i∑j=1

xiyj .

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

( %o6) x3 y3 + x3 y2 + x2 y2 + x3 y + x2 y + x y

Maxima

Esta es una suma para la cual los valores del índice de variación no están equi-

incrementados.

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

( %o7) x7 + x2 + x

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

iminf(i)

Productos.

Maxima

Los productos se obtienen en forma similar a las sumas.

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

Page 94: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

80 Cap. 7. Matemáticas simbólicas

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

Maxima

Agregando simpproduct la suma es calculada simbólicamente como una función

de n.

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

( %o9) n!

Maxima

Este es un producto que no puede ser resuelto.

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

( %o10)

n∏k=1

1k+1

Cabe mencionar que la función changevar también se puede uti-lizar para cambiar los índices de una suma o producto. Sin embargo,debe tenerse en cuenta que cuando se realiza un cambio en una sumao producto, el mismo debe expresarse en términos de sumas, comoi = j + . . ., no como una función de mayor grado.

Maxima

He aquí una suma �nita con índice j.

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

( %o11)

n∑j=−2

f (j + 2) xj

Maxima

Esto realiza el cambio j = i− 2 en la suma anterior.

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

Page 95: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.5. Operadores relacionales y lógicos 81

( %o12)

n+2∑i=0

f (i) xi−2

Maxima

Aquí se hace el cambio i = k − 2 en un producto in�nito.

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

( %o13)

∞∏i=−2

f (i+ 2) xi+2

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

( %o14)

∞∏k=0

f (k) xk

7.5 Operadores relacionales y lógicos

= igual (por sintaxis)

# desigual (por sintaxis)

> mayor que

>= mayor o igual que

< menor que

<= menor o igual que

equal igual (por valor)

notequal desigual (por valor)

Operadores relacionales.

compare(x,y) compara x e y y devuelve <,<=, >,>=,=,#, notcomparable óunknown, según sea el caso

Función para obtener operadores relacionales.

Page 96: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

82 Cap. 7. Matemáticas simbólicas

Maxima

Esto prueba si 10 es menor que 7.

( %i1) 10<7,pred;

( %o1) false

Maxima

Esto prueba si 10 es diferente que 7.

( %i2) 10#7,pred;

( %o2) true

Maxima

Maxima puede determinar que esto es verdadero.

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

( %o3) true

Maxima

Maxima no sabe si esto es verdadero o falso.

( %i4) x>y,pred;

( %o4) x > y

Maxima

He aquí dos comparaciones.

( %i5) compare(1,2);

( %o5) <

( %i6) compare(1/x,0);

( %o6) #

Maxima

Una diferencia notable entre = y equal.

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

( %o7) false

Page 97: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.5. Operadores relacionales y lógicos 83

( %i8) equal((x+1)^2,x^2+2*x+1),pred;

( %o8) true

El usuario debe tener presente que, los operadores relacionales sontodos operadores binarios. Maxima no reconoce expresiones del estiloa < b < c.

Maxima

Al pretender evaluar una desigualdad como la siguiente, Maxima devuelve un

mensaje de error.

( %i9) 2<3<4,pred;

( %o9) incorrect syntax: Found logical expression where alge-braic expression expectedincorrect syntax: Premature termination of input at ;.

not negación

and conjunción

or disyunción

if cond then expr1 else

expr2

devuelve expr1 si cond es true, yexpr2 si cond es false

Operadores lógicos.

Maxima

Una forma de ingresar expresiones del estilo a < b < c, en Maxima, es usando el

operador lógico and.

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

( %o10) true

Maxima

Mientras no se hayan hecho asignaciones adecuadas a p y q, Maxima no sabe si

esto es verdadero o falso.

( %i11) p and q;

Page 98: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

84 Cap. 7. Matemáticas simbólicas

( %o11) p ∧ q

7.6 Ecuaciones

En Maxima, una ecuación consiste de dos expresiones vinculadas conel símbolo =. La expresión a = b representa una ecuación sin evaluar,la cual puede veri�carse o no.

expr1 = expr2 representa una ecuación

lhs(expr1 = expr2) devuelve expr1rhs(expr1 = expr2) devuelve expr2

Ecuaciones en Maxima.

Maxima

Una ecuación por sí misma no es evaluada.

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

( %o1) x = x4 − 5x2 − 3

Es muy importante que el usuario no confunda x:y con x=y (versección 5.2). Mientras que x:y es una declaración imperativa que ori-gina una asignación, x=y no causa ninguna acción explícita.

Maxima

Con lhs3 se selecciona el miembro izquierdo de la ecuación.

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

( %o2) x

Maxima

Con rhs se selecciona el miembro derecho de la ecuación.

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

( %o3) x4 − 5x2 − 3

Page 99: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.7. Solución de Ecuaciones Algebraicas 85

7.7 Solución de Ecuaciones Algebraicas

solve(ecu,x) resuelve la ecuación algebraica ecu deincógnita x

Solución de ecuaciones.

solve siempre trata de dar fórmulas explícitas para las solucionesde ecuaciones. Sin embargo, para ecuaciones su�cientemente compli-cadas, no pueden darse fórmulas algebraicas explícitas. Si se tiene unaecuación algebraica en una variable, y la potencia más alta de la varia-ble es menor que cinco, entonces Maxima siempre puede dar fórmulaspara las soluciones. Sin embargo, si la potencia más alta es cinco omás, puede ser matemáticamente imposible dar fórmulas algebraicasexplícitas para todas las soluciones.

Maxima

Maxima siempre puede solucionar ecuaciones algebraicas en una variable cuando

la potencia más alta es menor que cinco.

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

( %o1)

[x = −

√√37+5√2

, x =

√√37+5√2

, x = −√√

37−5%i√2

,

x =

√√37−5%i√

2

]

Maxima

También puede solucionar algunas ecuaciones que involucran potencias más altas.

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

( %o2)[x =

√3%i+1

2 , x =√3%i−1

2 , x = −1, x = −√3%i+1

2 ,

x = −√3%i−1

2 , x = 1]

Maxima

Hay algunas ecuaciones, sin embargo, para las cuales es matemáticamente impo-

sible encontrar fórmulas explícitas para las soluciones.

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

Page 100: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

86 Cap. 7. Matemáticas simbólicas

( %o3)[0 = x5 − 4x+ 2

]También puede usarse Maxima para solucionar sistemas de ecua-

ciones simultáneas.

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

resuelve un sistema de ecuaciones po-linómicas simultáneas (lineales o no)

Solución de sistemas ecuaciones.

Maxima

He aquí una lista de dos ecuaciones simultáneas, para que sean resueltas en las

variables x e y.

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

( %o4)[[x = 1

a2−a+2 , y = − aa2−a+2

]]

Maxima

He aquí algunas ecuaciones simultáneas más complicadas.

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

( %o5)[[x = 2, y = 0] ,

[x = −

√11%i+3

2 , y = −√11%i+7√11%i+1

],[

x =√11%i−3

2 , y = −√11%i−7√11%i−1

], [x = 0, y = 2]

]

Maxima

Con rectform se obtiene una mejor presentación.

( %i6) %,rectform;

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

[x = −

√11%i2 − 3

2 , y =√11%i2 − 3

2

],[

x =√11%i2 − 3

2 , y = −√11%i2 − 3

2

], [x = 0, y = 2]

]

Una variable para solve puede ser también una expresión. Esto seaprecia, por ejemplo, al aplicar esta función para obtener la derivada

Page 101: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.8. Solución de Ecuaciones Trascendentales 87

de una función de�nida en forma implícita.

Maxima

Esto asigna la ecuación y3 − 3x y + x3 = 0 a la variable e.

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

( %o7) y3 − 3x y + x3 = 0

Maxima

Aquí se de�ne la dependencia y(x).

( %i8) depends(y,x);

( %o8) [y (x)]

Maxima

Ahora se deriva e

( %i9) diff(e,x);

( %o9) 3 y2(dd x y

)− 3x

(dd x y

)− 3 y + 3x2 = 0

Maxima

Finalmente se resuelve la ecuación para la variable ddxy.

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

( %o10)[dd x y = y−x2

y2−x

]

7.8 Solución de Ecuaciones Trascendentales

El paquete to_poly_solver4 escrito por Barton Willis de la Univer-sidad de Nebraska amplia la capacidad de Maxima para solucionaralgunas ecuaciones que implican funciones trascendentales.

4El paquete to_poly_solver es experimental, siendo posible que las especi�-caciones de sus funciones puedan cambiar en el futuro, o que algunas de estasfunciones puedan ser incorporadas a otras partes de Maxima.

Page 102: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

88 Cap. 7. Matemáticas simbólicas

load(to_poly_solver)$ inicializa el paquete to_poly_solver

to_poly_solve(e, l,[options])

intenta resolver las ecuaciones e de in-cógnitas l

Comando para solucionar ecuaciones trascendentales.

simpfuncs permite insertar funciones para trans-formar las soluciones (por ejemplo,expand, dfloat, nicedummies, etc.Incluso pueden ser funciones anóni-mas, de�nida por el usuario)

parameters intenta encontrar una solución válidapara parámetros especi�cados por elusuario

use_grobner se aplica bases de grobner a las ecua-ciones antes de intentar resolverlas

Algunas opciones de to_poly_solver.

Maxima

Inicialización del paquete to_poly_solver.

( %i1) load(to_poly_solver)$

Maxima

Aquí se soluciona una ecuación algebraica.

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

( %o2) %union(

[x = −√31 i−34 ], [x =

√31 i+34 ]

)

Maxima

Esto muestra la solución de un sistema de ecuaciones lineales.

( %i3) to_poly_solve(

[2*x-y=5,x+3*y=1],

[x,y]);

( %o3) %union([x = 16

7 , y = − 37 ])

Page 103: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.8. Solución de Ecuaciones Trascendentales 89

Maxima

Esto muestra la solución de un sistema de ecuaciones polinomiales.

( %i4) to_poly_solve(

[(x^2+1)*(y^2+1)=10,(x+y)*(x*y-1)=3],

[x,y]);

( %o4) %union ([x = −3, y = 0], [x = −2, y = 1],[x = 0, y = −3], [x = 1, y = −2], [x = 1, y = 2],[x = 2, y = 1])

Maxima

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

( %i5) to_poly_solve(

[x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],

[x,y]);

( %o5) %union ()

Maxima

Al asignar el valor true a la opción use_grobner, se obtiene la solución.

( %i6) to_poly_solve(

[x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],

[x,y],use_grobner=true);

( %o6) %union(

[x = −√7−12 , y =

√7+12 ], [x =

√7+12 , y = −

√7−12 ]

)

Maxima

Esta solución no restringe el parámetro.

( %i7) to_poly_solve(a*x=x,x);

( %o7) %union ([x = 0])

Maxima

Al indicar los parámetros con la opción parameters la solución es formal.

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

Page 104: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

90 Cap. 7. Matemáticas simbólicas

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

Maxima

Esto muestra la solución de la ecuación√x+√x−

√x−√x = 3

2

√x

x+√x. Note

que siendo x = 0 el segundo miembro de la ecuación pierde el sentido (falla debida

al algoritmo utilizado por el paquete).

( %i9) to_poly_solve(

sqrt(x+sqrt(x))-sqrt(x-sqrt(x))=

(3/2)*sqrt(x/(x+sqrt(x))),x);

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

16 ])

Maxima

Aquí se muestra la solución de la ecuación3 log(

√x+1+1)

log(x−40)= 3, que involucra la

función trascendental logaritmo.

( %i10) to_poly_solve(

log(sqrt(x+1)+1)/log((x-40)^(1/3))=3,x);

( %o10) %union ([x = 48],[x = 36.02856987347005− 5.91047671912819 i],[x = 5.910476719128112 i+ 36.02856987347006])

Maxima

Para convertir cada solución a real de doble precisión hágase uso de

simpfunc=[dfloat].

( %i11) to_poly_solve(x^2+x+1=0,x,simpfuncs=[dfloat]);

( %o11) %union ([x = −0.86602540378444 i− 0.5],[x = 0.86602540378444 i− 0.5])

Maxima

Solución de la ecuación cos(x)sin(x)+1

+sin(x)+1cos(x)

= 4 que involucra las funciones tras-

cendentales seno y coseno.

( %i12) to_poly_solve(

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

Page 105: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.8. Solución de Ecuaciones Trascendentales 91

( %o12) %union([x = 2π%z60− π

3 ], [x = 2π%z62 + π3 ])

Maxima

Aquí se sustituyen las constantes de la salida previa (vea la sección 6.2).

( %i13) %,%z60=k,%z62=n;

( %o13) %union([x = 2π k − π

3 ], [x = 2π n+ π3 ])

Maxima

No obstante, la función nicedummies inicializa los índices (compare ( %o14) con

( %o12) ).

( %i14) nicedummies( %o80);

( %o14) %union([x = 2π%z0− π

3 ], [x = 2π%z1 + π3 ])

Maxima

He aquí la solución de la ecuación trascendental sin(x+ π

6

)= cos

(x− π

4

).

( %i15) to_poly_solve(

sin(x+%pi/6)=cos(x-%pi/4),x,

simpfuncs=[expand]);

( %o15) %union([x = π%z65 + 7π

24 ])

Maxima

En este caso se resuelve la ecuación trascendental tanx = cotx.

( %i16) to_poly_solve(tan(x)=cot(x),x,

simpfuncs=[expand,nicedummies]);

( %o16) %union(

[x = π%z02 + π

4 ])

Maxima

Esta es la solución de la ecuación trascendental sin(x2 + 1

)= cos (x).

( %i17) to_poly_solve(sin(x^2+1)=cos(x),x,

simpfuncs=[expand,nicedummies]);

Page 106: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

92 Cap. 7. Matemáticas simbólicas

( %o17) %union(

[x = 12 −

√−8π%z0−2π−3

2 ], [x =√−8π%z0−2π−3

2 + 12 ],

[x = −√8π%z0+2π−3

2 − 12 ], [x =

√8π%z0+2π−3

2 − 12 ])

Maxima

Esta es la solución de una ecuación exponencial.

( %i18) to_poly_solve(exp(x^2-1)-1=0,x,

simpfuncs=[expand,nicedummies]);

( %o18) %union(

[x = −√

2 i π%z0 + 1], [x =√

2 i π%z0 + 1])

Maxima

Esta es una ecuación que no puede ser resulta por to_poly_solve.

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

Unable to solveUnable to solveUnable to solve

( %o19) %solve(

[ex2−1 − x = 0], [x]

)

7.9 Sistemas de Inecuaciones Lineales

Además de la función to_poly_solve el paquete to_poly_solver

incluye la función fourier_elim que permite resolver sistemas deinecuaciones lineales y algunas inecuaciones racionales.

load(to_poly_solver)$ inicializa el paquete to_poly_solver

fourier_elim([ineq1,ineq2, . . .], [var1, var2, . . .])

aplica el algoritmo de elimina-ción de Fourier para resolver elsistema de inecuaciones lineales[ineq1, ineq2, . . .] respecto de lasvariables [var1, var2, . . .]

Comando para solucionar inecuaciones lineales.

Page 107: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.9. Sistemas de Inecuaciones Lineales 93

Maxima

Esto permite resolver el sistema

{−2 < x < π,

e < x < 4 .La solución aquí obtenida equi-

vale a e < x < π.

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

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

Maxima

Eliminando primero respecto de x y luego respecto de y, se obtienen límites inferior

y superior para x que dependen de y, y límites numéricos para y. Si se eliminan en

orden inverso, se obtienen los límites de y en función de x, y los de x son números.

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

( %o2) [0 < x, x < min (1− y, y) , 0 < y, y < 1]

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

( %o3) [x < y, y < 1− x, 0 < x, x < 12 ]

Maxima

Estas desigualdades no admiten solución.

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

( %o4) emptyset

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

( %o5) emptyset

Maxima

Aquí se resuelve la inecuación (x−2) (x−1)2 (x+4)x+3

< 0.

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

( %o6) [−3 < x, x < 1] ∨ [1 < x, x < 2] ∨ [x < −4]

Maxima

Esto resuelve la inecuación x− 1x≥ 0

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

Page 108: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

94 Cap. 7. Matemáticas simbólicas

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

Maxima

En este caso se resuelve la inecuación |x+2||x−1| < 1.

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

( %o8) [x < −2] ∨ [x = −2] ∨ [−2 < x, x < − 12 ]

Maxima

En caso de que uno de los factores no sea lineal, fourier_elim devuelve una lista

de inecuaciones simpli�cadas.

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

( %o9) [−3 < x, x < 1, x2 + x+ 1 > 0]∨[1 < x,−

(x2 + x+ 1

)> 0]

∨[x < −3,−(x2 + x+ 1

)> 0]

7.10 Inecuaciones racionales

Un paquete especializado en resolver inecuaciones racionales, escritopor Volker van Nek, es solve_rat_ineq.

load(solve_rat_ineq)$ inicializa el paquete solve_rat_ineq

solve_rat_ineq(ineq) resuelve la inecuación racional ineq

Comando para solucionar inecuaciones racionales.

Maxima

Aquí se resuelve la inecuación (x3 − 1)(x+ 3) < 0.

( %i1) solve_rat_ineq((x^3-1)*(x+3)<0);

( %o1) [[x > −3, x < 1]]

Page 109: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.11. Ecuaciones diferenciales ordinarias 95

Maxima

En este ejemplo se resuelve la inecuación (y3 − 1)(y + 3)2 ≥ 0.

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

( %o2) [[y = −3], [y >= 1]]

Maxima

En este caso se resuelve la inecuación (x−1)2(x+4)(x−2)x+3

< 0.

( %i3) solve_rat_ineq((x-1)^2*(x+4)*(x-2)/(x+3)<0);

( %o3) [[x < −4], [x > −3, x < 1], [x > 1, x < 2]]

Maxima

Aquí se resuelve la inecuación x− 1 > 1x.

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

( %o4) [[x > −√5−12 , x < 0], [x >

√5+12 ]]

7.11 Ecuaciones diferenciales ordinarias

ode2(ecu,dvar,ivar) resuelve la ecuación diferencial ordina-ria ecu, de variable dependiente dvar yvariable independiente ivar, de primery segundo orden

ic1(sol,x = x0, y = y0) resuelve el problema del valor inicialen ecuaciones diferenciales ordinariasde primer orden

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

resuelve el problema del valor inicialen ecuaciones diferenciales ordinariasde segundo orden

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

resuelve el problema del valor en lafrontera para ecuaciones diferencialesordinarias de segundo orden

Solución de ecuaciones diferenciales ordinarias.

Page 110: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

96 Cap. 7. Matemáticas simbólicas

Maxima

He aquí la solución de la ecuación diferencial y'(x) = ay(x) + 1. En esta solución

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

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

( %o1) y =(

%c − e−a x

a

)ea x

Maxima

Si se incluye una condición inicial apropiada, entonces no hay ninguna constante

en la solución.

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

( %o2) y = ea x−1a

Maxima

He aquí la solución de la ecuación diferencial y''(x)+y y'(x) = 0. En esta solución

%k1 y %k2 son constantes a ser determinadas a partir de valores iniciales o valores

de frontera.

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

( %o3) y3+6 %k1 y6 = x+ %k2

Maxima

Si se incluyen las condiciones iniciales apropiadas desaparecen las constantes.

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

( %o4)y3−3 y (y2−1)

6 = x

Maxima

Si se incluyen los valores de frontera apropiados también desaparecen las constan-

tes.

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

( %o5) y3+5 y6 = x

Page 111: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.12. Sistemas de ecuaciones diferenciales ordinarias lineales 97

7.12 Sistemas de ecuaciones diferenciales ordina-

rias lineales

La función desolve resuelve sistemas de ecuaciones diferenciales ordi-narias lineales utilizando la transformada de Laplace. La dependenciafuncional respecto de una variable independiente debe indicarse explí-citamente, tanto en las variables como en las derivadas. Por ejemplo,para la primera derivada, a diferencia de la forma 'diff(y, x) (usadaen la sección 7.11), debe usarse la forma 'diff(y(x), x).

desolve(ecu,y(x)) resuelve una ecuación diferencial pa-ra y(x), tomando a x como variableindependiente

desolve([ecu1, . . . , ecun] ,[y1(x), . . . , yn(x)])

resuelve sistemas de ecuaciones dife-renciales ordinarias lineales

atvalue(φ(x), x = x0, val) permite añadir la condición inicialφ(x0) = val a un determinado sistemade ecuaciones diferenciales ordinariaslineales

Solución de sistemas de ecuaciones diferenciales ordinarias lineales.

Maxima

He aquí la solución de la ecuación diferencial y''(x) + y(x) = 2x.

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

( %o1) y (x) = sin(x)(dd x y (x)

∣∣x=0− 2)

+ y (0) cos(x) + 2x

Maxima

Esto resuelve el sistema

{x'(t) = y(t),

y'(t) = x(t) .

( %i2) desolve([diff(x(t),t)=y(t),diff(y(t),t)=x(t)],

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

( %o2)[x (t) = (y(0)+x(0))%et

2 − (y(0)−x(0))%e−t

2 ,

y (t) = (y(0)+x(0))%et

2 + (y(0)−x(0))%e−t

2

]

Page 112: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

98 Cap. 7. Matemáticas simbólicas

Maxima

De esta manera se añaden las las condiciones iniciales x(0) = 1, y(0) = 0 al

sistema anterior.

( %i3) atvalue(x(t),t=0,1);

( %o3) 1

( %i4) atvalue(y(t),t=0,0);

( %o4) 0

Maxima

Al volver a resolver el sistema se obtienen las soluciones con las condiciones ini-

ciales dadas.

( %i5) desolve([diff(x(t),t)=y(t),diff(y(t),t)=x(t)],

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

( %o5)[x (t) = %et

2 + %e−t

2 , y (t) = %et

2 −%e−t

2

]

Maxima

En este otro ejemplo se resuelve la ecuación diferencial d3ydx3− 3 d

2ydx2

+ 3 dydx− y =

exx2, con las condiciones iniciales

y(0) = 1

y′(0) = 0

y′′(0) = −2.

( %i6) eq:diff(y(x),x,3)-3*diff(y(x),x,2)+3*diff(y(x),x)

-y(x)= %e^x*x^2;

( %o6) d3

d x3 y (x)− 3(d2

d x2 y (x))

+ 3(dd x y (x)

)− y (x) = x2 ex

( %i7) atvalue(diff(y(x),x,2),x=0,-2)$

atvalue(diff(y(x),x),x=0,0)$

atvalue(y(x),x=0,1)$( %i10) desolve([eq],[y(x)]);

( %o10) y (x) = x5 ex

60 −x2 ex

2 − x ex + ex

Page 113: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.13. Series de potencias 99

7.13 Series de potencias

taylor(expr, x, a, n) expande la expresión expr en un desa-rrollo de Taylor o de Laurent respectode la variable x alrededor del punto a,con términos hasta (x− a)n

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

devuelve la serie en potencias trun-cada de grado n en todas las va-riables x1, x2, . . . alrededor del punto(a, a, . . .)

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

devuelve la serie en potencias trunca-da en las variables x1, x2, . . . alrededordel punto (a1, a2, . . .); el truncamien-to se realiza, respectivamente, en losgrados n1, n2, . . .

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

. . .)

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

taylor(expr, [x, a, n,'asymp])

desarrolla expr en potencias negativasde x − a (el término de mayor ordenes (x− a)−n)

Obtención de series de potencias.

Las operaciones matemáticas de las que se ha hablado hasta aho-ra son exactas. Considerando la entrada exacta, sus resultados sonfórmulas exactas. En muchas situaciones, sin embargo, no se necesitaun resultado exacto. Puede ser su�ciente, por ejemplo, encontrar unafórmula aproximada que es válida, digamos, cuando la cantidad x espequeña.

Maxima

Esto da una aproximación en serie de potencias para alrededor de 0, hasta los

términos de orden 3.

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

( %o1) 1 + nx+(n2−n) x2

2 +(n3−3n2+2n) x3

6 + · · ·

Page 114: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

100 Cap. 7. Matemáticas simbólicas

Maxima

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

funciones matemáticas.

( %i2) taylor(exp(-a*t)*(1+sin(2*t)),t,0,4);

( %o2) 1 + (−a+ 2) t+(a2−4 a) t2

2 − (a3−6 a2+8) t3

6 +

(a4−8 a3+32 a) t4

24 + · · ·

Maxima

Si se da una función no conocida, taylor escribe la serie de potencias en términos

de derivadas.

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

( %o3) 1 + f (0) +(dd t f (t)

∣∣t=0

)t+

(d2

d t2f(t)

∣∣∣t=0

)t2

2 +

(d3

d t3f(t)

∣∣∣t=0

)t3

6 + · · ·

Las series de potencias son fórmulas aproximadas que juegan elmismo papel con respecto a las expresiones algebraicas como los nú-meros aproximados con las expresiones numéricas. Maxima permiterealizar operaciones en series de potencias y en todos los casos man-tiene el orden apropiado o el �grado de precisión� para las series depotencias resultantes.

Maxima

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

( %i4) taylor(exp(x),x,0,3);

( %o4) 1 + x+ x2

2 + x3

6 + · · ·

Maxima

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

sólo en el orden apropiado en x.

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

Page 115: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.13. Series de potencias 101

( %o5) 2 + 5x+ 13 x2

2 + 35 x3

6 + · · ·

Maxima

Al copiar los tres primeros términos del desarrollo anterior se tiene una expresión

ordinaria.

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

( %o6) 35 x3

6 + 13 x2

2 + 5x+ 2

Maxima

Ahora el cuadrado es calculado exactamente.

( %i7) %^2;

( %o7)(

35 x3

6 + 13 x2

2 + 5x+ 2)2

Maxima

Al aplicar expand se obtiene un resultado con once términos.

( %i8) %,expand;

( %o8) 1225 x6

36 + 455 x5

6 + 1207 x4

12 + 265 x3

3 + 51x2 + 20x+ 4

Maxima

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

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

( %o9) y − y3

6 + · · ·+(

1− y2

2 + · · ·)x+

(−y2 + y3

12 + · · ·)x2+(

− 16 + y2

12 + · · ·)x3 + · · ·

Un detalle interesante para mencionar es queMaxima, en los casosque sea posible, permite obtener la fórmula general del desarrollo enserie de potencias de una función.

Page 116: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

102 Cap. 7. Matemáticas simbólicas

powerseries(expr, x, a) devuelve la forma general del desarro-llo en serie de potencias de expr parala variable x alrededor del punto a

Obtención de series de potencias.

Maxima

He aquí una conocida fórmula.

( %i10) powerseries(sin(x),x,0);

( %o10)∑∞

i1=0(−1)i1 x2 i1+1

(2 i1+1)!

Maxima

Esta es una fórmula más elaborada.

( %i11) powerseries(cos(x^2-1),x,0);

( %o11) sin(1)∑∞

i2=0(−1)i2 x2 (2 i2+1)

(2 i2+1)! + cos(1)∑∞

i2=0(−1)i2 x4 i2

(2 i2 )!

Maxima

Una forma de eliminar los subíndices de los índices, en las sumas, es usando la

función niceindices.

( %i12) niceindices(powerseries(cos(x^2-1),x,0));

( %o12) sin(1)∑∞i=0

(−1)i x2 (2 i+1)

(2 i+1)! + cos(1)∑∞i=0

(−1)i x4 i

(2 i)!

7.14 Transformada de Laplace

laplace(expr, t, s) calcula la transformada de Laplace deexpr con respecto de la variable t yparámetro de transformación s

ilt(expr, s, t) calcula la transformada inversa de La-place de expr con respecto de s y pa-rámetro t.

Transformadas de Laplace.

Page 117: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 7.15. Ecuaciones recurrentes 103

Maxima

Esto calcula la transformada de Laplace.

( %i1) laplace(t^3*exp(a*t),t,s);

( %o1) 6(s−a)4

Maxima

He aquí la transformada inversa.

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

( %o2) t3 %ea t

7.15 Ecuaciones recurrentes

El paquete solve_rec resuelve expresiones recurrentes lineales concoe�cientes polinomiales.

Maxima

Inicialización del paquete solve_rec.

( %i1) load(solve_rec)$

Maxima

Esto resuelve una ecuación recurrente simple.

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

( %o2) an = 3n

2 −12

Maxima

He aquí una solución más complicada de otra ecuación recurrente.

( %i3) solve_rec(a[n+1]=(a[n]+1)/(n+1),a[n],a[1]=0);

( %o3) an =

n−1∑%j=1

(%j+1)!%j+1

n!

Page 118: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

104 Cap. 7. Matemáticas simbólicas

Maxima

He aquí la solución de una ecuación recurrente con dos condiciones iniciales.

( %i4) solve_rec(

a[n+2]=(3*a[n+1]-a[n])/2,

a[n],a[1]=0,a[2]=1);

( %o4) an = 2− 22−n

Maxima

Ejemplo de recurrencia lineal con coe�cientes polinomiales.

( %i5) solve_rec(

2*x*(x+1)*y[x]-(x^2+3*x-2)*y[x+1]+(x-1)*y[x+2],

y[x],y[1]=1,y[3]=3);

( %o5) yx = 3 2x−2 − x!2

Maxima

Cálculo de las soluciones racionales de una expresión recurrente lineal.

( %i6) solve_rec_rat(

(x+4)*a[x+3]+(x+3)*a[x+2]-x*a[x+1]+

(x^2-1)*a[x]=(x+2)/(x+1),

a[x]);

( %o6) ax = 1(x−1) (x+1)

Page 119: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO8

Matemáticas numéricas

8.1 Solución numérica de ecuaciones

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

resuelve el sistema de ecuaciones po-linómicas ecu1, . . . , ecum para las va-riables x1, . . . , xn

allroots(ecu, x) calcula aproximaciones numéricas delas raíces reales y complejas de la ecua-ción polinómica ecu para la variable x

find_root(ecu, x, a, b) calcula una raíz de la ecuación ecu enel intervalo de aislamiento [a, b]

Búsqueda de raíces numéricas.

Maxima

solve devuelve la ecuación ingresada.

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

( %o1)[0 = x5 − 4x+ 2

]

Maxima

algsys proporciona una lista con soluciones aproximadas.

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

105

Page 120: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

106 Cap. 8. Matemáticas numéricas

( %o2) [[x = 1.243596445373759] ,[x = −1.438447695329177 %i− 0.11679186122298] ,[x = 1.438447695329177 %i− 0.11679186122298] ,[x = −1.518512140520062] , [x = 0.50849947534103]]

Maxima

La opción realonly:true proporciona únicamente las aproximaciones reales.

( %i3) algsys([2-4*x+x^5=0],[x]),realonly:true;

( %o3) [[x = 1.243596445373759] , [x = 0.50849947534103] ,[x = −1.518512140520062]]

Si las ecuaciones involucran sólo funciones lineales o polinómicas,entonces puede usarse algsys para obtener aproximaciones numéricasde todas las soluciones. Sin embargo, cuando las ecuaciones involucranfunciones más complicadas, no hay en general ningún procedimientosistemático para obtener todas las soluciones, aún numéricamente. Entales casos, puede usarse find_root para buscar soluciones.

Téngase presente que find_root espera que la función en cuestióntenga signos diferentes en los extremos del intervalo de aislamiento.

Maxima

Aquí Maxima devuelve la misma sentencia de entrada, pues find_root evalúa los

extremos del intervalo de aislamiento: [0, 2]; y la función log que, en este caso,

forma parte de la ecuación no está de�nida en cero.

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

( %o4) find_root (3 cos (x) = log (x) , x, 0.0, 2.0)

Maxima

Variando el extremo izquierdo del intervalo de aislamiento se obtiene una solución

aproximada.

( %i5) find_root(3*cos(x)=log(x),x,0.00001,2);

( %o5) 1.447258617277903

Page 121: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 8.2. Integrales numéricas 107

Maxima

La ecuación tiene varias soluciones. Si se da un intervalo de aislamiento diferente,

find_root puede devolver una solución diferente.

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

( %o6) 13.10638768062491

8.2 Integrales numéricas

quad_qags(f, x, a, b) calcula numéricamente la integral∫ baf dx

quad_qagi(f, x, a, inf) calcula numéricamente la integral∫∞af dx

quad_qagi(f, x,minf, b) calcula numéricamente la integral∫ b−∞ f dx

quad_qagi(f, x,minf, inf) calcula numéricamente la integral∫∞−∞ f dx

Integrales numéricas.

Las funciones quad_qags y quad_qagi devuelven una lista de cua-tro elementos:

1. la aproximación a la integral,

2. el error absoluto estimado de la aproximación,

3. el número de evaluaciones del integrando,

4. un código de error.

El código de error puede tener los siguientes valores:

0 si no ha habido problemas;

1 si se utilizaron demasiados intervalos;

2 si se encontró un número excesivo de errores de redondeo;

Page 122: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

108 Cap. 8. Matemáticas numéricas

3 si el integrando ha tenido un comportamiento extraño frente a laintegración;

4 fallo de convergencia;

5 la integral es probablemente divergente o de convergencia lenta;

6 si los argumentos de entrada no son válidos.

Maxima

quad_qags puede manejar singularidades en los puntos �nales de la región de

integración.

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

( %o1)[3.141592653589849, 6.2063554295832546× 10−10, 567, 0

]Maxima

Para resolver integrales numéricas sobre regiones in�nitas se usa quad_qagi.

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

( %o2)[1.772453850905516, 1.420263678183091× 10−8, 270, 0

]

Page 123: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO9

Funciones y programas

9.1 De�nición de funciones

Hasta aquí, se ha visto muchos ejemplos de funciones incorporadasen Maxima. En esta sección, se mostrará la forma en que el usuariopuede añadir sus propias funciones a Maxima.

Maxima

Esto de�ne la función f.

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

( %o1) f(x) := x2

Maxima

f eleva al cuadrado su argumento.

( %i2) f(a+1);

( %o2) (a+ 1)2

Maxima

El argumento puede ser un número.

( %i3) f(4);

( %o3) 16

109

Page 124: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

110 Cap. 9. Funciones y programas

Maxima

O puede ser una expresión más complicada.

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

( %o4)(x2 + 3x

)2Maxima

Puede usarse f en un cálculo.

( %i5) expand(f(x+y+1));

( %o5) y2 + 2x y + 2 y + x2 + 2x+ 1

Maxima

Esto muestra la de�nición hecha para f.

( %i6) dispfun(f);

( %t6) f(x) := x2

( %o6) [ %t6]

f(x) := xˆ2 de�ne la función f

dispfun(f) muestra la de�nición de f

remfunction(f) borra todas las de�niciones de f

functions es una variable que contiene los nom-bres de las funciones de�nidas por elusuario

Definición de una función en Maxima.

Maxima

Las funciones en Maxima pueden tener cualquier número de argumentos

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

( %o7) hump (x, xmax) := (x−xmax)2xmax

Page 125: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.1. De�nición de funciones 111

Maxima

Puede usarse la función hump tal como cualquiera de las funciones prede�nidas.

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

( %o8) 0.28571428571429 (x− 3.5)2

+ 2

Maxima

Esto da una nueva de�nición para hump, que sobrescribe la anterior.

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

( %o9) hump(x, xmax) := (x− xmax)4

Maxima

Sólo es mostrada la nueva de�nición.

( %i10) dispfun(hump);

( %t10) hump (x, xmax) := (x−xmax)2xmax

( %o10) [ %t10]

Maxima

Esto limpia todas las de�niciones para hump.

( %i11) remfunction(hump);

( %o11) [hump]

dispfun(f1, . . . , fn) muestra las de�niciones de firemfunction(f1, . . . , fn) borra todas las de�niciones de fi

dispfun(all) muestra las de�niciones de todas lasfunciones de�nidas por el usuario

remfunction(all) borra todas las de�niciones de todasla funciones de�nidas por el usuario

Vista y borrado de varias funciones

Page 126: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

112 Cap. 9. Funciones y programas

Maxima

Ahora se de�ne la función g.

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

( %o12) g(x) :=√

1− x

Maxima

Estro muestra la de�nición de todas las funciones (en este caso f y g).

( %i13) dispfun(all);

( %t13) f(x) := x2

( %t13) g(x) :=√

1− x( %o13) [ %t13, %t14]

Maxima

Esto borra la de�nición de todas las funciones (en este caso f y g).

( %i14) remfunction(all);

( %o14) [f, g]

Maxima

Ya no hay funciones de�nidas por el usuario.

( %i15) dispfun(all);

( %o15) [ ]

Cuando se ha terminado con una función particular, es buenolimpiar las de�niciones que se haya hecho para ella. Si no, podríaincurrirse en un con�icto al usar la misma función para un propósitodiferente en la sesión de Maxima.

Maxima también permite de�nir funciones con una cantidad va-riable de argumentos (funciones de argumento variable) y funcionesque se aplican directamente a listas (funciones array).

Page 127: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.1. De�nición de funciones 113

F ([L]) := φ(L) de�ne la función F cuyo número de ar-gumentos es variable

F [x1, . . . , xn] :=φ(x1, . . . , xn)

de�ne la función array F cuyo argu-mento es una lista

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

φm(x1, . . . , xn)]

de�ne la función array F cuyo argu-mento es una lista y que devuelve unalista

Más definiciones de funciones en Maxima.

Maxima

Aquí se de�ne la función F que admite un número variable de argumentos.

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

( %o16) F ([x ]) := x2 + 4

Maxima

Esto evalúa F en un solo argumento.

( %i17) F(2);

( %o17) 8

Maxima

Esto evalúa F en dos argumentos.

( %i18) F(2,3);

( %o18) [8, 13]

Maxima

He aquí la de�nición de la función array G.

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

( %o19) Gx,y := x2 + y2

Maxima

Aquí se evalúa G en la lista [2, 3]

( %i20) G[2,3];

Page 128: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

114 Cap. 9. Funciones y programas

( %o20) 13

Maxima

Esto de�ne la función array H que devuelve una lista.

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

( %o21) Hx,y := [2 ∗ x, 3− y, x ∗ y]

Maxima

Aquí se evalúa la función H en la lista [4, 3].

( %i22) H[4,3];

( %o22) [8, 0, 12]

Para visualizar la de�nición de este tipo de funciones puede usarsela función dispfun, pero para borrar las respectivas de�niciones debeusarse la función remarray.

remarray(F ) borra la función array F

remarray(F1, . . . , Fn) borra las funciones array F1, . . . , Fn

remarray(all) borra todas las funciones array de�ni-das por el usuario

Borrado de funciones array

Maxima

Esto la de�nición de todas las funciones array, hasta ahora, de�nidas.

( %i23) dispfun(all);

( %t23) F ([x ]) := x2 + 4( %t23) Gx,y := x2 + y2

( %t23) Hx,y := [2x, 3− y, x y]

( %o23) [ %t24, %t25, %t26]

Maxima

Esto borra la de�nición de la función F de�nida en ( %i17) .

( %i24) remfunction(F);

Page 129: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.1. De�nición de funciones 115

( %o24) [F ]

Maxima

Esto borra la de�nición de todas las funciones array de�nidas por el usuario.

( %i25) remarray(all);

( %o25) [G,H]

Además,Maxima permite de�nir las llamadas funciones anónimas

que son de mucha utilidad en contextos vinculados con la programa-ción. La función para de�nirlas es lambda.

lambda([x], expr) de�ne una función anónima

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

de�ne una función anónima de argu-mentos múltiples

Función anónima

Maxima

Una función anónima puede asignarse a una variable y ser evaluada como si fuese

una función ordinaria.

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

( %o26) lambda([x ] , x2)

( %i27) f(a);

( %o27) a2

Maxima

O puede aplicarse directamente.

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

( %o28) a2

Maxima

No obstante, no es reconocida por dispfun.

( %i29) dispfun(all);

Page 130: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

116 Cap. 9. Funciones y programas

( %o29) [ ]

En muchas clases de cálculos, el usuario puede encontrarse digi-tando la misma entrada aMaxima muchas veces. Es posible ahorrarsemucha digitación de�niendo una función que contiene todas las sen-tencias de entrada.

Maxima

Esto construye un producto de tres términos, y expande el resultado.

( %i30) expand(product(x+i,i,1,3));

( %o30) x3 + 6x2 + 11x+ 6

Maxima

Esto hace lo mismo, pero con cuatro términos.

( %i31) expand(product(x+i,i,1,4));

( %o31) x4 + 10x3 + 35x2 + 50x+ 24

Maxima

Esto de�ne una función exprod que construye un producto de n términos, luego

lo expande.

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

Maxima

Siempre que usa la función, ejecutará las operaciones product y expand.

( %i33) exprod(5);

( %o33) x5 + 15x4 + 85x3 + 225x2 + 274x+ 120

Las funciones que se de�nen en Maxima son esencialmente proce-dimientos que ejecutan las sentencias dadas por el usuario. Es posibleincluir varios pasos en los procedimientos, separados por comas.

Page 131: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.1. De�nición de funciones 117

Maxima

El resultado que se obtiene de la función es simplemente la última expresión en

el procedimiento. Note que debe ponerse paréntesis alrededor del procedimiento

cuando se de�ne.

( %i34) cex(n,i):=(

t:exprod(n),coeff(t,x^i)

)$

Maxima

Esto �corre� el procedimiento.

( %i35) cex(5,3);

( %o35) 85

(expr1, expr2, . . .) una secuencia de expresiones para eva-luar (procedimiento)

block([a, b, . . .] , proc) un procedimiento con variables localesa, b, . . .

Construcción de procedimientos.

Una buena idea es declarar, como locales, las variables que se usandentro de los procedimientos, de modo que no inter�eran con cálculosfuera de éstos. Puede hacerse esto estableciendo los procedimientoscomo bloques, en los cuales se da una lista de variables para que seantratadas como locales.

Maxima

La función cex de�nida en ( %i37) no es un bloque, así que el valor de t �escapa�,

y existe incluso después de la evaluación de la función.

( %i36) t;

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

Page 132: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

118 Cap. 9. Funciones y programas

Maxima

Esta función es de�nida como un bloque con variable local u.

( %i37) ncex(n,i):=block([u],

u:exprod(n),

coeff(u,x^ i) ) $

Maxima

La función devuelve el mismo resultado que la anteriormente de�nida.

( %i38) ncex(5,3);

( %o38) 85

Maxima

Ahora, sin embargo, el valor de u no se escapa de la función.

( %i39) u

( %o39) u

Es posible asignar un valor inicial a una o más variables localesdentro de la lista de las mismas. También se puede de�nir una funcióncomo bloque sin declarar variables locales, para lo cual debe omitirsedicha lista.

Un bloque puede aparecer dentro de otro bloque. Las variableslocales se inicializan cada vez que se entra dentro de un nuevo bloque.Las variables locales de un bloque se consideran globales dentro deotro anidado dentro del primero. Si una variable es no local dentrode un bloque, su valor es el que le corresponde en el bloque superior.Este criterio se conoce con el nombre de �alcance dinámico�.

9.2 Reglas de transformación para funciones

Maxima permite al usuario de�nir sus propias reglas de transforma-ción y patrones de comparación.

Maxima

De�nición de la regla de transformación que reemplaza x por 3.

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

Page 133: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.2. Reglas de transformación para funciones 119

( %o1) regtran1 : x→ 3

Maxima

Aplicación de la regla de transformación regtran1

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

( %o2) f (y) + f (3) + 1

Maxima

Puede de�nirse una regla de transformación para f(x). Ésta no afecta a f(y).

( %i3) defrule(regtran2,f(x),p);regtran2 : f (x)→ p

( %i4) apply1(1+f(x)+f(y),regtran2);

( %o4) f (y) + p+ 1

Maxima

Esto de�ne un patrón f(t) que admite cualquier argumento para f.

( %i5) matchdeclare(t,true);done

( %i6) defrule(patron,f(t),t^2);

( %o6) patron : f (t)→ t2

Maxima

Aquí se aplica el patrón previamente de�nido.

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

( %o7) y2 + x2 + 1

Maxima

Esto muestra todas las reglas, hasta aquí, de�nidas.

( %i8) disprule (all);( %t8) regtran1 : x→ 3

Page 134: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

120 Cap. 9. Funciones y programas

( %t8) regtran2 : f (x)→ p

( %t8) patron : f (t)→ t2

( %o8) [ %t51, %t52, %t53]

Maxima

Con esta sentencia se borran todas las de�niciones de las reglas regtran1,

regtran2 y patron.

( %i9) clear_rules();

( %o9) false

Maxima

Esto indica que todas las de�niciones de las reglas han sido borradas.

( %i10) disprule (all);

( %o10) [ ]

Probablemente, el aspecto más potente de las reglas de trans-formación en Maxima es que ellas pueden involucrar expresiones nosólo literales, sino también patrones. Un patrón es una expresión ge-nérica f(t) para la cual se ha declarado el tipo de variable t conmatchdeclare. Así, una regla de transformación para f(t) especi�cacómo debería ser transformada la función f con el tipo de argumentoespeci�cado. Nótese que, en contraste, una regla de transformaciónpara f(x) sin realizar la declaración de la variable, especi�ca sólo latransformación de la expresión literal f(x), y por ejemplo, no dicenada sobre la transformación de f(y).

Siempre que se cumpla con la declaración especi�cada, es posi-ble establecer reglas de transformación para expresiones de cualquierforma.

Maxima

Esto de�ne una función de predicado que de�ne el patrón de producto para un

argumento.

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

( %o11) prodp(expr) := ¬ atom(expr) ∧ op(expr) = � ∗ �

Page 135: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.3. Funciones de�nidas a partir de expresiones 121

( %i12) matchdeclare(p,prodp);

( %o12) done

Maxima

Ahora se de�ne una regla que transforme una función aplicada a un producto

como la suma de los factores a los cuales se les ha aplicado la función.

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

);

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

Maxima

Luego, al aplicar la regla recién de�nida se aprecia el efecto producido.

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

( %o14) f (d) + f (c) + f (b) + f (a)

Maxima

Esto aplica la regla sin limitar el número de los factores en el argumento de f.

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

( %o15) 2 f (c) + f (b) + 2 f (a)

Maxima

Esto combina la regla de�nida por el usuario con la función expand de Maxima.

( %i16) apply1(f(a)*f(a*b*c)*f(c),reg),expand;

( %o16) f (a) f2 (c) + f (a) f (b) f (c) + f2 (a) f (c)

9.3 Funciones de�nidas a partir de expresiones

En muchos casos, sobre todo en programación, resulta bastante útilpoder de�nir una función a partir de una expresión dada para luego

Page 136: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

122 Cap. 9. Funciones y programas

poder invocarla con facilidad y así evitar el uso reiterado de la funciónev (ver sección 6.2).

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

de�ne una función de nombre f conargumentos x1, . . . , xn y cuerpo expr

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

de�ne una función array de nombref con argumentos x1, . . . , xn y cuerpoexpr

Definición de funciones a partir de expresiones.

Maxima

Esto almacena la expresión x2 + 1 en la variable ex.

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

( %o1) x2 + 1

Maxima

Aquí se pretende de�nir la función f a partir de ex. No obstante, al realizar una

evaluación no se obtiene el resultado esperado.

( %i2) f(x):=ex $( %i3) f(8);

( %o3) x2 + 1

Maxima

Por otra parte, al utilizar define para de�nir la función g a partir de ex si se

obtiene un resultado satisfactorio.

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

( %o5) 65

Una gran utilidad de define se aprecia al de�nir funciones a par-tir de las derivadas de otras, las cuales serán evaluadas en valoresnuméricos.

Page 137: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.3. Funciones de�nidas a partir de expresiones 123

Maxima

He aquí la de�nición de la función f = x2 + 1.

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

Maxima

Ahora, a partir de f , se de�ne �f ′� como �f ′� = dfdx.

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

Maxima

La evaluación simbólica de �f ′� no presenta problema alguno.

( %i8) �f'�(t);

( %o8) 2t

Maxima

No obstante, la evaluación numérica no esta permitida para dicha función.

( %i9) �f'�(8);

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

Maxima

Aquí se vuelve a de�nir �f ′�, pero en este caso se utiliza la función define (re-

cuerde que esta nueva de�nición anula a la anterior).

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

Maxima

La evaluación simbólica es idéntica.

( %i11) �f'�(t);

( %o11) 2t

Page 138: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

124 Cap. 9. Funciones y programas

Maxima

Sin embargo, ya no hay di�cultad en la evaluación numérica.

( %i12) �f'�(8);

( %o12) 16

9.4 Funciones de�nidas a trozos

Maxima no cuenta con una función especí�ca para manipular ade-cuadamente las funciones de�nidas a trozos. Una forma, bastante li-mitada, de superar esta carencia es utilizando el condicional if.

Maxima

Esto de�ne la función f(x) =

{x2, x < 2 ,√x, x ≥ 2 .

( %i1) f(x):=block([],

if (x<2) then return(x^2),

if (x>=2) then return(sqrt(x))

)$

Maxima

Aquí se hacen dos evaluaciones numéricas de la función.

( %i2) f(-2);

( %o2) 4

( %i3) f(9);

( %o3) 3

Maxima

No obstante, una evaluación simbólica deja mucho que desear.

( %i4) f(t);

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

Page 139: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.4. Funciones de�nidas a trozos 125

Maxima

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

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

( %o5)d

d x

(if x >= 2 then return

(√x))

( %i6) integrate(f(x),x);

( %o6)

∫if x >= 2 then return

(√x)dx

Maxima

De�namos, ahora, la función g(x) =

x2, −2 < x < 2 ,√x, 2 ≤ x < 3 ,

1− x, 3 ≤ x < 5.

( %i7) g(x):=block([],

if (-2<x and x<2) then return(x^2),

if (2<=x and x<3) then return(sqrt(x)),

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

Maxima

El álgebra de funciones tampoco puede efectuarse.

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

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

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

Por otra parte, se tiene el paquete pw elaborado por Richard Hen-nessy1, el cual está en proceso de desarrollo, que puede resultar útilen ciertos casos.

Maxima

Esto carga el paquete pw.

( %i9) load(pw)$

1El paquete pw (cuya versión en la actualidad es 6.4) se puede descargar desdehttp://sourceforge.net/projects/piecewisefunc/

Page 140: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

126 Cap. 9. Funciones y programas

Maxima

Esto de�ne la función f(x) =

{x2, x < 2 ,√x, x ≥ 2 .

( %i10) f(x):=piecewise(

[minf,x^2,2,sqrt(x),2,sqrt(x),inf],

x,open)$

Maxima

Aquí se hacen tres evaluaciones numéricas de la función.

( %i11) f(-2);

( %o11) 4

( %i12) f(2);

( %o12)√

2

( %i13) f(9);

( %o13) 3

Maxima

Una evaluación simbólica nos deja ver las funciones utilizadas por el autor para

manipular las funciones de�nidas a trozos.

( %i14) f(t);

( %o14)√t (signum(t−2)−unit_spike(t−2)+1)

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

2 +√tunit_spike (t− 2)

Maxima

Con la función pwsimp se obtiene una presentación matricial.

( %i15) pwsimp(f(x),x,array);If x in ( −∞ , 2 ) then x2

If x in [ 2 , 2 ] then√

2If x in ( 2 , ∞ ) then

√x

( %o15) Done

Page 141: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 9.4. Funciones de�nidas a trozos 127

Maxima

No obstante, la derivación no es correcta. Note que, de acuerdo con la de�nición,

no existe f ′(2); sin embargo, aquí se obtiene 1

232

.

( %i16) pwsimp( diff(f(x),x), x,array);If x in ( −∞ , 2 ) then 2xIf x in [ 2 , 2 ] then 1

232

If x in ( 2 , ∞ ) then 12√x

( %o16) Done

Maxima

He aquí integración.

( %i17) pwsimp(pwint(f(x),x),x,array),expand;If x in ( −∞ , 2 ) then x3

3 + 232

3 −43

If x in [ 2 , 2 ] then 232

3 + 43

If x in ( 2 , ∞ ) then 2 x32

3 − 232

3 + 43

( %o17) Done

Maxima

De�namos, ahora, la función g(x) =

x2, −2 < x < 2 ,√x, 2 ≤ x < 3 ,

1− x, 3 ≤ x < 5.

( %i18) g(x):=piecewise(

[-2,x^2,2,sqrt(x),2,sqrt(x),3,1-x,3,1-x,5],

x,open)$

Maxima

Observe esta operación.

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

( %o19)√

3− 2

Page 142: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

128 Cap. 9. Funciones y programas

Maxima

No obstante, al calcular f(x) + g(x) se aprecia que f(3) + g(3) = − 4−2√3

2.

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

If x in ( −∞ , −2 ) then x2

If x in [ −2 , −2 ] then 4If x in ( −2 , 2 ) then 2x2

If x in [ 2 , 2 ] then 232

If x in ( 2 , 3 ) then 2√x

If x in [ 3 , 3 ] then − 4−2√3

2If x in ( 3 , 5 ) then −x+

√x+ 1

If x in [ 5 , 5 ] then√

5If x in ( 5 , ∞ ) then

√x

( %o20) Done

Es preciso anotar que el objetivo no ha sido criticar negativamenteel paquete pw, sino, mostrar al lector la existencia de un trabajo queen un futuro cercano puede ser una buena alternativa para la carenciaque adolece Maxima en el tema de las funciones de�nidas a trozos.

Page 143: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO10

Listas

10.1 Juntar objetos

Las listas son bloques de construcción básica para Maxima y Lisp1.Todos los tipos de datos diferentes a los arreglos, tablas mixtas onúmeros son representados como listas en Lisp. Puede decirse que,en un nivel básico, lo que esencialmente hace una lista en Maxima esproporcionar una forma de agrupar varias expresiones de cualquierclase.

Maxima

He aquí una lista de números.

( %i1) [2,3,4];

( %o1) [2, 3, 4]

Maxima

Esto da una lista de expresiones simbólicas.

( %i2) x^%-1;

( %o2)[x2 − 1, x3 − 1, x4 − 1

]1Lisp (List Processing) es el lenguaje de programación de alto nivel en el que

está programado Maxima.

129

Page 144: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

130 Cap. 10. Listas

Maxima

Es posible derivar estas expresiones.

( %i3) diff(%,x);

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

]

Maxima

Y luego encontrar los valores cuando x es reemplazado por 3.

( %i4) %,x=3;

( %o4) [6, 27, 108]

La mayoría de funciones matemáticas incorporadas en Maxima

han sido implementadas �listables� de modo que actúen separada-mente sobre cada elemento de una lista.

10.2 Generación de listas

Maxima permite crear listas de acuerdo a una cierta regla de�nida porel usuario. Para ello cuenta con la función incorporada create_list.

create_list(f, i, imin,imax)

da una lista de valores con i variandode imin a imax

create_list(f, i, list) da una lista de valores con i variandode acuerdo a cada elemento de list

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

genera una lista con cada índice(i, j, . . .) variando del valor mínimo alvalor máximo que le han sido asocia-dos

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

genera una lista con cada índice(i, j, . . .) variando de acuerdo a cadaelemento de la lista que se le ha aso-ciado

Funciones para generar listas.

Page 145: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.2. Generación de listas 131

Maxima

Esto da una lista de los valores de i2, con i variando de 1 a 6.

( %i1) create_list(i^2,i,1,6);

( %o1) [1, 4, 9, 16, 25, 36]

Maxima

He aquí una lista de los valores de sen(n5

)para n variando de 0 a 4.

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

( %o2)[0, sin

(15

), sin

(25

), sin

(35

), sin

(45

)]Maxima

Esto da los valores numéricos de la tabla generada en ( %i6) .

( %i3) %,numer;

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

Maxima

También puede hacerse tablas de fórmulas.

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

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

]Maxima

create_list usa exactamente la misma notación para el iterador que las funciones

sum y product que fueron mencionadas en la sección 7.4.

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

( %o5) (x+ 2)(x2 + 4

) (x3 + 6

) (x4 + 8

) (x5 + 10

)Maxima

Esto hace una lista con valores de x variando desde 0 hasta 1 en pasos de 0.25

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

Page 146: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

132 Cap. 10. Listas

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

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

Maxima

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

( %i8) %^2+3;

( %o8) [3.25, 3.5, 3.75, 4]

Maxima

Esto hace una lista de xi + yj con i variando desde 1 hasta 3 y j variando desde

1 hasta 2.

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

( %o9)[y + x, y2 + x, y + x2, y2 + x2, y + x3, y2 + x3

]

Maxima

Esto crea una lista conteniendo cuatro copias del símbolo x.

( %i10) create_list(x,i,1,4);

( %o10) [x, x, x, x]

Maxima

Esto da una lista de cuatro números seudo aleatorios.

( %i11) create_list(random(1.0),i,1,4);

( %o11) [0.25223887668538, 0.41556272272148,0.61257388925382, 0.84181265533592]

Page 147: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.3. Elección de elementos de una lista 133

10.3 Elección de elementos de una lista

part(list, i) ó list [ i ] el i-ésimo elemento de list (el primerelemento es list [ 1 ])

part(list, [ i, j, . . . ]) una lista formada por los elementosi, j, . . . de list

part(list, i1, . . . , ik) obtiene la parte de list que se especi-�ca por los índices i1, . . . , ik (primerose obtiene la parte i1 de list, despuésla parte i2 del resultado anterior, y asísucesivamente)

first(list),second(list), . . . ,

tenth(list)

devuelve el primer, segundo, ..., déci-mo elemento de list

last(list) devuelve el último elemento de list

Operaciones con elementos de una lista.

Maxima

Esto extrae el tercer elemento de la lista.

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

( %o1) 8

Maxima

Esto extrae una lista de elementos.

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

( %o2) [−1, 8, 4,−1, 8,−6, 4]

Maxima

Esto asigna una lista en la variable u.

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

( %o3) [7, 2, 4, 6]

Page 148: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

134 Cap. 10. Listas

Maxima

Puede extraerse elementos de u.

( %i4) u[3];

( %o4) 4

Maxima

Pueden realizarse operaciones diversas con u.

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

( %o5)[− 3

4 ,−16 ,−6, 8

]Es posible crear listas multidimensionales mediante la anidación

de listas en listas.

Maxima

Esto crea una lista 2× 2, y le da el nombre m.

( %i6) m:create_list(create_list(i-j,j,1,2),

i,1,2);

( %o6) [[0,−1] , [1, 0]]

Maxima

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

( %i7) m[1];

( %o7) [0,−1]

Maxima

Esto extrae el segundo elemento de aquella sublista.

( %i8) %[2];

( %o8) −1

Maxima

Esto hace las dos operaciones juntas.

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

Page 149: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.3. Elección de elementos de una lista 135

( %o9) −1

Maxima

Esto genera una lista tridimensional de 2× 2× 2. Es una lista de listas de listas.

( %i10) create_list(create_list(create_list(i*j^2*k^3,

k,1,2),j,1,2),i,1,2);

( %o10) [[[1, 8] , [4, 32]] , [[2, 16] , [8, 64]]]

Maxima

Si no se anida create_list se obtiene una lista unidimensional.

( %i11) create_list(i*j^2*k^3,i,1,2,j,1,2,k,1,2);

( %o11) [1, 8, 4, 32, 2, 16, 8, 64]

Al asignar una lista a una variable, puede usarse las listas enMaxi-

ma de modo similar a los �arrays� en otros lenguajes de programación.De esta manera, por ejemplo, es posible resetear un elemento de unalista asignando un valor a u [ i ].

part(u, i) ó u [ i ] extrae el i-ésimo elemento de la lista u

u [ i ] : valor resetea el i -ésimo elemento de la listau

Operando listas como arrays.

Maxima

Aquí hay una lista.

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

( %o12) [2, 1, 5, 7]

Maxima

Esto resetea el segundo elemento de la lista.

( %i13) u[2]:0;

( %o13) 0

Page 150: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

136 Cap. 10. Listas

Maxima

Ahora la lista asignada a u se ha modi�cado.

( %i14) u;

( %o14) [2, 0, 5, 7]

10.4 Prueba y búsqueda de elementos de una lista

sublist(L,P ) devuelve la lista de elementos x de lalista L para los cuales el predicadoP (x) es verdadero

sublist_indices(L,P ) devuelve los índices de los elementos xde la lista L para la cual el predicadoP (x) es verdadero

?position(elem,L) devuelve el índice que indica la posi-ción que ocupa elem en la lista L

member(form, list) prueba si form es un elemento de list

freeof(form, list) prueba si form no ocurre en ningunaparte de list

freeof(form1, . . . ,formn, list)

equivale a freeof(form1, list) and . . .and freeof(formn, list)

Funciones para la prueba y búsqueda de elementos de una lista.

Maxima

Esto da una lista de todos los elementos de [a, 1, 3, b, 7] que son de tipo simbólico.

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

( %o1) [a, b]

Maxima

Esto da una lista de todas posiciones, de la lista [a, 1, 3, b, 7], en las que se encuen-

tran elementos de tipo simbólico.

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

Page 151: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.5. Combinación de listas 137

( %o2) [1, 4]

Maxima

En este caso se emplea una función anónima para de�nir un predicado, el cual indi-

ca que se quiere obtener una lista de todos los elementos, de la lista [1, 2, 4, 7, 6, 2],

que son mayores que 2.

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

( %o3) [4, 7, 6]

Maxima

Esto muestra que 4 es un elemento de [11, 1, 2, 4, 5, 5].

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

( %o4) true

Maxima

Por otra parte 3, no lo es.

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

( %o5) false

Maxima

Esto muestra que 0 ocurre en alguna parte de [[1, 2] , [3, 0]].

( %i6) freeof(0,[[1,2],[3,0]]);

( %o6) false

10.5 Combinación de listas

join(list1, list2) crea una nueva lista con los elementosde las listas list1 y list2 alternados

Combinar listas.

Page 152: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

138 Cap. 10. Listas

Maxima

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

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

( %o1) [1, a, 2, b]

Maxima

He aquí la combinación de dos listas de diferente longitud (join ignora los ele-

mentos sobrantes de la lista de mayor longitud).

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

( %o2) [1, a, 2, b]

10.6 Reordenamiento de listas

sort(list) ordena los elementos de list en formaascendente

sort(list, P ) ordena los elementos de list de acuer-do con el predicado P

reverse(list) invierte el orden de los elementos delist

permutations(list) devuelve un conjunto con todas laspermutaciones distintas de los miem-bros de list

unique(list) devuelve list sin redundancias, es de-cir, sin elementos repetidos

Ordenamiento de listas.

Maxima

Esto ordena los elementos de una lista en forma estándar. En casos simples como

éste el ordenamiento es alfabético o numérico.

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

( %o1) [a, b, c, d]

Page 153: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.6. Reordenamiento de listas 139

Maxima

Esto ordenada los elementos de la lista en forma descendente.

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

( %o2) [11, 5, 5, 4, 2, 1]

Maxima

Aquí se ordenada los elementos de la lista según sea la norma de cierto elemento

menor que la norma del posterior.

( %i3) sort([3+5* %i, %i-8,4+ %i,1+2* %i],

lambda([a,b],abs(a)<abs(b))

);

( %o3) [2 i+ 1, i+ 4, 5 i+ 3, i− 8]

Maxima

Esto invierte el orden de los elementos de la lista.

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

( %o4) [a, c, b, d]

Maxima

Aquí se tienen todas las permutaciones de [a, b, c].

( %i5) permutations([a,b,c]);

( %o5) {[a, b, c] , [a, c, b] , [b, a, c] , [b, c, a] , [c, a, b] , [c, b, a]}

Maxima

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

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

( %o6) [1, 2, 4, 5, 11]

Page 154: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

140 Cap. 10. Listas

10.7 Agregar y quitar elementos de una lista

append(list1, list2, . . . ,listn)

devuelve una lista cuyos elementos sonlos de la lista list1 seguidos de los delist2, . . . , listn

cons(elem, list) agrega elem al inicio de la lista list

endcons(elem, list) agrega elem al �nal de la lista list

delete(elem, list) borra elem de la lista list

rest(list, n) borra los primeros n elementos (n > 0)o los últimos −n elementos (n < 0) dela lista list

deleten(list, n) borra el n-ésimo elemento de la listalist

Agregar y quitar elementos de una lista.

Maxima

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

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

( %o1) [1, 2, 3, a, b, c]

Maxima

Aquí se inserta x al inicio de la lista dada.

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

( %o2) [x, a, b, c]

Maxima

En este caso se inserta x al �nal de la lista dada.

( %i3) endcons(x,[a,b,c]);

( %o3) [a, b, c, x]

Page 155: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.8. Reorganización de listas 141

Maxima

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

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

( %o4) [f, c, x]

Maxima

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

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

( %o5) [a, g, f ]

10.8 Reorganización de listas

flatten(list) elimina todos los niveles que pueda te-ner la lista list

partition(list, x) particiona la lista list en dos listas;una que contiene los elementos que nodependen de x, y otra, los que si de-penden de x

Funciones para reorganizar listas anidadas.

Maxima

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

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

( %o1) [7, 2, 3, 5, 4]

Maxima

Esto particiona la lista[a, b, a2 + 1, c

].

( %i2) partition([a,b,a^2+1,c],a);

( %o2)[[b, c] ,

[a, a2 + 1

]]

Page 156: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

142 Cap. 10. Listas

10.9 Funciones adicionales para listas

listp(expr) veri�ca si expr es una lista

emptyp(list) veri�ca si list es una lista vacía

length(list) devuelve la longitud de list

list1.list2 devuelve el producto escalar de list1 ylist2

apply(f, [x1, . . . , xn]) evalúa f(x1, . . . , xn)

map(f, [a1, . . . , an]) devuelve la lista [f(a1), . . . , f(an)]

map(f, [a1, . . . , an] ,[b1, . . . , bn] , . . .)

devuelve la lista [f(a1, b1, . . .), . . . ,f(an, bn, . . .)]

outermap(f, list1,. . . , listn)

aplica la función f a cada uno delos elementos del producto cartesianolist1 × list2 . . .× listn

Algunas funciones adicionales para listas.

Maxima

Con la función length es fácil obtener la longitud de una lista.

( %i1) length([7,9,0]);

( %o1) 3

Maxima

Aquí se usa la función apply para encontrar el elemento de mayor valor.

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

( %o2) 11

Maxima

He aquí un ejemplo en el que se usa la función map.

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

( %o3) [a, c]

Page 157: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 10.9. Funciones adicionales para listas 143

Maxima

Este es otro ejemplo en el que se usa la función map. Para usos como este debe

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

( %i4) map(�+�,[1,2,9],[-1,3,7]);

( %o4) [0, 5, 16]

Maxima

He aquí un ejemplo en el que se usa la función outermap.

( %i5) outermap(�^�,[a,b],[c,d,e]);

( %o5) [[ac, ad, ae], [bc, bd, be]]

Maxima

En este ejemplo se combina el uso de la función map con una función anónima

(véase ( %i26) y ( %i28) de la sección 9.1) para obtener una lista que contiene

los productos escalares de p con cada una de las sublistas de q.

( %i6) p:[x,y,z]$

q:[[a1,b1,c1],[a2,b2,c2],[a3,b3,c3]]$( %i8) map(lambda([h],p.h),q);

( %o8) [c1 z + b1 y + a1x, c2 z + b2 y + a2x, c3 z + b3 y + a3x]

Page 158: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO11

Arrays

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

crea un array de dimensión n, que de-be ser menor o igual que 5

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

crea un array con sus elementos deltipo especi�cado (el tipo puede serfixnum o flonum)

Creación de arrays.

listarray(A) devuelve una lista con los elementosdel array A

arrayinfo(A) devuelve información acerca del arrayA

fillarray(A,B) rellena el array A con los valores de B,que puede ser una lista u otro array

Algunas funciones para arrays.

Maxima

Esto de�ne el array u de dimensión 2.

( %i9) array(u,2);

( %o9) u

144

Page 159: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

145

Maxima

Esto indica que el array no tiene valores asignados.

( %i10) listarray(u);

( %o10) [#####,#####,#####]

Maxima

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

( %i11) fillarray(u,[1,-7,8]);

( %o11) u

Maxima

Esto permite visualizar los valores asignados.

( %i12) listarray(u);

( %o12) [1,−7, 8]

Maxima

Aquí se de�ne el array φ.

( %i13) array(phi,1,2);

( %o13) φ

Maxima

Esto asigna valores a φ.

( %i14) phi[0,0]:-1$ phi[0,1]:1$ phi[0,2]:4$

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

Maxima

Aquí se tiene una lista con los valores asignados a φ.

( %i22) listarray(phi);

( %o22) [−1, 1, 4, 4, 7, 5]

Page 160: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

146 Cap. 11. Arrays

Maxima

Esto da información acerca de φ

( %i23) arrayinfo(phi);

( %o23) [declared , 2, [1, 2]]

Si el usuario asigna un valor a una variable subindicada antes dedeclarar el array correspondiente, se construye un array no declarado.

Los arrays no declarados, también conocidos por el nombre de�arrays de claves� (hashed arrays), son más generales que los arraysdeclarados. El usuario no necesita declarar su tamaño máximo y pue-den ir creciendo de forma dinámica. Los subíndices de los arrays nodeclarados no necesariamente deben ser números.

Maxima

Esto asigna un valor a la variable t subindicada con hola.

( %i24) t[hola]:a;

( %o24) a

Maxima

Esto asigna un valor a la variable t subindicada con adios.

( %i25) t[adios]:b;

( %o25) b

Maxima

Ahora se muestran los valores asignados al array no declarado t.

( %i26) listarray(t);

( %o26) [b, a]

Maxima

Y también se muestra información con respecto a t.

( %i27) arrayinfo(t);

( %o27) [hashed , 1, [adios] , [hola]]

Page 161: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO12

Matrices

12.1 Generación de Matrices

Las matrices en Maxima son expresiones que comprenden el operadormatrix y cuyos argumentos son listas (ver sección 19.2). Esto indicaque Maxima tiene establecida una diferencia entre una matriz y unalista de listas.

matrix([a11, a12, . . . , a1n] ,. . . , [am1, am2, . . . , amn])

devuelve una matriz de orden m× n

genmatrix(f,m, n) devuelve una matriz m × n generadaa partir de f

entermatrix(m,n) devuelve una matriz de orden m × n,cuyos elementos son leidos de formainteractiva

ident(n) devuelve la matriz identidad de ordenn

zeromatrix(m,n) devuelve una matriz rectangularm×ncon todos sus elementos iguales a cero

diagmatrix(n, elem) devuelve una matriz diagonal de or-den n con los elementos de la diagonaltodos ellos iguales a elem

Funciones para generar matrices.

147

Page 162: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

148 Cap. 12. Matrices

diag_matrix(d1, d2, . . . ,dn)

devuelve una matriz diagonal con loselementos de la diagonal iguales ad1, d2, . . . , dn

vandermonde_matrix

([x1, . . . , xn])devuelve una matriz n por n, cuya i -ésima �la es [1, xi, x

2i , . . . , x

(n−1)i ]

hilbert_matrix (n) devuelve la matriz de Hilbert n por n(si n no es un entero positivo, emiteun mensaje de error)

Funciones para generar matrices.

Maxima

He aquí la de�nición de una matriz.

( %i1) matrix([3,1,0],[2,4,1],[1,7,2]);

( %o1)

3 1 02 4 11 7 2

Maxima

Una lista de listas no es interpretada como matriz.

( %i2) [[3,1,0],[2,4,1],[1,7,2]];

( %o2) [[3, 1, 0], [2, 4, 1], [1, 7, 2]]

Maxima

Con apply puede convertirse una lista de listas a matriz.

( %i3) apply(matrix,[[3,1,0],[2,4,1],[1,7,2]]);

( %o3)

3 1 02 4 11 7 2

Maxima

Aquí se genera una matriz (ai,j) ∈ M3×3/ai,j = i− 2j.

( %i4) a[i,j]:=i-2*j $

Page 163: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.1. Generación de Matrices 149

( %i5) genmatrix(a,3,3);

( %o5)

−1 −3 −50 −2 −41 −1 3

Maxima

Esto genera una matriz de Vandermonde simbólica.

( %i6) vandermonde_matrix([x[0],x[1],x[2]]);

( %o6)

1 x0 x201 x1 x211 x2 x22

Maxima

Esto genera una matriz de Vandermonde numérica.

( %i7) vandermonde_matrix([2,3,5]);

( %o7)

1 2 41 3 91 5 25

Maxima

He aquí una matriz de Hilbert de orden 3.

( %i8) hilbert_matrix(3);

( %o8)

1 12

13

12

13

14

13

14

15

Page 164: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

150 Cap. 12. Matrices

12.2 Elegir elementos de matrices

M [ i ] ó part(M, i) devuelve la i -ésima �la de la matrizM

M [ i, j ] ó part(M, i, j) devuelve el elemento Mi,j de M

Funciones para elegir elementos de matrices.

Maxima

Esto genera la matriz A mediante una función anónima.

( %i1) A:genmatrix(lambda([i,j],i-j),3,3);

( %o1)

0 −1 −21 0 −12 1 0

Maxima

Aquí se selecciona el elemento A1,2.

( %i2) A[1,2];

( %o2) −1

Maxima

Esto devuelve una matriz identidad de orden 3.

( %i3) ident(3);

( %o3)

1 0 00 1 00 0 1

Maxima

Esto selecciona la segunda �la de la matriz identidad.

( %i4) %[2];

( %o4) [0, 1, 0]

Page 165: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.3. Operaciones matriciales 151

12.3 Operaciones matriciales

A.B producto matricial

invert(M) devuelve la inversa de la matriz M

Mˆˆp exponenciación matricial no conmuta-tiva

determinant(M) devuelve el determinante de la matrizM

mat_trace(M) devuelve la traza de la matriz cuadra-da M

transpose(M) devuelve la transpuesta de la matrizM

minor(M, i, j) devuelve el menor (i, j) de la matrizM

adjoint(M) devuelve la matriz adjunta de la ma-triz M

addcol(M, list1, . . . , listn) añade la(s) columna(s) dada(s) porla(s) lista(s) (o matrices) a la matrizM

addrow(M, list1, . . . , listn) añade la(s) �la(s) dada(s) por la(s) lis-ta(s) (o matrices) a la matriz M

col(M, i) devuelve la i -ésima columna de la ma-triz M . El resultado es una matriz deuna sola columna

row(M, i) devuelve la i -ésima �la de la matrizM . El resultado es una matriz de unasola �la

rank(M, i, j) calcula el rango de la matriz M

setelmx(x, i, j,M) asigna el valor x al (i,j )-ésimo elemen-to de la matrizM y devuelve la matrizactualizada

submatrix(i1, . . . , im,M, j1, . . . , jn)

submatrix(i1, . . . , im,M)submatrix(M, j1, . . . , jn)

devuelve una nueva matriz formada apartir de la matriz M pero cuyas �lasi1, . . . , 1m y columnas j1, . . . , jn hansido eliminadas

Algunas operaciones matriciales.

Page 166: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

152 Cap. 12. Matrices

echelon(M) devuelve la forma escalonada de la ma-trizM , obtenida por eliminación gaus-siana

triangularize(M) devuelve la forma triangular superiorde la matriz M , obtenida por elimina-ción gaussiana

rowop(M, i, j, λ) devuelve la matriz que resulta de reli-zar la transformación Fi ← Fi−λ∗Fjcon las �las Fi y Fj de la matriz M

rowswap(M, i, j) intercambia las �las i y j de la matrizM

columnop(M, i, j, λ) devuelve la matriz que resulta de reli-zar la transformación Ci ← Ci−λ∗Cjcon las columnas Ci y Cj de la matrizM

columnswap(M, i, j) intercambia las columnas i y j de lamatriz M

kronecker_product(A,B)

devuelve el producto de Kronecker delas matrices A y B

Algunas operaciones matriciales.

Maxima

He aquí una matriz 2× 2 de variables simbólicas.

( %i1) A:matrix([a,b],[c,d]);

( %o1)

[a bc d

]

Maxima

He aquí la transpuesta de A.

( %i2) transpose(A);

( %o2)

[a cb d

]

Page 167: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.3. Operaciones matriciales 153

Maxima

Esto da la inversa de A en forma simbólica.

( %i3) invert(A);

( %o3)

[d

ad−bc − bad−bc

− cad−bc

aad−bc

]

Maxima

Esto da el determinante de A.

( %i4) determinant(A);

( %o4) a d− b c

Maxima

He aquí una matriz racional 3× 3.

( %i5) B:genmatrix(lambda([ i,j ],1/(i+j-1)),3,3);

( %o5)

1 12

13

12

13

14

13

14

15

Maxima

Esto da su inversa.

( %i6) invert(B);

( %o6)

9 −36 30−36 192 −18030 −180 180

Maxima

Multiplicando la inversa con la matriz original se obtiene la matriz identidad.

( %i7) %.B;

( %o7)

1 0 00 1 00 0 1

Page 168: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

154 Cap. 12. Matrices

Maxima

Aquí se de�ne una matriz M de orden 4× 5.

( %i8) M:matrix([2,-1,2,-1,-8],[2,-2,3,-3,-20],

[1,1,1,0,-2],[1,-1,4,3,4]);

( %o8)

2 −1 2 −1 −82 −2 3 −3 −201 1 1 0 −21 −1 4 3 4

Maxima

Esto efectúa el intercambio de las �las 2 y 1 de la matriz M y devuelve la matriz

resultante.

( %i9) rowswap(M,2,1);

( %o9)

2 −2 3 −3 −202 −1 2 −1 −81 1 1 0 −21 −1 4 3 4

Maxima

Esto realiza la transformación F2 ← F2 +F1 en la matriz M y devuelve la matriz

resultante.

( %i10) rowop(M,2,1,-1);

( %o10)

2 −1 2 −1 −84 −3 5 −4 −281 1 1 0 −21 −1 4 3 4

Maxima

He aquí el producto de Kronecker de dos matrices.

( %i11) kronecker_product( matrix([a,b],[c,d]),

matrix([1,2,3],[4,5,6],[7,8,9]) );

Page 169: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.4. Funciones adicionales para matrices 155

( %o11)

a 2a 3a b 2b 3b4a 5a 6a 4b 5b 6b7a 8a 9a 7b 8b 9bc 2c 3c d 2d 3d4c 5a 6a 4d 5d 6d7c 8c 9c 7d 8d 9d

12.4 Funciones adicionales para matrices

matrix_size(M) devuelve una lista con dos elementosque constituyen el número de �las ycolumnas de la matriz M , respectiva-mente

matrixp(expr) veri�ca si expr es una matriz

mat_norm(M,p) devuelve la p-norma de la matriz M .Los valores admisibles para p son 1,inf y frobenius

addmatrices(f,A,B, . . .) devuelve la matriz(f(ai,j , bi,j , . . .))m×n, donde m × nes el orden común de las matricesA,B, . . .

mat_unblocker(M) siM es una matriz de bloques, deshacelos bloques de un nivel

outermap(f,M1, . . . ,Mn) aplica la función f a cada uno delos elementos del producto cartesianoM1 ×M2 . . .×Mn

Más funciones para matrices.

Maxima

He aquí la matriz D.

( %i1) d[i,j]:=1+(-1)^ (i+j) $( %i3) D:genmatrix(d,3,4);

Page 170: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

156 Cap. 12. Matrices

( %o3)

2 0 2 00 2 0 22 0 2 0

Maxima

Esto devuelve una lista con el número de �las y columnas de la matriz D.

( %i4) matrix_size(D);

( %o4) [3, 4]

Maxima

Utilizando la función matrixp es posible comprobar que B es una expresión ma-

tricial.

( %i5) matrixp(D);

( %o5) true

Maxima

He aquí la norma de frobenius de la matriz B.

( %i6) mat_norm(D,frobenius);

( %o6) 2√

6

Maxima

A continuación se de�nen las matrices A, B y C con elementos simbólicos inde-

xados.

( %i7) A:genmatrix(a,2,3);

( %o7)

[a1,1 a1,2 a1,3a2,1 a2,2 a2,3

]( %i8) B:genmatrix(b,2,3);

( %o8)

[b1,1 b1,2 b1,3b2,1 b2,2 b2,3

]( %i9) C:genmatrix(c,2,3);

Page 171: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.4. Funciones adicionales para matrices 157

( %o9)

[c1,1 c1,2 c1,3c2,1 c2,2 c2,3

]

Maxima

Este es el resultado obtenido al aplicar f mediante la función addmatrices a las

matrices A, B y C.

( %i10) addmatrices(f,A,B,C);

( %o10)

[f(a1,1, b1,1, c1,1) f(a1,2, b1,2, c1,2) f(a1,3, b1,3, c1,3)f(a2,1, b2,1, c2,1) f(a2,2, b2,2, c2,2) f(a2,3, b2,3, c2,3)

]

Maxima

Si f es �+�, el resultado es A+B + C.

( %i11) addmatrices(�+�,A,B,C);

( %o11)

[c1,1 + b1,1 + a1,1 c1,2 + b1,2 + a1,2 c1,3 + b1,3 + a1,3c2,1 + b2,1 + a2,1 c2,2 + b2,2 + a2,2 c2,3 + b2,3 + a2,3

]

Maxima

Con outermap y mat_unblocker también es posible obtener el producto de Kro-

necker de dos matrices.

( %i12) outermap( �*�,matrix([a,b],[c,d]),

matrix([1,2,3],[4,5,6],[7,8,9]) );

( %o12)

a 2a 3a4a 5a 6a7a 8a 9a

b 2b 3b4b 5b 6b7b 8b 9b

c 2c 3c4c 5c 6c7c 8c 9c

d 2d 3d4d 5d 6d7d 8d 9d

( %i13) mat_unblocker(%);

Page 172: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

158 Cap. 12. Matrices

( %o13)

a 2a 3a b 2b 3b4a 5a 6a 4b 5b 6b7a 8a 9a 7b 8b 9bc 2c 3c d 2d 3d4c 5a 6a 4d 5d 6d7c 8c 9c 7d 8d 9d

12.5 Matrices asociadas a sistemas de ecuaciones

coefmatrix([eq1, . . . , eqm],[x1, . . . , xn])

devuelve la matriz de coe�cientes paralas variables x1, . . . , xn del sistema deecuaciones lineales eq1, . . . , eqm

augcoefmatrix([eq1, . . . ,eqm], [x1, . . . , xn])

devuelve la matriz aumentada de coe-�cientes para las variables x1, . . . , xndel sistema de ecuaciones linealeseq1, . . . , eqm

Funciones para generar matrices asociadas a sistemas de ecuaciones.

Maxima

He aquí la matriz de coe�cientes del sistema de ecuaciones lineales, dado.

( %i1) coefmatrix([2*x-3*y=1,x+y=3],[x,y]);

( %o1)

[2 −31 1

]

Maxima

Esta es la matriz aumentada del mismo sistema anterior.

( %i2) augcoefmatrix([2*x-3*y=1,x+y=3],[x,y]);

( %o2)

[2 −3 −11 1 −3

]

Page 173: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 12.6. Autovalores y autovectores 159

Maxima

Aquí se hace la transformación F2 ← F2− 12F1 en la matriz aumentada anterior. A

partir de éste último resultado se deduce que la solución del sistema de ecuaciones

lineales, dado, será y = 1 y x = 2.

( %i3) rowop(%,2,1,1/2);

( %o3)

[2 −3 −1

05

2−5

2

]

12.6 Autovalores y autovectores

charpoly(M,x) calcula el polinomio característico vin-culado a la matriz M , en términos dela variable x

eigenvalues(M) devuelve una lista con dos sublistas, laprimera de éstas conteniendo los valo-res propios de la matrizM y la segun-da, conteniendo sus correspondientesmultiplicidades

eigenvectors(M) devuelve una lista con dos elemen-tos; el primero está formado poreigenvalues(M), el segundo es unalista de listas de vectores propios, unapor cada valor propio, pudiendo habermás de un vector propio en cada lista

Obtención de autovalores y autovectores asociados a una matriz dada.

Maxima

He aquí una matriz 3× 3.

( %i1) c[i,j]:=i+j+1$ C:genmatrix(c,3,3);

( %o1)

3 4 54 5 65 6 7

Page 174: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

160 Cap. 12. Matrices

Maxima

Éste es el polinomio característico, en términos de la variable x, asociado a la

matriz C.

( %i2) charpoly(C,x),expand;

( %o2) −x3 + 15x2 + 6x

Maxima

Aquí se tienen los valores propios, y su respectiva multiplicidad, asociados a la

matriz C.

( %i3) eigenvalues(C);

( %o3)[[−√249−15

2 ,√249+15

2 , 0], [1, 1, 1]

]

Maxima

Finalmente, se muestran los valores propios, con su respectiva multiplicidad, y

vectores propios de la matriz C.

( %i4) eigenvectors(C);

( %o4)[[[−√249−15

2 ,√249+15

2 , 0], [1, 1, 1]

],[[[

1,−√249−1928 ,−

√3√83−5

14

]],[[

1,√249+1928 ,

√3√83+5

14

]], [[1,−2, 1]]

]]

Page 175: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO13

Conjuntos

Los conjuntos en Maxima son expresiones que comprenden el opera-dor set y cuyos argumentos son los elementos del mismo (ver sección19.2). Esto indica que Maxima hace una diferencia entre conjuntos ylistas, lo que permite trabajar con conjuntos cuyos elementos puedanser también conjuntos o listas.

Maxima dispone de funciones para realizar operaciones con con-juntos, como la intersección o la unión. No obstante, debe tenerse encuenta que los conjuntos deben ser �nitos y de�nidos por enumera-ción.

13.1 Generación de conjuntos

set(a1, . . . , an) construye un conjunto cuyos elemen-tos son a1, . . . , an

{a1, . . . , an} equivale a set(a1, . . . , an)

set() genera un conjunto vacío

{} equivale a set()

makeset(f, vars, s) genera un conjunto cuyos miembros segeneran a partir de f , siendo vars unalista de variables de f y s un conjuntoo lista de listas

Funciones para generar conjuntos.

161

Page 176: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

162 Cap. 13. Conjuntos

Maxima

He aquí un conjunto formado por los elementos a, b, c, d.

( %i1) {a,b,c,d};

( %o1) {a, b, c, d}

Maxima

Al ingresar un conjunto cuyos elementos están desordenados y repetidos, éstos

son ordenados y uni�cados de forma automática.

( %i2) {c,e,f,f,a,b,c,d,a};

( %o2) {a, b, c, d, e, f}

Maxima

La función makeset permite generar un conjunto. En este caso se considera una

función de dos variables, la cual es aplicada a una lista de listas.

( %i3) makeset(i/j,[i,j],[[1,a],[2,b],[3,c],[4,d]]);

( %o3){

1a ,

2b ,

3c ,

4d

}Maxima

He aquí otro conjunto generado con makeset. Ahora se considera una función de

una variable, la cual es aplicada a un conjunto de listas.

( %i4) makeset(x/2,[x],{[1],[2],[3],[4],[5]});

( %o4){

12 , 1,

32 , 2,

52

}Maxima

Las operaciones aritméticas son �listables�.

( %i5) x^[1,2,3];

( %o5)[x, x2, x3

]Maxima

Sin embargo, las operaciones aritméticas no son �conjuntables�.

( %i6) x^{1,2,3};

Page 177: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 13.2. Conversiones entre conjuntos y listas 163

( %o6) x{1,2,3}

Maxima

La sustitución si es �conjuntable�, aunque siempre respetando la uni�cación.

( %i7) {x,x^2,x^3,x+1},x=1;

( %o7) {1, 2}

13.2 Conversiones entre conjuntos y listas

setify(list) forma un conjunto a partir de losmiembros de la lista list

fullsetify(list) sustituye los operadores de lista pre-sentes en conj por operadores de con-juntos

Conversiones de listas a conjuntos.

listify(conj) forma una lista a partir de los miem-bros del conjunto conj

full_listify(conj) sustituye los operadores de conjuntopresentes en conj por operadores delistas

Conversiones de conjuntos a listas.

Maxima

Esto convierte una lista en conjunto.

( %i1) setify([a,c,d,e]);

( %o1) {a, c, d, e}

Maxima

Esto convierte un conjunto en lista.

( %i2) listify({a,b,c,d});

Page 178: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

164 Cap. 13. Conjuntos

( %o2) [a, b, c, d]

Maxima

Esto sustituye todos los operadores de conjuntos a operadores de listas.

( %i3) fullsetify([a,[b,c],[e,[f,g]],k]);

( %o3) {a, {b, c} , {e, {f, g}} , k}

Maxima

Esto sustituye todos los operadores de listas a operadores de conjuntos.

( %i4) full_listify(%);

( %o4) [a, [b, c] , [e, [f, g]] , k]

Considerando que, cualquier lista puede convertirse a conjunto,entonces puede usarse create_list para generar una lista y luegoconvertir la lista obtenida a conjunto. De esta manera se tiene unaforma indirecta para generar conjuntos.

13.3 Elección de elementos de un conjunto

part(conj, i) devuelve el i -ésimo elemento del con-junto conj respetando el ordenamien-to y la uni�cación internos

first(conj),second(conj), . . . ,

tenth(conj)

devuelve el primer, segundo, ..., déci-mo elemento de conj

last(conj) devuelve el último elemento de conj

Selección de partes de un conjunto.

Maxima

Aquí se obtiene el primer elemento de un conjunto que ha sido ordenado y uni�-

cado internamente.

( %i1) part({b,c,c,d,a},1);

Page 179: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 13.4. Prueba y búsqueda de elementos de un conjunto 165

( %o1) a

Maxima

El quinto elemento no existe.

( %i2) part({b,c,c,d,a},5);part: fell o� the end.- - an error. To debug this try: debugmode(true);

13.4 Prueba y búsqueda de elementos de un con-

junto

Existe una función especí�ca para averiguar si un elemento pertenecea un conjunto, no obstante hay funciones genéricas alternativas paraello.

subset(conj, P ) extrae todos los elementos de un con-junto conj que satisfacen el predicadoP

subsetp(conj1, conj2) devuelve true si y sólo si con1 ⊆ conj2elementp(x, conj) devuelve true si y sólo si x es elemento

del conjunto conj

member(x, conj) devuelve true si y sólo si x es miembrodel conjunto conj

freeof(x, conj) prueba si x no ocurre en ninguna parteconj

freeof(x1 . . . , xn, conj) equivale a freeof(x1; conj) and . . .and freeof(xn; conj)

Prueba de elementos de un conjunto.

Maxima

En este ejemplo se extrae, del conjunto {1, 2, 3, 4, 5, 7} , el subconjunto de todos

los elementos pares.

( %i1) subset({1,2,3,4,5,7},evenp);

Page 180: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

166 Cap. 13. Conjuntos

( %o1) {2, 4}

Maxima

Aquí se extrae, del conjunto {1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

t tales que t < 4.

( %i2) subset({1,2,3,4,5,7},lambda([t],is(t<4)));

( %o2) {1, 2, 3}

Maxima

Aquí se extrae, del conjunto {1, 2, 3, 4, 5, 7} , el subconjunto de todos los elementos

t tales que mod(t, 3) = 1.

( %i3) subset({1,2,3,4,5,7},

lambda([t],is(mod(t,3)=1)));

( %o3) {1, 4, 7}

Maxima

Esto veri�ca una contención de conjuntos.

( %i4) subsetp({1,2},{5,6,7,9,1,2});

( %o4) true

Maxima

Esto veri�ca que el elemento 2 pertenece al conjunto {2, 4, 5, 7}.

( %i5) elementp(2,{2,4,5,7});

( %o5) true

Maxima

La función genérica member realiza los mismo.

( %i6) member(2,{2,4,5,7});

( %o6) true

Page 181: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 13.5. Agregar y quitar elementos de un conjunto 167

Maxima

La función genérica freeof indica que 2 forma parte del conjunto {2, 4, 5, 7}.

( %i7) freeof(2,{2,4,5,7});

( %o7) false

Maxima

La función genérica freeof indica que 6 y 5 no forman parte del conjunto {1, 2, 3}.

( %i8) freeof(6,5,{1,2,3});

( %o8) true

13.5 Agregar y quitar elementos de un conjunto

Es posible agregar y/o quitar elementos de un conjunto dado mediantedos funciones especí�cas de Maxima.

adjoin(x, conj) devuelve el conjunto conj con el ele-mento x insertado

disjoin(x, conj) devuelve el conjunto conj sin el ele-mento x

Funciones para agregar y quitar elementos de un conjunto.

Maxima

Aquí se inserta el elemento 2 en el conjunto {1, 4, 7}.

( %i1) adjoin(2,{1,4,7});

( %o1) {1, 2, 4, 7}

Maxima

Esto elimina el elemento 4 de {1, 4, 7}.

( %i2) disjoin(4,{1,4,7});

( %o2) {1, 7}

Page 182: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

168 Cap. 13. Conjuntos

13.6 Reorganización de conjuntos

flatten(conj) elimina todos los niveles en conj

set_partitions(conj) devuelve el conjunto de todas las par-ticiones de conj

set_partitions(conj, n) devuelve un conjunto con todas lasdescomposiciones de conj en n conjun-tos no vacíos disjuntos

Reorganización de conjuntos anidados.

Maxima

He aquí un conjunto al que se le eliminan todos los niveles.

( %i1) flatten({4,{1,3},{4,{7,8}},10});

( %o1) {1, 3, 4, 7, 8, 10}

Maxima

Esto da todas las particiones de {a, b, c}; y, seguidamente las descomposiciones

del mismo {a, b, c} en dos conjuntos no vacíos disjuntos.

( %i2) set_partitions({a,b,c});

( %o2) {{{a} , {b} , {c}} , {{a} , {b, c}} , {{a, b} , {c}} ,{{a, b, c}} , {{a, c} , {b}}}

( %i3) set_partitions({a,b,c},2);

( %o3) {{{a} , {b, c}} , {{a, b} , {c}} , {{a, c} , {b}}}

13.7 Operaciones con conjuntos

Las más comunes operaciones matemáticas con conjuntos están im-plementadas en Maxima.

Page 183: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 13.7. Operaciones con conjuntos 169

union(conj1, . . . , conjn) devuelve la unión de los conjuntosconj1, . . . , conjn

intersection(conj1,. . . , conjn)

devuelve la intersección de los conjun-tos conj1, . . . , conjn

setdifference(conj1,conj2)

devuelve la diferencia de los conjuntosconj1, conj2

powerset(conj) devuelve el conjunto potencia de conj

subsetp(conj1, conj2) devuelve true si y sólo si el conjuntoconj1 es un subconjunto de conj2

setequalp(conj1, conj2) devuelve true si y sólo los conjuntosconj1 y conj2 son iguales

symmdifference(conj1,conj2)

devuelve la diferencia simétrica de losconjuntos conj1, conj2

cartesian_product(conj1, . . . , conjn)

devuelve el producto cartesiano de losconjuntos conj1, . . . , conjn en formade listas

disjointp(conj1, conj2) devuelve true si y sólo si los conjuntosconj1 y conj2 son disjuntos

equiv_classes(conj, F ) devuelve el conjunto de las clases deequivalencia del conjunto conj respec-to de la relación de equivalencia F

Operaciones con conjuntos.

Maxima

Aquí se de�nen los conjuntos A y B.

( %i1) A:{a,b,c,d}$ B:{c,d,e,f,g}$

Maxima

Esto da la unión de A y B.

( %i3) union(A,B);

( %o3) {a, b, c, d, e, f, g}

Page 184: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

170 Cap. 13. Conjuntos

Maxima

Y esto la intersección.

( %i4) intersection(A,B);

( %o4) {c, d}

Maxima

La diferencia A−B se calcula así.

( %i5) setdifference(A,B);

( %o5) {a, b}

Maxima

En este caso las diferencias simétricas AB y B A son iguales.

( %i6) symmdifference(A,B);

( %o6) {a, b, e, f, g}

Maxima

He aquí el conjunto potencia del conjunto A.

( %i7) powerset(A);

( %o7) {{} , {a} , {a, b} , {a, b, c} , {a, b, c, d} , {a, b, d} , {a, c} ,{a, c, d} , {a, d} , {b} , {b, c} , {b, c, d} , {b, d} , {c} , {c, d} ,{d}}

Maxima

Esto da el producto cartesiano A×B.

( %i8) cartesian_product(A,B);

( %o8) {[a, c] , [a, d] , [a, e] , [a, f ] , [a, g] , [b, c] , [b, d] , [b, e] , [b, f ] ,[b, g] , [c, c] , [c, d] , [c, e] , [c, f ] , [c, g] , [d, c] , [d, d] , [d, e] ,[d, f ] , [d, g]}

Page 185: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 13.8. Funciones adicionales para conjuntos 171

Maxima

Esto indica que los conjuntos A y B no son disjuntos.

( %i9) disjointp(A,B);

( %o9) false

Maxima

En este ejemplo, las clases de equivalencia son números que di�eren en un múltiplo

de 3.

( %i10) equiv_classes({1,2,3,4,5,6,7},lambda([s,t],

mod(s-t,3)=0));

( %o10) {{1, 4, 7} , {2, 5} , {3, 6}}

13.8 Funciones adicionales para conjuntos

setp(expr) devuelve true si y sólo si expr es unconjunto de Maxima

emptyp(conj) devuelve true si y sólo si conj es elconjunto vacío

cardinality(conj) devuelve el número de elementos delconjunto conj

map(f, {a1, . . . , an}) devuelve {f(a1), . . . , f(an)}map(f, {a1, . . . , an} ,{b1, . . . , bn} , . . .)

devuelve el conjunto {f(a1, b1, . . .),. . . , f(an, bn, . . .)}, siempre que losconjuntos estén bien ordenados

Algunas funciones adicionales.

Maxima

He aquí el cardinal de un conjunto.

( %i1) cardinality({a,b,c,a});

( %o1) 4

Page 186: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

172 Cap. 13. Conjuntos

Maxima

Para conjuntos bien ordenados, al aplicar la función map, se obtiene un resultado

acorde con el ordenamiento de tales conjuntos.

( %i2) map(f,{a,b,c},{x,y,z});

( %o2) {f(a, x), f(b, y), f(c, z)}

Maxima

En este caso primero son ordenados los conjuntos y luego devuelve un resultado

que coincide con el de ( %o37) .

( %i3) map(f,{c,a,b},{y,x,z});

( %o3) {f(a, x), f(b, y), f(c, z)}

Page 187: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO14

Grá�cos

Maxima no ha sido programado para elaborar sus propios grá�cos, demodo que alternativamente utiliza un programa externo que realizaesta tarea. El usuario se limita a ordenar el tipo de grá�co deseado yMaxima se encarga de comunicárselo al programa grá�co que esté ac-tivo en ese momento, que por defecto será Gnuplot. La otra aplicacióngrá�ca que utiliza Maxima es Openmath1.

Las funciones plot2d y plot3d2 son funciones para obtener grá�-cos que están de�nidas en el propio núcleo de Maxima (téngase pre-sente que existen otras funciones similares de�nidas en un paquetellamado draw3).

Lo antes mencionado ocasiona que los grá�cos generados con lasfunciones plot2d y plot3d se muestren en una ventana aparte delcuaderno de trabajo actual. No obstante, en contraparte, wxMaxima

incorpora funciones alternativas, cuyos nombres se obtienen antepo-niendo wx a plot2d y plot3d, respectivamente. La diferencia con lasanteriores es que éstas funciones devuelven todos los grá�cos en elcuaderno de trabajo actual.

1Tanto Gnuplot como Openmath son softwares libres y una copia de cada unode ellos es distribuida conjuntamente con Maxima.

2Con plot2d y plot3d es posible dar instrucciones tanto a Gnuplot como aOpenmath sin que sea necesario tener conocimiento alguno de la sintaxis de estosprogramas.

3El paquete draw (ver el capítulo 16) está orientado exclusivamente a Gnuplot.Éste incorpora las funciones draw2d y draw3d, las cuales dan resultados similaresa plot2d y plot3d. Además incorpora funciones para gra�car funciones de�nidasimplícitamente.

173

Page 188: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

174 Cap. 14. Grá�cos

14.1 Grá�cos básicos

Por comodidad, la mayoría de los ejemplos de esta sección se eje-cutarán con las funciones incorporadas en wxMaxima; sin embargo,todos estos ejemplos pueden ser ejecutados sin ningún problema conlas funciones estándar de Maxima.

plot2d(f, [x, xmin, xmax]) muestra un grá�co de y = f(x), conxmin ≤ x ≤ xmax, en una ventana in-dependiente

plot2d([f1, . . . , fn] ,[x, xmin, xmax])

muestra un grá�co de y = f1(x),. . . , y = fn(x), con xmin ≤ x ≤ xmax,en una ventana independiente

wxplot2d(f, [x, xmin,xmax])

muestra un grá�co de y = f(x), conxmin ≤ x ≤ xmax, en el cuaderno detrabajo actual

wxplot2d([f1, . . . , fn] ,[x, xmin, xmax])

muestra un grá�co de y = f1(x),. . . , y = fn(x), con xmin ≤ x ≤ xmax,en el cuaderno de trabajo actual

Trazado básico de funciones.

Maxima

Esto traza un grá�co de sen(x) como una función de x. Para x variando desde 0

hasta 2π.

( %i1) wxplot2d(sin(x),[x,0,2* %pi]);

( %t1)

( %o1)

Page 189: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.1. Grá�cos básicos 175

Maxima

Puede darse una lista de funciones para que sean trazadas. Por defecto, a cada

función se le asigna un color especí�co.

( %i2) wxplot2d([sin(x),sin(2*x),sin(3*x)],

[x,0,2* %pi]);

( %t2)

( %o2)

Maxima

Aquí se utiliza la función create_list para generar una lista de las funciones de

Bessel, Jn(x), con n variando desde 1 hasta 4. Luego se devuelve la grá�ca de

dichas funciones.

( %i3) wxplot2d(create_list(bessel_j(n,x),n,1,4),

[x,0,10]);

( %t3)

( %o3)

Page 190: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

176 Cap. 14. Grá�cos

14.2 Opciones

Hay muchas opciones para escoger en el trazado de grá�cos. La ma-yoría de las veces, la aplicación grá�ca invocada por Maxima proba-blemente tomará opciones bastante buenas. Sin embargo, si se quiereobtener los mejores dibujos posibles para objetivos particulares, de-bería ayudarse a la aplicación en particular en la elección de algunasde sus opciones.

Hay un mecanismo general para especi�car opciones en las funcio-nes de Maxima. Cada opción tiene un nombre de�nido. Como últimosargumentos de una función, como plot2d (wxplot2d), se puede incluiruna secuencia de la forma [nombre, valor] para especi�car los valoresde varias opciones. A cualquier opción para la cual no se indique unvalor explícito se le asigna su valor por defecto.

plot2d(f, [x, xmin, xmax] ,[opcion, valor])

devuelve un grá�co, especi�cando unvalor particular para una opción, enotra ventana

Elección de una opción para el trazado de un gráfico.

Opción Val. por defecto Descripción

y no presenta rango vertical del grá�co

nticks 29 número inicial de puntos uti-lizados por el procedimientoadaptativo para la represen-tación de funciones

adapt_depth 10 número máximo de particio-nes utilizado por el algoritmoadaptativo de representacióngrá�ca

xlabel x etiqueta del eje horizontal engrá�cos 2d

ylabel nombre de lafunción f, dada

etiqueta del eje vertical engrá�cos 2d

Algunas de las opciones de plot2d (wxplot2d).

Page 191: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.2. Opciones 177

OpciónVal. por defecto Descripción

logx no presenta hace que el eje horizontal enlos grá�cos 2d se dibuje en laescala logarítmica (no necesi-ta de parámetros adicionales)

logy no presenta hace que el eje vertical en losgrá�cos 2d se dibuje en la es-cala logarítmica (no necesitade parámetros adicionales)

legend nombre de lafunción f, dada

etiquetas para las expresio-nes de los grá�cos 2d. Si haymás expresiones que etique-tas, éstas se repetirán

style lines,1,1 estilos a utilizar para las fun-ciones o conjuntos de datosen grá�cos 2d

gnuplot_

preamble

� � introduce instrucciones degnuplot antes de que se hagael dibujo

plot_format gnuplot determina qué programa grá-�co se va a utilizar

gnuplot_term default establece el terminal de sali-da para Gnuplot; algunos va-lores posibles son: dumb, png,jpg, eps, pdf, gif, svg, etc. (es-ta opción únicamente puedeutilizarse con plot2d, y nocon wxplot2d)

plot_realpart false si plot_realpart vale true,se representará la parte realde un valor complejo

run_viewer true controla si el visor apropia-do para la salida grá�ca debeejecutarse o no

Algunas de las opciones de plot2d (wxplot2d).

Page 192: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

178 Cap. 14. Grá�cos

Maxima

He aquí un grá�co para el cual todas las opciones tienen asignados sus valores por

defecto.

( %i1) wxplot2d(sin(x^2),[x,0,3]);

( %t1)

( %o1)

Maxima

La instrucción set size ratio 1 iguala las escalas para los ejes x e y; y la instruc-

ción set grid añade una rejilla al grá�co. Ambas instrucciones corresponden a la

opción gnuplot_preamble.

( %i2) wxplot2d(sin(x^2),[x,0,3],[gnuplot_preamble,

�set size ratio 1; set grid�]);

( %t2)

( %o2)

Page 193: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.2. Opciones 179

Maxima

Esto especi�ca el estilo del grá�co y la etiqueta para el eje y.

( %i3) wxplot2d(sin(x^2),[x,0,3],[style,[points,3,2,7]],

[ylabel,y]);

( %t3)

( %o3)

Maxima

Las expresiones que se dan como etiquetas puede ser cualquier porción de texto,

pero ésta debe ponerse entre comillas.

( %i4) wxplot2d(sin(x^2),[x,0,3],

[xlabel,�Porción de texto para x�],

[ylabel,�Porción de texto para y�]);

( %t4)

( %o4)

Page 194: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

180 Cap. 14. Grá�cos

Maxima

Es posible trazar funciones que tienen singularidades. Para este efecto resulta

bastante útil la opción y que permite indicar el rango.

( %i5) wxplot2d(tan(x),[x,-3,3],[y,-10,10]);plot2d: some values were clipped.

( %t5)

( %o5)

14.3 Grá�cos de puntos y líneas

Con plot2d (wxplot2d) pueden gra�carse puntos del plano (aislados)o poligonales que unen puntos del plano.

plot2d([ discrete,[[x1, y1] , . . . , [xn, yn]] ] ,

[style, points])

devuelve el grá�co de los puntos aisla-dos (x1, y1), . . . (xn, yn)

plot2d([ discrete,[x1, . . . , xn] , [y1, . . . , yn] ] ,

[style, points])

devuelve el grá�co de los puntos aisla-dos (x1, y1), . . . (xn, yn)

plot2d([ discrete,[[x1, y1] , . . . , [xn, yn]] ] ,

[style, lines])

devuelve el grá�co de una poligonalque une los puntos (x1, y1), . . . (xn, yn)

Gráficos de puntos aislados y poligonales.

Page 195: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.3. Grá�cos de puntos y líneas 181

plot2d([ discrete,[x1, . . . , xn] , [y1, . . . , yn] ] ,

[style, lines])

devuelve el grá�co de una poligonalque une los puntos (x1, y1), . . . (xn, yn)

plot2d([ discrete,[[x1, y1] , . . . , [xn, yn]] ] )

devuelve el grá�co de una poligonalque une los puntos (x1, y1), . . . (xn, yn)

plot2d([ discrete,[x1, . . . , xn] , [y1, . . . , yn] ]

)

devuelve el grá�co de una poligonalque une los puntos (x1, y1), . . . (xn, yn)

Gráficos de puntos aislados y poligonales.

Maxima

De esta forma se gra�ca una lista de puntos aislados.

( %i1) pts:create_list([i,sin(i)],i,0,5);

( %o1) [[0, 0] , [1, sin(1)] , [2, sin(2)] , [3, sin(3)] , [4, sin(4)] ,[5, sin(5)]]

( %i2) wxplot2d([discrete,pts],[style,points]);

( %t2)

( %o2)

Cabe destacar que los estilos points y lines también aceptanopciones. Éstas deben ingresarse como una secuencia de tres núme-ros enteros positivos de la forma [points n1, n2, n3] (en el caso depoints), o dos números enteros positivos de la forma [lines n1, n2](en el caso de lines). En ambos casos el primer valor, n1, correspon-de al tamaño de los puntos o grosor de la línea, según sea el caso; elsegundo, n2, al color (1 ≡ azul, 2 ≡ rojo, 3 ≡ verde, 4 ≡ violeta, 5 ≡negro, 6 ≡ celeste). Finalmente para points está el tercer valor, n3,que corresponde a la forma en que se visualiza el punto (1 ≡ disco,2 ≡ círculo, 3 ≡ cruz, 4 ≡ aspa, 5 ≡ asterisco, 6 ≡ cuadrado relleno,

Page 196: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

182 Cap. 14. Grá�cos

7 ≡ cuadrado sin rellenar, 8 ≡ triángulo relleno, 9 ≡ triángulo sin

rellenar, 10 ≡ triángulo relleno invertido, 11 ≡ triángulo sin rellenar

invertido, 12 ≡ rombo relleno, 13 ≡ rombo sin rellenar).

Maxima

Aquí se muestran los puntos de la salida %o9 con opciones que cambian el tamaño,

color y forma de los mismos.

( %i3) wxplot2d([discrete,pts],[style,[points,3,2,5]]);

( %t3)

( %o3)

Maxima

Aquí se muestran los puntos de la salida %o9 unidos por una línea quebrada.

( %i4) wxplot2d([discrete,pts],[style,lines]);

( %t4)

( %o4)

Page 197: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.4. Grá�cos paramétricos y polares 183

14.4 Grá�cos paramétricos y polares

plot2d([parametric,fx, fy, [t, tmin, tmax]])

traza un grá�co paramétrico

plot2d([[parametric, fx, fy,

[t, tmin, tmax]] ,[parametric, gx, gy,[s, smin, smax]] , . . .])

traza varias curvas paramétricas jun-tas

Gráficos de curvas definidas en forma paramétrica.

plot2d(f(t),[t, tmin, tmax] ,

[gnuplot_preamble,�set polar�])

traza un grá�co polar

plot2d([f(t), g(t), . . .][t, tmin, tmax] ,

[gnuplot_preamble,�set polar�])

traza varias curvas polares juntas

Gráficos de curvas definidas en forma polar.

Maxima

Esto devuelve la grá�ca de la curva t→ (cos(t), sen(t)) para t ∈ [0, 2π].

( %i1) wxplot2d([parametric,cos(t),sin(t),[t,0,2* %pi]]);

( %t1)

( %o1)

Page 198: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

184 Cap. 14. Grá�cos

Maxima

Utilizando las opciones adecuadas es posible mejorar la presentación de la salida

( %t1) .

( %i2) wxplot2d(

[parametric,cos(t),sin(t),[t,0,2* % pi]],

[gnuplot_preamble,�set size ratio 1�],

[nticks,100]

);

( %t2)

( %o2)

Maxima

Esto devuelve la grá�ca de ρ = sen(2t).

( %i3) wxplot2d(sin(2*t),[t,0,2* %pi],

[gnuplot_preamble,�set polar�],[x,-1,1]);

( %t3)

( %o3)

Page 199: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.5. Combinación de grá�cos 185

14.5 Combinación de grá�cos

Adicionalmente, la función plot2d (wxplot2d) permite combinar va-rios tipos de grá�cos (salvo los polares) y presentarlos en un mismosistema coordenado.

Maxima

Aquí se combinan varios tipos de grá�cos.

( %i1) pts:create_list([i,sin(i)] , i, 0, 5) $( %i2) wxplot2d([

[parametric,cos(t),sin(t)],[t,0,2* %pi]

sin(x^2),

[discrete,pts]]

[x,-2,6],[y,-2,6],

[style,lines,lines,points]

[gnuplot_preamble,�set size ratio 1�]);plot2d: expression evaluates to non-numeric valueeverywhere in plotting range.

( %t2)

( %o2)

14.6 Grá�cos de super�cies tridimensionales

Para gra�car super�cies en R3 se utiliza la función plot3d (wxplot3d).Es preciso mencionar que, al utilizar la función wxplot3d el grá�coresultante será mostrado en el cuaderno de trabajo actual; no obs-tante, se pierde la interacción en tiempo real con el grá�co. Esto nosucede si se utiliza la función plot3d, ya que en este caso basta con

Page 200: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

186 Cap. 14. Grá�cos

hacer clic sobre la �gura y, sin soltar el botón del mouse, arrastrarlopara que la super�cie gire en tiempo real.

plot3d(f, [x, xmin, xmax] ,[y, ymin, ymax])

muestra un grá�co de z = f(x, y), conxmin ≤ x ≤ xmax y ymin ≤ y ≤ ymax,en una ventana independiente; en estaventana es posible interactuar en tiem-po real con dicho grá�co

wxplot3d(f,[x, xmin, xmax] ,[y, ymin, ymax])

muestra un grá�co de z = f(x, y), conxmin ≤ x ≤ xmax y ymin ≤ y ≤ ymax,en el cuaderno de trabajo actual y nohay interacción en tiempo real con elgrá�co

Trazado básico de funciones 3D.

Al igual que plot2d (wxplot2d), la función plot3d (wxplot3d)también incluye una serie de opciones para obtener los mejores dibujosposibles.

Maxima

Esto traza un grá�co de la función f(x, y) = sen(xy).

( %i1) wxplot3d(sin(x*y),[x,0,3],[y,0,3]);

( %t1)

( %o1)

Page 201: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.6. Grá�cos de super�cies tridimensionales 187

Opción Val. por defecto Descripción

grid 30, 30 establece el número de pun-tos de la rejilla en las direc-ciones x e y

transform_xy false se usa para transformar lastres coordenadas

gnuplot_term default similar a plot2d (pág. 177)

gnuplot_

preamble

� � similar a plot2d (pág. 177)

plot_format gnuplot similar a plot2d (pág. 177)

Algunas de las opciones de plot3d (wxplot3d)

Maxima

Esto traza un grá�co de f(x, y) = sen(xy) con el programa grá�co openmath.

( %i2) plot3d(sin(x*y),[x,0,3],[y,0,3],

[plot_format,openmath]);

( %o2)

Figura 14.1: Grá�co obtenido a partir de ( %i2) .

Page 202: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

188 Cap. 14. Grá�cos

Maxima

Esto traza un grá�co tridimensional de la super�cie de�nida por r0·33 cos( th3) en

coordenadas cilíndricas. En este caso se ha realizado una transformación de coor-

denadas. El usuario puede de�nir sus propias transformaciones usando la función

make_transform(vars, fx, fy , fz). Por ejemplo, aquí se ha usado la transformación

polar_to_xy : make_transform([r, th, z] , r ∗ cos(th), r ∗ sin(th), z).

( %i3) wxplot3d(r^.33*cos(th/3),

[r,0,1],[th,0,6* %pi],

[grid,12,80],

[transform_xy,polar_to_xy]);

( %t3)

( %o3)

plot3d (wxplot3d) también permite trazar la grá�ca de una su-per�cie de�nida en forma paramétrica; sin embargo, no permite gra-�car curvas en R3.

plot3d([x(u, v), y(u, v),z(u, v)] , [u, umin, umax] ,

[v, vmin, vmax])

traza el grá�co de una super�cie para-métrica en una ventana independien-te, siendo posible la interacción entiempo real con dicho grá�co

wxplot3d([x(u, v), y(u, v),z(u, v)] , [u, umin, umax] ,

[v, vmin, vmax])

traza el grá�co de una super�cie pa-ramétrica en el cuaderno de trabajoactual, siendo imposible la interacciónen tiempo real con dicho grá�co

Trazado básico de superficies definidas en forma paramétrica.

Page 203: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.6. Grá�cos de super�cies tridimensionales 189

Maxima

Esto devuelve la grá�ca de la esfera unitaria de�nida paramétricamente mediante

(u, v)→ (senu sen v, cosu sen v, cos v), 0 ≤ u ≤ 2π, −π2≤ v ≤ π

2.

( %i4) wxplot3d([cos(u)*cos(v),sin(u)*cos(v),sin(v)],

[u,0,2* %pi],[v,- %pi/2, %pi/2]);

( %t4)

( %o4)

Maxima

Utilizando las opciones adecuadas es posible mejorar la presentación de la salida

%o21.

( %i5) wxplot3d([cos(u)*cos(v),sin(u)*cos(v),sin(v)],

[u,0,2* %pi],[v,- %pi/2, %pi/2],

[gnuplot_preamble,�set size ratio 1�]);

( %t5)

( %o5)

Page 204: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

190 Cap. 14. Grá�cos

14.7 Grá�cos de densidad y contornos

Un grá�co de contorno le da esencialmente un �mapa topográ�co� deuna función. Los contornos unen puntos sobre la super�cie que tienenla misma altura. El valor por defecto permite obtener contornos co-rrespondientes a una secuencia de valores de z igualmente espaciados.

plot3d(f(x, y),[x, xmin, xmax] ,[y, ymin, ymax] ,

[gnuplot_preamble,�set pm3d map�])

traza un grá�co de densidad def(x, y) en el rectángulo [xmin, xmax]×[ymin, ymax]

contour_plot(f(x, y),[x, xmin, xmax] ,[y, ymin, ymax])

dibuja las curvas de nivelde f(x, y) en el rectángulo[xmin, xmax] × [ymin, ymax] (cuales-quiera otros argumentos adicionalesse tratan como en plot3d)

Gráficos de contornos.

Maxima

Esto traza un grá�co de densidad de la función f(x, y) = sen(xy) en el rectángulo

[0, 3]× [0, 3].

( %i1) wxplot3d(sin(x*y),[x,0,3],[y,0,3],

[gnuplot_preamble,�set pm3d map�]);

( %t1)

( %o1)

Page 205: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.8. Grá�cos animados 191

Maxima

He aquí un grá�co de contorno de f(x, y) = x2 + y2 − 1.

( %i2) contour_plot(x^2+y^2-1,[x,-1,1],[y,-1,1]);

( %t2)

( %o2)

14.8 Grá�cos animados

También es posible crear animaciones, aunque únicamente en el en-torno de wxMaxima. Para tal �n se utiliza la función with_slider4

con la cual se genera un grá�co idéntico al que se genera con wxplot2d,sin embargo dicho grá�co puede ser animado selecionándolo y pulsan-do luego el botón Comenzar animación, del cuadro de controles,de la barra de herramientas.

Figura 14.2: Cuadro de controles, ubicado en la barra de herramien-tas, para la animación de grá�cos.

with_slider función para animar grá�cos dewxplot2d

Obtención de gráficos animados.

4Es importante señalar que adicionalmente estan incluidas las funcioneswith_slider_draw y with_slider_draw3d relacionadas con las funciones draw ydraw3d del paquete draw.

Page 206: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

192 Cap. 14. Grá�cos

Maxima

Esto genera un grá�co listo para ser animado. Para conseguir la animación primero

se selecciona el grá�co y luego se pulsa el botón , del cuadro de controles, y

automáticamente ésta es generada. Para detenerla basta pulsar el botón , del

mismo cuadro. También es posible navegar a través de cada cuadro de la animación

con tan sólo arrastrar a voluntad el botón , después de haber seleccionado

el grá�co.

( %i1) with_slider(a,[0,1,2,3,4,5],sin(x+a),

[x,-2* %pi,2* %pi],[y,-1.5,1.5],[color,red]);

( %t1)

( %o1)

Maxima

He aquí otro grá�co listo para animar.

( %i2) with_slider(f,[x,x^2,x^3,x^4],f,[x,-2,2]);

( %t2)

( %o2)

Page 207: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 14.8. Grá�cos animados 193

Maxima

Este es un grá�co más listo para animar.

( %i3) with_slider(a,[0,1,2,3,4,5],

[parametric,sin(t),sin(2*(t+a)),[t,0,2* %pi]],

[x,-1.5,1.5],[y,-1.5,1.5],[color,red],

[nticks,50]);

( %t3)

( %o3)

Page 208: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO15

Utilidades de los menúes de wxMaxima

wxMaxima contiene menús y cuadros de diálogo para realizar las ta-reas más rutinarias, facilitando así al usuario novel el explorar lascaracterísticas de Maxima.

En este capítulo repasaremos las principales opciones de los me-núes incorporados en la barra de menúes de wxMaxima.

15.1 El menú Archivo

El menú Archivo incluye las opciones (ver Fig. 15.1):

Abrir Permite abrir una sesión previamente guardada,

Abrir sesión reciente Permite abrir una sesión recientemente guar-dada,

Guardar Permite guardar la sesión actual,

Guardar como Permite guardar, con otro nombre, la sesión actual,

Cargar paquete Permite inicializar un paquete indicando su ubica-ción,

Archivo por lotes Permite inicializar y traducir un paquete, de ex-tensión mac, indicando su ubicación,

194

Page 209: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.1. El menú Archivo 195

Figura 15.1: Despliegue de opciones del menú Archivo.

Figura 15.2: Elección de la opción Cargar paquete.

Exportar Permite exportar archivos al LATEX y HTML (ver Cap.18),

Imprimir Permite realizar la impresión del cuaderno actual,

Salir Finaliza la sesión actual.

Por ejemplo, la �gura 15.2 muestra la elección de la opciónCargarpaquete (también puede hacerse presionando en simultáneo Ctrl+L).Después de elegir tal opción aparece el cuadro de la �gura 15.3 en elque se elegirá el paquete a cargar. Luego de indicar el tipo (que puedeser mac o lisp) y el nombre del paquete (teniendo en cuenta la rutaespecí�ca de donde esta guardado el mismo) se da clic en el botón�� ��Abrir . En nuestro caso elegiremos el paquete table.lisp.1

1El autor de éste paquete es Ziga Lenarcic y puede descargarse des-de: http://sourceforge.net/apps/phpbb/maxima/viewtopic.php?f=3&t=5&sid=

716969b0736cc8416d959fdc5aded01e

Page 210: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

196 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.3: Cuadro para elegir el paquete a cargar.

Maxima

He aquí la sentencia que aparece después de haber elegido el paquete table.lisp

y presionar�� ��Abrir .

( %i1) load(�D:/maximapackages/table.lisp�)$

Maxima

Ahora es posible usar la función table para generar una lista de los valores sen(t),

con t variando de 0 a 2π y un incremento de π4.

( %i2) table(sin(t),[t,0,2* %pi, %pi/4]);

( %o2) [0, 1√2, 1, 1√

2, 0,− 1√

2,−1,− 1√

2, 0]

Maxima

En este caso se asume que el límite inferior es 1.

( %i3) table(i^2,[i,5]);

( %o3) [1, 4, 9, 16, 25]

Page 211: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.2. El menú Editar 197

15.2 El menú Editar

El menú Editar incluye las opciones (ver Fig. 15.4):

Deshacer Deshace cualquier entrada previa de una celda actual,

Cortar Corta cualquier entrada previa,

Copiar Copia cualquier entrada previa,

Copiar como texto Copia la selección de una salida (o un conjuntode celdas) como texto,

Copiar como LaTeX Copia la selección de una salida (o un con-junto de celdas) como código LATEX,

Copiar como imagen Copia la selección de una salida (o un con-junto de celdas) como imagen,

Pegar Permite pegar el contenido del portapapeles en el cuadernoactual,

Buscar Permite buscar una expresión en el cuaderno actual,

Seleccionar todo Selecciona el contenido de todas las celdas delcuaderno actual actual,

Guardar selección en imagen Guarda la selección de una salida(o un conjunto de celdas) como imagen,

Ampliar Permite ampliar el tamaño de los caracteres del cuadernoactual,

Disminuir Permite disminuir el tamaño de los caracteres del cua-derno actual,

Establecer aumento Permite establecer el aumento del tamaño delos caracteres del cuaderno actual,

Pantalla completa Permite realizar una vista en pantalla completadel cuaderno actual,

Preferencias Permite editar la con�guración de las opciones y esti-los (ver Sec. 3.3).

Page 212: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

198 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.4: Despliegue de opciones del menú Editar.

A modo de ejemplo, seleccionaremos las celdas del cuaderno de la�gura 15.5 luego elegimos la opción Copiar como LaTeX del menúEditar (ver Fig. 15.6). Al pegar el contenido del portapapeles en algúneditor de LATEX, y compilar, se obtiene la salida que se muestra acontinuación:

Salida obtenida, con el código guardado, mediante un editor de LATEX

(%i1) load("D:/maximapackages/table.lisp")$

(%i2) table(sin(t),[t,0,2*%pi,%pi/4]);

(%o2) [0,1√2, 1,

1√2, 0,− 1√

2,−1,− 1√

2, 0]

(%i3) table(i^2,[i,5]);

(%o3) [1, 4, 9, 16, 25]

En cambio, si se elige la opción Guardar selección en imagendel mismo menú, y se siguen las respectivas indicaciones, se obtieneun archivo png (ver Fig. 15.7), que puede insertarse luego en cualquierdocumento.

Page 213: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.2. El menú Editar 199

Figura 15.5: Cuaderno para el ejemplo de esta sección.

Figura 15.6: Eligiendo la opción opción Copiar como LaTeX delmenú Editar.

Figura 15.7: Imagen guardada mediante la opción Guardar selec-ción en imagen del menú Editar.

Page 214: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

200 Cap. 15. Utilidades de los menúes de wxMaxima

15.3 El menú Celda

El menú Editar incluye las opciones (ver Fig. 15.8):

Evaluar celdas Evalúa las celdas seleccionadas del cuaderno actual,

Evaluar todas las celdas Evalúa todas las celdas del cuaderno ac-tual,

Borrar todos los resultados Borrar todas las salidas del cuadernoactual,

Copiar entrada anterior Copia la entrada previa en el cuadernoactual,

Autocompletar Muestra un conjunto de posibles términos que com-pletarían la entrada actual,

Mostrar plantilla Muestra un conjunto de posibles plantillas quecompletarían la entrada actual,

Nueva celda de entrada Inserta una celda de entrada en el cua-derno actual(ver Sec. 3.2),

Nueva celda de texto Inserta una celda de texto el cuaderno ac-tual (ver Sec. 3.2),

Nueva celda de subsección Inserta una celda de subsección el cua-derno actual (ver Sec. 3.2),

Nueva celda de sección Inserta una celda de sección el cuadernoactual (ver Sec. 3.2),

Nueva celda de título Inserta una celda de título el cuaderno ac-tual (ver Sec. 3.2),

Insertar salto de página Inserta un salto de página en el cuadernoactual,

Insertar imagen Permite insertar una imagen en el cuaderno ac-tual (cabe destacar que tal imagen no prevalece al guardar elcuaderno),

Instrucción anterior Permite navegar hacia atrás entre las instruc-ciones dadas en el cuaderno actual (al estilo MatLab),

Page 215: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.3. El menú Celda 201

Figura 15.8: Despliegue de opciones del menú Celda.

Figura 15.9: Activando la opción Autocompletar.

Siguiente instrucción Permite navegar hacia adelante entre las ins-trucciones dadas en el cuaderno actual (al estilo MatLab).

Por ejemplo, si se desea calcular∫

cos(x) dx y no se recuerda elcomando especí�co, pero si se recuerda que empieza con int, entoncespuede usarse la opción Autocompletar para obtener una lista defunciones entre las que �gura: integrate (ver Figs. 15.9 y 15.10). Encambio, si se elige la opción Mostrar plantilla, aparecerá una listade plantillas (ver).

Page 216: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

202 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.10: Lista de funciones que empiezan con int.

Figura 15.11: Lista de plantillas que empiezan con int.

Figura 15.12: Plantilla para calcular una integral inde�nida.

Page 217: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.4. El menú Maxima 203

15.4 El menú Maxima

El menú Maxima incluye las opciones (ver Fig. 15.13):

Paneles Permite mostrar u ocultar paneles para Matemáticas gene-

rales, Estadística, Historial, Insertar celda y Barra de Herra-

mientas,

Interrumpir Interrumpe el cálculo actual,

Reiniciar Maxima Reinicia Maxima sin salir de wxMaxima 2,

Limpiar memoria Elimina todas las asignaciones de todas las va-riables,

Añadir ruta Especi�ca listas de directorios en los que deben buscarla funciones load, demo y algunas otras,

Mostrar funciones Genera una lista que contiene los nombres delas funciones de�nidas por el usuario,

Mostrar de�nición Permite obtener la de�nición de una funciónespecí�ca,

Mostrar variables Genera una lista de todas las variables que elusuario ha creado,

Borrar función Permite borrar todas o algunas de las funciones de-�nidas por el usuario,

Borrar variable Permite borrar todas o algunas de las variablescreadas por el usuario,

Conmutar pantalla de tiempo Permite que el tiempo de cálculoy el tiempo de retardo se impriman junto con la salida de cadaexpresión,

Cambiar pantalla 2D Permite seleccionar el algoritmo de salidamatemática (ver Sec. 4.4),

Mostrar formato TeX Devuelve la expresión actual en un formatoapropiado para para ser incorporado a un documento basado enTEX (ver Sec. 18.1).

Page 218: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

204 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.13: Despliegue de opciones del menú Maxima.

Figura 15.14: Eligiendo el panel Matemáticas Generales de la opciónPaneles del menú Maxima.

Por ejemplo para desplegar el panel Matemáticas generales elegi-mos dicho panel de la opción Paneles del menú Maxima (ver Figs.15.14 y 15.15)

15.5 El menú Ecuaciones

El menú Ecuaciones incluye las opciones (ver Fig. 15.16):

Resolver Permite resolver una ecuación algebraica,

Resolver (to_poly) Permite resolver una ecuación,

2Eso es útil cuando, por ejemplo, generamos sin querer un bucle en la ejecuciónde Maxima.

Page 219: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.5. El menú Ecuaciones 205

Figura 15.15: Panel Matemáticas Generales desplegado.

Calcular raíz Permite aproximar una raíz en un intervalo dado,

Raíces de un polinomio Aproxima las raíces reales y complejas deun polinomio ingresado en la celda de entrada actual,

Raíces reales grandes de un polinomio Aproxima las raíces realesy complejas, en formato big�oat, de un polinomio ingresado enla celda de entrada actual,

Resolver sistema lineal Permite resolver un sistema de ecuacioneslineales,

Resolver sistema algebraico Permite resolver un sistema de ecua-ciones algebraicas,

Eliminar variable Elimina variables de ecuaciones (o de expresio-nes que se supone valen cero) tomando resultantes sucesivas,

Resolver EDO Permite resolver ecuaciones diferenciales ordinariasde primer y segundo orden,

Problema de valor inicial (1) Permite añadir condiciones de va-lor inicial a la solución de una ecuación diferencial ordinaria deprimer orden,

Problema de valor inicial (2) Permite añadir condiciones de va-lor inicial a la solución de una ecuación diferencial ordinaria desegundo orden,

Page 220: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

206 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.16: Despliegue de opciones del menú Ecuaciones.

Figura 15.17: Uso de la opción Resolver EDO para dar solución ala ecuación diferencial y′ = y.

Problema de contorno Permite añadir condiciones de frontera a lasolución de una ecuación diferencial ordinaria de segundo orden,

Resolver EDO con Laplace Permite resolver sistemas de ecuacio-nes diferenciales ordinarias lineales utilizando la transformadade Laplace,

Condición inicial Permite asignar un determinado valor a ciertaexpresión dada en un punto especí�co.

Por ejemplo, para resolver el problema de valor inicial y′ = y,y(0) = 1; podemos usar las opciones Resolver EDO y Problemade valor inicial (1) tal como se muestra en las �guras .

Maxima

Resultados obtenidos al seguir los procesos indicados en las �guras 15.17 y 15.18.

( %i1) ode2('diff(y,x)=y,y,x);

( %o1) y = %c ∗ %ex

Page 221: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.6. El menú Álgebra 207

Figura 15.18: Uso de la opción Problema de valor inicial (1) pa-ra añadir la condición inicial y(0) = 1 a la ecuacióndiferencial de la �gura 15.17 (aquí se asume que talecuación �gura en la entrada actual).

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

( %o2) y = %ex

15.6 El menú Álgebra

El menú Álgebra incluye las opciones (ver Fig. 15.19):

Generar matriz Permite generar una matriz,

Generar matriz a partir de expresión Permite generar una ma-triz a partir de una expresión en términos de i, j,

Introducir matriz Permite generar una matriz introduciendo sustérminos en tiempo real,

Invertir matriz Devuelve la matriz inversa de una matriz actual-mente de�nida,

Polinomio característico Permite generar el polinomio caracterís-tico de cierta matriz especi�cando la variable,

Determinante Devuelve el determinante de la matriz actual,

Valores propios Devuelve los valores propios de la matriz actual,

Vectores propios Devuelve los vectores propios de la matriz actual,

Matriz adjunta Devuelve la matriz adjunta de la matriz actual,

Page 222: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

208 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.19: Despliegue de opciones del menú Álgebra.

Trasponer matriz Devuelve la traspuesta de la matriz actual,

Construir lista Permite construir una lista en términos de ciertaexpresión que depende de una variable,

Aplicar a lista Permite aplicar un operador a una lista,

Distribuir sobre lista Permite aplicar una función a cada uno delos elementos de una lista,

Distribuir sobre matriz Permite aplicar una función a cada unode los elementos de una matriz.

Maxima

Aquí se de�ne una función anónima.

( %i1) lambda([i,j],1/(i+j-1))$

Maxima

A continuación, usando la opción Generar matriz y llenando los respectivos

datos (ver Fig. 15.20) se obtiene:

( %i2) A: genmatrix( %,3,3);

( %o2)

1 12

13

12

13

14

13

14

15

Page 223: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.6. El menú Álgebra 209

Figura 15.20: Llenando los datos del cuadro asociado a la opciónGe-narar matriz.

Figura 15.21: Llenando los datos del cuadro asociado a la opciónGe-nerar matriz a partir de expresión.

Figura 15.22: Llenando los datos del cuadro asociado a la opción In-troducir matriz.

Maxima

No obstante, usando la opción Generar matriz a partir de expresión y lle-

nando los respectivos datos (ver Fig. 15.21) se obtiene:

( %i3) B:genmatrix(lambda([i,j],1/(i+j-1)),3,3);

( %o3)

1 12

13

12

13

14

13

14

15

Page 224: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

210 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.23: Introduciendo los elementos de la matriz, previamentecreada, en tiempo real.

Figura 15.24: Ingresando la función anónima que se desea aplicar acada uno de los elementos de la matriz actual.

Maxima

Eligiendo la opción Introducir matriz y llenando los datos respectivos para

de�nir una matriz (15.22) es posible introducir, en tiempo real, cada uno de los

elementos de dicha matriz (15.23).

( %i4) C: matrix(

[-1,5,2],

[1,0,4],

[-2,-3,1]

);

( %o4)

−1 5 21 0 4−2 −3 1

Page 225: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.7. El menú Análisis 211

Maxima

Si se quiere aplicar una función a cada uno de los elementos de la matriz actual, por

ejemplo la matriz C, puede usarse la opción Distribuir sobre matriz (15.24).

( %i5) matrixmap(lambda([h],x^h+1), %);

( %o5)

1x + 1 x5 + 1 x2 + 1x+ 1 2 x4 + 11x2 + 1 1

x3 + 1 x+ 1

15.7 El menú Análisis

El menú Análisis incluye las opciones (ver Fig. 15.25):

Integrar Permite calcular la integral inde�nida o de�nida de unaexpresión,

Integración Risch Permite calcular la integral inde�nida de una ex-presión utilizando el caso trascendental del algoritmo de Risch,

Cambiar variable Permite efectuar un cambio de variable en unaintegral inde�nida o de�nida de un expresión,

Derivar Permite calcular la derivada n-ésima de una expresión,

Calcular límite Permite calcular el límite de una expresión,

Calcular mínimo Permite encontrar una solución aproximada parael problema de minimización sin restricciones de una funciónobjetivo dada,

Calcular serie Permite expandir una expresión en un desarrollo deTaylor,

Aproximación de Padé Permite obtener la lista de todas las fun-ciones racionales que tienen el desarrollo de Taylor dado, en lasque la suma de los grados del numerador y denominador es me-nor o igual que el nivel de truncamiento de la serie de potencias,

Calcular suma Permite calcular la suma de los valores de una ex-presión según la variación del respectivo índice,

Page 226: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

212 Cap. 15. Utilidades de los menúes de wxMaxima

Calcular producto Permite calcular el producto de los valores deuna expresión según la variación del respectivo índice,

Transformada de Laplace Permite calcular la transformada de La-place de una expresión dada,

Transformada inversa de Laplace Permite calcular la transfor-mada inversa de Laplace de una expresión dada,

Máximo común divisor Permite obtener el MCD de dos polino-mios dados,

Mínimo común múltiplo Permite obtener el mcm de dos polino-mios dados,

Dividir polinomios Permite calcular el cociente y el resto de ladivisión de dos polinomios dados,

Fracciones simples Expande una expresión en fracciones parciales,

Fracción continua Permite obtener una fracción continua a partirde la representación en formato lista de la misma.

Figura 15.25: Despliegue de opciones del menú Análisis.

Maxima

Aquí se introduce una integral sin evaluar.

( %i1) 'integrate(sin(x)^2*cos(x),x);

( %o1)

∫cos (x) sin (x)

2dx

Page 227: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.7. El menú Análisis 213

Figura 15.26: Llenando los datos del cuadro asociado a la opciónCambiar variable.

Figura 15.27: Llenando los datos del cuadro asociado a la opciónCalcular suma.

Maxima

Después de usar la opción Cambiar variable (15.26) se obtiene el siguiente

resultado:

( %i2) changevar( %,y=sin(x),y,x);

( %o2)

∫y2dy

Maxima

Después de usar la opción Calcular suma (15.27) se obtiene el siguiente resul-

tado:

( %i3) sum(1/k^2,k,1,inf),simpsum;

( %o3) π2

6

Page 228: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

214 Cap. 15. Utilidades de los menúes de wxMaxima

15.8 El menú Simplificar

El menú Simplificar incluye las opciones (ver Fig. 15.28):

Simpli�car expresión Simpli�ca una expresión actual y todas sussubexpresiones, incluyendo los argumentos de funciones no ra-cionales,

Simpli�car radicales Simpli�ca una expresión actual, que puedecontener logaritmos, exponenciales y radicales, convirtiéndola auna forma canónica,

Factorizar expresión Factoriza una expresión actual, que puedecontener cualquier número de variables o funciones, en facto-res irreducibles respecto de los enteros,

Factorizar complejo Factoriza un polinomio actual sobre los ente-ros gaussianos (un entero gaussiano es de la forma a+ ib dondea y b son números enteros),

Expandir expresión Expande la expresión actual,

Expandir logaritmos Activa el valor super de la variable opcionallogexpand,

Contraer logaritmos Realizar contracciones en una expresión ac-tual logarítmica,

Factoriales y gamma Permite mostrar u ocultar paneles para Con-vertir a factoriales, Convertir a gamma, Simpli�car factoriales

y Combinar factoriales,

Simpli�cación trigonométrica Permite mostrar u ocultar panelespara Simpli�car trigonometría, Reducir trigonometría, Expandirtrigonometría y Forma canónica,

Simpli�cación compleja Permite mostrar u ocultar paneles paraConvertir a forma cartesiana, Convertir a forma polar, Calcu-lar parte real, Calcular parte imaginaria, Demoivre y Exponen-

cializar,

Sustituir Permite realizar sustituciones en expresiones,

Page 229: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.8. El menú Simplificar 215

Figura 15.28: Despliegue de opciones del menú Simplificar.

Evaluar formas nominales Permite evaluar formas cuya evalua-ción a sido evitada por el operador comilla simple ',

Conmutar álgebra Permite conmutar el valor actual de la variableopcional algebraic para que se pueda hacer o no la simpli�ca-ción de enteros algebraicos,

Añadir igualdad algebraica Permite añadir al anillo de enterosalgebraicos conocidos por Maxima los elementos que son solu-ciones de los polinomios ingresados,

Cálculo del módulo Permite indicar el módulo mediante el cual serealizan las operaciones con números racionales.

Maxima

Usando la opción Añadir igualdad algebraica e ingresando la respectiva igual-

dad en el cuadro asociado a dicha opción (15.28) obtenemos:

( %i1) tellrat(a+1/a=sqrt(3));

( %o1) [a2 −√

3 a+ 1]

Page 230: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

216 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.29: Llenando los datos del cuadro asociado a la opciónAñadir igualdad algebraica.

Maxima

Ahora, es preciso incluir la siguiente sentencia para poder arribar al resultado que

se desea mostrar.

( %i2) algebraic:true;

( %o2) true

Maxima

Finalmente, averiguamos el valor para a4 + 1a4. Téngase presente que a+ 1

a=√3

implica : a4 + 1a4

=((a+ 1

a

)2 − 2)2− 2 = (

√3 2 − 2)2 − 2 = −1.

( %i3) ratsimp(a^4+1/a^4);

( %o3) −1

15.9 El menú Gráficos

El menú Gráficos incluye las opciones (ver Fig. 15.30):

Grá�cos 2D Permite realizar grá�cos bidimensionales,

Grá�cos 3D Permite realizar grá�cos tridimensionales,

Formato de grá�cos Permite establecer el formato de los grá�cos.

Page 231: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.9. El menú Gráficos 217

Figura 15.30: Despliegue de opciones del menú Gráficos.

Figura 15.31: Llenando los datos del cuadro asociado a la opciónGráficos.

Maxima

Llenando los datos del cuadro asociado a la opción Grá�cos 2D (ver Fig. 15.31)

se genera la sentencia adecuada para obtener la grá�ca de x→ x ∗ sen(x).

( %i1) wxplot2d([x*sin(x)],[x,-5,5])$

( %t1)

Page 232: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

218 Cap. 15. Utilidades de los menúes de wxMaxima

Figura 15.32: Eligiendo, adicionalmente, el formato openmath.

Maxima

Si se elije el formato openmath (ver Fig. 15.32) se genera la sentencia adecuada

para obtener la grá�ca de x → x ∗ sen(x) con el programa grá�co openmath (ver

Fig. 15.33).

( %i2) wxplot2d([x*sin(x)],[x,-5,5])$

Figura 15.33: Grá�co obtenido a partir de ( %i2) .

Page 233: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.10. El menú Numérico 219

15.10 El menú Numérico

El menú Numérico incluye las opciones (ver Fig. 15.34):

Conmutar salida numérica Activa la variable float para obtenerresultado numéricos,

A real Devuelve el valor numérico de la expresión actual,

A real grande (big�oat) Convierte todos los números y funcionesnuméricas a números decimales de punto �otante grandes,

Establecer precisión Permite establecer el número de dígitos sig-ni�cativos en la aritmética con números decimales de punto �o-tante grandes .

Figura 15.34: Despliegue de opciones del menú Numérico.

Maxima

Por defecto los resultados son simbólicos.

( %i1) sqrt(2)+sqrt(3);

( %o1)√

3 +√

2

Maxima

Después de activar la opción Conmutar salida numérica se obtiene el código

adecuado para obtener resultados en forma numérica.

( %i2) if numer#false then numer:false else

numer:true;

( %o2) true

Page 234: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

220 Cap. 15. Utilidades de los menúes de wxMaxima

Maxima

Ahora se obtienen resultados numéricos.

( %i3) sqrt(2)+sqrt(3);

( %o3) 3.146264369941973

Figura 15.35: Despliegue de opciones del menú Ayuda.

15.11 El menú Ayuda

El menú Ayuda incluye las opciones (ver Fig. 15.35):

Ayuda de Maxima Muestra los libros de ayuda de Maxima queestén disponibles en el sistema. Estos libros se pueden navegarde forma interactiva y en cada uno de ellos se pueden realizarbúsquedas de palabras clave,

Ejemplo Muestra un ejemplo de uso de cualquier función de Maxi-

ma,

A propósito Muestra funciones deMaxima similares a una palabra,

Mostrar sugerencias Muestra una idea relacionada con el uso dewxMaxima,

Tutoriales Carga la página o�cial de wxMaxima,

Información de compilación Imprime un resumen de los paráme-tros que se usaron para construir la versión de Maxima que seestá usando,

Page 235: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 15.11. El menú Ayuda 221

Informar de error Imprime las versiones de Maxima y de Lisp yproporciona un enlace a la página web sobre informe de fallosdel proyecto Maxima,

Comprueba actualizaciones Permite comprobar actualizaciones dewxMaxima,

Acerca de... Muestra información técnica relacionada con el funcio-namiento del programa.

Page 236: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO16

Grá�cos con draw

El paquete draw se distribuye conjuntamente con Maxima y consti-tuye una interfaz que comunica de manera muy e�ciente Maxima conGnuplot. Este paquete incorpora una considerable variedad de funcio-nes y opciones que permiten obtener la representación de un amplionúmero de objetos grá�cos bidimensionales y tridimensionales.

Para poder utilizar el paquete draw es preciso cargarlo en la me-moria, y para ello se utiliza la función load (ver sección 3.7).

load(draw) $ �carga� (inicializa) el paquete draw

draw(gr2d, . . . ,gr3d, . . . , opciones)

representa grá�camente una serie deescenas; sus argumentos son objetosgr2d y/o gr3d, junto con algunas op-ciones. Por defecto, las escenas se re-presentan en una columna

draw2d(opciones,objeto_grá�co, . . .)

esta función es un atajo paradraw(gr2d(opciones, objeto_grá�co,. . .))

draw3d(opciones,objeto_grá�co, . . .)

esta función es un atajo paradraw(gr3d(opciones, objeto_grá�co,. . .))

Inicialización del paquete draw y descripción de sus tres funciones principales.

222

Page 237: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 223

16.1 Objetos grá�cos bidimensionales

points([[x1, y1], [x2, y2],. . .])

puntos bidimensionales

points([x1, x2, . . .],[y1, y2, . . .])

puntos bidimensionales

points([y1, y2, . . .]) equivale a points([[1, y1], [2, y2], . . .])

points(matrix([x1, y1],[x2, y2], . . .)

puntos bidimensionales

bars([x1, h1, w1], . . .) dibuja barras verticales centradas enxi, de alturas hi y anchos wi

polygon([[x1, y1], [x2, y2],. . .])

polígono

polygon([x1, x2, . . .],[y1, y2, . . .])

polígono

rectangle([x1, y1],[x2, y2])

rectángulo de vértices opuestos(x1, y1) y (x2, y2)

quadrilateral([x1, y1],[x2, y2], [x3, y3], [x4, y4])

cuadrilátero

triangle([x1, y1],[x2, y2], [x3, y3])

triángulo

image(im, x0, y0, width,height)

imagen im en la región rectangulardesde el vértice (x0, y0) hasta (x0 +width, y0 + height)

vector([p1, p2], [v1, v2]) vector (v1, v2) con punto de aplicación(p1, p2)

label([cadena, x, y], . . .) etiquetas para grá�cos bidimensiona-les

ellipse(xc, yc, a, b,ang1, ang2)

sector elíptico de centro (xc, yc) consemiejes horizontal y vertical a y b,respectivamente, comenzando en elángulo ang1 y trazando un arco de am-plitud igual al ángulo ang2

Principales objetos gráficos bidimensionales incorporados en draw.

Page 238: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

224 Cap. 16. Grá�cos con draw

explicit(f(x), x, xmin,xmax)

función explícita f cuya variable x to-ma valores desde xmin hasta xmax

implicit(E(x, y),x, xmin, xmax,y, ymin, ymax)

expresión implícita E a ser represen-tada en el rectángulo [xmin, xmax] ×[ymin, ymax]

parametric(fx, fy,t, tmin, tmax)

curva paramétrica bidimensional, cu-yo parámetro t toma valores desdetmin hasta tmax

polar(r(θ), θ,θmin, θmax)

función polar r cuya variable θ tomavalores desde θmin hasta θmax

region(expr, x, xmin,xmax, y, ymin, ymax)

región del plano de�nida por desigual-dades a ser representada en el rectán-gulo [xmin, xmax]× [ymin, ymax]

Principales objetos gráficos bidimensionales incorporados en draw.

Las funciones draw, draw2d y draw3d devuelven las salidas grá-�cas en una ventana de Gnuplot, aparte de la ventana de trabajoactual. No obstante el entorno grá�co wxMaxima permite utilizar lasfunciones wxdraw, wxdraw2d y wxdraw3d que sí devuelven las salidasen el cuaderno de trabajo actual. Debe tenerse presente que al utilizarla función wxdraw3d, el punto de vista de la grá�ca obtenida no puedeser cambiado en tiempo real.

En este capítulo se van a mostrar los resultados mediante las fun-ciones wxdraw, wxdraw2d y wxdraw3d, pero todos los ejemplos mos-trados pueden ser ejecutados, sin ningún problema, con las funcionesdraw, draw2d y draw3d, según sea el caso.

Maxima

Aquí se genera una lista de listas. Los elementos de la misma, generados aleato-

riamente, representan las coordenadas de puntos del plano.

( %i1) p:create_list([random(20),random(50)],k,1,10);

( %o1) [[9, 9], [3, 39], [6, 26], [16, 3], [0, 21], [12, 9], [9, 18], [6, 45],[13, 43], [7, 28]]

Page 239: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 225

Maxima

Después de aplicar la función points a la variable p, en la que se han almacenado

los puntos, se obtiene un objeto grá�co el cual puede gra�carse con draw2d.

( %i2) wxdraw2d( points(p) );

( %t2)

( %o2)

Maxima

Con gr2d y draw siempre se obtendrá el mismo resultado que con draw2d.

( %i3) wxdraw( gr2d(points(p)) );

( %t3)

( %o3)

draw no cuenta con una función especí�ca, como line, para de�nirel objeto grá�co línea; simplemente se asigna el valor true a la opciónpoints_joined para unir los puntos dados mediante segmentos.

Page 240: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

226 Cap. 16. Grá�cos con draw

Maxima

Grá�ca de los puntos p unidos mediante segmentos.

( %i4) wxdraw2d(

points_joined=true,

points( p ) );

( %t4)

( %o4)

Maxima

De esta forma se visualiza la grá�ca de barras verticales.

( %i5) wxdraw2d(

bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4])

);

( %t5)

( %o5)

Page 241: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 227

Maxima

Así se visualiza la grá�ca de un hexágono.

( %i6) wxdraw2d(

polygon([

[1/2,sqrt(3)/2],[-1/2,sqrt(3)/2],[-1,0],

[-1/2,-sqrt(3)/2],[1/2,-sqrt(3)/2],[1,0]

])

);

( %t6)

( %o6)

Maxima

De esta forma se visualiza la grá�ca de un rectángulo.

( %i7) wxdraw2d(

rectangle([0,0],[1,2])

);

( %t7)

( %o7)

Page 242: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

228 Cap. 16. Grá�cos con draw

Maxima

Así se visualiza la grá�ca de un cuadrilátero.

( %i8) wxdraw2d(

quadrilateral([1,1],[2,2],[3,-1],[2,-2])

);

( %t8)

( %o8)

Maxima

Y así, la grá�ca de un triángulo.

( %i9) wxdraw2d(

triangle([1,1],[2,2],[3,-1])

);

( %t9)

( %o9)

Page 243: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 229

Maxima

Aquí se obtiene la grá�ca de una imagen.

( %i10) im:apply(matrix,

makelist(makelist(random(200),i,1,30),i,1,30))$( %i11) wxdraw2d(

image(im,0,0,30,30)

);

( %t11)

( %o11)

Maxima

De esta manera se obtiene la grá�ca del vector (10, 10), cuyo punto de aplicación

es el origen.

( %i12) wxdraw2d(

vector([0,0],[10,10])

);

( %t12)

( %o12)

Page 244: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

230 Cap. 16. Grá�cos con draw

Maxima

Para insertar texto en un punto cualquiera de un grá�co se utiliza la función

label. En este caso el punto de inserción es (0, 0 · 3).

( %i13) wxdraw2d(

label([�Etiqueta�,0,0.3])

);

( %t13)

( %o13)

Maxima

Esto devuelve la grá�ca de un sector elíptico, de 0◦ a 360◦, cuyo centro es el

origen, su semieje horizontal es 1, su semieje vertical es 2.

( %i14) wxdraw2d(

ellipse(0,0,1,2,0,360)

);

( %t14)

( %o14)

Page 245: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 231

Maxima

De esta manera se obtiene la grá�ca de la función x→ x2, con −1 ≤ x ≤ 1.

( %i15) wxdraw2d(

explicit(x^2,x,-1,1)

);

( %t15)

( %o15)

Maxima

Esto muestra la grá�ca de la ecuación x3+y3−3xy = 0 en el rectángulo [−1, 2]×[−1, 2].

( %i16) wxdraw2d(

implicit(x^3+y^3-3*x*y=0,x,-1,2,y,-1,2)

);

( %t16)

( %o16)

Page 246: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

232 Cap. 16. Grá�cos con draw

Maxima

Aquí se muestra la grá�ca de la curva de�nida en forma paramétrica mediante

t→ (sin(t), sin(2t)), con 0 ≤ t ≤ 2π.

( %i17) wxdraw2d(

parametric(sin(t),sin(2*t),t,0,2* %pi)

);

( %t17)

( %o17)

Maxima

Aquí se muestra la grá�ca de la función de�nida en coordenadas polares mediante

t→ sen(t), tal que 0 ≤ t ≤ 2π.

( %i18) wxdraw2d(

polar(sin(2*t),t,0,2* %pi)

);

( %t18)

( %o18)

Page 247: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.1. Objetos grá�cos bidimensionales 233

Maxima

Esto muestra la grá�ca de los puntos de la región −1 ≤ x ≤ 1, −1 ≤ y ≤ 1 que

satisfacen 12< x2 + y2 < 1.

( %i19) wxdraw2d(

region(1/2<x^2+y^2 and x^2+y^2<1,

x,-1,1,y,-1,1)

);

( %t19)

( %o19)

Maxima

Combinar objetos grá�cos bidimensionales es sencillo con draw2d.

( %i20) wxdraw2d(

parametric(t,t^2-1/2,t,-1,1),

polar(sin(2*t),t,0,2* %pi)

);

( %t20)

( %o20)

Page 248: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

234 Cap. 16. Grá�cos con draw

16.2 Opciones para los objetos grá�cos bidimen-

sionales

16.2.1 Opciones locales

Las opciones locales sólo son relevantes para objetos grá�cos especí-�cos y para tal efecto deben digitarse antes de dicho objeto. Si unaopción grá�ca es digitada antes de un objeto grá�co al cual no corres-ponde, no se produce ningún mensaje de error, simplemente la grá�case muestra sin presentar alteración alguna.

Opción Val. por defecto Descripción

point_size 1 establece el tamaño de lospuntos dibujados (debe serun número no negativo)

point_type 1 indica la forma que tendránlos puntos aislados

points_joined false indica si los puntos aisladosse unen mediante segmentoso no

Opciones de draw2d para el objeto gráfico points.

Opción Val. por defecto Descripción

fill_color red especi�ca el color del rellenodel polígono

fill_density 0 especi�ca la transparenciadel color del relleno del po-lígono (asume valores entre 0y 1, incluidos)

Opciones de draw2d para el objeto gráfico bars.

Page 249: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 235

Opción Val. por defecto Descripción

nticks 29 indica el número de puntos autilizar para generar las grá-�cas

border true especi�ca si debe dibujarse elborde o no

transparent false establece si el polígono deberellenarse o no

fill_color red especi�ca el color del rellenodel polígono

Opciones de draw2d para los objetos gráficos bidimensionales polygon,rectangle, quadrilateral y triangle.

Opción Val. por defecto Descripción

palette [7, 5, 15] vector con sus componentestomando valores enteros en elrango desde −36 a +36

Opciones de draw2d para el objeto gráfico bidimensional image.

Opción Val. por defecto Descripción

head_both false indica si el vector será bidi-reccional o no

head_length 2 indica, en las unidades del ejex, la longitud de las �echas delos vectores

head_angle 45 indica el ángulo, en grados,entre la �echa y el segmentodel vector

head_type filled especi�ca cómo se habrán dedibujar las �echas de los vec-tores

unit_vectors false especi�ca si los vectores se di-bujan con módulo unidad

Opciones de draw2d para el objeto gráfico vector.

Page 250: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

236 Cap. 16. Grá�cos con draw

Opción Val. por defecto Descripción

label_

alignment

center especi�ca el color que tendráel vector

label_

orientation

horizontal especi�ca el color que tendráel vector

Opciones de draw2d para el objeto gráfico label.

Opción Val. por defecto Descripción

nticks 29 indica el número de puntos autilizar para generar las grá-�cas

adapt_depth 10 indica el número máximo departiciones utilizadas por larutina grá�ca adaptativa

Opciones de draw2d para el objeto gráfico explicit.

Opción Val. por defecto Descripción

filled_func false establece cómo se van a relle-nar las regiones limitadas porlas grá�cas

fill_color red especi�ca el color para relle-nar las regiones limitadas porlas grá�cas

Opciones de draw2d para el objeto gráfico explicit.

Opción Val. por defecto Descripción

ip_grid [50, 50] establece la rejilla del primermuestreo para la grá�ca

ip_grid_in [5, 5] establece la rejilla del segun-do muestreo para la grá�ca

Opciones de draw2d para el objeto gráfico implicit.

Page 251: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 237

Opción Val. por defecto Descripción

nticks 29 indica el número de puntos autilizar para generar las grá-�cas

Opciones de draw2d para los objetos gráficos bidimensionales parametric ypolar.

Opción Val. por defecto Descripción

fill_color red especi�ca el color del rellenodel polígono

x_voxel 10 es el número de particionesen la dirección x a utilizarpor el algoritmo utilizado pa-ra gra�car regiones de�nidaspor desigualdades y operado-res booleanos

y_voxel 10 es el número de particionesen la dirección y a utilizarpor el algoritmo utilizado pa-ra gra�car regiones de�nidaspor desigualdades y operado-res booleanos

Opciones de draw2d para el objeto gráfico bidimensional region.

16.2.2 Opciones locales genéricas

Las opciones locales genéricas son opciones comunes a todos los ob-jetos grá�cos bidimensionales. Aunque hay excepciones que cabe des-tacar, por ejemplo las opciones line_width y line_type que, porrazones obvias, únicamente no son relevantes con los objetos grá�cospoint y label.

Page 252: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

238 Cap. 16. Grá�cos con draw

Opción Val. por defecto Descripción

color black especi�ca el color para dibu-jar líneas, puntos y bordes depolígonos

line_width 1 indica el ancho de las líneas adibujar

line_type solid indica cómo se van a dibu-jar las líneas (valores posiblesson solid y dots)

key � � indica la clave del grá�co enla leyenda

Opciones locales genéricas de draw2d.

16.2.3 Opciones globales

Las opciones globales se caracterizan porque afectan a toda la escenay su posición dentro de la descripción de ésta no reviste importancia.

Opción Val. por defecto Descripción

proportional_

axes

none indica si una escena bidimen-sional se dibujará con los ejesproporcionales a sus longi-tudes relativas (valores posi-bles: none y xy)

xrange auto permite especi�car un inter-valo para x (valores posibles:auto y [xmin, xmax])

yrange auto permite especi�car un inter-valo para y (valores posibles:auto y [ymin, ymax])

logx false permite especi�car si el eje xse dibujará en la escala loga-rítmica

Algunas opciones globales de draw2d.

Page 253: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 239

Opción Val. por defecto Descripción

logy false permite especi�car si el eje yse dibujará en la escala loga-rítmica

terminal screen selecciona el terminala utilizar por Gnuplot

(valores posibles son:screen, png, jpg, eps,eps_color, pdf, pdfcairo,gif, animated_gif, wxt yaquaterm)

file_name maxima_out indica el nombre del �cheroen el que los terminales png,jpg, eps, eps_color, pdf,pdfcairo, etc. guardarán elgrá�co

font � � permite seleccionar el tipo defuente a utilizar por el termi-nal

font_size 12 permite seleccionar el tama-ño de la fuente a utilizar porel terminal

grid false permite especi�car si se dibu-jará una rejilla sobre xy

title � � almacena una cadena con eltítulo de la escena

xlabel � � almacena una cadena con laetiqueta del eje x

ylabel � � almacena una cadena con laetiqueta del eje y

xtics auto controla la forma en la que sedibujarán las marcas del eje x(valores posibles: auto, none,[inicio, inc, fin], {n1, n2, . . .}y también {[�label1�, n1],[�label1�, n1], . . .})

Algunas opciones globales de draw2d.

Page 254: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

240 Cap. 16. Grá�cos con draw

Opción Val. por defecto Descripción

xtics_axis false indica si las marcas y susetiquetas se dibujan sobre elpropio eje x, o se colocan a lolargo del borde del grá�co

ytics auto similar que xtics pero con eleje y

ytics_axis false similar que xtics_axis perocon el eje y

xaxis false especi�ca si se dibujará el ejex

xaxis_width 1 indica el ancho del eje x

xaxis_type dots indica cómo se debe dibujarel eje x (valores admisibles:solid y dots)

xaxis_color black indica el color para el eje x

yaxis false especi�ca si se dibujará el ejey

yaxis_width 1 indica el ancho del eje y

yaxis_type dots similar que xaxis_type perocon el eje y

yaxis_color black indica el color para el eje y

file_bgcolor �xffffff� establece el color de fondo(en código hexadecimal rgb)para los terminales png, jpgy gif

delay 5 establece el retraso en centé-simas de segundo entre imá-genes en los �cheros gif ani-mados

eps_width 12 indica el ancho (en cm) delarchivo Postscript generadopor los terminales eps yeps_color

eps_height 12 indica el largo (en cm) del ar-chivo Postscript

Algunas opciones globales de draw2d.

Page 255: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 241

Opción Val. por defecto Descripción

pdf_width 21 · 0 especi�ca el ancho (en cm)del documento PDF genera-do por los terminales pdf ypdfcairo

pdf_height 29 · 7 especi�ca el largo (en cm) deldocumento PDF

pic_width 640 especi�ca la anchura del �-chero de imagen de bits gene-rado por los terminales png yjpg

pic_height 640 especi�ca el largo del �cherode imagen de bits

user_preamble � � inserta código Gnuplot

Algunas opciones globales de draw2d.

16.2.4 Ejemplos ilustrativos

Maxima

Aquí se usa user_preamble para insertar código Gnuplot. El resultado, en este

caso, equivale a asignar el valor xy a la opción proportional_axes.

( %i1) wxdraw2d(

parametric(cos(t),sin(t),t,0,2* %pi),

user_preamble=�set size ratio 1�

);

( %t1)

( %o1)

Page 256: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

242 Cap. 16. Grá�cos con draw

Maxima

He aquí la región encerrada por las parábolas y = x2 y y = 1− x2.

( %i2) wxdraw2d(

fill_color=yellow,

region(x^2<y and y<1-x^2,x,-1,1,y,0,1),

line_width=3,

key=�1-x^2�,

explicit(1-x^2,x,-sqrt(2)/2,sqrt(2)/2),

key=�x^2�,

color=red,

explicit(x^2,x,-sqrt(2)/2,sqrt(2)/2)

);

( %t2)

( %o2)

Maxima

Aquí se resuelve un sistema de ecuaciones para encontrar los puntos de intersección

de las curvas de�nidas por x2 + y2 = 1 y y − 2x2 + 32= 0.

( %i3) sol:solve([x^2+y^2=1,y-2*x^2+3/2=0],[x,y]);

( %o3)

[[x = −

√√5+5

232

, y =√5−14

],

[x =

√√5+5

232

, y =√5−14

],[

x = −√

5−√5

232

, y = −√5+14

],

[x =

√5−√5

232

, y = −√5+14

]]

Page 257: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 243

Maxima

Esto almacena las coordenadas de los puntos de intersección, previamente calcu-

lados, en la variable pts.

( %i4) pts:map(lambda([h],subst(h,[x,y])),sol);

( %o4)

[[−√√

5+5

232

,√5−14

],

[√√5+5

232

,√5−14

],

[−√

5−√5

232

,−√5+14

],[√

5−√5

232

,−√5+14

]]

Maxima

He aquí un grá�co de las curvas de�nidas por x2 + y2 = 1 y y − 2x2 + 32= 0 y

los respectivos puntos de intersección.

( %i5) wxdraw2d(

line_width=2,

color=blue,

implicit(x^2+y^2=1,x,-1.5,1.5,y,-1.5,1.5),

color=red,

implicit(y-2*x^2+3/2=0,x,-1.5,1.5,

y,-1.5,1.5)

color=black

point_size=1.5,

point_type=7,

points(pts),

);

( %t5)

( %o5)

Page 258: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

244 Cap. 16. Grá�cos con draw

Maxima

Aquí se de�ne la curva paramétrica a.

( %i6) a(t):=[t,sin(t)] $

Maxima

Esto de�ne el campo vectorial tangente asociado a la curva a.

( %i7) define( �a′�(t),diff(a(t),t) ) $

Maxima

Aquí se construyen la lista T de vectores tangentes a la curva a y la lista P de

puntos de aplicación de éstos. Los valores t0, para tal construcción, son tomados

de la lista t0.

( %i8) t0:create_list(i* %pi/4,i,0,8) $( %i9) T:create_list( vector(a(i),�a′�(i)),i,t0 ) $

( %i10) P:map(a,t0) $

Maxima

Aquí se de�nen los objetos grá�cos curva, a partir de a, un conjunto de vectores

unitarios tangentes a ésta y los puntos de aplicación de los mismos.

( %i11) objetos: [

color=red,

apply( parametric,append(a(t),[t,0,2* %pi]) ),

color=blue,head_length=0.2,

head_angle=10,

unit_vectors=true,T,

color=green,

point_type=7,points(P),

proportional_axes=xy,

title=�Campo vectorial tangente�

] $

Page 259: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.2. Opciones para los objetos grá�cos bidimensionales 245

Maxima

De esta manera se gra�can los objetos grá�cos previamente de�nidos.

( %i12) wxdraw2d(objetos);

( %t12)

( %o12)

Maxima

A continuación se construye la lista N de vectores normales a la curva a.

( %i13) J(v):=[-last(v),first(v)] $( %i14) N:create_list( vector(a(i),J(�a′�(i))),i,t0 ) $

Maxima

Aquí se de�nen los objetos grá�cos curva, a partir de a, un conjunto de vectores

unitarios tangentes a ésta, un conjunto de vectores unitarios normales a la misma

y los puntos de aplicación de los vectores.

( %i15) objetos: [

color=red,

apply(parametric,append(a(t),[t,0,2* %pi])),

head_length=0.2,head_angle=10,

unit_vectors=true,

color=blue,T, color=yellow,N,

color=green,point_type=7,points(P),

proportional_axes=xy,

title=�Campos vectoriales tangente y normal�

] $

Page 260: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

246 Cap. 16. Grá�cos con draw

Maxima

De esta manera se gra�can los objetos grá�cos previamente de�nidos.

( %i16) wxdraw2d(objetos);

( %t16)

( %o16)

Maxima

He aquí un grá�co polar mejorado.

( %i17) wxdraw2d(color=blue,nticks=100,

polar(sin(2*t),t,0,2* %pi)) $

( %t17)

16.3 Objetos grá�cos tridimensionales

points([[x1, y1, z1], . . .]) puntos tridimensionales

Principales objetos gráficos tridimensionales incorporados en draw.

Page 261: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.3. Objetos grá�cos tridimensionales 247

points([x1, x2, . . .],[y1, y2, . . .], [z1, z2, . . .])

puntos tridimensionales

points(matrix([x1, y1, z1], [x2, y2, z2],. . .)

puntos tridimensionales

vector([p1, p2, p3],[v1, v2, v3])

vector (v1, v2, v3) con punto de aplica-ción (p1, p2, p3)

label([cadena, x, y, z],. . .)

etiquetas para grá�cos tridimensiona-les

explicit(f(x, y),x, xmin, xmax,y, ymin, ymax)

función explícita f cuyas variables sa-tisfacen xmin ≤ x ≤ xmax y ymin ≤y ≤ ymax

implicit(E(x, y, z),x, xmin, xmax,y, ymin, ymax)z, zmin, zmax)

expresión implícita E a ser representa-da en el paralelepípedo [xmin, xmax]×[ymin, ymax]× [zmin, zmax]

parametric(fx, fy, fzt, tmin, tmax)

curva paramétrica tridimensional, cu-yo parámetro t satisface tmin ≤ t ≤tmax

parametric_surface(fx, fy, fz, u, umin, umax,v, vmin, vmax)

super�cie de�nida paramétricamente,cuyos parámetros satisfacen umin ≤u ≤ umax y vmin ≤ v ≤ vmax

cylindrical(r(z, θ),z, zmin, zmax,θ, θmin, θmax)

función cilíndrica r cuyas variables sa-tisfacen zmin ≤ z ≤ zmax y θmin ≤θ ≤ θmax

spherical(r(φ, θ),φ, φmin, φmax,θ, θmin, θmax)

función esférica r cuyas variables sa-tisfacen φmin ≤ φ ≤ φmax y θmin ≤θ ≤ θmax

mesh(m,x0, y0, ancho,largo)

de�ne un grá�co tridimensional de lamatrizm (los valores z se toman dem,las abscisas van desde x0 hasta x0 +ancho y las ordenadas desde y0 hastay0 + largo)

tube(fx, fy, fz,fr, t, tmin, tmax)

super�cie tubular de radio fr

Principales objetos gráficos tridimensionales incorporados en draw.

Page 262: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

248 Cap. 16. Grá�cos con draw

Maxima

Aquí se genera, en forma aleatoria, un conjunto de puntos tridmensionales. Luego

se muestra la grá�ca de los dichos puntos.

( %i1) p:create_list(map(random,[20,50,30]),k,1,10) $( %i2) wxdraw3d(

points( p )

);

( %t2)

( %o2)

Maxima

Asignando el valor true a la opción plot_joined se obtiene la poligonal que une

los puntos almacenados en p.

( %i3) wxdraw3d(

points_joined=true,

points( p )

);

( %t3)

( %o3)

Page 263: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.3. Objetos grá�cos tridimensionales 249

Maxima

Aquí se muestra la grá�ca del vector cuyo punto de aplicación es el origen y cuya

parte vectorial es (1, 1, 1).

( %i4) wxdraw3d(

vector([0,0,0],[1,1,1])

);

( %t4)

( %o4)

Maxima

He aquí un texto insertado en el punto (0, 0, 1).

( %i5) wxdraw3d(

label([�Etiqueta�,0,0,1])

);

( %t5)

( %o5)

Page 264: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

250 Cap. 16. Grá�cos con draw

Maxima

Esto muestra la grá�ca de la función (x, y)→ senx+ sen(xy), con 0 ≤ x ≤ 2π y

0 ≤ y ≤ 2π.

( %i6) wxdraw3d(

explicit(sin(x)+sin(x*y),x,0,2* %pi,y,0,2* %pi)

);

( %t6)

( %o6)

Maxima

Aquí se muestra la grá�ca de la super�cie generada a partir de la ecuación

(√x2 + y2 − 4)2 + z2 = 4, con −6 ≤ x ≤ 6, −6 ≤ y ≤ 6 y −2 ≤ z ≤ 2.

( %i7) wxdraw3d(

implicit((sqrt(x^2+y^2)-4)^2+z^2=4,x,-6,6,

y,-6,6,z,-2,2) );

( %t7)

( %o7)

Page 265: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.3. Objetos grá�cos tridimensionales 251

Maxima

Esta es la grá�ca de la curva t→ (cos t, sen t, t8), con 0 ≤ t ≤ 4π.

( %i8) wxdraw3d(

parametric(cos(t),sin(t),t/8,t,0,4* %pi)

);

( %t8)

( %o8)

Maxima

Aquí se muestra la grá�ca de la super�cie de�nida por (u, v) → ((2 +

cos v) cosu, (2 + cos v) sinu, sin v), con 0 ≤ u ≤ 2π y 0 ≤ v ≤ 2π.

( %i9) wxdraw3d(

parametric_surface((2+cos(v))*cos(u),

(2+cos(v))*sin(u),sin(v),

u,0,2* %pi,v,0,2* %pi) );

( %t9)

( %o9)

Page 266: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

252 Cap. 16. Grá�cos con draw

Maxima

Esta es la grá�ca de la super�cie de�nida en coordenadas cilíndricas mediante

(z, t)→ cos z, con −2 ≤ z ≤ 2 y 0 ≤ t ≤ 2π.

( %i10) wxdraw3d(

cylindrical(cos(z),z,-2,2,t,0,2* %pi)

);

( %t10)

( %o10)

Maxima

He aquí la grá�ca de la super�cie de�nida en coordenadas esféricas mediante

(a, t)→ 1, con 0 ≤ a ≤ 2π y 0 ≤ t ≤ π.

( %i11) wxdraw3d(

spherical(1,a,0,2* %pi,t,0, %pi)

);

( %t11)

( %o11)

Page 267: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.3. Objetos grá�cos tridimensionales 253

Maxima

Esta es la grá�ca de un objeto geométrico tridimensional de tipo mesh.

( %i12) m:apply(matrix,create_list(create_list(k^2+i^2,

k,-5,5),i,-5,5)) $( %i13) wxdraw3d(

mesh(m,0,0,-5,5)

);

( %t13)

( %o13)

Maxima

He aquí la grá�ca de la super�cie tubular, de radio cos(t10

)2, generada por la

curva t→ (cos t, t, 0), con 0 ≤ t ≤ 4π.

( %i14) wxdraw3d(

tube(cos(t),t,0,cos(t/10)^2,t,0,4* %pi)

);

( %t14)

( %o14)

Page 268: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

254 Cap. 16. Grá�cos con draw

16.4 Opciones para objetos grá�cos tridimensio-

nales

16.4.1 Opciones locales

Para los objetos grá�cos points y label las opciones locales son lasmismas en draw2d y draw3d. En cambio para el objeto grá�co vectorlas opciones head_length y head_angle únicamente son relevantesen draw2d (vea la subsección 16.2.1). Por este motivo, en esta sec-ción, no se presentan tablas de opciones para los tres objetos grá�cosmencionados.

Opción Val. por defecto Descripción

xu_grid 30 indica el número de coorde-nadas de x para formar la re-jilla de puntos muestrales

yv_grid 30 indica el número de coorde-nadas de y para formar la re-jilla de puntos muestrales

Opciones de draw3d para explicit, parametric_surface, cylindrical,spherical y tube.

Opción Val. por defecto Descripción

x_voxel 10 indica el número de voxels enla dirección x a utilizar por elalgoritmo implementado

y_voxel 10 indica el número de voxels enla dirección y a utilizar por elalgoritmo implementado

z_voxel 10 indica el número de voxels enla dirección z a utilizar por elalgoritmo implementado

Opciones de draw3d para implicit.

Page 269: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.4. Opciones para objetos grá�cos tridimensionales 255

Opción Val. por defecto Descripción

nticks 29 indica el número de puntos autilizar para generar las grá-�cas

Opciones de draw3d para parametric.

16.4.2 Opciones locales genéricas

Vea la subsección 16.2.2.

16.4.3 Opciones globales

A excepción de la opción proportional_axes todas las opciones glo-bales de draw2d son las mismas de draw3d (vea la subsección 16.2.3).Además draw3d incorpora opciones que complentan, de forma na-tural, las incorporadas en draw2d. Por ejemplo, estan las opcioneszrange, logz, zlabel, ztics, zaxis, zaxis_type y zaxis_color.Otras opciones se describen a continuación.

Opción Val. por defecto Descripción

xyplane false coloca el plano xy en escenastridimensionales (para el va-lor false, el plano xy se colo-ca automáticamente; en cam-bio, si toma un valor real, és-te intersectará con el eje z aese nivel)

rot_vertical 60 indica el ángulo (en grados)de la rotación vertical (alre-dedor del eje x ) para situarel punto del observador enlas escenas tridimensionales(el ángulo debe pertenecer alintervalo [0, 180])

Algunas opciones globales de draw3d.

Page 270: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

256 Cap. 16. Grá�cos con draw

Opción Val. por defecto Descripción

rot_horizontal 30 indica el ángulo (en grados)de la rotación horizontal (al-rededor del eje z ) para si-tuar el punto del observadoren las escenas tridimensiona-les (el ángulo debe perteneceral intervalo [0, 360])

axis_3d true indica si los ejes x, y y z, tra-dicionales, permanecerán vi-sibles

palette color es un vector de longitud trescon sus componentes toman-do valores enteros en el ran-go desde −36 a +36; ca-da valor es un índice pa-ra seleccionar una fórmu-la que transforma los nive-les numéricos en las compo-nentes cromáticas rojo, ver-de y azul (palette = gray

y palette = color son ata-jos para palette = [3,3,3]

y palette = [7,5,15], res-pectivamente)

enhanced3d false si enhanced3d vale true, losobjetos grá�cos se colorearánactivando el modo pm3d deGnuplot. Si se da una ex-presión a enhanced3d (ex-cepto en implicit), ésta seutilizará para asignar coloresde acuerdo con el valor depalette; las variables de estaexpresión deben ser las mis-mas que luego se utilicen pa-ra la descripción de la super-�cie

Algunas opciones globales de draw3d.

Page 271: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.4. Opciones para objetos grá�cos tridimensionales 257

Opción Val. por defecto Descripción

surface_hide false establece si las partes ocultasse mostrarán o no en las su-per�cies

contour none permite decidir dónde colo-car las líneas de nivel (va-lores posibles: none, base,surface, both y map)

contour_levels 5 controla cómo se dibujaránlas líneas de nivel (valores po-sibles: n, [inicio, inc, fin] y{n1, n2, . . .}

Algunas opciones globales de draw3d.

16.4.4 Ejemplos ilustrativos

Maxima

Aquí se han cambiado los valores por defecto de dos opciones de draw3d. El resul-

tado se aprecia al mostrar los puntos generados en ( %i30) .

( %i1) wxdraw2d(

enhanced3d=true,

point_type=7,point_size=2,

points( p )

);

( %t1)

( %o1)

Page 272: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

258 Cap. 16. Grá�cos con draw

Maxima

Esto de�ne una curva, algunos puntos sobre ésta y algunos vectores tangentes a

la misma.

( %i2) a(t):=[cos(t),sin(t),t/8] $( %i3) define( �a′�(t),diff(a(t),t) ) $( %i4) t0:create_list(i* %pi/4,i,0,16) $

( %i5) T:create_list( vector(a(i),�a′�(i)),i,t0 ) $( %i6) P:map(a,t0) $

Maxima

He aquí la grá�ca de todos los objetos grá�cos tridimensionales previamente de-

�nidos.

( %i7) objetos: [

nticks=100,color=red,

apply(parametric, append(a(t),[t,0,4* %pi]) ),

color=blue,unit_vectors=true,T,

color=green,point_type=7,points(P),

user_preamble=�set size ratio 1�,

title=�Campo vectorial tangente�

xyplane=0,axis_3d=false,

xtics=false,ytics=false,ztics=false,

xaxis=true,yaxis=true,zaxis=true,

xlabel=�x�,ylabel=�y�,zlabel=�z�

]) $( %i8) wxdraw3d(objetos);

( %t8)

( %o8)

Page 273: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.4. Opciones para objetos grá�cos tridimensionales 259

Maxima

Esta es la grá�ca de ( %t35) después de cambiar algunas opciones.

( %i9) wxdraw3d(

xu_grid=150, yv_grid=150,

enhanced3d=cos(x*y),

explicit(sin(x)+sin(x*y),x,0,2* %pi,y,0,2* %pi)

);

( %t9)

( %o9)

Maxima

Esta es la grá�ca de ( %t35) después de más cambios de opciones.

( %i10) wxdraw3d(

xu_grid=150,yv_grid=150,

palette=[6,5,15],enhanced3d=sin(x*y),

explicit(sin(x)+sin(x*y),x,0,2* %pi,y,0,2* %pi)

);

( %t10)

( %o10)

Page 274: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

260 Cap. 16. Grá�cos con draw

Maxima

He aquí la super�cie obtenida en ( %t36) .

( %i11) wxdraw3d(

x_voxel=17,y_voxel=17,

z_voxel=15,

palette=[12,5,27],

enhanced3d=true,

implicit((sqrt(x^2+y^2)-4)^2+z^2=4,x,-6,6,

y,-6,6,z,-2,2)

);

( %t11)

( %o11)

16.5 Fijación de valores para opciones

En algunas ocasiones se requiere dibujar varios grá�cos con las mismasopciones y para evitar escribirlas en cada escena puede optarse por�jar, inicialmente, los valores deseados para dichas opciones. Parahacer factible esto draw cuenta con una función especí�ca.

set_draw_defaults(

opción grá�ca,...,opción grá�ca,...)

�ja los valores para las opciones grá�-cas del usuario (llamando a la funciónsin argumentos se borran las opciones�jadas por el usuario)

Fijando valores para opciones.

Page 275: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.6. Grá�cos múltiples 261

Maxima

Aquí se �jan los valores de algunas opciones.

( %i1) set_draw_defaults(

surface_hide=true,

color=blue,

grid=true,

line_width=2

);

Maxima

A continuación se gra�ca una parábola sin especi�caciones para ninguna opción.

( %i2) wxdraw2d(

explicit(x^2,x,-2,2)

);

( %t2)

( %o2)

16.6 Grá�cos múltiples

Opción Val. por defecto Descripción

columns 1 indica el número de columnasa considerar cuando se reali-zan grá�cos múltiples

Opción para gráficos múltiples.

Page 276: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

262 Cap. 16. Grá�cos con draw

Maxima

Esto de�ne dos escenas una bidimensional y otra tridmensional.

( %i1) f1:gr2d(explicit(sin(x),x,0,2* %pi)) $( %i2) f2:gr3d(explicit(sin(x)+sin(y),x,0,2* %pi,

y,0,2* %pi)) $

Maxima

Con draw la dos escenas previas se presentan por defecto en una sola columna.

( %i3) wxdraw(f1,f2) $

( %t3)

( %o3)

Maxima

Con la opción columns es posble cambiar el número de columnas.

( %i4) wxdraw(f1,f2,columns=2) $

( %t4)

( %o4)

Page 277: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.7. Grá�cos animados 263

Maxima

De esta manera se borran las opciones que fueron �jadas en ( %i51) .

( %i5) set_draw_defaults() $

Maxima

El aspecto de las grá�cas luce ahora diferente, pues se han restituido los valores

por defecto de las opciones.

( %i6) wxdraw(f1,f2,columns=2) $

( %t6)

( %o6)

16.7 Grá�cos animados

Del mismo modo que en la sección 14.8 se pueden crear animacio-nes únicamente en el entorno de wxMaxima. En este caso se utilizanlas funciones with_slider_draw y with_slider_draw3d con las cua-les se generan grá�cos idénticos a los que se generan con wxplot2d ywxplot3d, respectivamente, sin embargo tales grá�cos pueden ser ani-mados después de seleccionarlos y pulsar, luego, el botón Comenzaranimación, del cuadro de controles, de la barra de herramientas.

Figura 16.1: Cuadro de controles, ubicado en la barra de herramien-tas, para la animación de grá�cos.

Page 278: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

264 Cap. 16. Grá�cos con draw

with_slider_draw función para animar grá�cos dewxdraw2d

with_slider_draw3d función para animar grá�cos dewxdraw3d

Obtención de gráficos animados con draw.

Maxima

Esto genera un grá�co listo para ser animado. Para conseguir la animación primero

se selecciona el grá�co y luego se pulsa el botón , del cuadro de controles, y

automáticamente ésta es generada. Para detenerla basta pulsar el botón , del

mismo cuadro. También es posible navegar a través de cada cuadro de la animación

con tan sólo arrastrar a voluntad el botón , después de haber seleccionado

el grá�co.

( %i1) with_slider_draw(

a,[0,1,2,3,4,5],

color=red,line_width=2,yrange=[-1.5,1.5],

explicit(sin(x+a),x,-2* %pi,2* %pi)

);

( %t1)

( %o1)

Maxima

A continuación se de�ne la función in�ja �/*� para calcular el producto vectorial.

( %i2) infix(�/*�) $( %i3) �/*�(a,b):=[a[2]*b[3]-b[2]*a[3],

b[1]*a[3]-a[1]*b[3],a[1]*b[2]-b[1]*a[2]] $

Page 279: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 16.7. Grá�cos animados 265

Maxima

Esto de�ne la curva a, su primera derivada y su segunda derivada.

( %i4) a(t):=[cos(t),sin(t),t/8] $( %i5) define( �a′�(t),diff(a(t),t) ) $( %i6) define( �a′′�(t),diff(a(t),t,2) ) $

Maxima

Al animar la siguiente secuencia de cuadros se visualiza el tiedro de Frenet reco-

rriendo la curva a.

( %i7) with_slider_draw3d(

t,create_list(i* %pi/4,i,0,16),

color=dark-red,nticks=50,

parametric(cos(u),sin(u),u/8,u,0,4* %pi),

unit_vectors=true,

color=blue,

vector(a(t),�a′�(t)),

color=yellow,

vector(a(t),�a′�(t)/*�a′′�(t)),

color=red,

vector(a(t),(�a′�(t)/*�a′′�(t))/*�a′�(t)),

color=green,point_type=7,

points([a(t)]),

xrange=[-1.5,1.5],yrange=[-1.5,1.5],

zrange=[0,3],

user_preamble=�set size ratio 1�);

( %t7)

( %o7)

Page 280: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

266 Cap. 16. Grá�cos con draw

Maxima

Esta es la animación de un mor�smo entre la esfera y el toro.

( %i8) with_slider_draw3d(

a,create_list(i/8,i,0,8),

surface_hide=true,

user_preamble=�set size ratio 1�,

xtics=false,ytics=false,ztics=false,

axis_3d=false,

rot_vertical=80,rot_horizontal=100,

parametric_surface(

(1-a)*cos(t)*sin(u/2)-(a*sin(u))/3,

(a*sin(t)*(2-cos(u)))/3+

(1-a)*sin(t)*sin(u/2),

(a*cos(t)*(2-cos(u)))/3+(1-a)*cos(u/2),

t,0,2* %pi,u,0,2* %pi)

);

( %t8)

( %o8)

Page 281: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO17

Campos de direcciones con plotdf

El paquete plotdf permite crear grá�cos de campos de direccionespara Ecuaciones Diferenciales Ordinarias (EDO) de primer orden, opara un sistema de dos EDO's autónomas, de primer orden.

Como se trata de un paquete adicional, para poder usarlo debecargarlo primero con el comando load(�plotdf�). También es ne-cesario que Xmaxima esté instalado, a pesar de que ejecute Maxima

desde otra interface diferente (esto quiere decir que con wxMaxima

no puede usarse una función como wxplotdf).

Maxima

Inicialización del paquete plotdf.

( %i9) load(plotdf)$

Maxima

Campo de direcciones de la ecuación diferencial y′ = e−x + y y la solución que

pasa por (2,−0.1).

( %i10) plotdf(exp(-x)+y,[trajectory_at,2,-0.1]);

( %o10) 0

267

Page 282: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

268 Cap. 17. Campos de direcciones con plotdf

Figura 17.1: Grá�co obtenido con ( %i10) .

Maxima

Campo de direcciones de la ecuación diferencial y′ = x − y2 y la solución de

condición inicial y(−1) = 3.

( %i11) plotdf(x-y^2,[xfun,�sqrt(x);-sqrt(x)�],

[trajectory_at,-1,3], [direction,forward],

[yradius,5],[xcenter,6]);

( %o11) 0

Maxima

Campo de direcciones de un oscilador armónico, de�nido por las ecuaciones dxdt

= y

y dydt

= − kxm, y la curva integral que pasa por (x, y) = (6, 0), con una barra de

deslizamiento que permitirá cambiar el valor de m interactivamente (k permanece

�jo a 2.)

( %i12) plotdf([y,-k*x/m],[parameters,�m=2,k=2�],

[sliders,�m=1:5�], [trajectory_at,6,0]);

( %o12) 0

Page 283: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

269

Figura 17.2: Grá�co obtenido con ( %i11) .

Figura 17.3: Grá�co obtenido con ( %i12) .

Page 284: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

270 Cap. 17. Campos de direcciones con plotdf

Figura 17.4: Grá�cos obtenido con ( %i13) .

Maxima

Campo de direcciones de un péndulo amortiguado, incluyendo la solución para

condiciones iniciales dadas, con una barra de deslizamiento que se puede utilizar

para cambiar el valor de la masa, m, y con el grá�co de las dos variables de estado

como funciones del tiempo

( %i13) plotdf([y,-g*sin(x)/l - b*y/m/l],

[parameters,�g=9.8,l=0.5,m=0.3,b=0.05�],

[trajectory_at,1.05,-9],[tstep,0.01],

[xradius,6],[yradius,14],[xcenter,-4],

[direction,forward],[nsteps,300],

[sliders,�m=0.1:1�], [versus_t,1]);

( %o13) 0

Page 285: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO18

Archivos y operaciones externas

18.1 Generación de expresiones y archivos TEX

Si el usuario quiere combinar su trabajo con material existente enTEX, puede encontrar conveniente usar la función tex para convertirexpresiones de Maxima en forma conveniente de entrada para TEX.El resultado que así se obtiene es un fragmento de código que puedeincluirse en un documento mayor, pero que no puede ser procesadoaisladamente.

tex(expr) imprime en la consola la representa-ción en TEX de expr

tex(expr,false) devuelven el código TEX en formatode cadena

tex(expr,destino) añade la salida al archivo destino

Salidas de Maxima para TEX

Maxima

He aquí una expresión, impresa en forma estándar de Maxima.

( %i1) (x+y)^2/sqrt(x*y);

( %o1)(y+x)2√

x y

271

Page 286: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

272 Cap. 18. Archivos y operaciones externas

Maxima

He aquí la expresión previa en forma de entrada para TEX.

( %i2) tex( %);$${{\left(y+x\right)^2}\over{\sqrt{x\,y}}}$$

( %o2) false

Maxima

Esto añade la expresión(y + x)2

√x y

, traducida a TEX, al archivo ejemplo.tex ubi-

cado en d:/maximatex/.

( %i3) tex((x+y)^2/sqrt(x*y),

�d:/maximatex/ejemplo.tex�);

( %o3) false

texput(a,f ) establece el formato, en TEX, del áto-mo a, el cual puede ser un símbolo oel nombre de un operador

get_tex_

environment(op)devuelve el entorno TEX que se aplicaal operador op. Si no se ha asignadoningún entorno, devolverá el que tengapor defecto

set_tex_

environment(op,antes,después)

asigna el entorno TEX al operador op

get_tex_environment_

default( )devuelve el entorno TEXque se aplicaa expresiones para las cuales el opera-dor de mayor rango no tiene entornoTEXasignado

set_tex_environment_

default(antes,después)

asigna el entorno TEXpor defecto

Salidas de Maxima para TEX

Page 287: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 18.1. Generación de expresiones y archivos TEX 273

Maxima

De esta forma se asigna código TEXpara una variable.

( %i4) texput(s,�\\sqrt{2}�);

( %o4) \sqrt{2}

Maxima

Ahora puede usarse la asignación anterior para generar más código TEX.

( %i5) tex(s+1/2);$$\sqrt{2}+{{1}\over{2}}$$

( %o5) false

Maxima

El entorno TEX aplicado, por defecto, a expresiones, en Maxima, es $$ $$.

( %i6) tex(3/4);$${{3}\over{4}}$$

( %o6) false

Maxima

Con la función set_tex_environment_default es posible cambiar el entorno TEX.

En este caso se ha anulado todo entorno.

( %i7) set_tex_environment_default(� �, � �);

( %o7) [ , ]

Maxima

He aquí el resultado del nuevo código TEX.

( %i8) tex(3/4);{{3}\over{4}}

( %o8) false

Además de traducir expresiones individuales a TEX, Maxima tam-bién traduce cuadernos completos a documentos pdf LATEX. Para elloel usuario debe digitar el nombre que asignará al archivo resultante,

Page 288: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

274 Cap. 18. Archivos y operaciones externas

así como la respectiva extensión, tex, en la casilla Nombre de laventana Exportar que aparece después de elegir la opción Exportardel menú Archivo.

Figura 18.1: Primer paso para exportar un cuaderno.

Figura 18.2: Exportando un cuaderno como documento pdf LATEX

18.2 Generación de archivos HTML

Adicionalmente, Maxima brinda capacidades para convertir cuader-nos completos a páginas web. El proceso que debe seguirse para latraducción es el mismo que se siguió en la página 273, pero en estecaso la extensión será html.

Page 289: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 18.3. Generación de expresiones Lisp y Fortran 275

18.3 Generación de expresiones Lisp y Fortran

Si el usuario tiene programas escritos en Lisp o Fortran, puede serque quiera tomar fórmulas que ha generado en Maxima e insertarlasen el código original de sus programas. Maxima permite convertirexpresiones matemáticas en expresiones Lisp y Fortran.

:lisp $ %in escribe para Lisp la expresión a la quehace referencia la etiqueta %in

fortran(expr) escribe expr para Fortran

Salidas de Maxima para Lisp y Fortran.

Maxima

Aquí se obtienen expresiones para Lisp y Fortran.

( %i1) x^2+2*x+1;

( %o1) x2 + 2x+ 1

( %i2) :lisp $ %i9;((MPLUS) ((MEXPT) $X 2) ((MTIMES) 2 $X) 1)

( %i3) fortran(x^2+2*x+1);x ∗ ∗2 + 2 ∗ x+ 1

( %o3) done

Page 290: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

CAPÍTULO19

Programación con Maxima

La elaboración de programas con el lenguaje de programación de Ma-

xima permite al usuario de�nir sus propias funciones. De esta manerase hace posible la automatización de secuencias de operaciones queson útiles para abordar la solución de un determinado tipo de proble-ma.

Además, es posible implementar varias funciones, relacionadas concierto tema, y guardarlas en un solo archivo que luego se pueda ejecu-tar sin necesidad de visualizar todo el código elaborado. A tal archivose le conoce como paquete1 de funciones.

19.1 Operadores relacionales y lógicos

De manera similar que cualquier lenguaje de programación Maxima

incluye operadores relacionales y lógicos, así como estructuras de con-trol (que se utilizan para controlar el �ujo del programa en una ruti-na).

EnMaxima, los operadores lógicos pueden ser in�jos o pre�jos. Unoperador recibe el nombre de in�jo cuando éste debe escribirse entrelos operandos, por ejemplo el operador and cuya sintaxis es p and q,para ciertos operandos p y q. Por otra parte, un operador pre�jo es

1Del inglés package. Un paquete es almacenado en forma automática por Ma-

xima como archivo de extensión lisp y el código es convertido internamente allenguaje de programación Lisp.

276

Page 291: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.1. Operadores relacionales y lógicos 277

aquel que debe escribirse antes del operando, por ejemplo el operadornot cuya sintaxis es not p, para cierto operando p.

Cabe destacar que, en Maxima, casi todos los operadores lógicosson in�jos y únicamente hay un operador lógico pre�jo.

Operador Símbolo Tipo

menor que < operador relacional in�jo

menor o igual que <= operador relacional in�jo

igualdad (sintáctica) = operador relacional in�jo

negación de = # operador relacional in�jo

igualdad (por valor) equal operador relacional in�jo

negación de equal notequal operador relacional in�jo

mayor o igual que >= operador relacional in�jo

mayor o igual que >= operador relacional in�jo

y and operador lógico in�jo

o or operador lógico in�jo

no not operador lógico pre�jo

Operadores relacionales y lógicos.

Controlador Descripción

if permite, mediante una condición, que se ejecu-te o no se ejecute determinada tarea o línea decódigo

for es utilizado para generar una repetición de ins-trucciones entre un número inicial y un número�nal que deben ser indicados o, también, entreun conjunto de elementos de una lista

while repetirá sin detenerse un determinado códigomientras se cumpla una condición

unless repetirá sin detenerse un determinado códigohasta que se cumpla una condición

do se utiliza para realizar iteraciones con for, whiley unless

Principales estructuras de control.

Page 292: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

278 Cap. 19. Programación con Maxima

Maxima

He aquí un ejemplo sencillo en el que se muestra la sintaxis de if.

( %i1) if 2=3 then 1;

( %o1) false

( %i2) if 3=3 then 1;

( %o2) 1

Maxima

En este ejemplo se añade el resultado ha obtener en caso de que la condición sea

falsa.

( %i3) if 2=3 then 1 else 3;

( %o3) 3

Téngase en cuenta que las expresiones consideradas en los ejemplosde las entradas ( %i1) y ( %i2) equivalen a las expresiones:

if 2 = 3 then 1 else false y if 3 = 3 then 1 else false,respectivamente.

Maxima

Aquí se obtiene el valor ligado a la expresión verdadera más próxima (en este caso

3 = 3). Si todas las expresiones fuesen falsas, entonces se obtendría el último valor

(en este caso 4).

( %i4) if 2=3 then 1 elseif 3=3 then 5 else 4;

( %o4) 5

Maxima

Mediante este otro ejemplo se muestra la sintaxis de for.

( %i5) for i:1 thru 5 step 2 do print(i);

1

3

5

( %o5) done

Page 293: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.2. Operadores y argumentos 279

Maxima

Si no se indica el paso (incremento) se asume uno, por defecto.

( %i6) for i:1 thru 5 do print(i);

1

2

3

( %o6) done

Maxima

Para inicializar el contador en while se utiliza for.

( %i7) for i:1 while i<=3 do print(i);

1

2

3

( %o7) done

Maxima

Para inicializar el contador en unless también se utiliza for.

( %i8) for i:1 unless i>=4 do print(i);

1

2

3

( %o8) done

19.2 Operadores y argumentos

Casi todo en Maxima es un objeto de la forma

fun(a1, . . . , an),

es decir, una expresión que comprende un operador como fun y losargumentos de éste, a1, . . . , an. Las funciones op y args permitenaveriguar la estructura de las expresiones.

Page 294: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

280 Cap. 19. Programación con Maxima

op(expr) permite obtener el operador de la ex-presión expr

args(expr) permite obtener una lista cuyos ele-mentos son los argumentos de la ex-presión expr

Obtención del operador y de los argumentos de una expresión.

Maxima

Aquí se de�ne la expresión a+ b, la cual es almacenada en la variable expr.

( %i1) expr:a+b;

( %o1) b+ a

Maxima

A continuación, con la primera operación se obtiene el operador de la expresión

previamente de�nida; y en la segunda, se obtiene una lista con los argumentos de

dicha expresión.

( %i2) op(expr);

( %o2) +

( %i3) args(expr);

( %o3) [b, a]

Maxima

Es posible �reconstruir� la expresión usando la función apply.

( %i4) apply(op(expr),args(expr));

( %o4) b+ a

Maxima

Esto de�ne otra expresión.

( %i5) expr:ejemplo(x,y,z);

( %o5) ejemplo(x, y, z)

Page 295: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.2. Operadores y argumentos 281

Maxima

Aquí, nuevamente, se obtienen el operador y los argumentos de la expresión.

( %i6) op(expr);

( %o6) ejemplo

( %i7) args(expr);

( %o7) [x, y, z]

Maxima

También es posible �reconstruir� la última expresión usando la función apply.

( %i8) apply(op(expr),args(expr));

( %o8) ejemplo(x, y, z)

Maxima

Algunas expresiones (plot2d, integrate, etc.) requieren de una comilla simple.

( %i9) expr:'plot2d(x^2,[x,-1,1]);

( %o9) plot2d(x2, [x,−1, 1])

Maxima

Ahora si es posible obtener el operador y los argumentos de la expresión.

( %i10) op(expr);

( %o10) plot2d

( %i11) args(expr);

( %o11)[x2, [x,−1, 1]

]Maxima

También las listas y los conjuntos son objetos de la forma fun(a1, . . . , an). Aquí

se almacena una lista cualquiera en la variable expr.

( %i12) expr:[a,b,c,d];

( %o12) [a, b, c, d]

Page 296: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

282 Cap. 19. Programación con Maxima

Maxima

Aquí también se obtienen el operador y una lista con los argumentos.

( %i13) op(expr);

( %o13) [

( %i14) args(expr);

( %o14) [a, b, c, d]

19.3 Programación funcional

La programación funcional es la programación que pone énfasis en eluso de funciones. Maxima incluye las funciones prede�nidas apply,map, lambda que permiten apreciar la potencia de la programaciónfuncional.

apply(f, [expr1, . . . ,exprn])

construye y evalúa la expresiónf(arg1, . . . , argn)

map(f, expr1, . . . , exprn) devuelve una expresión cuyo operadorprincipal es el mismo que aparece enlas expresiones expr1, . . . , exprn perocuyas subpartes son los resultados deaplicar f a cada una de las subpartesde las expresiones

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

de�ne y devuelve una expresión lamb-da (es decir, una función anónima) conargumentos x1, . . . , xm; la cual devuel-ve el valor exprn

lambda([ [L] ] ,expr1, . . . , exprn)

de�ne y devuelve una expresión lamb-da con argumento opcional L; la cualdevuelve el valor exprn

lambda([ x1, . . . , xm, [L] ] ,expr1, . . . , exprn)

de�ne y devuelve una expresión lamb-da con argumentos x1, . . . , xm, argu-mento opcional L; la cual devuelve elvalor exprn

Funciones predefinidas para programación funcional.

Page 297: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.3. Programación funcional 283

Maxima

Aquí se de�ne la función G, la cual es aplicada luego a una lista cuyos elementos

pasan a ser los argumentos de G.

( %i1) G(x,y,z):=x^2+y^2+z^2 $( %i2) apply(G,[x-y,a+b,u]);

( %o2) (x− y)2 + u2 + (b+ a)2

Maxima

En este caso se aplica la función prede�nida min.

( %i3) apply(min,[7,9,3,4]);

( %o3) 3

Maxima

Esto de�ne la función F y luego la mapea en una lista.

( %i4) F(x):=x^3-1 $( %i5) map(F,[2,3,5,a]);

( %o5)[7, 26, 124, a3 − 1

]

Maxima

Aquí se muestra la de�nición de una función lambda f , la misma que posee dos

argumentos.

( %i6) f:lambda([x,y],x+y) $( %i7) f(a,b);

( %o7) b+a

Maxima

Ahora se de�ne una función lambda con argumento opcional.

( %i8) f:lambda([ [x] ],x^2) $( %i9) f(p);

( %o9)[p2]

( %i10) f(p,q,r,s,t);

Page 298: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

284 Cap. 19. Programación con Maxima

( %o10)[p2, q2, r2, s2, t2

]Maxima

En este ejemplo se de�ne una función lambda con dos argumentos y un argumento

opcional. Luego esta función es evaluada en tres argumentos y se obtiene una lista

con el resultado esperado, no obstante al evaluar la función en más argumentos

se obtiene una lista con tantos elementos como argumentos adicionales hay.

( %i11) f:lambda([ x,y,[z] ],x*z+y) $( %i12) f(p,q,r);

( %o12) [p r + q]

( %i13) f(p,q,r,s,t,u,v,w);

( %o13) [p r + q, p s+ q, p t+ q, p u+ q, p v + q, pw + q]

19.4 Implementación del paquete: ejemplo

En esta sección se implementará el paquete ejemplo, que incorporarálas funciones triangulo y circunferencia.

Maxima

Aquí se de�ne la función triangulo. Esta función permite calcular el área de un

triángulo y el baricentro de un conjunto de puntos de R2 , dados. Además, si los

puntos son colineales, devuelve el mensaje: Los puntos son colineales.

( %i1) triangulo(pts):=

block([f:lambda([h],endcons(1,h)),pts1,M,d,a],

pts1:map(f,pts),

M:apply(matrix,pts1),

d:determinant(M),

a:abs(d/2),

if d=0 then string(�Los puntos son colineales�)

else

(b:apply(�+�,pts)/3,

[sconcat(Area,�: �,a,� �,u^2),

sconcat(Baricentro,�: �,b)])

) $

Page 299: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.4. Implementación del paquete: ejemplo 285

Maxima

Dado el conjunto de puntos del plano {(1, 2), (3,−1), (2, 3)}, no colineales, la fun-ción triangulo devuelve el área y las coordenadas del baricentro del triángulo

de�nido por los puntos dados.

( %i2) p:[ [1,2],[3,-1],[2,3] ] $( %i3) triangulo(p);

( %o3) [ Area : 5/2 uˆ2, Baricentro : [2, 4/3] ]

Maxima

Para visualizar los grá�cos se utilizará el paquete draw.

( %i4) load(draw) $

Maxima

Esto muestra la grá�ca del triángulo previamente analizado, conjuntamente con

el punto que corresponde al baricentro del mismo.

( %i5) wxdraw2d(

color=red,fill_color=white,line_width=2,

polygon(p),

point_type=6,color=blue,

points([ [2,4/3] ]),

user_preamble=�set size ratio 1�

);

( %t5)

( %o5)

Page 300: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

286 Cap. 19. Programación con Maxima

Maxima

Puesto que, en este caso, los puntos del conjunto {(1, 1), (2, 2), (3, 3)} son colinea-

les, la función triangulo devuelve un mensaje indicando éste hecho.

( %i6) p:[ [1,1],[2,2],[3,3] ] $( %i7) triangulo(p);

( %o7) “Los puntos son colineales′′

Maxima

Aquí se de�ne la función circunferencia que permite obtener la ecuación de la

circunferencia de�nida por tres puntos dados.

( %i8) circunferencia(pts):=

block([f:lambda([h],endcons(1,h)),

g:lambda([h],cons(h[1]^2+h[2]^2,h)),

pts1,M,d,eq],

pts1:map(f,pts),

M:apply(matrix,pts1),

d:determinant(M),

if d=0 then string(�Los puntos son colineales�),

else

(aux:map(g,cons([x,y,1],pts1)),

M:apply(matrix,aux),

d:determinant(M),

eq:expand(d),

expand(eq/coeff(eq,x^2))=0)

) $

Maxima

Dado el conjunto de puntos del plano {(1, 2), (3,−1), (2, 3)}, no colineales, la fun-ción circunferencia devuelve la ecuación de la circunferencia de�nida por estos

puntos.

( %i9) p:[ [1,2],[3,-1],[2,3] ] $( %i10) circunferencia(p);

( %o10) y2 − 11 y5 + x2 − 29 x

5 + 265 = 0

Page 301: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Sec. 19.4. Implementación del paquete: ejemplo 287

Maxima

Esto muestra la grá�ca de la circunferencia previamente analizada, conjunatmente

con los puntos que la de�nen.

( %i11) wxdraw2d(

implicit(circunferencia(p),x,0,6,y,-2,4),

point_type=6,color=red,point_size=1,

points(p),

user_preamble=�set size ratio 1�

);

( %t11)

( %o11)

Maxima

Igual que con la función triangulo, para el conjunto de puntos del plano {(1, 1),(2, 2), (3, 3)}, la función circunferencia devuelve un mensaje indicando que éstos

son colineales.

( %i12) p:[ [1,1],[2,2],[3,3] ] $( %i13) circunferencia(p);

( %o13) “Los puntos son colineales′′

Hasta aquí se han de�nido, y se ha veri�cado el correcto funcio-namiento de, las funciones triangulo y circunferencia. Seguida-mente se guardará la de�nición de estas funciones en un �chero denombre ejemplo y de extensión lisp, el cual constituirá un ejemplo deun paquete de funciones de�nido por el usuario.

Naturalmente, si el usuario desea puede copiar solamente la de-�nición de las citadas funciones y luego guardarlas sin necesidad decopiar y ejecutar los ejemplos.

Page 302: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

288 Cap. 19. Programación con Maxima

Maxima

Esto guarda todas las funciones de�nidas por el usuario en el archivo

ejemplo.lisp. El directorio donde se guardará el �chero es indicado por el usuario,

en este caso éste es: d:/maximapackages.

( %i14) save(�d:/maximapackages/ejemplo.lisp�,

functions) $

Una vez que se ha guardado la de�nición de las funciones en elmencionado �chero es posible inicializarlo como si se tratara de cual-quier paquete incorporado en Maxima.

En este caso se asume que el usuario ha cerrado el cuaderno detrabajo actual deMaxima y luego ha abierto un nuevo cuaderno desdeel cual inicializará el paquete ejemplo.lisp.

Maxima

Esto inicializa el paquete ejemplo.lisp desde el directorio en el que se guardó

(vea 15.1).

( %i15) load(�d:/maximapackages/ejemplo.lisp�) $

Maxima

Ahora es posible ejecutar cualquiera de las funciones incorporadas en el paquete

ejemplo.lisp sin necesidad de exponer el código del mismo.

( %i16) p:[ [0,0],[2,0],[1,sqrt(3)] ] $( %i17) triangulo(p);

( %o17) [ Area : sqrt(3) uˆ2, Baricentro : [1, 1/sqrt(3)] ]

Page 303: manual de Maxima de R. Ipanaqué - unp.edu.peunp.edu.pe/pers/ripanaque/download/manual.pdf · Generación de expresiones Lisp y ortranF . . . . . . .275 19.Programación con Maxima

Bibliografía

[1] Fokker, J. PROGRAMACIÓN FUNCIONAL. http:

//people.cs.uu.nl/jeroen/courses/fpsp.pdf (1996).

[2] Rodríguez, J. R. MAXIMA CON WXMAXIMA: SOFTWARELIBRE EN EL AULA DE MATEMÁTICAS. http://knuth.uca.es/repos/maxima (2007).

[3] Rodríguez, M. y Villate, J. MANUAL DE MAXIMA ver.5.18. http://maxima.sourceforge.net/es/documentation.

html (2009).

[4] Rodríguez, M. PRIMEROS PASOS EN MAXIMA. www.

telefonica.net/web2/biomates/maxima/max.pdf (2008).

[5] Rodríguez, M. SOFTWAREMATEMÁTICO BÁSICO: MAXI-MA. www.telefonica.net/web2/biomates/maxima/i-math.

pdf (2008).

[6] Rodríguez, M. MAXIMA: UNA HERRAMIENTA DE CÁLCU-LO. http://softwarelibre.uca.es/cursos/maxima/cadiz.pdf (2006).

289