introduccin a matlab -...

34
DEPARTAMENTO DE TEORÍA DE LA SEÑAL Y COMUNICACIONES LABORATORIO DE ANÁLISIS Y SÍNTESIS DE REDES PRÁCTICA 0: INTRODUCCIÓN A MATLAB ®

Upload: buituyen

Post on 19-Oct-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

DEPARTAMENTO DE TEORÍA DE LA SEÑAL Y COMUNICACIONES

LABORATORIO

DE

ANÁLISIS Y SÍNTESIS DE REDES

PRÁCTICA 0: INTRODUCCIÓN A MATLAB®

ÍNDICE

1. Introducción.................................................................................................. 1

1.1 ¿Qué es MATLAB?.............................................................................. 1

1.2 La ayuda de MATLAB. El comando help............................................ 2

2. Entorno de desarrollo. .................................................................................. 3

2.1 Iniciando y cerrando MATLAB. .......................................................... 3

2.2 El escritorio de MATLAB.................................................................... 3

2.2.1 Herramientas del escritorio............................................................... 3

2.2.2 Otras características del entorno de desarrollo. ................................ 3

3. Trabajo con matrices. ................................................................................... 4

3.1 Creación de una matriz. ........................................................................ 4

3.2 El espacio de trabajo............................................................................. 5

3.3 Manejo de matrices............................................................................... 6

3.3.1 Utilización de subíndices.................................................................. 6

3.3.2 El operador ‘:’................................................................................... 7

3.4 Números y expresiones......................................................................... 9

3.4.1 Variables........................................................................................... 9

3.4.2 Números ........................................................................................... 9

3.4.3 Infinito y “NaN”. .............................................................................. 9

3.4.4 Operadores........................................................................................ 9

3.4.5 Formatos de salida. ......................................................................... 10

3.5 Operaciones con matrices................................................................... 11

3.5.1 Operaciones matriciales.................................................................. 11

3.5.2 Funciones matriciales. .................................................................... 13

3.5.3 Operaciones en array. ..................................................................... 14

3.5.4 Ejemplos de expresiones y operaciones ......................................... 17

4. Gráficos. ..................................................................................................... 21

4.1 Gráficos básicos.................................................................................. 21

4.2 Edición de dibujos. ............................................................................. 25

4.3 Imágenes............................................................................................. 25

5. Programación en MATLAB ....................................................................... 27

5.1 Control de flujo................................................................................... 27

5.2 Scripts (Procedimientos) y funciones. ................................................ 28

5.2.1 Procedimientos. .............................................................................. 28

5.2.2 Funciones........................................................................................ 29

Introducción a MATLAB® 1

1. Introducción. El presente documento pretende dar una visión general de las posibilidades que

ofrece el entorno de trabajo MATLAB 6.1-Release 12.1. Se recomienda consultar la ayuda del entorno tantas veces como sea preciso. El dominio de la herramienta sólo puede conseguirse mediante el desarrollo de programas, cada vez de mayor entidad, como los propuestos a lo largo del cuatrimestre. Vamos a hacer un repaso general de los conceptos fundamentales insistiendo en la necesidad de que cada uno profundice en cada tema en función de sus conocimientos previos y necesidades particulares.

1.1 ¿Qué es MATLAB? MATLAB es un paquete de software interactivo altamente especializado para

realizar cálculos científicos y de ingeniería. Integra análisis numérico, cálculo matricial, procesado de señales y herramientas gráficas en un medio de fácil uso, donde los problemas y las soluciones se expresan del mismo modo que se plantean matemáticamente.

El elemento básico de trabajo es la matriz, que no requiere dimensionamiento previo ni ningún tipo de definición. La sencillez de este planteamiento facilita la resolución de problemas que en otros entornos de trabajo resultan más complejos. La sencillez con la que se manejan las matrices en este entorno hace que sea especialmente útil en tareas de procesado de señal.

Aunque el hecho de trabajar con matrices puede parecer un inconveniente, esta filosofía permite resolver muchos problemas numéricos de un modo mucho más rápido que la ejecución de un programa en un lenguaje tal como Fortran, Pascal o C. A continuación se muestra un ejemplo sencillo que pone de manifiesto la afirmación anterior. Escribamos un programa que calcule el seno de cuatro ángulos expresados en radianes: 1, 2, 3 y 4 rad.

MATLAB FORTRAN RAD = [1 2 3 4] SENO = sin(RAD)

REAL RAD(4), SENO(4) DO 100 I = 1,4 SENO(I) = SIN(RAD(I)) 100 CONTINUE WRITE(6,’(4F10.4)’) SENO

En MATLAB basta con crear un vector, RAD, que contenga los ángulos considerados mediante la asignación:

RAD = [1 2 3 4]

y utilizar la función sin( ) que evalúa el seno de cada uno de los elementos de la matriz introducida como parámetro ( en este caso el vector RAD). El resultado se almacena en la variable SENO, que es un vector de las mismas dimensiones que RAD y cuyos elementos son los senos calculados. El resultado se verá automáticamente en la ventana de comandos.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 2

