UNIVERSIDAD TECNOLÓGICA DE PEREIRA Programa de Tecnología Eléctrica Matlab Introducción Taller No.2 Programación TE243 Segundo semestre de 2014 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: 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. 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. 1 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. 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]; 2 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 5 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) 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) 6 seno=sin(t); plot(t,seno) xlabel('t(segundos)') ylabel('m(amperios)') 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. El comando más utilizado de los anteriores es meshgrid y genera x e y matrices para gráficas en tres dimensiones. 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) 7 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) 8 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: construir tres planos en tres dimensiones con surf, 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) En la gráfica se observa adicionalmente todos los ejes especificados axis([-5 5 -5 5 0 30]) Ejemplo: generar un plano en tres dimensiones y curvar su altura clc x=-5:.5:5; y=x; [x1,y1]=meshgrid(x,y); z4=1./(x1.^2+1); mesh(x,y,z4) 9 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: generar una gráfica tridimensional de una helicoidal con 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 figura se muestra la gráfica resultante. 10 TALLER No.2 PARA RESOLVER EN MATLAB Realizar los siguientes ejercicios: En dos dimensiones 1) Graficar una función diente de sierra y superponerle una función coseno 2) Obtener 4 gráficas en un mismo display por filas y luego por columnas de: - una función seno - una función coseno - una función constante - pendiente positiva En tres dimensiones 1) Graficar 5 planos en tres dimensiones 2) Dibujar la función sen(r)/r (siendo r=sqrt(x2+y2)+eps; para evitar dividir por 0 se suma al denominador el número pequeño casi cero (eps), hacerlo con mesh y límites entre x=-8:0.5:8; y=x siendo la altura es la función sen(r)/r 3) Con el comando plot3, graficar una función seno, una función coseno y una función constante 4) De acuerdo a 3) Cómo se grafica un óvalo en tres dimensiones 11 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) 12