Manual de Matlab

131
Manual de programación de Matlab Paola Polanco Toledo Universidad Nacional Autónoma de México Facultad de Ingeniería Departamento de Ingeniería en Telecomunicaciones

Transcript of Manual de Matlab

Manual de programación de Matlab

Paola Polanco Toledo

Universidad Nacional Autónoma de México Facultad de Ingeniería

Departamento de Ingeniería en Telecomunicaciones

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 2 -

APUNTES DE MATLAB ÍNDICE 1. Introducción………………………………………………………………………………… 4 2. Inicializando Matlab……………………………………………………………………….

2.1. Toolbar Window……………………………………………………………………… 2.2. Command Window…………………………………………………………………… 2.3. Workspace…………………………………………………………………………….. 2.4. Command History…………………………………………………………………….

5 5 8 8 10

3. El comando HELP…………………………………………………………………………. 11 4. El espacio de trabajo de Matlab…………………………………………………………. 14 5. Matemática simple…………………………………………………………………………

5.1. Operadores aritméticos……………………………………………………………… 5.2. Operadores relacionales…………………………………………………………….. 5.3. Operadores lógicos…………………………………………………………………... 5.4. Funciones trigonométricas e hiperbólicas………………………………………... 5.5. Funciones varias……………………………………………………………………… 5.6. Despliegue de formatos numéricos………………………………………………… 5.7. Variables………………………………………………………………………………. 5.8. Números complejos…………………………………………………………………... 5.9. Ejemplos………………………………………………………………………………...

16 16 17 18 19 19 23 26 28 29

6. Operaciones con matrices y vectores…………………………………………………… 6.1. Definición de matrices………………………………………………………………. 6.2. Operaciones con matrices…………………………………………………………... 6.3. Funciones que actuan sobre vectores……………………………………………… 6.4. Tipos de matrices predefinidos……………………………………………………... 6.5. Formación de una matriz a partir de otras……..………………………………...

32 32 33 37 40 48

7. Gráficas en dos dimensiones……………………………………………………………... 7.1. Función plot…………………………………………………………………………… 7.2. Tipos de líneas y marcadores en la función plot…………………………………. 7.3. Añadir líneas a una gráfica ya existente………………………………………….. 7.4. Comando subplot…………………………………………………………………….. 7.5. Control de los ejes……………………………………………………………………. 7.6. Manejo de las ventanas de gráficos……………………………………………….. 7.7. Otras funciones gráficas en dos dimensiones…………………………………….. 7.8. Ejemplos………………………………………………………………………………..

53 55 58 59 59 60 62 63 73

8. Gráficas en tres dimensiones……………………………………………………………. 8.1. Dibujo de líneas: función plot3…………………………………………………….. 8.2. Dibujo de mallas: Funciones meshgrid, mesh y surf……………………………. 8.3. Dibujo de líneas de contorno: Funciones contour y contour3…………………. 8.4. Mapas de colores…………………………………………………………………….. 8.5. Elementos generales: ejes, puntos de vista, líneas ocultas……………………...

76 76 77 78 83 92

9. Estadística…………………………………………………………………………………... 9.1. Generación de números aleatorios………………………………………………… 9.2. Medidas de tendencia central………………………………………………………. 9.3. Medidas de dispersión……………………………………………………………….. 9.4. Funciones varias………………………………………………………………………

93 95 96 97 99

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 3 -

10. Programación en Matlab…………………………………………………………………. 10.1. Conceptos útiles para programar………………………………………………… 10.2. Ciclo for………………………………………………………………………………. 10.3. Ciclo while………………………………………………………………………….... 10.4. Estructura if – else – end…………………………………………………………...

103103104105106

11. Fundamentos de las interfaces gráficas con Matlab………………………………….. 11.1. Objetos gráficos de Matlab………………………………………………………... 11.2. Identificadores………………………………………………………………………. 11.3. Propiedades de los objetos………………………………………………………… 11.4. Creación de los controles gráficos: comando uicontrol……………………….. 11.5. Propiedades de los controles uicontrol………………………………………….. 11.6. Botones (pushbuttons)……………………………………………………………… 11.7. Botones de selección (checkboxes)……………………………………………….. 11.8. Botones de opción (radiobuttons)………………………………………………… 11.9. Barras de desplazamiento (scrolling bar o sliders)……………………………. 11.10. Cajas de selección desplegables (pop – up menus)………………………….. 11.11. Cajas de texto (static textboxes)………………………………………………… 11.12. Cajas de texto editables (editable textboxes)………………………………….. 11.13. Marcos (frames)…………………………………………………………………...

107107109110111113115116119121124126126127

>>>>Bibliografía, Fuentes y Referencias<<<…………………………………………... 129

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 4 -

1. Introducción

The Math Works es la empresa líder en desarrollo y suministro de software para computación técnica y el diseño basado en modelos. Fue fundada en 1984 en Natick, Massachussets, donde tiene su cede, con oficinas que la representan alrededor del mundo. Es esta empresa la responsable del desarrollo de un programa de matemáticas conocido como Matlab, creado en el mismo año de su fundación, el cual está actualmente disponible para las plataformas Unix, Windows y Mac. El nombre Matlab es la abreviatura de Matrix Laboratory (laboratorio de matrices).

Las aplicaciones de Matlab abarcan campos tan diversos, enfocados a prácticamente todas las áreas de la ciencia, como son los estudios sobre la tierra, el ambiente y el universo; en la ingeniería automotriz ayudando al desarrollo de automóviles más rápidos y eficientes; en el ramo de las telecomunicaciones, mejorando los servicios de telefonía al hacer las llamadas más claras y desarrollando instrumentos de medición más confiables, entre otras muchas aplicaciones posibles debido a las funciones que realiza.

Este es un programa para realizar cálculos numéricos con vectores y matrices. Como caso particular puede también trabajar con números escalares, tanto reales como complejos. Una de las capacidades más atractivas es la de realizar una amplia variedad de gráficos en dos y tres dimensiones.

Matlab es al mismo tiempo un entorno y un lenguaje de programación. Uno de sus puntos fuertes es el hecho de que el lenguaje de Matlab permite construir herramientas propias reusables. Por consiguiente, es posible crear fácilmente funciones propias y programas especiales (conocidos como archivos M) en el código Matlab. Es posible agrupar en Toolbox: una colección especializada de archivos M para trabajar en clases particulares de problemas. Algunos de ellos están destinados al procesado digital de señal, adquisición de datos, economía, inteligencia artificial, lógica difusa, entre otros. También cuenta con otras herramientas como Simulink, que sirve para simular sistemas.

La primera versión surgió con la idea de emplear unos paquetes de subrutinas escritas en Fortran en los cursos de álgebra lineal y análisis numérico, sin necesidad de escribir programas en Fortran.

Usa un lenguaje de programación creado en 1970 para proporcionar un sencillo acceso al software de matrices LINPACK y EISPACK sin tener que usar Fortran. También tiene su propio compilador.

Es un software muy usado en universidades, centros de investigación y por ingenieros. En los últimos años ha incluido muchas más capacidades, como la de programar directamente procesadores digitales de señal, crear código VHDL y otras.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 5 -

2. Inicializando Matlab

Para empezar a trabajar en Matlab se puede iniciar como cualquier otra aplicación de Windows, haciendo click dos veces en el icono correspondiente o por medio del menú de Inicio).

Al arrancar Matlab se abre una ventana como la de la siguiente figura.

Esta es la ventana principal de Matlab y consta de una serie de ventanas que analizaremos a continuación con el fin de explotar su uso al máximo.

2.1. Toolbar Window

Se conoce como Toolbar Window a esta ventana ya que contiene las barras de herramientas básicas, que son de gran ayuda en el uso de este programa. La barra de herramientas (Figura 2.1.1) proporciona un acceso directo a las funciones más comunes de Matlab y se enumeran a continuación en el mismo orden en el que se presentan los accesos directos:

Figura 2.1.1 - Barra de herramientas

Command Window

Workspace

Command History

Toolbar Window

Barra de estado

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 6 -

Abrir una nueva ventana de edición, la cual estudiaremos más tarde. (Figura 2.1.2)

Figura 2.1.2 - Ventana de edición

Abrir un archivo de Matlab ya existente para su edición. Éste archivo se

abrirá en la ventana de edición que ya hemos mostrado.

Cortar, copiar, pegar y deshacer.

Abrir la ventana de ayuda de Matlab que se muestra en la Figura 2.1.3

Figura 2.1.3 – Ventana de ayuda de Matlab El uso de esta ventana se especifica más adelante en el capitulo 3.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 7 -

El siguiente botón recibe el nombre de Simulink. Su función es la de abrir el asistente para la aplicación de Matlab que recibe el mismo nombre, y que s utilizada para realizar simulaciones. (Figura 2.1.4)

Figura 2.1.4 - Ventana de Simulink

Cambiar el directorio desde el que se está ejecutando el archivo que actualmente esta en uso. Es decir, para que un archivo de Matlab pueda ser ejecutado, éste debe de estar guardado en el mismo directorio que el que está especificado en la casilla Current Directory. Para especificar dicho directorio primero hay que presionar el botón marcado con los tres puntos. Aparece una ventana como la que se muestra en la Figura 2.1.5. En esta ventana se elige la carpeta o disco de almacenamiento donde se encuentra el archivo que se desea ejecutar.

Figura 2.1.5 – Búsqueda de carpeta

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 8 -

2.2. Command Window

En la ventana Command Window se muestra el prompt característico de MATLAB (» ). Esto quiere decir que el programa está preparado para recibir instrucciones. En dicha ventana aparece también se sugieren algunos comandos para el usuario que quiere echar un vistazo a la aplicación.

Es posible recuperar comandos anteriores de Matlab y moverse por dichos comandos con las teclas ↑ y ↓. Con la primera de ellas aparecerá el comando que se había introducido inmediatamente antes. De modo análogo es posible moverse sobre la línea de comandos con las teclas ← y →, ir al principio de la línea con la tecla Inicio, al final de la línea con Fin, y borrar toda la línea con Esc. Para borrar todas las salidas anteriores de Matlab y dejar limpia la ventana principal se pueden utilizar las funciones clc y home. Si se desea salir del programa, basta teclear los comandos quit o exit, o bien elegir Exit Matlab en el menú File.

2.3. Workspace

Mientras la ventana Toolbar Window esta en uso Matlab es capaz de recordar los comandos que han sido utilizados, así como las variables creadas junto con sus valores. Se dicen entonces que estos comandos y variables residen en Matlab Workspace y pueden ser llamadas en el momento que sea necesario, siempre y cuando la variable sea creada desde la ventana Command Window o el programa donde se crea esté en uso.

La ventana de Workspace puede ser llamada de diversas formas. De hecho, se encuentra abierta en la ventana principal al inicializar Matlab. Esta ventana puede ser llamada introduciendo el comando workspace en la ventana de comandos en caso de que se encuentre inicialmente cerrada. También puede llamarse abriendo View en la barra de herramientas y seleccionando la opción Workspace. De cualquier forma, se abrirá una ventana como la que se muestra en la Figura 2.3.1

Figura 2.3.1 – Ventana de Workspace

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 9 -

En esta ventana se mostrará una lista de elementos que se encuentran actualmente en uso (Figura 2.3.2). Estos elementos pueden ser variables, arreglos, matrices, entre otros. Para cada uno se muestran cuatro elementos que los definen:

Nombre: que se refiere al nombre con el cual se llama a la variable Tamaño: se refiere a las dimensiones del elemento. Por ejemplo si

estamos hablando de una matríz de dos columnas y dos renglones en este espacio se muestra el mensaje 2x2.

Bytes: muestra la cantidad de memoria que utiliza el elemento en Bytes Class: en esta sección se muestra un mensaje que indica el tipo de

elemento del que se habla (Double array, char array, etc)

Figura 2.3.2 – Lista de elementos

Al hace doble clic sobre alguno de los elementos de la lista aparece otra ventana (Figura 2.3.2), que muestra valor que tiene asignado dicho elemento. En esta ventana puede aparecer más de un elemento, junto con su valor, mostrándose cada uno en una pestaña diferente dentro de la misma ventana, y para alternar entre ellos basta con seleccionar la pestaña del elemento que se desea observar.

Figura 2.3.3 – Editor de arreglos

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 10 -

En esta ventana también es posible editar los elementos que se han seleccionado, haciendo doble clic en el valor a modificar e introduciendo el nuevo valor.

2.4. Command History

La ventana Command Window también aparece cuando se inicializa Matlab. En esta ventana es posible visualizar una lista de los comandos utilizados recientemente (Figura 2.4.1).

Para mostrar o esconder dicha ventana, se sigue un proceso similar al que se usa con el Workspace. Primero, abrimos el menú View en la barra de herramientas y se selecciona la opción Command History. Una vez hecho eso, aparecerá una ventana como la que se muestra en la Figura 2.4.1.

Figura 2.4.1 – Command History

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 11 -

3. El comando HELP

Matlab dispone de un excelente Help con el que se puede encontrar la información que se desee. En primer lugar, es posible recurrir al Help desde la línea de comandos. Basta con escribir en la línea de comandos help seguido del comando que se desea consultar, por ejemplo:

» help mesh Una vez hecho esto, aparece un texto como éste:

MESH 3-D mesh surface. MESH(X,Y,Z,C) plots the colored parametric mesh defined by four matrix arguments. The view point is specified by VIEW. The axis labels are determined by the range of X, Y and Z, or by the current setting of AXIS. The color scaling is determined by the range of C, or by the current setting of CAXIS. The scaled color values are used as indices into the current COLORMAP. MESH(X,Y,Z) uses C = Z, so color is proportional to mesh height. MESH(x,y,Z) and MESH(x,y,Z,C), with two vector arguments replacing the first two matrix arguments, must have length(x) = n and length(y) = m where [m,n] = size(Z). In this case, the vertices of the mesh lines are the triples (x(j), y(i), Z(i,j)). Note that x corresponds to the columns of Z and y corresponds to the rows. MESH(Z) and MESH(Z,C) use x = 1:n and y = 1:m. In this case, the height, Z, is a single-valued function, defined over a geometrically rectangular grid. MESH(...,'PropertyName',PropertyValue,...) sets the value of the specified surface property. Multiple property values can be set with a single statement. MESH returns a handle to a SURFACE object. AXIS, CAXIS, COLORMAP, HOLD, SHADING, HIDDEN and VIEW set figure, axes, and surface properties which affect the display of the mesh. See also SURF, MESHC, MESHZ, WATERFALL.

De aquí se observa que Matlab despliega una lista de funciones que pueden realizarse con este comando, así como la sintaxis requerida para que dicho comando ejecute una u otra función. Además, muestra una lista de temas relacionados a dicho comando.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 12 -

Como ya se había visto con anterioridad en la sección 2.1, también es posible abrir una ventana de ayuda desde la ventana de Toolbar presionando el botón marcado con el signo de interrogación. La ventana de ayuda se muestra de nuevo en la figura 3.1.

Figura 3.1 – Ventana de ayuda Como podemos observar, la ventana de ayuda se encuentra dividida en dos partes. Help Navigator Esta parte incluye diversas funciones, como son:

Product filter: dispone un filtro para mostrar la documentación que se refiera únicamente a los productos que se desean. Al seleccionar la etiqueta Selected es posible cambiar los productos de los cuales se obtiene ayuda, por ejemplo Simulink.

Contents tab: muestra los títulos y tablas de contenidos de la documentación de los productos seleccionados.

Index tab: realiza la busqueda sobre temas específicos mediante el uso de palabras clave preestablecidas por la documentación MathWorks para los productos del programa.

Demos tab: muestra y corre demostraciones para los productos de MathWorks

Search tab: busca una palabra o frase específica en la documentación. Para obtener ayuda sobre una función específica, fije el Search type en Function Name

Favorites tab: muestra una lista de las ligas a documentos que ya han sido asignados previamente como favoritos

Display Pane

Después de haber encontrado la documentación utilizando el Help Navigator, es posible observar los resultados en el Display Pane. Mientras se observa la documentación, es permitido:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 13 -

Cargar otras páginas.: utilice las flechas en la parte superior para moverse

dentro del documento, o utilice los botones de atrás y adelante en la barra de herramientas para cargar páginas previamente vistas.

Bookmark pages: se refiere a marcar las páginas como favoritas al presionar el botón Add to Favorites.

Impresión de páginas: esto se hace oprimiendo el boton de imprimir ubicado en la barra de herramientas.

Find a term in the page: al escribir un término en éste apartado y oprimir el botón Go se hace una búsqueda de éste en el documento mostrado actualmente

Otras funciones disponibles en el Display Pane son: copiar información, evaluar una selección y ver páginas Web. Otra forma de obtener ayuda es contactar al Soporte Técnico en la dirección:

http://www.mathworks.com/support

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 14 -

4. El espacio de trabajo de Matlab

Los componentes más importantes del entorno de trabajo de Matlab son el editor de rutas de búsqueda (Path Browser), el editor y depurador de errores (Editor & Debugger) y el visualizador del espacio de trabajo (Workspace Browser).

Matlab puede llamar a una gran variedad de funciones, tanto propias como programadas por los usuarios. A veces puede incluso haber funciones distintas que tienen el mismo nombre. Interesa saber cuáles son las reglas que determinan qué función o qué fichero *.m es el que se va a ejecutar cuando su nombre aparezca en una línea de comandos del programa. Esto queda determinado por la ruta de búsqueda (search path) que el programa utiliza cuando encuentra el nombre de una función.

El search path de Matlab es una lista de directorios que se puede ver y modificar a partir de la línea de comandos, o utilizando el Path Browser. El comando path hace que se escriba el search path de Matlab (el resultado depende de en qué directorio está instalado Matlab):

» path MATLABPATH c:\Matlab\toolbox\local c:\Matlab\toolbox\Matlab\datafun c:\Matlab\toolbox\Matlab\elfun...

El concepto de directorio actual es importante en Matlab. Para cambiar de

directorio actual se utiliza el comando cd (de change directory), seguido del nombre del directorio, para el cual se puede utilizar un path absoluto (por ejemplo cd C:\Matlab\Ejemplos) o relativo (cd Ejemplos). Para subir un nivel en la jerarquía de directorios se utiliza el comando cd.., y cd../.. para subir dos niveles. Matlab permite utilizar tanto la barra normal (/) como la barra invertida (\).

En Matlab tienen particular importancia los archivos-M (o M-files). Son archivos de texto ASCII, con la extensión *.m, que contienen conjuntos de comandos o la definición de funciones. La importancia de estos archivos-M es que al teclear su nombre en la línea de comandos se ejecutan uno tras otro todos los comandos contenidos en dicho archivo.

Matlab dispone de un editor que permite tanto crear y modificar estos archivos, como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuración). En la ventana principal del Editor/Debugger se puede teclear un archivo-M llamado archivo.m, que contiene comandos.

El Editor muestra con diferentes colores los diferentes elementos constitutivos

de los comandos (en verde los comentarios, en rojo las cadenas de caracteres, en negro las instrucciones, en azul los ciclos, etc.). El Editor se preocupa también de que las comillas o paréntesis que se abren, no se queden sin el correspondiente elemento de cierre.

La ejecución de un fichero comienza eligiendo el comando Run en el menú Tools o tecleando el nombre del fichero en la línea de comandos. Los puntos rojos que

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 15 -

aparecen en el margen izquierdo son breakpoints (puntos en los que se detiene la ejecución del programa); la flecha indica la sentencia en que está detenida la ejecución; cuando el cursor se coloca sobre una variable aparece una pequeña ventana con los valores numéricos de esa variable. El Debugger es un programa muy útil para detectar y corregir errores, que hay que conocer muy bien.

El espacio de trabajo de Matlab (Workspace) es el conjunto de variables y de funciones de usuario que en un determinado momento están definidas en la memoria del programa. Para obtener información sobre el Workspace se pueden utilizar los comandos who y whos: who muestra las variables existentes en el Workspace actual, mientras que whos presenta más información acerca de cada variable, como su nombre, clase, espacio ocupado en bytes, etc.

Por ejemplo para cierto archivo-M, la ejecución de estos comandos se mostrará

en la ventana de comandos como: Para el comando who:

>> who Your variables are: K P R a b c d den num s

