Departamento de Matemática Aplicada CÁLCULO COMPUTACIONAL. Licenciatura en Quı́mica (Curso 2005-06) Gráficas 3D Práctica 5 Con MATLAB se pueden hacer gráficas de funciones de dos variables en el espacio, es decir, funciones de la forma z = f (x, y) (forma explı́cita). También se pueden dibujar, en el espacio, curvas y ciertas superficies. 1. Curvas en el espacio Se generan de una manera similar a las curvas en el plano, con la diferencia de que aquı́ se utilizan los comandos plot3 o comet3, también existe un comando quiver3 para dibujar vectores velocidad sobre las curvas. Ejemplo 1 Dibujar la curva ~r(t) = (sen(t), cos(t), t) 0 ≤ t ≤ 4π y sobre ella los vectores velocidad. Generamos los valores de t: >>t=linspace(0,4*pi,500); Y ahora podemos utilizar dos comandos, plot3 que nos da el dibujo completo: >>plot3(sin(t),cos(t),t) O bien, comet3 que funciona de manera análoga a como lo hacı́a el comando comet en las curvas en el plano. >>comet3(sin(t),cos(t),t) Para dibujar algunos vectores velocidad sobre la curva hay que utilizar el comando quiver3(vector posicion,vector velocidad). También conviene volver a generar los valores de t de manera que no sean demasiados para que se pueda apreciar mejor la gráfica: >>t=linspace(0,4*pi,20); >>quiver3(sin(t),cos(t),t,cos(t),-sin(t),1) Ejercicio 1 Representar las curvas siguientes y representar en gráfica aparte algunos vectores velocidad de la curva en los intervalos indicados: a)~r(t) = (2 cos3 t, 2 sen3 t, t) − 4 ≤ t ≤ 3. 1 sen t) 4 t t t c)~r(t) = ( cos t, sen t, ) 6 6 36 b)~r(t) = (cos t, 2 cos2 t, − π ≤ t ≤ π. − 12 ≤ t ≤ 19. t t t d)~r(t) = (e 4 sen(2t), e 4 cos(2t), ) 4 − 10 ≤ t ≤ 4,8. t e)~r(t) = (sen(2t) + sen(t), − cos(2t) − cos(t), ) 6 f )~r(t) = (cos(3t), 2 cos2 (t), sen(2t)) 2. − 9 ≤ t ≤ 10. − π ≤ t ≤ π. Gráficos de funciones z = f (x, y) Para dibujar gráficos de funciones de dos variables z = f (x, y), al igual que para funciones de una variable, en primer lugar hay que generar tablas de valores para las variables x e y. En realidad ahora lo que tenemos que hacer es generar un mallado sobre un rectángulo del plano XY . Para eso se utiliza el comando meshgrid. Por ejemplo, queremos dibujar la gráfica de la función z = e−x 2 −y 2 en la región del plano D = {(x, y)/ − 2 ≤ x ≤ 2, − 3 ≤ y ≤ 3} Habrá que efectuar los pasos siguientes: 18 Generamos el mallado >>[x,y]=meshgrid(-2:.2:2,-3:.2:3); Sustituimos en la función para calcular los valores de z: >>z=exp(-x.^2-y.^2); Y ahora podemos dibujar el gráfico con alguno de los siguientes comandos: >>plot3(x,y,z) >>mesh(x,y,z) >>surf(x,y,z) >>surf(x,y,z),shading flat %efecto de sombreado distinto Para conseguir efectos de sombreados y colores diferentes se pueden consultar todas las posibilidades de los comandos colormap y shading. Algo que resulta también interesante es añadir una escala de colores al dibujo que nos permite conocer las alturas (coordenada z) de los diferentes puntos de la gráfica; esto se consigue con el comando colorbar (después de dibujada la gráfica). Las longitudes de los ejes coordenados también se pueden modificar con el comando: >>axis([xmin xmax ymin ymax zmin zmax]) Ejemplo 2 Representar la gráfica de la función z = x2 + y 2 Dibujando algunas curvas de nivel. Creamos el mallado: >>[x,y]=meshgrid(-2:.1:2); Sustituı́mos en la función, para calcular los valores de z: >>z=x.^2+y.^2; Ahora podemos dibujar la gráfica utilizando alguna de los comandos descritos en el punto relativo a los comandos básicos de 3D. Las curvas de nivel se pueden hacer utilizando alguno de los comandos siguientes: >>contour(x,y,z,10) % dibuja 10 curvas de nivel >>contour3(x,y,z,10) % lo mismo, pero en el espacio >>pcolor(x,y,z),colorbar Esta orden dibuja un mapa de colores por niveles, la orden colorbar hace aparecer una escala de valores según el color, es decir, nos indica el valor de la variable z. Si se usa el comando contour, después se pueden etiquetar las curvas con los valores correspondientes de la z. Para hacer esto: Primero dibujamos las curvas de nivel con: >>contour(x,y,z,10) Después guardamos la información en una variable, por ejemplo, >>cs=contour(x,y,z,30); A continuación tenemos dos opciones: >>clabel(cs) % etiqueta algunas aleatoriamente O bien: >>clabel(cs,’manual’) % las elegimos con el rat’on en la pantalla gr\’{a}fica Por otra parte, el comando >>meshc(x,y,z), dibuja la gráfica y por debajo las curvas de nivel (algunas veces será necesario modificar los ejes para que la gráfica de la función no tape a las curvas de nivel). Ejercicio 2 Representar las gráficas de las siguientes funciones de 2 variables, utilizando alguno de los comandos descritos anteriormente. Dibujar también algunas curvas de nivel: 1 a)z = 9 + x2 + y 2 p b)z = − |xy| 2 c)z = 2 ) cos( x +y 4 3 + x2 + y 2 19 d)z = y2 − 3|x| 5 e)z = e−(x 3. 2 +y 2 ) Algunas superficies Ejercicio 3 Escribir el siguiente programa que genera una esfera de radio 1. Utilizando el editor (M-File) guardarlo en un fichero con el nombre esfera.m. Programa: esfera.m n=30; theta=pi*(-n:2:n)/n; phi=(pi/2)*(-n:2:n)’/n; x=cos(phi)*cos(theta); y=cos(phi)*sin(theta); z=sin(phi)*ones(size(theta)); surf(x,y,z) axis square Modificar el programa para crear otros dos programas que dibujen el hemisferio norte y el hemisferio sur únicamente. Ejercicio 4 El comando >>cylinder(R,N), genera automáticamente un cilindro de radio R, donde N es el número de puntos de la circunferencia de la base del cilindro. - Dibujar el cilindro de radio 1, con N=30. Este comando también admite radios variables R(t), con t ∈ [a, b]. - Dibujar las superficies generadas por >>cylinder(R(t),30), en cada uno de los siguientes casos: a) R(t) = t, t ∈ [−1, 1] b) R(t) = t2 , t ∈ [−1, 1] c) R(t) = 2 + sen(t), t ∈ [−2π, 2π] d) R(t) = et , t ∈ [−3, 3] 20