MATLAB ofrece, además, una amplia variedad de funciones agrupadas en toolboxes que facilitan el trabajo en cualquier campo científico. En este laboratorio usaremos uno de esos toolboxes, el conocido como “Signal Processing toolbox”, que engloba, entre otras, varias funciones de diseño y uso de filtros.

Además, debido a su enorme difusión en el ámbito universitario, se pueden encontrar aplicaciones desarrolladas en este entorno de trabajo que podremos adaptar a nuestra necesidades.

1.2 La ayuda de MATLAB. El comando help. El entorno de MATLAB dispone de abundante documentación y ayuda on-line,

que le prestará toda la información disponible relacionada con cada comando o función.

La ayuda básica de MATLAB se obtiene mediante el comando help. Este comando proporciona información sobre múltiples temas relacionados con MATLAB. Si escribimos help obtendremos una lista en la que aparecen nombres de directorios con una descripción del tipo de funciones que engloba cada uno de ellos.

Para obtener información sobre uno de estos temas o funciones concretas, debemos emplear help seguido del nombre del tema que nos interesa. Por ejemplo, aquí vemos cómo obtener información sobre la función sqrt( ) (raíz cuadrada).

>> help sqrt

SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also SQRTM. Overloaded methods help sym/sqrt.m

Cuando no se conoce el nombre de las funciones de las que dispone MATLAB en relación con un tema en concreto, puede emplearse el comando lookfor. Por ejemplo, lookfor poly (de “polynomial”, polinomio) devuelve una lista de todas las funciones que tratan con polinomios ( muestra las funciones que tienen alguna palabra que empieza por poly en la primera línea de comentario).

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 3

2. Entorno de desarrollo. Este segundo punto no es más que una breve introducción a MATLAB que

permite conocer como iniciar y cerrar una sesión de MATLAB así como empezar a descubrir las herramientas y funciones más importantes de la herramienta.

2.1 Iniciando y cerrando MATLAB. Para arrancar MATLAB bajo un entorno Windows, basta con localizar el icono

de MATLAB dentro del submenú Programas del menú Inicio, o hacer doble click en un icono de acceso directo a la aplicación. Para cerrar la aplicación, basta con teclear el comando quit o exit desde la línea de comandos o buscar la opción EXIT MATLAB en el menú FILE.

2.2 El escritorio de MATLAB. Una vez iniciado el programa aparece el escritorio de MATLAB, cuya

apariencia puede modificarse abriendo y cerrando las distintas herramientas. En la opción VIEW podrá seleccionar las ventanas que desee tener abiertas.

2.2.1 Herramientas del escritorio.

• Ventana de comandos: sirve para ejecutar comandos e invocar funciones y ficheros *.m

• Histórico de comandos: recoge las últimas instrucciones.

• Launch Pad: proporciona acceso a herramientas, demos y documentación.

• Help Browser: facilita la búsqueda de documentación.

• Current Directory Browser: permite seleccionar el directorio actual en el que están las funciones que pueden invocarse en cada momento.

• Worksapace Browser: en el que se almacenan las variables empleadas en una sesión.

• Editor/Debugger: para crear y depurar ficheros .m y funciones.

2.2.2 Otras características del entorno de desarrollo. Existe además la posibilidad de importar/exportar variables del workspace de/a

otras aplicaciones.

Del mismo modo, existen herramientas para depurar (debugger) las prestaciones de los ficheros de MATLAB.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 4

3. Trabajo con matrices. Ya se ha comentado que el elemento básico de MATLAB es la matriz, siendo

los vectores y los escalares casos particulares de matrices. A continuación se va a mostrar los resultados de realizar operaciones básicas con matrices desde la línea de comandos de la aplicación.

Una instrucción comienza junto al prompt de MATLAB ‘>>’ y termina cuando se pulsa ‘Enter’. Si no quiere visualizar el resultado de una instrucción, termínela en punto y coma. Los comentarios a una instrucción se añaden a continuación, detrás del símbolo ‘%’.

3.1 Creación de una matriz. Para crear matrices en MATLAB se introducen los elementos de las filas

separados por espacios o comas y cada fila se separa de las anteriores mediante punto y coma o retorno de carro. Todo esto se cierra mediante el uso de corchetes.

>> A=[16,3 2,13; 5 10 11 8; 9 6 7 12; 4,15 14 1] % Definición de una matriz.

A =

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

La matriz A permanece en memoria y estará disponible en el espacio de trabajo hasta que se borre o modifique explícitamente. Por tanto, podemos seguir realizando operaciones sobre ella.

En MATLAB, además, existen funciones que devuelven como resultado matrices. Por ejemplo, la función zeros( ) genera una matriz con todos sus elementos iguales a cero. Las dimensiones de la matriz son las especificadas como argumentos. Así podemos crear una matriz nula, CEROS, de una fila y tres columnas con la asignación:

>> CEROS = zeros(1,3)

CEROS =

0 0 0

Para finalizar, debemos comentar que se pueden construir matrices grandes usando otras más pequeñas. Por ejemplo, podríamos añadir otra fila a nuestra matriz A con

>> r = [45 50 55 25];