Que es, como ya se había mencionado, la lista de variables que están actualmente en uso. Ahora, para el comando whos:

>> whos Name Size Bytes Class K 1x1 8 double array P 3x1 24 double array R 3x1 24 double array a 1x3 24 double array b 1x4 32 double array c 1x6 48 double array d 1x1351 10808 double array den 1x4 32 double array num 1x4 32 double array s 1x1351 10808 double array Grand total is 2730 elements using 21840 bytes

Se puede obtener de modo gráfico una información análoga con el Workspace

Browser, que se activa con el comando Show Workspace del menú File de Matlab. Haciendo doble clic sobre la matriz A, por ejemplo, aparece una nueva solapa en la ventana del Editor & Debugger en la que se muestran y pueden ser modificados los elementos de dicha matriz.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 16 -

5. Matemática simple

Matlab cuenta con un gran número de funciones matemáticas estándar, que incluyen entre otras el valor absoluto, la raíz cuadrada, la función exponencial y la seno. Incluso cuando se realiza la raíz cuadrada o el logaritmo de un número negativo no se presenta un error, ya que el programa tiene la capacidad de presentarlo como un número complejo. También cuenta con funciones avanzadas incluyendo las funciones de Bessel y gama. Con la mayoría de ellas es posible trabajar con números complejos.

5.1. Operadores aritméticos

Matlab tiene dos tipos diferentes de operadores aritméticos. Por un lado están las

operaciones aritméticas matriciales que se definen por las reglas del álgebra lineal, por el otro está la aritmética de arreglos que se lleva a cabo elemento por elemento, y que pueden ser utilizadas para arreglos multidimensionales. Los operadores aritméticos de arreglos se distinguen de los de matrices mediante el uso del carácter (.). Dado que la suma y resta se realiza de igual forma para ambos casos, los operadores .+ y .- no se utilizan. Cabe resaltar que Matlab interpreta todas las variables como matrices. Por ejemplo una variable escalar se interpretará como una matriz de 1x1 y un vector como una matriz de 1xn o de nx1 según sea el caso.

Por ahora nos enfocaremos a los operadores aritméticos matriciales, es decir los

operadores que se rigen por el álgebra lineal, para después enfocarnos a los operadores de arreglos.

Los operadores aritméticos básicos de Matlab son los siguientes:

Símbolo Operador Función

+

Suma

Realiza la suma de A+B, con la restricción de que tanto A como B deben ser del mismo tamaño, a menos de que uno de ellos sea un escalar. Es decir que un escalar puede sumarse a una matriz de cualquier tamaño.

-

Resta

Al introducir la función A-B realiza la sustracción de B del valor de A. al igual que con la suma, A y B deben tener el mismo tamaño a menos que uno de ellos sea un escalar.

^

Potenciación

La función X^p significa elevar X a la potencia p donde p es un escalar. Si p es n número entero, la potencia se realiza por multiplicaciones sucesivas. Si es un entero negativo, entonces X se invierte antes de realizar la operación.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 17 -

Símbolo Operador Función

*

Multiplicación

La función C = A*B es el producto lineal de matrices, de forma más precisa:

( ) ( ) ( )1

, , ,n

kc i j A i k B k j

=

= ∑

En el caso en el que A y B no son escalares, el número de columnas de A debe ser igual al número de renglones de B. Si A es un escalar entonces puede multiplicar a cualquier matriz

/

División

Este operador realiza la división de dos números A y B de tal forma que C = A/B

5.2. Operadores relacionales

Los operadores relacionales son >, <=, >=, ==, y ~=. Los operadores relacionales realizan comparaciones elemento por elemento entre dos arreglos. En este caso el resultado será un arreglo lógico del mismo tamaño con elementos dispuestos como verdadero (1) o falso (0). Estos operadores utilizan únicamente la parte real de los operandos para la comparación.

Por ejemplo, consideremos el caso en el que uno de los operandos es un escalar y el otro es una matriz, de tal forma que al hacer la comparación:

1 2 3

5; 4 5 67 8 9

X X⎡ ⎤⎢ ⎥= ≥ ⎢ ⎥⎢ ⎥⎣ ⎦

En primer lugar, el escalar x debe de expandirse al tamaño de la matriz para

después hacer una comparación elemento a elemento para obtener el arreglo lógico de unos y ceros. En el lenguaje de Matlab esto queda expresado como:

>>X = 5*ones(3,3); X >= [1 2 3; 4 5 6; 7 8 10] ans = 1 1 1 1 1 0 0 0 0

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 18 -

En resumen, los operadores relacionales son:

Símbolo Operador < menor que > mayor que

<= menor o igual que >= mayor o igual que == igual que ~= distinto que

5.3. Operadores lógicos

Existen en Matlab operadores del tipo lógico que entregan, al igual que los realcionales, un arreglo lógico en el que se representa al verdadero como 1 y al falso como 0. estos operadores representan las operaciones lógicas de AND, OR y NOT. Tambien se incluye la operación lógica de OR exclusiva (XOR) mediante la función xor(A,B). Las operaciones lógicas en Matlab se reresentan como:

Símbolo Operación lógica & AND | OR ~ NOT

&& AND de corto circuito || OR de corto circuito

Xor (A,B) OR exclusiva

Ahora incluiremos las tablas de verdad para cada una de las operaciones con el fin de explicar un poco mejor el funcionamiento de cada operador:

A B A&B A|B ~A xor(A,B)0 0 0 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 0 0

Por otro lado tenemos los operadores lógicos de corto circuito se utilizan cuando

se comparan dos expresiones lógicas. De tal modo, que para utilizarlas debemos seguir la sintaxis:

Expresión && expresión Expresión || expresión

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 19 -

Donde cada expresión se evalúa para un valor escalar. El hecho de que sean operadores de corto circuito implica que el segundo operando es evaluado únicamente en el caso de que el resultado no quede completamente determinado por el primero.

5.4. Funciones trigonométricas e hiperbólicas

Ahora hablaremos de las funciones matemáticas que Matlab es capaz de realizar. Dado que Matlab contiene una basta lista de funciones, incluiremos aquí únicamente las funciones básicas. Cabe resaltar que todos los ángulos relacionados con estas funciones deben de estar en radianes con el fin de obtener resultados correctos. Estas funciones permiten el trabajo con complejos. Además todas estas fundones se realizan elemento por elemento.

Función operación sin(x) Seno de X cos(x) Coseno de X tan(x) Tangente de X asin(x) Angulo cuyo seno es X acos(x) Angulo cuyo coseno es X atan(x) Angulo cuya tangente es X contenido en

el intervalo [-π/2 , π/2] atan2(x) Angulo cuya tangente es X contenido en

el intervalo [-π, π] sinh(x) Seno hiperbólico de X cosh(x) Coseno hiperbólico de X tanh(x) Tangente hiperbólica de X asin(x) Angulo cuyo seno hiperbólico es X

acosh(x) Angulo cuyo coseno hiperbólico es X atanx(x) Angulo cuya tangente hiperbólica es X

5.5. Funciones varias

Matlab tiene la capacidad de realizar diversas operaciones matemáticas. Algunas de ellas se enumeran a continuación, junto con una breve explicación de la operación que realizan así como los parámetros que requiere:

Función Operación

Log(x)

Logaritmo natural de x Esta función encuentra el logaritmo natural de todos los elementos contenidos en el vector x. En el caso en que x contenga valores negativos, el resultado de esta operación será un número complejo

log10(x)

Logaritmo base 10

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 20 -

Esta función entrega el logaritmo base 10 de todos los elementos contenidos en el vector x. De igual forma, si el vector contiene valores negativos, la función entrega por resultado números complejos

Función Operación

Log2(x)

Logaritmo base 2 Para esta función existen dos excepciones: Y=LOG2(X) entrega como resultado el logaritmo base dos para todos los

elementos contenidos en el vector x. [F,E]=LOG2(X) entrega como resultado, para cada elemento del vector x

un arreglo F de números reales que se encuentran en el rango de 0.5<=abs(F)<1. También entregará un arreglo E de números enteros, de tal forma que X=F.*2.^E. En el caso en que exista un 0 en el vector x, se produce que F=0 y E=0.

Exp(x)

Función exponencial Ésta es la función exponencial como tal, donde se eleva al valor e a todos los valores del vector x. En el caso en que el vector sea un vector complejo, al aplicar esta función se entregara la forma de euler del número complejo. Esto es:

Z=X+i*Y, EXP(Z) = EXP(X)*(COS(Y)+i*SIN(Y)).

sqrt(x)

Raíz cuadrada Para esta función, Matlab entrega la raíz cuadrada de todos los valores contenidos en el vector x. En el caso en que los valores contenidos en el vector sean negativos, la función entregará como resultado un número complejo.

sqrtm(x)

Raíz cuadrada de una matriz X=SQRT(A) es la raíz cuadrada principal de una matriz A. Esto es, que X es la unica raíz cuadrada para la cual cada eigenvalor no tiene parte real. En el caso en que A tenga algun eigenvalor son parte real negativa, entonces se produce un resultado complejo. Si A es una matríz singular, es posible que no tenga una raíz cuadrada.

sign(x)

Función signo Para cada elemento del vector x, la función entrega un 1 si el elemento es mayor que cero, un 0 si es igual a cero y -1 si es menor que cero. Para el caso en que el vector contenga valores complejos entonces:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 21 -

SIGN(X) = X ./ ABS(X).

Función Operación

Rem(x,y)

Residuo de una division En el uso de esta función tenemos que el residuo de la división es x-n.*y donde n=fix(x./y) si y~=0. En el caso en que y no sea un entero y que el cosiente x./y es cercano al error de redondeo de un entero, entonces n es entero. Por conversión, REM(x,0) es NaN (not a number). La entrada x y y deben ser vectores reales del mismo tamaño, o escalares reales. REM(x,y) y MOD(x,y) son iguales si x y y tienen el mismo signo.

mod(x,y)

Modulo de una division Con esta función encontramos el módulo de una división, donde MOD(x,y) es x - n.*y donde n = floor(x./y) si y ~= 0. En esencia, esta función es muy parecida a la función residuo.

round(x)

Redondeo Mediante esta función es posible redondear todos los elementos de x hacia el entero que se encuentre más cercano.

Fix(x)

Redondeo hacia cero Mediante esta función, todos los elementos de x son redondeados al menor entero posible. Por ejemplo, el número 3.9 será redondeado a 3.

floor(x)

Redondeo hacia menos infinito El uso de esta función provoca que todos los elementos de x sean redondeados hacia el entero más cercano que se encuentre hacia menos infinito. La función que desempeña resulta muy similar a la que realiza la función fix

ceil(x)

Redondeo hacia mas infinito Con esta función, todo elemento contenido en x es redondeado al inmediato superior, es decir, hacia más infinito.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 22 -

Función Operación

Gcd(x)

Máximo común divisor Al aplicar la función G = GCD(A,B) obtiene el máximo común divisor correspondientes a los elementos de A y B. Dichos arreglos deben contener elementos enteros positivos y deben ser del mismo tamaño o escalares. Por convención, GCD(0,0) es 0. [G,C,D] = GCD(A,B) entrega los arreglos C y D de tal forma que

G = A.*C + B.*D.

Lcm(x)

Mínimo común múltiplo La forma LCM(A,B) es el mínimo común múltiplo correspondiente a los elementos de A y B. Los arreglos A y B deben contener enteros positivos y deben ser del mismo tamaño o escalares.

Abs(x)

Valor absoluto La función ABS(X) entrega como resultado el valor absoluto de los números contenidos en x. Cuando x contiene valores complejos, la función entrega la magnitud de los elementos contenidos en la matriz

real(x)

Reales Entrega la parte real de los números contenidos en x.

imag(x)

Imaginario Entrega la parte imaginaria de los números contenidos en x

Abs(x)

Valor absoluto La función ABS(X) entrega como resultado el valor absoluto de los números contenidos en x. Cuando x contiene valores complejos, la función entrega la magnitud de los elementos contenidos en la matriz

Fase

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 23 -

angle(x) Entrega los valores de los ángulos, en radianes, de la matriz cuyos elementos son complejos.

5.6. Despliegue de formatos numéricos

Los formatos de salida en la ventana principal de Matlab se pueden controlar fácilmente a partir del cuadro de diálogo que se abre con el comando Preferences del menú File, que se muestra en la figura 5.6.1.

Figura 5.6.1 – Ventana Preferences El formato con el cual va a desplegarse un número en la ventana de comandos

puede cambiarse mediante el uso de la pestaña Numeric Format, que despliega una lista de formatos.

Se pueden activar las mismas posibilidades por medio de la línea de comandos

de Matlab. Esto se realiza mediante el uso de la función format en la ventana de comandos.

Esta función afecta únicamente la forma en la que se muestra un número y no la forma en que se calcula o guarda. El formato elegido aplica únicamente en la sesión actual. Para mantener el formato elegido es necesario modificar el formato desde la ventana de Preferences que se mostró anteriormente.

Para cambiar el formato con que se muestran los números en la ventana de

comandos es necesario escribir:

format tipo o format(‘tipo’) Los tipos de formatos que permita Matlab se presentan en la siguiente tabla. Las

palabras reservadas contenidos en el campo tipos son los que sustituyen el espacio “tipo” en la sintaxis anterior.

Tipos Formato Ejemplo >> 0.123

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 24 -

+

Entrega unicamente el signo del resultado. En caso de que el resultado sea cero, entrega un espacio en blanco.

ans = +

Tipos Formato Ejemplo

bank

Entrega el formato en dólares y centavos. Es decir, enteros con dos decimales.

>> pi ans = 3.14

compact

Suprime el exceso de líneas que se utilizan para mostrar cada dato en la pantalla

>> pi ans = 3.1416

Hex

Los resultados se muestran en forma hexagesimal

>> 2*pi ans = 401921fb54442d18

long

Muestra un número con 15 cifras significativas

>> pi ans = 3.14159265358979

Long e

Muestra los números con 15 cifras decimales significativas

>> pi ans = 3.141592653589793e+000

Long g

Muestra los mejores 15 dígitos, ya sea enteros o decimales

>> pi ans = 3.14159265358979

loose

Agrega líneas de espaciamiento entre las salidas

>> pi ans = 3.14159265358979

Rat

Muestra la razón de enteros pequeños

>> pi ans = 355/113

short

Muestra 5 cifras

>> pi ans = 3.1416

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 25 -

Tipos Formato Ejemplo

Short e

Muestra 5 cifras decimales significativas

>> pi ans = 3.1416e+000

short g

Los mejores 5 dígitos enteros o decimales

>> pi ans = 3.1416

Matlab aplica un factor de escala general a las matrices cuando los elementos

más grandes o más pequeños son superiores o inferiores respectivamente a una determinada cantidad (103 y 10-3). Hay que añadir que Matlab trata de mantener el formato de los números que han sido definidos como enteros (sin punto decimal).

Matlab mantiene una forma especial para los números muy grandes (más

grandes que los que es capaz de representar), que son considerados como infinito. Por ejemplo:

>> 1/0 Warning: Divide by zero. ans = Inf

Así pues, para Matlab la palabra reservada Inf es la representación aritmética de

más infinito, y resulta de las operaciones como división entre cero y el overflow. Estas operaciones llevan a resultados muy largos para ser representado como valores decimales convencionales.

Matlab tiene también una representación especial para los resultados que no están definidos como números. Por ejemplo:

>> 0/0 Warning: Divide by zero. ans = NaN >> Inf/Inf ans = NaN

En ambos casos la respuesta es NaN, que es la abreviatura de Not a Number. En este caso, Matlab mandará la respuesta NaN cuando se realizan operaciones en las que se tiene un resultado no numérico.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 26 -

Las siguientes operaciones producen la respuesta NaN:

• Cualquier operación que se realice sobre una NaN • La suma o resta, como la resta de magnitudes de infinitos de la forma

(+Inf)+(-Inf) • La multiplicación 0*Inf • La división 0/0 y Inf/Inf • El residuo rem(x,y) en el que y es cero y x sea infinito

Este tipo de respuesta, así como la de Inf, son enormemente importantes en Matlab, pues permiten controlar la fiabilidad de los resultados de los cálculos matriciales. Los NaN se propagan al realizar con ellos cualquier operación aritmética, en el sentido de que, por ejemplo, cualquier número sumado a un NaN da otro NaN. Matlab tiene esto en cuenta. Algo parecido sucede con los Inf.

5.7. Variables Una variable es un nombre que se da a una entidad numérica, que puede ser una matriz, un vector o un escalar. El valor de esa variable, e incluso el tipo de entidad numérica que representa, puede cambiar a lo largo de una sesión de Matlab o a lo largo de la ejecución de un programa. La forma más normal de cambiar el valor de una variable es colocándola a la izquierda del operador de asignación (=). Una expresión de Matlab puede tener las dos formas siguientes: primero, asignando su resultado a una variable: variable = expresión, y segundo, evaluando simplemente el resultado del siguiente modo: expresión, en cuyo caso el resultado se asigna automáticamente a una variable interna de Matlab llamada ans (de answer) que almacena el último resultado obtenido. Se considera por defecto que una expresión termina cuando se pulsa enter. Si se desea que una expresión continúe en la línea siguiente, hay que introducir tres puntos (...) antes de pulsar enter. También se pueden incluir varias expresiones en una misma línea separándolas por comas o punto y coma. Si una expresión termina en punto y coma su resultado se calcula, pero no se escribe en pantalla. Esta posibilidad evita la escritura de resultados intermedios, así como la impresión de grandes cantidades de números cuando se trabaja con matrices de gran tamaño. A semejanza de C, Matlab distingue entre mayúsculas y minúsculas en los nombres de variables. Los nombres de variables deben empezar siempre por una letra y pueden constar de hasta 31 letras y números. El carácter guión bajo (_) se considera como una letra. A diferencia del lenguaje C, no hace falta declarar las variables que se vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres erróneos en las variables, porque no se recibirá ningún aviso de error. Un comando útil en el uso de variables es el comando clear, el cual tiene varias formas posibles:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 27 -

• clear: elimina todas las variables contenidas en el Workspace. Esta operación libera espacio en la memoria del sistema

• clear name: elimina unicamente los archivos- M o las funciones archivo-MEX. Además elimina los nombres de las variables del WorkSpace. Para borrar elementos de forma selectiva se usa *. También, elimina los puntos de inspección. Si el nombre de la variable es global también se elimina del Workspace.

• clear name1 name2 name3: elimina a las variables que tienen por nombre name1, name2, y name3

• clear keyword: elimina todos los elementos especificados por una palabra clave, esto es de la siguiente forma:

clear palabra clave

A continuación incluiremos una tabla condichas palabras clave.

Palabra clave Función

all

Elimina todas las variables, funciones y archivos MEX (programas en C o Fortran) de la memoria, dejando entonces el workspace vacío. El uso del comando clear all elimina también los puntos de observación (breakpoints) en los archivos M y reinicia las variables persistentes.

classes

Realiza las mismas funciones que en el caso de clear all, además de limpiar las definiciones de clases de Matlab. Es recomendable el uso de este comando si el número de nombres de campos que forman una clase han cambiado.

functions

Limpia todos las funciones M y funciones MEX de la memoria que hayan sido compilados recientemente. El uso de este comando remueve los puntos de observación en los archivos M y reinicia las variables persistentes.

global

Elimina todas las variables que se encuentren contenidas en el workspace.

import

Elimina los paquetes Java contenidos en la lista de importación. Solamente puede ser utilizado desde la ventana de comandos, por lo que no puede utilizarse dentro de una función

variables

Elimina únicamente las variables que se encuentren contenidas en el workspace.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 28 -

5.8. Números complejos En muchos cálculos matriciales los datos y/o los resultados no son reales sino complejos, con parte real y parte imaginaria. En la entrada de datos de Matlab se pueden utilizar indistintamente la i y la j para representar el número imaginario unidad (en la salida, sin embargo, puede verse que siempre aparece la i). Si la i o la j no están definidas como variables, puede intercalarse el operador (*). Esto no es posible en el caso de que sí estén definidas, porque entonces se utiliza el valor de la variable. En general, cuando se está trabajando con números complejos, conviene no utilizar la i como variable ordinaria, ya que puede dar lugar a errores y confusiones. Cuando i y j son variables utilizadas para otras finalidades, como unidad imaginaria puede utilizarse también la función sqrt(-1), o una variable a la que se haya asignado el resultado de esta función. La asignación de valores complejos a vectores y matrices puede hacerse de las dos formas que se muestran en el ejemplo siguiente:

