0% encontró este documento útil (0 votos)
47 vistas129 páginas

Manual de Programación en Matlab

Este documento presenta un manual de programación de Matlab. Matlab es un software desarrollado por The MathWorks para realizar cálculos numéricos, matemáticos y gráficos. El manual explica cómo inicializar Matlab, realizar operaciones matemáticas simples y con matrices, crear gráficas 2D y 3D, estadística básica, programación y creación de interfaces gráficas. El documento es una guía completa para aprender los fundamentos y aplicaciones básicas de Matlab.

Cargado por

José Luis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas129 páginas

Manual de Programación en Matlab

Este documento presenta un manual de programación de Matlab. Matlab es un software desarrollado por The MathWorks para realizar cálculos numéricos, matemáticos y gráficos. El manual explica cómo inicializar Matlab, realizar operaciones matemáticas simples y con matrices, crear gráficas 2D y 3D, estadística básica, programación y creación de interfaces gráficas. El documento es una guía completa para aprender los fundamentos y aplicaciones básicas de Matlab.

Cargado por

José Luis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

APUNTES DE MATLAB

ÍNDICE

1. Introducción………………………………………………………………………………… 4
2. Inicializando Matlab………………………………………………………………………. 5
2.1. Toolbar Window……………………………………………………………………… 5
2.2. Command Window…………………………………………………………………… 8
2.3. Workspace…………………………………………………………………………….. 8
2.4. Command History……………………………………………………………………. 10
3. El comando HELP…………………………………………………………………………. 11
4. El espacio de trabajo de Matlab…………………………………………………………. 14
5. Matemática simple………………………………………………………………………… 16
5.1. Operadores aritméticos……………………………………………………………… 16
5.2. Operadores relacionales…………………………………………………………….. 17
5.3. Operadores lógicos…………………………………………………………………... 18
5.4. Funciones trigonométricas e hiperbólicas………………………………………... 19
5.5. Funciones varias……………………………………………………………………… 19
5.6. Despliegue de formatos numéricos………………………………………………… 23
5.7. Variables………………………………………………………………………………. 26
5.8. Números complejos…………………………………………………………………... 28
5.9. Ejemplos………………………………………………………………………………... 29
6. Operaciones con matrices y vectores…………………………………………………… 32
6.1. Definición de matrices………………………………………………………………. 32
6.2. Operaciones con matrices…………………………………………………………... 33
6.3. Funciones que actuan sobre vectores……………………………………………… 37
6.4. Tipos de matrices predefinidos……………………………………………………... 40
6.5. Formación de una matriz a partir de otras……..………………………………... 48
7. Gráficas en dos dimensiones……………………………………………………………... 53
7.1. Función plot…………………………………………………………………………… 55
7.2. Tipos de líneas y marcadores en la función plot…………………………………. 58
7.3. Añadir líneas a una gráfica ya existente………………………………………….. 59
7.4. Comando subplot…………………………………………………………………….. 59
7.5. Control de los ejes……………………………………………………………………. 60
7.6. Manejo de las ventanas de gráficos……………………………………………….. 62
7.7. Otras funciones gráficas en dos dimensiones…………………………………….. 63
7.8. Ejemplos……………………………………………………………………………….. 73
8. Gráficas en tres dimensiones……………………………………………………………. 76
8.1. Dibujo de líneas: función plot3…………………………………………………….. 76
8.2. Dibujo de mallas: Funciones meshgrid, mesh y surf……………………………. 77
8.3. Dibujo de líneas de contorno: Funciones contour y contour3…………………. 78
8.4. Mapas de colores…………………………………………………………………….. 83
8.5. Elementos generales: ejes, puntos de vista, líneas ocultas……………………... 92
9. Estadística…………………………………………………………………………………... 93
9.1. Generación de números aleatorios………………………………………………… 95
9.2. Medidas de tendencia central………………………………………………………. 96
9.3. Medidas de dispersión……………………………………………………………….. 97
9.4. Funciones varias……………………………………………………………………… 99

-2-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

10. Programación en Matlab…………………………………………………………………. 103