>> A = [A;r]

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 5

A =

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 45 50 55 25

o bien, añadirle otra columna. En este caso r' es la traspuesta de r.

>> r=[r, 15], A = [A, r’]

A =

16 3 2 13 45 5 10 11 8 50 9 6 7 12 55 4 15 14 1 25 45 50 55 25 15

3.2 El espacio de trabajo. Podemos ver las variables que hemos creado en cada momento y acceder a ellas

o guardarlas par futuras sesiones. Todas las variables que estemos utilizando o hemos utilizado forman parte de lo que llamamos entorno de trabajo.

Para conocer las variables del entorno que hemos creado podemos utilizar alguno de los siguientes comandos.

>> who % Lista las variables en uso

>> A=123; % Definimos una nueva variable

>> who

Your variables are:

A

>> whos % Listado de variables con información complementaria

Name Size Bytes Class

A 1x1 8 double array

Grand total is 1 elements using 8 bytes

Podemos borrar variables del entorno mediante el uso del comando ‘clear’.

>> clear % Borra todas las variables en uso ¡¡¡ CUIDADO!!!

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 6

>> B= A % Creamos la variable B

>> clear B % Borramos la variable B.

Para guardar y recuperar datos, emplee las funciones save y load que trabajan con fichero *.mat.

>> save guardar % Creación de un fichero

>> clear % Borramos variables

>> who % Comprobamos que no hay variables.

>> load guardar % Recuperamos los datos del fichero.

>> who % Comprobamos la recuperación

Your variables are:

A

Para evitar que se represente por pantalla el resultado de la evaluación de una expresión, hay que terminar ésta en ;

>> A=magic(100) % Salida indeseada por pantalla

>> A=magic(100); % Evitamos dicha salida

Si un sentencia no cabe en una línea, podemos emplear los tres puntos ... seguidos de ENTER para indicar que la sentencia continúa en la línea siguiente.

Emplee las flechas ⇑ y ⇓ para recuperar y moverse por las líneas editadas anteriormente desde la línea de comandos.

3.3 Manejo de matrices. MATLAB permite manejar de una forma muy sencilla los elementos de las

matrices sobre las que trabaja, usando la típica notación (nº de fila, nº de columna). En el presente apartado vamos a ver cómo se puede utilizar esta notación y prestaremos especial atención al operador “:”, que permite referenciar de una forma rápida cualquier grupo de elementos de una matriz, así como crear vectores de una manera muy sencilla.

3.3.1 Utilización de subíndices.

Podemos acceder a un elemento de una matriz utilizando la siguiente notación:

nombre_matriz(nº de fila,nº de columna)

Si estamos trabajando con la matriz A, obtendremos el tercer elemento de la primera fila mediante la expresión:

>> A=[16,3 2,13; 5 10 11 8; 9 6 7 12; 4,15 14 1] % Definición de la matriz A. Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 7

A =

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

>> elemento=A(1,3) % Acceso a un elemento

elemento =

2

Trabajando con vectores, basta con especificar el número de la fila o de la columna según se trate de un vector columna o fila, respectivamente. Si se considera el vector X=[1 3 5 7], la expresión Y = X(3) asignará a la variable Y el valor 5.

3.3.2 El operador ‘:’.

Este operador permite generar vectores de un modo muy sencillo. La declaración X = 1:8 crea un vector X cuyos elementos son los números enteros comprendidos entre el 1 y el 8 (ambos inclusive), es decir:

>> X = 1:8

X =

1 2 3 4 5 6 7 8

La expresión X = 1:2:8, crea un vector con los números comprendidos entre 1 y 8 en pasos de 2.

>> X = 1:2:8

X =

1 3 5 7

El incremento puede ser cualquier número (no necesariamente un entero positivo) como se indica en los siguientes ejemplos:

>> X = 1:0.2:2

X =

1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

>> X = 8:-1:1

X =

8 7 6 5 4 3 2 1 Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 8

Si utilizamos los dos puntos para elaborar subíndices, podremos extraer fácilmente cualquier conjunto de elementos de una matriz dada. Vamos a ver unos ejemplos de extracción de submatrices:

• La expresión B = A(1,1:3), permite obtener la matriz formada por los elementos de A de la primera fila que están en las tres primeras columnas.

B =

16 3 2

• De forma análoga, B = A(1:2,2) toma los elementos de las dos primeras filas que ocupan la segunda columna.

B =

3 10

• El operador ‘:’ por sí solo hace referencia a “todas las filas” o a “todas las columnas” de la matriz. B = A(: ,2) asigna a B la segunda columna de A.

B =

3 10 6 15

• Una asignación como B = A(:), dispondrá todos los elementos de A como un vector columna.

B =

16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 9

3.4 Números y expresiones.

3.4.1 Variables MATLAB no precisa la definición previa de una variable, queda definida en el

momento que se declara.

>> nueva_variable=45 % Definición de una nueva variable

nueva_variable = 45

3.4.2 Números MATLAB soporta notación tradicional y científica. La parte imaginaria de los

números complejos viene precedida de la letra i o j que representa la unidad imaginaria.

Algunos ejemplos de números:

