Izquierda Indice Derecha

 

Gráficos usando Maxima básico

Maxima tiene la posibilidad, via programas externos, de producir gráficos de funciones en 2 y 3 dimensiones. También puede producir gráficos a partir de una tabla de puntos. Actualmente pueden utilizarse como programas externos openmath, (identificado también como xmaxima), gnuplot, mgnuplot y geomview. La opción por defecto es actualmente es gnuplot siempre que esté disponible. Geomview es un programa muy potente para visualizar gráficos 3D, disponible para Linux/Unix. Siempre que sea posible es conveniente usar la versión 5.24 o superior de Maxima, que incluye más posibilidades que las versiones anteriores.

El dibujo de gráficos no requiere ningún paquete especial y su uso está documentado en http://maxima.sourceforge.net/docs/manual/en/maxima_12.html (existe una versión en español a veces menos actualizada). Pero utilizando el paquete draw, que recomendamos, se añaden nuevas e interesantes posibilidades, que también están documentadas en http://maxima.sourceforge.net/docs/manual/es/maxima_47.html.
Las referencias anteriores estaban operativas cuando se escribieron estas notas, pero pueden haber sufrido cambios.  

 

Indice

Gráficos 2D con Maxima básico

El comando para dibujar es plot2d y la sintaxis la vamos a ir analizando progresivamente ilustrándola con ejemplos. Señalar únicamente ahora que es posible dibujar gráficas de funciones expresadas sea en coordenadas explícitas, paramétricas, implicitas y también utilizando una colección de puntos. Utilizando la opción gnuplot_preamble es posible dibujar en polares (más abajo hay un ejemplo).

A continuación algunos ejemplos que ilustran el funcionamiento

  1. plot2d( sin(x),[x,0,2*%pi] )$
  2. /* tres curvas en la misma imagen */ plot2d([sin(x), x^2, cos(x)], [x,0,%pi/2], [title, "Tres curvas en la misma imagen"] /* título de la imagen */ )$
  3. f(x):=1/((x-1)*(x+1))$ plot2d(f(x),[x,-2,2], [y,-10,10] /* fijar el intervalo en el eje OY (opcional) */ )$
  4. plot2d(sin(x), [x,-%pi,%pi], [x,-3.5, 3.5],[y,-1.2, 1.2], /* fijar intervalos OX y OY independientes del dominio */ )$
  5. plot2d([parametric,cos(t),sin(t),[t,-%pi,%pi]], [x,-1.2,1.2], [y,-1.2,1.2] )$
  6. plot2d( [discrete, [[10,.6], [20,.9], [30,1.1], [40,1.3], [50,1.4]]])$ /* por defecto, los puntos se unen mediante rectas */
  7. plot2d( [discrete, [[10,.6], [20,.9], [30,1.1], [40,1.3], [50,1.4]]], [style, points], /* puntos sin unir por rectas */ [xlabel,"longitud"], /* etiquetas personalizadas en los ejes */ [ylabel,"periodo"])$
  8. numer:true$ a[1]:2$ a[n]:= 1/(3 -a[n-1])$ plot2d( [discrete, create_list([n,a[n]],n,1,10)], [style, points], [xlabel,"n"], [ylabel,"a[n]"])$
  9. plot2d( 3*cos (2*t),[t,-%pi,%pi]);
  10. /* la misma función interpretada como polares */ plot2d( 3*cos (2*t),[t,-%pi,%pi], [gnuplot_preamble,"set polar"]);
  11. f(x):=x^3$ g(x):= if x< 0 then x^2 else x$ /* definida a trozos */ plot2d( [f,g, [parametric,cos(t),sin(t),[t,-%pi,%pi],[nticks,80]], [discrete, create_list([-1/n,n/(n+1)],n,1,50)]], [x,-1,1], /* rango de valores */ [gnuplot_preamble,"set key bottom"] /* véase Opciones específicas para Gnuplot */ )$
  12. plot2d( [sin(x),cos(x),[discrete,[[0,0],[%pi,-1]]]], [x,-%pi,%pi], /* rango de valores */ [legend,"seno","coseno","recta"], /* etiquetas personalizadas de los gráficos */ [gnuplot_preamble,"set key top left"] /* véase Opciones específicas para Gnuplot */ )$
  13. /* no olvide cargar el paquete implicit_plot */ implicit_plot(x^3-2*x*y+y^3, [x,-3,3], [y,-3,3])$
  14. /* este resultado no es satisfactorio */ plot2d(entier(x),[x,-2.5,2.5], [nticks,100],[legend,"Parte entera"])$
  15. /* pero éste sí lo es */ plot2d(entier(x),[x,-2.5,2.5], [nticks,100],[legend,"Parte entera"], [style, [points,2]], /* esta es la clave */ [ylabel,"entier(x)"] )$

 

