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.
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).
- plot2d(expresión, [variable,mínimo,máximo],opciones)
La fórmula aparece indicada en el eje OY si se trata sólo de una función.
- plot2d([expr_1, ..., expr_n], [variable,mínimo,máximo],opciones)
Permite dibujar varias funciones simultáneamente. Las fórmulas aparecen en la esquina y las funciones van cambiando automáticamente de color.
- plot2d([parametric, x_expr, y_expr, t_rango],
opciones)
- implicit_plot(expresión, [x, min, max], [y, min, max])
Requiere un paquete adicional que sólo hay que cargar una vez en la sesión
mediante load(implicit_plot)$
.
- implicit_plot([expr_1, ..., expr_n], [x, min, max], [y, min, max])
- plot2d([discrete, lista_de_puntos], opciones)
A continuación algunos ejemplos que ilustran el funcionamiento
- plot2d( sin(x),[x,0,2*%pi] )$
- /* 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 */
)$
- f(x):=1/((x-1)*(x+1))$ plot2d(f(x),[x,-2,2],
[y,-10,10] /* fijar el intervalo en el eje OY (opcional) */
)$
- plot2d(sin(x), [x,-%pi,%pi],
[x,-3.5, 3.5],[y,-1.2, 1.2], /* fijar intervalos OX y OY independientes del dominio */
)$
- plot2d([parametric,cos(t),sin(t),[t,-%pi,%pi]],
[x,-1.2,1.2], [y,-1.2,1.2] )$
- plot2d(
[discrete, [[10,.6], [20,.9], [30,1.1], [40,1.3], [50,1.4]]])$
/* por defecto, los puntos se unen mediante rectas */
- 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"])$
- 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]"])$
- plot2d( 3*cos (2*t),[t,-%pi,%pi]);
-
/* la misma función interpretada como polares */
plot2d( 3*cos (2*t),[t,-%pi,%pi],
[gnuplot_preamble,"set polar"]);
- 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 */
)$
- 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 */
)$
- /* no olvide cargar el paquete implicit_plot */
implicit_plot(x^3-2*x*y+y^3, [x,-3,3], [y,-3,3])$
- /* este resultado no es satisfactorio */
plot2d(entier(x),[x,-2.5,2.5],
[nticks,100],[legend,"Parte entera"])$
- /* 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)"] )$
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.
- plot3d (expresión, [variable_x mínimo, máximo], [variable_y mínimo, máximo], opciones)
La expresión es del tipo f(x,y) y corresponde a z=(f,y) para coordenadas cartesianas
- plot3d ([superficie_1,superficie_2...superficie_n], [variable_x mínimo, máximo], [variable_y mínimo, máximo], opciones)
Como la precedente salvo que dibuja varias superficies de forma simultánea.
- plot3d ([x_expresión,y_expresión,z_expresión],
u_rango, v_rango, opciones)
Las expresiones son del tipo f1(u,v), f2(u,v), f3(u,v) y corresponden a coordenadas paramétricas dadas por x=f1(u,v), y=f2(u,v), z=f3(u,v)
Primeros ejemplos
- plot3d(-x^2 + y^2, [x, -3, 3], [y,-2,2],
[legend, false] /* la fórmula no se muestra */
)$
- plot3d(-x^2 + y^2, [x,-3, 3], [y, -2, 2],
[plot_format, xmaxima])$
- /* 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])$
En el formato gnuplot
(wxWidgets) es posible guardar, desde los menús y en diferentes tipos de formato, el gráfico tal y como se est váisualizando.
Es posible mover la superficie
usando el ratón o las flechas de los cursores.
Con el botón central del ratón se
cambian las escalas en los ejes.
Pulsando la tecla b se pinta o despinta la
caja.
Con la tecla g se quita y pone la rejilla de coordenadas (también puede
hacerse desde el menú).
En el formato xmaxima (openmath) pulsando el botón izquierdo del ratón puede
girarse el gráfico. Con el botón derecho se desplaza. Desde los menús es posible
hacer zoom. También es posible guardar el gráfico en la posición elegida
(plot3d) mediante una captura de pantalla implementada en los menús en formato
postscript.
En el caso del formato
geomviev (que funciona sólo en GNU-Linux/Unix y que hay que instalarlo de forma
independiente de Maxima) puede conseguirse que el gráfico gire continuamente
tras darle un impulso inicial.
Más ejemplos:
- /* 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] )$
- /* una superficie */
plot3d([-x^2+y^2,[x,-2,2],[y,-2,2]]);
- /* otra superficie */
plot3d([4*sin((x^2+y^2))/(x^2+y^2),[x,-2,2],[y,-2,2]] )$
- /* 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] )$
- /* 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:
- /* un cono (lineal) de revolución */
plot3d(r,[r, 0, 1],[t, 0, 2*%pi],
[transform_xy, polar_to_xy],[legend,false])$
- /* 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]);
- /* 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]);
- /* 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.
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.
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)
- [plot_format, Formato de salida ] Identifica
el Formato de salida en el que el gráfico será guardado y
(generalmente) Maxima realizará una llamada al programa correspondiente para
mostrar el gráfico. Cada formato de salida tiene una posibilidades diferentes y
por tanto los parámetros de dibujo que cada uno admite también. Los valores
posibles de Formato de salida son actualmente:
- gnuplot Utiliza el programa de dibujo Gnuplot
(que se gestiona en línea de comando) de uso muy extendido. Maxima requiere que esté instalado. Dependiendo del sistema operativo, la instalación de Maxima puede, o no, conllevar la instalación automatizada de Gnuplot.
Con este formato se
genera automáticamente un fichero maxout.gnuplot
con un preámbulo
que contiene instrucciones en el lenguaje propio de Gnuplot y una tabla de
puntos. Este archivo, y otros similares que irán apareciendo más abajo, se
guarda, segn el sistema operativo en el directorio home (Documents and Settings) del
usuario. Internamente Maxima llama al programa gnuplot para que lea e interprete
este fichero (algo que corresponde a la instrucción load "maxout.gnuplot"
de
Gnuplot). En el caso de MS-Windows puede ser necesario cerrar previamente el
gráfico actual antes de poder mostrar otro, lo cual resulta un incomodidad.
- gnuplot_pipes Es una variante de la
anterior usada por defecto en las plataformas distintas a MS-Windows. La
comunicación con Gnuplot se realiza a través de una tubería del sistema y en
lugar de maxout.gnuplot se genera un fichero
maxout.gnuplot_pipes
que contiene únicamente las coordenadas de los puntos del gráfico que Gnuplot se
encarga de dibujar.
- mgnuplot es una variante de
gnuplot, la diferencia es que muestra una ventana desde la que es posible
cambiar el punto de mira en gráficos tridimensionales y recuperar y modificar
los parámetros de configuración que gnuplot utiliza (escribir en la pantalla
Edit el código y pulsar Enter). En cuanto a visualización interactiva tiene
prestaciones similares a openmath, pero la información se guarda en dos
ficheros:
maxout.mgnuplot
que contiene la tabla de puntos y
gnuoptionxx
que es el que lee gnuplot y que contiene los parámetros
de configuración de gnuplot, de forma independiente, lo cual facilita la acción
sobre los mismos si se conocen los comandos de gnuplot. De hecho, a través de la
ventana Edit pueden ir cambiándose los parámetros, comprobando interactivamente
el efecto y guardar dichos parámetros en un fichero gnuplot.out
que
se convierte así en un sustituto potencial de gnuoptionxx. Para poder realizar
esas operaciones interactivas es necesario tener instalado el intérprete wish
porque mgnuplot es un programita realizado en lenguaje tcl tk. En Linux el
intérprete wish suele estar instalado, no así en MS-Windows, pero también está
disponible bajo licencia GPL.
- openmath Un formato creado por Scherlter. Muy útil para la visualización de gráficos porque
permite desplazarlos (botón derecho del ratón), hacer zoom (pinchando donde
están las coordenadas), girar los tridimensionales (botón izquierdo del ratón) y
más cosas, entre otras guardarlo en formato postscript (no es muy fino en este
tema y genera ficheros muy grandes, por lo que resulta poco aconsejable). Los
gráficos pueden aparecer insertados dentro de xmaxima o en una ventana
independiente (que es lo aconsejable); este comportamiento puede ser cambiado
(para openmath) desde los menús desplegables de xmaxima (
Options->Plot
Windows
). Si el gráfico va a ser guardado para su posterior utilización,
el formato gnuplot resulta el más adecuado.
- geomview
Otro programa de dibujo sólo para
plot3d
en GnuLinux-Unix
parecido al formato openmath. El gráfico es
guardado en un fichero de nombre maxout.geomview
para que sea leído
por geomview si está instalado en el sistema.
- /* con carácter global, salvo modificaciones posteriores */
set_plot_option([plot_format, openmath]);
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2]);
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],[plot_format,gnuplot]);
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],[plot_format, geomview]);
- [x, Valor inicial, Valor final ]
Representa el
intervalo en el que varía la variable x. Análogo para las variables y z t.
- [xlabel, "Etiqueta"]
Fija la "Etiqueta"
del primer eje. Si no se hace uso de la opción, mostrará el nombre de la
variable independiente en plot2d
e implit_plot
o de la
primera variable independiente en plot3d
; en el caso de curvas
paramétricas corresponde a la primera expresión y lo mismo ocurre con las curvas
de nivel. Análogo para las variables y z.
- [title, "Título"]
Establece el "Ttíulo" común de la imagen (con independencia del número de gráficos).
- [legend, "Leyenda1","Leyenda2"... ]
La leyenda de los gráficos generados con plot2d
y plot3d
es contruida por Maxima usando cuando es posible la fórmula de la función
matemática que sirvió para generarlo. Esta opción permite cambiar tales
leyendas.
[legend, false... ]
Elimina las leyendas.
- plot2d([sin(x),cos(x)],[x,0,%pi],
[legend, false]);
- plot2d([sin(x),cos(x)],[x,0,%pi],
[legend, "seno", "coseno"])$
- plot3d([x^2+y^2, -(x^2+y^2),[x,-1,1],[y,-1,1]],
[legend, false])$
- plot2d([sin(x),cos(x)],[x,0,%pi],
[legend, false], /* oculta nombres de las gráficas */
[xlabel,"Eje OX"], /* etiquetas del eje OX */
[ylabel, "Eje OY"],
[title, "Funciones clásicas"] /* título de la figura (sin problemas con tildes) */
)$
- [box,Valor]
Los valores admitidos son
true
(opción por defecto) y false
que elimina los ejes y la caja del
gráfico.
- plot3d(x^2+y^2, [x, -1,1], [y, -1,1])$
- plot3d(x^2+y^2, [x, -1,1], [y, -1,1],
[box, false], /* elimina los ejes y los números */
[legend,false] /* elimina nombre del gráfico */
)$
- plot2d(log(x), [x, 1, 5])$
- plot2d(log(x), [x, 1, 5],
[box, false], /* hay diferencias */
[legend,false]
)$
- plot2d(log(x), [x, 1, 5],
[gnuplot_preamble, "unset xtics; unset ytics"] /* elimina las escalas */
)$
- [nticks, Número ]
El entero positivo
Número determina la cantidad de puntos usados en la rutina de dibujo.
Cuando una curva regular aparece dibujada como poligonal, puede conseguirse el
efecto óptico adecuado utilizando esta opción. El valor por defecto es 10.
- [grid, Número 1, Número 2 ]
Es el análogo
en gráficos 3D a nticks y controla el número de puntos usado para dibujar la
figura. El valor por defecto es 30,30.
- [style,Lista 1,Lista
2,...]
En los gráficos simples (o múltiples) dibujados con
plot2d
determina la apariencia del trazo: color, líneas o puntos,
grosor... para cada uno de los gráficos (1,2,...) de forma independiente.
Lista 1, Lista 2... son listas en el sentido Maxima y por
tanto delimitadas por corchetes. El primero de los elementos de tales listas es
una palabra clave elegida entre las siguientes:
lines para dibujar
líneas,
points para dibujar puntos aislados,
linespoints para
segmentos y puntos y
dots para pequeños puntos aislados;
en el caso
particular de gnuplot existe además impulses
Los siguientes
elementos de la lista son uno o más números, separados entre sí y de la palabra
clave por comas, que sirven para determinar el color, grosor, etc. Los detalles
aparecen a continuación.
El parámetro lines acepta uno o dos
números (separados de lines y entre sí por comas); el primero fija el grosor de
la línea (sin unidad) y el segundo el color de acuerdo con las correspondencias
1 azul,
2 rojo,
3 magenta,
4 naranja,
5 marrón,
6 lima,
7 agua.
Esto se aplica
a la pantalla X11, pero puede cambiar con otro tipo de salidas.
El parámetro points acepta de uno a tres números enteros; el primero
corresponde al radio (grosor) del punto, el segundo selecciona el color, usando
el mismo código de correspondencia que lines y finalmente el tercero es
usado sólo por Gnuplot y permite sustituir los puntos por otros objetos. Los
objetos disponibles y sus códigos son:
1 círculos (defecto),
2 circunferencias,
3 signo +,
4 signo x,
5 signo *,
6 cuadrados rellenos,
7 cuadrados vacíos,
8 triángulos rellenos,
9 triángulos vacíos,
10 variante de triangulos rellenos,
11 variante de triángulos vacíos,
12 rombos rellenos,
13 rombos vacíos.
- [palette, Paleta]
Este parámetro controla la
apariencia de los gráficos 3D. Cuando no se usa los gráficos se dibujan usando
una gama de colores rellenos y cambiantes en la dirección del eje Z para marcar
las alturas de acuerdo con ciertos patrones definidos por defecto. Cuando en
Paletas aparece false los colores de relleno desaparecen y
únicamente se muestra una "malla" de curvas, usando un único color para cada
superficie (o dos para diferenciar las caras). El visualizador
openmath
va haciendo un uso cíclico de dichos patrones para
identificar las superficies visualmente mediante la paleta correspondiente,
mientras que gnuplot
y geomviev
utilizan una única
paleta.
Cada paleta es una lista con una palabra seguida de cuatro números.
Las palabras corresponden al atributo que se está parametrizando y son: hue,
saturation, value.
Los tres primeros números son decimales entre 0 y 1,
definen las características de un color básico que se asigna al mínimo valor de
z. Las palabras especifican cual de los tres atributos (hue, saturation or
value) se incrementará de acuerdo con los valores de z.
El cuarto número indica
el incremento correspondiente al máximo valor de z. Este cuarto número puede ser
mayor que 1 o negativo.
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1])$
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1],
[palette,false])$
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1],
[palette,[hue, 0.95, 0.7, 0.8, 0.5]])$
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1],
[palette,[value, 0.95, 0.7, 0.8, 0.5]])$
- color[color, color_1, ..., color_n]
Cuando se
dibujan varios gráficos con el comando pot2d
cada uno de ellos
tiene un color diferente de acuerdo con la secuencia siguiente: azul, rojo,
verde, magenta, negro y cian. En caso de que hayan más de seis gráficos se
repite cíclicamente la secuencia. Lo mismo se aplica al comando
implicit_plot
. En el comando plot3d
con la opción
[palette,false]
ocurre lo mismo. La opción color
permite modificar la lista de los colores establecidos por defecto.
Los
colores permitidos en gnuplot son los que antes hemos mencionado, en caso de
poner otro se sustituye automáticamente por el negro. En cambio openmath permite
toda la gama de colores que se identifican en formato RGB de la forma
"#RRGGBB"
correspondiente a la notación hexadecimal
- plot2d([sin(x)/2,cos(x)],[x,-%pi,%pi],
[color,black,green])$
- plot2d([sin(x),cos(x)],[x,-%pi,%pi],
[color,black,green], [plot_format,openmath] )$
- plot2d([(sin(x))/2,cos(x)],[x,-%pi,%pi],
[color,black,green],
[gnuplot_preamble,"set key top left"] /* véase Opciones específicas para Gnuplot */
)$
- plot2d([(sin(x))/2,cos(x)],[x,-%pi,%pi],
[gnuplot_preamble,"set key bottom"] /* véase Opciones específicas para Gnuplot */
)$
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1],
[palette,false],
[color,black] )$
- plot3d(x^2+2*y^2,[x,-1,1],[y,-1,1],
[palette,false],
[box,false],
[color,"#088A4B"],
[plot_format,openmath])$
- [elevation, Número] y [azimuth,
Número]
Son dos parámetros que permiten cambiar el "punto de mira" del
gráfico 3D (en vertical y horizontal, respectivamente). Tienen como valores por
defecto 60 y 30; aparecen indicados cuando se visualiza el gráfico con las
plot_option
: en gnuplot
como un par de números y en
openmath
con su propio nombre y números. Tales números van
cambiando al mover el gráfico con ayuda del ratón, lo que permite, encontrar de
forma interactiva, los valores más adecuados para los mismos en un gráfico 3D
concreto; esto resulta muy útil cuando se persigue generar un fichero definitivo
(digamos eps o pdf) para usarlo en otro lugar.
- plot3d(x^2-2*y^2,[x,-1,1],[y,-1,1]);
- plot3d(x^2-2*y^2,[x,-1,1],[y,-1,1],
[plot_format,xmaxima])$
- plot3d(x^2-2*y^2,[x,-1,1],[y,-1,1],
[elevation,70],
[azimuth,80]);
- [transform_xy, Transformación]
Esta opción
actualmente soporta, por defecto, dos valores para Transformación:
polar_to_xy que permite dibujar en coordenadas cilíndricas y
spherical_to_xyz que permite dibujar en coordenadas esféricas.
Pero en realidad el argumento Transformación puede ser cualquier cambio de
coordenadas creado con ayuda de la opción
[make_transform,
[Variables],fx,fy,fz] donde [Variables] es la lista con las
tres nuevas variables que harán el papel de las x,y,z y siendo fx,fy,fz las
funciones que expresan a las variables euclídeas x,y,z en términos de las nuevas
variables.
- /* paraboloide de revolución en torno al eje Z */
plot3d(r^2,[r,0,1],[phi,0,2*%pi],
[transform_xy,polar_to_xy]);
- /* creamos manualmente cylindrical con make_transform */
cylindrical:make_transform(
[r,phi,z],r*cos(phi),r*sin(phi),z )$
/* y ahora hacemos uso de cylindrical: más fácil de recordar */
plot3d(r^2,[r,0,1],[phi,0,2*%pi],
[transform_xy,cylindrical]);
- /* superficie esférica de radio 2 */
plot3d(2,[theta,0,%pi],[phi,0,2*%pi],
[transform_xy,spherical_to_xyz],
[legend,false])$
- /* creamos manualmente spherical con make_transform */
spherical:make_transform(
[theta,phi,r],r*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta) )$
/* y ahora hacemos uso de spherical: más fácil de recordar */
plot3d(2,[theta,0,%pi],[phi,0,2*%pi],
[transform_xy,spherical],
[legend,false])$
- [run_viewer, true]
Permite que los gráficos,
después de generar el correspondiente fichero gráfico, sean mostrados por el
visualizador que corresponda: gnuplot, mgnuplot, geomview o ps (en openmath la
opción, lógicamente, no tiene efecto). Para que funcione satisfactoriamente el
sistema debe estar adecuadamente configurado; en caso contrario la visualización
habrá de ser realizada manualmente con el visualizador oportuno. Cuando se
indica false, Maxima no hace llamadas a programas externos para
visualizar los gráficos: se limita a guardar el correspondiente
maxout.plot_format (donde la extensión plot_format coincide con uno de
los formatos ya explicados) que será reescrito con cada nuevo gráfico, por lo
que es necesario guardarlo previamente si se desea que esto no ocurra.
En el
caso de gnuplot profundizaremos posteriormente en este tema.
- [adapt_depth,
Número]
Parámetro técnico que determina el número de divisiones
realizadas en la rutina adaptativa de dibujo. El valor por defecto es 10
-
[ps_file, "Nombre"]
[pdf_file, "Nombre"]
[svg_file, "Nombre"]
En lugar de mostrar la salida en
pantalla envía la salida directamente a un fichero en uno de los formatos indicados.
- plot3d(x^2+y^2, [x, -2, 2], [y, -2, 2],
[ps_file,"grafico1.ps"])$
- plot3d(x^2+y^2, [x, -2, 2], [y, -2, 2],
[pdf_file, "grafico1.pdf"],
[box, false],
[legend, false] )$
- [plot_realpart, false]
En la opción por defecto
false cuando se trata de dibujar una función compleja sólo aparecen
dibujados los puntos en los que la parte imaginaria es 0. Cuando se le asigna el
valor true aparece dibujada la parte real de la función aunque no sea
nula la parte imaginaria de la variable
- plot2d (log(x), [x, -5, 5],
[plot_realpart, false]);
- plot2d (log(x), [x, -5, 5],
[plot_realpart, true]);
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:
- [gnuplot_term, Terminal ]
Actualmente Maxima permite los siguientes valores para esa elección de Terminal:
- default el gráfico aparece en una ventana independiente
- ps el gráfico es enviado a un fichero postscript de nombre
maxplot.ps
- pdf el gráfico es enviado a un fichero pdf de nombre
maxplot.pdf
- pstricks el gráfico es enviado a un fichero pstricks de nombre
maxplot.pstricks
- tikz el gráfico es enviado a un fichero tikz de nombre
maxplot.tikz
Este formato genera un archivo de texto plano idóneo para ser insertado
en LaTeX porque permite que los textos, las fórmulas, los colores... sean los mismos que aparecen
en el resto del texto LaTeX; además al ser editable se pueden hacer ajustes a posteriori por ejemplo para controlar grosores y tipos de las líneas, colores, reubicar textos...
El fichero maxplot.tikz
se carga en LaTeX mediante \input{maxplot.tikz}
pero requiere cargar en el preámbulo del fichero .tex
el paquete gnuplot-lua-tikz.sty
que está disponible junto con otro elemento en el archivo gnuplot-tikz.zip
- svg el gráfico es enviado a un fichero svg de nombre
maxplot.svg
- Los anteriores son los más aconsejables porque producen gráficos vectoriales de buena
calidad. Pero hay otros; entre ellos se encuentran:
latex (picture de LaTeX), pslatex
(picture+ps), eepic, jpeg, png, postscript,
tpic, dxf (autocad).
Veamos algunos ejemplos; en caso de generarse gráficos en formatos ps, pdf, svg, png... los correspondientes ficheros estarán en su carpeta de usuario, que en GNU/Linux corresponde a su home.
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[plot_format, gnuplot], [gnuplot_term,ps]);
Si la
BoundingBox no está ajustada a sus necesiades puede usar el programa ps2eps
para conseguir un mejor ajuste
automatizado, o bien editar manualmente el fichero generado con un editor sólo
texto para personalizar la BoundingBox. Mediante el programa epstopdf
puede
convertirse el gráfico a formato pdf si fuera necesario.
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[plot_format, gnuplot], [gnuplot_term, pdf]);
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[plot_format, gnuplot], [gnuplot_term, svg]);
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[plot_format, gnuplot], [gnuplot_term, tikz]);
- [gnuplot_out_file, "NombreFichero"]
Es un
complemento opcional muy útil para gnuplot_term ya que permite elegir el
"NombreFichero" de la salida en lugar del nombre estándar que lo pone
maxplot.gnuplot_term
, evitando así que se reescriba con cada utilización.
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2], [plot_format, gnuplot],
[gnuplot_term,jpeg], [gnuplot_out_file, "Grafico.jpg"]);
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.
- [gnuplot_preamble,
"opcion_1;opcion_2;...opcion_n"]
Permite introducir en el preámbulo del fichero gráfico los
comandos de Gnuplot que no están directamente disponibles a través del lenguaje
de Maxima. Pero el uso de esta opción requiere conocer con detalle el lenguaje de Gnuplot, que es
más rico que el que actualmente se puede utilizar desde las opciones de Maxima contempladas en plot2d y plot3d.
Los comandos draw2d y draw3d del paquete draw incorporan más posibilidades a este respecto y recomendamos su utilización.
Evidentemente para poder sacarle partido a gnuplot_preamble
es necesario conocer los valores
admisibles, es decir, las posibilidades de Gnuplot y su sintaxis. Esto excede
los objetivos de este Manualico. Encontrará referencias al final de esta página.
A continuación se muestran algunos de los valores que he usado. Como las opciones de esta sección están destinadas a Gnuplot, conviene recordar que puede ser necesario comunicárselo explícitamente a Maxima mediante [plot_format, gnuplot]
- set title 'Título del gráfico'
Pone el 'Título del gráfico'
- plot2d([sin(x),x, x-x^3/6 ],[x,-2,2],
[legend, "sin(x)","Taylor1","Taylor3"],
[gnuplot_preamble,"set title 'El seno y sus desarrollos de Taylor de orden 1 y 3'"] )$
El ejemplo precedente es irrelevante, en el sentido de que el resultado puede ser generado reemplazando la última línea
por [title, "El seno y sus desarrollos de Taylor de orden 1 y 3"]
, pero sirve como ilustración sencilla del uso de gnuplot_preamble
- set key Posición
Fija la Posición de la leyenda de los elementos
gráficos. Por defecto están situados arriba a la derecha. Valores básicos son
left, right, top, bottom, outside,
bellow (pudiendo utilizarse más de uno).
unset key eliminas tales leyendas
- plot2d([sin(x),x, x-x^3/6 ],[x,-2,2],
[legend, "sin(x)","T1","T3"],
[gnuplot_preamble,"set key left top;set title 'El seno y sus desarrollos de Taylor de orden 1 y 3'"])$
- set label
Permite poner etiquetas en posiciones arbitrarias
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[xlabel, "Eje X"],
[gnuplot_preamble,"set label 'Punto de silla' at 0,0,-6 rotate by 90 textcolor lt 1"]);
- lista:[[0,0],[1.5,0.5],[1,1.5],[0,0]]$
plot2d( [[discrete,lista],[discrete,lista]],
[style,[lines,4,1],[points,2,2,1]],
[x,0,2],[y,0,2],
[ylabel,""],
[xlabel,""],
[gnuplot_preamble, "set label 'A' at -0.05,0.05; set label 'B' at 1.52,0.51; set label 'C' at 1,1.58; unset xtics; unset ytics; unset key "] )$
- f(x):= if x< 1 then -0.1 else x-1.1$ plot2d(f(x), [x,0,2],
[plot_format, gnuplot],
[y,-0.3,1.5],
[ylabel, "C: valor de la call"],
[xlabel, "S: cotización del subyacente"],
[style,[lines, 4,1]],
[title, "Diagrama payoff de una call option"],
[gnuplot_preamble, "unset key; set xtics (' ' 0 ,'K' 1); set label 'precio de ejercicio' at 1,0.1 rotate by 90;"]
)$
- set noautoscale
Por defecto Gnuplot autoescala todos los ejes para que
la gráfica quepa en la ventana; este parámetro evita tal comportamiento.
- plot2d(cos(x),[x,0,50],
[y,-1.5,1.5],
[gnuplot_preamble, "set noautoscale"])$
- set logscale (set nologscale)
Permite fijar escala logarítmica en uno
o varios ejes. Observe la diferencia en el ejemplo
- plot2d(log(x),[x,1,10])$
- plot2d(log(x),[x,1,10],
[gnuplot_preamble, "set logscale x"])$
- set xtics (set ytics)
Controla donde aparecen las
marcas en los ejes y, eventualmente, etiquetas no numéricas en posiciones
numéricas.
unset xtics suprime las marcas del eje X.
- plot2d(log(x),[x,1,10],
[gnuplot_preamble, "set xtics (1,2,9)"])$
- plot2d(sin(x),[x,0,7],
[gnuplot_preamble,"set xtics ('0' 0, 'pi' 3.1416, '2pi' 6.2832)"])$
- plot2d(log(x), [x, 1, 5],
[gnuplot_preamble, "unset xtics; unset ytics"] /* elimina las marcas en ambos ejes */
)$
- set view angulo 1,angulo 2,escala 1,escala 2
Cambia el punto de mira en gráficos tridimensionales
(los dos primeros) y la escala (los dos segundos).
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[gnuplot_preamble,"set view 30,240,1,1.4"])$
- set contour
Permite dibujar las curvas de nivel en la base del
diagrama, a lo largo de la superficie, en ambas o eliminarlas
- plot3d(-x^2+y^2,[x,-2,2],[y,-2,2],
[gnuplot_preamble,"set contour both"]);
- unset colorbox
No dibuja la barra con la escala de altura.
- plot3d(sqrt(1-x^2-y^2),[x,-1,1],[y,-1,1],
[legend,false],
[gnuplot_pm3d,true],
[gnuplot_preamble,"unset xtics; unset ytics; unset colorbox"])$
- set polar (unset polar)
Permite interpretar la función como escrita en coordenadas polares o cartesianas en gráficos 2d
- plot2d( 3*cos (2*t), [t,0,2*%pi])$
- plot2d( 3*cos (2*t),[t,0,2*%pi],
[gnuplot_preamble, "set polar"])$
- set border Opciones
Permite poner diferentes tipos de borde
al gráfico
set noborder elimina los bordes
- plot2d( 3*cos (2*t),[t,0,2*%pi],
[gnuplot_preamble, "set border 1"] /* cambie 1 por otro número y experimente */
)$
- plot3d(x^2+y^2,[x,-1,1],[y,-1,1],
[gnuplot_preamble,"set border 4095"])$
- plot3d(x^2+y^2,[x,-1,1],[y,-1,1],
[gnuplot_preamble,"set border 127+256+512"])$
- set style
Fija el estilo por defecto para funciones, datos, líneas,
flechas, rellenos,... Tiene una enorme riqueza de posibilidades que no podemos
enumerar aquí. La opción style suele ser suficiente.
- set terminal y set output
Son otras opciones de Gnuplot que pueden ser utilizadas para conseguir exportar el gráfico a derminados formatos. Pero, como en el caso precedente, la utilización de las opciones para exportar gráficos suele ser suficiente.
- set xzeroaxis set yzeroaxis (set noxzeroaxis)
Dibuja los ejes de coordenadas en gráficos (pueden decirse las especificaciones de tipo de línea,
etc.)
- plot2d([sin(x),x, x-x^3/6 ],[x,-2,2],
[legend, "sin(x)","T1","T3"],
[gnuplot_preamble,
"set key left;set xzeroaxis linetype 5 linewidth 2.5; set yzeroaxis linetype 5 linewidth 2.5 "])$
Saber más
- Página oficial de Gnuplot
http://www.gnuplot.info