3.0000 + 7.0000i

1.2000e+013

-125

3.4.3 Infinito y “NaN”. La división por cero no conduce a una condición de error o al término de la

ejecución, sino que produce un mensaje de advertencia (“Warning”) y un valor especial (infinito) que puede comportarse de formas muy distintas a lo largo de la ejecución. Por ejemplo

>> s=1/0 Warning: Divide by zero.

s =

Inf

El valor NaN ("Not a Number") aparece como resultado de expresiones indefinidas como Inf/Inf ó 0/0. MATLAB propaga los resultados NaN a lo largo de un cálculo hasta el final. Es decir, si se emplea un NaN en una operación intermedia de la que dependa el resultado final, éste será NaN.

3.4.4 Operadores

Las expresiones matemáticas se construyen usando los operadores aritméticos y normas de prioridad usuales, sin olvidar que se trata de operaciones matriciales (los operandos siempre son matrices).

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 10

+ Suma

- Resta

* Multiplicación

/ División por la derecha

\ División por la izquierda

^ Potencia

Como puede observarse en la tabla anterior, hay dos signos de división (por la derecha y por la izquierda). Todas estas operaciones se describirán más detalladamente en un apartado posterior.

3.4.5 Formatos de salida. En lo que se refiere al formato en que si pueden presenta los datos, se muestran a

continuación algunas posibilidades.

>> format short

>> x=[4/3 1.2345e-6]

x =

1.3333 0.0000

>> format short e

x =

1.3333e+000 1.2345e-006

>> format short g

x =

1.3333 1.2345e-006

>> format long

x =

1.33333333333333 0.00000123450000

>> format long e

x =

1.333333333333333e+000 1.234500000000000e-006

>> format long g

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 11

x =

1.33333333333333 1.2345e-006

>> format bank

x =

1.33 0.00

>> format rat

x =

4/3 1/810045

>> format hex

x =

3ff5555555555555 3eb4b6231abfd271

3.5 Operaciones con matrices Es posible trabajar con las matrices de dos formas diferentes:

• Considerando cada matriz como una entidad matemática sobre la que se aplica el álgebra matricial.

• Bien, tratándola como un conjunto de elementos sobre cada uno de los cuales se aplican las operaciones y las funciones de forma independiente.

MATLAB distingue claramente las operaciones y las funciones que operan sobre la matriz como entidad, de las actúan sobre cada uno de sus elementos. Llamaremos a las primeras operaciones y funciones matriciales y a las segundas operaciones y funciones en array.

3.5.1 Operaciones matriciales.

• Matriz traspuesta.

El apóstrofe (’) es el operador que emplea MATLAB para calcular la matriz traspuesta de una dada. Al hacer la traspuesta se cambian las filas por columnas y viceversa.

>> A = [ 2 4 6 8 10;5 10 15 10 5 ]

>> B = A’

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 12

B =

2 5 4 10 6 15 8 10 10 5

Se ha de tener un cuidado especial cuando se trabaja con matrices complejas, porque en estos casos el operador ’ devuelve la traspuesta de la matriz conjugada.

• Suma y resta.

Dadas dos matrices A y B de iguales dimensiones:

A = [ 2 4 6 8 10; 5 10 15 10 5 ] B = [ 3 5 7 9 11; 2 3 4 5 6]

>>C = A+B % Se obtiene su matriz suma, C

C =

5 9 13 17 21 7 13 19 15 11

De forma análoga, D = A-B calculará la matriz diferencia.

Si uno de los operandos es un escalar, éste se sumará o restará a cada uno de los elementos del otro operando. Por ejemplo:

>> D = A + 3

D =

5 7 9 11 13 8 13 18 13 8

• Multiplicación.

Esta operación está definida siempre que el número de columnas del primer operando sea igual al número de filas del segundo. Si reconsideramos las matrices A y B del punto anterior:

>> C =A * B’

C =

250 140 315 180

En el caso de que uno de los operandos sea un escalar, se multiplicará cada uno de los elementos de la matriz por el escalar.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 13

• División.

Como ya se indicó anteriormente, hay dos operaciones de división: por la derecha (“/”) y por la izquierda (“\”). En ambos casos la operación es equivalente a la resolución de un sistema de ecuaciones:

o X = A \ B ⇔ A * X = B donde X es la matriz de las incógnitas y A es la de coeficientes.

o Y = A / B ⇔ Y * B = A. Ahora B es la matriz de los coeficientes y multiplica por la derecha a las incógnitas, Y.

• Potenciación.

La potenciación ( “^”) sólo está definida cuando uno de los operadores es un escalar, p, y el otro es una matriz cuadrada, A. Según la sintaxis y el valor de p, la operación tiene diferentes significados, de los cuales, el más utilizado en las cuestiones prácticas de interés es el siguiente: “Dada una matriz cuadrada, A, y un entero p = 3 ( p > 1), la expresión A^p equivale a A*A*A”. Por ejemplo:

>> A = [ 2 4; 6 8 ], A^p

ans =

296 432 648 944

3.5.2 Funciones matriciales.

• Funciones elementales.