» A = [1+2i 2+3i; -1+i 2-3i]

A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i

» A = [1 2; -1 2] + [2 3; 1 -3]*i

A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i

Puede verse que es posible definir las partes reales e imaginarias por separado. En este caso sí es necesario utilizar el operador (*), según se muestra en el ejemplo anterior. Matlab dispone asimismo de la función complex, que crea un número complejo a partir de dos argumentos que representan la parte real e imaginaria, como en el ejemplo siguiente:

» complex(1,2) ans = 1.0000 + 2.0000i

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 29 -

Es importante advertir que el operador de matriz traspuesta (’), aplicado a matrices complejas, produce la matriz conjugada y traspuesta. Existe una función que permite hallar simplemente la matriz conjugada (conj( )) y el operador punto y apóstrofo (.’) que calcula simplemente la matriz traspuesta. Ahora que sabemos como introducir números complejos de forma que Matlab sea capaz de interpretarlos, es necesario conocer ciertas funciones que nos permitan operar con ellos. De esta forma se incluye la siguiente tabla donde se encuentran los operadores básicos para los números complejo:

Operador Función

Abs(x)

Si x es un arreglo de números complejos de la forma a + bi, esta función entrega como resultado un arreglo Y cuyos elementos son la magnitud del número complejo x. El cálculo que realiza esta función es equivalente a:

2 2Y a b= +

angle(x)

Si x es un arreglo de números complejos de la forma a + bi, esta función entrega como resultado un arreglo P donde cada uno de sus elementos representa el ángulo de fase de cada elemento de x. Cabe remarcar que este resultado se encuentra expresado en radianes. Los ángulos se encuentran en el rango de -π a π.

conj(x)

El uso de este comando entrega como resultado un arreglo de números complejos que son el conjugado de cada elemento contenido en el arreglo de números conjugados x.

imag(x)

Mediante este comando es posible obtener un arreglo de números que corresponden a la parte imaginaria de los números complejos contenidos en el arreglo x

Real(x)

Implementando este comando es posible obtener un arreglo de números que corresponden a la parte real de los números complejos contenidos en el arreglo x

5.9. Ejemplos

Matlab puede usarse para realizar operaciones matemáticas diversas, como ya se ha visto a lo largo de todo este capítulo. A continuación se presentan algunos ejemplos de aplicación de algunas de las operaciones vistas en este capítulo, recordando que después de introducir una operación o una comando debe darse enter para obtener la

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 30 -

respuesta (ans) si se implementan desde la ventana de comandos, y punto y coma si no se desea ver el resultado de la operación:

>> 4*25-4+10/6

ans = 97.6667

>> 4*25-(4+10)/6

ans = 97.6667

>> (4*25-4+10)/6

ans = 17.6667

>> 3^2 + 4*sqrt(26)

ans = 29.3961

Para las funciones trigonométricas, Matlab trabaja en radianes, por lo que 90° debe escribirse como pi/2:

>> sin(90)

ans = 0.8940

>> sin(pi/2)

ans = 1

>> sin(pi)

ans = 1.2246e-016

>> x=sin(pi); >> round(x)

ans = 0

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 31 -

>> 1+2i

ans = 1.0 + 2.0000i 2.0

>> y=1+2i

y = 1.0000 + 2.0000i

>> real(y)

ans = 1

>> imag(y)

ans = 2

>> angle(y)

ans = 1.1071

>> atan(0.27)

ans = 0.2637

>> z=atan(0.27); >> fix(z)

ans = 0

>> round(z)

ans = 0

>> log(z) ans = -1.3329

>> log10(z)

ans = -0.5789

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 32 -

Los resultados anteriores fueron obtenidos introduciendo las instrucciones en la ventana de comandos. Estos mismos resultados pueden obtenerse si se crea un archivo M utilizando los mismos comandos. 6. Operaciones con matrices y vectores

6.1. Definición de matrices

Como en casi todos los lenguajes de programación, en Matlab las matrices y vectores son variables que tienen nombres. Para definir una matriz no hace falta establecer de antemano su tamaño (de hecho, se puede definir un tamaño y cambiarlo posteriormente). Matlab determina el número de filas y de columnas en función del número de elementos que se proporcionan (o se utilizan). Las matrices se definen por filas; los elementos de una misma fila están separados por espacios o comas, mientras que las filas están separadas por punto y coma. Por ejemplo, el siguiente comando define una matriz A de dimensión (3x3):

>> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9

Del mismo modo podemos definir un vector, que es en si un caso particular de una matriz en el que el número de filas que la forman es 1 de tal forma que:

>> B=[ 11 4 55]

B = 11 4 55

A partir de este momento tanto la matriz A como el vector B están disponibles para hacer cualquier tipo de operación con ellos (además de valores numéricos, en la definición de una matriz o vector se pueden utilizar expresiones y funciones matemáticas). En Matlab se accede a los elementos de un vector poniendo el índice entre paréntesis (por ejemplo B(3) ó B(i)). Los elementos de las matrices se acceden poniendo los dos índices entre paréntesis, separados por una coma (por ejemplo A(1,2) ó A(i,j)). Las matrices se almacenan por columnas (aunque se introduzcan por filas, como se ha dicho antes), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un sólo subíndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4). Como se mencionó anteriormente, es posible definir un vector fila x en la forma siguiente:

>> X=[10 20 30]

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 33 -

X = 10 20 30

Por otro lado, en ocaciones es conveniente definir al vector como una sola columna. Para obtener este formato basta con separar los números con un punto y coma:

>> Y=[10; 20; 30]

Y = 10 20 30

6.2. Operaciones con matrices

En el capítulo anterior (sección 5.1) se hablo de algunos de los operadores básicos en la programación de Matlab, por lo que en este capítulo nos enfocaremos en los siguientes operadores que son de uso común cuando se esta trabajando con matrices:

Operador Nombre Función

Traspuesta

Mediante el uso de este operador sobre una matriz dada A, es posible obtener la matriz traspuesta de dicha matriz.

En el caso en que A sea compleja, el resultado de la aplicación de este operador es la matriz conjugada traspuesta de A.

^

Potenciación

Éste representa la potencia de matrices. Sea X una matriz cuadrada que se desea elevar a una potencia P. Esta operación se llevará a cabo mediante el uso de la indicación X^P.

En el caso de que X sea un escalar y que P sea una

matriz cuadrada, esta misma indicación entregará como resultado el valor X elevado a la potencia P mediante el uso de eigenvalores y eigenvectores.

En el caso en que tanto X como P sean matrices se

produce un mensaje de error.

\

División izquierda

La division izquierda X=A\B resuelve la ecuación lineal simbólica A*X=B. De esta forma A\B es una operación equivalente a inv(A)*B.

En este caso se producen mensajes de alarma

cuando la matriz X no existe o no es única.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 34 -

También permite que la matriz A sea una matriz

rectangular, pero las ecuaciones deben ser consistentes.

Operador Nombre Función

.*

Producto elemento a elemento

El producto A.*B se refiere al producto elemento por elemento de A por B.

En este caso las matrices deben de tener el mismo

tamaño a menos que una de ellas sea un escalar.

./

División derecha elemento a elemento

La división derecha A./B entrega como resultado una matriz que contiene las divisiones de cada elemento de A entre cada elemento de B.

De esta forma, la matriz resultante es una matriz

cuyos elementos son A(i,j)/B(i,j). Por lo tanto, ambas matrices deben ser del mismo tamaño, a menos que una de ellas sea un escalar.

.\

División izquierda elemento a elemento

La división izquierda A.\B se refiere a la matriz que tiene por entradas B(i,j)/A(i,j). Esto es, la matiz resultante se compone de las divisiones de cada elemento de B entre cada elemento de A. La aplicación de esta operación tiene como restricción que las matrices A y B deben de ser del mismo tamaño a menos que una de ellas sea un escalar.

.^ Elevar a una potencia elemento a

elemento

El elevar un arreglo a una potencia de la forma A.^B generará como resultado una matriz cuyos elementos son producto de tomar cada uno de los elementos de A y elevarlo a la potencia correspondiente de los elementos de B. Esto es, A(i,j)^B(i,j). Por esta razón, ambas matrices deben tener las mismas dimensiones a menos que una de ellas sea un escalar.

.’ Traspuesta elemento a elemento

Medainte el uso de este operador es possible encontrar la matriz real traspuesta de A

Estos operadores se aplican también a las variables o valores escalares, aunque con algunas diferencias. Todos estos operadores son coherentes con las correspondientes operaciones matriciales: no se puede por ejemplo sumar matrices que no sean del mismo tamaño. Si los operadores no se usan de modo correcto se obtiene un

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 35 -

mensaje de error. Los operadores anteriores se pueden aplicar también de modo mixto, es decir con un operando escalar y otro matricial. Los operadores de división requieren una cierta explicación adicional. El operador división izquierda por una matriz (barra invertida \) equivale a premultiplicar por la inversa de esa matriz. El operador división-derecha por una matriz (/) equivale a postmultiplicar por la inversa de la matriz. A continuación se incluyen algunos ejemplos para ilustrar de forma más clara el funcionamiento de los operadores antes mencionados:

>> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B=[3 4 6; 8 2 4; 1 5 7] B = 3 4 6 8 2 4 1 5 7 >> A' ans = 1 4 7 2 5 8 3 6 9 >> C=2 C = 2 >> A^2 ans = 30 36 42 66 81 96 102 126 150 >> C^A

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 36 -

ans = 1.0e+004 * 0.7962 0.9782 1.1603 1.8029 2.2154 2.6276 2.8097 3.4523 4.0950 >> A/B ans = 2.0000 -0.5000 -1.0000 -28.0000 8.5000 20.0000 -58.0000 17.5000 41.0000 >> A\B ans = 1.0e+017 * 0.5404 -0.2252 -0.2252 -1.0809 0.4504 0.4504 0.5404 -0.2252 -0.2252 >> A.*B ans = 3 8 18 32 10 24 7 40 63 >> A./B ans = 0.3333 0.5000 0.5000 0.5000 2.5000 1.5000 7.0000 1.6000 1.2857 >> A.\B ans = 3.0000 2.0000 2.0000 2.0000 0.4000 0.6667 0.1429 0.6250 0.7778

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 37 -

>> A.^B ans = 1 16 729 65536 25 1296 7 32768 4782969 >> A.' ans = 1 4 7 2 5 8 3 6 9

6.3. Funciones que actúan sobre vectores Existen en Matlab algunas funciones que solamente pueden utilizarse sobre vectores. Como hemos explicado con anterioridad, nos referimos como vector a una matriz que se forma de una sola columna o renglón. Esta columna o este renglón puede tener tantos elementos como sea necesario. Por ejemplo el arreglo D que se muestra a continuación es un vector:

>>D=[ 2 3 4 5 6 7 8 9 ] D = 2 3 4 5 6 7 8 9

Las siguientes son algunas funciones que se aplican comúnmente en vectores. Aún así, algunas de estas funciones pueden aplicarse sobre matrices sin ningún problema: Operador Nombre Función

max(x)

Elementos máximos en un arreglo

Este operando entrega como resultado los elementos más grandes entre las dimensión de de un arreglo.

Si x es un vector, entrega el elemento más largo de

x. Si es una matriz, el operando trata a cada columna en x como un vector, entregando un vector renglón que contiene el elemento máximo de cada columna.

min(x)

Elementos mínimos

El uso de este operando entregará como resultado el elemento más pequeño en un arreglo de elementos de diferentes dimensiones.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 38 -

de un arreglo Si x es un vector, entregará el elemento más pequeño en x. Si es una matriz entregará un vector renglón que contenga el elemento mínimo de cada columna.

Operador Nombre Función

sum(x)

Sumatoria de elementos de un

arreglo

Este operando entrega una sumatoria dependiendo de las dimensiones del arreglo del que se trate.

Si x es un vector, entrega la suma de todos los

elementos que conforman a x. En el caso en que se trate de una matriz, entrega un vector renglón que contiene el resultado de la suma aplicada en cada columna de la matriz.

cumsum(x)

Suma acumulativa

La aplicación de este operando entrega como resultado la suma acumulativa aplicada sobre las diferentes dimensiones de un arreglo.

De esta forma, si x es un vector, el operador

entrega como resultado la suma acumulativa de todos los elementos de x.

Si x es una matriz, el resultado es una matriz del

mismo tamaño de x que contiene la suma acumulativa de cada columna que la forma.

mean(x)

Media

El operador media entrega como resultado la media de los elementos contenidos en un arreglo. En este caso, si x es un vector se obtendrá por resultado el valor de la media de los elementos que lo componen.

Por otro lado, si x es una matriz, el operador trata a

cada columna que la conforma como un vector y se obtendrá como resultado un vector renglón que contiene el valor de la media para cada una de ellas.

std(x)

Desviación estándar

En el caso en que x sea un vector, la aplicación de este operador entrega como resultado la desviación estándar de sus elementos, calculada por:

( )122

1

11

n

ii

s x xn =

⎛ ⎞= −⎜ ⎟−⎝ ⎠∑

Si x es una matriz, el operador entrega la

desviación estándar de cada una de las columnas que la forman.

prod(x)

Producto de elementos

Este elemento se refiere al producto de los elementos que componen a un arreglo. En este caso, si x es un vector, el resultado será el producto de todos los elementos que lo componen.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 39 -

Si x es una matriz, el operando trata a cada una de sus columnas por separado, por lo que entrega como resultado un vector renglón que contiene el producto de elementos de cada una de las columnas de x.

Operador Nombre Función

cumprod(x)

Producto acumulativo de

elementos

Este operando realiza el producto acumulativo de los elementos que se encuentran contenidos en un arreglo. De esta forma, si x es un vector, el resultado será un vector que contenga los productos acumulativos de los elementos contenidos en él.

Si x es una matriz, el resultado será una matriz con

las mismas dimensiones que x que contiene los productos acumulativos de cada columna.

sort(x) Elementos en orden ascendente

Como su nombre lo indica, este operando ordena los elementos contenidos en un arreglo en forma ascendente. De este modo, si x es un vector, ordenará sus elementos de forma ascendente. En el caso en que x sea una matriz, ordenará cada columna de la matriz de forma ascendente.

Este operando permite el uso de elementos reales,

complejos o caracteres. Si se presenta el caso en que existan elementos iguales, el orden de estos elementos se conserva. Si el arreglo x presenta valores complejos, los elementos se ordenan de acuerdo con su magnitud, y cuando estas son iguales entonces se ordena por su fase. Si el arreglo contiene elementos NaN, éstos son colocados al final del mismo.

Por último, cuando los elementos son caracteres,

éstos son ordenados de acuerdo a un diccionario ASCII.

Dot(a,b)

Producto punto

Este operando se refiere al producto punto de vectores, el cual entrega como resultado un escalar que representa la suma de los productos de cada uno de los elementos que conforman a los vectores. En este caso, los vectores a y b deben de ser del mismo tamaño.

Cross(a,b)

Producto cruzado

El producto cruzado de vectores entrega por resultado el producto de los vectores A y B. Esto significa que para llevar a cabo el producto cruzado, loe vectores A y B deben de ser vectores de 3 elementos. En el caso en que A y B sean arreglos multidimensionales, entrega por resultado el producto cruzado de los primeros tres elementos de A y B.

En este caso, es mas recomendable utilizar el

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 40 -

operando cross(a,b,dim) donde el parámetro dim expresa la dimensión en la que se requiere que se realice el producto cruzado evitando que la operación se aplique únicamente en tres dimensiones.

6.4. Tipos de matrices predefinidos

Existen en Matlab varias funciones orientadas a definir con gran facilidad matrices de tipos particulares. Estas funciones son de gran utilidad en la inicialización de variables en el desarrollo de un programa. Algunas de estas funciones son las siguientes:

Eye

Existen diversas formas en las que es posible utilizar esta función, todas ellas con la finalidad de crear una matriz identidad, es decir, cuya diagonal este conformada por unos y el resto de la matriz sea cero. De esta forma tenemos: eye(n): se obtiene una matriz identidad cuadrada de nxn elementos. Por ejemplo:

>> eye(5) ans = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

eye(m,n) o eye([m,n]): genera una matriz de mxn elementos cuya diagonal esta formada por unos, esto es:

>> eye(3,2) ans = 1 0 0 1 0 0

>> eye([3,2]) ans = 1 0 0 1 0 0

eye(size(A)): crea una matriz identidad cuadrada que tiene el mismo tamaño que la matriz A, así:

>> A=[1,2,3;4,5,6] A = 1 2 3 4 5 6 >> eye(size(A)) ans = 1 0 0 0 1 0

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 41 -

Cabe remarcar que esta función tiene ciertas limitantes. La matriz identidad no esta definida para matrices de orden superior. Por esta razón, asignaciones como eye([m,n,p]) no están definidas y resultan en un error.

Zeros El uso de esta instrucción genera como resultado una matriz conformada únicamente por ceros. Del mismo modo que la anterior, esta presenta algunas variantes que pueden ser utilizadas dependiendo del tipo de matriz que se desee generar. Así tenemos: zeros(n): esta instrucción entrega como resultado una matriz cuadrada de nxn con la restricción de que n sea un escalar:

>> zeros(3) ans = 0 0 0 0 0 0 0 0 0

zeros(m,n) o zeros([m,n]): genera una matriz de mxn elementos:

>> zeros(2,3) ans =

0 0 0 0 0 0

>> zeros([2,3]) ans =

0 0 0 0 0 0

zeros(d1,d2,d3,…) o zeros([d1,d2,d3,…]): entrega una matriz de orden superior con las dimensiones d1, d2, d3…

>> zeros(2,3,4) ans(:,:,1) = 0 0 0 0 0 0

ans(:,:,2) = 0 0 0 0 0 0

ans(:,:,3) = 0 0 0 0 0 0

ans(:,:,4) = 0 0 0 0 0 0

>> zeros([2,3,4]) ans(:,:,1) = 0 0 0 0 0 0

ans(:,:,2) = 0 0 0 0 0 0

ans(:,:,3) = 0 0 0 0 0 0

ans(:,:,4) = 0 0 0 0 0 0

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 42 -

zeros(size(A)): forma una matriz de las mismas dimensiones de la matriz A. De esta forma, utilizando la misma matriz A que anteriormente tenemos:

>> zeros(size(A)) ans = 0 0 0 0 0 0

Ones

La función ones genera una matriz de unos dependiendo de las dimensiones que se le introduzcan como argumento a dicha función. Sus variantes son muy parecidas a las de la función zeros obteniendo resultados similares con la diferencia de que todos los elementos de la matriz generada son unos. De esta forma tenemos: ones(n): genera una matriz de unos de dimensiones nxn con la restricción de que el valor de n sea un escalar:

>> ones(3) ans = 1 1 1 1 1 1 1 1 1

ones(m,n) o ones([m,n]): entrega como resultado una matriz de unos de dimensiones mxn:

>> ones(2,3) ans =

1 1 1 1 1 1

>> ones([2,3]) ans =

1 1 1 1 1 1

ones(size(A)): entrega una matriz de unos de las mismas dimensiones que A. utilizando la matriz A que se ha utilizado en casos anteriores tenemos:

>> ones(size(A)) ans = 1 1 1 1 1 1

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 43 -

ones(d1,d2,d3,…) o ones([d1,d2,d3,…]): crea una matriz de dimensiones d1, d2, d3, … cuyos elementos son únicamente unos:

>> ones(2,3,4) ans(:,:,1) =

1 1 1 1 1 1

ans(:,:,2) =

1 1 1 1 1 1

ans(:,:,3) =

1 1 1 1 1 1

ans(:,:,4) =

1 1 1 1 1 1

>> ones([2,3,4]) ans(:,:,1) =

1 1 1 1 1 1

ans(:,:,2) =

1 1 1 1 1 1

ans(:,:,3) =

1 1 1 1 1 1

ans(:,:,4) =

1 1 1 1 1 1

