Graficación en MATLAB y generación de secuencias discretas

Anuncio
UNIVERSIDAD TECNOLÓGICA DE PEREIRA
Programa de Tecnología Eléctrica
Matlab Introducción
Taller No.2
Programación TE243
Ing: José Norbey Sánchez
Grupo:
2. Gráficos en dos y tres dimensiones:
2.1 Gráficos en dos dimensiones
MATLAB dispone de cuatro funciones básicas para crear gráficos 2-D. Estas funciones se
diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de
ordenadas. Estas cuatro funciones son las siguientes:
plot()
loglog()
semilogx()
semilogy()
Crea un gráfico a partir de vectores y/o columnas de matrices, con escalas
lineales sobre ambos ejes.
Ídem con escala logarítmica en ambos ejes.
Ídem con escala lineal en el eje de ordenadas y logarítmica en el eje de abscisas.
ïdem con escala lineal en el eje de abscisas y logarítmica en el eje de ordenadas.
En lo sucesivo se hará referencia casi exclusiva a la primera de estas funciones (plot). Las demás
se pueden utilizar de un modo similar. Existen además otras funciones orientadas a añadir
títulos al gráfico, a cada uno de los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc.
Estas funciones son las siguientes:
fplot
parcela una función entre los límites especificados
imread
Lee la imagen de una fila especificada
imshow
Muestra la imagen de una fila especificada
linspace
Genera n puntos entre un intervalo definido
title('título')
Añade un título al dibujo.
xlabel('tal')
Añade una etiqueta al eje de abscisas. Con xlabel off desaparece.
ylabel('cual')
Añade una etiqueta al eje de ordenadas. Con ylabel off desaparece
text(x,y,'texto')
Introduce 'texto' en el lugar especificado por las coordenadas x e y. Si x e y
son: vectores, el texto se repite por cada par de elementos. Si texto es
también un vector de cadenas de texto de la misma dimensión, cada
elemento se escribe en las coordenadas correspondientes.
gtext('texto')
Introduce texto con ayuda del ratón: el cursor cambia de forma y se
espera un clic para introducir el texto en esa posición.
1
legend()
define rótulos para las distintas líneas o ejes utilizados en la figura. Para
más detalle, consultar el Help grid activa la inclusión de una cuadrícula en
el dibujo. Con grid off desaparece la cuadrícula.
Ejemplo: Generar una señal sinusoidal de amplitud unitaria.
t=0:pi/100:2*pi;
seno=sin(t);
plot(t,seno)
Ejemplo: También se graficar punteando dos vectores m y t que tengan la misma dimensión:
t=[-5 -4.5 -3 -2 0 1 1.5 4 4.5 5];
m=[20 10 12 4 15 18 3 20 4 7];
Si se desea graficar m contra t, se digita:
plot(t,m)
Si queremos cambiar color o delineado de la curva escribimos plot(t,m,’r’) para color rojo, otros
colores como y(amarillo), g(verde), w(blanco) y k(negro); si se digita plot(t,m,’r--’), aparece la
curva punteada, otras formas .,+,*,o,:, etc. También se puede colocar etiquetas a la curva con
los comandos: xlabel(‘t(segundos)’) y ylabel(‘m(amperios)’), se adiciona el texto entre comillas
simples a los ejes x y y respectivamente como se muestra en la siguiente figura.
2
Ejemplo: graficar la función anterior y colocarle etiquetas
t=[-5 -4.5 -3 -2 0 1 1.5 4 4.5 5];
m=[20 10 12 4 15 18 3 20 4 7];
plot(t,m)
xlabel('t(segundos)')
ylabel('m(amperios)')
Mediante el comando gtext(‘Curva ilustrativa’) se puede adicionar el texto entre comillas
(siempre con la figura abierta) donde se posicione el cursor y se haga el correspondiente clik. En
este caso se desplegará en la curva. Si se desea concentrar la atención en una determinada zona
de la curva se puede utilizar el comando axis([-4 -2 8 14]) donde los dos primeros elementos del
vector son las coordenadas horizontales y los dos últimos las coordenada verticales. Ver figura.
Ejemplo: ampliar los ejes en ([-4 -2 8 14]) y escribir en la gráfica “curva ilustrativa”
t=[-5 -4.5 -3 -2 0 1 1.5 4 4.5 5];
m=[20 10 12 4 15 18 3 20 4 7];
plot(t,m)
xlabel('t(segundos)')
ylabel('m(amperios)')
gtext('Curva Ilustrativa')
axis([-4 -2 8 14])
3
Se pueden hacer lecturas directamente de la curva mediante el comando ginput, ejemplo como
tomar dos lecturas de la curva: [x,y]=ginput(2)
t=[-5 -4.5 -3 -2 0 1 1.5 4 4.5 5];
m=[20 10 12 4 15 18 3 20 4 7];
plot(t,m)
xlabel('t(segundos)')
ylabel('m(amperios)')
[x,y]=ginput(2)
x=
0.0115
1.0945
y=
14.8684
15.9737
grid on
Para la ubicación de los puntos se puede habilitar convenientemente un reticulado mediante la
instrucción grid on como aparece en la siguiente figura. Si se quiere deshabilitar se digita grid
off.
En caso de necesitarse dibujar un gráfico adicional sobre la misma gráfica anterior se usa el
comando hold on. Por ejemplo para superponer dos funciones:
Ejemplo: generar dos vectores de 9 datos, graficar y luego superponerle una función seno
clc
t=[-2 -1 0 1 2 3 4 5 6];
m=[1.3 -1.3 1.1 -1.2 0 -0.9 1.2 1.6 1];
plot(t,m)
4
A la gráfica anterior le superponemos una función seno con hold on.
hold on;
t=0:pi/100:2*pi;
seno=sin(t);
plot(t,seno)
El comando hold of deshabilita lo asociado.
Las dos gráficas anteriores podrían mostrarse en dos subgráficas una debajo de la otra y
separadas por fila, pertenecientes a una misma ventana, usando el comando subplot(m,n,p), se
genera una matriz de m filas y n columnas, y p genera los ejes de cada gráfica.
Ejemplo: generar las dos gráficas anteriores por fila en una misma ventana
clc
t=[-2 -1 0 1 2 3 4 5 6];
m=[1.3 -1.3 1.1 -1.2 0 -0.9 1.2 1.6 1];
subplot(2,1,1)
plot(t,m)
5
xlabel('t(segundos)')
ylabel('m(tensión)')
t=0:pi/100:2*pi;
subplot(2,1,2)
seno=sin(t);
plot(t,seno)
xlabel('t(segundos)')
ylabel('m(amperios)')
Los comandos axis, xlabel, ylabel etc., se digitan después del respectivo plot para colocar
etiquetas. Usando el comando subplot(m,n,p), donde se genera una matriz de m filas y n
columnas, y p genera los ejes de cada gráfica.
Ejemplo: generar las dos gráficas anteriores por columna en una misma ventana
clc
t=[-2 -1 0 1 2 3 4 5 6];
m=[1.3 -1.3 1.1 -1.2 0 -0.9 1.2 1.6 1];
subplot(1,2,1)
plot(t,m)
xlabel('t(segundos)')
ylabel('m(tensión)')
t=0:pi/100:2*pi;
subplot(1,2,2)
seno=sin(t);
plot(t,seno)
xlabel('t(segundos)')
ylabel('m(amperios)')
6
Con la función linspace genera n puntos entre un intervalo definido de una función
Ejemplo generar la grafica de la siguiente función definida entre [-2,3].
clc
x=linspace(-2,3,3000);
% divide el intervalo [-2,3] en 3000 partes.
y=exp(-x);
% imágenes de las componentes de x
plot(x,y)
grid on
title('función exponencial')
% gráfica de la curva.
7
Existe otra forma de graficar una función en un solo paso con fplot, parcela una función entre
los límites especificados.
Ejemplo:
fplot('exp(-x)',[-2,3])
Graficas e imágenes con Funciones a trozos
Crear una imagen: para colocar una imagen en un display, se selecciona una imagen de pocos
pixeles (fotografía, etc.), con extensión (TIFF, JPEG, GIF, BMP, PNG, XWD), se guarda en la
carpeta de Matlab que se encuentra en mis documentos o en el escritorio se crea una carpeta y
se guarda allí.
Crear una función a trozos: con la función linspace, creamos una función a trozos o por partes
con extensión .m y se guarda junto en carpeta donde se encuentra la imagen.
Ejemplo: Diseñar un programa en Matlab que grafique la siguiente función a trozos y que
muestre la siguiente imagen.
clc
%seleccionamos la imagen y la guardamos en una carpeta
f = imread('imagenm1.png');
%luego se crea una imagen interactiva con la siguiente función
g=imcrop(f);
imshow(g) %y finalmente muestra la imagen
%Para graficar la función a trozos, seguimos los siguientes pasos:
x=linspace(-2,3,3000);
% divide el intervalo [-2,3] en 3000 partes.
y=(x.^2).*(x<0)+2.*((0<=x)&(x<1))+(-x+3).*(1<=x);
%evalúa f usando índice lógico
plot(x,y)
grid on
8
Ejemplo: realizar el ejemplo anterior mostrando a través del comando subplot la ‘imagen’ y la
‘función’ ya sea por fila o por columna en un mismo display.
%Colocar dos imagenes en un solo display en (2 filas, 1 columna)
% Recuerda que la imagen debe ser de pocos pixeles,
f = imread('imagenm1.png');
subplot(2,1,1);
imshow(f);
title('funcion a trozos');
%luego para graficar la función a trozos seguimos los siguientes pasos:
x=linspace(-2,3,3000);
% divide el intervalo [-2,3] en 3000 partes.
y=(x.^2).*(x<0)+2.*((0<=x)&(x<1))+(-x+3).*(1<=x);
%evalúa f usando índice lógico
subplot(2,1,2)
plot(x,y)
title('funcion a trozos');
grid on
9
2.2 Gráficos en tres dimensiones
Para construir gráficos en tres dimensiones primero se construye la superficie que representa la
magnitud de una función de dos variables; las dos variables se representan en el plano
horizontal y el valor de la función como una altura sobre dicho plano. La superficie se forma al
unir las pequeñas rejillas implementadas alrededor de cada punto. Los comandos utilizados
para graficar superficies son: mesh, meshz, meshc, surf, surfc. A través de algunos ejemplos se
ilustrará la operación de los comandos y de otras utilidades adicionales.
[X,Y]=meshgrid(x,y) genera una rejilla de puntos a través de los vectores X e Y.
mesh(x,y,z), surf(x,y,z), para dibujar superficies en 3D. z es el valor que toma la función z=(x,y,z)
en el punto de la rejilla (X,Y).
Ejemplo: construir un plano en tres dimensiones con meshgrid y surf.
clc
x=-5:0.5:5;
y=x;
[x1,y1]=meshgrid(x,y);
z1=0*x1;
surf(z1)
10
Si deseamos agregar otro plano al mismo grafico en tres dimensiones, escribimos lo siguiente:
Ejemplo: construir dos planos en tres dimensiones con surf y mesh
clc
x=-5:0.5:5;
y=x;
[x1,y1]=meshgrid(x,y);
z1=0*x1;
surf(z1)
hold on
z2=0*x1+10;
mesh(z2)
En la figura anterior, se observa la diferencia entre mesh y surf. El comando surf presenta
dificultades cuando el número de puntos es grande; se pueden apreciar los problemas
repitiendo el proceso anterior con un incremento para x1 de 0.1 en lugar del 0.5 utilizado, por lo
que se recomienda utilizar preferentemente mesh. Se aprecia también que se está graficando
contra el índice, para graficar directamente contra los ejes especificados debe digitarse lo
siguiente:
Ejemplo: Diseñar un programa en Matlab, que muestre tres planos en tres dimensiones con surf
y mesh y mostrar los ejes especificados.
clc
x=-5:0.5:5;
y=x;
[x1,y1]=meshgrid(x,y);
z1=0*x1;
surf(x,y,z1)
hold on
mesh(x,y,z2)
mesh(x,y,z2+10)
11
En la gráfica se observa adicionalmente todos los ejes especificados axis([-5 5 -5 5 0 30]).
Ejemplo: Diseñar un programa en Matlab que generar un plano en tres dimensiones con ejes y
curvar su altura a través de una función.
clc
x=-5:.5:5;
y=x;
[x1,y1]=meshgrid(x,y);
z4=1./(x1.^2+1);
mesh(x,y,z4)
Ejemplo: Diseñar un programa en Matlab que grafique en tres dimensiones la siguiente función
con los siguiente limites: -8:0.5:8.
sin( r ) / r , donde r  u 2  v 2
Utilizando el comando mesh, y para evitar dividir por cero, se utiliza el comando eps que es un
espaciamiento de números de punto flotante, y permite hacer divisiones por valores de casi
cero sin que entre en un ciclo infinito la función.
12
clc
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)
Otra forma de generar gráficos en tres dimensiones es con la función plot3(x,y,z), donde se
tienen los vectores x, y y z, entonces para generar la gráfica solo es necesario teclear el punto de
coordenadas cartesianas y luego los enlaza por segmentos para generarlo en 3-D.
Ejemplo: Diseñar un programa en Matlab, que genere una gráfica tridimensional de una
helicoidal con la función plot3.
clc
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
axis square;
grid on
El comando axis permite fijar los límites de los ejes en una gráfica y la opción square fija las
coordenadas iguales en los tres ejes. En la siguiente figura se muestra la gráfica resultante.
13
TALLER No.2 PARA RESOLVER EN MATLAB
Realizar los siguientes ejercicios:
Gráficos en dos dimensiones
1) Graficar una función diente de sierra uniforme y superponerle las funciones seno y
coseno y colocarles etiquetas (title, xlabel, ylabel)
2) Obtener 4 gráficas en un mismo display y colocarle etiquetas (title, xlabel, ylabel).
A- Primero mostrar las graficas por filas.
B- Segundo mostrar las graficas por columnas de:
- una función diente de sierra uniforme
- una función tangente
- una función constante
- pendiente positiva
3) Ejercicio: diseñar un programa en Matlab que grafique dos funciones a trozos en un
mismo display, y que además muestre los gráficos de los tramos de las funciones
literalmente, utilizando los comandos subplot y con subtitulos (title, xlabel, ylabel),
las siguientes dos funciones a trozos.
Gráficos en tres dimensiones
1. Graficar 5 planos en tres dimensiones
2. Disenar un programa en Matlab que grafique la siguiente función en tres dimensiones
utilizando el comando mesh.
cos(k ) / k , donde
k  x2  y2
3. Utilizando el comando plot3, diseñar programa en Matlab de un grafico en 3D con una
función seno, una función coseno y una función constante y generar con estas tres
funciones un círculo en tres dimensiones.
4. De acuerdo a 3) Cómo se grafica un óvalo en tres dimensiones
14
Descargar