poly(A): Calcula el polinomio característico de la matriz A.

det(A): Determinante de A (debe ser una matriz cuadrada).

trace(A): Traza de A (suma de los elementos de la diagonal).

size(A): Dimensiones de la matriz A.

length(A): Longitud del vector A.

• Funciones orientadas a columna.

A continuación se listan una serie de funciones que se caracterizan por actuar sobre los elementos de un vector o sobre cada una de las columnas de una matriz:

sum(A): Si A es un vector, calcula la suma de todos los elementos de A y si es una matriz devuelve un vector cuyos elementos son la suma de cada una de las columnas de A.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 14

mean(A):Calcula la media de los elementos del vector A o de las columnas de la matriz A.

max(A): Si A es un vector busca el valor máximo de sus elementos y si A es una matriz, el resultado será un vector con los valores máximos de cada columna de A.

min(A): Funciona de forma análoga a max() pero obtiene los valores mínimos

• Generación de matrices.

Hay un conjunto de funciones capaces de generar diferentes tipos de matrices dadas unas dimensiones. Algunas de ellas son:

zeros( ): Matriz nula.

ones( ): Matriz con todos sus elementos igual a 1.

rand( ): Matriz con valores aleatorios distribuidos con una función densidad de probabilidad uniforme.

randn( ): Matriz con valores aleatorios distribuidos con una función densidad de probabilidad gaussiana.

El argumento de estas funciones debe indicar las dimensiones de la matriz deseada, por ejemplo: (nº de filas, nº de columnas).

Para obtener más información acerca de cualquiera de estas funciones, puede emplearse el comando help seguido por el nombre de la función seleccionada.

3.5.3 Operaciones en array. Dada la filosofía de este tipo de operaciones, es necesario que las matrices

involucradas tengan las mismas dimensiones (de este modo se aplicará la operación a cada una de las parejas formadas por los elementos que ocupan las mismas posiciones en cada matriz). Si uno de los operandos es un escalar, se considerará que es una matriz de las mismas dimensiones que el otro operando y cuyos elementos son todos iguales al escalar.

• Operaciones elementales.

Las operaciones matriciales vistas anteriormente se convierten en operaciones en array anteponiendo un punto al operador correspondiente. En el caso de la suma y la resta no es necesario porque son operaciones que siempre actúan elemento a elemento. Pero sí se obtienen resultados distintos con la multiplicación (“.*”) , la división (“./ y .\”) y la potenciación (“.^”). Por ejemplo, si

A = [ 2 4 6 8 10; 5 10 15 10 5 ] y B = [ 3 5 7 9 11; 2 3 4 5 6 ]

el resultado de aplicar las operaciones anteriores es:

>> C = A.*B

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 15

C =

6 20 42 72 110 10 30 60 50 30

>> C = A./ B

C =

0.6667 0.8000 0.8571 0.8889 0.9091 2.5000 3.3333 3.7500 2.0000 0.8333

>> C = A.^5

C =

32 1024 7776 32768 100000 3125 100000 759375 100000 3125

• Operaciones y funciones de relación.

Hay seis operadores de relación que permiten comparar elemento a elemento dos matrices de iguales dimensiones. El resultado es una matriz de unos y ceros, donde el uno representa TRUE (verdadero) y el cero FALSE (falso). Las operaciones disponibles se muestran en la tabla siguiente:

Operadores de relación

< menor que

<= menor o igual que

> mayor que

>= mayor o igual que

== igual que

∼= no es igual que

El operador “∼ ” se obtiene tecleando el número 126 mientras se mantiene pulsada la tecla “Alt”.

Si A = [ 2 4 6 8 10; 5 10 15 10 5 ], la expresión B = (A ==10) asignará a B una matriz que tendrá unos en las posiciones donde A tiene el valor 10 y ceros en el resto. Es decir:

B =

0 0 0 0 1 0 1 0 1 0

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 16

Ligada estos operadores aparece la función ‘find’ que encuentra los elementos no nulos de una matriz y que permite detectar si se combina con un operador lógico los elementos de una matriz que cumplen una determinada condición.

• Funciones matemáticas.

A continuación, mostramos una lista de las funciones matemáticas más usuales (todas ellas operan sobre las matrices elemento a elemento):

• sqrt( ): Raíz cuadrada.

• exp( ): Función exponencial de base e.

• log( ): Logaritmo neperiano.

• log10( ): Logaritmo en base 10.

• abs( ): Módulo o valor absoluto.

• angle( ): Fase.

• real( ): Parte real.

• imag( ): Parte imaginaria.

• conj( ): Complejo conjugado.

• rem( ): Resto de la división elemento a elemento de las matrices que recibe como parámetro.

• fix( ): Parte entera (redondea hacia el entero más próximo a 0).

Funciones trigonométricas:

• sin( ): Función seno. La inversa es asin( ).

• cos( ): Función coseno. La inversa es acos( ).

• tan( ): Función tangente. La inversa es atan( ).

• sinh( ): Función seno hiperbólico. La inversa es asinh( ).

• cosh( ): Función coseno hiperbólico. La inversa es acosh( ).