Linspace La función linspace genera vectores linealmente espaciados. Su función es similar a la del operador ‘:’ pero permite el control directo del número de puntos a utilizar. De esta forma, dicha función presenta dos variantes: linspace(a,b): genera un vector renglón de 100 puntos espaciados linealmente entre los valores de a y b incluyendo a estos en sus extremos. linspace(a,b,n): genera un vector renglón conformado por n putos espaciados linealmente entre si dentro del intrervalo (a,b) incluyendo estos valores como sus extremos. De esta forma tenemos:

>> linspace(3,4,5) ans = 3.0000 3.2500 3.5000 3.7500 4.0000

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 44 -

Logspace La función logspace genera de la misma forma que linspace un vector espaciado con la diferencia de que dicho espaciado es logarítmico. Resulta especialmente útil cuando se generan vectores de frecuencia. Del mismo modo que linspace, esta función presenta las siguientes variantes: logspace(a,b): genera un vector renglón de 50 puntos espaciados logarítmicamente. Dichos puntos se encuentran contenidos entre las décadas 10^a y 10^b. logspace(a,b,n): genera un vector renglón de n puntos espaciados logarítmicamente. De igual forma, los puntos que conforman dicho vector están contenidos entre las décadas 10^a y 10^b.

>> logspace(2,3,6) ans = 1.0e+003 * 0.1000 0.1585 0.2512 0.3981 0.6310 1.0000

logspace(a,pi): genera un vector renglón que contiene 50 puntos espaciados logarítmicamente entre la década 10^a y π. Esta función resulta de gran importancia en el procesamiento digital de señales donde las frecuencias sobre este intervalo se encuentran sobre el círculo unitario.

Rand La función rand genera arreglos de números aleatorios cuyos elementos se encuentran uniformemente distribuidos dentro del intervalo (0,1). De esta forma, las variantes para esta función son: rand(n): genera una matriz de dimensiones nxn cuyos valores son números aleatorios siempre y cuando el valor de n sea un escalar.

>> rand(3) ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 45 -

rand(m,n) o rand([m,n]): entrega como resultado una matriz de dimensiones mxn cuyas entradas son números aleatorios.

>> rand(2,3) ans = 0.4447 0.7919 0.7382 0.6154 0.9218 0.1763

>> rand([2,3]) ans = 0.4057 0.9169 0.8936 0.9355 0.4103 0.0579

rand(m,n,p,…) o rand([m n p…]): genera una matriz de orden superior con las dimensiones m, n, p, … cuyos elementos son números aleatorios.

>> rand(2,3,4) ans(:,:,1) = 0.3529 0.0099 0.2028 0.8132 0.1389 0.1987 ans(:,:,2) = 0.6038 0.1988 0.7468 0.2722 0.0153 0.4451 ans(:,:,3) = 0.9318 0.4186 0.5252 0.4660 0.8462 0.2026 ans(:,:,4) = 0.6721 0.0196 0.3795 0.8381 0.6813 0.8318

>> rand([2 3 4]) ans(:,:,1) = 0.5028 0.4289 0.1897 0.7095 0.3046 0.1934 ans(:,:,2) = 0.6822 0.5417 0.6979 0.3028 0.1509 0.3784 ans(:,:,3) = 0.8600 0.5936 0.8998 0.8537 0.4966 0.8216 ans(:,:,4) = 0.6449 0.6602 0.2897 0.8180 0.3420 0.3412

rand(size(A)): genera una matriz de números aleatorios del mismo tamaño que la matriz A. Utilizando la misma matriz A que en los casos anteriores tenemos:

>> rand(size(A)) ans = 0.5341 0.3093 0.5681 0.7271 0.8385 0.3704

rand: esta instrucción por sí misma entrega un escalar cuyo valor cambia de forma aleatoria cada vez que se llama a la función.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 46 -

Randn La función randn genera un arreglo de números aleatorios que se encuentran normalmente distribuidos con media igual a cero y varianza igual a uno, por lo que su desviación estándar es uno. Esta función también presenta una serie de variantes: randn(n): entrega una matriz de dimensiones nxn donde los valores de dicha matriz son números aleatorios normalmente distribuidos. En este caso n debe ser un escalar.

>> randn(3) ans = -0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273

randn(m,n) o randn([m,n]): genera una matriz de números aleatorios normalmente distribuidos de dimensiones mxn.

>> randn(2,3) ans = 0.1746 0.7258 2.1832 -0.1867 -0.5883 -0.1364

>> randn([2 3]) ans = 0.1139 0.0593 -0.8323 1.0668 -0.0956 0.2944

randn(size(A)): entrega como resultado un arreglo de números aleatorios normalmente distribuidos de las mismas dimensiones que A

>> randn(size(A)) ans = 0.3155 0.7079 0.5045 1.5532 1.9574 1.8645

randn: entrega un escalar cuyo valor cambia cada vez que se ejecuta el comando

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 47 -

randn(m,n,p,...) o randn([m n p …]): genera una matriz de números aleatorios normalmente distribuidos de dimensiones m, n , p …

>> randn(2,3,4) ans(:,:,1) = 0.5287 -0.9219 -0.0592 0.2193 -2.1707 -1.0106 ans(:,:,2) = 0.6145 1.6924 -0.6436 0.5077 0.5913 0.3803 ans(:,:,3) = -1.0091 -0.0482 -0.3179 -0.0195 0.0000 1.0950 ans(:,:,4) = -1.8740 0.8956 0.5779 0.4282 0.7310 0.0403

>> randn([2 3 4]) ans(:,:,1) = -1.3362 1.6236 0.8580 0.7143 -0.6918 1.2540 ans(:,:,2) = -1.5937 0.5711 0.6900 -1.4410 -0.3999 0.8156 ans(:,:,3) = 0.7119 0.6686 -1.2025 1.2902 1.1908 -0.0198 ans(:,:,4) = -0.1567 0.2573 1.4151 -1.6041 -1.0565 -0.8051

Magic La función magic entrega como resultado una matriz de dimensiones nxn construida mediante enteros que van desde 1 hasta n2. Esta matriz tiene la peculiaridad de que la suma de sus renglones columnas entrega el mismo resultado. De esta forma, el valor de n debe ser un escalar mayor o igual a 3. Si ahora tomamos el valor de n=3 tenemos la siguiente matriz:

>> B=magic(3) B = 8 1 6 3 5 7 4 9 2

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 48 -

Esta matriz es conocida como el cuadrado mágico ya que la suma de sus elementos en cada renglón y columna es el mismo. Si ahora comprobamos que lo anterior es cierto tenemos:

>> sum(B) ans = 15 15 15

