Izquierda Indice Derecha

 

Gráficos usando plot2d y plot3d

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 gnuplot siempre que esté disponible, que es muy rica en posibilidades y permite exportar los gráficos a diferentes formatos, en particular a tikz que resulta muy adecuado para su uso en LaTeX.

En estas notas nos limitaremos a las opciones que usamos más frecuentemente en la docencia. Véase al final de esta página la sección Saber más

 

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. 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. Haciendo uso de la opción gnuplot_preamble, con los parámetros adecuados, es posible dibujar también en polares (más abajo hay un ejemplo).

Comenzamos con algunos ejemplos que ilustran el funcionamiento, pero prescindimos por ahora de las opciones que, como su nombre sugiere, no son obligatorias.

  1. /* Tres curvas en la misma imagen */ plot2d([sin(x), x^2, cos(x)], [x,0,%pi/2])$
     
  2. /* Otra curva en explícitas */ plot2d(cos(x), [x,-%pi,%pi])$
     
  3. /* Las funciones se pueden definir antes y a trozos */ f(x):=x^3$ g(x):= if x< 0 then x^2 elseif x <1/2 then x$ plot2d( [f(x),g(x)],[x,-1,1] )$
     
    Las funciones definidas a trozos permiten personalizar el dominio de las mismas, sin necesidad de que coincida con el global.
    Experimente con definiciones como las siguientes:
    g(x):= if x< 0 then x^2 else x$
    g(x):= if x< 0 then x^2$
     
  4. /* Circunferencia en paramétricas */ plot2d( [parametric,cos(t),sin(t),[t,-%pi,%pi]])$
     
  5. /* Una curva en implícitas */ load(implicit_plot)$ implicit_plot(x^3-2*x*y+y^3, [x,-3,3], [y,-3,3])$
     
  6. /* Colección de puntos unidos por rectas */ plot2d([discrete, [ [10,.6], [20,.9], [30,1.1], [40,1.3], [50,1.4] ] ])$
     
  7. /* Cuatro funciones de tipos diferentes */ f(x):=-x^3$ g(x):= if x< 0 then x^2$ plot2d( [ f, g, [parametric, cos(t), sin(t) , [t,%pi/2,2*%pi]], [discrete, create_list( [1/n,-1/2+n/(n+1)], n,1,5 )] ], [x,-1,1] )$

A continuación se ilustran de algunas de las opciones de uso más frecuente.
1) Poner título a la imagen; o fijar el rango de valores de un eje, o de los dos;
2) Personalizar las etiquetas en los ejes;
3) Personalizar las leyendas de las las funciones;
4) Estilo de los puntos en gráficos discretos (y continuos).

Algunas de las opciones son específicas para ese tipo de comando, pero otras sirven para todos los tipos. Es fácil distinguirlas.

  1. /* Título e intervalos OX y OY independientemente del dominio de las x */ plot2d([sin(x), x^2], [x,-%pi,%pi], [ title, "Dos funciones fijando el rango en los ejes"], [x,-3.5, 3.5], [y,-1.2, 1.2])$
     
  2. /* Personalizar etiquetas de los ejes */ plot2d( log(x), [x,1, 10], [ xlabel,"Eje OX"], [ylabel,"Eje OY"] )$
     
  3. /* Personalizar leyenda de las funciones */ f(x):=x^3$ g(x):= if x < 0 then x^2 elseif x < 1/2 then x$ plot2d( [f(x),g(x)],[x,-1,1], [ legend, "f(x)", "g(x)" ] )$
     
    Comparar con un resultado anterior
     
  4. /* Puntos en lugar de poligonales */ 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]"])$
      plot2d([discrete, [ [1,2], [2,5],[3, 1] ] ], [y, 0,6], [ style, [points,4]], [xlabel,"base"], [ylabel,"altura"])$
  5. /* Nivel de densidad de los puntos */ plot2d(entier(x),[x,-2.5,2.5], [ nticks,100], [legend,"Parte entera"], [ylabel, ""])$
     
    Cambiando en el estilo de los puntos el resultado es mejor
      plot2d(entier(x),[x,-2.5,2.5], [nticks,100], [legend,"Parte entera"], [ylabel, ""], [ style, [points,2]])$
  6. /* Circunferencia en paramétricas sin autoescalar*/ plot2d( [parametric,cos(t),sin(t),[t,-%pi,%pi]], [same_xy])$
     

