# Gráficos en MAXIMA

## Funciones

Para definir una función en MAXIMA, podemos utilizar diferentes funciones

Directamente mediante 

f(x1,..,xn):=[f1,..,fm]

define(funcion, expresion)

### Funciones de una variable

Funciones de una variable

f(x):=exp(x)*sin(x);

define(g(x),exp(x)*cos(x));

Estas funciones se pueden utilizar como las predefinidas de MAXIMA como sin(x), cos(x), exp(x)

f(1);

g(1);

Como funciones complementarias tenemos

fundef(func): Devuelve la definición de la función

fundef(g);

fundef(f);

functions: Nos proporciona una lista de las funciones definidas por el usuario.

Este comando es interesante para saber si una función está definida previamente y también para saber el número de variables que tiene la función

functions;

remfunctions(func1,func2,....): Esta instrucción elimina las funciones definidas por el usuario

remfunction(f);

### Campos escalares y vectoriales

También es posible definir campos escalares o campos vectoriales

f(x,y):=x*y;
F(x,y,z):=[x*y, y*z, z*x];

f(2,3);

F(2,3,4);

define(G(x,y,z),F(x,y,z)^2);

functions;

### Funciones a trozos

Para definir una función a trozos como

           /
          |     x^2     si x<0      
f(x) = |
         |       x^3    si x>=0
           \

tendremos dos opciones. 

La primera es dar la definición para cada trozo:

f1(x):=x^2;
f2(x):=x^3;

La segunda es utilizar la estructura if-then-else

f(x):= if x<0 then x^2 else x^3;

Actuará como el resto de funciones

f(-2);

f(2);

## Representaciones gráficas

El comando para representar gráficamente una función real de variable real es 

plot2d(f(x),[x,a,b])

plot2d([f1(x),f2(x),....,fn(x)], [x,a,b])

Una función

plot2d(exp(x)*sin(x),[x,0,%pi]);

Notar que se se abre una ventana externa que hay que cerrar antes de poder seguir con las siguientes instrucciones

O varias

plot2d([sin(x),cos(x)],[x,-%pi,%pi]);

También podemos emplear el comando 

wxplot2d

que proporciona la representación gráfica, en el mismo archivo, sin abrir ninguna ventana externa

wxplot2d(exp(x)*sin(x),[x,0,%pi]);

wxplot2d([sin(x),cos(x)],[x,-%pi,%pi]);

funciones a trozos

f(x):= if x<0 then sqrt(-x) else x^3;
wxplot2d(f(x),[x,-9,9],[y,-1,6]);

Las funciones plot2d o wxplot2d tienen muchas opciones que permiten modificar el gráfico. Por ejemplo, podemos incluir ejes

wxplot2d(x/(x^2-4),[x,-6,6],[y,-6,6],[gnuplot_postamble,"set zeroaxis;"]);

Proporción entre ejes

wxplot2d([sqrt(1-x^2),-sqrt(1-x^2)],[x,-1,1]);

wxplot2d([sqrt(1-x^2),-sqrt(1-x^2)],[x,-1,1],[gnuplot_postamble,"set zeroaxis; set size ratio 1"]);

Una malla

wxplot2d([x/(x^2-4)],[x,-6,6],[y,-6,6],[plot_format,gnuplot],[gnuplot_preamble,"set zeroaxis;"],[gnuplot_postamble,"set grid;"]);

Representación de curvas en forma paramétrica

wxplot2d([parametric,t,t*cos(t),[t,0,2*%pi]]);

Poligonales

[discrete,[x1,x2,....],[y1,y2,...]]

wxplot2d([discrete,[0,5],[6,1]],[x,-5,5]);

o también

[discrete,[ [x1,y1], [x2,y2],....,[xn,yn] ]]

wxplot2d([discrete,[ [0,6], [5,1] ]]);

Para dibujar sólo los puntos

wxplot2d([discrete,[ [0,6], [5,1] ]],[style,points]);

xy:[[0,0],[2,0],[2,2]]$
wxplot2d([discrete,xy],[style, points]);

wxplot2d([discrete,xy],[style, [points,5,2]]);

wxplot2d([discrete,[0,2,2,0],[0,0,2,0]],[style, [lines,5,2]]);

wxplot2d([discrete,[0,2,2,0],[0,0,2,0]],[x,-3,5],[y,-1,3],[style, [lines,5,2]]);

wxplot2d( [ [discrete, [0,2,2,0],[0,0,2,0]], [discrete,[0,2,2],[0,0,2]]],[x,-3,5],[y,-1,3],[style, [lines,1,2],[points,4,1,1]]);

Gráficos 3D


plot3d (f(x,y), [x,a,b],[y,c,d]);

o

wxplot3d

wxplot3d(cos(x*y),[x,-3,3],[y,-3,3]);

También podemos utilizar la función plot3d para crear el gráfico en una ventana externa

plot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],nomesh_lines)$

Como podemos observar, en este caso es posible girar la imagen

wxplot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],nomesh_lines)$

Dibujar sólo las líneas

wxplot3d ( log ( x^2*y^2 ), [x, -2, 2], [y, -2, 2], [z, -8, 4],          nopalette, [color, magenta])$

Añadirle una barra de valores

wxplot3d (log (x^2*y^2), [x, -2, 2], [y, -2, 2],[grid, 29, 29],
       [palette, [gradient, red, orange, yellow, green]],
       color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
       [color_bar_tics, 4])$

Representar dos gráficas en el mismo dibujo

wxplot3d ([[-3*x - y, [x, -2, 2], [y, -2, 2]],
   4*sin(3*(x^2 + y^2))/(x^2 + y^2), [x, -3, 3], [y, -3, 3]],
   [x, -4, 4], [y, -4, 4])$

En paramétricas

expr_1: 5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)-10$
expr_2: -5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)$
expr_3: 5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))$
wxplot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],
        [y, -%pi, %pi], [grid, 50, 50])$

Transformar de coordenadas esféricas a rectangulares

wxplot3d (sin(2*theta)*cos(phi), [theta,0,%pi], [phi,0,2*%pi],
      [transform_xy, spherical_to_xyz], [grid, 30, 60], nolegend)$

De cilíndricas a rectangulares

wxplot3d (r^.33*cos(th/3), [r,0,1], [th,0,6*%pi], nobox,
    nolegend, [grid, 12, 80], [transform_xy, polar_to_xy])$

Dibujar una esfera

wxplot3d ( 5, [theta,0,%pi], [phi,0,2*%pi], same_xyz, nolegend,
  [transform_xy, spherical_to_xyz], [mesh_lines_color,blue],
  [palette,[gradient,"#1b1b4e", "#8c8cf8"]])$

Isocontornos

wxplot3d (cos (-x^2 + y^3/4), [x,-4,4], [y,-4,4], [zlabel,""],
       [mesh_lines_color,false], [elevation,0], [azimuth,0],
       color_bar, [grid,80,80], noztics, [color_bar_tics,1])$

load(draw);
with_slider_draw3d(
    n,makelist(0.1*%pi*i,i,1,20),
    surface_hide=true,
    xrange=[-3,3],
    yrange=[-3,3],
    parametric_surface(cos(u)*(2+cos(v)),sin(u)*(2+cos(v)),sin(v),u,0,n,v,0,2*%pi));