>> sum(B')' ans = 15 15 15

Otra característica especial de esta matriz es que la suma de su diagonal también es igual a las sumas de sus columnas y renglones. Esto es:

>> sum(diag(B)) ans = 15

Existen otras funciones para crear matrices de tipos particulares. Con Help / Help Window se puede obtener información sobre todas las funciones disponibles en Matlab, que aparecen agrupadas por directorios.

6.5. Formación de una matriz a partir de otras Como se ha visto a lo largo de la sección anterior, es posible generar matrices a partir de otras ya existentes. En esta sección se describen algunas funciones adicionales mediante las cuales es posible crear dichas matrices obteniendo una gran diversidad de resultados. Dichas funciones son:

Size La función size obtiene el tamaño de una matriz sin importar las dimensiones que esta tenga. Así, utilizando esta función se pueden generar matrices de la siguiente manera: size(x): entrega como resultado un vector cuyos elementos son las dimensiones de la matriz que le sirve como argumento. De esta forma, si tomamos a la matriz A:

A = 1 2 3 4 5 6

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 49 -

Y aplicamos sobre ella la función size se obtiene el vector renglón:

>> d=size(A) d = 2 3

[m,n]=size(x): mediante esta sintaxis se obtiene el tamaño de la matriz x en dos variables por separado. Utilizando la matriz A como en casos anteriores tenemos:

>> [m,n]=size(A) m = 2 n = 3

De esta forma, conociendo las dimensiones de otra matriz se puede generar otra matriz que tenga las mismas dimensiones, por ejemplo, mediante el uso de las funciones que se estudiaron a lo largo de la sección anterior (ones, zeros,…).

Length

El comando length es equivalente a la función size con la diferencia de que éste entrega como resultado la dimensión más grande de la matriz. Esto es:

>> length(A) ans = 3

Diag La función diag entrega como resultado el vector columna que contiene los valores de la diagonal de la matriz que le sirve de argumento. De esta forma al aplicarlo sobre la matriz A de los casos anteriores:

>> diag(A) ans = 1 5

En este caso, al aplicar sobre el resultado anterior la función diag es posible generar una matriz cuadrada que contenga en su diagonal a la diagonal de la matriz original y ceros en todos los elementos restantes.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 50 -

Esto es:

>> diag(diag(A)) ans = 1 0 0 5

Triu El uso del comando triu entrega una matriz cuyos elementos contienen al triángulo superior de la matriz que le sirve de argumento. Esto es:

>> triu(A) ans = 1 2 3 0 5 6

Además, permite que el triángulo que entrega pueda reducirse o ampliarse dependiendo de la diagonal que se tome. Es decir, permite seleccionar una diagonal diferente de la diagonal principal. Esto es:

>> triu(A,2) ans = 0 0 3 0 0 0

Tril Esta función es equivalente a la función triu con la diferencia de que en este caso la matriz se forma con el triángulo inferior.

>> tril(A) ans = 1 0 0 4 5 0

Del mismo modo que la función anterior, la función tril permite seleccionar una diagonal diferente de la diagonal principal. Esto es:

>> tril(A,1) ans = 1 2 0

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 51 -

4 5 6 En ambos casos, si el valor de la diagonal seleccionada es cero entonces tomará a la diagonal principal para generar el triángulo dependiendo del caso.

Rot90 Esta función se utiliza para girar 90° la matriz original en sentido antihorario. De esta forma, la función presenta dos variantes: Rot90(A): gira a la matriz 90 grados en sentido antihorario.

>> rot90(A) ans = 3 6 2 5 1 4

Rot90(A,k): gira a la matriz 90*k grados con la restricción de que el valor de k sea entero.

>> rot90(A,2) ans = 6 5 4 3 2 1

Flipud La función flipud entrega a la matriz que le sirve como argumento pero con sus renglones invertidos de arriba para abajo con respecto a un eje horizontal. De esta forma, si la matriz es un vector columna, entonces la función entrega un vector de la misma longitud pero con sus elementos invertidos. En el caso en que sea un vector renglón entrega al mismo vector. Utilizando a la matriz A como en casos anteriores:

>> flipud(A) ans = 4 5 6 1 2 3

Fliplr La función fliplr entrega una matriz cuyos elementos se encuentran invertidos de izquierda a derecha tomando en cuenta un eje vertical. Si se habla de un vector renglón, entonces la función entrega al mismo vector pero con sus elementos invertidos. Si por el contrario se trata de un vector columna, entonces la función entrega al mismo vector.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 52 -

De esta forma, utilizando la matriz A tenemos:

>> fliplr(A) ans = 3 2 1 6 5 4

Reshape

La función reshape tiene la propiedad de cambiar la forma de la matriz entregando como resultado a otra matriz conformada por los elementos de la matriz original. Esta función tiene algunas variantes: reshape(A,m,n): entrega como resultado a una matriz de mxn cuyos elementos son tomados de la matriz original cambiando su forma. El programa envía un mensaje de error en el caso en que la matriz original no tenga las dimensiones mxn.

>> reshape(A,3,2) ans = 1 5 4 3 2 6

reshape(A,m,n,p,…) o reshape(A,[m n p …]): entrega como resultado una matriz n dimensional con los mismos elementos de la matriz original cambiando su forma.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 53 -

7. Gráficas en dos dimensiones El lenguaje de Matlab de una amplia variedad de funciones para desplegar los datos contenidos en un vector tanto como una línea, como una función para anotar e imprimir dichos gráficos. A lo largo de esta sección nos enfocaremos en la creación de gráficos en dos dimensiones. Matlab utiliza un tipo especial de ventanas para realizar las operaciones gráficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo lo que hay en ella, o bien añadiendo nuevos elementos gráficos a un dibujo anterior. De esta forma, Matlab dispone de cuatro funciones básicas para crear gráficos. Estas funciones se diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de ordenadas. Estas cuatro funciones son las siguientes: Función Descripción

Plot

Crea un gráfico a partir de vectores y/o columnas de matrices, con

escalas lineales sobre ambos ejes.

Loglog

Crea un gráfico a partir de vectores y/o columnas de matrices, con

escalas logarítmicas sobre ambos ejes.

Semilogx

Crea un gráfico a partir de vectores y/o columnas de matrices, con

escala lineal en el eje de las ordenadas y logarítmica en el eje de las abscisas.

Semilogy

Crea un gráfico a partir de vectores y/o columnas de matrices, con

escala lineal en el eje de las abscisas y logarítmica en el eje de las ordenadas.

Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno de los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas funciones son utilizadas con la finalidad de editar los gráficos y hacerlos más entendibles dependiendo del fin que tengan. Las funciones más usuales son: Función Descripción

title

El uso de esta función agregará al gráfico un título. Dicho título se

posiciona en la parte superior central del gráfico. De esta forma el nombre de gráfico puede incluirse en el grafico utilizando el comando:

title(‘nombre del gráfico’)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 54 -

Función Descripción

xlabel

Esta función agregará un título al eje x en el gráfico, posicionándolo en

la parte inferior central del gráfico. Esto se logra mediante el uso del comando:

xlabel(‘nombre del eje’)

ylabel

Del mismo modo que la función anterior, el uso de esta función

agregará al gráfico un título en la parte izquierda central. Esto se logra mediante el uso del comando

ylabel(‘nombre del eje’)

text

La utilidad de esta función radica en que es posible colocar un texto

dentro del gráfico proporcionando las coordenadas en x y y en donde se requiere posicionar dicho texto. Esto resulta de gran utilidad cuando se necesita ubicar un punto dentro del grafico. Esto se logra mediante el comando:

text(x,y,’etiqueta’)

gtext

Esta función permite colocar un texto en un grafico una vez que se ha

seleccionado su ubicación dentro del gráfico utilizando el Mouse.

legend

Permite colocar una legenda que identifica a cada uno de los elementos

que se han dibujado dentro del gráfico. Este comando permite su uso en un grafico que contiene n elementos, de la forma:

Legend(‘titulo1’,’titulo2’,’titulo3’,…)

grid

El uso de este comando agrega al gráfico una cuadrícula que permite

una visualización más exacta de los elementos incluidos dentro del gráfico

Borrar texto (u otros elementos gráficos) es un poco más complicado; de hecho, hay que preverlo de antemano. Para poder hacerlo hay que recuperar previamente el valor de retorno del comando con el cual se ha creado. Después hay que llamar a la función delete con ese valor como argumento. Hay funciones como plot que por defecto crean una nueva figura, y otras funciones como grid que se aplican a la ventana activa modificándola, y sólo crean una ventana nueva cuando no existe ninguna ya creada. Más adelante se verá que con la función hold pueden añadirse gráficos a una figura ya existente respetando su contenido.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 55 -

Cabe aclarar que en la tabla anterior únicamente se han descrito básicamente las funciones dado que algunas de ellas tienen variantes que se recomienda que el lector investigue por su cuenta dependiendo de la necesidad que tenga.

7.1. Función plot Esta es la función clave de todos los gráficos en dos dimensiones en Matlab. Ya se ha dicho que el elemento básico de los gráficos bidimensionales es el vector. Se utilizan también cadenas de 1, 2 ó 3 caracteres para indicar colores y tipos de línea. La función plot, en sus diversas variantes, no hace otra cosa que dibujar vectores. El resultado de este comando es que se abre una ventana mostrando la gráfica correspondiente. Por defecto, el color que se utiliza para la primera línea es el azul. Cuando a la función plot() se le pasa un único vector –real– como argumento, dicha función dibuja en ordenadas el valor de los n elementos del vector frente a los índices 1, 2,..., n del mismo en abscisas. Si el vector es complejo, el funcionamiento es bastante diferente. Una segunda forma de utilizar la función plot() es con dos vectores como argumentos. En este caso los elementos del segundo vector se representan en ordenadas frente a los valores del primero, que se representan en abscisas. La función plot() permite también dibujar múltiples curvas introduciendo varias parejas de vectores como argumentos. En este caso, cada uno de los segundos vectores se dibujan en ordenadas como función de los valores del primer vector de la pareja, que se representan en abscisas. Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot varios vectores complejos como argumentos, Matlab simplemente representa las partes reales y desprecia las partes imaginarias. Sin embargo, un único argumento complejo hace que se represente la parte real en abscisas, frente a la parte imaginaria en ordenadas. Como ya se ha dicho, si se incluye más de un vector complejo como argumento, se ignoran las partes imaginarias. Si se quiere dibujar varios vectores complejos, hay que separar explícitamente las partes reales e imaginarias de cada vector. El comando plot puede utilizarse también con matrices como argumentos. Por ejemplo:

Función Descripción

plot(A)

En este caso el comando dibuja los valores contenidos

en la matriz A contra el índice que lo identifica dentro de la matriz. Si A es una matriz compleja entonces esta función es equivalente a:

Plot(real(A),imag(A))

Esto solamente sucede en este caso ya que para

cualquier otro uso del comando la parte imaginaria es

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 56 -

ignorada Función Descripción

plot(X1,Y1,…)

Este comando permite graficar todos los puntos de Yn

contra Xn, lo que significa que este comando generará parejas de puntos (x,y) a partir de las dos matrices. De esta forma, las dimensiones de las matrices deben de coincidir para que el gráfico pueda dibujarse.

plot(X1,Y1,LineSpec,...)

Este comando grafica todas las líneas definidas como

la tercia Xn,Yn,LineSpec, donde LineSpec es una especificación de una línea que determina el tipo de línea, un símbolo marcador y un color para la línea. De esta forma, pueden mezclarse este tipo de tercias con parejas del tipo Xn,Yn

A continuación, se incluyen algunos ejemplos del uso del comando plot en sus variantes, junto con el código fuente que genera los gráficos obtenidos.

>> x=0:0.1:2*pi; >> y=sin(x); >> plot(y)

Figura 7.1.1 – gráfica del seno

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 57 -

>> x=0:0.1:2*pi; >> y=sin(x); >> plot(x,y)

Figura 7.1.2 – gráfica del seno

>> x=0:0.1:2*pi; >> y=sin(x); >> z=cos(x); >> plot(x,y,x,z)

Figura 7.1.3 – gráfica del seno y el coseno

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 58 -

7.2. Tipos de línea y marcadores en la función plot El lenguaje de Matlab permite la existencia de varios tipos de línea, marcadores y colores que pueden obtenerse mediante el uso del comando plot con el fin de que al usuario le sea más sencillo identificar una línea de otra. Esto se logra utilizando al comando de como plot(x,y,s), donde s es una cadena de caracteres compuesta de un elemento de cualquiera de las siguiente tres columnas: y amarillo . punto - línea sólida m magenta o círculo : línea punteada c cyan x marcas de x -. Línea de punto y raya r rojo + marcas de + -- línea a rayas g verde * estrellas b azul s cuadros w blanco d diamante k negro v triángulo (abajo) ^ triángulo (arriba) < triángulo (izquierda) > triángulo (derecha) p estrella de cinco puntas h estrella de seis puntas Un ejemplo del uso de estas características es plot(x,y,’c*:’), lo cual dibuja una línea punteada de color cyan con una estrella en cada punto que represente un dato. Cuando hay que dibujar varias líneas, por defecto se van escogiendo sucesivamente los colores comenzando por el azul, hacia abajo, y cuando se terminan se vuelve a empezar otra vez por el azul. Si el fondo es blanco, este color no se utiliza para las líneas. De esta forma, tomado como ejemplo las funciones tomadas para el ejemplo anterior, podemos generar el siguiente grafico aplicando un cambio de línea y marcador.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 59 -

Figura 7.2.1 – gráfica del seno y coseno con diferente tipo de línea y marcador

Para generar el gráfico anterior utilizamos el código siguiente:

>> x=0:0.1:2*pi; >> y=sin(x); >> z=cos(x); >> plot(x,y,'m.-',x,z,'g+')

7.3. Añadir líneas a una gráfica ya existente Existe la posibilidad de añadir líneas a un gráfico ya existente, sin deshacerlo o sin abrir una nueva ventana. Se utiliza para ello el comando hold. Esta función determina si se agregan nuevas líneas a un gráfico o si estos deben de ser reemplazados. Dicho comando tiene diversas variantes que permiten realizar ciertas acciones con el grafico. Estas variantes se describen en la siguiente gráfica.

Función Descripción

hold on Retiene el gráfico actual y algunas de las propiedades de sus ejes,

es decir, este comando permite agregar lineas al gráfico actual

hold off

Reinicia las propiedades de los gráficos a sus valores de inicio

antes de que se dibujen nuevas líneas

hold toggles

Mantiene el estado entre el estado de adición de una línea y el

reemplazo del gráfico existente

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 60 -

Cabe remarcar que aun que el estado en el que se encuentre el gráfico sea de hold on, en algunos casos al momento de adicionar una nueva línea al gráfico puede cambiar las propiedades de los ejes. Por ejemplo, al adicionar una línea pueden incrementarse los límites de los ejes si los datos a graficar lo requieren.

7.4. Comando subplot Una ventana gráfica se puede dividir en m particiones horizontales y n verticales, con objeto de representar múltiples gráficos en ella. Cada una de estas sub-ventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. Esto se logra mediante el uso del comando subplot el cual divide a la ventana de gáficos en gráficos rectangulares que se numeran dependiendo de la posición que ocupen en la ventana. Del mismo modo que para el comando plot, se puede añadir títulos a cada subplot, así como rótulos para los ejes. Se puede intentar también cambiar los tipos de línea. Para volver a la opción por defecto basta teclear el comando subplot(1,1,1). De esta forma, el comando tiene algunas variantes que se resumen en la siguiente tabla.

Función Descripción

subplot(m,n,p)

Genera una línea en el gráfico que se

encuentra en la posición p de una ventana de gráficos dividida en una matriz de mxn de gráficos.

subplot(m,n,p,'replace')

En el caso en que en la posición en que

se desea colocar un gráfico ya se encuentra ocupada, el uso de este comando permite borrar el elemento ya existente y remplazarlo por uno nuevo, lo que incluye nuevos ejes para dicho gráfico

Subplot('Position',[left bottom width height])

Este comando crea un eje en una

posición especificada por un vector de cuatro elementos. De esta forma las propiedades left, bottom, width y height (izquierda, fonfo, ancho y alto) se encuentran definidas como coordenadas normalizadas en el rango de 0.0 a 1.0

7.5. Control de los ejes

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 61 -

También en este punto Matlab tiene sus opciones por defecto, que en algunas ocasiones puede interesar cambiar. El comando básico es el comando axis. Por defecto, Matlab ajusta la escala de cada uno de los ejes de modo que varíe entre el mínimo y el máximo valor de los vectores a representar. Este es el llamado modo "auto", o modo automático. Para definir de modo explícito los valores máximo y mínimo según cada eje, se utiliza el comando axis([xmin, xmax, ymin, ymax]), mientras que axis('auto') devuelve el escalado de los ejes al valor por defecto o automático. Otros posibles usos de este comando son los siguientes:

Función Descripción

axis([xmin xmax ymin ymax]) Establece los límites para los ejes x y y actuales

v = axis

Entrega como resultado un vector renglón que contiene

los factores de escala de los ejes. El tamaño de este vector depende de si se esta trabajando en 2 o 3 dimensiones, por lo que en este caso entregará un vector de cuatro elementos.

Función Descripción

axis auto

Regresa los valores de los ejes a sus valores de defecto,

estableciendo los límites de los ejes automáticamente basándose en los valores máximo y mínimo tanto de x como de y. Es posible limitar dicha acción a un solo eje de la forma axis auto x o axis auto y según sea el caso.

axis manual o

axis(axis)

El uso de este comando mantiene la escala de los

límites actuales, de tal forma que si se requiere, las gráficas posteriores utilicen los mismos límites.

axis ij

Este comando posiciona el origen del sistema

coordenado en la esquina superior izquierda del gráfico. El eje i es el eje vertical, cuyos valores se incrementan desde la parte superior hasta la inferior. El eje j es el eje horizontal, cuyos valores se incrementan de izquierda a derecha.

axis xy

Dibuja la gráfica en el plano cartesiano de defecto, con

el origen del sistema ubicado en la esquina inferior izquierda. El eje x es el eje horizontal con valores que se incrementan de izquierda a derecha. El eje y es el eje vertical con valores que se incrementan de abajo hacia arriba.

axis equal

Establece una razón de escala con la finalidad de que

las unidades de datos sean las mismas en todas direcciones,

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 62 -

que es definido de acuerdo al rango de unidades que se tenga.

axis image

Es equivalente a la función anterior con la diferencia

de que el gráfico se ajusta alrededor de los datos.

axis square

El uso de este comando produce que el área del gráfico

se vuelva cuadrada. De esta forma, los ejes tienen longitudes iguales y ajusta los incrementos en ellos de acuerdo a las unidades de los datos.

Existen otras variantes del comando axis que no se han incluido a lo largo de esta sección, y que pueden ser consultados en la ayuda de Matlab mediante el comando help.

7.6. Manejo de ventanas de gráficos El manejo de las ventanas de gráficos se realiza mediante el uso de la función figure. En el momento en que se invoca a la función figure el lenguaje de Matlab crea una ventana de gráficos cuyas características son las de defecto establecidas originalmente. De esta forma, la función figure tiene algunas variantes que se incluyen a continuación.

Función Descripción

figure

Por sí sola, la función crea una ventana

de gráficos. Estas ventanas se despliegan individualmente en la pantalla.

Figure('PropertyName',PropertyValue,...)

Esta función crea una ventana de

gráficos utilizando los valores de especificados por el usuario. Los valores que éste no defina mediante el uso de esta función serán tomadas como las de defecto.

figure(h)

El uso de esta función realiza una de

dos acciones, dependiendo de si la ventana cuya identificación sea el número h existe o no. En el caso de que la función exista entonces el uso de esta función hará que esta ventana sea visible. En el caso en que no exista la función crea dicha ventana. Por lo tanto el valor de h debe ser un número entero.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 63 -

Otra función necesaria para el manejo de ventanas es la función close. Dicha función también presenta ciertas variantes. Función Descripción

close

Invocar esta función provoca que Matlab borre la ventana que se

encuentra activa en ese momento. Esta función es equivalente al a función gcf

close(h)

Esta función borra la figura identificada por h. En el caso en que h sea

una matriz, el comando eliminará todas las ventanas que sean identificadas por los valores que se encuentren contenidos en h

close all

Este comando elimina todas las ventanas que se encuentren abiertas,

estén activas o no.

Por último hablaremos de la finción clf. El comando clf elimina el contenido de la figura activa, es decir, la deja abierta pero vacía.

7.7. Otras funciones gráficas en dos dimensiones Existen otras funciones gráficas bidimensionales orientadas a generar otro tipo de gráficos distintos de los que produce la función plot y sus análogas. Algunas de estas funciones son las siguientes:

Bar La función bar dibuja una barra para cada elemento a graficar. En el caso de que se esté graficando una matriz, el comando produce un grupo de barras producidos por los elementos en cada renglón. El eje x tiene una escala que va de 1 hasta la longitud del vector a graficar, si este es el caso, y de 1 hasta el número de renglones de la matriz cuando se pretenda graficar una. Para esta función existen algunas variantes. Una de las más representativas es barh que crea barras horizontales para cada valor a graficar. A continuación se incluye un ejemplo de los resultados esperados en el uso de estos dos comandos.

>> x=0:10; >> y=2*x.^2; >> bar(x,y)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 64 -

Figura 7.7.1 – gráfica de barras utilizando el comando:

bar

>> x=0:10; >> y=2*x.^2; >> barh(x,y)

Figura 7.7.2 – gráfica de barras horizontales utilizando el comando:

barh

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 65 -

Bar3

La función bar3 dibuja barras tridimensionales donde cada elemento a graficar corresponde a una barra en la gráfica. En el caso en que se pretenda graficar un vector, el rango de escala del eje x va de 1 a la longitud del vector. Si se trata de una matriz, entonces el rango de escala en x toma valores ente 1 y el número de columnas de la matriz, agrupando los elementos de los renglones de la misma. Del mismo modo que la función anterior, esta función presenta una variante conocida como bar3h que de igual forma muestra barras horizontales en la gráfica. Este tipo de gráficas se ejemplifican a continuación.

x=0:10; y=2*x.^2; bar3(x,y)

Figura 7.7.3 – gráfica de barras en 3D utilizando el comando:

bar3

x=0:10; y=2*x.^2; bar3h(x,y)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 66 -

Figura 7.7.4 – gráfica de barras horizontales en 3D utilizando el comando:

bar3h

Pie El uso de este comando genera una gráfica de pastel generada a partir de los datos contenidos en un arreglo de datos. Cada elemento en el arreglo es representado por un porcentaje de un círculo que finalmente se asemejan a las rebanadas de un pastel. En la siguiente figura se muestra un ejemplo de una gráfica de pie:

x=1:10; y=2*x.^2; pie(x,y)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 67 -

Figura 7.7.5 – gráfica de pie

Area

El uso del comando area genera una gráfica similar a la que se genera mediante el uso del comando plot con la diferencia de que el comando area rellena el área bajo la curva a graficar. En el caso en que se trate de un vector este se grafica como tal, en el caso de que se trate de una matriz, el comando graficará la suma de cada columna. De esta forma, el eje x se escala automáticamente dependiendo de la longitud del vector a graficar, o del número de renglones en la matriz. En la siguiente figura se muestra un ejemplo del resultado esperado al graficar una función utilizando dicho comando.

x=1:10; y=2*x.^2; area(x,y)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 68 -

Figura 7.7.6 – gráfica utilizando el comando:

area Stairs

Al invocar la función stairs provoca que la grafica de la función se vea como una escalera de todos los elementos a graficar. En el caso en que se desee graficar un vector, la escala del rango del eje x varía desde 1 hasta el valor de la longitud del vector. Si se trata de una matriz entonces la escala del eje x es la del número de renglones en ella. En la siguiente figura se muestra el resultado esperado de esta función.

x=1:10; y=2*x.^2; stairs(x,y)

Figura 7.7.7 – gráfica de escalera utilizando el comando:

stairs

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 69 -

Errorbar En el caso de la función errorbar se grafican a los elementos junto con una barra de error para cada elemento. La barra de error es en si la distancia entre una curva superiri y una inferior, por lo que cada barra es simétrica y de tamaño 2*E, donde E es el error. En la siguiente grafica se muestra un ejemplo del resultado esperado del uso de la función.

x=1:10; y=2*x.^2; e=100*rand(size(y)) errorbar(x,y,e)

Figura 7.7.8 – grafica de errores utilizando el comando:

errorbar

Compass Una grafica realizada mediante el uso de la función compass despliega en el gráfico vectores de velocidad o de dirección como flechas que emanan desde el origen en el sistema cartesiano de coordenadas. Estas flechas son dibujadas en una rejilla circular. Un ejemplo de ello es la siguiente figura.

Z = eig(randn(10,10)); compass(Z)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 70 -

Figura 7.7.9 – grafica utilizando el comando:

compass

Feather La función feather tiene la cualidad de desplegar vectores que emanan de puntos equitativamente espaciados a lo largo del eje horizontal. De esta forma es posible espresar las componentes del vector con respecto al origen de dicho vector.

theta = (-90:10:90)*pi/180; r = 2*ones(size(theta)); [u,v] = pol2cart(theta,r); feather(u,v);

Figura 7.7.10 – gráfica utilizando el comando:

feather

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 71 -

Rose El comando rose crea un histograma angular, en el cual se muestra una gráfica polar con una distribución de los valores agrupados de acuerdo con su rango de valores numéricos.

theta = 2*pi*rand(1,50); rose(theta)

Figura 7.7.11 – gráfica utilizando el comando:

rose

Quiver El comando quiver despliega vectores de velocidad como flechas con componentes (U,V) en los puntos (X,Y). Las matrices X, Y, U, V deben de tener las mismas dimensiones y deben de contener las correspondientes componentes de posición y velocidad. De este modo, un ejemplo del resultado esperado es el que se muestra en la siguiente figura.

[X,Y] = meshgrid(-2:.2:2); Z = X.*exp(-X.^2 - Y.^2); [DX,DY] = gradient(Z,.2,.2); contour(X,Y,Z) hold on quiver(X,Y,DX,DY) colormap hsv grid off hold off

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 72 -

Figura 7.7.12 – gráfica utilizando el comando:

quiver

Stem Cuando se ocupa el comando stem en una gráfica bidimensional, se despliegan los datos como líneas que se extienden desde la base del eje x. En este caso, por defecto, las líneas son terminadas en círculos. Este círculo puede cambiarse por cualquier otro marcador. La finalidad de colocar un marcador en la línea es mostrar la posición de y en el gráfico. En el caso en que se esté graficando una matiz, la función realizará la gráfica de los elementos en un renglón contra el valor del eje x.

x=1:10; y=2*x.^2; stem(y)

Figura 7.7.13 – gráfica utilizando el comando:

stem

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 73 -

Polar La función polar se encarga de la graficación en coordenadas polares en vez de hacerlo en coordenadas cartesianas. Este comado dibuja una rejilla polar plana, donde los puntos a graficar se expresan en coordenadas polares, expresadas en términos de un ángulo y un radio, por lo que el origen del sistema coordenado se encuentra en el centro del grafico.

theta=-2*pi:0.1:2*pi; rho=sin(theta); polar(theta,abs(rho));

Figura 7.7.14 – grafica utilizando el comando:

polar

Hist La función hist muestra una distribución de los valores de los datos conocida como histograma. Los histogramas se utilizan para representar tablas de frecuencias con datos agrupados en intervalos. Si los intervalos son todos iguales, cada uno de ellos es la base de un rectángulo cuya altura es proporcional a la frecuencia de aparición de un dato en la muestra a graficar. El comando coloca los elementos a graficar en 10 intervalos igualmente espaciados y regresa un número de elementos en cada uno de los contenedores como un vector renglón. En el caso en que se requiera la gráfica de una matriz de tamaño mxp, este comando trata a las columnas como vectores y entrega como resultado una matriz de tamaño 10xp. Cada una de las columnas de la matriz resultante contiene los resultados obtenidos para cada uno de los valores de la matriz original.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 74 -

x=1:100; y=randn(size(x)); hist(y)

Figura 7.7.15 – gráfica de histograma utilizando el comando:

hist En todos los casos estudiados anteriormente existen variantes que permiten obtener diversos resultados dependiendo de la necesidad que se requiera satisfacer en el desarrollo de un programa. Estas variantes se encuentran disponibles en la ayuda de Matlab por lo que no se incluyen en este documento y se deja como ejercicio para el lector.

7.8. Ejemplos A lo largo de esta sección se incluyen algunos ejemplos adicionales a los descritos anteriormente. De igual forma que en la sección anterior, estos ejemplos incluyen el código fuente que genera las gráficas que se muestran. El propósito de estos ejemplos es mostrar la forma en que se puede visualizar una ventana de gráficos utilizando algunos de los comandos de edición de los que se ha hablado a lo largo de este capítulo. Como primer ejemplo, tenemos el siguiente conjunto de comandos, que abren una ventana gráfica con la función seno graficada:

x=-4:0.01:4; y=sin(x); plot(x,y,'r--'); grid on; title('Función seno(x)');

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 75 -

Figura 7.8.1 – ejemplo 1; grafica del seno

y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z; subplot(2,2,1), plot(x,y); subplot(2,2,2), plot(x,z) subplot(2,2,3), plot(x,w); subplot(2,2,4), plot(x,v);

Figura 7.8.2 – ejemplo 2: división de la ventana de gráficos

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 76 -

x=[-4*pi:pi/20:4*pi]; plot(x,sin(x),'r',x,cos(x),'g'); title('Función seno(x) -en rojo- y función coseno(x) -en verde-'); xlabel('ángulo en radianes'), figure(gcf); ylabel('valor de la función trigonométrica'), figure(gcf); axis([-12,12,-1.5,1.5]), figure(gcf); axis('on'), grid, figure(gcf);

Figura 7.8.3 – ejemplo 3: gráfica de dos funciones en la misma ventana de gráficos

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 77 -

8. Graficas en tres dimensiones

El lenguaje de Matlab permite no solo la graficación en dos dimensiones. Por el contrario, incluye una paquetería que es capaz de generar gráficos en tercera dimensión. De igual forma que en el caso de las gráficas en dos dimensiones, las graficas en tercera dimensión pueden ser editadas para hacerla más agradable a la vista. Así, también existen diversas funciones que permiten crear diferentes tipos de gráficos. Todo esto será tratado a lo largo de este capítulo, junto con algunos ejemplos para la comprensión de las tareas que realiza cada función.

8.1. Dibujo de líneas: función plot3

Una de las funciones más importantes en la creación de gráficos en tercera dimensión es probablemente el comando plot3. La función plot3 es análoga a al comando plot, utilizado para generar gráficas en dos dimensiones. A continuación se presentan las variantes de esta función junto con un ejemplo del resultado esperado de utilizarlas. plot3(x,y,z): este comando dibuja una línea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. y la proyecta sobre un plano para poderla representar en la pantalla. Este comando permite la graficación tanto de vectores como de matrices siempre y cuando estas sean del mismo tamaño con el fin de generar tercias de coordenadas para ubicar un punto.

t = 0:pi/50:10*pi; figure plot3(sin(t)-9,cos(t),t) grid on

Figura 8.1.1 – grafica utilizando la forma básica de plot3

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 78 -

plot3(x,y,z,s): a igual que en el caso plano, se puede incluir una cadena de 1, 2 ó 3 caracteres para determinar el color, los marcadores, y el tipo de línea a utilizar en la graficación de una función.

t = 0:pi/50:10*pi; plot3(sin(t)-9,cos(t),t,'rx') grid on

Figura 8.1.2 – grafica variando color y marcador

8.2. Dibujo de mallas: Funciones meshgrid, mesh y surf

A lo largo de esta sección se pretende explicar la forma en la que se puede dibujar una función de dos variables (z=f(x,y)) sobre un dominio rectangular. Se verá que también se pueden dibujar los elementos de una matriz como función de los dos índices. Sean x e y dos vectores que contienen las coordenadas en una y otra dirección de la retícula (grid) sobre la que se va a dibujar la función. Después hay que crear dos matrices X (cuyas filas son copias de x) y Y (cuyas columnas son copias de y). Estas matrices se crean con la función meshgrid. Estas matrices representan respectivamente las coordenadas x e y de todos los puntos de la retícula. La matriz de valores Z se calcula a partir de las matrices de coordenadas X e Y. Cabe remarcar que la función admite crear tres matrices, pero que no se utilizarán a lo largo de esta sección. Finalmente hay que dibujar esta matriz Z con la función mesh, cuyos elementos son función elemento a elemento de los elementos de X e Y. La función mesh dibuja en perspectiva una función en base a una retícula de líneas de colores, rodeando cuadriláteros del color de fondo, con eliminación de líneas ocultas.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 79 -

Más adelante se verá cómo controlar estos colores que aparecen. Con el comando surf(W) en vez de líneas aparece una superficie faceteada, también con eliminación de líneas ocultas. El color de las facetas depende también del valor de la función. De esta forma, las funciones mesh y surf están encargadas de crear los datos para generar un grafico en tres dimensiones.

8.3. Dibujo de líneas de contorno: funciones contour y contour3

Una forma distinta de representar funciones tridimensionales es por medio de isolíneas o curvas de nivel. Una curva de nivel es uno de los variados métodos que se utilizan para reflejar la forma tridimensional de una superficie. De esta forma, los comandos contour y contour3 generan gráficas de curvas de nivel en dos y tres dimensiones respectivamente. Éstas presentan algunas variantes que se resumen a continuación.

contour(Z):Este comando dibuja un contorno a partir de la matriz Z, que es interpretada como alturas con respecto al plano xy. El número de niveles y sus valores se eligen automáticamente, basándose en los valores máximo y mínimo de la matriz Z.

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); contour(Z);

Figura 8.3.1 – grafica de curvas de nivel