10.1. Conceptos útiles para programar………………………………………………… 103
10.2. Ciclo for………………………………………………………………………………. 104
10.3. Ciclo while………………………………………………………………………….... 105
10.4. Estructura if – else – end…………………………………………………………... 106
11. Fundamentos de las interfaces gráficas con Matlab………………………………….. 107
11.1. Objetos gráficos de Matlab………………………………………………………... 107
11.2. Identificadores………………………………………………………………………. 109
11.3. Propiedades de los objetos………………………………………………………… 110
11.4. Creación de los controles gráficos: comando uicontrol……………………….. 111
11.5. Propiedades de los controles uicontrol………………………………………….. 113
11.6. Botones (pushbuttons)……………………………………………………………… 115
11.7. Botones de selección (checkboxes)……………………………………………….. 116
11.8. Botones de opción (radiobuttons)………………………………………………… 119
11.9. Barras de desplazamiento (scrolling bar o sliders)……………………………. 121
11.10. Cajas de selección desplegables (pop – up menus)………………………….. 124
11.11. Cajas de texto (static textboxes)………………………………………………… 126
11.12. Cajas de texto editables (editable textboxes)………………………………….. 126
11.13. Marcos (frames)…………………………………………………………………... 127
>>>>Bibliografía, Fuentes y Referencias<<<…………………………………………... 129

-3-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

-4-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

Toolbar
Window
Workspace

Command
Window

Command
History
Barra de
estado

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

-5-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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.

-6-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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

-7-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

-8-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

-9-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 10 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

- 11 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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:

- 12 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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:

[Link]

- 13 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 14 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

- 15 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

Realiza la suma de A+B, con la restricción de


+ Suma 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.

Al introducir la función A-B realiza la


- Resta 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.

La función X^p significa elevar X a la potencia


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

- 16 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Símbolo Operador Función

La función C = A*B es el producto lineal de


matrices, de forma más precisa:

* Multiplicación n
c  i, j    A  i, k  B  k , j 
k 1

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
X  5; X   4 5 6 
7 8 9 

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

- 17 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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.

- 18 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

Logaritmo natural de x
Log(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

Logaritmo base 10
log10(x)
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

- 19 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Función Operación

Logaritmo base 2

Para esta función existen dos excepciones:


Log2(x)
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.

Función exponencial

Exp(x) É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)).

Raíz cuadrada

sqrt(x) 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.

Raíz cuadrada de una matriz

sqrtm(x) 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.

Función signo

sign(x) 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:

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

- 20 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Función Operación

Residuo de una division

En el uso de esta función tenemos que el residuo de la división es x-n.*y


