Está en la página 1de 35

FIME

Antologa: Introducin a MatLab

6. GRFICOS
Una de las fortalezas de Matlab la constituye la facilidad para desarrollar grficos de muy alta calidad. Los grficos de Matlab pueden ser de dos y tres dimensiones. Los de dos dimensiones se clasifican, de manera general, en: Euclidianos (comando plot) Estadsticos (comandos hist y bar) Polares (comando pol)

Mientras los grficos en tercera dimensin se clasifican en: Euclidianos (comando plot3) De malla (comando meshgrid) o De malla (comando mesh) o De superficie (comando surf) o De contorno (comando meshc)

6.1 BIDIMENSIONALES
A estas alturas, despus de ver cmo funciona este programa, a nadie le puede resultar extrao que los grficos 2-D de MATLAB estn fundamentalmente orientados a la representacin grfica de vectores (y matrices). En el caso ms sencillo los argumentos bsicos de la funcin plot van a ser vectores. Cuando una matriz aparezca como argumento, se considerar como un conjunto de vectores columna (en algunos casos tambin de vectores fila). MATLAB utiliza un tipo especial de ventanas para realizar las operaciones grficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo lo que hubiera en ella, bien aadiendo nuevos elementos grficos a un dibujo anterior. Todo esto se ver con ms detalle en las siguientes secciones. 6.1.1 Funciones grficas 2D elementales MATLAB dispone de cuatro funciones bsicas para crear grficos 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() crea un grfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes loglog() igual que plot pero con escala logartmica en ambos ejes

MIA Rosario Aldana Franco

121

FIME

Antologa: Introducin a MatLab


semilogx() igual que plot pero con escala lineal en el eje de ordenadas y logartmica en el eje de abscisas semilogy() igual que plot pero con escala lineal en el eje de abscisas y logartmica en el eje de ordenadas

En lo sucesivo se har referencia casi exclusiva a la primera de estas funciones (plot). Las dems se pueden utilizar de un modo similar. El uso de plot se muestra en la figura 6.1, resultado de correr el siguiente programa: x=linspace(0,2*pi,30); y=sin(x); plot(x,y)

Figura 6.1 Uso de plot para Graficar la funcin seno

Existen adems otras funciones orientadas a aadir ttulos al grfico, a cada uno de los ejes, a dibujar una cuadrcula auxiliar, a introducir texto, etc. Estas funciones son las siguientes: title('ttulo') aade un ttulo al dibujo. Su uso se muestra en la figura 6.2 x=linspace(0,2*pi,30); y=sin(x); plot(x,y) title('Funcion Seno(x)') Figura 6.2 Uso de title para Colocar el ttulo a la grfica

xlabel('tal') aade una etiqueta al eje de abscisas. Con xlabel off desaparece. Su uso se muestra en la figura 6.3 ylabel('cual') aade una etiqueta al eje de ordenadas. Con ylabel off desaparece. Su uso se muestra en la figura 6.3

MIA Rosario Aldana Franco

122

FIME
x=linspace(0,2*pi,30); y=sin(x); plot(x,y) title('Funcion Seno(x)') xlabel('X') ylabel('F(x)') Figura 6.3 Uso de xlabel y ylabel para colocar los nombres a los ejes de la grfica.

Antologa: Introducin a MatLab

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 tambin un vector de cadenas de texto de la misma dimensin, cada elemento se escribe en las coordenadas correspondientes gtext('texto') introduce texto con ayuda del ratn: el cursor cambia de forma y se espera un clic para introducir el texto en esa posicin legend() define rtulos para las distintas lneas o ejes utilizados en la figura. Para ms detalle, consultar el Help grid activa la inclusin de una cuadrcula en el dibujo. Con grid off desaparece la cuadrcula. Como se muestra en la figura 6.4. x=linspace(0,2*pi,30); y=sin(x); plot(x,y) title('Funcion Seno(x)') xlabel('X') ylabel('F(x)') grid on Figura 6.4 Uso de grid on en la grfica.

Los dos grupos de funciones anteriores no actan de la misma forma. As, la funcin plot dibuja una nueva figura en la ventana activa (en todo momento MATLAB tiene una ventana activa de entre todas las ventanas grficas abiertas), o abre una nueva figura si no hay ninguna abierta, sustituyendo cualquier cosa que se hubiera dibujado anteriormente en esa ventana. Para verlo, se comenzar creando un par de vectores x e y con los que trabajar: x=[-10:0.2:10]; y=sin(x);

MIA Rosario Aldana Franco

123

FIME

Antologa: Introducin a MatLab

Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la ventana activa, para que al crear la nueva ventana aparezca en primer plano): close % se cierra la ventana grfica activa anterior grid % se crea una ventana con una cuadrcula plot(x,y) % se dibuja la funcin seno borrando la cuadrcula Se puede observar la diferencia con la secuencia que sigue: close plot(x,y) % se crea una ventana y se dibuja la funcin seno grid % se aade la cuadrcula sin borrar la funcin seno En el primer caso MATLAB ha creado la cuadrcula en una ventana nueva y luego la ha borrado al ejecutar la funcin plot. En el segundo caso, primero ha dibujado la funcin y luego ha aadido la cuadrcula. Esto es as porque hay funciones como plot que por defecto crean una nueva figura, y otras funciones como grid que se aplican a la ventana activa modificndola, y slo crean una ventana nueva cuando no existe ninguna ya creada. Ms adelante se ver que con la funcin hold pueden aadirse grficos a una figura ya existente respetando su contenido. 6.1.1.1 Funcin plot Esta es la funcin clave de todos los grficos 2-D en MATLAB. Ya se ha dicho y ejemplificado que el elemento bsico de los grficos bidimensionales es el vector. Se utilizan tambin cadenas de 1, 2 3 caracteres para indicar colores y tipos de lnea. La funcin plot(), en sus diversas variantes, no hace otra cosa que dibujar vectores. Un ejemplo muy sencillo de esta funcin, en el que se le pasa un nico vector como argumento, es el siguiente: x=[1 3 2 4 5 3]; plot(x) El resultado de este comando es que se abre una ventana mostrando el grfico de la Figura 6.5.

