Manual de Matlab

33
INTRODUCCIÓN Matlab es una herramienta de software ideal para el tratamiento digital de señales. El nombre de Matlab tiene su origen a partir de MATrix LABoratory, ya que fundamenta toda su operación en el tratamiento de matrices y vectores. Es un lenguaje técnico de alto nivel, lo que permite desarrollar múltiples aplicaciones con comandos de fácil recordación. Además posee muchas de las funciones que se necesitan para la creación y el procesamiento de señales. La capacidad de representación gráfica de Matlab permite visualizar los resultados de cualquier operación, facilitando la comprensión de las diversas funciones realizadas. Matlab puede expandirse mediante la inclusión de funciones para aplicaciones particulares como Redes Neuronales, Procesamiento de Imágenes, Comunicaciones, entre otros. Estos conjuntos de funciones especializadas se conocen como toolboxes. Este manual-guía pretende familiarizar al estudiante de Ingeniería que necesite acercarse rápidamente al entorno Matlab para poder iniciar sus proyectos en el tratamiento de señales, en la mayor brevedad posible. 0

Transcript of Manual de Matlab

Page 1: Manual de Matlab

INTRODUCCIÓN

Matlab es una herramienta de software ideal para el tratamiento digital de señales. El nombre de Matlab tiene su origen a partir de MATrix LABoratory, ya que fundamenta toda su operación en el tratamiento de matrices y vectores. Es un lenguaje técnico de alto nivel, lo que permite desarrollar múltiples aplicaciones con comandos de fácil recordación. Además posee muchas de las funciones que se necesitan para la creación y el procesamiento de señales. La capacidad de representación gráfica de Matlab permite visualizar los resultados de cualquier operación, facilitando la comprensión de las diversas funciones realizadas. Matlab puede expandirse mediante la inclusión de funciones para aplicaciones particulares como Redes Neuronales, Procesamiento de Imágenes, Comunicaciones, entre otros. Estos conjuntos de funciones especializadas se conocen como toolboxes. Este manual-guía pretende familiarizar al estudiante de Ingeniería que necesite acercarse rápidamente al entorno Matlab para poder iniciar sus proyectos en el tratamiento de señales, en la mayor brevedad posible.

0

Page 2: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 2222

INTERFAZ DE MATLAB

Gráfica Gráfica Gráfica Gráfica 1111. . . . Ventana de comandos de Matlab

La interfaz inicial de Matlab es una línea de comandos, al estilo MS-DOS, terminales en Unix o la misma pila de una calculadora científica. A través de esta interfaz el usuario ejecuta la mayoría de comandos, observa resultados de operaciones, genera variables y, en general, verifica el estado del sistema.

Esta ventana cuenta con los botones

convencionales de la mayoría de programas Windows: Nuevo..., Abrir..., Cortar...,

Copiar..., Pegar..., y Deshacer.... Adicional a estos botones, la ventana cuenta con un botón para observar las variables que se van almacenando a medida que se trabaja (botón de Workspace Browser), otro para visualizar la

ruta en el disco duro o en la red en donde se encuentran instaladas las toolboxes (botón de Path Browser) y uno para ejecutar una

aplicación de simulación de sistemas conocida como Simulink. Finalmente, no se puede obviar el siempre necesitado botón de Ayuda.

A medida que se van introduciendo comandos

en la ventana de Matlab, estos se van almacenando en una pila, como sucede con las calculadoras HP48/49 o las Texas Instruments. El mantener esta pila de comandos permite al usuario recordar el trabajo realizado anteriormente y copiar y pegar funciones previamente realizadas. De manera equivalente, las funciones previamente realizadas pueden ser llamadas con las flechas arriba y abajo del teclado.

Al iniciar Matlab, aparece la licencia del

software. Una licencia educativa permite instalar dos toolboxes, mientras que la licencia completa permite instalar cuantas toolboxes desee el usuario.

1

Page 3: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 3333

Adicional a la ventana de comandos de Matlab, se encuentra el Editor/Debugger. El Editor de Matlab se utiliza para crear programas, depurarlos y ejecutarlos. La programación en Matlab será tema de un capítulo posterior.

Al abrir la ventana de ayuda, aparecen los

diferentes tópicos con los que se puede trabajar en Matlab. Comandos de propósito general, funciones con matrices, funciones de archivo, entre otros. Haciendo doble click en alguno de estos tópicos se accede al conjunto de funciones que hacen parte de este tópico, en la cual el usuario puede escoger la que le resulte útil. Al estar visualizando la ayuda de un comando particular, se enciende el menú See Also. Este menú da sugerencias de otros comandos relacionados directa o indirectamente con el comando que esté en pantalla.

Gráfica Gráfica Gráfica Gráfica 2222.... Editor de Matlab

Gráfica Gráfica Gráfica Gráfica 3333. . . . Ventana de Ayuda de Matlab

Gráfica Gráfica Gráfica Gráfica 4444.... Ayuda del comando Help de Matlab. Obsérvese que el programa sugiere otros comandos similares en el

menú See Also.

Page 4: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 4444

FUNDAMENTOS DE MATLAB

Gráfica Gráfica Gráfica Gráfica 5555. . . . Asignación básica de variables. Obsérvese que al utilizar ; el programa no hace eco de la variable asignada

Gráfica Gráfica Gráfica Gráfica 6666. . . . Operación básica con variables. En este ejemplo

se crea un número imaginario sumado dos variables previamente asignadas. Cabe anotar que para visualizar el

valor de la tercera variable var3, basta con poner su nombre en la línea de comandos

Operaciones BásicasOperaciones BásicasOperaciones BásicasOperaciones Básicas La unidad básica del MATLAB es el número de punto flotante. Estos números se pueden almacenar bien como escalares, vectores o matrices. Por ejemplo, si escribe:

»(45+7)/3 obtendrá la respuesta almacenada en la variable ans de la siguiente forma: ans = 17.3333 La variable ans es una variable global, estándar de Matlab. El programa la utiliza para guardar los resultados de operaciones directamente ejecutadas desde la línea de comandos. Matlab usualmente no trabaja con elementos simbólicos, pero sí es posible asignar a variables simbólicas números, vectores o matrices. Por ejemplo, si se escribe: »var1 = 6; Se habrá almacenado en la variable var1, y entonces se podrá ver su contenido escribiendo su nombre en la línea de comandos. Note que poner el símbolo ; al final de la línea evita que Matlab haga "eco" de lo escrito. Si ahora se hace: »var2 = 7; »var3 = var1 + var2*j; se habrá almacenado en var3 el número complejo 6+7i. Para conocer el valor de una variable, se le llama por su nombre desde la línea de comandos. »var3

2

Page 5: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 5555

