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
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
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.
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
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
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
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
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.
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
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
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
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.
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.
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.
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:
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
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.
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
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
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\
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
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
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
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
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.
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
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
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
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.
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:
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.
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
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.