UNIVERSIDAD CATOLICA DE LA SANTISIMA CONCEPCIÓN DEPARTAMENTO DE MATEMÁTICA Y FÍSICA APLICADA Laboratorio 4 Franco A. Milanese Introducción a MATLAB R: grácas de funciones en tres dimensiones 1. Grácas 3D MATLAB provee muchas opciones para visualizar datos 3D, inclusive trae incorporada la opción de dibujar con colores, lo que permite poder visualizar una cuarta dimensión. Entre las funcionalides incorporadas tiene dibujar curvas en el espacio, dibujar objetos denidos por alambres, supercies sombreadas, generar automáticamente curvas de nivel, mostrar datos de volumen, especicar las fuentes de luz e inclusive mostrar imágenes. El comando help graph3d retorna una lista de todas las funciones disponibles para hacer grácos 3D. 2. ez-funciones Las librería de funciones ez contienen las siguientes para realizar grácos 3D. 1. ezplot3(). Esta función permite gracar curvas paramétricas en el espacio. Supongamos que una curva paramétrica en el espacio viene dada por las funciones x(t), y(t), z(t) ezplot3() por defecto asumirá que t [0, 2π]. Ejemplo: x='t.*cos(3.*pi.*t)'; y='t.*sin(3.*pi.*t)': z='t'; ezplot3(x,y,z) 2. ezcountour() Las generación de curvas de nivel de curvas de nivel es sumamente sencilla con la función ezcontour(). Tan sólo especicamos la función de la forma z = f(x, y) y podemos especicar el dominio de x e y deseado, por defecto x, y [ 2π, 2π]. Por ejemplo 1
z='sin(x).*cos(y)./(x.^2+y^2+1)'; ezcontour(z,[-3,3,-3,3]); 3. ezsurf() Para producir sorprendentes grácos 3D todo lo que necesitas es especicar la función a dibujar de la forma z = f(x, y) y especicar el dominio para gracar. Por ejemplo z='sin(x).*cos(y)./(x.^2+y^2+1)'; ezsurf(z,[-3,3,-3,3]); 4. ezsurfc() Para combinar las curvas de nivel y gráca de una supercie, utilizamos esta variante de ezsurf(). Por ejemplo 2
z='cos(x.^2+y.^2)./(x.^2+y^2+1)'; ezsurfc(z); 3. Mallas y dibujos de supercies Las funciones para dibujar mallas y supercies sobre ellas son mesh() y surf(). Ente sus variaciones están meshc(), meshz(), surfc() y surfl(). Todas estas funciones toman varios argumentos, las ejecuciones más sencillas son de la forma mesh(z) surf(z) donde Z representa una matriz. Usualmente las supercies son representadas por sus valores en el eje z, evaluadas en una malla de pares (x, y). En consecuencia, para crear el gráco de una supercie necesitamos crear una malla de pares (x, y) del dominio donde vamos a dibujar y encontrar la altura (coordenada z) de la supercie en cada punto de la malla. Observe que es lo mismo que hacemos para dibujar un gráco de dos variables. MATLAB nos provee la función meshgrid() para crear una malla de puntos en un intervalo especicado. 3.1. La función meshgrid() En MATLAB creamos dos matrices X e Y y escribimos las coordenadas (x, y) de una malla como cada una de las componentes de estas matrices. Podemos evaluar la coordenada z directamente en estas matrices. Por ejemplo, si nos interesa mallar el dominio [1, 5] [1, 5] con puntos equiespaciados de 1 unidad, podemos ejecutar x=1:5; [X,Y]=meshgrid(x,x); lo cual nos crea dos matrices X e Y cuyas componentes corresponder al malla representada en la gura 1. La valores de X e Y son 3
>> X >> Y X = Y = 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 Figura 1: Malla de [0, 5] [0, 5] generado con mesh(x,y,zeros(5,5)). Para obtener las imágenes de una función en los puntos de esta malla solo resta operar componente a componente. Por ejemplo, supongamos que nos interesa obtener las imágenes de la función z = 2 x + y 1, en tal caso hacemos Z=2.*X+Y-1; surf(x,y,z) y obtenemos lo representado en la gura 2 3.2. La función mesh() Baje y ejecute el rutero disponible en http://www.udec.cl/~fmilanese/codigo5.m este le permitirá generar los grácos 4
Figura 2: Sección del plano de ecuación 2x + y z 1 = 0. 4. Grácas de campos vectoriales Entre las funciones disponibles en MATLAB para gracar campos vectoriales están quiver(), quiver3(), streamline() entre otras. Por ejemplo, si u(x, y) y v(x, y) son las componentes en las dirección x e y de un campo vectorial, estas pueden ser fácilmente gracadas con quiver(). Las funciones stream... son extensiones del mismo concepto que quiver(). Ellas dibujan líneas de trayectoria a lo largo de puntos especicados por el usuario dentro de un campo vectorial. Este tipo de funciones está disponible desde MATLAB6 en adelante. La función streamline() es útil para dibujar las curvas solución en 2D y 3D de campos vectoriales denidos por EDO's sin necesidad de calcula la solución. Por ejemplo, supongamos que las EDO's x = y + x x(x 2 + y 2 ) y x + y y(x 2 + y 2 ) 5
denen un campo vectorial de componentes u(x, y) = x y v(x, y) = y. Podemos hacer uso de la función streamline() para gracar algunas curvas solución de este problema utilizando varios puntos del plano xy. En la siguiente dirección está disponible un código que hace esto http://www.udec.cl/~fmilanese/codigo6.m cuya salida nos muestra las curvas solución del problema según la gura 3. Figura 3: Uso del comando streamline(). 5. Ejercicios 1. Graque las siguientes funciones. a) f(x, y) = x 2 + y 2, { x + y si x > 0 b) g(x, y) = x y si x < 0, c) h(x, y) = g(f(x, y), y), d) x(t) = cos(πt), y(t) = sen(πt), z(t) = 2t con t [0, 4], función dada paramétricamente. e) r(x, y) = 1 x 2 +y 2, obs: cuidado con dividir por cero. 2. Utilize el comando quiver() o quiver3() para gracar los campos vectoriales a) b) f : R 2 R 2 (x, y) (x 2 + y, 2x + y) g : R 3 R 3 (x, y, z) (cos(x), sin(y), 3z) 3. MATLAB permite realizar animaciones de grácos de curvas paramétricas en dos o tres dimensiones con uso de la función comet() o comet3(). Por ejemplo, el siguiente código describe la orientación en la que se recorre un espiral ascendente 6
t=linspace(0,10*pi,200); figure(1) comet3(cos(t),sin(t),t) utilize estas funciones para dibujar las curvas paramétricas e identiquelas a) x = 3cos(t), y = 2sin(t) con t [0, π] b) x = cos(2t) cos(3t) 2, y = sin(2t) sin(3t) 2, con t [0, 2π] c) x = tcos(t), y = tsin(t), z = t 2 con t [0, 10]. 4. MATLAB permite realizar animaciones con uso de los comando movie(). La idea principal es que si tienes una sucesión de grácos que deseas animar, entonces uses la función movie(), guardando cada gráco como un cuadro de la animación como parte de una gran matriz M y entonces animarlos con el comando movie(). Un gráco es almacenado usando el comando getframe(). Un ejemplo de como usar este código se encuentra en http://www.udec.cl/~fmilanese/animador.m Utilice el código anterior para generar una animación de las curvas a) f(x, n) = sin(x + n), x [0, 1] cuando el desfase n R varia entre [0, 2π]. b) f(x, y, n) = cos(x2 +y 2 +n) x 2 +y 2 cuando el término n R se hace variar entre [0, 10]. Procure que la animación muestre los cambios de n haciendo title(num2str(n)) o lo que usted estime conveniente. Referencias Rudra Pratap, Getting Started with MATLAB 2009. Department of Mechanical Engineering Indian Institute of Science, Bangalore. New York, Oxford University Press 2010. 2 de enero de 2014 7