• tanh( ): Función tangente hiperbólica. La inversa es atanh( ).

Hay que prestar un cuidado especial cuando se trabaja con ángulos, porque MATLAB los expresa en radianes.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 17

3.5.4 Ejemplos de expresiones y operaciones

Veamos algunos ejemplos de expresiones:

>> cos(acos(45))

>> sqrt(2^4)

>> (log(log10(1000)+1))

Veamos un ejemplo de concatenación de matrices:

>> A=ones(3,3)

A =

1 1 1 1 1 1 1 1 1

>> B=[A A+10; A+20 A-1]

B =

1 1 1 11 11 11 1 1 1 11 11 11 1 1 1 11 11 11 21 21 21 0 0 0 21 21 21 0 0 0 21 21 21 0 0 0

>> B(2,:)=[] % Elimina la segunda fila

B =

1 1 1 11 11 11 1 1 1 11 11 11 21 21 21 0 0 0 21 21 21 0 0 0 21 21 21 0 0 0

Realicemos algunas operaciones con matrices:

>> A=magic(4) % Definimos una matriza mágica 4x4

A =

16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 18

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

>> sum(A) % Suma de las columnas

ans =

34 34 34 34

>> A' % Trasponer una matriz

ans =

16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

>> diag(A) % Obtención de la diagonal de la matriz

ans =

16 10 7 1

>> sum(diag(A)) % suma de los elementos de la diagonal

ans =

34

>> A(4,5)=17 % Cambiar o añadir un elemento

A =

16 3 2 13 0 5 10 11 8 0 9 6 7 12 0 4 15 14 1 17

Observe que al acceder a un elemento no existente, se crea una nueva columna para que pueda ser asignado.

Sugerencia: ¿Cómo eliminaría esa nueva columna creada?

>> A=A(:,1:4) % Solución a la sugerencia anterior

A =

16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1

Introducción a MATLAB® 19

>> B=A+A' % Generamos una matriz simétrica

B =

32 7 12 17 7 22 17 22 12 17 12 27 17 22 27 2

>> C=A*A' % Producto de matrices

C =

438 236 332 150 236 310 278 332 332 278 310 236 150 332 236 438

>> d=det(A) % Cálculo del determinante (la matriz es singular).d = 0

>> Z=inv(A) % Cálculo de la inversa (la matriz es singular)

Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.306145e-017.

Z =

1.0e+014 *

0.9382 2.8147 -2.8147 -0.9382 2.8147 8.4442 -8.4442 -2.8147 -2.8147 -8.4442 8.4442 2.8147 -0.9382 -2.8147 2.8147 0.9382

Cuando se quiere trabajar con vectores, se deben emplear los operadores adecuados. Consulte el manual para obtener la lista de estos operadores. Veamos algunos ejemplos:

>> A=magic(2) % Matriz 2x2

A =

1 3 4 2

>> B=A.*A % Producto elemento a elemento de dos matrices

B =

1 9 16 4

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 20

>> n=(0:9)' % Definición de en vector columna

n =

0 1 2 3 4 5 6 7 8 9

>> potencias=[n n.^2 2.^n] % Empleo de la columna para definir una matriz

potencias =

0 0 1 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32 6 36 64 7 49 128 8 64 256 9 81 512

>> A=magic(4) >> k=find(isprime(A))' % Empleo de la función find para buscar los índices de

% los valores que son primos

k =

2 5 6 7 9 13

>> A(k) % Verificación de que esos valores corresponden a números primos

ans =

5 2 11 7 3 13

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 21

4. Gráficos.

4.1 Gráficos básicos. Veamos algunos ejemplos de la capacidad de MATLAB de realizar

representaciones gráficas.

>> t=0:pi/100:2*pi; % Definimos el eje de tiempos como un vector de % 200 puntos entre 0 y 6.28.

>> y=sin(t); % Calculamos el seno.

>> plot(t,y); % Representación del seno frente al tiempo.

La siguiente figura muestra el resultado de ejecutar la última instrucción.

Para representar varias señales a la vez, puede realizar el siguiente conjunto de instrucciones:

>> y2=sin(t-0.25);

>> y3=sin(t-0.5);

>> plot(t,y,t,y2,t,y3);

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 22

Consulte la ayuda para conocer los distintos colores, tipos de línea, etc... que puede emplear.

El comando figure sirve para crear una nueva figura o para invocar figuras ya existentes.

El comando hold on permite realizar un nuevo gráfico sobre otro ya existente sin que se abra una nueva figura. Si es preciso, se reescalan los ejes. El comando hold off desactiva la opción anterior, evitando que un nuevo gráfico se superponga a uno ya existente

Veamos como subdividir la pantalla (en un ejemplo que emplea gráficos en tres dimensiones):

>> t=0:pi/10:2*pi; % Definición del eje de tiempos

>> [X,Y,Z]=cylinder(4*cos(t));

>> subplot(2,2,1), mesh(X); % Dibujo en el primer cuadrante

>> subplot(2,2,2), mesh(Y);

>> subplot(2,2,3), mesh(Z);

>> subplot(2,2,4), mesh(X,Y,Z);

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 23