La utilización de coordenadas polares requiere hacer uso del comando gnuplot_preamble que también permite personalizar la posición de las leyendas de los gráficos, o enviar código directo a Gnuplot (lo cual requiere conocer el lenguaje que Gnuplot utiliza).

  1. /* Una misma fórmula produce resultados diferentes utilizando las opciones */ plot2d( 3*cos (2*t),[t,-%pi,%pi]);
     
    plot2d( 3*cos (2*t),[t,-%pi,%pi], [ gnuplot_preamble,"set polar"]);
     
  2. /* Tres gráficas con leyendas y posición personalizada */ plot2d( [sin(x),cos(x), [discrete,[[0,0],[%pi,-1]]]], [x,-%pi,%pi], [legend,"seno","coseno","recta"], /* leyendas */ [gnuplot_preamble,"set key top left"])$

 

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. /* La fórmula dependiendo del formato elegido puede o no mostrarse */ plot3d(-x^2 + y^2, [x, -3, 3], [y,-2,2], [legend, false] )$
  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. /* Una superficie con 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 con fórmula cartesiana */ plot3d([-x^2+y^2,[x,-2,2],[y,-2,2]]);
     
  3. /* Dos superficies juntas, con leyendas ocultas */ plot3d([-x^2+y^2, 4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]],[legend, false] )$
     
  4. /* Lo mismo con el formato xmaxima, que tiene otra apariencia */ 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, por defecto, 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 empleadas en plot3d utilizando respectivamente:

[ transform_xy, polar_to_xy ]
[ transform_xy, spherical_to_xyz ]
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.

 

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. Ya hemos utilizado en los ejemplos precedentes alguna de las opciones disponibles.

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 ejecutando el comando

set_plot_option();

Pero el comando sirve también para una vez conocidos los valores de las diferentes opciones ejecutarlo de nuevo, indicando dentro del paréntesis, con sus respectivos corchetes y separados entre sí por comas, los nuevos valores que se desean asignar a dichas opciones. Tales valores se aplican a todos los gráficos mientras no sean cambiados durante la sesión.

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

Dynamics

Un punto fijo atractivo de una función F es un punto z tal que F(z)=z que además cumple que la sucesión x[1], F(x[1])=x[2],... F(x[n])=x[n+1]... converge a z.
El teorema del punto fijo de Banach se ocupa de precisar condiciones de existencia.

El paquete dynamics de Maxima (que puede ser necesario cargar previamente mediante el correspondiente comando load en versiones antiguas de Maxima) permite la visualización gráfica de la trayectoria de un punto a través de la iteración mediante una función F utilizando el comando

  1. staircase(cos(x), 1, 11, [x, 0, 1.2], [title, "Construcción recurrente de un punto fijo para la función coseno"])$
     
  2. staircase(x/(3-2*x), -1, 10, [y, -1.5, 0.5],[legend,"","y=x/(3-2*x)","y=x"])$
    La sucesión recurrente definida por la función x/(3-2*x) y ValorInicial -1 es monótona creciente y acotada superiormente: existe el límite de la sucesión y vale 0.
     
  3. staircase(x/(3-2*x), 1/4, 10, [legend,"","y=x/(3-2*x)","y=x"], [gnuplot_preamble,"set key top left"])$
    La misma función, cuando el ValorInicial es 1/4 genera una sucesión monótona decreciente y acotada inferiormente: también existe el límite de la sucesión y vale 0.



 


  1. Ap_GraficaSucesionRecurrenteLimite.wxmx Ilustra la utilidad de staircase para visualizar convergencia de sucesiones recurrentes


 

Saber más

 


 

 

Izquierda Indice Derecha