Figura 6.5. Grfico del vector x=[1 3 2 4 5 3].

MIA Rosario Aldana Franco

124

FIME

Antologa: Introducin a MatLab

Por defecto, los distintos puntos del grfico se unen con una lnea continua. Tambin por defecto, el color que se utiliza para la primera lnea es el azul. Cuando a la funcin plot() se le pasa un nico vector (real) como argumento, dicha funcin dibuja en ordenadas el valor de los n elementos del vector frente a los ndices 1, 2, ... n del mismo en abscisas. Ms adelante se ver que si el vector es complejo, el funcionamiento es bastante diferente. En la pantalla de su computadora habr visto que MATLAB utiliza por defecto color blanco para el fondo de la pantalla y otros colores ms oscuros para los ejes y las grficas. Una segunda forma de utilizar la funcin plot() es con dos vectores como argumentos. En este caso los elementos del segundo vector se representan en ordenadas frente a los valores del primero, que se representan en abscisas. Vase por ejemplo cmo se puede dibujar un cuadriltero de esta forma (observe que para dibujar un polgono cerrado el ltimo punto debe coincidir con el primero), la figura 6.6 muestra el resultado de la ejecucin: x=[1 6 5 2 1]; y=[1 0 4 3 1]; plot(x,y)

Figura 6.6 Grfico de los vectores x=[1 6 5 2 1] y y=[1 0 4 3 1.

La funcin plot() permite tambin dibujar mltiples curvas introduciendo varias parejas de vectores como argumentos. En este caso, cada uno de los segundos vectores se dibuja en ordenadas como funcin de los valores del primer vector de la pareja, que se representan en abscisas. Si el usuario no decide otra cosa, para las sucesivas lneas se utilizan colores que son permutaciones cclicas del azul, verde, rojo, cyan, magenta, amarillo y negro. Observe bien cmo se dibujan el seno y el coseno en el siguiente ejemplo, el resultado de su ejecucin se muestra en la figura 6.7:

MIA Rosario Aldana Franco

125

FIME

Antologa: Introducin a MatLab

x=0:pi/25:6*pi; y=sin(x); z=cos(x); plot(x,y,x,z)

Figura 6.7 Grfico de las funciones seno y coseno en la misma grfica.

Ahora se explicar el tema relacionado a los vectores complejos. Si se pasan a plot() varios vectores complejos como argumentos, MATLAB simplemente representa las partes reales y desprecia las partes imaginarias. Sin embargo, un nico argumento complejo hace que se represente la parte real en abscisas, frente a la parte imaginaria en ordenadas. Vase el siguiente ejemplo. Para generar un vector complejo se utilizar el resultado del clculo de valores propios de una matriz formada aleatoriamente: plot(eig(rand(20,20)),'+') en donde se ha hecho uso de markers para dibujar con distintos tipos de smbolos(en este caso con signos +), en vez de con lnea continua, que es la opcin por defecto. En el comando anterior, el segundo argumento es un carcter que indica el tipo de marker elegido. El comando anterior es equivalente al programa siguiente, que al ser ejecutado da como resultado la figura 6.8. z=eig(rand(20,20)); plot(real(z),imag(z),'+')

Figura 6.8 Grfico de un ventor de nmeros complejos, generados de manera aleatoria.

Como ya se ha dicho, si se incluye ms de un vector complejo como argumento, se ignoran las partes imaginarias. Si se quiere dibujar varios vectores complejos, hay que separar explcitamente las partes reales e imaginarias de cada vector, como se acaba de hacer en el ltimo ejemplo.

MIA Rosario Aldana Franco

126

FIME

Antologa: Introducin a MatLab

El comando plot puede utilizarse tambin con matrices como argumentos. Vanse algunos ejemplos sencillos: plot(A) dibuja una lnea por cada columna de A en ordenadas, frente al ndice de los elementos en abscisas, como se muestra en el programa siguiente y la figura 6.9 A=[1 2 3;4 5 6]; Plot(A);

Figura 6.9 Grfico de la matriz A

plot(x,A) dibuja las columnas (o filas) de A en ordenadas frente al vector x en abscisas. Las dimensiones de A y x deben ser coherentes: si la matriz A es cuadrada se dibujan las columnas, pero si no lo es y la dimensin de las filas coincide con la de x, se dibujan las filas, como se muestra en el programa siguiente y en la figura 6.10: x=[1 2 3;4 5 6]; A=rand(2,3); plot(x,A)

Figura 6.10 Grfico de las matrices de 2 por 3: x y A

plot(A,x) anlogo al anterior, pero dibujando las columnas (o filas) de A en abscisas, frente al valor de x en ordenadas, como se muestra en la figura 6.11

x=[1 2 3;4 5 6]; A=rand(2,3); plot(A,x)

Figura 6.11 Grfico de las matrices de 2 por 3: A y x

MIA Rosario Aldana Franco

127

FIME

Antologa: Introducin a MatLab

plot(A,B) dibuja las columnas de B en ordenadas frente a las columnas de A en abscisas, dos a dos. Las dimensiones deben coincidir. El programa siguiente es un ejemplo, donde A y B son matrices de 2X3 y CyD son matrices de 3X2, cuya corrida se muestra en la figura 6.12: B=x; C=rand(3,2) D=2*rand(3,2)-1 plot(A,B,C,D) Figura 6.12 Grfico de las matrices de 2 por 3: A y B y de 3 por 2: C y D

plot(A,B,C,D) anlogo al anterior para cada par de matrices. Las dimensiones de cada par deben coincidir, aunque pueden ser diferentes de las dimensiones de los dems pares

Se puede obtener una excelente y breve descripcin de la funcin plot() con el comando help plot o helpwin plot. La descripcin que se acaba de presentar se completar en la siguiente seccin, en donde se ver cmo elegir los colores y los tipos de lnea. 6.1.1.2. Estilos de lnea y marcadores en la funcin plot En la seccin anterior se ha visto cmo la tarea fundamental de la funcin plot() era dibujar los valores de un vector en ordenadas, frente a los valores de otro vector en abscisas. En el caso general esto exige que se pasen como argumentos un par de vectores. En realidad, el conjunto bsico de argumentos de esta funcin es una tripleta formada por dos vectores y una cadena de 1, 2 3 caracteres que indica el color y el tipo de lnea o de marker. En la tabla 6.1 siguiente se pueden observar las distintas posibilidades. Cuando hay que dibujar varias lneas, por defecto se van tomando sucesivamente los colores de la tabla comenzando por el azul, hacia arriba, y cuando se terminan se vuelve a empezar otra vez por el azul. Si el fondo es blanco, este color no se utiliza para las lneas. 6.1.1.3. Aadir lneas a un grfico ya existente Existe la posibilidad de aadir lneas a un grfico ya existente, sin destruirlo o sin abrir una nueva ventana. Se utilizan para ello los comandos hold on y hold off. El primero de ellos hace que los grficos sucesivos respeten los que ya se han dibujado en la figura (es posible que haya que modificar la escala de los ejes); el comando hold off deshace el efecto de hold on.

MIA Rosario Aldana Franco

128

FIME

Antologa: Introducin a MatLab

Tabla 6.1 Colores, markers y estilos de lnea El siguiente ejemplo muestra cmo se aaden las grficas de x2 y x3 a la grfica de x previamente creada (cada una con un tipo de lnea diferente), el resultado de correr el siguiente programa se muestra en la figura 6.13 x=-pi:0.001:pi; x2=sin(x); x3=cos(x); plot(x) hold on plot(x2,'--') plot(x3,'-.') hold off

Figura 6.13 Uso de hold on para modificar un grfico existente.

6.1.1.4. Comando subplot Una ventana grfica se puede dividir en m particiones horizontales y n verticales, con objeto de representar mltiples grficos en ella. Cada una de estas subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. La forma general de este comando es: subplot(m,n,i) en donde m y n son el nmero de subdivisiones en filas y columnas, e i es la subdivisin que se convierte en activa. Las subdivisiones se numeran consecutivamente empezando por las de la primera fila, siguiendo por las de la

MIA Rosario Aldana Franco

129

FIME

Antologa: Introducin a MatLab

segunda, etc. Por ejemplo, la siguiente secuencia de comandos genera cuatro grficos en la misma ventana, como se muestra en la figura 6.14 y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z; subplot(2,2,1), plot(x,y) subplot(2,2,2), plot(x,z) subplot(2,2,3), plot(x,w) subplot(2,2,4), plot(x,v)

Figura 6.14 Uso del comando subplot para dibujar varios grficos en la misma ventana.

Se puede practicar con este ejemplo aadiendo ttulos a cada subplot, as como rtulos para los ejes. Se puede intentar tambin cambiar los tipos de lnea. Para volver a la opcin por defecto basta teclear el comando: subplot(1,1,1) 6.1.1.5. Control de los ejes Tambin en este punto MATLAB tiene sus opciones por defecto, que en algunas ocasiones puede ser necesario cambiar. El comando bsico es el comando axis. Por defecto, MATLAB ajusta la escala de cada uno de los ejes de modo que vare entre el mnimo y el mximo valor de los vectores a representar. Este es el llamado modo "auto", o modo automtico. Para definir de modo explcito los valores mximo y mnimo segn cada eje, se utiliza el comando: axis([xmin, xmax, ymin, ymax]) mientras que axis('auto') devuelve el escalado de los ejes al valor por defecto o automtico. Otros posibles usos de este comando son los siguientes: v=axis devuelve un vector v con los valores [xmin, xmax, ymin, ymax] axis(axis) mantiene los ejes en sus actuales valores, de cara a posibles nuevas grficas aadidas con hold on

MIA Rosario Aldana Franco

130

FIME

Antologa: Introducin a MatLab

axis('ij') utiliza ejes de pantalla, con el origen en la esquina superior izquierda y el eje j en direccin vertical descendente axis('xy') utiliza ejes cartesianos normales, con el origen en la esquina inferior izquierda y el eje y vertical ascendente axis('equal') el escalado es igual en ambos ejes axis('square') la ventana ser cuadrada axis('image') la ventana tendr las proporciones de la imagen que se desea representar en ella (por ejemplo la de una imagen bitmap que se desee importar) y el escalado de los ejes ser coherente con dicha imagen axis('normal') elimina las restricciones introducidas por 'equal' y 'square' axis('off') elimina las etiquetas, los nmeros y los ejes axis('on') restituye las etiquetas, los nmeros y los ejes

6.1.1.6. Funcin line() La funcin line() permite dibujar una o ms lneas que unen los puntos cuyas coordenadas se pasan como argumentos. Permite adems especificar el color, grosor, tipo de trazo, marcador, etc. Es una funcin de ms bajo nivel que la funcin plot(), pero ofrece una mayor flexibilidad. En su versin ms bsica, para dibujar un segmento de color verde entre dos puntos, esta funcin se llamara de la siguiente manera: line([xini, xend]', [yini, yend]', 'color', 'g') Por ejemplo, el siguiente programa dibuja el grfico que se muestra en la figura 6.15: x=linspace(0,2*pi,30); y=sin(x); plot(x,y) line([0,2*pi]',[0,2]','color','r')

Figura 6.15 Uso del comando line para dibujar una lnea sobre otra grfica.

MIA Rosario Aldana Franco

131

FIME

Antologa: Introducin a MatLab

Se puede tambin dibujar dos lneas a la vez utilizando la forma: line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]); Finalmente, si cada columna de la matriz X contiene la coordenada x inicial y final de un punto, y lo mismo las columnas de la matriz Y con las coordenadas y, la siguiente sentencia dibuja tantas lneas como columnas tengan las matrices X e Y: line([X], [Y]); Se pueden controlar las caractersticas de la lnea por medio de pares parmetro/valor, como por ejemplo: line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LineStyle ','','Marker','*') Su uso se muestra en la figura 6.16 x=[1 2 3 4 5 6]; y=[2 4 6 8 10 12]; line([x],[y]','color','r','LineWidth',4,'Markersize',12,'Line style','-','Marker','*')