Rem(x,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.

Modulo de una division

mod(x,y) 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.

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

Redondeo hacia cero


Fix(x)
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.

Redondeo hacia menos infinito

floor(x) 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

Redondeo hacia mas infinito


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

- 21 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Función Operación

Máximo común divisor

Al aplicar la función G = GCD(A,B) obtiene el máximo común divisor


Gcd(x) 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.

Mínimo común múltiplo


Lcm(x)
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.

Valor absoluto

Abs(x) 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

Valor absoluto

Abs(x) 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
angle(x)
Entrega los valores de los ángulos, en radianes, de la matriz cuyos
elementos son complejos.

- 22 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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
Entrega unicamente el signo del resultado. En
+ caso de que el resultado sea cero, entrega un ans =
espacio en blanco.
+

- 23 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Tipos Formato Ejemplo


>> pi
Entrega el formato en dólares y centavos. Es
bank decir, enteros con dos decimales. ans =

3.14
>> pi
compact Suprime el exceso de líneas que se utilizan para ans =
mostrar cada dato en la pantalla 3.1416

>> 2*pi
Los resultados se muestran en forma
Hex hexagesimal ans =

401921fb54442d18
>> pi
Muestra un número con 15 cifras significativas
long ans =

3.14159265358979
>> pi
Muestra los números con 15 cifras decimales
Long e significativas ans =

3.141592653589793e+000
>> pi
Muestra los mejores 15 dígitos, ya sea enteros o
Long g decimales ans =

3.14159265358979
>> pi
Agrega líneas de espaciamiento entre las salidas
loose ans =

3.14159265358979
>> pi
Muestra la razón de enteros pequeños
Rat ans =

355/113
>> pi
Muestra 5 cifras
short ans =

3.1416

- 24 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Tipos Formato Ejemplo


>> pi
Muestra 5 cifras decimales significativas
Short e ans =

3.1416e+000
>> pi
Los mejores 5 dígitos enteros o decimales
short g 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.

Las siguientes operaciones producen la respuesta NaN:

 Cualquier operación que se realice sobre una NaN

- 25 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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:

 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

- 26 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

Elimina todas las variables, funciones y archivos MEX (programas en C


all 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.

Realiza las mismas funciones que en el caso de clear all, además de


classes 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.

Limpia todos las funciones M y funciones MEX de la memoria que


functions 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.

Elimina los paquetes Java contenidos en la lista de importación.


import 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.

- 27 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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.

- 28 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

Si x es un arreglo de números complejos de la forma a + bi, esta


Abs(x) 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:

Y  a2  b 2

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
angle(x) 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 .

El uso de este comando entrega como resultado un arreglo de


conj(x) números complejos que son el conjugado de cada elemento contenido
en el arreglo de números conjugados x.

Mediante este comando es posible obtener un arreglo de números que


imag(x) corresponden a la parte imaginaria de los números complejos
contenidos en el arreglo x

Implementando este comando es posible obtener un arreglo de


Real(x) 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
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 =

- 29 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

>> 1+2i

ans =
1.0 + 2.0000i
2.0
>> y=1+2i

- 30 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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

- 31 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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]


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:

- 32 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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


Mediante el uso de este operador sobre una matriz
dada A, es posible obtener la matriz traspuesta de
dicha matriz.
„ Traspuesta
En el caso en que A sea compleja, el resultado de
la aplicación de este operador es la matriz conjugada
traspuesta de A.

É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.

^ Potenciación 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.

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.

\ División izquierda En este caso se producen mensajes de alarma


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

También permite que la matriz A sea una matriz


rectangular, pero las ecuaciones deben ser
consistentes.
Operador Nombre Función
El producto A.*B se refiere al producto elemento
por elemento de A por B.

- 33 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

.* Producto elemento a
elemento En este caso las matrices deben de tener el mismo
tamaño a menos que una de ellas sea un escalar.

La división derecha A./B entrega como resultado


una matriz que contiene las divisiones de cada
./ División derecha elemento de A entre cada elemento de B.
elemento a elemento
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.

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
.\ División izquierda elemento de B entre cada elemento de A.
elemento a
elemento 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 El elevar un arreglo a una potencia de la forma


potencia elemento a A.^B generará como resultado una matriz cuyos
elemento 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 Medainte el uso de este operador es possible


a elemento 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
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.

- 34 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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=

>> A^2

ans =

30 36 42
66 81 96
102 126 150

>> C^A

ans =

1.0e+004 *

0.7962 0.9782 1.1603


1.8029 2.2154 2.6276
2.8097 3.4523 4.0950

- 35 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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

>> A.^B

ans =

1 16 729
65536 25 1296
7 32768 4782969

- 36 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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


Este operando entrega como resultado los
elementos más grandes entre las dimensión de de un
max(x) Elementos máximos arreglo.
en 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.

El uso de este operando entregará como resultado


el elemento más pequeño en un arreglo de elementos
de diferentes dimensiones.
min(x) Elementos mínimos
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
Este operando entrega una sumatoria dependiendo
de las dimensiones del arreglo del que se trate.

- 37 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

sum(x) Sumatoria de Si x es un vector, entrega la suma de todos los


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

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


cumsum(x) Suma acumulativa 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.

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.
mean(x) Media
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.

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:
1
std(x) Desviación estándar  1 n 2 2
s    xi  x  
 n  1 i1

Si x es una matriz, el operador entrega la


desviación estándar de cada una de las columnas que
la forman.
Este elemento se refiere al producto de los
elementos que componen a un arreglo. En este caso, si
prod(x) Producto de x es un vector, el resultado será el producto de todos
elementos los elementos que lo componen.

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
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

- 38 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Producto será un vector que contenga los productos


cumprod(x) acumulativo de acumulativos de los elementos contenidos en él.
elementos
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 Como su nombre lo indica, este operando ordena


ascendente 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.

Este operando se refiere al producto punto de


vectores, el cual entrega como resultado un escalar que
Dot(a,b) Producto punto 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.

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
Cross(a,b) Producto cruzado cruzado de los primeros tres elementos de A y B.

En este caso, es mas recomendable utilizar el


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

- 39 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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) >> eye([3,2])


ans = ans =
1 0 1 0
0 1 0 1
0 0 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

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