Indice

Gráficos 3D con Maxima básico

Las superficies pueden venir dadas usando: coordenadas cartesianas, coordenadas cilíndricas, esféricas, o bien de forma paramétrica.

 

Primeros ejemplos

  1. plot3d(-x^2 + y^2, [x, -3, 3], [y,-2,2], [legend, false] /* la fórmula no se muestra */ )$
  2. plot3d(-x^2 + y^2, [x,-3, 3], [y, -2, 2], [plot_format, xmaxima])$
  3. /* geomview sólo funciona en GNU-Linux y ha de estar instalado */ plot3d(-x^2 + y^2, [x, -3, 3], [y, -2, 2], [plot_format, geomview])$

Más ejemplos:

  1. /* definimos primero las fórmulas parámetricas */ x1_expr:cos(v)*(10.0+6*cos(u))$ x2_expr: sin(v)*(10.0+6*cos(u))$ x3_expr: -6*sin(u)$ plot3d ([x1_expr, x2_expr, x3_expr], [u, -%pi, %pi],[v, -%pi, %pi], ['grid,60, 60],[legend, false], [plot_format, gnuplot] )$
  2. /* una superficie */ plot3d([-x^2+y^2,[x,-2,2],[y,-2,2]]);
  3. /* otra superficie */ plot3d([4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]] )$
  4. /* las dos juntas, con fórmulas ocultas */ plot3d([-x^2+y^2, 4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]],[legend, false] )$
  5. /* ahora con xmaxima, que no muestra fórmulas y usa paletas diferentes */ plot3d([-x^2+y^2, 4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]], [plot_format, xmaxima]);

Cuando se utiliza más de una superficie, gnuplot emplea la misma paleta de colores en todas ellas (también ocurre así con geomview). En cambio el formato xmaxima emplea una paleta de color diferente para cada uno de ellos lo cual facilita la identificación de las superficies.

 

Cilíndricas y esféricas

Este tipo de coordenadas también pueden ser utilizadas mediante la opción transform_xy que adopta el valor polar_to_xy para el primer tipo y spherical_to_xyz para el segundo.
En el primer caso se interpretan las dos variables independientes como polares, transformándolas luego a coordenadas cartesianas.
En el segundo caso se interpretarán las variables independientes como esféricas, transformándolas luego a coordenadas cartesianas.

Ejemplos:

  1. /* un cono (lineal) de revolución */ plot3d(r,[r, 0, 1],[t, 0, 2*%pi], [transform_xy, polar_to_xy],[legend,false])$
  2. /* un paraboloide (cuadrático) de revolución (no cerrado) */ plot3d(r^2,[r, 0, 1],[t, 0.4*%pi, 2*%pi], [transform_xy, polar_to_xy],[legend,false]);
  3. /* la esfera de radio 2 en esféricas */ /* el orden de los ángulos debe ser el indicado */ plot3d (2,[theta, -%pi/2, %pi/2],[phi, 0, 2*%pi], [transform_xy,spherical_to_xyz],[plot_format,xmaxima]);
  4. /* la semiesfera de radio 2 en esféricas */ plot3d(2,[theta, 0, %pi/2],[phi, 0, 2*%pi],[legend,false], [transform_xy,spherical_to_xyz]);