Veamos ahora como mejorar la apariencia de una gráfica;

>> clf; % Borra la figura anterior

>> t=-pi:pi/100:pi; % Eje temporal

>> y=sin(t); % Señal a representar (sinusoide)

>> plot(t,y); % Dibujo

>> axis([-pi pi -1 1]); % Ejes

>> xlabel('-\pi \leq {\itt} \leq \pi'); % Etiquetado del eje horizontal

>> ylabel('sen(t)'); % Etiquetado del eje vertical

>> title('Gráfica de la función seno'); % Nombre del gráfico

>> text(1/3,-1/3,'\it{comprobar la simetría impar}'); % Comentario

Observe el aspecto de la figura creada:

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 24

MATLAB encuentra los valores máximos de los valores a representar y escala los ejes de acuerdo a esos valores. El comando axis([xmin xmax ymin ymax]) permite especificar al usuario los valores de los ejes. Este comando axis, también admite una serie de parámetros que se recomienda consultar en la ayuda, como axis square, equal, on, offf,...

El comando grid on activa una rejilla en el dibujo, mientras que el comando grid off desactiva esa opción.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 25

4.2 Edición de dibujos. Cuando aparece una figura como la anterior, podemos emplear las opciones que

aparecen en los menús desplegables de la parte superior y las herramientas de la barra de tareas para editar el dibujo, añadir texto, flechas,....

Se puede emplear el editor de propiedades que se encuentra en el menú EDIT de una figura para cambiar las propiedades de los distintos elementos de una figura.

4.3 Imágenes. Las matrices pueden verse como imágenes en las que cada elemento contiene las

características de brillo o color del elemento. Veamos como representar una matriz que contenga una imagen.

>> load durer % cargamos un grabado de Durero

>> whos % variables que hemos cargado

Name Size Bytes Class

X 648x509 2638656 double array

caption 2x28 112 char array

map 128x3 3072 double array

Grand total is 330272 elements using 2641840 bytes

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 26

>> image(X) % estas tres instrucciones sirven para representar la imagen

>> colormap(map)

>> axis image

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 27

5. Programación en MATLAB

5.1 Control de flujo. a) Sentencia if.

Condición común a todos los lenguajes de programación:

>> A=2;

>> if A= =3, m=3, elseif A= =2 m=2, end; % Empleo de la condición.

m = 2

b) Sentencias switch y case.

Empleadas para una condición múltiple

switch A

case 2 m=2

case 3 m=3

case 4 m=4

end

c) Sentencia for.

Para ejecutar bucles un número predeterminado de veces:

for indice=valor_inicial:incremento:valor_final

conjunto de instrucciones a realizar

end

>> b=0, for a=0:4, b=b+a, end

b = 0 b = 1 b = 3 b = 6 b = 10

d) Sentencia while.

Para ejecutar bucles con condición de salida

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 28

>> a=0;

>> b=4;

>> while (a<=b) a=a+1, end % Bucle while

a = 1 a = 2 a = 3 a = 4 a = 5

e) Sentencia break

Permite salir anticipadamente de la ejecución de un bucle.

5.2 Scripts (Procedimientos) y funciones. Hasta ahora hemos trabajado en modo comando. Es decir, hemos escrito

sentencias en la ventana de comandos y al pulsar la tecla INTRO, éstas se han ejecutado y nos han devuelto un resultado. Pero es posible agrupar las instrucciones en ficheros de texto ASCII con extensión “*.m” (llamados ficheros.m). Cuando invoquemos un fichero.m desde la ventana de comandos o desde otro fichero.m, MATLAB ejecutará todas las sentencias en modo secuencial. A continuación, describiremos dos tipos de ficheros.m: los procedimientos y las funciones.

5.2.1 Procedimientos. Los procedimientos son simplemente secuencias de sentencias que operan sobre

el área de trabajo. Por tanto, todas las variables que emplean son globales y quedarán disponibles en el espacio de trabajo al finalizar la ejecución.

Para crear un procedimiento nuevo seleccione FILE en el menú principal. Seleccione ahora la opción NEW y finalmente seleccione M-FILE. Aparece ahora el editor de MATLAB. Escriba a continuación una serie de instrucciones, por ejemplo:

n=0:pi/100:2*pi; s=sin(n); plot(n,s);

Guarde estas líneas con el nombre que quiera y la extensión .m (por ejemplo, script1.m). A continuación desde la línea de comandos de MATLAB invoque a la función:

>> script1

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 29

El resultado será el del conjunto de instrucciones de MATLAB contenidas en el fichero script1.m, en este caso, la figura anterior.

Si utilizamos el comando who podremos comprobar como todas las variables utilizadas en el procedimiento permanecen en el entorno de trabajo.

>> who

Your variables are:

n s

Es posible pasar parámetros a un procedimiento mediante la función input( ). Una expresión como

n = input(‘Introduzca el número de muestras: ’)

muestra en pantalla la cadena de caracteres pasada como parámetro y espera a que el usuario introduzca por teclado un valor y pulse la tecla INTRO. Este valor será el que se asignará a la variable n.