- 40 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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) >> zeros([2,3])


ans = ans =

0 0 0 0 0 0
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) >> zeros([2,3,4])


ans(:,:,1) = ans(:,:,1) =
0 0 0 0 0 0
0 0 0 0 0 0

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

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

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

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 =

- 41 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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) >> ones([2,3])


ans = ans =
1 1 1 1 1 1
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

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) >> ones([2,3,4])


ans(:,:,1) = ans(:,:,1) =

- 42 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

1 1 1 1 1 1
1 1 1 1 1 1

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

1 1 1 1 1 1
1 1 1 1 1 1

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

1 1 1 1 1 1
1 1 1 1 1 1

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

1 1 1 1 1 1
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

 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

- 43 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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


mxn cuyas entradas son números aleatorios.

>> rand(2,3) >> rand([2,3])


ans = ans =

- 44 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

0.4447 0.7919 0.7382 0.4057 0.9169 0.8936


0.6154 0.9218 0.1763 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) >> rand([2 3 4])


ans(:,:,1) = ans(:,:,1) =

0.3529 0.0099 0.2028 0.5028 0.4289 0.1897


0.8132 0.1389 0.1987 0.7095 0.3046 0.1934

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

0.6038 0.1988 0.7468 0.6822 0.5417 0.6979


0.2722 0.0153 0.4451 0.3028 0.1509 0.3784

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

0.9318 0.4186 0.5252 0.8600 0.5936 0.8998


0.4660 0.8462 0.2026 0.8537 0.4966 0.8216

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

0.6721 0.0196 0.3795 0.6449 0.6602 0.2897


0.8381 0.6813 0.8318 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.

 Randn

- 45 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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) >> randn([2 3])

ans = ans =

0.1746 0.7258 2.1832 0.1139 0.0593 -0.8323


-0.1867 -0.5883 -0.1364 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

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


normalmente distribuidos de dimensiones m, n , p …

- 46 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> randn(2,3,4) >> randn([2 3 4])

ans(:,:,1) = ans(:,:,1) =

0.5287 -0.9219 -0.0592 -1.3362 1.6236 0.8580


0.2193 -2.1707 -1.0106 0.7143 -0.6918 1.2540

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

0.6145 1.6924 -0.6436 -1.5937 0.5711 0.6900


0.5077 0.5913 0.3803 -1.4410 -0.3999 0.8156

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

-1.0091 -0.0482 -0.3179 0.7119 0.6686 -1.2025


-0.0195 0.0000 1.0950 1.2902 1.1908 -0.0198

ans(:,:,4) =
ans(:,:,4) =
-0.1567 0.2573 1.4151
-1.8740 0.8956 0.5779 -1.6041 -1.0565 -0.8051
0.4282 0.7310 0.0403

 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

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:

- 47 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> sum(B) >> sum(B')'


ans = ans =

15 15 15 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

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

>> d=size(A)
d=

- 48 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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 =

 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.

Esto es:

>> diag(diag(A))
ans =

- 49 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 50 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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.

De esta forma, utilizando la matriz A tenemos:

>> fliplr(A)
ans =

- 51 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

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

- 52 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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


Plot escalas lineales sobre ambos ejes.

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


Loglog escalas logarítmicas sobre ambos ejes.

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


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

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


Semilogy 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

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
title gráfico puede incluirse en el grafico utilizando el comando:

title(„nombre del gráfico‟)

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

- 53 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

comando:

xlabel(„nombre del eje‟)

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


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

ylabel(„nombre del eje‟)

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
text 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.

Permite colocar una legenda que identifica a cada uno de los elementos
legend 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.

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.

- 54 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

En este caso el comando dibuja los valores contenidos


plot(A) 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
ignorada
Función Descripción

Este comando permite graficar todos los puntos de Yn


plot(X1,Y1,…) contra Xn, lo que significa que este comando generará parejas

- 55 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

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
plot(X1,Y1,LineSpec,...) 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

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

- 56 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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

- 57 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

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);

- 58 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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

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

- 59 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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


subplot(m,n,p) encuentra en la posición p de una ventana de
gráficos dividida en una matriz de mxn de
gráficos.

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


se desea colocar un gráfico ya se encuentra
subplot(m,n,p,'replace') 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

Este comando crea un eje en una