Figura 6.16 Uso del comando line para dibujar una lnea sobre otra grfica, utilizando diversas opciones de forma, color y marcadores.

6.1.2. Control de ventanas grficas: Funcin figure Si se llama a la funcin figure sin argumentos, se crea una nueva ventana grfica con el nmero consecutivo que le corresponda. El valor de retorno es dicho nmero. Por otra parte, el comando figure(n) hace que la ventana n pase a ser la ventana o figura activa. Si dicha ventana no existe, se crea una nueva ventana con el nmero consecutivo que le corresponda (que se puede obtener como valor de retorno del comando). La funcin close cierra la figura activa, mientras que close(n) cierra la ventana o figura nmero n.

MIA Rosario Aldana Franco

132

FIME

Antologa: Introducin a MatLab

El comando clf elimina el contenido de la figura activa, es decir, la deja abierta pero vaca. La funcin gcf devuelve el nmero de la figura activa en ese momento. Para practicar un poco con todo lo que se acaba de explicar, ejectense las siguientes instrucciones de MATLAB, observando con cuidado los efectos de cada una de ellas en la ventana activa. El comando figure(gcf) (get current figure) permite hacer visible la ventana de grficos desde la ventana de comandos. x=[-4*pi:pi/20:4*pi]; plot(x,sin(x),'r',x,cos(x),'g') title('Funcin seno(x) -en rojo- y funcin coseno(x) -en verde-') xlabel('ngulo en radianes'), figure(gcf) ylabel('valor de la funcin trigonomtrica'), figure(gcf) axis([-12,12,-1.5,1.5]), figure(gcf) axis('equal'), figure(gcf) axis('normal'), figure(gcf) axis('square'), figure(gcf) axis('off'), figure(gcf) axis('on'), figure(gcf) axis('on'), grid, figure(gcf)