5.2.2 Funciones Las características de una función en MATLAB son las siguientes:

• En la primera línea se deben declarar el nombre de la función y los argumentos de entrada y salida según esta sintaxis:

function [arg_sal1,...,arg_saln ] = nombre_función(arg_ent1,...,arg_entm)

donde: Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 30

arg_sali es el nombre del i-ésimo argumento de salida,

arg_enti es el nombre del i-ésimo argumento de entrada.

• Los parámetros se pasan por valor. Es decir, se copian a las variables locales arg_enti que se han declarado al principio del fichero.

• Todas las variables que se emplean en el cuerpo de la función son locales a la función. Por tanto, sólo existirán durante la ejecución. Si escribimos:

nombre_función(param_ent1,...,param_entm)

siendo param_enti el valor que se pasa como parámetro i-ésimo, no dispondremos de los resultados que se almacenaron en las variables declaradas como argumentos de salida. Para tener acceso a estos valores, debemos invocar la función del siguiente modo:

[param_sal1,...,param_salp ] = nombre_función(param_ent1,...,param_entm)

En este ejemplo sólo queremos obtener los valores de los primeros p argumentos de salida (p < n). Una vez finalizada la ejecución, las variables param_sali estarán disponibles en el espacio de trabajo y contendrán una copia de las variables locales arg_sali.

Para ilustrar el empleo de funciones, veamos el aspecto de la función mean.m que calcula la media de un vector o matriz:

>> type mean

function y = mean(x,dim) %MEAN Average or mean value. % For vectors, MEAN(X) is the mean value of the elements in X. For % matrices, MEAN(X) is a row vector containing the mean value of % each column. For N-D arrays, MEAN(X) is the mean value of the % elements along the first non-singleton dimension of X. % % MEAN(X,DIM) takes the mean along the dimension DIM of X. % % Example: If X = [0 1 2 % 3 4 5] % % then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1 % 4] % % See also MEDIAN, STD, MIN, MAX, COV. % Copyright 1984-2001 The MathWorks, Inc. % $Revision: 5.16 $ $Date: 2001/04/15 12:01:26 $ if nargin==1,

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

Introducción a MATLAB® 31

% Determine which dimension SUM will use dim = min(find(size(x)~=1)); if isempty(dim), dim = 1; end y = sum(x)/size(x,dim); else y = sum(x,dim)/size(x,dim); end

Observe atentamente la sintaxis de la definición de funciones en el entorno MATLAB y realice algún ejemplo similar. El modo de edición es el mismo que en el caso de ficheros script.

Análisis y Síntesis de Redes. Departamento de Teoría de la Señal y Comunicaciones

1. Introducción al MATLAB. Prácticas. 1

Operaciones con matrices. 1.- Genere el vector V cuyos elementos son los números comprendidos entre -5 y 5 en pasos de 0.01.

Obtenga el vector B resultado de invertir el orden de los elementos de V. 2.- Escriba una función llamada inverso.m que invierta el orden de los elementos de un vector o de cada una de las columnas de una matriz.

Aplique esta función a la matriz A = [1 3 4 7 ; 0 4 5 9] y compruebe el resultado con el obtenido con la función fliplr( ). 3.- Escriba una función llamada mediauno.m que reciba como parámetro una matriz y le añada una columna tal que la media de los elementos de cada fila sea la unidad. Compruebe el resultado con la función mean( ). 4.- Realice dos representaciones gráficas de la función y = gauss(x) con las siguientes características:

gauss x x( ) exp ( )=

− −⎛⎝⎜

⎞⎠⎟

12

52

2

π

− x = 0:0.001:10. − La primera gráfica aparecerá en la mitad superior y empleará escalas lineales en ambos

ejes. − La segunda se verá en la mitad inferior y empleará una escala logarítmica en el eje de

ordenadas. Nota: La constante π está predefinida en MATLAB y puede usarse como en el siguiente ejemplo: >> A=pi A= 3.1416 5.- Una señal discreta es aquella que sólo está definida para un conjunto discreto de valores de la variable independiente. La denotaremos como x[n], donde n es el número de muestra que sólo toma valores enteros. Para representar señales discretas con MATLAB, basta con definir un vector cuyos elementos sean los valores de la señal y representarlo con la función stem( ). Represente: a) La señal x[n] = n2 para 0 ≤ n ≤ 20. b) y[n] = 3*x[n]-2 para 0 ≤ n ≤ 20, donde x[n] es la obtenida en el apartado a). c) z[n]=(y[n]-4)^2, para 0 ≤ n ≤ 20, donde y[n] es la del apartado b). 6.- La cuestión que debemos plantearnos ahora es: ¿Cómo podemos representar señales de tiempo continuo?. A continuación se proponen una serie de ejercicios que nos ayudarán a responder a la pregunta anterior: a) Dado el vector x = 0:0.1:20, utilice la función plot( ) para representar el vector y = x.^2 en función de x. b) Repita el ejercicio anterior con x = 0:10:20. ¿Cuál es la aproximación usada?.

Departamento de Teoría de la Señal y Comunicaciones Universidad de Alcalá