contour(Z,n): Este comando dibuja curvas de nivel a partir de los valores contenidos en la matriz Z, generando n contornos que representen los niveles de la gráfica.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 80 -

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); n=20; contour(Z,n);

Figura 8.3.2 – grafica de curvas de nivel con 20 niveles

De esta forma, el valor de n puede ser tanto un escalar como un vector obteniendo resultados diferentes. En el caso en que n sea un vector, el número de curvas de nivel dibujadas es igual al tamaño de n.

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); n=randn(70,1); contour(Z,n);

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 81 -

Figura 8.3.3 – gráfica de curvas de nivel con vector de 70 elementos

contour(X,Y,Z) y contour(X,Y,Z,n): Genera un contorno a partir de los valores de Z. Los valores de X y Y especifican los límites de los ejes x y y. En el caso en que X y Y sean matrices, estas deben de ser del mismo tamaño que Z.

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); n=randn(70,1); contour(X,Y,Z);

Figura 8.3.4 – gráfica de curvas de nivel

contour(...,LineSpec): dibuja un contorno utilizando un color y un tipo de línea específico, pero ignora los marcadores. [C,h] = contour(...): genera una matriz C y un vector de manejo de objetos gráficos. Por ello, el uso de este comando permite el uso de etiquetas conocidas como clabel que sirven para identificar cada nivel.

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); [C,h]=contour(X,Y,Z); clabel(C,h)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 82 -

Figura 8.3.5 – gráfica de curvas de nivel con etiquetas

contour3(Z): Genera una gráfica de curvas de nivel en tres dimensiones donde Z es interpretada como las Alturas con respecto al plano xy. De esta forma, Z debe de ser una matriz de 2x2 por lo menos. El número de niveles se escoge automáticamente.

[X,Y] = meshgrid([-1.5:.01:1.5]); Z = X.*exp(-X.^2-Y.^2); contour3(Z);

Figura 8.3.6 – grafica de curvas de nivel en 3D

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 83 -

contour3(Z,n): Como en el caso bidimensional, esta instrucción permite el manejo del número de niveles que ha de tener la gráfica. Del mismo modo, permite el uso de un vector para especificar el número de niveles a dibujar.

[X,Y] = meshgrid([-1.5:.01:1.5]); Z = X.*exp(-X.^2-Y.^2); contour3(Z,20);

Figura 8.3.7 – gráfica de curvas de nivel en 3D con 20 niveles

contour3(X,Y,Z) y contour3(X,Y,Z,n): Los valores de X y Y definen los límites de los ejes. En el caso en que sean matrices, éstas deben tener el mismo tamaño que Z.

[X,Y] = meshgrid([-1.5:.01:1.5]); Z = X.*exp(-X.^2-Y.^2); contour3(X,Y,Z,20);

Figura 8.3.8 – gráfica de curvas de nivel

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 84 -

contour3(...,LineSpec): genera contornos utilizando un tipo de línea y color específico. [C,h] = contour3(...): entrega como resultado una matriz C y h, las cuales permiten adicionar elementos al gráfico como etiquetas.

Existe otra función que permite generar curvas de nivel con la diferencia de que muestra a la gráfica rellena en vez de solamente mostrar las líneas que delimitan las curvas de nivel. Esta función es conturf que presenta exactamente las mismas variables que las que se presentaron anteriormente.

[X,Y] = meshgrid([-1.5:.01:1.5]); Z = X.*exp(-X.^2-Y.^2); contourf(Z,20);

Figura 8.3.9 – gráfica de curvas de nivel rellenas

8.4. Mapas de colores Un mapa de colores se define como una matriz de tamaño mx3, donde cada uno de sus elementos contiene un valor entre 0 y 1, que representa la intensidad de uno de los colores fundamentales: R (red o rojo), G (green o verde) y B (blue o azul). La longitud por defecto de los mapas de colores de Matlab es 64, es decir, cada mapa de color contiene 64 colores. De esta forma, cualquier elemento contenido dentro de dicha matriz que este por fuera del intervalo [0,1] causará un error en la ejecución del comando. Algunos mapas de colores están predefinidos en Matlab. Un mapa de color puede estableciendo invocando al comando colormap de la siguiente forma:

Colormap(mapa de color)

Así, los nombres del mapa de color que se aceptan como parámetros de este comando son los siguientes:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 85 -

Autumn: variación de color desde el rojo hasta el amarillo, pasando por el naranja

[X,Y] = meshgrid([-1.5:.01:1.5]); Z = X.*exp(-X.^2-Y.^2); contour(X,Y,Z,15); colormap(autumn)

Figura 8.4.1 – mapa de color autumn

Bone: genera un mapa de color en escalas de grises con un mayor número de componentes azules. Éste resulta especialmente útil para agregar una apariencia electrónica a una imagen en escala de grises.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(bone)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 86 -

Figura 8.4.2 – mapa de color bone colorcube: contiene tantos valores de color igualmente espaciados en RGB como sea posible, intentando generar un mayor número de colores grises, rojos, verdes y azules puros.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(colorcube)

Figura 8.4.3 – mapa de color colorcube

cool: consiste en la formación de colores que son matices de cian y magenta, de tal forma que varíen suavemente en esta gama de colores.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(cool)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 87 -

Figura 8.4.4 – mapa de color cool cooper: genera una variación suave en la gama que va del negro al cobre.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(copper)

Figura 8.4.5 – mapa de color copper

flag: consiste en variaciones de rojo, blanco, azul y negro. Este mapa de color cambia de color con cada incremento.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(flag)

Figura 8.4.6 – mapa de color flan

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 88 -

gray: entrega un mapa de color formado por una escala de grises lineal

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(gray)

Figura 8.4.7 – mapa de color gray

hot: genera un mapa de color que varía suavemente desde el negro pasando por

el rojo, el naranja, el amarillo hasta llegar al blanco

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(hot)

Figura 8.4.8 – mapa de color hot

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 89 -

hsv: genera un matiz de colores saturados que inicia con el rojo, pasa por el amarillo, el verde, el cian, el azul y el magenta regresando finalmente al rojo. Este resulta especialmente util cuando se desea desplegar funciones periódicas.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(hsv)

Figura 8.4.9 – mapa de color hsv

jet: genera un mapa de color que varía en la gama del azul al rojo. Es una variación de hsv.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(jet)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 90 -

Figura 8.4.10 – mapa de color jet lines: produce un mapa de color cuyos colores quedan especificados por la propiedad de los ejes ColorOrder y un matiz de grises.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(lines)

Figura 8.4.11 – mapa de color lines

pink: contiene un mapa de color que varía en colores rosa pastel. Este mapa de color provee las tonalidades sepia en fotografías blanco y negro.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(pink)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 91 -

Figura 8.4.12 – mapa de color pink prism: genera un mapa de color que repite los colores rojo, naranja, amarillo, verde, azul, y violeta

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(prism)

Figura 8.4.13 – mapa de color prism

spring: consiste en colores que se encuentran en la gama del magenta al amarillo.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(spring)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 92 -

Figura 8.4.14 – mapa de color spring summer: genera un mapa de color que se degrada entre el amarillo y el verde.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(summer)

Figura 8.4.15 – mapa de color summer

white: genera un mapa de color completamente blanco. Winter: genera un mapa de color que consiste e colores que se degradan del azul al verde.

[X,Y] = meshgrid([-2:.02:1.8]); Z =exp(-X.^2-Y.^2); bar(Z); colormap(winter)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 93 -

Figura 8.4.16 – mapa de color winter 8.5. Elementos generales: ejes, puntos de vista, líneas ocultas

Las funciones surf y mesh dibujan funciones tridimensionales en perspectiva. La localización del punto de vista o dirección de observación determina la orientación de los ejes. El punto de observación puede establecerse ya sea en términos de azimut y elevación o mediante un punto tridimensional en el espacio. Esto se puede hacer mediante la función view, cuyas variantes mas usuales se resumen en la siguiente tabla.

Función Descripción

view(azimut, elev)

Establece un ángulo de visión para una gráfica

tridimensional. En este caso, se refiere con azimut al ángulo de rotación en un plano horizontal, donde los valores positivos indican un giro antihorario en el punto de observación. En cuanto al parámetro elev, éste indicará la elevación del punto de observación. De esta forma, un valor positivo indicará la altura del punto de observación sobre la gráfica. Del mismo modo que el azimut, elev se encuentra expresado en grados.

view([xd,yd,zd])

Ubica el punto de observación de acuerdo a las coordenadas

cartesianas expresadas como (xd,yd,zd).

view(2)

Establece un punto de visión bidimensional donde el azimut

es igual a 0 y su elevación es de 90° .

view(3)

Establece un punto de observación por defecto donde el

azimut es igual a -37.5° y la elevación es de 30°.

En los gráficos tridimensionales existen funciones para controlar los ejes, por ejemplo:

axis([xmin,xmax,ymin,ymax,zmin,zmax]) También se pueden utilizar las funciones siguientes: xlabel, ylabel, zlabel, axis(’auto’), axis(axis), etc. Las funciones mesh y surf disponen de un algoritmo de eliminación de líneas ocultas (los polígonos o facetas, no dejan ver las líneas que están detrás). El comando hidden activa y desactiva la eliminación de líneas ocultas. En el dibujo de funciones tridimensionales, a veces también son útiles los NaNs. Cuando una parte de los elementos de la matriz de valores Z son NaNs, esa parte de la superficie no se dibuja, permitiendo ver el resto de la superficie.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 94 -

9. Estadística Matlab cuenta con funciones de estadística conocida como Statistics Toolbox que contiene las funciones básicas a nivel de ingeniería y estadística científica. Las funciones de estadística construyen bloques adecuados para su uso con otras herramientas analíticas. De esta forma, Statistics Toolbox soporta una amplia gama de tareas de estadística comunes que van desde la generación de números aleatorios hasta el diseño de experimentos y procesos de control. El Statistics Toolbox tiene más de 200 M-files, proporcionando ayuda en las siguientes áreas de interés:

Distribuciones de probabilidad Las distribuciones de probabilidad surgen de experimentos donde los resultados obtenidos se encuentran sujetos al azar. La naturaleza de dichos experimentos dictaminan cual de las distribuciones de probabilidad es la más apropiada para modelar los resultados aleatorios obtenidos. Existen dos tipos de distribuciones de probabilidad: continuas y discretas.

Datos continuos Estadística contínua Discreta Beta Chi cuadrada Binomial

Exponencial Chi cuadrada no central Uniforme discreta Gama F Geométrica

Logonormal F no central Hipergeométrica Normal t Binomial negativa

Rayleigh t no central Poisson Uniforme Weibull

El Statistics Toolbox soporta estas 20 distribuciones de probabilidad. Además existen otras cinco funciones asociadas a estas distribuciones:

Función de densidad de probabilidad (pdf) Función de distribución acumulativa (cdf) Función de distribución acumulativa inversa Generador de números aleatorios Media y varianza como función de los parámetros

Para las distribuciones beta, binomial, exponencial, gamma, normal, Poisson, uniforme y Weibull, el Statistics Toolbox tiene funciones para calcular estimaciones de parámetros e intervalos de confianza.

Estadística descriptiva Una muestra puede estar compuesta de miles, incluso millones de valores. Por ello, existe lo que se conoce como estadística descriptiva que es una forma de reducir la

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 95 -

muestra en un menor número de valores que contengan la información mas relevante del fenómeno a estudiar. El Statistics Toolbox proporciona funciones para describir las características de una muestra de datos. Esto incluye parámetros locales y de dispersión. Estas funciones se enumeran a continuación:

Medidas de tendencia central Medidas de dispersión Funciones para datos con valores faltantes Funciones para datos agrupados Porcentajes y gráficas

Modelos lineales Los modelos lineales representan la relación entre la respuesta de una variable continua y variables más predecibles de la forma:

y Xβ ε= + Que es la forma general de una recta. Matlab utiliza esta forma general del modelo lineal para resolver una gran variedad de regresiones específicas y en problemas de análisis de varianza conocidos como ANOVA. En el caso del análisis de la covarianza existe lo que se conoce como ANOCOVA. Ambas funciones se encuentran contenidas en el Statistics Toolbox entre otras que generan modelos lineales.

Pruebas de hipótesis Una prueba de hipótesis es un procedimiento enfocado a determinar si una afirmación sobre una característica hecha acerca de una población es razonable. El Statistics Toolbox también proporciona funciones que realizan las pruebas de hipótesis más comunes (pruebas t, pruebas z, pruebas no paramétricas, y pruebas de distribución).

Gráficas estadísticas El Statistics Toolbox realiza gráficas de probabilidad, de interpolación y predicción de datos. También se puede identificar puntos en dichas gráficas, y explorar interactivamente un modelo de regresión lineal. De esta forma, el Statistics Toolbox agrega como herramienta la realización de gráficas especializadas, las cuales pueden ser de tres tipos:

- Box plots: son gráficas que describen las muestras de datos. Resulta útiles en comparaciones gráficas de las medias de varias muestras.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 96 -

- Distribution plots: son gráficos que permiten la visualización de una o

más muestras. Este tipo de gráficas incluye a las gráficas normal y Weibull, así como las gráficas de distribuciones acumulativas.

- Scatter plots: son gráficos utilizados en la visualización de las relaciones

entre un par de variables o varios pares de ellas. En versiones agrupadas de este tipo de gráficos se utilizan símbolos diferentes para indicar la pertenencia a un grupo.

9.1. Generación de números aleatorios

Las funciones de generación de números aleatorios para varias distribuciones de probabilidad están basadas en las funciones randn y rand. rand(x) genera números aleatorios distribuidos uniformemente, mientras que randn(x) genera números aleatorios distribuidos normalmente, como se vio en la sección 6.4. Por ejemplo:

>> seed=2; >> rand(seed) ans = 0.9501 0.6068 0.2311 0.4860

De esta forma, es posible generar números aleatorios para cada distribución. Esta función proporciona un número aleatorio o una matriz de números aleatorios, dependiendo de los argumentos que se especifiquen en la función. Por ejemplo, veamos la manera de generar números aleatorios para la distribución beta. Se muestran cuatro enunciados para obtener números aleatorios: el primero regresa un solo número aleatorio, el segundo regresa una matriz de números aleatorios de 2x2, y el tercero y cuarto regresan matrices de 2x3:

>> a=1; b=2; c = [.1 .5; 1 2]; d = [.25 .75; 5 10]; m = [2 3]; >> nrow=2; ncol=3; >> r1=betarnd(a,b) r1 = 0.0518 >> r2=betarnd(c,d) r2 = 0.2016 0.0004 0.0372 0.4247 >> r3=betarnd(a,b,m) r3 = 0.5666 0.1973 0.1975 0.2075 0.0370 0.4222

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 97 -

>> r4=betarnd(a,b,nrow,ncol) r4 = 0.1624 0.4580 0.0848 0.0629 0.2750 0.1344

9.2. Medidas de tendencia central

El propósito de las medidas de tendencia central es localizar ciertos datos en un renglón de números. Estas medidas pueden ser la media geométrica, la media armónica, la media y la mediana. Dichas medidas pueden ser obtenidas mediante el uso del lenguaje Matlab a través de los siguientes comandos: geomean: este comando calcula la media geométrica de una muestra. En vectores, el uso del comando entregará como resultado la media geométrica de los elementos contenidos en el vector. En el caso de que se trate de una matriz, el comando entregará como resultado un vector renglón que contenga la media geométrica de cada columna que conforme la matriz. De esta forma, para una matriz de números aleatorios de taamaño 3x3 y para un vector de 3 elementos tenemos:

>> geomean(a) ans = 0.6766 0.5486 0.4151 >> geomean(b) ans = 0.2238

La media geométrica es obtenida mediante la siguiente ecuación:

1

1

n n

ii

m x=

⎡ ⎤= ⎢ ⎥⎣ ⎦∏

harmmean: este comando calcula la media armónica de una muestra. En el caso de los vectores, este comando calcula la media armónica para todos los elementos del vector. De igual forma que el comando anterior, en el caso de que se trate de una matriz entrega como resultado un vector renglón que contiene la media armónica de cada columna que la conforma. Retomando el ejemplo anterior tenemos:

>> harmmean(a) ans = 0.6439 0.5248 0.3603 >> harmmean(b) ans = 0.0560

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 98 -

La ecuación que permite calcular dicha medida es la siguiente:

1

1n

i i

nm

x=

=∑

mean: calcula la media de una muestra. Este comando se comporta igual que los anteriores en cuanto al tipo de parámetro introducido, esto es entregando un solo valor en el caso de n vector, y un vector renglón en el caso de una matriz. Retomando el ejemplo anterior tenemos:

>> mean(a) ans = 0.7079 0.5770 0.4666 >> mean(b) ans = 0.5130

La ecuación mediante la cual se calcula la media de la muestra es la siguiente:

1

1 n

j iji

x xn =

= ∑

median: este comando calcula el valor de la mediana, la cual esta definida como el 50% de la muestra. La mediana es un estimado robusto del centro de los datos de la muestra. Del mismo modo que los anteriores, en el caso de tener un vector, entregará la mediana de sus elementos. En cuanto a una matriz, entregará un vector renglón que contiene la mediana de cada columna de la matriz. Retomando el ejemplo anterior tenemos:

>> median(a) ans = 0.7468 0.4660 0.5252 >> median(b) ans = 0.6813

9.3. Medidas de dispersión

Se define como medidas de dispersión a los parámetros estadísticos que miden que tan diseminados se encuentran los datos de una distribución. Los más utilizados se refieren al grado de lejanía de los datos respecto a la media y son la desviación media, la varianza, la desviación típica y el coeficiente de variación.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 99 -

Matlab cuenta con algunas funciones que permiten encontrar estas medidas de dispersión. Dichas funciones se encuentran contenidas en el Statistics Toolbox. Algunas de estas funciones son: mad: calcula la desviación absoluta de la media para un cierto conjunto de datos. En este caso, si el conjunto de datos se expresa como un vector entonces el comando calcula la desviación de dicho conjunto. En el caso de una matriz, el comando genera un vector renglón que contiene la desviación para cada columna de la matriz. El comando mad es menos eficiente que la desviación estándar como una medida de dispersión cuando se habla de una distribución normal. Para una matriz de 4x4 de números aleatorios y un vector de 10 números aleatorios tenemos:

>> mad(a) ans = 0.2100 0.2946 0.1383 0.2695 >> mad(b) ans = 0.3333

range: el uso de este comando produce como resultado la diferencia entre el valor máximo y mínimo de la muestra, esto es, el rango de la muestra. El resultado entregado por el comando puede ser representado en forma de un solo valor o un vector renglón dependiendo del parámetro utilizado, esto es, de forma análoga al comando mad. El rango es una medida de dispersión que puede ser fácilmente calculado, pero tiene la desventaja de ser un estimador poco confiable. Retomando el ejemplo anterior tenemos:

>> range(a) ans = 0.7190 0.8728 0.3767 0.7455 >> range(b) ans = 0.9256

std: calcula la desviación estándar de la muestra, entregando sus respuestas de la misma forma en que lo hacen los comandos antaeriores. El comando normaliza por n-1 donde n es el tamaño de la muestra. La desviación estandas es calculada mediante la ecuación:

( )122

1

11

n

ii

s x xn =

⎛ ⎞= −⎜ ⎟−⎝ ⎠∑

Donde: 1

ix xn

= ∑

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 100 -

Retomando el ejemplo anterior tenemos:

>> std(a) ans = 0.2987 0.3879 0.1747 0.3335 >> std(b) ans = 0.3791

var: esta comando calcula la varianza de la muestra presentando sus resultados en forma análoga a los comandos anteriores. Retomando el ejemplo anterior tenemos:

>> var(a) ans = 0.0892 0.1505 0.0305 0.1112 >> var(b) ans = 0.1437

En este caso existen ciertas variaciones que el usuario puede invocar dependiendo de sus necesidades a lo largo de la programación por lo que se recomienda al lector consultar las ayudas de Matlab en el momento en que se desee obtener esta medida de dispersión.

9.4. Funciones varias