VectoresVectoresVectoresVectores El trabajo con vectores es esencial. Un vector bien puede representar el eje tiempo para un caso dado o la variable dependiente en otro. Los vectores se escriben de manera directa, con paréntesis cuadrados: »vector1 = [1 2 3 4 5 6 7]; »vector2 = [1; 2; 3; 4; 5]; El primero es un vector de 1x7, mientras que el segundo es de 5x1. Para cambiar el i-ésimo elemento de un vector, se escribe: »vector(3) = 100; Un procedimiento alterno para generar vectores es el siguiente: »tiempo = (0:0.5:10); el cual genera un vector que comienza en 0, termina en 10 y se incrementa de 0.5 en 0.5. Esto es, se escribe entre paréntesis circulares el valor inicial, dos puntos, el incremento, dos puntos y finalmente el valor final. Para saber la longitud del vector, se utiliza el comando length. La mayoría de operaciones entre vectores funciona. Si desea hacer multiplicación o exponenciación, se escribe: »x.*y; Esto hace que el i-ésimo elemento de x sea multiplicado con el i-ésimo elemento de y. NOTA: Ambos vectores deben tener la misma longitud. Una vez tenido un vector se puede crear una variable que dependa de éste, por ejemplo: »y = sin(2*pi*tiempo); Donde pi es el conocido 3.14159268... MatricesMatricesMatricesMatrices Las matrices se escriben de manera similar que los vectores. Por ejemplo para hacer una matriz de 2x3 se escribe:

Gráfica Gráfica Gráfica Gráfica 7777.... Creación de vectores en Matlab. Al utilizar ; entre cada componente, se crean filas adicionales. Sin utilizar ;

Matlab adiciona columnas

Gráfica Gráfica Gráfica Gráfica 8888.... Utilizar el comando length para obtener la longitud

de un vector. Este comando no da información sobre la distribución de los datos dentro del vector (por ejemplo 1x7 o 5x1). Cabe anotar que Matlab almacena el resultado de la función length en la variable ans a menos que se le asigne a

otra variable

Page 6: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 6666

Gráfica Gráfica Gráfica Gráfica 9999. . . . Creación de matrices en Matlab. Hay que recordar

el uso del ; para crear filas, mientras que para crear columnas, se dejan espacios entre componentes. Las

matrices pueden tener números imaginarios e inclusive variables creadas con anterioridad

Gráfica Gráfica Gráfica Gráfica 10101010.... Creación de una matriz e interpretación del

comando size. Este comando almacena en la variable ans un vector de 1x2, donde la primera columna indica cuántas filas tiene y la segunda cuántas columnas tiene. Es posible

asignar el resultado de size a otra variable

Gráfica Gráfica Gráfica Gráfica 11111111.... Uso de los comandos zeros y ones para generar

matrices rellenas de ceros y unos respectivamente

»matriz1 = [1 2 3; 4 5 6] lo cual da como resultado: matriz = 1 2 3 4 5 6 De manera similar a los vectores, se pueden ejecutar operaciones entre matrices. Así como para los vectores se utiliza el comando length, para las matrices se utiliza el comando size. Operar este comando sobre un vector dará la información sobre la distribución de los datos dentro del vector. Generación de Matrices y VectoresGeneración de Matrices y VectoresGeneración de Matrices y VectoresGeneración de Matrices y Vectores Es posible generar matrices y vectores con características particulares, como por ejemplo crear matrices rellenas de unos o de ceros. Para crear una matriz rellena de ceros, se utiliza el comando zeros, especificando entre paréntesis las filas y las columnas, o en su defecto, las dimensiones de la matriz separadas por comas. Por ejemplo, para crear una matriz de 3x6: »matriz2 = zeros(3,6); En el caso particular de generar una matriz rellena de unos, se utiliza el comando ones, con el mismo formato de parámetros de entrada que zeros. Por ejemplo, para crear una matriz de 8x2: »matriz3 = ones(2,8); En la mayoría de tratamiento de señales, la generación de matrices no sobrepasará las dos dimensiones, aunque en casos particulares como el tratamiento de imágenes, sí se sobrepase este valor. Se tiene, por ejemplo, que para generar una matriz cuadrada de 4 dimensiones rellena de unos, se utilice el comando ones de la siguiente forma: »matriz4 = ones(7,7,7,7); Al tener entonces una matriz de n-dimensiones, es posible conocer las dimensiones que la

Page 7: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 7777

conforman mediante el comando ndims. A este comando se le pasa como parámetro el nombre de la matriz. Por ejemplo para conocer el tamaño de la matriz creada anteriormente, se escribiría: »ndims(matriz4) lo cual arroja como resultado 4. Como sucede con otros comandos, si este valor no es asignado a una variable en particular, el resultado (que en este caso es 4) se almacenará en la variable ans. En muchos casos es necesario generar vectores linealmente o logarítmicamente espaciados. Un vector linealmente espaciado es aquel con un valor de inicio, uno de final y los puntos entre ellos equidistantemente (linealmente) espaciados. Análogamente, un vector logarítmicamente espaciado será aquel que tenga un inicio y un fin, con los puntos intermedios logarítmicamente espaciados. Para generar este par de vectores se utilizan los comandos linspace y logspace. El comando linspace recibe como parámetros los puntos de inicio y de fin. De manera predeterminada, genera un vector con 100 puntos linealmente espaciados entre los valores de inicio y fin. Por ejemplo si se quiere generar un vector que contenga los números enteros del 1 al 100, se escribe: »vector3 = linspace(1,100); A linspace se le puede agregar un parámetro adicional que establezca cuántos puntos se desean entre los valores de inicio y fin (no necesariamente 100). Por ejemplo si se escribe el siguiente comando: »vector4 = linspace(0,1,5); Este generará un vector que irá del 0 al 1 con 5 valores intermedios, como se muestra en la figura 13. Análogamente a linspace, logspace genera un vector que comienza en 10 elevado al valor de inicio y termina en 10 elevado al valor de fin, exceptuando si este valor es π. Para este caso particular, el vector generado irá hasta 3.141592....

GráfGráfGráfGráfica ica ica ica 12121212.... Creación de un vector linealmente espaciado del 1 al 100. Como linspace tiene de manera predeterminada generar 100 puntos entre los valores de inicio y fin, en este

ejemplo almacenará en la variable vector3 los números enteros del 1 al 100 de la forma 1x100 (una fila por 100

columnas)

Gráfica Gráfica Gráfica Gráfica 13131313.... Uso del comando linspace para generar un

vector de longitud cinco. Al agregar el tercer parámetro, el comando generará un vector con el número de puntos

intermedios especificado, que para este ejemplo es cinco

Page 8: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 8888

Gráfica Gráfica Gráfica Gráfica 14141414.... Uso de logspace para la creación de vectores

logarítmicamente espaciados. Para el primer ejemplo, vector5 es generado con 50 puntos (valor

predeterminado), mientras que para el segundo ejemplo, vector6, se agrega el parámetro que define cuántos puntos

intermedios se desean, para este caso, cuatro.

Gráfica Gráfica Gráfica Gráfica 15151515. . . . La definición del tiempo como variable discreta en Matlab depende de los puntos intermedios entre el inicio y el fin del dominio definido. En el primer caso, se observa que la definición da a lugar a 501 puntos, mientras que la

segunda da a lugar a 50001 puntos, por lo que una función defenida a partir del segundo caso tomará más tiempo en computarse que una a definida a partir del primer dominio. En muchos casos una definición tan exacta es inecesaria

pero sí logra hacer ineficientes algunas funciones