Conviene también saber que si se está utilizando wxMaxima como interfaz gráfico de trabajo existen los comandos wxplot2d y wxplot3d cuya sintaxis y funcionamiento coincide con el de los correspondientes plot2d y plot3d salvo que las imágenes, en lugar de mostrarse en una ventana independiente, quedan incrustadas en el propio fichero, al igual que ocurre con las salidas no gráficas.

 

Indice

Opciones

En este apartado indicaremos como controlar mediante el argumento opciones que figura en la sintaxis de plot2d y plot3d, y que no es obligatorio, determinados aspectos del gráfico que modifican el comportamiento obtenido por defecto.

Hay aspectos que están relacionados con la apariencia (como colores, leyendas, títulos, densidad de puntos) y otros que tienen que ver el formato de salida (como el tipo de programa que lo visualizará, si se guardará o no en un fichero y en su caso cual será el formato gráfico utilizado). Estos dos aspectos tienen una cierta autonomía, pero no son completamente independientes y el primero de ellos está condicionado, con frecuencia, por el segundo.

índice de opciones

Opciones comunes a todos los formatos gráficos
Opciones específicas para formatos de Gnuplot

Maxima dibuja de acuerdo con una lista de opciones o parámetros que controlan su comportamiento.

El valor actual de las opciones se obtiene mediante

plot_options;

Además de informar de los valores actuales, set_plot_option actúa como un comando de un argumento que permite cambiar una o varias opciones con carácter general para todos los sucesivos gráficos. Cada opción que se deseen cambiar se incluye (con sus respectivos corchetes) en el argumento de dicho comando y, si son varias, se separan entre sí mediante comas.

También es posible incluir en el argumento de cada comando plot2d o plot3d las opciones deseadas (con sus respectivos corchetes y separadas entre sí por comas) en cuyo caso tales opciones sólo tendrán efecto en el correspondiente gráfico.

 

Indice

Opciones comunes

Maxima puede utilizar diferentes programas gráficos para dibujar; en este apartado se describen las opciones comunes para todos los formatos gráficos que conoce. Posteriormente se van detallando las nuevas opciones específicas para los formatos gnuplot (que es el que tiene mayores posibilidades) y PS (muy elemental)


 

Indice

Opciones específicas para Gnuplot

Gnuplot es un potente programa de dibujo con multitud de posibilidades. Pero cuando Maxima realiza un dibujo utilizando Gnuplot lo que hace es generar una lista ordenadas de puntos (a través de sus coordenadas) que Gnuplot posiciona y enlaza entre sí, generalmente, mediante segmentos (aunque esta cuestión puede ser controlada). Pero no todas las posibilidades de Gnuplot están implementadas como comandos de Maxima. No obstante, Maxima implementa la opción gnuplot_preamble (más abajo descrita) que permite añadir al preámbulo del fichero instrucciones adicionales de acuerdo con la sintaxis de Gnuplot. Por supuesto, Gnuplot puede realizar gráficos de forma totalmente independiente de Maxima.

Formatos en los que se pueden guardar los gráficos
El programa gnuplot es capaz de guardar el gráfico en una gran variedad de formatos que incluye los habituales (postscript, png, jpeg) y otros menos habituales (latex, pstricks, tikz, eepic, tpic, dxf, svg). La instrucción gnuplot para elegir cada uno de ellos es "set terminal Nombre". Estos terminales de gnuplot (al menos parcialmente) pueden ser seleccionados utilizando la siguiente opción:

 

Pasando parámetros a Gnuplot de forma directa

El parámetro gnuplot_preamble es de utilidad cuando los demás opciones resultan insuficientes. La idea es añadir, en la cabecera del documento que Maxima genera, código adicional destinado a Gnuplot.

 


 

Saber más

 


 

 

Izquierda Indice Derecha