Además de las funciones mostradas anteriormente existen otras funciones que permiten obtener cálculos estadísticos usuales. Las funciones estadísticas de Matlab incluyen: cov: este comando calcula una matriz de covarianzas. Para un vector, el comando entrega como resultado un valor único. En el caso de las matrices, cada renglón se interpreta como una observación y cada columna como una variable, por lo que se entrega como resultado una matriz. Si retomamos como ejemplo a un vector de diez elementos y a una matriz de 4x4 ambos generados mediante números aleatorios uniformemente distribuidos tenemos:

>> cov(a) ans = 0.0374 0.0264 -0.0127 0.0422 0.0264 0.1602 -0.0069 -0.0100 -0.0127 -0.0069 0.0373 0.0394 0.0422 -0.0100 0.0394 0.1484 >> cov(b) ans = 0.0519

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 101 -

corrcoef: entrega como resultado una matriz R de coeficientes de correlación calculados de una matriz de entrada cuyos renglones son observaciones y cuyas columnas son variables. De esta forma, el comando se relaciona con la covarianza de la siguiente manera:

( ) ( ),,

( , ) ( , )C i j

R i jC i i C j j

=

Retomando el ejemplo anterior:

>> corrcoef(a) ans = 1.0000 0.3417 -0.3405 0.5661 0.3417 1.0000 -0.0890 -0.0650 -0.3405 -0.0890 1.0000 0.5296 0.5661 -0.0650 0.5296 1.0000 >> corrcoef(b) ans = 1

cumprod: entrega como resultado el producto acumulativo de un arreglo. Si se trata de un vector, el comando entrega un vector que contiene el producto acumulativo de los elementos contenidos en el vector. En el caso de una matriz, entrega una matriz del mismo tamaño que contiene los productos acumulativos de cada columna de la matriz. Tomando como ejemplo las siguientes matrices:

A = 1 2 3 4 5 6 7 8 9 B = 1 2 3 4 5 6 7 8 9

Tenemos:

>> cumprod(A) ans = 1 2 3 4 10 18 28 80 162 >> cumprod(B) ans = 1 2 6 24 120 720 5040 40320 362880

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 102 -

cumsum: entrega como resultado la suma acumulativa sobre un arreglo. Si se trata de un vector, el comando entrega un vector que contiene la suma acumulativa de los elementos del vector. Si se trata de una matriz, entrega una matriz del mismo tamaño que contiene la suma acumulativa por cada columna. Retomando el ejemplo anterior tenemos:

>> cumsum(A) ans = 1 2 3 5 7 9 12 15 18 >> cumsum(B) ans = 1 3 6 10 15 21 28 36 45

diff: calcula las diferencias entre elementos adyacentes en un arreglo. Si se trata de un vector, el comando entrega un vector con un elemento menos que el vector original que contiene las diferencias entre los elementos adyacentes del mismo. Esto es:

[X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)]

En el caso en que se tenga una matriz, el comando entrega las diferencias por renglón:

[X(2:m,:)-X(1:m-1,:)] Retomando el ejemplo anterior tenemos:

>> diff(A) ans = 3 3 3 3 3 3 >> diff(B) ans = 1 1 1 1 1 1 1 1

prod: entrega como resultado los productos realizados sobre un arreglo. En el caso de un vector, el comando entrega el producto de sus elementos. Si es una matriz, el comando interpreta las columnas de dicha matriz como vectores individuales, entregando como resultado un vector renglón que contiene los productos de cada columna. Retomando el ejemplo anterior tenemos:

>> prod(A) ans = 28 80 162

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 103 -

>> prod(B) ans = 362880

sort: ordena los elementos de un arreglo de forma ascendente. En el caso de que se trate de una matriz, el comando interpreta cada columna como un vector, ordenándolo de forma ascendente. Si tomamos como ejemplo:

A = 11 24 33 4 15 68 1 3 2 B = 1 3 2 4 9 5 8 6 7

Tenemos:

>> sort(A) ans = 1 3 2 4 15 33 11 24 68 >> sort(B) ans = 1 2 3 4 5 6 7 8 9

Para más información, se recomienda al lector consultar el documento en PDF stats.pdf que se incluye en la documentación de Matlab.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 104 -

10. Programación en Matlab

10.1. Conceptos útiles para programar

Para realizar un programa, es conveniente realizarlo en la ventana del Editor & Debugger, la cual se abre con el comando edit. Esto permite generar un archivo M que facilita la programación. El uso de este comando abrirá una ventana como la que se muestra en la figura 10.1.1.

Figura 10.1.1 – ventana de edición de programas Esta ventana cuenta con botones que permiten un rápido acceso a las funciones más utilizadas como guardar o ejecutar. Estos botones se muestran de igual forma en la figura 10.1.1. Otra forma de ejecutar un programa es mediante el uso de la tecla F5. Una vez que se ha ejecutado el programa, si existen errores, el programa no se ejecutará y los errores aparecerán en la línea de comandos, marcados en rojo. Matlab tiene la particularidad de indicar el error así como la línea de comando que lo genera. Para documentar un programa y hacerlos más entendible se pueden introducir comentarios. Matlab considera comentarios todo lo que va desde el carácter por ciento (%) hasta el final de la línea, marcando cada comentario en verde. Por ejemplo:

z=y1.*p1+y2.*p2; %señal modulada figure(3);

Un operador valioso al programar es el operador dos puntos (:). Este operador es muy importante en Matlab y puede usarse de varias formas. Por ejemplo, defínase un vector x con el siguiente comando:

» x=1:10 x =

GuardarAbrirNuevo

Espacio de

edición

Ejecutar

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 105 -

1 2 3 4 5 6 7 8 9 10 En cierta forma se puede decir que el operador (:) representa un rango: en este caso, los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador puede también utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el incremento va entre el valor inferior y el superior, en las formas que se muestran a continuación:

» x=1:2:10 x = 1 3 5 7 9 » x=1:1.5:10 x = 1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000 » x=10:-1:1 x = 10 9 8 7 6 5 4 3 2 1

Otro operador importante a lo largo de la programación es el punto y coma (;). El punto y coma permite ocultar los resultados de la operación anterior, evitando que estos se muestren en la línea de comandos.

10.2. Ciclo for La sentencia for repite un conjunto de sentencias un número predeterminado de veces. La sentencia for de Matlab es muy diferente y no tiene la generalidad de la sentencia for de C / C++ / Java. Existen diversas formas de generar un ciclo for. La forma mas sencilla es la siguiente:

for i=1:n sentencias end

De esta forma, las sentencias contenidas dentro del ciclo son repetidas n veces, almacenando cada vez un nievo valor en la variable i (variable de bucle), incrementándola de 1 en 1. sin embargo, el incremento que se maneja en el ciclo puede variar. En el siguiente ejemplo se presenta un caso más general para la variable del bucle, esto es siguiendo la forma:

(valor_inicial: incremento: valor_final)

Así, el bucle se ejecuta por primera vez con i=valor inicial, y luego i varía dependiendo del incremento que se este manejando hasta llegar al valor final. Cabe remarcar que dicho incremento puede ser positivo o negativo, incrementando o decrementando el valor de la variable de bucle con respecto a su valor inicial.

for i=n:-0.2:1 sentencias

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 106 -

end Del mismo modo como sucede para el lenguaje de programación C++, el lenguaje de Matlab permite generar ciclos anidados. En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La variable j es la que varía más rápidamente (por cada valor de i, j toma todos sus posibles valores):

for i=1:m for j=1:n sentencias end end

Una última forma de interés del bucle for es en la que se utiliza una matriz para variar el valor de la variable de bucle:

for i=A sentencias end

En la que la variable i es un vector que va tomando en cada iteración el valor de una de las columnas de A.

10.3. Ciclo while La estructura del bucle while es muy similar a la de C/C++/Java. Tiene la función de repetir las sentencias un número indefinido de veces siempre y cuando se cumpla una condición que puede ser expresada mediante los operadores ==, <, >, <=, >=, o ~=. Su sintaxis es la siguiente:

while condición sentencias end

donde condición puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condición, es decir, mientras haya algún o algunos elementos true. El bucle se termina cuando todos los elementos de condición son false (es decir, cero). Del mismo modo que el comando for, es posible anidar ciclos while dentro de otros ciclos while, así como es posible combinar ambos ciclos anidándolos unos en otros.

10.4. Estructuras if-else-end La estructura if – else – end se utiliza en los casos en los que si se cumple una condición, entonces se realiza una acción o un conjunto de ellas. En el caso contrario, en el que la condición no se cumpla, entonces se ejecutarán un conjunto diferente de

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 107 -

acciones, teniendo así una estructura que es capaz de tomar decisiones tomando como referencia la condición correcta. En su forma más simple, la sentencia if se escribe de la siguiente forma:

if condición sentencias end

De esta forma, el lenguaje de Matlab evalúa la expresión que se tiene como condición de tal forma que se obtenga un valor lógico dependiendo de si el resultado es cierto (1) o falso (0). Así, la condición debe de ser del tipo lógico, expresada por los operadores ==, <, >, <=, >=, o ~=. Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se desee, y que tiene la forma:

if condición1 bloque1 elseif condición2 bloque2 elseif condición3 bloque3 else % opción por defecto cuando no se cumplan las condiciones 1,2,3 bloque4 end

En este caso, la opción por defecto else puede ser omitida: si no está presente no se hace nada en caso de que no se cumpla ninguna de las condiciones. Una observación muy importante: la condición del if puede ser una condición matricial, del tipo A==B, donde A y B son matrices del mismo tamaño. Para que se considere que la condición se cumple, es necesario que sean iguales dos a dos todos los elementos de las matrices A y B. Basta que haya dos elementos diferentes para que las matrices no sean iguales, y por tanto las sentencias del if no se ejecuten. Análogamente, una condición en la forma A~=B exige que todos los elementos sean diferentes dos a dos. Bastaría que hubiera dos elementos iguales para que la condición no se cumpliese.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 108 -

11. Fundamentos de las interfaces gráficas con Matlab

Matlab permite desarrollar un conjunto de pantallas con botones, menús, ventanas, etc., que permiten utilizar de manera muy simple programas realizados en el entorno Windows. Este conjunto de herramientas se denomina interfaz de usuario. Para poder hacer programas que utilicen las capacidades gráficas avanzadas de Matlab hay que conocer algunos conceptos, que se explican en las secciones siguientes.

11.1. Objetos gráficos de Matlab

Los elementos básicos de dibujo utilizados en Matlab para desplegar datos y crear una interfaz gráfica de usuario se conoce como objeto de manejo de gráficos. De esta forma cada objeto es asociado con un identificador único conocido como manejador. Utilizando dicho manejador, es posible manipular las características o propiedades del un objeto gráfico existente. También es posible especificar valores para dichas propiedades en el momento en que se crea un objeto. Dichos objetos se encuentran organizados en tres jerarquias:

La naturaleza jerárquica del manejador de gráficos se basa en las interdependencias de varios objetos gráficos. Por ejemplo, para dibujar un objeto línea, se necesita una ventana del tipo figure para desplegar dicha línea. De esta forma, el objeto más general, o mejor dicho el de jerarquía más alta, es el objeto root o raiz. Como su nombre lo dice, este objeto es la raíz de todos los demás y sólo puede haber un objeto root. Dicho objeto no se crea pero es posible establecer algunas características que afectan en el despliegue de gráficos.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 109 -

El objeto root puede contener una o más ventanas (figures), donde se despliegan los gráficos. Matlab no limita el número de ventanas que se puedan crear, esto solo se encuentra limitado por las capacidades de la máquina donde se este programando. Todas las ventanas creadas son subordinadas del objeto root así como todos los objetos gráficos se encuentran subordinadas a la ventana. Todas las funciones que generan gráficos crean una ventana de forma automática en caso de que esta no exista. En el caso en que existan más de una ventana, una de ellas es designada como la ventana actual o current figure, siendo esta ventana en donde se realizan todos los gráficos. Una ventana puede tener también objetos de control conocidos como uicontrol que son los controles de la interfaz de usuario que ejecuta rutinas cada vez que el usuarui activa un objeto. Existen diversos controles de este estilo tales como botones, barras de desplazamiento, botones de selección o de opción, etc. Dentro del mismo nivel de jerarquía que los controles uicontrol se encuentra lo que se conoce como uimenu, que es un objeto que genera menus parecidos a los que se utilizan en el ambiente Windows, ejecuntando rutinas cuando el usuario selecciona algun elemento del menu. A su vez cada una de las ventanas puede tener uno o más ejes de coordenadas (axes) que definene una region en una ventana y orienta a sus subordinados dentro de dicha región. Los subordinados de los ejes son las imágenes, la luz, la línea, los parches, las superficies y los textos. En el caso en que exisan múltiples ejes entonces de forma análoga a lo que sucede con las ventanas se designa a uno de ellos como eje actual o current axes que es el que sirve como objetivo al momento de desplegar un objeto gráfico somo los subordinados antes mencionados. En el último nivel jerárquico se encuentran siete objetos que son a su vez subordinados de los ejes. El objeto image o imagen consiste en una matriz de datos y la posibilidad de un mapa de color. Existen tres tipos básicos de imágenque difieren se alguna forma de la matriz de datos que son interpretados como colores de píxel, estos son indexado, intensidad y color verdadero. El objeto light o luz define las fuentes de luz que afectan a los objetos parche y superficie contenidos en los ejes. Este objeto no es visible, pero puede configurarse controlando el tipo de luz, la fuente, el color, la ubicación y otras propiedades comunes en los objetos gráficos. Los objetos line o linea son objetos gráficos primitivos utilizadoe en la mayoria de las gráficas en dos y tres dimensiones. Los ejes coordenados son establecidos por los objetos axes, que posicionan y orientan a la línea. Por otro lado, el objeto patch es un polígono relleno con bordes. Un solo objeto patch puede contener múltiples caras, cada una coloreada de forma independiente con colores sólidos o interpolados. De esta forma, los comandos fill, fill3 y contour3 pueden crear un objeto patch, el cual se orienta según los ejes coordenados establecidos por el objeto axes.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 110 -

Los objetos rectangle o rectángulo son objetos en dos dimensiones de relleno de áreas que pueden tener formas que varían del rectángulo a la elipse. Resultan en especial útiles en la creación de gráficos del tipo de diagramas de flujo. El objeto surface o superficie es la representacion en tres dimensiones de una matriz de datos creada por la graficación para cada elemento de una matriz como una altura sobre el plano XY. Las gráficas mediante el uso de este objeto se componen de cuadriláteros cuyos vertices son especificados por la matriz de datos. Los objetos text o texto son cadenas de caracteres, los cuales se ubican en relación a los ejes coordenados. En general, un objeto texto puede crearse medainte los comandos title, xlabel, ylabel, zlabel, y gtext. Cuando se borra un objeto de Matlab automáticamente se borran todos los objetos que son sus descendientes. Por ejemplo, al borrar unos ejes, se borran todas las líneas y polígonos que son hijos suyos.

11.2. Identificadores Cada uno de los objetos de Matlab tiene un identificador único conocido como handle o id. Entonces, en el caso en que se desee acceder a las propiedades de n objeto en particular, es posible asignar el handle del objeto a una variable en el momento de la creacción de dicho objeto para evitar la busqueda de dicho valor en otro momento. De cualquier forma, siempre es posible obtener el handle para un objeto existente mediante el uso de la función findobj. Algunos gráficos tienen muchos objetos, en cuyo caso tienen múltiples handles. El objeto root (pantalla) es siempre único y su identificador es el cero. El identificador de las ventanas puede asignarse de dos formas, la primera es un entero que aparece en la barra de nombre de dicha ventana. La segunda es un número fraccionario conocido como de punto flotante requiriendo por tanto de la precisión interna de Matlab. Los identificadores de otros elementos gráficos son números float, que pueden ser obtenidos como valor de retorno y almacenados en variables de Matlab. Matlab puede tener varias ventanas abiertas, pero siempre hay una y sólo una que es la ventana activa. A su vez una ventana puede tener varios ejes (axes), pero sólo unos son los ejes activos y son el objetivo para crear a sus “hijos” o los elementos que le son inferiores en jerarquía. Matlab dibuja en los ejes activos de la ventana activa. Por tanto el objeto activo es el último objeto creado o que ha sido seleccionado por el mouse. Los identificadores de la ventana activa, de los ejes activos y del objeto activo se pueden obtener respectivamente con los comandos gcf (get current figure), gca (get current axes) y gco (get current object):

gcf: devuelve el handle de la ventana activa. Dicha ventana activa es la ventana sobrea la cual tendrán efecto los comandos gráficos como plot, title, etc. La línea de comando a utilizar sería la siguiente:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 111 -

get(0,'CurrentFigure')

Esto es en el caso en que no se desee crear una ventana nueva dado que ya existe una.

gca: devuelve el handle de los ejes activos para la ventana actual. En el caso en que dichos ejes no existan, Matlab los crea y entrega su handle. De igual forma,en el casoen que no se desea que se creen nuevos ejes, es posible utilizar la sintaxis:

get(gcf,'CurrentAxes')

gco: devuelve el handle del objeto activo Los objetos se pueden borrar con el comando delete: delete(handle) borra el objeto correspondiente y todos sus hijos. Matlab dispone de funciones gráficas de alto y bajo nivel. Son funciones de alto nivel las funciones plot, plot3, mesh, surf, fill, fill3, etc., utilizadas previamente. Cada una de estas funciones llama a una o más funciones de bajo nivel. Las funciones de bajo nivel crean cada uno de los 9 tipos de objetos disponibles y suelen tener el nombre del objeto correspondiente: figure, axes, uicontrol, line, rectangle, patch, surface, image y text.

11.3. Propiedades de los objetos Todos los objetos de Matlab tienen distintas propiedades. Algunas de éstas son el tipo, el estilo, el padre, los hijos, si es visible o no, y otras propiedades particulares del objeto concreto de que se trate. Algunas de las propiedades comunes a todos los objetos son: children, clipping, parent, type, UserData, Visible y Tag. Otras propiedades son propias de un tipo determinado de objeto. Las propiedades tienen valores por defecto, que se utilizan siempre que el usuario no indique otra cosa. Es posible cambiar las propiedades por defecto, y también devolverles su valor original (llamado factory, por ser el valor por defecto con que salen de fábrica). El usuario puede consultar (query) los valores de las propiedades de cualquier objeto. Algunas propiedades pueden ser modificadas y otras no (son read only). Hay propiedades que pueden tener cualquier valor y otras que sólo pueden tener un conjunto limitado de valores (por ejemplo, on y off). Las funciones set y get sirven para consultar y cambiar el valor de las propiedades de un objeto. La función set(id) lista en pantalla todas las propiedades del objeto al que corresponde el handle (sólo los nombres, sin los valores de las propiedades). La función get(id) produce un listado de las propiedades y de sus valores. Las propiedades de un objeto pueden ser cambiadas o modificadas (salvo que sean read only) con el comando set(id,’propiedad’,’valor’). Por ejemplo:

» set(li2,'color','r') Es posible también establecer las propiedades en el momento de la creación del objeto, como en el ejemplo siguiente que crea una figura con fondo blanco:

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 112 -

» fig = figure('color','w') Se puede utilizar la propiedad type para saber qué tipo de objeto (línea, polígono, texto) corresponde a un determinado id. Esto es especialmente útil cuando el id es un vector de valores correspondientes a objetos de distinto tipo:

» get(li2,'type') Anteponiendo la palabra default al nombre de un objeto y de una propiedad se puede acceder al valor por defecto de una propiedad, ya sea para consultar su valor o bien para modificarlo. Por ejemplo, DefaultLineColor representa el color por defecto de una línea, y DefaultFigureColor representa el color de fondo por defecto de las ventanas. Cambiando un valor por defecto a un determinado nivel de la jerarquía de objetos se cambia ese valor para todos los objetos que están por debajo y que se creen a partir de ese momento. Por ejemplo, el siguiente comando cambia el color de fondo de todas las ventanas (hijas de screen) que sean creadas a partir de ese momento:

» set(0,'DefaultFigureColor','w')

Cuando se crea un objeto se busca el valor por defecto de sus propiedades a su nivel, y si no se encuentra se sube en la jerarquía hasta que se encuentra un valor por defecto, y ese valor es el que se utiliza. Para devolver una propiedad a su valor original se utiliza el valor factory, por ejemplo:

» set(id, 'FaceColor', 'factory')