Así como linspace tenía de manera predeterminada generar un vector con 100 puntos, logspace genera un vector con 50 puntos distribuidos logarítmicamente. Por ejemplo, para generar un vector entre 101 y 102, se escribiría: »vector5 = logspace(1,2); logspace también soporta un cambio a los 50 puntos predeterminados, adicionándole el tercer parámetro. Para el caso de tener un vector de diez en diez, desde 10 (101) hasta 10000 (104), el comando tendría este formato: »vector6 = logspace(1,4,4); El Tiempo en MatlabEl Tiempo en MatlabEl Tiempo en MatlabEl Tiempo en Matlab Es importante recalcar que Matlab siempre trabajará en tiempo discreto. Más aún, un computador siempre trabaja en tiempo discreto. Este concepto debe ser entendido de manera muy clara antes de comenzar el trabajo con gráficas o archivos de sonido. Las señales, sin importar su origen serán discretas y lo que se realiza es utilizar un número adecuado de muestras para aproximar la señal a tiempo real. Esta aproximación será relativa a la frecuencia de la señal, por ejemplo, si se desea graficar sin(2πt), una aproximación más que suficiente sería: »t = 0:0.01:5; »y = sin(2*pi*t); Se pueden hacer dominios con más puntos: »t = 0:0.0001:5; »y = sin(2*pi*t); el inconveniente de dominios con un alto número de puntos es que se necesitará más tiempo para el procesamiento de dichos puntos, inclusive cuando la función es relativamente sencilla. Se debe recordar que Matlab calcula punto por punto el rango de una función a partir del dominio que la define.

Page 9: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 9999

GRÁFICAS CON MATLAB

Gráfica Gráfica Gráfica Gráfica 16161616.... Algunas capacidades gráficas de Matlab.

Trazado de imágenes en dos y tres dimensiones

Los gráficos en Matlab se pueden clasificar como:

• Gráficos en continuos • Gráficos discretos • Gráficos en barras (horizontal, vertical o

en 3D) • Gráficos en escalera

Para el trabajo con señales en tiempo continuo, el tipo de gráfico más conveniente es el gráfico continuo. Para el caso de señales en tiempo discreto, los gráficos discretos son los más apropiados. El uso de gráficos de barras es útil para aplicaciones estadísticas, mientras que los gráficos en escalera aplican generalmente a señales cuantificadas o señales digitales. Gráficas continuas en dos dimensionesGráficas continuas en dos dimensionesGráficas continuas en dos dimensionesGráficas continuas en dos dimensiones El trazado de gráficas de señales en tiempo continuo se realiza mediante la función plot( ). Esta función maneja varios parámetros que es importante observar: Primero, se debe definir una variable rango y una variable dominio. Por ejemplo, si se definie la función seno: »t = 0:0.01:5; »y = sin(2*pi*t); al hacer la gráfica mediante el comando: »plot(y); traza la función sin(2πt). Se debe hacer claridad que solamente se está graficando el rango de la señal, es decir, si se observa el dominio de esta función, se puede ver cómo esta termina en 500. Este valor corresponde a los 501 puntos definidos por el cálculo de la función seno sobre

3

Page 10: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 10101010

el vector de tiempo definido, mas no es la gráfica de la función seno contra tiempo. Al realizar esta observación se puede concluir que si en la función plot solamente se pasa como parámetro el rango de la función definida, Matlab tomará como domino de dicha función el número de puntos que la definen. Por ejemplo, la tabla de dominio versus rango de la función para los primeros siete valores será:

POSICIÓN DOMINIO t

RANGO y

0 0 0 1 0.01 0.0628 2 0.02 0.1253 3 0.03 0.1874 4 0.04 0.2487 5 0.05 0.3090 6 0.06 0.3681 : : :

En pantalla se observa una gráfica de la posición versus el rango y no del dominio versus el rango. Para evitar este inconveniente, se realiza: »plot(t,y); obteniéndose la verdadera gráfica de dominio versus rango (gráfica 18) Si se define una nueva función para compararla con la anterior: »y1 = sin(3*pi*t+2*pi/3); y se realiza su gráfica, »plot(t,y1); este nuevo gráfico sobreescribirá al anterior. Existe entonces una forma para que el segundo gráfico se trace sobre el que esté previamente graficado: antes de utilizar el comando plot, se utiliza el comando hold. Esta función tiene dos parámetros: on y off. Cuando se utiliza: »hold on; las gráficas que se encuentren antes se mantienen en pantalla, hasta que se cancele esta función con:

Gráfica Gráfica Gráfica Gráfica 17171717.... Trazado de la función sin(2πt) sin un dominio

definido. Obsérvese que el dominio que Matlab selecciona automáticamente es la posición correspondiente a cada

valor en el rango, por eso el punto final es el 500

Gráfica Gráfica Gráfica Gráfica 18181818.... Trazado de la función anterior con un dominio

definido. Obsérvese que en este caso cada valor rango corresponde con el que se haya definido como dominio, por

lo que la gráfica es correcta

Page 11: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 11111111

GráGráGráGráfica fica fica fica 19191919.... Dos imágenes simultáneas obtenidas mediante

el comando hold on. Si no se utilizase este comando, el efecto que se obtiene es que al ordenar a Matlab graficar la segunda función, esta borra lo que se haya trazado antes,

para posteriormente ser dibujada

Gráfica Gráfica Gráfica Gráfica 20202020. Trazado de sin(2πt) con color rojo y línea discontinua (línea punto), y la misma función, pero de color

negro, punteada y con marcas de asterisco en cada intersección de dominio con rango

»hold off;

una vez hecho esto, la siguiente gráfica que se realice con el comando plot, borrará las anteriores antes de trazarse. Se puede observar en la figura 19 las gráficas simultáneas de sin(2πt) y de sin(3πt+2π-3). Un problema con la superposición de imágenes es que Matlab utiliza el mismo color para cada función, por lo que con solamente dos funciones en pantalla, ya se presentan confusiones entre una y otra señal. Para esto, son útiles los: Parámetros de Plot La función plot maneja varios parámetros como colores, continuidad de las líneas y marcas especiales en los puntos evaluados en el dominio. Esta útlima característica apica porque a pesar de estar realizando una gráfica en tiempo continuo, en realidad es tiempo discreto, como se mencionó anteriormente, solamente que Matlab interpola entre dos puntos de datos. Los parámetros deben ir entre comillas sencillas y seguidos uno del otro. Los parámetros son los siguientes:

COLORES MARCAS EN EL PUNTO

DOMINIO-RANGO

CONTINUIDAD DE LA LÍNEA

y . Punto

- Continua

m o Círculos

: Punteada

c x Marcas de cruz x

-. Línea punto

r + Marcas de cruz +

- - Líneas consecutivas

g s Cuadrados

b * Asteriscos

w ^ > < v Triángulos (arriba, derecha, izquierda o abajo)

k d Rombos

Page 12: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 12121212

