P. 1
matlab70primero

matlab70primero

4.0

|Views: 13.209|Likes:
Publicado poranon-43925

More info:

Published by: anon-43925 on Mar 10, 2007
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/24/2015

pdf

text

original

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 en color rojo:

>> fi=[0:pi/20:6*pi]; plot3(cos(fi),sin(fi),fi,'r'), grid

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:

( )

z

xe

x

x

ye

e

x

y

xy

x

y

= −

− − −


⎝⎜


⎠⎟ −

− − +

− −

− + −

31

10

5

1
3

2

1

3

5

1

2

2

2

2

2

2

(

)

(

)

El fichero test3d.m debe 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 lla-
mado test3dMain.m que 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')
>> grid
>> [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 46) aparece una
buena muestra de algunas de las posibilidades
gráficas tridimensionales de MATLAB. En las próximas secciones se realizará una explicación más
detallada de qué se ha hecho y cómo se ha hecho.

Figura 46. Gráficos 3D realizados con MATLAB.

Aprenda Matlab 7.0 como si estuviera en Primero

página 122

9.1.1. DIBUJO SIMPLIFICADO DE FUNCIONES 3-D: FUNCIONES EZPLOT3(), EZSURF(), ETC.
Existen también algunas funciones simplificadas para el dibujo 3-D similares a la función ezplot
vista en el Apartado 8.3.3, en la página 116.
Así la función ezplot3 dibuja lineas paramétricas tridimensionales en la forma x(t), y(t) y z(t). Por
defecto se utiliza el intervalo 0 < t < 2*pi. Considérense las siguientes posibilidades:

>> ezplot3(x,y,z);
>> ezplot3(x,y,z,[t1,t2]);
>> ezplot3(x,y,z,[t1,t2],'animate'); % dibuja la curva progresivamente

En las sentencias anteriores x, y, y z pueden ser funciones anónimas, handles a funciones, funciones
inline o expresiones definidas como cadena de caracteres. Los ficheros *.m y las funciones inline
deben escribirse de tal forma que admitan vectores de valores como argumentos (vectorizados).
Otra función de dibujo 3-D rápido es ezsurf. Esta función utiliza la funcción surf para realizar un
dibujo 3-D de una función f(x,y). Por defecto se utilizan los intervalos –2*pi < x, y < 2*pi. La fun-
ción f se puede definir por medio de una expresión en la que aparezcan x e y definida por medio de
una cadena de caracteres, con una función convencional, o con funciones anónimas u online. A con-
tinuación se dan algunas posibles formas de exta función:

>> ezsurf(f);
>> ezsurf(f, [a,b]);
>> ezsurf(f, [xmin,xmax,ymin,ymax]);

La función ezsurf permite también dibujar superficies paramétricas 3-D, por ejmplo en las formas
siguientes, con parámetros s y t:

>> ezsurf(x,y,z); % por defecto -2*pi < s,t < 2*pi
>> ezsurf(x,y,z, [a,b]);
>> ezsurf(x,y,z, [smin,smax,tmin,tmax]);

Con un último parámetro entero N se puede controlar la densidad del mallado con el que se dibuja.
Por defecto N=60. Con el argumento 'circ' se dibuja en un dominio circular. A continuación se in-
cluyen algunos ejemplos tomados de la ayuda de MATLAB:

>> ezsurf('s*cos(t)','s*sin(t)','t')
>> ezsurf('s*cos(t)','s*sin(t)','s')
>> ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,4*pi])

Otras funciones simplificadas para dibujo 3-D son ezcontour, ezcontourf, ezmesh, ezsurfc y ez-
meshc
. Para más información consultar el Help de MATLAB.

9.1.2. DIBUJO DE LÍNEAS: FUNCIÓN PLOT3
La función plot3 es análoga a su homóloga bidimensional plot. Su forma más sencilla es:

>> plot3(x,y,z)

que dibuja una línea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. y la proyecta sobre
un plano para poderla representar en la pantalla. Al igual que en el caso plano, se puede incluir una
cadena de 1, 2 ó 3 caracteres para determinar el color, los markers, y el tipo de línea:

>> plot3(x,y,z,s)

También se pueden utilizar tres matrices X, Y y Z del mismo tamaño:

>> plot3(X,Y,Z)

en cuyo caso se dibujan tantas líneas como columnas tienen estas 3 matrices, cada una de las cuales
está definida por las 3 columnas homólogas de dichas matrices.

Capítulo 9: Gráficos tridimensionales

página 123

A continuación se va a realizar un ejemplo sencillo consistente en dibujar un cubo. Para ello se
creará un fichero llamado cubo.m que contenga las aristas correspondientes, definidas mediante los
vértices del cubo como una línea poligonal continua (obsérvese que algunas aristas se dibujan dos
veces). El fichero cubo.m define una matriz A cuyas columnas son las coordenadas de los vértices,
y cuyas filas son las coordenadas x, y y z de los mismos. A continuación incluye la llamada a la
función plot3:

% fichero cubo.m
close all

A=[0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 0
0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0];
plot3(A(1,:)',A(2,:)',A(3,:)')

9.1.3. DIBUJO DE MALLADOS: FUNCIONES MESHGRID, MESH Y 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 fun-
ción de los dos índices.
Sean x e y dos 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 hay que crear dos matrices X (cuyas filas son co-
pias 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 x e y de todos los puntos de la retícula.
La matriz de valores Z se calcula a partir de las matrices de coordenadas X e Y. Finalmente hay que
dibujar esta matriz Z con la función mesh, cuyos elementos son función elemento a elemento de los
elementos de X e 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 test3d anterior se utilizará u y v en lugar de x e y. Créese un fichero llamado sombrero.m
que 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 47.
Se habrá podido comprobar que la función mesh dibuja en perspectiva una 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 z de la función. Ejecútese ahora el comando:

>> surf(W)

y obsérvese la diferencia en la Figura 48. En vez de líneas aparece ahora una superficie faceteada,
también con eliminación de líneas ocultas. El color de las facetas depende también del valor de la
función.

Aprenda Matlab 7.0 como si estuviera en Primero

página 124

Figura 47. Figura 3D de la función “sombrero”.

Figura 48. Función “sombrero” con facetas.

Como un segundo ejemplo, se va a volver a dibujar la función picos (la correspondiente al fichero
test3d.m visto previamente). Créese ahora el fichero picos.m con 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 picos en 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.

9.1.4. DIBUJO DE LÍNEAS DE CONTORNO: FUNCIONES CONTOUR Y CONTOUR3
Una forma distinta de representar funciones tridimensionales es por medio de isolíneas o curvas de
nivel
. A continuación se verá cómo se puede utilizar estas representaciones con las matrices de da-
tos Z y W que se han calculado previamente:

>> contour(Z,20)
>> contour3(Z,20)
>> contour(W,20)
>> contour3(W,20)

donde "20" representa el número de líneas de nivel. Si no se pone se utiliza un número por defecto.
Otras posibles formas de estas funciones son las siguientes:
contour(Z, val)

siendo val un vector de valores para las isolíneas a dibujar

contour(u,v,W,20)

se utilizan u y v para dar valores a los ejes de coordenadas

contour(Z,20,'r--')

se puede especificar el tipo de línea como en la función plot

contourf(Z, val)

análoga a contour(), pero rellenando el espacio entre líneas

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->