De forma análoga, el valor ’remove’ para una propiedad elimina un valor introducido previamente. Por ejemplo, para que el fondo de las ventanas deje de ser blanco se debe ejecutar el comando:

» set(0,'DefaultFigureColor','remove')

11.4. Creación de controles gráficos: Comando uicontrol

Para todos los controles, se utilizará la función uicontrol, que permite desarrollar dichos controles. Los controles uicontrol son objetos gráficosm que al ser seleccionados realizan una acción específica. Existe un gran número de controles:

Check boxes: generan una acción cuando son seleccionadas por el mouse. Resultan útiles cuando se requiere que el usuario seleccione al menos una de las opciones que le aparecen en pantalla.

Editores de texto: permiten que el usuario modifique o introduzca

valores de texto. Se utilizan primordialmente cuando se requiere que el usuario introduzca texto que será utilizado como variable en la ejecución del programa.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 113 -

Cuadros: son rectángulos que proven un límite visual dentro de la ventana actual. Permite que el usuario relacione un grupo de controles como tal.

Cajas de listado: despliega una lista de objetos definidos mediante el uso

de las propiedades de las cadenas de caracteres, permitiendo al usuario seleccionar al menos uno de los objetos que en ella se enumeran.

Pop-up menus: este tipo de menu despliega una lista de opciones cuando

son seleccionados. Se utilizan para permitir al usuario seleccionar alguna opción, ahorrando espacio en la ventana de objetos.

Push buttons: generan una acción cuando son presionados. Para activarlo

es necesario seleccionarlo mediante el mouse.

Radio buttons: funcionan de manera similar a la de los check boxes, con la diferencia de que tienen por objetivo ser mutuamente excluyentes dentro del un grupo de botones de este estilo. Para activarlos se requiere del uso del mouse sobre el objeto.

Barras de desplazamiento: son barras que permiten introducir un número

entero dentro de un rango específico permitiendo que el usuario mueva la barra con el uso del mouse. La ubicación de la barra indica un valor numérico, el cual es seleccionado por el mouse.

Etiquetas estáticas: muestra líneas de texto estáticas en la interfaz. Se

utiliza para etiquetar a otros elementos, para proveer direcciones al usuario o para indicar los valores asociados a una barra.

Toggle buttons: son controles que ejecutan llamados cuando se les

selecciona y que indicant un estado de encendido o apagado. Estos resultan útiles en la construcción de barras de herramientas.

La forma general del comando uicontrol es la siguiente:

id_control = uicontrol(id_parent,... ’Propiedad1’,valor1,... ’Propiedad2’,valor2,... ... (otras propiedades) ’callback’,’sentencias’)

Las propiedades son las opciones del comando, que se explican en la sección siguiente. Éstas tiene comillas simples (') a su izquierda y derecha, e irán seguidas de los parámetros necesarios. En caso de que el conjunto de propiedades de un control exceda una línea de código, es posible continuar en la línea siguiente, poniendo tres puntos seguidos (…). El comando uicontrol permite definir los controles gráficos de Matlab descritos en las siguientes secciones. Estos controles reciben las acciones de los usuarios, que se

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 114 -

denominan eventos (por ejemplo, hacer click en un botón, cambiar el valor de una barra de desplazamiento, etc.). A continuación se explican algunas de las propiedades de uicontrol.

11.5. Propiedades de los controles uicontrol

Como se ha mencionado en la sección anterior, los controles uicontrol presentan ciertas propiedades que pueden ser modificadas en el momento de su creación. Estas propiedades se incluyen a continuación algunas de las más importantes. Sin embargo se recomienda al lector que consulte las ayudas de Matlab para una mayor referencia de estas propiedades.

Color del objeto (BackgroundColor)

Controla el color de fondo del objeto. Por defecto éste suele ser gris claro, aunque puede tomar distintos valores: green, red, white, etc. Éstos irán definidos entre comillas (por ejemplo 'green') o con un vector de tres elementos que indican las componentes RGB (Red, Green, Blue).

Acción a efectuar por el comando (CallBack)

Este comando especifica la acción a efectuar por Matlab al actuar sobre el control. Se trata de una expresión, almacenada en una cadena de caracteres o en una función, que se ejecutará al activar el control. Algunos controles tienen distintos tipos de callback según el evento que reciban del usuario.

Control activado/desactivado (enable)

Este comando permite desactivar un control, de tal forma que una acción sobre el mismo (por ejemplo, hacer click sobre el mismo) no produce ningún efecto. Los valores que puede tomar esta variable son encendido (on) o apagado (off). Cuando un control está desactivado suele mostrar un aspecto especial (una tonalidad más gris, por ejemplo) que indica esta situación.

Alineamiento horizontal del título (horizontalalignment)

Esta opción determina la posición del título del control en el mismo (propiedad string). Los valores que puede tomar son: left, center o right. En los botones y en otros controles la opción por defecto es center.

Valor máximo (max) Esta opción determina el máximo valor que puede tomar la propiedad value cuando se utilizan cajas de textos, botones de opción o barras de desplazamiento. En caso de botones tipo on/off, que solamente admiten las dos posiciones de abierto y cerrado, esta variable corresponde al valor del mismo cuando está activado. El valor mínimo (min) actúa de modo análogo.

Identificador del objeto padre (parent)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 115 -

Esta opción especifica el id del objeto padre, conocido así al objeto que se encuantra por encima de otro en jerarquía. Éste debe ir siempre en primer lugar.

Posición del objeto (position) Determina la posición y el tamaño del control dentro del objeto padre. Para ello se define un vector de cuatro elementos, cuyos valores tienen el siguiente orden: [izquierda, abajo, ancho, alto]. En este caso, izquierda y abajo son la distancia a la esquina inferior izquierda de la figura y ancho y alto las dimensiones del control. Por defecto se mide en pixeles, aunque con la propiedad units las unidades se pueden cambiar.

Nombre del objeto (string) Esta opción define el nombre que aparecerá en el control. Cuando el control sea una opción de menú desplegable (popup menu), los nombres se sitúan en orden dentro del string, separados por una barra vertical (|).

Tipo de control (style)

Esta opción puede tomar los siguientes valores: pushbutton, togglebuttons, radiobutton, checkbox, slider, edit, list, frames y text, según el tipo de control que se desee (como se verá en los ejemplos siguientes, puede usarse nombres abreviados: así, pushbutton puede abreviarse como push).

Unidades (units) Unidades de medida en las que se interpretará el comando position. Los valores que puede tomar units son: pixels (puntos de pantalla), normalized (coordenadas de 0 a 1), inches (pulgadas), cent (centímetros), points (equivalente a 1/72 parte de una pulgada). La opción por defecto es pixels.

Valor (value) Permite utilizar el valor que tiene el control en un momento dado. Según sea uno u otro el programa ejecutará una acción. La variable value permite controlar dicho valor. Esta propiedad es especialmente importante en las barras de desplazamiento (sliders), pues son controles especialmente diseñados para que el usuario introduzca valores. También en el control list, en donde el valor representa el número de orden que en la lista de opciones ocupa el elemento elegido por el usuario.

Visible (visible) Puede tomar dos valores: on / off. Indica si el control es visible o no en la ventana. Este comando es similar a enable. Cuando se tiene visible en off, además de quedar inhabilitado, el control desaparece de la pantalla.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 116 -

11.6. Botones (pushbuttons) Al hacer click sobre un botón se producirá un evento que lanza una acción que deberá ser ejecutada por Matlab. En el momento en que se selecciona el boton, éste aparecerá como oprimido, liberándose hasta el momento en que el boton deja de estar seleccionado y se ejecuta la acción para la que fue programado. Un pushbutton requiere que sean programadas dos funciones en el momento de su creación. La primera es la función String que desplegará sobre el boton una cadena de caracteres que permiten al usuario saber a groso modo la acción que realizará el botón al ser seleccionado. La segunda función es la función tag que realiza una subrutina en el programa de ejecución. De esta forma, la siguiente instrucción dibujará en la figura activa de Matlab un botón que tiene como nombre Start Plot.

x=-4:0.01:4; y=sin(x); figure pbstart = uicontrol(gcf,'Style','push',... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'Position',[10 5 80 22],... 'String','Start Plot',... 'CallBack','plot(y)');

Al ejecutar estas instrucciones, en la ventana activa aparece el boton creado, lo que se puede apreciar en la figura 11.6.1.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 117 -

Figura 11.6.1 – creación del pushbutton

Al pulsar el boton generado, que se muestra en amarillo en la esquina inferior izquierda de la figura anterior, se ejecutarán las instrucciones contenidas en y, es decir, la graficación del seno para los valores establecidos en el vector X. Esto ultimo se muestra en la figura 11.6.2.

Figura 11.6.2 – ejecución del callback del botón

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 118 -

11.7. Botones de selección (check boxes)

Los botones de selección permiten al usuario seleccionar entre diferentes opciones independientes entre si. Los botones de selección actúan como interruptores, indicando un estado on (si el botón está activado) u off (si el botón está desactivado). El valor de ambos estados viene definido por las opciones max y min, siendo máximo cuando se selecciona al boton y mínimo en caso contrario. Los botones de selección deben ser independientes unos de otros. Por ejemplo, el siguiente conjunto de instrucciones crea una caja con dos opciones. Ambas permiten el control de los ejes, de manera independiente, dentro de la función plot:

% Definir un texto fijo como título para los botones de selección txt_axes = uicontrol(gcf,'Style','text',... 'Units','normalized','Position',[0.4 0.55 0.25 0.1],... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'String','Set Axes Properties'); % Definir la checkbox para la propiedad Box de los ejes cb_box = uicontrol(gcf,'Style','checkbox',... 'Units','normalized','Position',[0.4 0.475 0.25 0.1],... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'String','Box = on',... 'CallBack',['set(gca,''Box'',''off''),''if get(cb_box,''value'')==1,',... 'set(gca,''Box'',''on''),','end']); % Definir la checkbox para la propiedad TickDir de los ejes cb_tdir = uicontrol(gcf,'Style','checkbox',... 'Units','normalized','Position',[0.4 0.4 0.25 0.1],... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'String','TickDir = out',... 'CallBack',['set(gca,''TickDir'',''in''),',... 'if get(cb_tdir,''value'')==1,',... 'set(gca,''TickDir'',''out''),','end']);

De esta forma al ejecutar el programa se obtiene, en la ventana activa, una imagen como la que se muestra en la figura 11.7.1, donde los botones creados se encuentran contendos en el recuadro amarillo que se encuentran en el centro la ventana activa. Del mismo modo, las figuras 11.7.2 y 11.7.3 muestran los resultados obtenidos de seleccionar alguno de los checkbox creados. Por último, la figura 11.7.4 muestra el resultado obtenido de seleccionar ambos.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 119 -

Figura 11.7.1 – botones creados

Figura 11.7.2 – resultado de seleccionar el primero botón

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 120 -

Figura 11.7.3 – resultado de seleccionar el segundo botón

Figura 11.7.4 – resultado de seleccionar ambos

De esta forma comprobamos que las acciones que se realizan mediante estos botones son independientes entre sí, y que al tener más de un botón de este estilo resulta posible seleccionar más de uno dentro de la lista.

11.8. Botones de opción (radio buttons)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 121 -

Este tipo de botones permiten al usuario escoger entre varias posibilidades, tal y como sucede con los botones estudiados en la sección anterior (checkbuttons). La diferencia fundamental reside en que en los botones del tipo radiobuttons, las opciones son excluyentes, es decir, no puede haber más de uno activado, mientras que el control anterior (checkbuttons) permite tener una o más cajas activadas. En el siguiente ejemplo estos botones permiten cambiar de dirección los indicadores de los ejes: In para orientarlos hacia dentro de la figura, y Out para que se sitúen en el exterior de la gráfica.

% Definir la propiedad TickDir In con radiobutton (por defecto) td_in = uicontrol(gcf,'Style','radio','String','In',... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'Position',[200 175 150 25],'Value',1,... 'CallBack',['set(td_in,''Value'',1),’… ‘set(td_out,''Value'',0),set(gca,''TickDir'',''in''),']); % Definir la propiedad TickDir Out con radiobutton td_out = uicontrol(gcf,'Style','radio', 'String','Out',... 'BackGroundColor',[ 1.000 1.000 0.502 ],... 'Position',[200 150 150 25],... 'CallBack',['set(td_out,''Value'',1),’… ‘set(td_in,''Value'',0),set(gca,''TickDir'',''out'')']);

Al ejecutar el código anterior tenemos como resultado la ventana que se muestra en la figura 11.8.1, donde los radiobuttons se encuentran contenidos en el recuadro amarillo que se muestra en el centro de dicha ventana.

Figura 11.8.1 – botones creados

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 122 -

A continuación, en las figures 11.8.2 y 11.8.3 se muestran los resultados obtenidos de seleccionar uno u otro botón. Cabe remarcar que los botones no pueden encontrarse activos de forma simultánea.

Figura 11.8.2 – resultado de seleccionar la opción “In”

Figura 11.8.3 – resultado de seleccionar la opción “Out”

11.9. Barras de desplazamiento (scrolling bars o sliders)

Como se habia visto anterormente, las barras de desplazamiento permiten al usuario introducir un valor entre un rango de valores. El usuario puede cambiar el valor

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 123 -

haciendo click sobre la barra, haciendo click en las flechas laterales o bien arrastrando el elemento central con el mouse. El siguiente ejemplo muestra como se utilizan las barras de desplazamiento para mover un sistema de referencia espacial, cambiando el punto de observación de la gráfica.

%Grafica u=-8:0.5:8; v=u; [U,V]=meshgrid(u,v); R=sqrt(U.^2+V.^2)+eps; W=sin(R)./R; surf(W); colormap(pink); title('Funcion "sombrero"'); xlabel('eje x'); ylabel('eje y'); zlabel('eje z'); axis('auto') % Obtener un id de la ventana activa fig = gcf; % El callback define la propiedad View de los ejes a partir de los valores de la barra de %desplazamiento (Value property) y escribe su valores en el control text % Barra del ángulo de elevación sli_elv = uicontrol(fig,'Style','slider','Position',[50 10 120 20],... 'Min',-90,'Max',90,'Value',30,'CallBack',... ['set(elv_cur,''String'',','num2str(get(sli_elv,''Val''))),',... 'set(gca,''View'',','[get(sli_elv,''Val''),get(sli_elv,''Val'')])']); % Control de texto para el valor mínimo elv_min = uicontrol(fig,'Style','text','Pos',[10 10 30 20],… 'String',num2str(get(sli_elv,'Min'))); % Control de texto para el valor máximo elv_max = uicontrol(fig,'Style','text','Pos',[180 10 30 20],... 'String',num2str(get(sli_elv,'Max')),'Horiz','center'); % Etiqueta de la barra elv_label = uicontrol(fig,'Style','text','Pos',[60 40 65 20],… 'String','Elevación'); % Control de texto para el valor actual. El valor es inicializado aquí y es modificado por el %callback de la barra cuando el usuario cambia su valor elv_cur = uicontrol(fig,'Style','text','Pos',[130 40 20 20],... 'String',num2str(get(sli_elv,'Value')));

En la figura 11.9.1 se muestra la ventana que se despliega en el momento en que se ejecuta el código anterior. En las dos figuras siguientes, es decir, las figuras 11.9.2 y 11.9.3 se muestran las variantes que se obtienen de mover la barra de desplaciamiento a la derecha e izquierda respectivamente, con lo que se comprueba el cambio de posición de observación de la gráfica.

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 124 -

Figura 11.9.1 – creación de la barra

Figura 11.9.2 – resultado de mover la barra a la derecha (vista superior)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 125 -

Figura 11.9.3 – resultado de mover la barra a la izquierda (vista inferior)

11.10. Cajas de selección desplegables (pop-up menus)

Las cajas de selección desplegables permiten elegir una opción entre varias mostradas en una lista. El menú se despliega pulsando sobre la flecha de la derecha. La opción sobre la que pase el ratón aparecerá en otro color. El siguiente código abre una ventana con un determinado tamaño y posición y permite cambiar el color de fondo con un menú pop-up (lista desplegable, que aparece desde el primer momento en la pantalla):

close all; pantalla = get(0,'ScreenSize'); xw=pantalla(3); yw=pantalla(4); fig=figure('Position',[xw/4 yw/4 xw/2 yw/2]) % Definir el menú pop-up popcol = uicontrol(fig,'Style','popup',... 'String','magenta|rojo|amarillo|verde|cyan|azul|negro|blanco',... 'Position',[xw/16 yw/16 xw/12 yw/32],... 'CallBack',['cb_col = [''M'',''R'',''Y'',''G'',''C'',''B'',''K'',''W''];',... 'set(gcf,''Color'',cb_col(get(popcol,''Value'')))']);

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 126 -

De esta forma, en la figura 11.10.1 se muestra la pantalla que se obtiene de ejecutar el código anterior. Del mismo modo, la figura 11.10.2 muestra el menú desplegado y la figura 11.10.3 la selección de color azul para el fondo de dicha ventana.

Figura 11.10.1 – creación del menú

Figura 11.10.2 – menú desplegado

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 127 -

Figura 11.10.3 – fondo de pantalla azul

11.11. Cajas de texto (static textboxes)

Son controles especiales, ya que no permiten realizar ninguna operación con el ratón. Permiten escribir un texto en la pantalla. Una aplicación de este uicontrol aparece en la variable txt_tdir del ejemplo de los radiobuttons. En este caso particular el texto indica la función de los botones de opción.

11.12. Cajas de texto editables (editable textboxes)

Las cajas de texto se utilizan para introducir y modificar cadenas de caracteres, por lo que permiten que el usuario interactue con la aplicación. Pueden tener una o más líneas, y la llamada a la opción de ejecución callback será efectiva una vez que se haga click fuera del control. El siguiente ejemplo escribe un texto en la ventana de Matlab que el usuario puede modificar.

fig=gcf; clf; edmulti = uicontrol(fig,... 'Style','edit',... 'BackgroundColor','white',... 'FontSize',14,'FontName','Arial',... 'String','Cambia este texto',... 'Position',[40 200 150 50],...

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 128 -

'Max',2,... 'CallBack','get(edmulti,''String'')');

En la figura 11.12.1 se muestra la ventana producto de la ejecución del programa, mostrando la caja de texto en amarillo. En la figura 11.12.2 se muestra la misma ventana pero cambiando el mensaje inicial al mensaje “Hola”.

Figura 11.12.1 – creación de la caja de textos

Figura 11.12.2 – cambio al mensaje “Hola”

11.13. Marcos (frames)

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 129 -

Un marco tampoco es un control propiamente dicho. Su función es la de englobar una serie de opciones (botones, cajas de texto…) con el fin de mantener una estructura ordenada de controles, separando unos de otros en función de las características del programa y del gusto del programador. El siguiente ejemplo dibuja un marco y dos botones, que se muestran en la figura 11.13.1.

fig=gcf; clf; ft_dir = uicontrol(gcf,... 'Style','frame',... 'Position',[30 30 120 85]); pbstart = uicontrol(gcf,... 'Style','push',... 'Position',[40 40 100 25],... 'String','Start Plot',... 'CallBack',['disp(''Start Plot'')']); pbstart = uicontrol(gcf,... 'Style','push',... 'Position',[40 80 100 25],... 'String','Stop Plot',... 'CallBack','disp(''Stop Plot'')');

Figura 11.13.1 – creación del marco

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 130 -

>>>>Bibiografía, Fuentes y Referencias<<<<

“The Math Works – About the Math Works”; http://www.mathworks.com/company/aboutus/

“Matlab.pdf (application/pdf objeto)”

www.sisoft.ucm.es/Manuales/Matlab.pdf

“Aprenda MATLAB 5.3 como si estuviera en primero” Javier García de Jalón / José Ignacio Rodríguez / Alfonso Brazález Escuela Superior de Ingenieros Industriales, Universidad de Navarra San Sebastián, Agosto 1999

“Digital Signal Processing Using MATLAB”

Vinay K. Inlge

“Fundamentals of Signals and systems using MATLAB” Edward W. Kamen 1997

“Using MATLAB to analyze and design Control Systems”

Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 131 -

Naomi Ehrich Leonard

“The student Edition of MATLAB”

“Statistics Toolbox for use with MATLAB” User’s Guide, 1996

http://www.mathworks.com/support