6.1.3. Otras funciones grficas 2-D Existen otras funciones grficas bidimensionales orientadas a generar otro tipo de grficos distintos de los que produce la funcin plot() y sus anlogas. Algunas de estas funciones son las siguientes (para ms informacin sobre cada una de ellas en particular, utilizar help nombre_funcin): bar() crea diagramas de barras, como se muestra en al figura 6.17. x=-2.9:.9:2,9; y=exp(-x.*x); bar(x,y) title('Grafica de barras de una distribucion normal')

Figura 6.17 Uso del comando bar para dibujar una grfica de barras.

MIA Rosario Aldana Franco

133

FIME

Antologa: Introducin a MatLab

barh() diagramas de barras horizontales, como se muestra en el programa siguiente y la figura 6.18 x=-2.9:.9:2,9; y=exp(-x.*x); barh(x,y) title('Grafica de barras de una distribucion normal') Figura 6.18 Uso del comando barh para dibujar una grfica de barras horizontales.

bar3() diagramas de barras con aspecto 3-D, como se muestra en la figura 6.19 x=-2.9:.9:2,9; y=exp(-x.*x); bar3(x,y) title('Grafica de barras de una distribucion normal')

Figura 6.19 Uso del comando bar3 para dibujar una grfica de barras tridimensional.

bar3h() diagramas de barras horizontales con aspecto 3-D, como se muestra en la figura 6.20 x=-2.9:.9:2,9; y=exp(-x.*x); bar3h(x,y) title('Grafica de barras de una distribucion normal')

Figura 6.19 Uso del comando bar3h.

MIA Rosario Aldana Franco

134

FIME

Antologa: Introducin a MatLab

pie() grficos con forma de tarta, como se muestra en la figura 6.21

x=-2.9:.9:2,9; y=exp(-x.*x); pie(x,y) title('Grafica de pie') Figura 6.21 Uso del comando pie para dibujar una grfica tarta o de queso. pie3() grficos con forma de tarta y aspecto 3-D, como se muestra en la figura 6.22 x=-2.9:.9:2,9; y=exp(-x.*x); pie3(x,y) title('Grafica de pie') Figura 6.22 Uso del comando pie3 para dibujar una grfica tarta o de queso en tercera dimensin. area() similar plot(), pero rellenando en ordenadas de 0 a y, como se muestra en la figura 6.23 x=-2.9:.9:2,9; y=exp(-x.*x); area(x,y) title('Grafica de area')

Figura 6.23 Uso del comando area para dibujar una grfica de rea rellena stairs() funcin anloga a bar() sin lneas internas, como se muestra en la figura 6.24

MIA Rosario Aldana Franco

135

FIME
x=-2.9:.9:2,9; y=exp(-x.*x); stairs(x,y)

Antologa: Introducin a MatLab

title('Grafica de barras sin division')

Figura 6.24 Uso del comando stairs para dibujar una grfica de barras

compass() dibuja los elementos de un vector complejo como un conjunto de vectores partiendo de un origen comn, como se muestra en la figura 6.25 z=eig(rand(20,20)); compass(z) title('Grafica de vectores')

Figura 6.25 Uso del comando compass para dibujar vectores con el origen comn

feather() dibuja los elementos de un vector complejo como un conjunto de vectores partiendo de orgenes uniformemente espaciados sobre el eje de abscisas, como se muestra en la figura 6.26

MIA Rosario Aldana Franco

136

FIME
z=eig(rand(20,20)); feather(z) title('Grafica de vectores')

Antologa: Introducin a MatLab

Figura 6.26 Uso del comando feather para dibujar vectores

hist() dibuja histogramas de un vector, como se muestra en la figura 6.27 x=-2.9:.9:2,9; y=exp(-x.*x); hist(y) title('Grafica de histograma')

Figura 6.27 Uso del comando hist para dibujar histogramas

rose() histograma de ngulos (en radianes), como se muestra en la figura 6.28 x=0:0.01:2*pi; y=sin(2*x).*cos(2*x); rose(x,y) title('Grafica de rosa') Figura 6.28 Uso del comando rose para dibujar histogramas de ngulos

polar(t, r, S) dibuja grficos con coordenadas polares, donde t es el vector de ngulos en radianes, r es el radio vector y S es la cadena de caracteres opcional para elegir un color, como se muestra en la figura 6.29

MIA Rosario Aldana Franco