posición especificada por un vector de cuatro
elementos. De esta forma las propiedades left,
Subplot('Position',[left bottom width height]) 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


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

Entrega como resultado un vector renglón que contiene


v = axis 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

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


estableciendo los límites de los ejes automáticamente
axis auto basándose en los valores máximo y mínimo tanto de x como

- 60 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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 El uso de este comando mantiene la escala de los


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

Este comando posiciona el origen del sistema


coordenado en la esquina superior izquierda del gráfico. El
axis ij 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.

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


axis xy 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.

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


axis equal las unidades de datos sean las mismas en todas direcciones,
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.

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


axis square 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

- 61 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

originalmente. De esta forma, la función figure tiene algunas variantes que se incluyen a
continuación.

Función Descripción

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


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

Esta función crea una ventana de


Figure('PropertyName',PropertyValue,...) 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.

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
figure(h) 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.

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

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


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

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


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

Este comando elimina todas las ventanas que se encuentren abiertas,


close all 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

- 62 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

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


bar

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

- 63 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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


barh

 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)

- 64 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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


bar3

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

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


bar3h

- 65 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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)

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)

- 66 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 67 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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)

- 68 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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 = (-[Link])*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

- 69 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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

- 70 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 71 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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.

- 72 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)');

- 73 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 74 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 75 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 76 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

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

- 77 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

[X,Y] = meshgrid(-2:.2:2,-2:.2:3);

- 78 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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);

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

- 79 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

- 80 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 81 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 82 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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:

- 83 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.2 – mapa de color bone

- 84 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.4 – mapa de color cool

- 85 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 86 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 87 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.10 – mapa de color jet

- 88 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.12 – mapa de color pink

- 89 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.14 – mapa de color spring

- 90 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

Figura 8.4.16 – mapa de color winter

- 91 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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
view(azimut, elev) 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.

- 92 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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
muestra en un menor número de valores que contengan la información mas relevante
del fenómeno a estudiar.

- 93 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

- 94 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

- 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

- 95 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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
 n n
m   x i 
 i 1 

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

- 96 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

n
m n
1
x
i 1 i

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 n
xj   xij
n i 1

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.

- 97 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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:
1
 1 n

 xi  x  
2

2
s 
 n  1 i 1 
Donde:
1
x
n
 xi

- 98 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 99 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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, j  
C( 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

- 100 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

- 101 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

>> 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


[Link] que se incluye en la documentación de Matlab.

- 102 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

Nuevo
Abrir
Guardar
Ejecutar

Espacio
de
edición

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=
1 2 3 4 5 6 7 8 9 10

- 103 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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=[Link]
x=
13579
» 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
end

- 104 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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
acciones, teniendo así una estructura que es capaz de tomar decisiones tomando como
referencia la condición correcta.

- 105 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

- 106 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

[Link] 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.

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.

- 107 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

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.

- 108 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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:

get(0,'CurrentFigure')

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

- 109 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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:

» fig = figure('color','w')

- 110 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

 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.

- 111 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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
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.

- 112 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)

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.

- 113 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

 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.

- 114 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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.

Figura 11.6.1 – creación del pushbutton

- 115 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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');

- 116 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

% 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.

Figura 11.7.1 – botones creados

- 117 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Figura 11.7.2 – resultado de seleccionar el primero botón

Figura 11.7.3 – resultado de seleccionar el segundo botón

- 118 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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)


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),‟…

- 119 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

„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

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”

- 120 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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
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'')])']);

- 121 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

% 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.

Figura 11.9.1 – creación de la barra

- 122 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

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

- 123 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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'')))']);

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ú

- 124 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Figura 11.10.2 – menú desplegado

Figura 11.10.3 – fondo de pantalla azul

- 125 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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],...
'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

- 126 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Figura 11.12.2 – cambio al mensaje “Hola”

11.13. Marcos (frames)


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'')');

- 127 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

Figura 11.13.1 – creación del marco

- 128 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones

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

 “The Math Works – About the Math Works”;


[Link]

 “[Link] (application/pdf objeto)”


[Link]/Manuales/[Link]

 “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”


Naomi Ehrich Leonard

 “The student Edition of MATLAB”

 “Statistics Toolbox for use with MATLAB”


User‟s Guide, 1996

 [Link]

- 129 -

También podría gustarte