Introducción a visualización de funciones en Matlab y Octave

Transcripción

Introducción a visualización de funciones en Matlab y Octave
Una introducción breve a la visualización
de funciones en Matlab y Octave.
Matlab® y su clon GNU Octave son lenguajes de programación interpretados orientados
principalmente al cálculo numérico y cómputo matricial, que presentan diversos comandos de
graficación aptos para la visualización de funciones escalares y vectoriales en una o varias
variables. Este documento no pretende ser una introducción a Matlab sino que presupone un
conocimiento superficial de sus conceptos y comandos más básicos. Aquí pretendemos dar una
introducción rápida y somera de los comandos gráficos más frecuentes, en su sintaxis más común.
Información adicional sobre cada comando, y sintaxis alternas pueden ser consultadas en la consola
de comando de Matlab digitando help xxxxx, donde xxxxx representa el nombre del comando a
consultar.
PLOT
Es un comando para graficar curvas planas definidas paramétricamente de la forma
[ x , y ]=[ f(t) , g(t) ], o cualquiera reducible a esa forma. Su sintaxis básica es:
plot(x,y);
donde x es un vector de datos de las coordenadas x de la curva y y es un vector de las coordenadas y
de la curva. Los vectores x y y generalmente se obtienen como función de un vector de parámetros
que se genera usualmente con el comando
t=ti:dt:tf;
Ahí, t es un vector cuyas componentes son númros equiespaciados. El número ti es el valor inicial
del parámetro de la curva, el número tf es el valor final del parámetro de la curva, y el número dt es
el incremento o separación entre valores consecutivos seleccionados para graficar. Por ejemplo,
t=0:0.25:1 arrojaría como resultado un vector t = [ 0 , 0.25 , 0.5 , 0.75 , 1 ].
Con un vector de parámetros t, se pueden calcular las coordenas de la curva así:
x=f(t);
y=g(t);
Luego, para graficar la curva, basta usar el comando plot. A manera de ejemplo, el siguiente código
genera dos vueltas de una espiral de arquímedes:
t=0:pi/200:4*pi;
x=t.*cos(t); y=t.*sin(t);
plot(x,y);
Vale la pena mencionar que el punto antes del
operador multiplicación (.*) se hace para que
la función se evalúe componente a componente,
para cada t.
PLOT3
Es el comando análogo para generar curvas definidas paramétricamente en el espacio de la forma
[ x , y , z ]=[ f(t) , g(t) , h(t) ]. La forma de generar los puntos de graficación es totalmente análoga a
la manera de hacerlo para PLOT, sólo que aquí se requiere una serie de componentes adicionales
para la coordenada z.
Por ejemplo, el código siguiente grafica tres giros de una hélice cilíndrica con eje x. El comando
adicional “grid on” sólo activa las líneas de referencia.
t=0:pi/200:6*pi;
x=t;
y=cos(t);
z=sin(t);
plot3(x,y,z);
grid on;
SURF
Es un comando para graficar superficies definidas paramétricamente en el espacio de la forma
[ x , y , z ]=[ f(s,t) , g(s,t) , h(s,t) ]. Para graficar la superficie, se requiere establecer no sólo
intervalos para los parámetros s y t, sino matrices S y T que contengan las coordenadas s y t del
producto cartesiano de esos intervalos. Para generar los intervalos en los parámetros se hace de
manera análoga a como se hace para PLOT y PLOT3.
Por ejemplo, se podría generar un intervalo de valores para s y t así:
s=0:2:6;
t=1:2:7;
Lo que arrojaría los vectores de parámetros:
s=[0 2 4 6] y t=[1 3 5 7].
Para graficar la superficie, se tienen que generar todos los puntos del producto cartesiano de ese par
de intervalos, como se muestra a continuación:
Esto se logra con el comando meshgrid que toma la sintaxis que se muestra en seguida:
[S,T]=meshgrid(s,t);
El resultado del comando anterior serían las siguientes matrices, que en posiciones homólogas
tienen las coordenadas de cada punto del producto cartesiano.
S=
T=
0
2
4
6
1
1
1
1
0
2
4
6
3
3
3
3
0
2
4
6
5
5
5
5
0
2
4
6
7
7
7
7
Lo último que queda por hacer antes de graficar la superficie es evaluar componente a componente
las funciones que definen la superficie tomando como argumentos esas dos matrices: X=f(S,T);
Y=g(S,T) y Z=h(S,T). Al final, se grafica la superficie invocando la función SURF con la sintaxis
que se muestra que se indica a continuación:
surf( X, Y, Z)
A manera de ejemplo, el siguiente código genera un toro circunferencial (rosquilla), el comando
adicional “axis equal” sirve para evitar que Matlab cambie la escala de los ejes, ya que éste, por
defecto, trata de ampliar las escalas de forma que la mayor cantidad de información sea visible en la
pantalla (vale la pena que el lector verifique el efecto de poner o quitar esa orden)
:
close all; clear all; clc;
R=2; r=1;
t=0:pi/25:2*pi; p=t;
[T,P]=meshgrid(t,p);
X=R*cos(P)+r*cos(T).*cos(P);
Y=R*sin(P)+r*cos(T).*sin(P);
Z=r*sin(T);
surf(X,Y,Z);
axis equal;
grid on;
Se puede notar que Matlab colorea automáticamente la superficie en función de la altura
(coordenada Z) de cada parte de la superficie. Esto permite evaluarmente la altura relativa de
distintas zonas apartadas de la superficie. Si el usuario quiere, puede cambiarse el esquema de color
para que cada parte de la superficie se coloree en función de alguna de sus coordenadas. Por
ejemplo, cambiar la orden surf del código previo por ésta
surf(X,Y,Z,X+Z));
colorea cada zona del toro según el valor que tome la función x+z sobre su superficie.
En gráficas como las anteriores, para saber a qué valor corresponde cada color, basta agregar la
orden “colorbar” para agregar a la gráfica una barra de colores con los equivalentes numéricos. Por
ejemplo, el código siguiente grafica un paraboloide de revolución en el cual, el color de cada zona
depende del valor de la función
, ,
=
.
CONTOUR
A veces resulta interesante conocer los conjuntos (líneas) de nivel de una función z=f(x,y). Para este
fin se usa la función contour, que tiene (entre otras válidas) la siguiente sintaxis:
contour(X,Y,Z,L);
donde L es un vector de niveles para graficar varios conjuntos de nivel a la vez. Si L tiene una sola
componente, se grafica una sola línea de nivel. Por ejemplo, para la silla de montar canónica,
=
− , podemos estar interesados en saber qué puntos en su dominio tienen un valor
constante igual a -1, a 0.5 y a 1.3. Para esto, haríamos algo similar a lo hecho hasta ahora para
graficar, pero en lugar del comando surf, usaríamos contour:
x=-2:0.1:2; y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2-Y.^2;
contour(X,Y,Z,[-1 , 0.5 , 1.3]);
colorbar;
axis normal;
grid on;
Si se quiere ver una función definida explícitamente junto con sus conjuntos de nivel en el espacio
de partida, se puede usar el comando surfc. Por ejemplo, el siguente código muestra una silla de
montar canónica con la proyección de sus conjuntos de nivel en la base de la gráfica.
close all; clear all; clc;
x=-2:0.1:2; y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2-Y.^2;
h=surfc(X,Y,Z); colorbar; axis normal; grid on;
ISOSURFACE
Los conjuntos definidos implícitamente por funciones de Re3 en Re definen superficies de nivel,
que en física se suelen conocer como superficies “Equipotenciales”. Matlab incluye diversos
comandos para graficar este tipo de superficies, siendo tal vez el más usual, isosurface, que entre
otras sintaxis tiene la siguiente:
isosurface(X,Y,Z,V,n);
En este caso, X, Y y Z son matrices con coordenadas de puntos en el espacio, correspondientes al
producto cartesiano de tres intervalos, uno para la coordenada x, otro para y, y otro para z. La
matriz V tiene la evaluación de la función de la cual se quiere encontrar la superficie equipotencial
con nivel n. Por ejemplo, el código siguiente grafica tres superficies equipotenciales de la función
, , =
, con los niveles 1, 3 y 4:
close all; clear all; clc;
x=0:0.1:2; y=x; z=x; [X,Y,Z]=meshgrid(x,y,z);
V=X.*Y.*Z;
isosurface(X,Y,Z,V,1);
hold on;
isosurface(X,Y,Z,V,3);
isosurface(X,Y,Z,V,4);
colorbar; axis normal; grid on;
Hay otras formas de explorar funciones definidas en un volumen, como el comando “slice” que se
deja como inquietud de consulta al lector.
QUIVER
Cuando se tienen funciones cuyos espacios de partida y de llegada son de dimensión mayor a dos,
por ejemplo, de Re2 en Re2, es inviable obtener una gráfica continua como en los casos previos. En
este caso se ilustra el campo de direcciones graficando la entrada y la salida en algunos puntos
espaciados del dominio, de forma que permitan entender el comportamiento de la función. Este tipo
de gráfica de campos de vectores se logra representando las entradas como puntos en el plano, y las
salidas como vectores cuyo origen se pone en el punto del cual son imagen.
La orden para lograr esto en Re2 es el comando Quiver, que toma como argumentos matrices con
las coordenadas en X y en Y de las entradas, y matrices Fx, Fy de sus salidas respectivas. Estas
matrices se obtienen de forma similar a los demás comandos ya vistos. Por ejemplo, el siguiente
código grafica el campo vectorial de la función
close all; clear all; clc;
x=-1:0.1:1;
y=x;
[X,Y]=meshgrid(x,y);
FX=-Y./sqrt(X.^2+Y.^2);
FY=X./sqrt(X.^2+Y.^2);
quiver(X,Y,FX,FY);
grid on;
,
,
,
=
,
:
QUIVER3
Es el análogo del comando quiver para generar gráficas de campos vectoriales en Re3. Funciona
igual, sólo que se debe agregar otra entrada para las coordenadas Z, y otras para la componente en Z
de la función a evaluar. Por ejemplo, el siguiente código genera un gráfico del campo vectorial de la
función
, ,
,
, ,
,
, ,
=
,
,
:
close all; clear all; clc;
x=0:0.2:1; y=x; z=0:0.2:2;
[X,Y,Z]=meshgrid(x,y,z);
U=-Y./sqrt(X.^2+Y.^2);
V=X./sqrt(X.^2+Y.^2);
W=Z.^2/2+1;
h=quiver3(X,Y,Z,U,V,W);
grid on;
set(h,'linewidth',2);
Palabras finales
Hay muchos comandos más para visualizar funciones de variable vectorial. Además, cada uno de
los comandos aquí presentados de manera someramente introductoria admiten sintaxis adicionales
con finalidades alternas. Se sugiere al lector que consulte en la consola de comando usando la orden
“help” seguida del nombre del comando en el que se quiere ahondar, para aprender más, o indagar
en la extensiva ayuda gráfica de Matlab.
También se sugiere que se modifiquen los códigos aquí presentados, o que se combinen varios de
ellos en una misma gráfica, para ver la potencialidad de visualización de este lenguaje de
programación.

Documentos relacionados