137

FIME
t=0:0.01:2*pi; r=sin(2*x).*cos(2*x);; polar(x,y) title('Grafica Polar') Figura 6.29 Uso del comando polar para dibujar grficos con coordenadas polares

Antologa: Introducin a MatLab

stem() grafica la secuencia de valores discretos contenidos en un vector, como se muestra en la figura 6.30 y=randn(50,1); stem(y,':' %usa linea punteada title('Grafica Stem de valores aleatorios')

Figura 6.30 Uso del comando stem dibujar grficos con valores discretos

errorbar() dibuja adems las barras de error en cada punto, como se muestra en la figura 6.31 x=0:0.1:2; y=erf(x); %crea la funcion de error de x e=rand(size(x))/10; % genera valores de error aleatorios errorbar(x,y,e) % crea la grafica title('Grafica errores')

Figura 6.31 Uso del comando errorbar para dibujar grficos y sus errores

MIA Rosario Aldana Franco

138

FIME

Antologa: Introducin a MatLab

quiver() dibujo de campos vectoriales como conjunto de vectores, como se muestra en la figura 6.32 x=0:0.01:2*pi; y=sin(2*x).*cos(2*x);; quiver(x,y) title('Grafica de campos vectoriales')

Figura 6.32 Uso del comando quiver para dibujar campos vectoriales

A modo de ejemplo, genrese un vector de valores aleatorios entre 0 y 10, y ejectense los siguientes comandos: x=[rand(1,100)*10]; plot(x) bar(x) stairs(x) hist(x) hist(x,20) alfa=(rand(1,20)-0.5)*2*pi; rose(alfa) 6.1.3.1. Funcin fplot La funcin plot vista anteriormente dibuja vectores. Si se quiere dibujar una funcin, antes de ser pasada a plot debe ser convertida en un vector de valores. Esto tiene algunos inconvenientes, por ejemplo, el que "a priori" es difcil predecir en que zonas la funcin vara ms rpidamente y habra por ello que reducir el espaciado entre los valores en el eje de abscisas. La funcin fplot admite como argumento un nombre de funcin o un nombre de fichero *.m en el cual est definida una funcin de usuario. La funcin puede ser escalar (un nico resultado por cada valor de x) o vectorial. La forma general de esta funcin es la siguiente: fplot('funcion', limites, 'cadena', tol) de donde 'funcion' representa el nombre de la funcin o del fichero *.m entre apstrofos (pasado como cadena de caracteres), limites es un vector de 2 4 elementos, cuyos valores son [xmin,xmax] o [xmin,xmax,ymin,ymax], 'cadena' tiene el mismo significado que en plot y permite controlar el color, los

MIA Rosario Aldana Franco

139

FIME
markers y el tipo de lnea.

Antologa: Introducin a MatLab

Mientras tol es la tolerancia de error relativo. El valor por defecto es 2e-03. El mximo nmero de valores en x es (1/tol)+1. Esta funcin puede utilizarse tambin en la forma: [x,y]=fplot('funcion', limites, 'cadena', tol) y en este caso se devuelven los vectores x e y, pero no se dibuja nada. El grfico puede obtenerse con un comando posterior por medio de la funcin plot. Vase un ejemplo de utilizacin de esta funcin. Se comienza creando un fichero llamado mifunc.m en el directorio G:\matlab que contenga las lneas siguientes: function y = mifunc(x) y(:,1)=200*sin(x)./x; y(:,2)=x.^2; y a continuacin se ejecuta el comando: >> fplot('mifunc(x)', [-20 20], 'g') Obsrvese que la funcin mifunc devuelve una matriz con dos columnas, que constituyen las dos grficas dibujadas. En este caso se ha utilizado para ellas el color verde, como se muestra en la figura 6.33

Figura 6.33 Uso del comando fplot para graficar

6.1.3.2. Funcin fill para polgonos sta es una funcin especial para dibujar polgonos planos, rellenndolos de un determinado color. La forma general es la siguiente: fill(x,y,c)

MIA Rosario Aldana Franco

140

FIME

Antologa: Introducin a MatLab

misma funcin que dibuja un polgono definido por los vectores x e y, rellenndolo con el color especificado por c. Si es necesario, el polgono se cierra uniendo el ltimo vrtice con el primero. Respecto al color: Si c es un carcter de color ('r','g','b','c','m','y','w','k'), o un vector de valores [r g b], el polgono se rellena de modo uniforme con el color especificado, como se muestra en la figura 6.34 x=(1/8:2/8:15/8)*pi; y=sin(x); z=cos(x); fill(y,z,'r') %circulo rojo con 8 puntos de referencia axis('square') text(-.11,0,'STOP') title('Seal de STOP')

Figura 6.34 Uso del comando fill para graficar un polgono

Si c es un vector de la misma dimensin que x e y, sus elementos se trasforman de acuerdo con un mapa de colores determinado, y el llenado del polgono no uniforme en este caso se obtiene interpolando entre los colores de los vrtices. Sobre este tema de los colores, se volver ms adelante con un cierto detenimiento.

Este comando puede utilizarse tambin con matrices: fill(A,B,C) donde A y B son matrices del mismo tamao. En este caso se dibuja un polgono por cada par de columnas de dichas matrices. C puede ser el vector fila de colores uniformes para cada polgono, o una matriz del mismo tamao que las anteriores para obtener colores de relleno por interpolacin. Si una de las dos, A o B, es un vector en vez de una matriz, se supone que ese vector se repite tantas veces como sea necesario para dibujar tantos polgonos como columnas tiene la matriz. Considrese un ejemplo sencillo de esta funcin, en el cdigo siguiente, cuyo resultado se muestra en la figura 6.35

MIA Rosario Aldana Franco

141

FIME

Antologa: Introducin a MatLab

x=[1 5 4 2]; y=[1 0 4 3]; fill(x,y,'r') colormap(gray), fill(x,y,[1 0.5 0.8 0.7])

Figura 6.35 Uso del comando fill aplicado a matrices para graficar un

6.1.4. Entrada de puntos con el ratn Se realiza mediante la funcin ginput, que permite introducir las coordenadas del punto sobre el que est el cursor, al clicar (o al pulsar una tecla). Algunas formas de utilizar esta funcin son las siguientes: [x,y] = ginput lee un nmero indefinido de puntos cada vez que se hace clic con el mouse o se pulsa una tecla cualquiera hasta que se termina pulsando la tecla intro [x,y] = ginput(n) lee las coordenadas de n puntos [x,y,bot] = ginput igual que el anterior, pero devuelve tambin un vector de enteros bot con el cdigo ASCII de la tecla pulsada o el nmero del botn del ratn (1, 2, ...) con el que se ha clicado. Como ejemplo de utilizacin de este comando, ejectense las instrucciones siguientes en la ventana de comandos de MATLAB para introducir un cuadriltero arbitrario y dibujarlo de dos formas: clf, [x,y]=ginput(4); figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r') que da origen al polgono mostrado en la figura 3.36, mismo que se ubica con un clic del mouse:

MIA Rosario Aldana Franco

142

FIME

Antologa: Introducin a MatLab

Figura 6.36 Uso del comando ginput para graficar un poligono (fill)

donde se ha introducido el comando pause(5) que espera 5 segundos antes de pasar a ejecutar el siguiente comando. Este comando admite como argumento un tiempo con precisin de centsimas de segundo. 6.1.5. Preparacin de pelculas o "movies" Para preparar pequeas pelculas o movies se pueden utilizar las funciones movie, moviein y getframe. Una pelcula se compone de varias imgenes, denominadas frames. La funcin getframe devuelve un vector columna con la informacin necesaria para reproducir la imagen que se acaba de representar en la figura o ventana grfica activa, por ejemplo con la funcin plot. El tamao de ste vector columna depende del tamao de la ventana, pero no de la complejidad del dibujo. La funcin moviein(n) reserva memoria para almacenar n frames. La siguiente lista de comandos creara una pelcula de 17 imgenes o frames, que se almacenarn como las columnas de la matriz M: M = moviein(17); x=[-2*pi:0.1:2*pi]'; for j=1:17 y=sin(x+j*pi/8); plot(x,y); M(:,j) = getframe; end Una vez creada la pelcula se puede representar el nmero de veces que se desee con el comando movie. Por ejemplo, para representar 10 veces la pelcula anterior, a 15 imgenes por segundo, habra que ejecutar el comando siguiente (los dos ltimos parmetros son opcionales): movie(M,10,15)

MIA Rosario Aldana Franco

143

FIME

Antologa: Introducin a MatLab

Los comandos moviein, getframe y movie tienen posibilidades adicionales para las que puede consultarse el Help correspondiente. Cabe sealar que en MATLAB no es lo mismo un movie que una animacin. Una animacin es simplemente una ventana grfica que va cambiando como consecuencia de los comandos que se van ejecutando. Un movie es una animacin grabada o almacenada en memoria previamente. 6.1.6. Impresin de las figuras Es muy fcil enviar a la impresora o a un fichero una figura producida con MATLAB. Por defecto, MATLAB produce salidas tipo postcript (un formato de descripcin de pginas propio de impresoras de la gama alta), pero si no hay ninguna impresora postcript disponible, MATLAB puede trasformar la salida y convertirla al formato de la impresora disponible en ese momento (por ejemplo al formato PCL, propio de las impresoras lser de Hewlett-Packard de la gama media-baja). La impresin de una figura puede hacerse tambin desde la lnea de comandos. La forma general del comando de impresin es la siguiente (si se omite el nombre del fichero, la figura se enva a la impresora): print device options filename Mediante el comando Help se puede obtener ms informacin sobre el comando print. Es posible tambin exportar a un fichero una figura de MATLAB, por ejemplo para incluirla luego en un documento de Word o en una presentacin de Powerpoint. Para exportar una figura se utiliza el comando File/Export de la ventana en la que aparece la figura 6.37. El cuadro de dilogo que se abre ofrece distintos formatos grficos para guardar la imagen. Cabe destacar la ausencia del formato *.gif, muy utilizado en Internet; s est presente sin embargo el formato *.png, que se considera el sucesor natural del *.gif, que se muestra en la figura 6.38. En todo caso la figura puede exportarse con cualquier formato estndar y luego utilizar por ejemplo Paint Shop Pro para transformarla. Si la figura es en color y se enva a una impresora en blanco y negro, se realiza una conversin de colores a tonalidades de gris.

MIA Rosario Aldana Franco

144

FIME

Antologa: Introducin a MatLab

Figura 6.37 Men File/Export

Figura 6.38 Men de formatos de imgenes a partir de File/Export

6.2. TRIDIMENSIONALES
Esta es una de las caractersticas de MATLAB que ms admiracin despierta entre los usuarios. 6.2.1 Tipos de funciones grficas tridimensionales MATLAB tiene posibilidades de realizar varios tipos de grficos 3D. La primera forma de grfico 3D es la funcin plot3, que es el anlogo tridimensional de la funcin plot. Esta funcin dibuja puntos cuyas coordenadas estn contenidas en 3 vectores, bien unindolos mediante una lnea continua (defecto), bien mediante markers. Asegrese de que no hay ninguna ventana grfica abierta y ejecute el siguiente comando que dibuja una lnea espiral: fi=[0:pi/20:6*pi]; plot3(cos(fi),sin(fi),fi,'g')

MIA Rosario Aldana Franco

145

FIME
El resultado se muestra en la figura 6.39

Antologa: Introducin a MatLab

Figura 6.39 Uso de la funcin plot3

6.2.1.1. Dibujo de lneas: funcin plot3 La funcin plot3 es anloga a su homloga bidimensional plot. Su forma ms sencilla es la siguiente: plot3(x,y,z) que dibuja una lnea 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 lnea: plot3(x,y,z,s) Tambin se pueden utilizar tres matrices X, Y y Z del mismo tamao: plot3(X,Y,Z) en cuyo caso se dibujan tantas lneas como columnas tienen estas 3 matrices, cada una de las cuales est definida por las 3 columnas homlogas de dichas matrices. A continuacin se va a realizar un ejemplo sencillo consistente en dibujar un cubo. Para ello se define una matriz A cuyas columnas son las coordenadas de los vrtices, y cuyas filas son las coordenadas x, y y z de los mismos: 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,:)') En la figura 6.40 se muestra el resultado de correr el programa previo.