Se puede observar un gráfico de la misma función pero con diferentes parámetros en la figura 20: »plot(n,y,'r.-.'); y »stem(n,y,'k*:'); Gráficas discretas en dos dimensionesGráficas discretas en dos dimensionesGráficas discretas en dos dimensionesGráficas discretas en dos dimensiones Para el trabajo de señales en tiempo discreto, se cambia el comando plot por el comando stem. Este no realiza la interpolación entre puntos del dominio, sino que solamente marca aquellos que tengan una relación directa dominio-rango. Esta función también puede utilizar como único parámetro el rango de una función, pero ocurriría lo mismo que con plot: el gráfico se realizaría del rango y tomando como dominio las posiciones de cada valor. Es por eso que es conveniente utilizar tanto el dominio como el rango de una función al hacer una gráfica con stem. Sea la función: »n = 0:0.1:2; »y = n; si el gráfico se realiza con plot, el resultado es una línea recta, mientras que si se realiza con stem, se obtienen los puntos de manera discreta (figura 21): »stem(n,y); Si se agrega el parámetro 'filled' después del rango, los círculos de la gráfica aparecen rellenos: »stem(n,y,'filled'); La función stem recibe los mismos parámetros que plot. Un ejemplo se puede observar en la figura 22: »stem(n,y,'b^:','filled');

Gráfica Gráfica Gráfica Gráfica 21212121.... Trazado de una función con plot y con stem. Obsérvese que plot(n,y) realiza una interpolación entre los

puntos definidos en el dominio, mientras que stem(n,y) no la realiza

Gráfica Gráfica Gráfica Gráfica 22222222.... Gráfica discreta modificada para trazar las líneas en color negro (b), terminadas en triángulos hacia arriba (^) y punteada (:). Adicionalmente, cada triángulo se rellena con

la opción filled.

Page 13: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 13131313

Gráfica Gráfica Gráfica Gráfica 23232323.... Gráficos de barras verticales y horizontales

Gráfica Gráfica Gráfica Gráfica 24242424.... Diagrama en escalera para una función definida

a trozos o una señal cuantificada

Otros tipos de gráficos en dos dimensionesOtros tipos de gráficos en dos dimensionesOtros tipos de gráficos en dos dimensionesOtros tipos de gráficos en dos dimensiones Como se muestra en la figura 23, Matlab puede realizar: Gráficos de Barras Verticales, con el comando bar( ), y horizontales con el comando barh( ). El uso de ambos comandos debe tener, por conveniencia, la especificación el dominio y del rango de la función: »n = 0:1:10; »y = n; »bar(n,y); o también: »barh(n,y); Ambos comandos pueden recibir un tercer parámetro, que es el color, como se definió para plot y stem. Por ejemplo: »barh(n,y,'b'); Diagramas escalonados Es un tipo de gráfico que aplica para señales cuantificadas, como por ejemplo:

<<<<<<<<<<

=

