GRÁFICOS TRIDIMENSIONALES.
Quizás sea ésta una de las características de MATLAB que más admiración despierta entre los usuarios no técnicos (cualquier alumno de ingeniería sabe que hay ciertas operaciones algebraicas – como la descomposición de valor singular, sin ir más lejos–que tienen dificultades muy superiores, aunque "luzcan" menos).
Tipos de funciones gráficas tridimensionales.
MATLAB tiene posibilidades de realizar varios tipos de gráficos 3D. Para darse una idea de ello, lo mejor es verlo en la pantalla cuanto antes, aunque haya que dejar las explicaciones detalladas para un poco más adelante. La primera forma de gráfico 3D es la función plot3, que es el análogo tridimensional de la función plot. Esta función dibuja puntos cuyas coordenadas están contenidas en 3 vectores, bien uniéndolos mediante una línea continua (defecto), bien mediante markers. Asegúrese de que no hay ninguna ventana gráfica abierta y ejecute el siguiente comando que dibuja una línea espiral: >> fi=[0:pi/20:6*pi];plot3(cos(fi),sin(fi),fi,'g')
Ahora se verá cómo se representa una función de dos variables. Para ello se va a definir una función de este tipo en un fichero llamado test3d.m. La fórmula será la siguiente:
El fichero test3d.mdebe contener las líneas siguientes: function z=test3d(x,y) z = 3*(1-x).^2.*exp(-(x.^2) -(y+1).^2) ... -10*(x/5 -x.^3 -y.^5).*exp(-x.^2-y.^2) ... -1/3*exp(-(x+1).^2 -y.^2);
Ahora, ejecútese la siguiente lista de comandos (directamente, o mejor creando un fichero test3dFC.mque los contenga): >> x=[-3:0.4:3]; y=x; >> close >> subplot(2,2,1) >> figure(gcf),fi=[0:pi/20:6*pi]; >> plot3(cos(fi),sin(fi),fi,'r') >> [X,Y]=meshgrid(x,y); >> Z=test3d(X,Y); >> subplot(2,2,2) >> figure(gcf), mesh(Z) >> subplot(2,2,3) >> figure(gcf), surf(Z) >> subplot(2,2,4) >> figure(gcf), contour3(Z,16). En la figura resultante (Figura 36) aparece una buena muestra de algunas de las posibilidades gráficas tridimensionales de MATLAB. En las próximas secciones se encontrará la explicación de qué se ha hecho y cómo se ha hecho.
DIBUJO DE MALLADOS: FUNCIONES MESHGRID, MESHY SURF.
Ahora se verá con detalle cómo se puede dibujar una función de dos variables (z=f(x,y)) sobre un dominio rectangular. Se verá que también se pueden dibujar los elementos de una matriz como función de los dos índices. Sean xe ydos vectores que contienen las coordenadas en una y otra dirección de la retícula (grid) sobre la que se va a dibujar la función. Después h ay que crear dos matrices X(cuyas filas son copias de x) e Y(cuyas columnas son copias de y). Estas matrices se crean con la función meshgrid. Estas matrices representan respectivamente las coordenadas xe yde todos los puntos de la retícula. La matriz de valores Zse calcula a partir de las matrices de coordenadas Xe Y. Finalmente hay que dibujar esta matriz Zcon la función mesh, cuyos elementos son función elemento a elemento de los elementos de Xe Y. Véase como ejemplo el dibujo de la función sen(r)/r(siendo r=sqrt(x2+y2); para evitar dividir por 0 se suma al denominador el número pequeño eps). Para distinguirla de la función test3danterior se utilizará uy ven lugar de xe y. Créese un fichero llamado sombrero.mque contenga las siguientes líneas: close all u=-8:0.5:8; v=u; [U,V]=meshgrid(u,v); R=sqrt(U.^2+V.^2)+eps; W=sin(R)./R; mesh(W) Ejecutando este fichero se obtiene el gráfico mostrado en la Figura 37.
Se habrá podido comprobar que la función meshdibuja enperspectivauna función en base a una retícula de líneas de colores, rodeando cuadriláteros del color de fondo, con eliminación de líneas ocultas. Más adelante se verá cómo controlar estos colores que aparecen. Baste decir por ahora que el color depende del valor zde la función. Ejecútese ahora el comando: >> surf(W) y obsérvese la diferencia en la Figura 38. En vez de líneas aparece ahora una superficie faceteada, también con eliminación de líneas ocultas. El color de las faceta s depende también del valor de la función. Como un segundo ejemplo, se va a volver a dibujar la función picos(la correspondiente al fichero test3d.mvisto previamente).Créese ahora el fichero picos.mcon las siguientes sentencias: x=[-3:0.2:3]; y=x; [X,Y]=meshgrid(x,y); Z=test3d(X,Y); figure(gcf), mesh(Z), pause(5), surf(Z).
Es necesario poner la instrucción pause –que espera 5 segundos–para que se puedan ver las dos formas de representar la función Z(si no, sólo se vería la segunda). Una vez creado este fichero, tecléese picosen la línea de comandos y obsérvese el resultado. Más adelante se verá también cómo controlar el punto de vista en estos gráficos en perspectiva.