MIA Rosario Aldana Franco

146

FIME

Antologa: Introducin a MatLab

Figura 6.40 Uso de la funcin plot3 usando una matriz como argumento

6.2.1.2. Dibujo de mallados: funciones meshgrid, mesh y surf Ahora se ver cmo se puede dibujar una funcin de dos variables (z=f(x,y)) sobre un dominio rectangular. Se ver que tambin se pueden dibujar los elementos de una matriz como funcin de los dos ndices. Sean x e y dos vectores que contienen las coordenadas en una y otra direccin de la retcula (grid) sobre la que se va a dibujar la funcin. Despus es necesario crear dos matrices X (cuyas filas son copias de x) e Y (cuyas columnas son copias de y). Las matrices X e Y se crean con la funcin meshgrid. Estas matrices representan respectivamente las coordenadas x e y de todos los puntos de la retcula. La matriz de valores Z se calcula a partir de las matrices de coordenadas X e Y. Finalmente es necesario dibujar la matriz Z con la funcin mesh, sus elementos son funcin elemento a elemento de los elementos de X e Y. Vase como ejemplo el dibujo de la funcin x2 + xy + y2 que puede codificarse: x=linspace(-2,2,32); y=x; [X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; mesh(X,Y,Z); title('Grafica de malla') Ejecutando este fichero se obtiene el grfico mostrado en la Figura 6.41. Se habr podido comprobar que la funcin mesh dibuja en perspectiva una funcin en base a una retcula de lneas de colores, rodeando cuadrilteros del color de fondo, con eliminacin de lneas ocultas. Ms adelante se ver cmo controlar estos colores que aparecen. Baste decir por ahora que el color depende del valor z de la funcin.

MIA Rosario Aldana Franco

147

FIME

Antologa: Introducin a MatLab

Figura 6.41 Uso de la funcin mesh

Si ahora se codifica el mismo problema, pero usando surf(X,Y,Z), en lugar de mesh(X,Y,Z), se obtiene la grfica de la figura 6.42 x=linspace(-2,2,32); y=x; [X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; surf(X,Y,Z); title('Grafica de superficie') Figura 6.42 Uso de la funcin surf

Observe que en vez de lneas aparece ahora una superficie faceteada, tambin con eliminacin de lneas ocultas. El color de las facetas depende tambin del valor de la funcin. Ahora se probar la funcin meshc, que muestra los contornos de la grfica como curvas de nivel, el resultado se muestra en la figura 6.43

Figura 6.43 Uso de la funcin meshc

Tambin la funcin surf tambin tiene una versin de contornos, se llama surfc misma que se muestra en la figura 6.44

MIA Rosario Aldana Franco

148

FIME

Antologa: Introducin a MatLab

x=linspace(-2,2,32); y=x; [X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; surfc(X,Y,Z); title('Grafica de malla') Figura 6.44 Uso de la funcin surfc

Como un segundo ejemplo, se va a graficar la funcin sin(R)/R, donde R es la resultante de dos componentes rectangulares x e y, para evitar la divisin entre cero se suma la pequea cantidad eps. 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) El resultado de usar la funcin mesh se muestra en la figura 6.45. 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) Figura 6.45 Uso de la funcin mesh

Se deja como ejercicio el uso de las funciones meshc, surf y surfc. 6.2.1.3. Dibujo de lneas de contorno: funciones contour y contour3 Una forma distinta de representar funciones tridimensionales es por medio de isolneas o curvas de nivel. A continuacin se ver cmo se puede utilizar estas representaciones con las matrices de datos Z y W que se han calculado previamente: contour(Z,20): su uso se muestra en la figura 6.46 contour3(Z,20): su uso se muestra en la figura 6.47 contour(W,20) contour3(W,20)

MIA Rosario Aldana Franco

149

FIME

Antologa: Introducin a MatLab

donde "20" representa el nmero de lneas de nivel. Si no se pone se utiliza un nmero por defecto. Otras posibles formas de estas funciones son las siguientes: contour(Z, val) siendo val un vector de valores para las isolneas a dibujar, como se muestra en la figura 6.46 x=linspace(-2,2,32); y=x; [X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; contour(Z,20)

Figura 6.46 Uso de la funcin contour

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 lnea como en la funcin plot contourf(Z, val) anloga a contour(), pero rellenando el espacio entre lneas

El cdigo para ejemplificar el uso de la funcin contour3, se muestra a continuacin, y su grfica en la figura 6.47 x=linspace(-2,2,32); y=x; [X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; contour3(Z,20)

Figura 6.47 Uso de la funcin contour3

6.2.2. Utilizacin del color en grficos 3-D En los dibujos realizados hasta ahora, se ha visto que el resultado adoptaba colores determinados por Matlab. Ahora se sabremos qu sistema podemos usar en MATLAB para determinar los colores.

MIA Rosario Aldana Franco

150

FIME

Antologa: Introducin a MatLab

6.2.2.1. Mapas de colores Un mapa de colores se define como una matriz de tres columnas, cada una de las cuales contiene un valor entre 0 y 1, que representa la intensidad de cada uno de los colores fundamentales: R (red o rojo), G (green o verde) y B (blue o azul). La longitud por defecto de los mapas de colores de MATLAB es 64, es decir, cada mapa de color contiene 64 colores. Algunos mapas de colores estn predefinidos en MATLAB. Buscando colormap en Help Desk se obtiene (entre otra informacin) la lista de los mapas de colores, en la tabla 6.2 se muestra una traduccin: Tabla 6.2 Mapas de color Descripcin Varia suavemente de rojo, pasando por naranja, hasta amarillo Es una escala de grises con un alto valor del componente azul Contiene colores espaciados regularmente en RGB Consiste de colores sombra de cyan y magenta Varia suavemente de negro a cobre brillante Consiste de os colores rojo, blanco, azul y negro Regresa una escala lineal de gris Varia suavemente desde negro, a travs de sombras de rojo, naranja y amarillo, a blanco Varia el componente de matiz del modelo del valor de saturacin. Los colores comienzan con rojo, pasando a travs de amarillo, verde, cyan, azul, magenta y regresa a rojo Son colores especficos por la propiedad de Axes ColorOrder y una sombra de gris Contiene sombras pastel de rosa Repite los seis colores rojo, naranja, amarillo, verde, azul y violeta Consiste de colores que tienen sombras de magenta y amarillo Consiste de colores que tienen sombras de verde y amarillo Es un mapa de color monocromtico blanco Consiste de colores que tienen sombras de azul y verde

Mapa de color autumn bone colorcube cool copper flag gray hot hsv

lines pink prism spring summer white winter

El colormap por defecto es jet. Para visualizar estos mapas de colores se pueden utilizar los comandos: colormap(hot) pcolor([1:65;1:65]')

MIA Rosario Aldana Franco

151

FIME

Antologa: Introducin a MatLab

donde la funcin pcolor permite visualizar por medio de colores la magnitud de los elementos de una matriz (en realidad representa colores de celdas, para lo que necesita que la matriz tenga una fila y columna ms de las necesarias; sa es la razn de que en el ejemplo anterior a la funcin pcolor se le pasen 65 filas y 2 columnas). Si se desea imprimir una figura en una impresora lser en blanco y negro, puede utilizarse el mapa de color gray. En el siguiente apartado se explica con ms detalle el dibujo en "pseudocolor" (pcolor, abreviadamente). El comando colormap acta sobre la figura activa, cambiando sus colores. Si no hay ninguna figura activa, sustituye al mapa de color anterior para las siguientes figuras que se vayan a dibujar. 6.2.2.2. Imgenes y grficos en pseudocolor. Funcin caxis Cuando se desea dibujar una figura con un determinado mapa de colores se establece una correspondencia (o un mapping) entre los valores de la funcin y los colores del mapa de colores. Esto hace que los valores pequeos se dibujen con los colores bajos del mapa, mientras que los valores grandes se dibujan con los colores altos. La funcin pcolor es similar a la funcin surf con el punto de vista situado perpendicularmente al dibujo. Un ejemplo interesante de uso de la funcin pcolor es el siguiente: se genera una matriz A de tamao 100x100 con valores aleatorios entre 0 y 1. La funcin pcolor(A) dibuja en color los elementos de la matriz A, mientras que la funcin pcolor(inv(A)) dibuja los colores correspondientes a los elementos de la matriz inversa. Se puede observar que los colores de la matriz inversa son mucho ms uniformes que los de la matriz original. Los comandos son los siguientes: A=rand(100,100); colormap(hot); pcolor(A); pause(5), pcolor(inv(A)); donde el comando pause(5) simplemente introduce un pausa de 5 segundos en la ejecucin. Al ejecutar todos los comandos en la misma lnea es necesario poner pause pues si no dibuja directamente la inversa sin pasar por la matriz inicial. El resultado de aplicar pcolor(A) y pcolor(inv(A)) se muestra en la figura 6.48

MIA Rosario Aldana Franco

152

FIME

Antologa: Introducin a MatLab

Figura 6.48 Uso del comando pcolor(A), a la izquierda, y pcolor(inv(A)), a la derecha 6.2.2.3 Dibujo de superficies faceteadas La funcin surf tiene diversas posibilidades referentes a la forma en que son representadas las facetas o polgonos coloreados. Las tres posibilidades son las siguientes: shading flat determina sombreado con color constante para cada polgono. Este sombreado se llama plano o flat. shading interp establece que el sombreado se calcular por interpolacin de colores entre los vrtices de cada faceta. Se llama tambin sombreado de Gouraud shading faceted consiste en sombreado constante con lneas negras superpuestas.

6.2.2.4 Otras formas de las funciones mesh y surf Por defecto, las funciones mesh y surf atribuyen color a los bordes y facetas en funcin de los valores de la funcin, es decir en funcin de los valores de la matriz Z. sta no es sin embargo la nica posibilidad. En las siguientes funciones, las dos matrices argumento Z y C tienen el mismo tamao: mesh(Z,C) surf(Z,C) En las figuras resultantes, mientras se dibujan los valores de Z, los colores se obtienen de C. Un caso tpico es aqul en el que se desea que los colores dependan de la curvatura de la superficie (y no de su valor). MATLAB dispone de la funcin del2, que aproxima la curvatura por diferencias finitas con el promedio de los 4 elementos contiguos, resultando as una matriz proporcional a la curvatura. Observe el efecto de esta forma de la funcin del2 en el siguiente ejemplo: x=linspace(-2,2,32); y=x;

MIA Rosario Aldana Franco

153

FIME
[X,Y]=meshgrid(x,y); Z=X.^2+X.*Y+Y.^2; C=del2(Z); close, surf(Z,C) cuyo resultado se muestra en la figura 6.49

Antologa: Introducin a MatLab

Figura 6.49 Uso del comando del2 para cambiar el color

MIA Rosario Aldana Franco

154

FIME Referencias

Antologa: Introducin a MatLab

1. Garca de Jaln, J. y otros. Aprenda Matlab 6.1 como si estuviera en primero. http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab61/matlab61pro.pdf 2. MATLAB, edicin para estudiante, versin 4. Editorial Prentice Hall,
Espaa, 1996.

3. Grossman, Stanley I. lgebra lineal. Editorial Mc Graw Hill, Mxico,


1996.

4. Mathews, John y Kurtis D. Kink. Mtodos numricos con Matlab,


cuarta edicin. Editorial Prentice Hall, Espaa, 2001.

5. Joyanes Aguilar, L. Fundamentos de programacin, segunda edicin.


Editorial Mc Graw Hill, Mxico 1998

6. Notas personales de los cursos de Matlab 7. Notas personales de diseo estructurado de algoritmos para el curso
Diseo estructurado de algoritmos impartido en el Instituto Tecnolgico Superior de Xalapa en el periodo agosto/02 febrero/03.

MIA Rosario Aldana Franco

155

También podría gustarte