65,454,143,232,121,0

)(

xxxxx

xf

la cual puede ser definida como: »y = [0 1 2 1 4 4]; para ser graficada mediante el comando stairs: »stairs(y); Igualmente, se debe recordar el uso de un dominio y un rango cuando sea necesario.

Page 14: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 14141414

Este comando soporta un tercer parámetro, que es el de definición de tipo de línea (continua, punteada, etc.) como se define para plot y stem. Trabajo con ventanasTrabajo con ventanasTrabajo con ventanasTrabajo con ventanas Ocurre con frecuencia que se desea tener en pantalla más de una ventana, cada una con un gráfico independiente. Para realizar esto, Matlab utiliza el comando figure. Las ventanas de gráficos son interpretadas por el programa como figuras, y cada una tiene asignado un número, para diferenciarlas de las demás. Si el comando se utiliza solo: »figure; Matlab abre una nueva ventana, cuyo número es el consecutivo de la anterior. Por ejemplo, si al iniciar una sesión en Matlab se escriben las órdenes: »n = 0:1:10; »y = n; »bar(n,y); y posteriormente se escribe: »figure; Matlab abre una nueva ventana para gráficos cuyo número será el 2, dado que el gráfico de barras quedará en la figura 1 (ejemplo en la figura 25). Es posible dar una numeración arbitraria a las ventanas que se abren para realizar las figuras, pasándole a figure el número con el cual se desea que la nueva ventana sea identificada: »figure(5); »figure(100); El efecto obtenido se puede visualizar en la gráfica 26. Una vez comprendido el concepto de ventanas, se pueden visualizar de manera independiente los efectos de los comandos plot, stem, bar y stairs sobre una misma función:

Gráfica Gráfica Gráfica Gráfica 25252525.... Apertura de una nueva ventana de gráficos con el comando figure. Obsérvese que el número que identifica

esta ventana es consecutivo del número de identificación de la ventana anterior, que para este caso son 1 y 2.

Gráfica Gráfica Gráfica Gráfica 26262626.... Apertura de ventanas de gráficos con diferente

numeración. Obsérvese que a pesar de haber cuatro ventanas de gráficos, se pueden numerar de manera

arbitraria: 1,2,5 y 100.

Page 15: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 15151515

Gráfica Gráfica Gráfica Gráfica 27272727.... Cuatro ventanas independientes mostrando los resultados de operar plot (ventana 1), stem (ventana 2), bar

(ventana 3) y stairs(ventana 4) sobre la misma función

El siguiente conjunto de comandos: »n = 0:1:10; »y = n; »plot(n,y); »figure; »stem(n,y); »figure; »bar(n,y); »figure; »stairs(n,y); Genera las cuatro ventanas que se observan en la gráfica 27. Varios gráficos en una misma ventanaVarios gráficos en una misma ventanaVarios gráficos en una misma ventanaVarios gráficos en una misma ventana En algunos casos es más conveniente tener dos o varios gráficos en una misma ventana, por ejemplo para diagramas de magnitud y fase de una señal. Para este caso, se utiliza el comando subplot. El objetivo con subplot es dividir la ventana activa en una matriz de mxn y sobre la i-ésima posición, realizar el gráfico. Previo al uso de subplot se debe utilizar figure, de tal forma que se abra una ventana, luego se divida y finalmente sí se grafique sobre ella con plot, stem, etc. Un ejemplo aclarará mejor este concepto: sea la función compleja cos(2πt) + i*sin(2πt), se desea graficar en la misma ventana el diagrama de magnitud (comando abs) y de fase (comando angle), y en otra ventana la parte real e imaginaria de la misma función. Primero, se define la función: »t = 0:0.01:5; »y = cos(2*pi*t)+i*sin(2*pi*t); a continuación, se abre la primera ventana: »figure; Sobre esta ventana se hace la matriz de subgráficos. Por ejemplo, de dos filas por una columna. Luego se define en cual subgráfico se desea trazar la función de magnitud:

Page 16: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 16161616

»subplot(2,1,1); y finalmente se da la orden de graficar: »plot(t,abs(y)); Este primer gráfico se observa en la figura 28. Posteriormente, para realizar el gráfico de fase, se utiliza nuevamente la orden subplot, pero esta vez, se define que sobre el segundo subgráfico se trazará la siguiente imagen: »subplot(2,1,2); obsérvese que se mantiene constante el número de filas y de columnas (2,1), mientras que el número de subgráfico sí se varía (de 1 a 2). Se da la orden de graficar la fase: »plot(t,angle(y)); Observándose el resultado en la figura 29. Ahora, para el trazado de la parte real (comando real) e imaginaria (comando imag) en otra ventana, la secuencia de comandos sería: »figure; »subplot(1,2,1); »plot(t,real(y)); »subplot(1,2,2); »plot(t,imag(y)); Obsérvese que en este caso, la ventana se divide en dos columnas por una fila, obteniéndose el resultado de la gráfica 30. El ejemplo final, sería realizar las cuatro gráficas (magnitud, fase, parte real y parte imaginaria) en una misma ventana:

Gráfica Gráfica Gráfica Gráfica 28282828.... Diagrama de magnitud de cos(2πt)+i*sin(2πt) en

la subgráfica 1 de la ventana

Gráfica Gráfica Gráfica Gráfica 29292929.... Gráfica de fase de cos(2πt)+i*sin(2πt) en la

subgráfica 2 de la ventana

Gráfica Gráfica Gráfica Gráfica 30303030.... Ventana número 2 con la parte real e imaginaria

de cos(2πt)+i*sin(2πt), cada una en una subgráfica con distribución de dos columnas por una fila

Filas Columnas Subgráfico

Page 17: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 11117777

Gráfica Gráfica Gráfica Gráfica 31313131.... Una ventana con de dos filas por dos columnas: en el subgráfico 1 se dibujó la magnitud; en el subgráfico 2 la fase; en el subgráfico 3, la parte real; y en el subgráfico 4,

la parte imaginaria

Gráfica Gráfica Gráfica Gráfica 32323232.... Gráfica de e2t. Obsérvese que se pierde

resolución en la parte final de la figura.

Gráfica Gráfica Gráfica Gráfica 33333333.... Mejora de los detalles de la función con la redefinición del rango de los ejes de la imagen con el

comando axis

»figure; »subplot(2,2,1); »plot(t,abs(y)); »subplot(2,2,2); »plot(t,angle(y)); »subplot(2,2,3); »plot(t,real(y)); »subplot(2,2,4); »plot(t,imag(y)); Para obtener la ventana de la gráfica 31. Manejo de Ejes en dos dimensionesManejo de Ejes en dos dimensionesManejo de Ejes en dos dimensionesManejo de Ejes en dos dimensiones Sea la función y=e2t, con t definida entre 0 y 10, la gráfica se puede observar en la figura 32: »t = 0:0.01:10; »y = exp(2*t); »plot(t,y); para este tipo de gráficas, en las que el rango posee magnitudes relativamente diferentes (valores muy pequeños al prinicipio y valores muy grandes al final), es conveniente realizar un manejo manual de los ejes de la función, tanto en x como en y. Para esto, se utiliza el comando axis. Este comando permite redefinir los ejes sobre los cuales se trazó la imagen mediante la introducción de un vector con los nuevos puntos de inicio y de fin en el dominio, y con los nuevos puntos de inicio y fin en el rango. Como es un vector, va entre paréntesis cuadrados [ ]. Para este ejemplo, si se desea solamente visualizar el rango entre 8 y 10 en el dominio, y entre 0 y 4.5x108 en el rango, se escribe: »axis([8 10 0 4.5E8]); y el resultado visual se observa en la figura 33. Adicionales en los Gráficos en 2DAdicionales en los Gráficos en 2DAdicionales en los Gráficos en 2DAdicionales en los Gráficos en 2D Una característica útil en los gráficos es el uso de una grilla. Esta generalmente se emplea cuando se desea tener un mejor detalle visual en un gráfico.

Page 18: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 18181818

Por defecto para cada figura, la grilla se mantiene apagada (no se visualiza). Para encenderla, una vez creado el gráfico, se escribe: »grid on; Si no se desea visualizar la grilla, se apaga, mediante: »grid off; Para dar una mejor presentación a un gráfico, se pueden utilizar los comandos title, xlabel y ylabel, para agregarle título a la figura, al eje del dominio y al eje del rango, respectivamente. Los títulos se agregan una vez creada la figura: »title('Función tangente'); »xlabel('Dominio de la función'); »ylabel('Rango de la función'); Una vez realizada la figura y el gráfico respectivo, es posible hacer acercamientos (o zoom) a la imagen, mediante el comando zoom.. Este comando opera de manera similar a grid, mediante los parámetros on y off. Cuando se utiliza: »zoom on; se activa el acercamiento para la figura activa. Su uso es sencillo, solamente basta con poner el cursor sobre el punto en el que se desea hacer el acercamiento y hacer click con el botón izquierdo del mouse. Otra forma de hacer un acercamiento, es creando un recuadro sobre el área que se desea acercar, haciendo click con el botón izquierdo del mouse, y, sin soltarlo, se mueve hasta crear dicho recuadro. Una vez terminada la operación, el zoom se apaga con: »zoom off; Cuando el acercamiento queda mal hecho, se puede volver al punto inicial con: »zoom out;

Gráfica Gráfica Gráfica Gráfica 34343434.... Diagrama de la función tan(x) con la grilla activa

mediante grid on

Gráfica Gráfica Gráfica Gráfica 35353535.... Figura con títulos

Título de la figura con la función title Título del rango con

la función ylabel

Título del dominio con la función xlabel

Page 19: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 19191919

PROGRAMACIÓN EN MATLAB

Matlab incorpora la mayoría de sus funciones en los archivos propios del programa, pero otras, son implementadas a partir de las anteriores y se almacenan en archivos con extensión .m Estos archivos .m se pueden clasificar en dos tipos: scripts y funciones: Los scripts son secuencias de órdenes que generalmente son utilizadas en la línea de comandos, como por ejemplo: »figure; »subplot(2,2,1); »plot(t,abs(y)); »grid on; »subplot(2,2,2); »plot(t,angle(y)); »grid on; »subplot(2,2,3); »plot(t,real(y)); »grid on; »subplot(2,2,4); »plot(t,imag(y)); »grid on; Obviamente es bastante engorroso repetir una y otra vez los mismos comandos cada vez que se cambia alguno de los valores de x o de y. Para esto, se crea un script, se almacena en el computador y luego simplemente se llama desde la línea de comandos. Por ejemplo, si la lista de comandos anteriormente mencionada se almacena en un archivo llamado miscript, para ejecutarlo, se escribiría: »miscript; La contraparte de los scripts son las funciones. Estas se caracterizan, además de tener comandos internos, por recibir unos parámetros de entrada y generar unas salidas. Por ejemplo, se puede tener una función que devuelva xy, para cualquier valor de x y de y: »respuesta = potencia(x,y);

4

Page 20: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 20202020

Como se puede observar, en una función, los parámetros de entrada van separados por comas y la asignación de la(s) salida(s) se realiza mediante el signo =. Matlab incorpora un editor, en el cual se agregan los comandos y/o las funciones que conforman el nuevo archivo. Este editor almacena los archivos de Matlab, aunque con el tiempo, el lector se dará cuenta que estos son de tipo plaintext o de texto plano, es decir, también se pueden hacer en un editor como el Bloc de Notas de Windows o el Editor de MS-DOS. La ventaja que tiene el editor, es que maneja colores para diferenciar los comandos de las funciones y de los comentarios del programa. Adicionalmente, permite correr un programa paso por paso o en modo continuo. Para ejecutar el Editor de Matlab, se entra al menú FFFFile ile ile ile ----> > > > NNNNew ew ew ew ----> M> M> M> M----ffffileileileile o simplemente se hace click en el botón de Nuevo. ScriptsScriptsScriptsScripts Para realizar un script, simplemente se escribe la serie de comandos que se desea ejecutar en Matlab. Por ejemplo, si se tiene la variable t y la variable y del ejemplo de subgráficos (pag. 15), las cuales son cambiadas por el usuario, pero que siempre se desean graficar con la misma secuencia de comandos, se abre el Editor de Matlab y se escribe en la ventana dicha secuencia (figura 37). Posteriormente, se graba con un click en el botón de GuardarGuardarGuardarGuardar o mediante FFFFile ile ile ile ----> > > > SSSSaveaveaveave. El archivo no se puede guardar en cualquier sitio del disco duro, debe encontrarse dentro de algún directorio válido para Matlab, por ejemplo, el directorio \\\\binbinbinbin\\\\ o dentro del directorio \\\\toolboxestoolboxestoolboxestoolboxes\\\\generalgeneralgeneralgeneral\\\\ Finalmente, se ejecuta llamándolo desde la línea de comandos, con el nombre con el cual fue grabado (sin la extensión): »miscript;

Gráfica Gráfica Gráfica Gráfica 36363636.... Pantalla del Editor de Matlab (el asistente es de Office, no confundir !!)

Gráfica Gráfica Gráfica Gráfica 37373737.... Varios comandos consecutivos forman un script

Gráfica Gráfica Gráfica Gráfica 38383838.... Grabación de un script de Matlab. En este

ejemplo, el script se llama miscript.m y se ubicó dentro del directorio \bin\

Page 21: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 21212121

Gráfica Gráfica Gráfica Gráfica 39393939.... Una función se define por tener entradas y

salidas. En esta gráfica, la función tiene tres entradas y una salida

Gráfica Gráfica Gráfica Gráfica 40404040. . . . Llamado desde la línea de comandos de la

función definida en la gráfica 39

FuncionesFuncionesFuncionesFunciones Una función generalmente lee uno o varios parámetros de entrada y, generalmente, da una o varias respuestas. Se menciona generalmente, porque no siempre se da el caso en el que hayan entradas o en el que hayan salidas. A diferencia de los scripts, que comienzan directamente con los comandos a ejecutar, una función siempre se encabeza con la estructura:

function [o1, o2, ... on] = nombre(i1, i2, ... im) donde la palabra function debe ir antecediendo a las salidas (o1, o2, ... on), las cuales van entre paréntesis cuadrados, e igualadas (mediante =) al nombre de la función (debe ser el mismo nombre con el cual se llamará el archivo guardado) y las entradas de la función (i1, i2, ... im), entre paréntesis circulares y como las entradas, separadas por comas. No necesariamente m = n, lo que indica que no necesariamente el número de entradas debe ser igual al número de salidas. En la gráfica 39 se puede visualizar una función que grafica en pantalla la señal seno, de acuerdo a los parámetros ingresados (amplitud, frecuencia en Hz y fase); además devuelve la frecuencia en rad/s. El procedimiento para realizarla es el siguiente: Primero, se define el encabezado estándar de las funciones. El archivo se va a llamar sinplot, por lo que este nombre se utiliza en la definición. Además, van las entradas y la salida:

function [a] = sinplot(A,f,phase) Los encabezados de definición de funciones no llevan ; Posteriormente, se define la secuencia de comandos: figure; x = 0:0.05:10; a = 2*pi*f; y = A*sin(2*pi*f*x); plot(x,y); Primero, se crea una figura independiente con figure. Luego se define el dominio de la señal

Page 22: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 22222222

(x = 0:0.05:10). La variable de retorno, a, se asigna directamente. Posteriormente se crea el vector de rango y, y finalmente se grafica. Cabe anotar que estos comandos sí llevan ; al final de cada línea, para evitar el eco en la línea de comandos. Finalmente, para ejecutar la función, se llama desde la línea de comandos de Matlab. El resultado de la frecuencia en rad/s se asigna a una variable llamada frecuencia: »frecuencia = sinplot(2, 1, 0) Este comando, ejecuta la función sinplot para el trazado de una señal sinusoidal de amplitud 2, frecuencia 1 Hz y 0 rad de fase. En la variable frecuencia queda asignado el cálculo de 2*π*1, es decir, 6.2832 rad/s. Comandos de Matlab parComandos de Matlab parComandos de Matlab parComandos de Matlab para Control de Flujo de a Control de Flujo de a Control de Flujo de a Control de Flujo de programasprogramasprogramasprogramas Matlab incluye comandos internos similares a los que se encuentran en los lenguajes de programación de alto nivel, como condicionales, ciclos, entre otros. Se denominan de control de flujo de programas porque determinan la forma en que se ejecuta una secuencia, si se ejecuta un algoritmo u otro, si se solicita una entrada de usuario, etc. Estos comandos pueden ser utilizados tanto en funciones como en scripts. Se presentan a continuación los comandos más usados en la programación de Matlab: IF... ELSEIF... ELSE... END If es el condicional por excelencia y posee la siguiente sintaxis: if expresión instrucciones y operaciones elseif expresión2 instrucciones y operaciones : else instrucciones y operaciones end

Page 23: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 23232323

Gráfica Gráfica Gráfica Gráfica 41414141.... Función para graficar la señal seno modificada

con el uso de un condicional if

La expresión if es el inicio del condicional y siempre debe usarse. Cuando se hacen varias comparaciones con respecto a la misma variable, se utilizan los elseif, aunque no son necesarios. Adicionalmente, si la condición no se cumple para el if y/o para los elseif (dependiendo si se utilizan o no), se puede utilizar el else. Un esquema condicional con if siempre se debe terminar con un end. Modificando la función que grafica la señal seno, se puede tener que si el usuario ingresa una frecuencia negativa, el programa genere un error o que de lo contrario, realice la gráfica: if f<=0 error('La frecuencia es...');

indica que si la variable f (de frecuencia) es menor o igual a cero, genere un aviso de error mediante error, para que se informe al usuario y se salga del if. De lo contrario, else

figure; x = 0:0.05:10; a = 2*pi*f; y = A*sin(2*pi*f*x); plot(x,y);

ejecuta la secuencia de graficado end finalmente, se cierra el if. Los operadores de comparación para determinar si una expresión en verdadera o no, son los siguientes:

COMPARADOR DESCRIPCIÓN == Igual a... < Menor que.. > Mayor que...

<= Menor o igual a... >= Mayor o igual a... ~= Diferente de...

Es posible tener dentro de un condicional if varias comparaciones, conectadas mediante operadores lógicos. Por ejemplo, si se modifica nuevamente la función de trazado de la señal

Page 24: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 24242424

seno, se puede hacer que solamente reciba valores de fase reales. Esto se realiza agregando la línea:

elseif f>0&phase~=0 error('La fase no es real');

como se observa en la gráfica 42. Aquí el conector lógico utilizado es & el cual opera como una AND, es decir, que ambas expresiones se deben cumplir para que se entre a la función de error. Los conectores lógicos son:

CONECTOR DESCRIPCIÓN & Y lógico | O lógico

Adicionalmente se puede negar una expresión, antecediendo

~ Negación FOR... END La instrucción for se utiliza para generar ciclos finitos. Igual que el if, se debe terminar con un end. La sintaxis es la siguiente: for variable = expresión instrucciones y operaciones end El uso de los ciclos for dentro de Matlab debe restringirse a operaciones que no vengan integradas con el programa, ya que una función que lo contenga, se hace ineficiente en términos de tiempo de ejecución, si se utilizan muchos ciclos for. Por ejemplo, se puede calcular la suma de los componentes de un vector mediante el siguiente ciclo: X = [1 1 1 1 1 1]; a = 0; for i=1:length(X) a = a + X(i); end pero resulta más eficiente:

Gráfica Gráfica Gráfica Gráfica 42424242.... Uso del condicional & dentro de la función para

generar señales seno, que verifica que la frecuencia sea positiva y que la fase sea real

Page 25: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 25252525

Gráfica Gráfica Gráfica Gráfica 43434343.... Script para calcular la suma de los componentes de un vector definido mediante un ciclo for. Este ejemplo es a modo didáctico, ya que Matlab trae interno un comando

para realizar esta función

a = sum(X); La función sum suma los componentes de un vector, solo que al estar implementada dentro del programa de Matlab, se ejecuta de manera más eficiente que el ciclo for previamente mostrado. La expresión del ciclo i=1:length(X) indica que el contador i va a iniciar en 1 y termina cuando llegue a la longitud del vector X. Los incrementos se hacen de uno en uno. Para cambiar el incremento, por ejemplo de dos en dos, se especifica un tercer parámetro, entre la especificación de inicio y de fin del ciclo:

for i=1:2:length(X) De manera equivalente, si lo que se desea es que el contador descienda de uno en uno, el parámetro de incremento se pone negativo; por ejemplo, para recorrer el vector desde el final hasta el inicio:

for i=length(X):-1:1 SWITCH... CASE... OTHERWISE... END El operador switch se utiliza para tomar una variable de como referencia y compararla con cada valor presentado en cada case. Si ningún case contiene un valor igual al de la variable referenciada en switch, ejecuta la secuencia dentro del otherwise (opcional). Se cierra con un end. La sintaxis es la siguiente: switch variable case valor1 instrucciones y operaciones case valor2 instrucciones y operaciones : otherwise instrucciones y operaciones end Para comprender mejor este comando, el siguiente ejemplo consiste en un script que grafique la parte real o imaginaria de una función, dependiendo del estado de una variable definida en la línea de comandos.

Page 26: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 26262626

Sea a la variable donde se almacena un valor r si se desea graficar la parte real o una i si se desea grafica la parte imaginaria de una función. Van entre comillas sencillas porque son caracteres, no variables. »a = 'r'; Ahora bien, si se llama al script que aparece en la gráfica 44: switch a toma como variable de referencia a a. Es decir, va a tomar el valor contenido allí y buscará en cada case uno que sea igual.

case 'r' plot(x,real(y));

en este caso, si la variable a contiene una r, grafica la parte real de la función definida para y.

case 'i' plot(x,imag(y));

si la variable a no contiene una r sino una i, grafica la parte imaginaria de la función definida para y. otherwise error('Ingrese un parámetro);

finalmente, si a no contiene ni una r ni una i, genera un error. Un ejemplo de la aplicación sería así: »x = 0:0.05:10; »y = exp(i*2*pi*x); »a = 'i'; »miscript; este ejemplo se puede visualizar en la gráfica 45.

Gráfica Gráfica Gráfica Gráfica 44444444.... Script que utiliza un switch.. case.. para graficar la parte real o imaginaria de cualquier función definida en la

línea de comandos

Gráfica Gráfica Gráfica Gráfica 45454545.... Aplicación del script creado en la gráfica 44. Como en este caso la variable a contiene el carácter i, el

script grafica la parte imaginaria de la exponencial definida para la variable y en la línea de comandos

Page 27: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 27272727

Gráfica Gráfica Gráfica Gráfica 46464646.... Generación de números aleatorios. Si el número

generado es menor que 50 se vuelve a generar otro y así sucesivamente hasta obtener uno mayor de 50

GráGráGráGráfica fica fica fica 47474747.... Ejemplo de break. Un conteo desde 1 hasta

1000000000 toma más de diez minutos en Matlab, pero debido a la condición if, que establece que si el contador

llega a 5 se ejecute la instrucción break, el conteo se detiene en menos de un par de segundos

WHILE... END... La instrucción while se utiliza para crear ciclos que se mantienen en ejecución hasta que una condición lógica se cumpla. La sintaxis es: while expresión instrucciones y comandos end La expresión lógica es de la misma forma que se utiliza en el condicional if. En el siguiente ejemplo (gráfica 46), se generan números aleatorios hasta 100. Si el número obtenido es menor que 50, se vuelve a generar otro, hasta que aparezca un número mayor de 50 y, cuando esto se cumple, se sale del ciclo: i = 0; inicializa la variable en donde se va a almacenar el número aleatorio. Esta variable se inicializa con un número menor de 50 para que la condición del while se cumpla al menos una vez while i < 50 siempre y cuando se cumpla que la variable i es menor de 50, ejecuta la siguiente instrucción i = 100*rand; asigna a la variable i un número aleatorio. La función rand genera números aleatorios entre 0 y 1, por lo que al multiplicar por 100 se obtienen números entre 0 y 100 end cierra el ciclo y lo repite hasta que se cumpla la condición. BREAK Esta instrucción se utiliza para romper ciclos frente a una condición determinada. En el ejemplo de la figura 47, se crea un ciclo for que cuenta desde 1 hasta 1000000000, lo cual toma mucho tiempo; pero si en medio del ciclo va: if i == 10 break; end

Page 28: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 28282828

el resultado que se obtiene es que a pesar de que el conteo vaya hasta 1000000000, este se detendrá cuando vaya en 10 a causa del if con la instrucción break. INPUT Esta instrucción solicita una entrada desde el teclado. La asignación de dicha entrada se hace a una variable, de acuerdo a la siguiente sintaxis: variable = input('texto de entrada'); Por ejemplo, a = input('Cuántos gatos hay? '); presenta el efecto de la gráfica 48. En este caso, si se ingresa un número, la variable queda como variable numérica, es decir, si el usuario teclea un 5 y presiona la tecla [Enter], al hacer: »a + 10 se obtiene ans = 15 ya que, generalmente, 5 + 10 da 15. Ahora bien, si a input se agrega el parámetro 's': a = input('Cuántos gatos hay? ','s'); lo que se obtiene es que la variable de asignación (en este caso a) sea tomada como una variable de caracteres y no de forma numérica, es decir, si el usuario ingresa un 5, se almacena este 5 como carácter, mas no como número, por lo que si el usuario hace: »a + 10 se obtiene ans = 63 ya que el código ASCII del carácter 5 es el número 53, por lo que si se le agrega 10, se obtiene 63.

Gráfica Gráfica Gráfica Gráfica 48484848.... Uso del comando input

Gráfica Gráfica Gráfica Gráfica 49494949.... Utilizando el parámetro 's' en el comando input, se tratan los números como caracteres, por lo que al hacer a + 10, se obtiene 63, ya que el código ASCII del carácter 5

es 53

Page 29: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 29292929

GráfiGráfiGráfiGráfica ca ca ca 50505050.... Menú gráfico con el comando menú

MENU Esta instrucción abre en pantalla una ventana con un menú de botones, del cual se puede seleccionar una opción. El índice del botón presionado se almacena en la variable de asignación. El uso de menu es así: variable = menu('título', 'opción1',

'opción2', ... 'n-opción'); Por ejemplo (gráfica 50), con la siguiente línea: a = menu('Seleccione un animal',

'Gato', 'Perro', 'Pájaro'); aparece un menú en pantalla. Si el usuario presiona el botón 'Gato', en la variable a se almacenará el índice del botón, es decir un 1. Algo similar sucedería si se presiona el botón 'Pájaro', solamente que en la variable a se almacena el número 3. Otros comandos útilesOtros comandos útilesOtros comandos útilesOtros comandos útiles Manejo de la Eficiencia A medida que se desarrollan funciones en Matlab, en ciertas aplicaciones es necesaria una alta eficiencia, como por ejemplo en aplicaciones en tiempo real. Para medir el tiempo de ejecución de una o varias funciones, se utilizan los comandos tic y toc. tic inicializa el contador de tiempo, por lo que los comandos subsiguientes serán tenidos en cuenta para el conteo de tiempo de ejecución. toc detiene el contador de tiempo y devuelve el tiempo contado en segundos. Por ejemplo: »tic; for i=1:1000000 end; toc; devuelve: elapsed_time = 2.1900 esto indica que el solo ciclo for, que cuenta desde 1 hasta 1000000 toma 2.19 segundos.

Page 30: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 30303030

Limpieza de pantalla, variables y figuras Cuando aparece mucha información en la ventana de comandos, esta se puede limpiar mediante el comando clc. Se utiliza: »clc; Ahora bien, este comando se confunde con alguna frecuencia con clear. Este comando se utiliza para limpiar las variables de la memoria de Matlab. Si se introduce solo: »clear; elimina todas las variables. Si se utiliza acompañado del nombre de alguna variable: »clear a; elimina de la memoria esa variable en particular, pero no las demás. Finalmente, para limpiar una figura, se utiliza comando clf: »clf; este comando limpia lo que se haya trazado en la figura actual, mas no cierra la ventana. Cálculo de las raíces de un polinomio Sea un polinomio de la forma:

AN*XN + AN-1*XN-1 + ... + A1*X + A0 es posible calcular sus raíces mediante el comando roots, de la siguiente forma:

roots([AN AN-1 ... A1 A0]) Por ejemplo, para calcular las raíces de x2+2x+1, se introduce: »roots([1 2 1]) devuelve: ans = -1 -1 que corresponden a:

Page 31: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 31313131

x2+2x+1 = (x+1)(x+1) es decir, que x = -1 y x = -1. Variables en memoria A medida que se utilizan variables, estas se van almacenando en memoria. Generalmente cuando se utilizan muchas variables, el usuario va olvidando sus nombres. Para observar las variables que se encuentran en memoria, se utiliza el comando who: »who Matlab reporta los nombres de las variables que se encuentran en memoria. Al utilizar el comando whos, se visualizan los nombres de las variables de una manera más detallada. Por ejemplo, si se tiene una variable a con un número (por ejemplo 6) y una variable b con los caracteres gato, Matlab reportaría: »whos Name Size Bytes Class a 1x1 8 double array b 1x4 8 char array Grand total is 5 elements using 16 bytes

Este reporte indica que cada variable ocupa 8 bytes en memoria; la variable a es de tamaño 1x1, porque tiene un número, mientras que la variable b tiene un tamaño de 1x4, ya que es solo una cadena de caracteres, que en este caso son cuatro; la clase de a es double, es decir, almacena números, mientras que b es de clase char, porque almacena caracteres.

Page 32: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 32323232

SONIDO EN MATLAB

En Matlab es posible leer archivos de sonido para tratarlos digitalmente y poder realizar diversos tipos de análisis sobre ellos Los formatos de tipos de sonido soportados por Matlab son wav de Windows y au de Sun Microsystems. Generalidades de los sonidosGeneralidades de los sonidosGeneralidades de los sonidosGeneralidades de los sonidos Un sonido típico se compone de los siguientes parámetros:

• Datos de amplitud • Frecuencia de muestreo • Bits de muestra

Los datos de amplitud conforman la información del sonido en tiempo, es decir, el nivel de volumen con el que fue almacenado o las variaciones del mismo. El sonido, tal como existe en el mundo real, es una onda cuya amplitud se caracteriza por infinitos puntos. Para poder leer digitalmente un sonido se debe tener en cuenta que un computador no puede manejar tal cantidad de información, por lo que es necesario tomar muestras de la onda cada tiempo. Si el tiempo con el que se toman las muestras de la señal de sonido se invierte, se obtiene la frecuencia de muestreo. Generalmente se manejan frecuencias de muestreo estándar: 8000, 11025, 22050 y 44100 Hz, las cuales se asocian a la calidad con que se oye el sonido a través de algunos medios: Teléfono, Radio, Cassette y Compact Disc respectivamente. Una vez se tienen las muestras cada cierto tiempo de la señal de onda, las amplitudes deben ser representadas de manera digital. Como los computadores manejan la información mediante bits (0's y 1's), los bits de muestra definen con cuántos bits se representarán los valores de amplitud obtenidos después de tomar

5

Page 33: Manual de Matlab

GuíGuíGuíGuía de Matlaba de Matlaba de Matlaba de Matlab – Juan Ignacio Bueno G. / Pontificia Universidad Javeriana 33333333

las muestras. Por supuesto, mientras más bits de muestra se tengan, mejor va a ser la resolución de los valores de amplitud que se han tomado. Generalmente se utilizan estándares: 8, 16, 32 y 64 bits. Con 8 bits, por ejemplo, es posible manejar hasta 256 diferentes niveles de amplitud (28 = 256), con 16 hasta 65536 niveles de amplitud, y así sucesivamente. Archivos de sonidoArchivos de sonidoArchivos de sonidoArchivos de sonido Una vez se conocen los conceptos de sonido, los archivos de sonido se leen mediante los comandos wavread y auread, utilizando la siguiente sintaxis: [y, fs, bits] = wavread('Archivo.wav');

o

[y, fs, bits] = auread('Archivo.au'); Los parámetros asignados son:

• y: Variable donde se almacenan los valores de amplitud del sonido

• fs: Frecuencia con la cual se tomaron las muestras del sonido

• bits: Bits de muestra para representar las amplitudes

Por ejemplo, »[a,b,c] = wavread('gato.wav'); Si se observa el contenido de la variable a, se podrá observar que, dependiendo de la longitud del archivo, será la variable más grande. La variable b contendrá un solo valor numérico, al igual que la variable c. La ejecución de un sonido se realiza con el comando sound: »sound(y, fs, bits); Cuyos parámetros corresponden a los descritos para wavread y auread.