Caja PDF

Comparta fácilmente sus documentos PDF con sus contactos, la web y las redes sociales.

Compartir un archivo PDF Gestor de archivos Caja de instrumento Buscar Ayuda Contáctenos



matlab70primero .pdf



Nombre del archivo original: matlab70primero.pdf
Título: Microsoft Word - matlab70primero.doc
Autor: jgjalon

Este documento en formato PDF 1.6 fue generado por PScript5.dll Version 5.2 / Acrobat Distiller 7.0.5 (Windows), y fue enviado en caja-pdf.es el 05/10/2011 a las 17:39, desde la dirección IP 189.144.x.x. La página de descarga de documentos ha sido vista 2801 veces.
Tamaño del archivo: 1.9 MB (136 páginas).
Privacidad: archivo público




Descargar el documento PDF









Vista previa del documento


Madrid
Diciembre 2005

Aprenda Matlab 7.0
como si estuviera en primero

Javier García de Jalón, José Ignacio Rodríguez, Jesús Vidal

Escuela Técnica Superior
de Ingenieros Industriales
Universidad Politécnica de Madrid

Aprenda Matlab 7.0 como
si estuviera en primero

Javier García de Jalón
José Ignacio Rodríguez
Jesús Vidal

Índice

página i

ÍNDICE
1.
2.

PRÓLOGO

1

INTRODUCCIÓN

2

2.1.
2.2.
2.3.
2.4.
2.5.

Acerca de este manual
Novedades en este manual
El programa MATLAB
Uso del Help
El entorno de trabajo de MATLAB
2.5.1. El Escritorio de Matlab (Matlab Desktop)
2.5.2. Command Window
2.5.3. Command History Browser
2.5.4. Current Directory Browser
2.5.5. Path de MATLAB: establecer el camino de búsqueda (search path)
2.5.6. Workspace Browser y Array Editor
2.5.7. El Editor/Debugger
2.5.8. El profiler
2.6. Preferencias: Formatos de salida y de otras opciones de MATLAB
2.7. Ficheros matlabrc.m, startup.m y finish.m
2.8. Guardar variables y estados de una sesión: Comandos save y load
2.9. Guardar sesión y copiar salidas: Comando diary
2.10. Líneas de comentarios
2.11. Medida de tiempos y de esfuerzo de cálculo

3.

OPERACIONES CON MATRICES Y VECTORES
3.1. Definición de matrices desde teclado
3.2. Operaciones con matrices
3.2.1. Operadores aritméticos
3.2.2. Operadores para la resolución de sistemas de ecuaciones lineales
3.2.3. Operadores elemento a elemento
3.3. Tipos de datos
3.3.1. Números reales de doble precisión
3.3.2. Otros tipos de variables: integer, float y logical
3.3.3. Números complejos: Función complex
3.3.4. Cadenas de caracteres
3.4. Variables y expresiones matriciales
3.5. Otras formas de definir matrices
3.5.1. Tipos de matrices predefinidos
3.5.2. Formación de una matriz a partir de otras
3.5.3. Direccionamiento de vectores y matrices a partir de vectores
3.5.4. Operador dos puntos (:)
3.5.5. Matriz vacía A[ ]. Borrado de filas o columnas
3.5.6. Definición de vectores y matrices a partir de un fichero
3.5.7. Definición de vectores y matrices mediante funciones y declaraciones
3.6. Operadores relacionales
3.7. Operadores lógicos

4.

FUNCIONES DE LIBRERÍA
4.1.
4.2.
4.3.
4.4.
4.5.

Características generales de las funciones de MATLAB
Equivalencia entre comandos y funciones
Funciones matemáticas elementales que operan de modo escalar
Funciones que actúan sobre vectores
Funciones que actúan sobre matrices
4.5.1. Funciones matriciales elementales:
4.5.2. Funciones matriciales especiales
4.5.3. Funciones de factorización y/o descomposición matricial
4.5.4. Función linsolve()
4.6. Más sobre operadores relacionales con vectores y matrices
4.7. Otras funciones que actúan sobre vectores y matrices
4.8. Determinación de la fecha y la hora

2
2
3
7
9
9
11
11
12
12
14
16
18
18
19
20
21
21
21

23
23
25
25
26
27
28
28
29
30
31
31
32
32
33
34
35
37
38
38
38
39

40
40
41
42
43
43
43
43
44
46
46
48
49

Aprenda Matlab 7.0 como si estuviera en Primero

4.9. Funciones para cálculos con polinomios

5.

OTROS TIPOS DE DATOS DE MATLAB
5.1. Cadenas de caracteres
5.2. Hipermatrices (arrays de más de dos dimensiones)
5.2.1. Definición de hipermatrices
5.2.2. Funciones que trabajan con hipermatrices
5.3. Estructuras
5.3.1. Creación de estructuras
5.3.2. Funciones para operar con estructuras
5.4. Vectores o matrices de celdas (Cell Arrays)
5.4.1. Creación de vectores y matrices de celdas
5.4.2. Funciones para trabajar con vectores y matrices de celdas
5.4.3. Conversión entre estructuras y vectores de celdas
5.5. Matrices dispersas (sparse)
5.5.1. Funciones para crear matrices dispersas (directorio sparfun)
5.5.2. Operaciones con matrices dispersas
5.5.3. Operaciones de álgebra lineal con matrices dispersas
5.5.4. Reglas generales para operar con matrices dispersas
5.5.5. Permutaciones de filas y/o columnas en matrices sparse
5.6. Clases y objetos

6.

PROGRAMACIÓN DE MATLAB
6.1. Bifurcaciones y bucles
6.1.1. Sentencia if
6.1.2. Sentencia switch
6.1.3. Sentencia for
6.1.4. Sentencia while
6.1.5. Sentencia break
6.1.6. Sentencia continue
6.1.7. Sentencias try...catch...end
6.2. Lectura y escritura interactiva de variables
6.2.1. función input
6.2.2. función disp
6.3. Ficheros *.m
6.3.1. Ficheros de comandos (Scripts)
6.3.2. Definición de funciones
6.3.3. Sentencia return
6.3.4. Funciones con número variable de argumentos
6.3.5. Help para las funciones de usuario
6.3.6. Help de directorios
6.3.7. Sub-funciones
6.3.8. Funciones privadas
6.3.9. Funciones *.p
6.3.10. Variables persistentes
6.3.11. Variables globales
6.4. Referencias de función (function handles)
6.4.1. Creación de referencias de función
6.4.2. Evaluación de funciones mediante referencias
6.4.3. Información contenida por una referencia de función. Funciones sobrecargadas
6.4.4. Otros aspectos de las referencias de función
6.4.5. Utilidad de las referencias de función
6.4.6. Funciones inline
6.4.7. Funciones anónimas
6.4.8. Funciones anidadadas
6.5. Entrada y salida de datos
6.5.1. Importar datos de otras aplicaciones
6.5.2. Exportar datos a otras aplicaciones
6.6. Lectura y escritura de ficheros

página ii

49

51
51
53
53
53
54
54
55
56
56
57
57
57
58
59
60
61
61
62

63
63
64
64
65
66
66
66
66
66
66
67
67
68
68
69
69
70
71
71
72
72
72
72
72
73
74
75
76
76
77
77
77
79
79
79
80

Índice

6.6.1. Funciones fopen y fclose
6.6.2. Funciones fscanf, sscanf, fprintf y sprintf
6.6.3. Funciones fread y fwrite
6.6.4. Ficheros de acceso directo
6.7. Recomendaciones generales de programación
6.8. Acelerador JIT (Just In Time) en MATLAB
6.9. Llamada a comandos del sistema operativo y a otras funciones externas
6.10. Funciones de función
6.10.1. Integración numérica de funciones
6.10.2. Ecuaciones no lineales y optimización
6.10.3. Integración numérica de ecuaciones diferenciales ordinarias
6.10.4. Las funciones eval, evalc, feval y evalin
6.11. Distribución del esfuerzo de cálculo: Profiler

7.

8.

80
80
81
81
82
82
83
83
84
84
86
94
95

INTERFACES DE MATLAB CON OTROS LENGUAJES

98

7.1. Interfaces de MATLAB con DLLs genéricas
7.1.1. Introducción
7.1.2. Cargar y liberar las librerías de memoria
7.1.3. Conseguir información acerca de la librería
7.1.4. Llamada a las funciones de una librería
7.1.5. Conversión de datos
7.1.6. Paso de estructuras como argumentos
7.1.7. Paso de argumentos por referencia
7.2. Llamar desde MATLAB funciones programadas en C o Fortran
7.2.1. Introducción a los ficheros MEX
7.2.2. Construcción de ficheros MEX
7.2.3. Creación de ficheros MEX en C
7.2.4. Ejemplo de función MEX programada en C
7.2.5. Depurar ficheros MEX en C en Windows
7.2.6. Depurar ficheros MEX en C en UNIX

98
98
98
99
99
99
100
101
102
102
102
103
104
106
107

GRÁFICOS BIDIMENSIONALES
8.1. Funciones gráficas 2D elementales
8.1.1. Función plot
8.1.2. Estilos de línea y marcadores en la función plot
8.1.3. Añadir líneas a un gráfico ya existente
8.1.4. Comando subplot
8.1.5. Control de los ejes: función axis()
8.1.6. Función line()
8.1.7. Función findobj()
8.2. Control de ventanas gráficas: Función figure
8.3. Otras funciones gráficas 2-D
8.3.1. Función fplot
8.3.2. Función fill para polígonos
8.3.3. Dibujo simplificado de funciones: Funciones ezplot() y ezpolar()
8.4. Entrada de puntos con el ratón
8.5. Preparación de películas o "movies"
8.6. Impresión de las figuras en impresora láser
8.7. Las ventanas gráficas de MATLAB

9.

página iii

GRÁFICOS TRIDIMENSIONALES
9.1. Tipos de funciones gráficas tridimensionales
9.1.1. Dibujo simplificado de funciones 3-D: Funciones ezplot3(), ezsurf(), etc.
9.1.2. Dibujo de líneas: función plot3
9.1.3. Dibujo de mallados: Funciones meshgrid, mesh y surf
9.1.4. Dibujo de líneas de contorno: funciones contour y contour3
9.2. Utilización del color en gráficos 3-D

108
108
109
111
111
112
112
113
113
114
115
115
116
116
117
117
118
119

121
121
122
122
123
124
124

Aprenda Matlab 7.0 como si estuviera en Primero

9.2.1.
9.2.2.
9.2.3.
9.2.4.
9.2.5.
9.2.6.
9.2.7.

Mapas de colores
Imágenes y gráficos en pseudocolor. Función caxis
Dibujo de superficies faceteadas
Otras formas de las funciones mesh y surf
Formas paramétricas de las funciones mesh, surf y pcolor
Otras funciones gráficas 3D
Elementos generales: ejes, puntos de vista, líneas ocultas, ...

página iv

125
125
126
126
127
127
128

Prólogo

página 1

1. PRÓLOGO
La colección de manuales "Aprenda Informática como si estuviera en Primero" nació en la Escuela
Superior de Ingenieros Industriales de San Sebastián (Universidad de Navarra) a lo largo de la década de 1990, como consecuencia de la impartición de las asignaturas Informática 1 e Informática
2, introducidas en el Plan de Estudios de 1993.
El objetivo de esta colección era facilitar a los alumnos de las asignaturas citadas unos apuntes breves y sencillos, fáciles de leer, que en unos casos ayudasen en el uso de las aplicaciones informáticas más habituales para un ingeniero industrial y en otros sirvieran de introducción a distintos lenguajes de programación.
Así pues, los destinatarios directos de estos apuntes eran los alumnos de la Escuela de Ingenieros
Industriales de San Sebastián. Para facilitarles su uso, además de estar a la venta en el Servicio de
Reprografía, se introdujeron versiones "online" en formato PDF (Portable Document Format, de
Adobe), accesibles a través de las páginas Web de las mencionadas asignaturas. Los alumnos de
cursos superiores y algunos profesores los utilizaban también para actualizar sus conocimientos
cuando se instalaban nuevas versiones de las correspondientes aplicaciones.
Sin haberlos anunciado en ningún índice o buscador, al cabo de cierto tiempo se observó que eran
accedidos con una frecuencia creciente desde el exterior de la Escuela, a través de Internet. Poco a
poco empezaron a llegar de todo el mundo de habla hispana correos electrónicos que se interesaban
por nuevos títulos, daban noticia de erratas, solicitaban permiso para utilizarlos en la docencia de
otras instituciones o simplemente daban las gracias por haberlos puesto en Internet.
A la vista de estos efectos "no buscados", se estableció una página Web dedicada especialmente a
esta colección y se anunció en los tres o cuatro portales más importantes de lengua española, lo que
hizo que en poco tiempo se multiplicaran los accesos.
A partir del curso 2000-01 el autor principal y creador de la colección se trasladó a la Escuela Técnica Superior de Ingenieros Industriales de la Universidad Politécnica de Madrid, de la que es actualmente catedrático en el área de Matemática Aplicada. El principal punto de entrada a la colección se encuentra ahora en la dirección http://www.tayuda.com.. El número de accesos ha seguido
aumentando, llegando casi a 1.000.000 de ficheros en 2004.
Aunque el mantenimiento de esta colección constituya un trabajo notable y no se saque ningún rendimiento económico de ella, da particular alegría el realizar un trabajo que tantos miles de personas
consideran útil. El mantenimiento de estos manuales va a ser más difícil en los próximos años, en
gran parte por el cambio en la actividad docente de su director o coordinador. Por eso serán bienvenidas todas aquellas ofertas de ayuda para mantener y crear esta colección de "Open Tutorials".
Madrid, diciembre de 2005.

Javier García de Jalón de la Fuente
(javier.garciadejalon@upm.es)

Aprenda Matlab 7.0 como si estuviera en Primero

página 2

2. INTRODUCCIÓN
2.1. Acerca de este manual
Las primeras versiones de este manual estuvieron dirigidas a los alumnos de Informática 1 en la
Escuela Superior de Ingenieros Industriales de San Sebastián (Universidad de Navarra). Esta asignatura se cursa en el primer semestre de la carrera y el aprendizaje de MATLAB constituía la primera parte de la asignatura. Se trataba pues de un manual introductorio de una aplicación que, para
muchos alumnos, iba a constituir su primer contacto "profesional" con los ordenadores y/o con la
programación.
Desde el curso 2000-2001, este manual se ha adaptado a la asignatura de Matemáticas de la Especialidad (Mecánica-Máquinas) (Plan 1976) y a las prácticas de Álgebra (Plan 2000) en la Escuela
Técnica Superior de Ingenieros Industriales de la Universidad Politécnica de Madrid. A partir del
curso 2001-02 este manual se pensó subdivir en dos: "Aprenda MATLAB 7.0 como si estuviera en
Primero" y "Aprenda MATLAB 7.0 como si estuviera en Segundo", este último de carácter más
avanzado1. En la práctica, hasta la fecha, este segundo manual nunca ha llegado a ver la luz.
Por encima de las asignaturas citadas, este manual puede ser útil a un público mucho más amplio,
que incluye a alumnos de cursos superiores de las Escuelas de Ingeniería Industrial, a alumnos de
Tercer Ciclo y a profesores que quieran conocer más de cerca las posibilidades que tendría MATLAB en sus asignaturas. MATLAB es una de las aplicaciones más útiles que existen para poner a
punto métodos numéricos en distintas asignaturas de ingeniería. Por ser una herramienta de alto
nivel, el desarrollo de programas numéricos con MATLAB puede requerir hasta un orden de magnitud menos de esfuerzo que con lenguajes de programación convencionales, como Fortran, Pascal,
C/C++, Java o Visual Basic.
Se ha pretendido llegar a un equilibrio entre el detalle de las explicaciones, la amplitud de temas
tratados y el número de páginas. En algunos casos, junto con las instrucciones introducidas por el
usuario se incluye la salida de MATLAB; en otros casos no se incluye dicha salida, pero se espera
que el lector disponga de un PC con MATLAB y vaya introduciendo esas instrucciones a la vez que
avanza en estas páginas. En muchas ocasiones se anima al lector interesado a ampliar el tema con la
ayuda del programa (toda la documentación de MATLAB está disponible on-line a través del
Help). En cualquier caso recuérdese que la informática moderna, más que en “saber cómo hacer
algo” consiste en “saber averiguar cómo hacerlo” en pocos segundos.
2.2. Novedades en este manual
Como corresponde a la nuava versión de MATLAB que describe (la versión 7.0), este manual conprende una completa revisión del anterior, correspondiente a la versión 6.5. En este sentido, por
ejemplo, todas las figuras del manual han sido renovadas, pues también el aspecto de la nueva versión de MATLAB es diferente, más en unos aspectos que en otros.
Además de la citada revisión general, en este nuevo manual se hace referencia por primera vez a
ciertas novedades introducidas tanto en la versión 6.5 como en la 7.0. Las más adiciones más importantes son las siguientes:
1. Ayuda y entorno de desarrollo mejorados (Apartado 2.5, a partir de la página 9).
2. Mejoras en el debugger, que permiten establecer puntos de parada de ejecución condicional
(Apartado 2.5.7, página 16).
1

En realidad, el manual "Aprenda Matlab como si estuviera en Segundo" no ha llegado a ver la luz (verano de 2004).
Es un viejo proyecto pendiente de disponer de tiempo para terminar su edición. Si por fin se publica, aparecerá de
inmediato en http://www.tayuda.com/ayudainf

Capítulo 2: Introducción

página 3

3. La posibilidad de comentar bloques de sentencias (Apartado 2.10, página 21).
4. Otros tipos de variables distintos de double. Aunque MATLAB trabaja por defecto con variables double, existe también la posibilidad de definir variables enteras de distinto rango, así como variables reales de simple precisión y variables lógicas (Apartado 3.3.2, página 29).
5. Función linsolve, que permite optimizar la resolución de sistemas de ecuaciones lineales, lo que
es quizás la tarea más utilizada de MATLAB (Apartado 4.5.4, página 46).
6. Nuevos tipos de funciones, en concreto las funciones inline (Apartado 6.4.6, página 77), las
funciones anónimas (Apartado 6.4.7, página 77), y las funciones anidadas (Apartado 6.4.8, página 77).
7. Ejecución de funciuones programadas en C como librerías externas o ficheros MEX (Capítulo 7,
página 98).
8. Las funciones de dibujo simplificadas en 2-D (ezplot y ezpolar, Apartado 8.3.3, página 116) y
en 3-D (ezplot3 y ezsurf, Apartado 9.1.1, página 122).
9. Nuevas ventanas gráficas, con muchas más posibilidades de control interactivo de las propiedades (Apartado 8.7, página 119).
2.3. El programa MATLAB
MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB 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−, con cadenas de
caracteres y con otras estructuras de información más complejas. Una de las capacidades más atractivas es la de realizar una amplia variedad de gráficos en dos y tres dimensiones. MATLAB tiene
también un lenguaje de programación propio. Este manual hace referencia a la versión 7.0 de este
programa (también llamada release 14), aparecida a mediados de 2004.
MATLAB es un gran programa de cálculo técnico y científico. Para ciertas operaciones es muy
rápido, cuando puede ejecutar sus funciones en código nativo con los tamaños más adecuados para
aprovechar sus capacidades de vectorización. En otras aplicaciones resulta bastante más lento que el
código equivalente desarrollado en C/C++ o Fortran. En la versión 6.5, MATLAB incorporó un
acelerador JIT (Just In Time), que mejoraba significativamente la velocidad de ejecución de los
ficheros *.m en ciertas circunstancias, por ejemplo cuando no se hacen llamadas a otros ficheros
*.m, no se utilizan estructuras y clases, etc. Aunque limitado en ese momento, cuando era aplicable
mejoraba sensiblemente la velocidad, haciendo innecesarias ciertas técnicas utilizadas en versiones
anteriores como la vectorización de los algoritmos. En cualquier caso, el lenguaje de programación
de MATLAB siempre es una magnífica herramienta de alto nivel para desarrollar aplicaciones técnicas, fácil de utilizar y que, como ya se ha dicho, aumenta significativamente la productividad de
los programadores respecto a otros entornos de desarrollo.
MATLAB dispone de un código básico y de varias librerías especializadas (toolboxes). En estos
apuntes se hará referencia exclusiva al código básico.
MATLAB se puede arrancar como cualquier otra aplicación de Windows, clicando dos veces en el
icono correspondiente en el escritorio o por medio del menú Inicio). Al arrancar MATLAB se abre
una ventana similar a la mostrada en la Figura 1. Ésta es la vista que se obtiene eligiendo la opción
Desktop Layout/Default, en el menú View. Como esta configuración puede ser cambiada fácilmente por el usuario, es posible que en muchos casos concretos lo que aparezca sea muy diferente. En
cualquier caso, una vista similar se puede conseguir con el citado comando View/Desktop Layout/Default. Esta ventana inicial requiere unas primeras explicaciones.

Aprenda Matlab 7.0 como si estuviera en Primero

página 4

Figura 1. Ventana inicial de MATLAB 7.0.

La parte más importante de la ventana inicial es la Command Window, que aparece en la parte derecha. En esta sub-ventana es donde se ejecutan los comandos de MATLAB, a continuación del
prompt (aviso) característico (>>), que indica que el programa está preparado para recibir instrucciones. En la pantalla mostrada en la Figura 1 se ha ejecutado el comando A=magic(6), mostrándose a continuación el resultado proporcionado por MATLAB.

Figura 2. Menú Start/MATLAB.

Figura 3. Menú Start/Desktop Tools.

En la parte superior izquierda de la pantalla aparecen dos ventanas también muy útiles: en la parte
superior aparece la ventana Current Directory, que se puede alternar con Workspace clicando en la
pestaña correspondiente. La ventana Current Directory muestra los ficheros del directorio activo o
actual. El directorio activo se puede cambiar desde la Command Window, o desde la propia ventana
(o desde la barra de herramientas, debajo de la barra de menús) con los métodos de navegación de
directorios propios de Windows. Clicando dos veces sobre alguno de los ficheros *.m del directorio
activo se abre el editor de ficheros de MATLAB, herramienta fundamental para la programación
sobre la que se volverá en las próximas páginas. El Workspace contiene información sobre todas las
variables que se hayan definido en esta sesión y permite ver y modificar las matrices con las que se
esté trabajando.
En la parte inferior derecha aparece la ventana Command History que muestra los últimos comandos ejecutados en la Command Window. Estos comandos se pueden volver a ejecutar haciendo
doble clic sobre ellos. Clicando sobre un comando con el botón derecho del ratón se muestra un
menú contextual con las posibilidades disponibles en ese momento. Para editar uno de estos comandos hay que copiarlo antes a la Command Window.

Capítulo 2: Introducción

página 5

En la parte inferior izquierda de la pantalla aparece el botón Start, con una función análoga a la del
botón Inicio de Windows. Start da acceso inmediato a ciertas capacidades del programa. La Figura
2 muestra las posibilidades de Start/MATLAB, mientras que la Figura 3 muestra las opciones de
Start/Desktop Tools, que permiten el acceso a las principales componentes o módulos de MATLAB. El menú Desktop realiza un papel análogo al botón Start, dando acceso a los módulos o
componentes de MATLAB que se tengan instalados.
Puede hacerse que al arrancar MATLAB se ejecute automáticamente un fichero, de modo que aparezca por ejemplo un saludo inicial personalizado. Esto se hace mediante un fichero de comandos
que se ejecuta de modo automático cada vez que se entra en el programa (el fichero startup.m, que
debe estar en un directorio determinado, por ejemplo C:\Matlab701\Work. Ver apartado 2.7, en la
página 19).
Para apreciar desde el principio la potencia de MATLAB, se puede comenzar por escribir en la
Command Window la siguiente línea, a continuación del prompt. Al final hay que pulsar intro.
>> A=rand(6), B=inv(A), B*A
A =
0.9501
0.4565
0.9218
0.2311
0.0185
0.7382
0.6068
0.8214
0.1763
0.4860
0.4447
0.4057
0.8913
0.6154
0.9355
0.7621
0.7919
0.9169
B =
5.7430
2.7510
3.6505
-4.4170
-2.5266
-1.4681
-1.3917
-0.6076
-2.1058
-1.6896
-0.7576
-0.6076
-3.6417
-4.6087
-4.7057
2.7183
3.3088
2.9929
ans =
1.0000
0.0000
0
0.0000
1.0000
0.0000
0
0
1.0000
0.0000
0
-0.0000
-0.0000
0.0000
-0.0000
-0.0000
-0.0000
-0.0000

0.4103
0.8936
0.0579
0.3529
0.8132
0.0099

0.1389
0.2028
0.1987
0.6038
0.2722
0.1988

0.0153
0.7468
0.4451
0.9318
0.4660
0.4186

0.1513
-0.5742
-0.0857
-0.3681
2.5299
-0.1943

-6.2170
5.3399
1.5345
3.1251
6.1284
-5.1286

-2.4143
1.5631
1.8561
-0.6001
0.9044
-0.6537

0.0000
0.0000
-0.0000
1.0000
-0.0000
-0.0000

0.0000
-0.0000
-0.0000
-0.0000
1.0000
-0.0000

-0.0000
0.0000
0.0000
0.0000
0.0000
1.0000

En realidad, en la línea de comandos anterior se han escrito tres instrucciones diferentes, separadas
por comas. Como consecuencia, la respuesta del programa tiene tres partes también, cada una de
ellas correspondiente a una de las instrucciones. Con la primera instrucción se define una matriz
cuadrada (6×6) llamada A, cuyos elementos son números aleatorios entre cero y uno (aunque aparezcan sólo 4 cifras, han sido calculados con 16 cifras de precisión). En la segunda instrucción se
define una matriz B que es igual a la inversa de A. Finalmente se ha multiplicado B por A, y se
comprueba que el resultado es la matriz unidad2.
Es con grandes matrices o grandes sistemas de ecuaciones como MATLAB obtiene toda la potencia
del ordenador. Por ejemplo, las siguientes instrucciones permiten calcular la potencia de cálculo del
ordenador en Megaflops (millones de operaciones aritméticas por segundo). En la primera línea se
crean tres matrices de tamaño 1000×1000, las dos primeras con valores aleatorios y la tercera con
valores cero. La segunda línea toma tiempos, realiza el producto de matrices, vuelve a tomar tiempos y calcula de modo aproximado el número de millones de operaciones realizadas. La tercera lí-

2

Al invertir la matriz y al hacer el producto posterior se han introducido pequeños errores numéricos de redondeo en
el resultado, lo cual hace que no todos los elementos cero del resultado aparezcan de la misma forma.

Aprenda Matlab 7.0 como si estuviera en Primero

página 6

nea calcula los Megaflops por segundo, para lo cual utiliza la función etime() que calcula el tiempo
transcurrido entre dos instantes definidos por dos llamadas a la función clock3:
>> n=1000; A=rand(n); B=rand(n); C=zeros(n);

>> tini=clock; C=B*A; tend=clock; mflops=(2*n^3)/1000000;
>> mflops/etime(tend,tini)

Otro de los puntos fuertes de MATLAB son los gráficos, que se verán con más detalle en una sección posterior. A título de ejemplo, se puede teclear la siguiente línea y pulsar intro:
>> x=-4:.01:4; y=sin(x); plot(x,y), grid, title('Función seno(x)')

En la Figura 4 se puede observar que se abre una
nueva ventana en la que aparece representada la
función sin(x). Esta figura tiene un título "Función
seno(x)" y una cuadrícula o "grid". En realidad la
línea anterior contiene también varias instrucciones separadas por comas o puntos y comas. En la
primera se crea un vector x con 801 valores reales
entre -4 y 4, separados por una centésima. A continuación se crea un vector y, cada uno de cuyos
elementos es el seno del correspondiente elemento
del vector x. Después se dibujan los valores de y
en ordenadas frente a los de x en abscisas. Las dos
últimas instrucciones establecen la cuadrícula y el
título.
Un pequeño aviso antes de seguir adelante. AdeFigura 4. Gráfico de la función seno(x).
más de con la Command History, es posible recuperar comandos anteriores de MATLAB y moverse por dichos comandos con el ratón y con las teclas-flechas ↑ y ↓. Al pulsar la primera de dichas flechas 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. Recuérdese que sólo hay una línea activa (la última).
Para borrar todas las salidas anteriores de MATLAB y dejar limpia
la Command Window se pueden
utilizar las funciones clc y home.
La función clc (clear console) elimina todas las salidas anteriores,
mientras que home las mantiene,
pero lleva el prompt (>> ) a la primera línea de la ventana.
Figura 5. Menú Help de MATLAB.
Si se desea salir de MATLAB basta
teclear los comandos quit o exit,
elegir Exit MATLAB en el menú File o utilizar cualquiera de los medios de terminar una aplicación
en Windows.

3

En un portátil con Pentium IV Mobile a 2 Ghz el número de Mflops puede ser del orden de 1350. Hace 10 años un
ordenador de esta potencia hubiera costado varios millones de Euros.

Capítulo 2: Introducción

página 7

2.4. Uso del Help
MATLAB 7.0 dispone de un excelente Help con el que se puede encontrar la información que se
desee. La Figura 5 muestra las distintas opciones que aparecen en el menú Help de la ventana principal de la aplicación:
1. Full Product Family Help, Se abre la
ventana de la Figura 8, en la que se puede
buscar información general sobre MATLAB o sobre otros productos de la familia a los que se tenga acceso. La forma de
la ventana de ayuda es típica y común con
otros niveles de ayuda. La mayor parte de
las páginas de ayuda están en formato
HTML.

Figura 6. Algunas páginas web sobre MATLAB.

2. MATLAB Help. Se abre la ventana de la
Figura 9, en la que se puede buscar ayuda
general sobre MATLAB o sobre la función o el concepto que se desee. La portada de esta ayuda tiene tres capítulos principales: Functions, que contiene información de referencia sobre las funciones por
orden alfabético o por categorías; Handle
Graphics, que permite acceder a información concreta sobre las distintas propiedades de los objetos gráficos; Documentation Set, que da acceso a versiones completas de los manuales del programa en
Figura 7. Demos disponibles en MATLAB.
formato de pantalla fácilmente navegable
(con apartados de Getting Started, User Guides, Programming Tips y Examples in Documentation), Product Demos (con una colección de jemplos programados que se pueden ejecutar y cuyo código se puede examinar para ver cómo están programados), What's New (con las novedades de esta versión respecto a la anterior), Printing the Documentation Set (que permite abrir
documentos PDF (Portable Document Format), que se corrresponden con las versiones en papel
de los manuales del programa, y que precisan del programa Adobe Acrobat Reader 5.0 o superior.) y un apartado final sobre The MathWorks Web Site Resources (que permite acceder a una
amplísima colección de informaciones adicionales disponibles en la web de la empresa que ha
desarrollado MATLAB). En la parte izquierda de la ventana, cuando está seleccionada la pestaña Contents, aparece un índice temático estructurado en forma de árbol que puede ser desplegado y recorrido con gran facilidad. Las restantes pestañas de esta ventana dan acceso a un índice
por palabras (Index), a un formulario de búsqueda (Search) y a la colección de ejemplos ya programados antes citada (Demos).
3. Using the Desktop. Se abre una ventana de ayuda con un formato similar a las de las Figuras
anteriores con información detallada sobre cómo utilizar y configurar el entorno de desarrollo o
Desktop. Las distintas herramientas disponibles se describen sucesivamente. Cada página dispone de flechas y enlaces que permiten ir a la página siguiente o volver a la anterior. Es posible
también imprimir aquellas páginas que se deseee consultar o archivar sobre papel. Una característica muy importante es la posibilidad de organizar las ventanas con gran flexibilidad, agrupándolas o independizándoles según los propios gustos o deseos.

Aprenda Matlab 7.0 como si estuviera en Primero

página 8

4. Using the Command Window. Esta opción del menú Help da acceso a la información necesaria
para aprovechar las capacidades de la Command Window, que es el corazón de MATLAB.
5. Web Resources. La ¡Error! No se encuentra el origen de la referencia. muestra algunas direcciones de Internet con información interesante sobre MATLAB. Todas ellas corresponden a
distintas secciones de la web de The Mathworks (la empresa que desarrolla y comercializa MATLAB), cuya página de inicio se muestra en primer lugar.
6. Check for Updates. MATLAB se conecta con The Mathworks y comprueba si has versiones
más recientes de los productos instalados. Si se es un usuario registrado, es posible descargar las
versiones más actuales.
7. Demos. Se abre una ventana como la mostrada en la Figura 7 que da acceso a un buen número
de ejemplos resueltos con MATLAB, cuyos resultados se presentan gráficamente de diversas
formas. Es muy interesante recorrer estos ejemplos para hacerse idea de las posibilidades del
programa, tanto en cálculo como en gráficos. Es asimismo muy instructivo analizar los ficheros
*.m de los ejemplos de características similares a las de la aplicación de se desea desarrollar.
Además, de una forma muy inmediata, es posible también recurrir al Help desde la línea de comandos de la Command Window. Se aconseja practicar un poco al respecto. Por ejemplo, obsérvese la
respuesta a los siguientes usos del comando help:
>> help
>> help lang

El comando helpwin seguido de un nombre de comando o de función muestra la información correspondiente a ese comando en la ventana Help (ver Figura 8). En la parte superior de la ventana
que se abre se muestra un enlace View code for …, que permite acceder al código fuente si está
disponible; con la opción Go to online doc for ... se accede a una información más completa que
puede incluir ejemplos y comandos similares sobre los que también se ofrece ayuda. En la parte
inferior de la página aparece una lista de enlaces See Also a funciones relacionadas.
El comando doc tecleado en la línea de comandos equivale a Help/Full Product Family Help; si va
seguido de un nombre de comando o función se muestra la información detallada correspondiente a
ese comando de modo similar a Go to online doc for ... en el párrafo anterior.
En resumen, MATLAB dispone de una ayuda muy completa y accesible, estructurada en varios
niveles (línea de comandos en la Command Window, ventana Help, y manuales en formato PDF),
con la que es muy importante estar familiarizado, porque hasta los más expertos programadores
tienen que acudir a ella con una cierta frecuencia.

Figura 8. Ventana inicial de Help Full Product Family.

Figura 9. Ventana inicial de Help Matlab.

Capítulo 2: Introducción

página 9

2.5. El entorno de trabajo de MATLAB
El entorno de trabajo de MATLAB es muy gráfico e intuitivo, similar al de otras aplicaciones profesionales de Windows. En la introducción a MATLAB realizada en el Apartado 2.3 y en la Figura
1, ya se han citado algunas de las componentes más importantes de este entorno de trabajo o de desarrollo. Ahora de explicarán estas componentes con un poco más de detalle.
Las componentes más importantes del entorno de trabajo de MATLAB 7.0 son las siguientes:
1.

El Escritorio de Matlab (Matlab Desktop), que es la ventana o contenedor de máximo nivel
en la que se pueden situar (to dock) las demás componentes.

2.

Las componentes individuales, orientadas a tareas concretas, entre las que se puede citar:
a.
b.
c.
d.
e.
f.
g.
h.
i.

La ventana de comandos (Command Window),
La ventana histórica de comandos (Command History),
El espacio de trabajo (Workspace),
La plataforma de lanzamiento (Launch Pad),
El directorio actual (Current Directory),
La ventana de ayuda (Help)
El editor de ficheros y depurador de errores (Editor&Debugger),
El editor de vectores y matrices (Array Editor).
La ventana que permite estudiar cómo se emplea el tiempo de ejecución (Profiler).

A continuación se describen brevemente estas componentes. Téngase en cuenta que utilizar MATLAB y desarrollar programas para MATLAB es mucho más fácil si se conoce bien este entorno de
trabajo. Para alcanzar la máxima productividad personal en el uso de esta aplicación es por ello muy
importante leer con atención las secciones que siguen.
2.5.1. EL ESCRITORIO DE MATLAB (MATLAB DESKTOP)
El Matlab Desktop es la ventana más general de la aplicación. El resto de las ventanas o componentes citadas pueden alojarse en la Matlab Desktop o ejecutarse como ventanas independientes. A su
vez, los componentes alojados en el Matlab Desktop pueden aparecer como sub-ventanas independientes o como pestañas dentro de una de las sub-ventanas. MATLAB 7.0 ofrece una gran flexibilidad al respecto y es cada usuario quien decide en qué forma desea utilizar la aplicación.
Cuando se arranca MATLAB por primera vez o cuando se ejecuta el comando View/Desktop Layout/Default aparece una ventana como la mostrada en la Figura 10. Aunque dividida en tres zonas,
en realidad aparecen cuatro componentes, pues la sub-ventana superior izquierda contiene dos
componentes superpuestas que se permutan por medio de la pestaña correspondiente.
La Figura 11 muestra un detalle del menú Desktop, desde el que se controlan las componentes visibles y la forma en que se visualizan. Por ejemplo, como en la Figura 10 la ventana activa es la
Command Window, en el menú de la Figura 11 aparece la opción de dejar de alojar dicha ventana
en el Matlab Desktop (Undock Command Window). Dicho menú permite también eliminar del
Desktop alguna de las componentes visibles o visualizar el Help (que no está visible). Con los submenús de Desktop Layout se pueden adoptar algunas configuraciones predefinidas, como la configuración por defecto (Default) o incluir sólo la Command Window. La configuración adoptada por
el usuario se mantendrá la siguiente vez que arranque el programa. Es posible también guardar distintas configuraciones con distintos nombres, para su uso posterior.

Aprenda Matlab 7.0 como si estuviera en Primero

página 10

Figura 10. Configuración por defecto del Matlab Desktop.

Figura 11. Menú para configurar el Matlab Desktop.

Figura 12. Arrastrar una pestaña desde una sub-ventana.

Figura 13. Creación de una nueva sub-ventana.

Además del menú mostrado en la Figura 11, que cambia en algunos detalles según cual sea la ventana activa, el usuario puede configurar el Matlab Desktop por medio del ratón mediante algunas
operaciones como las siguientes:
1.

Colocando el ratón sobre los bordes intermedios de las sub-ventanas y arrastrando puede modificar su tamaño en la forma que desee.

2.

Clicando sobre la barra de título de la sub-ventana activa y arrastrando (Figura 12) se puede
llevar a otra parte del Desktop, obteniéndose el resultado mostrado en la Figura 13.

3.

Si todas las ventanas se van seleccionando sucesivamente y se elige la correspondiente opción
Undock... en el menú View, se podría obtener una configuración como la mostrada en la
Figura 14, en la que todas las ventanas son independientes y aparecen separadas en la barra de
tareas.

4.

Finalmente, si se parte de la configuración por defecto y cada uno de los componentes se
arrastra sobre la Command Window se puede obtener una configuración como la mostrada en
la Figura 15, en la que todos los componentes abiertos aparecen como pestañas alternativas en
una ventana única.

Capítulo 2: Introducción

Figura 14. Ventanas independientes sobre el Desktop.

página 11

Figura 15. Todos los componentes compartiendo ventana.

La variedad de configuraciones mostradas en las figuras precedentes da una idea de las posibilidades de adaptación a las preferencias del usuario que tiene la versión 7.0 de MATLAB. Otros componentes como el Help Browser podrían añadirse a esta ventana de forma análoga. En los apartados
siguientes se analizan algunas de las posibilidades de cada componente.
2.5.2. COMMAND WINDOW
Ésta es la ventana en la que se ejecutan interactivamente las instrucciones de MATLAB y en donde
se muestran los resultados correspondientes, si es el caso. En cierta forma es la ventana más importante y la única que existía en las primeras versiones de la aplicación. En esta nueva versión se han
añadido algunas mejoras significativas, como las siguientes:
1.

Se permiten líneas de comandos muy largas que automáticamente siguen en la línea siguiente
al llegar al margen derecho de la ventana. Para ello hay que activar la opción Wrap Lines, en
el menú File/Preferences/Command Window.

2.

Clicando con el botón derecho sobre el nombre de una función que aparezca en esta ventana
se tiene acceso a la página del Help sobre dicha función. Si el código fuente (fichero *.m) está
disponible, también se puede acceder al fichero correspondiente por medio del Editor/Debugger.

3.

Comenzando a teclear el nombre de una función y pulsando la tecla Tab, MATLAB completa
automáticamente el nombre de la función, o bien muestra en la línea siguiente todas las funciones disponibles que comienzan con las letras tecleadas por el usuario.

4.

Cuando al ejecutar un fichero *.m se produce un error y se obtiene el correspondiente mensaje
en la Command Window, MATLAB muestra mediante un subrayado un enlace a la línea del
fichero fuente en la que se ha producido el error. Clicando en ese enlace se va a la línea correspondiente del fichero por medio del Editor/Debugger.

2.5.3. COMMAND HISTORY BROWSER
La ventana Command History ofrece acceso a las sentencias que se han ejecutado anteriormente en
la Command Window. Estas sentencias están también accesibles por medio de las teclas ↑ y ↓ como en las versiones anteriores, pero esta ventana facilita mucho el tener una visión más general de
lo hecho anteriormente y seleccionar lo que realmente se desea repetir.
Las sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un doble clic o por
medio del menú contextual que se abre al clicar sobre ellas con el botón derecho. También se pue-

Aprenda Matlab 7.0 como si estuviera en Primero

página 12

den copiar y volcar sobre la línea de comandos, pero se ha de copiar toda la línea, sin que se admita
la copia de un fragmento de la sentencia. Existen opciones para borrar algunas o todas las líneas de
esta ventana. Se puede también hacer un profile (evaluar la eficiencia relativa) de una sentencia o
de un grupo de sentencias.
2.5.4. CURRENT DIRECTORY BROWSER
El concepto de directorio activo o directorio actual es muy importante en MATLAB. Los programas de MATLAB se encuentran en ficheros con la extensión *.m. Estos ficheros se ejecutan tecleando su nombre en la línea de comandos (sin la extensión), seguido de los argumentos entre paréntesis, si se trata de funciones. No todos los ficheros *.m que se encuentren en el disco duro o en
otras unidades lógicas montadas en una red local son accesibles sin más. Para que un fichero *.m se
pueda ejecutar es necesario que se cumpla una de las dos condiciones siguientes:
1.

Que esté en el directorio actual. MATLAB mantiene en todo momento un único directorio
con esta condición. Este directorio es el primer sitio en el que MATLAB busca cuando desde
la línea de comandos se le pide que ejecute un fichero.

2.

Que esté en uno de los directorios indicados en el Path de MATLAB. El Path es una lista ordenada de directorios en los que el programa busca los ficheros o las funciones que ha de ejecutar. Muchos de los directorios del Path son propios de MATLAB, pero los usuarios también pueden añadir sus propios directorios, normalmente al principio o al final de la lista. En
un próximo apartado se verá cómo se controla el Path.

El comando pwd (de print working directory) permite saber cuál es el directorio actual. Para cambiar de directorio actual se puede utilizar el comando cd (de change directory) en la línea de comandos, 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. Éste es el mismo sistema que
se sigue para cambiar de directorio en las ventanas de MS-DOS. MATLAB permite utilizar la barra
normal (/) y la barra invertida (\), indistintamente.
La ventana Current Directory permite explorar los directorios del ordenador en forma análoga a la
del Explorador u otras aplicaciones de Windows. Cuando se llega al directorio deseado se muestran
los ficheros y ficheros allí contenidos. La ventana Current Directory permite ordenarlos por fecha,
tamaño, nombre, etc. El directorio actual cambia automáticamente en función del directorio seleccionado con este explorador, y también se puede cambiar desde la propia barra de herramientas del
Matlab Desktop. Los ficheros *.m mostrados en la ventana Current Directory se pueden abrir con
el Editor/Debugger mediante un doble clic.
A partir del menú contextual que se abre clicando con el botón derecho en cualquier parte de la ventana Current Directory se tiene la posibilidad de añadir ese directorio al Path de MATLAB.
2.5.5. PATH DE MATLAB: ESTABLECER EL CAMINO DE BÚSQUEDA (SEARCH PATH)
MATLAB puede llamar a una gran variedad de funciones, tanto propias como programadas por los
usuarios. Puede incluso haber funciones distintas con 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 el camino 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 cuadro de diálogo Set Path, del menú File. El comando path

Capítulo 2: Introducción

página 13

hace que se escriba el search path de MATLAB (el resultado depende de en qué directorio esté
instalado MATLAB; se muestran sólo unas pocas líneas de la respuesta real del programa):
>> path
>> path
MATLABPATH
C:\MATLAB701\toolbox\matlab\general
C:\MATLAB701\toolbox\matlab\ops
C:\MATLAB701\toolbox\matlab\lang
C:\MATLAB701\toolbox\matlab\elmat
...
C:\MATLAB701\toolbox\matlab\helptools
C:\MATLAB701\toolbox\matlab\winfun
C:\MATLAB701\toolbox\matlab\demos
C:\MATLAB701\toolbox\local

Para ver cómo se utiliza el search path supóngase que se utiliza la palabra nombre1 en un comando. El proceso que sigue el programa para tratar de conocer qué es nombre1 es el siguiente:
1.

Comprueba si nombre1 es una variable previamente definida por el usuario.

2.

Comprueba si nombre1 es una función interna o intrínseca de MATLAB.

3.

Comprueba si nombre1 es una sub-función o una función privada del usuario (apartado 6.3).

4.

Comprueba si hay un fichero llamado nombre1.mex, nombre1.dll o nombre1.m en el directorio actual, cuyo contenido se obtiene con el comando dir. Ya se ha visto cómo se cambiaba el
directorio actual.

5.

Comprueba si hay ficheros llamados nombre1.mex, nombre1.dll o nombre1.m en los directorios incluidos en el search path de MATLAB.

Estos pasos se realizan por el orden indicado. En cuanto se encuentra lo que se está buscando se
detiene la búsqueda y se utiliza el fichero que se ha encontrado. Conviene saber que, a igualdad de
nombre, los ficheros *.mex tienen precedencia sobre los ficheros *.m que están en el mismo directorio.

Figura 16. Cuadro de diálogo Set Path.

Figura 17. Añadir un directorio al Path.

El cuadro de diálogo que se abre con el comando File/Set Path ayuda a definir la lista de directorios
donde MATLAB debe buscar los ficheros de comandos y las funciones, tanto del sistema como de
usuario. Al ejecutar dicho comando aparece el cuadro de diálogo de la Figura 16, en el cual se
muestra la lista de directorios en la que MATLAB buscará. Para añadir (o quitar) un directorio a

Aprenda Matlab 7.0 como si estuviera en Primero

página 14

esta lista se debe clicar sobre los botones Add Folder o Add with Subfolders, con lo cual aparece un
nuevo cuadro de diálogo, mostrado en la Figura 17, que ayuda a elegir el directorio deseado. El
nuevo directorio se añade al comienzo de la lista, pero desde esa posición puede desplazarse hacia
abajo o hasta el final con los botones Move Down o Move to Botton, respectivamente. Como ya se
ha dicho el orden de la lista es muy importante, porque refleja el orden de la búsqueda: si dos funciones con el mismo nombre están en dos directorios diferentes, se utilizará la que primero se encuentre. El cuadro de diálogo Set Path contiene los botones necesarios para realizar todas las operaciones que el usuario desee.
Para incluir desde la línea de comandos de MATLAB un directorio nuevo al comienzo del Path sin
utilizar el cuadro de diálogo Set Path, se puede utilizar también el comando path, que concatena
dos listas de directorios (sólo se deben utilizar directorios que realmente existan en el PC), como
por ejemplo:
>> path('c:\mat\matlab', path)4

mientras que para añadir el nuevo directorio al final de la lista, se utilizaría el comando:
>> path(path, 'c:\mat\practicas')

El comando addpath permite añadir uno o más directorios al Path. Su forma general puede verse en
los siguientes ejemplos:
>> addpath 'c:\Matlab' 'c:\Temp' -end
>> addpath 'c:\Matlab\Pruebas' 'c:\Temp\Pruebas' -begin

donde la opción por defecto (cuando no se pone ni –begin ni –end) es añadir al comienzo de la lista.
Después de ejecutar estos comandos conviene comprobar cómo ha quedado modificado el search
path (recuérdese que los directorios deben existir en realidad).
No es difícil borrar las líneas que se han introducido en el Path: por una parte, los cambios no son
permanentes y dejarán de surtir efecto al salir de MATLAB y volver a entrar (salvo que se guarden
como opciones estables). Además se puede utilizar el comando rmpath (de remove path), al que se
le pasan la lista de directorios a eliminar del Path. Por ejemplo, el comando:
>> rmpath 'c:\Matlab' 'c:\Temp'

borra del Path los dos directorios indicados.
2.5.6. WORKSPACE BROWSER Y ARRAY EDITOR
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 o de la función
que se está jecutando. Para obtener información sobre el Workspace desde la línea de comandos se
pueden utilizar los comandos who y whos. El segundo proporciona una información más detallada
que el primero. Por ejemplo, una salida típica del comando whos es la siguiente:
>> whos
Name
A
B
C
D

Size
3x3
3x3
3x3
3x3

Bytes
72
72
72
72

Class
double
double
double
double

array
array
array
array

Grand total is 36 elements using 288 bytes

4

El comando path dentro del paréntesis de la función devuelve la lista de directorios anterior.

Capítulo 2: Introducción

página 15

Éstas son las variables del espacio de trabajo base (el de la línea de comandos de MATLAB). Más
adelante se verá que cada función tiene su propio espacio de trabajo, con variables cuyos nombres
no interfieren con las variables de los otros espacios de trabajo.
La ventana Workspace constituye un entorno gráfico para ver las variables definidas en el espacio
de trabajo. Se activa con el comando View/Workspace. La Figura 18 muestra el aspecto inicial de la
ventana Workspace cuando se abre desde un determinado programa. Haciendo doble clic por ejemplo sobre la matriz BARS aparece una nueva ventana (o pestaña, si la ventana ya existía) del Array
Editor, en la que se muestran y pueden ser modificados los elementos de dicha matriz (ver Figura
19).

Figura 18. Workspace Browser con elementos definidos.

Figura 19. Array Editor (Editor de Matrices).

Es importante insistir en que cada una de las funciones de MATLAB tiene su propio espacio de
trabajo, al que en principio sólo pertenecen las variables recibidas como argumentos o definidas
dentro de la propia función. En la barra de herramientas de la ventana Workspace aparece una lista
desplegable llamada Stack, con los espacios de trabajo del programa actual. Hay que tener en cuenta que cuando se termina de ejecutar una función y se devuelve el control al programa que la había
llamado, las variables definidas en la función dejan de existir (salvo que se hayan declarado como
persistent) y también deja de existir su espacio de trabajo.
Si se desean examinar otras matrices y/o vectores, al hacer doble clic sobre ellas el Array Editor las
muestra en la misma ventana como subventanas con una pestaña diferente.
Clicando con el botón derecho sobre alguna de las variables del Workspace Browser se abre un
menú contextual que ofrece algunas posibilidades interesantes, como por ejemplo la de representar
gráficamente dicha variable.
El Array Editor no sólo permite ver los valores de los elementos de cualquier matriz o vector definido en el programa: es también posible modificar estos valores clicando sobre la celda correspondiente. La ventana del Array Editor incluye una lista desplegable en la que se puede elegir el formato en el que se desea ver los datos.
El Array Editor es muy útil también para entender bien ciertos algoritmos, ejecutando paso a paso
un programa y viendo cómo cambian los valores de las distintas variables. Es posible aparcar o situar las ventanas o pestañas del Array Editor en la misma ventana del Editor/Debugger, que se va a
ver a continuación.

Aprenda Matlab 7.0 como si estuviera en Primero

página 16

2.5.7. EL EDITOR/DEBUGGER
En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files). Son ficheros de
texto ASCII, con la extensión *.m, que contienen conjuntos de comandos o definición de funciones (estos últimos son un poco más complicados y se verán más adelante). La importancia de estos
ficheros-M es que al teclear su nombre en la línea de comandos y pulsar Intro, se ejecutan uno tras
otro todos los comandos contenidos en dicho fichero. El poder guardar instrucciones y grandes matrices en un fichero permite ahorrar mucho trabajo de tecleado.

Figura 20. Ventana del Editor/Debugger.

Figura 21. Ejecución interactiva con el Editor/Debugger.

Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal como Notepad,
MATLAB dispone de un editor que permite tanto crear y modificar estos ficheros, como ejecutarlos
paso a paso para ver si contienen errores (proceso de Debug o depuración). La Figura 20 muestra la
ventana principal del Editor/Debugger, en la que se ha tecleado un fichero-M llamado Prueba1.m,
que contiene un comentario y seis sentencias5. El Editor muestra con diferentes colores los diferentes tipos o elementos constitutivos de los comandos (en verde los comentarios, en violeta las cadenas de caracteres, 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. Colocando el cursor antes o después de una
apertura o cierre de corchete o paréntesis y pulsando las teclas (←) o (→), el Editor muestra con
qué cierre o apertura de corchete o paréntesis se empareja el elemento considerado; si no se empareja con ninguno, aparece con una rayita de tachado.
Seleccionando varias líneas y clicando con el botón derecho aparece un menú contextual cuya sentencia Comment permite entre otras cosas comentar con el carácter % todas las líneas seleccionadas. Estos comentarios pueden volver a su condición de código ejecutable seleccionándolos y ejecutando Uncomment en el menú contextual. Otra opción muy útil de ese menú contextual es Smart
Indent, que organiza el sangrado de los bucles y bifurcaciones de las sentencias seleccionadas.
La Figura 21 corresponde a una ejecución de este fichero de comandos controlada con el Debugger.
Dicha ejecución se comienza eligiendo el comando Run en el menú Debug, pulsando la tecla F5,
) de la barra de herramientas del Editor o tecleando el nombre
clicando en el botón Continue (
del fichero en la línea de comandos de la Command Window. Los puntos rojos que aparecen en el
margen izquierdo son breakpoints (puntos en los que se detiene la ejecución de programa); la flecha verde en el borde izquierdo indica la sentencia en que está detenida la ejecución (antes de ejecutar dicha sentencia); cuando el cursor se coloca sobre una variable (en este caso sobre A) aparece
una pequeña ventana con los valores numéricos de esa variable, tal como se ve en la Figura 21.

5

Las seis sentencias de prueba1.m son las siguientes (reagrupadas en dos líneas):
clear all; A=rand(3,3); B=A';
C=inv(A); D=C*A; disp('Ya he terminado');

Capítulo 2: Introducción

página 17

En la Figura 21 puede apreciarse también que están activados los botones que corresponden al Debugger. El significado de estos botones, que aparece al colocar sobre ellos el cursor, es el siguiente:
Set/Clear Breakpoint. Coloca o borra un breakpoint en la línea en que está el cursor.
Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero.
Step. Avanzar un paso sin entrar en las funciones de usuario llamadas en esa línea.
Step In. Avanzar un paso, y si en ese paso hay una llamada a una función cuyo fichero
*.m está accesible, entra en dicha función.
Step Out. Salir de la función que se está ejecutando en ese momento.
Continue. Continuar la ejecución hasta el siguiente breakpoint.
Quit Debugging. Terminar la ejecución del Debugger.
Stack. En la parte derecha de la barra de herramientas aparece esta lista desplegable
(visible en la Figura 21 con las letras Pru...) mediante la cual se puede elegir el contexto, es decir el espacio de trabajo o el ámbito de las variables que se quieren examinar. Ya se ha comentado que el espacio de trabajo base (el de las variables creadas
desde la línea de comandos) y el espacio de trabajo de cada función son diferentes.
El Debugger es un programa que hay que conocer muy bien, pues es muy útil para detectar y corregir errores. Es también enormemente útil para aprender métodos numéricos y técnicas de programación. Para aprender a manejar el Debugger lo mejor es practicar.
Cuando se está ejecutando un programa con el Debugger, en cualquier momento se puede ir a la
línea de comandos de MATLAB y teclear una expresión para ver su resultado. También se puede
seleccionar con el ratón una sub-expresión en cualquier línea vista en el Editor/Debugger, clicar
con el botón derecho y en el menú contextual que se abre elegir Evaluate Selection. El resultado de
evaluar esa sub-expresión aparece en la línea de comandos de MATLAB.
Ya en las versiones anteriores MATLAB disponía de un Debugger alfanumérico que se utilizaba
desde la línea de comandos y en el que está basado el nuevo Debugger gráfico del que se ha hablado anteriormente. De hecho, al realizar operaciones con el Debugger gráfico van apareciendo las
correspondientes instrucciones en la línea de comandos de MATLAB. Para más información sobre
los comandos del Debugger alfanumérico, buscar en la sección “Editing and Debugging M-Files”
en Help/Matlab/Desktop Tools and Development Environment.
Seleccionando el nombre de una función o de un fichero de comandos en el código mostrado en la
ventana del Editor/Debugger y abriendo con el botón derecho el menú contextual correspondiente,
se ofrecen las tres posibilidades Evaluate Selection, Open Selection y Help on Selection, que son
muy útiles para comprobar, ver o recibir ayuda sobre la función seleccionada.
MATLAB permite también introducir breakpoints
condicionales (indicados con un punto amarillo, en
vez de rojo), en los que el programa se para sólo si
se cumple una determinada condición. Para introducir un breakpoint condicional basta clicar con el
botón derecho en la correspondiente línea del código
en la ventana del Editor/Debugger y elegir en el
menú contextual que resulta Set/Modify Conditional
Breakpoint. Se abre una ventana como la mostrada Figura 22. Establecer una condición en un breakpoint.
en la Figura 22 en la que se escribe la condición que debe cumplirse para que el programa se detenga en dicho punto.

Aprenda Matlab 7.0 como si estuviera en Primero

página 18

2.5.8. EL PROFILER
El profiler es un programa de utilidad que permite saber cómo se ha empleado el tiempo de la CPU
en la ejecución de un determinado programa. El profiler es una herramienta muy útil para determinar los cuellos de botella de un programa, es decir las funciones y las líneas de código que más veces se llaman y que se llevan la mayor parte del tiepo de ejecución. Por ejemplo, es obvio que si se
trata de mejorar la eficiencia de un programa, sería más importante mejorar una función que se llevase el 60% del tiempo total que otra que sólo se llevase el 2%. Dentro de la función más llamada,
el profiler proporcina información sobre el tiempo que se lleva cada sentencia, y da también algunas orientaciones sobre las posibilidades de mejorarla.
Para explicar el profiler es mejor haber avanzado más en el conocimiento de MATLAB. Por eso, su
presentación se demorará hasta la sección 6.11, a partir de la página 95.
2.6. Preferencias: Formatos de salida y de otras opciones de MATLAB
MATLAB 7.0 dispone de un cuadro de diálogo desde el que se establecen casi todas las opciones
que el usuario puede determinar por su cuenta. Este cuadro de diálogo se abre con el comando Preferences del menú File. En la Figura 23 se aparece el cuadro de diálogo Preferences mostrando
todas las posibilidades que ofrece en el menú de la izquierda: en total son 24 cuadros de diálogo
diferentes. La Figura 24 muestra el que permite elegir los colores generales del código.

Figura 23. Cuadro de diálogo Preferences/General.

Figura 24. Cuadro de diálogo Preferences/ Color.

El cuadro de diálogo Command Window/Fonts ofrece la posibilidad de elegir el tipo de letra –así
como el tamaño y el color, tanto de las letras como del fondo– con la que se escribe en la ventana de
comandos de MATLAB. Es muy importante utilizar tipos de letra de tamaño constante (por ejemplo, Courier New, Lucida Console o Monospaced), para que las filas de las matrices se alineen
bien en la pantalla.
Respecto a los formatos numéricos con que MATLAB muestra los resultados (recuérdese que
siempre calcula con doble precisión, es decir con unas 16 cifras decimales equivalentes), las posibilidades existentes se muestran en la lista desplegable de la Figura 25 y son las siguientes:
short
long
hex
bank
short e

coma fija con 4 decimales (defecto)
coma fija con 15 decimales
cifras hexadecimales
números con dos cifras decimales
notación científica con 4 decimales

Capítulo 2: Introducción

short g
long e
long g
rational

página 19

notación científica o decimal, dependiendo del valor
notación científica con 15 decimales
notación científica o decimal, dependiendo del valor
expresa los números racionales como cocientes de enteros

Estos formatos se pueden cambiar también desde la línea de comandos anteponiendo la palabra
format. Por ejemplo, para ver las matrices en formato long habrá que ejecutar el comando:
>> format long

Por otra parte, el formato loose introduce algunas líneas en blanco en la salida (opción por defecto),
mientras que el formato compact elimina las líneas en blanco citadas (es la opción recomendada en
este manual). Estas opciones están disponibles en el cuadro de diálogo de la Figura 25 y se pueden
también establecer desde la línea de comandos en la forma:
>> format compact

El cuadro de diálogo de la Figura 26 permite elegir un editor de programas distinto del que trae
MATLAB (built-in editor), así como obligar a que los ficheros se abran de modo automático al ejecutarlos con el Debugger.

Figura 25. Cuadro de diálogo Prefs./Command Window.

Figura 26. Cuadro de diálogo Prefs./Editor&Debugger.

MATLAB aplica un factor de escala general a las matrices cuando los elementos no enteros más
grandes o más pequeños son superiores o inferiores a una determinada cantidad (103 y 10–3, respectivamente). Hay que añadir que MATLAB trata de mantener el formato de los números que han
sido definidos como enteros (sin punto decimal). Si se elige la opción format rational el programa
trata de expresar los números racionales como cocientes de enteros.
2.7. Ficheros matlabrc.m, startup.m y finish.m
El search path inicial o por defecto de MATLAB está definido en un fichero llamado matlabrc.m,
en el sub-directorio toolbox\local. Este fichero contiene también otros parámetros de inicialización
y es, por ejemplo, el responsable de los mensajes que aparecen al arrancar el programa. Este fichero
se ejecuta automáticamente al arrancar MATLAB.
En las instalaciones de MATLAB en red, matlabrc.m es un fichero controlado por el administrador
del sistema. Una de las cosas que hace este fichero es ver si en algún directorio del search path
existe otro fichero llamado startup.m, y en caso de que exista lo ejecuta. Esto abre la posibilidad de
que cada usuario arranque MATLAB de una forma personalizada. Si en el search path de MA-

Aprenda Matlab 7.0 como si estuviera en Primero

página 20

TLAB se coloca un fichero creado por el usuario llamado startup.m las instrucciones contenidas en
dicho fichero se ejecutarán automáticamente cada vez que arranque MATLAB.
Un posible contenido de este fichero puede ser el siguiente (crearlo con el Editor/Debugger):
>> format compact
>> addpath 'c:\Matlab\Practicas' -end
>> disp('¡Hola!')

Se puede crear el fichero startup.m en el directorio indicado y probar a arrancar MATLAB. Si el
saludo ¡Hola! se sustituye por un saludo más personal (por ejemplo, incluyendo el propio nombre),
se comprobará lo explicado previamente. Es muy aconsejable crear este fichero si MATLAB se
utiliza en un ordenador de uso personal.
De forma análoga, al abandonar la ejecución de MATLAB con el comando quit se ejecuta automáticamente el fichero finish.m, siempre que se encuentre en alguno de los directorios del search
path. Este fichero se puede utilizar por ejemplo para guardar el espacio de trabajo de MATLAB
(ver apartado 2.8) y poder continuar en otro momento a partir del punto en el que se abandonó el
trabajo, por ejemplo al cerrar el programa.
2.8. Guardar variables y estados de una sesión: Comandos save y load
En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo recuperar más tarde en el mismo punto en el que se dejó (con las mismas variables definidas, con los
mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra automáticamente.
Para guardar el estado de una sesión de trabajo existe el comando save. Si se teclea:
>> save

antes de abandonar el programa, se crea en el directorio actual un fichero binario llamado matlab.mat (o matlab) con el estado de la sesión (excepto los gráficos, que por ocupar mucha memoria
hay que guardar aparte). Dicho estado puede recuperarse la siguiente vez que se arranque el programa con el comando:
>> load

Esta es la forma más básica de los comandos save y load. Se pueden guardar también matrices y
vectores de forma selectiva y en ficheros con nombre especificado por el usuario. Por ejemplo, el
comando (sin comas entre los nombres de variables):
>> save filename A x y

guarda las variables A, x e y en un fichero binario llamado filename.mat (o filename). Para recuperarlas en otra sesión basta teclear:
>> load filename

Si no se indica ninguna variable, se guardan todas las variables creadas en esa sesión.
El comando save permite guardar el estado de la sesión en formato ASCII utilizándolo de la siguiente forma (lo que va detrás del carácter (%) es un comentario que es ignorado por MATLAB):
>> save -ascii
% almacena 8 cifras decimales
>> save -ascii -double
% almacena 16 cifras decimales
>> save -ascii -double -tab % almacena 16 cifras separadas por tabs

aunque en formato ASCII sólo se guardan los valores y no otra información tal como los nombres
de las matrices y/o vectores. Cuando se recuperan estos ficheros con load -ascii toda la información

Capítulo 2: Introducción

página 21

se guarda en una única matriz con el nombre del fichero. Esto produce un error cuando no todas las
filas tienen el mismo número de elementos.
Con la opción -append en el comando save la información se guarda a continuación de lo que
hubiera en el fichero.
El comando load admite las opciones -ascii y -mat, para obligarle a leer en formato ASCII o binario, respectivamente.
2.9. Guardar sesión y copiar salidas: Comando diary
Los comandos save y load crean ficheros binarios o ASCII con el estado de la sesión. Existe otra
forma más sencilla de almacenar en un fichero un texto que describa lo que el programa va haciendo (la entrada y salida de los comandos utilizados). Esto se hace con el comando diary en la forma
siguiente:
>> diary filename.txt
...
>> diary off
...
>> diary on
...

El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando diary pasa de on a off y viceversa. Para poder acceder al fichero filename.txt con Notepad o Word es
necesario que diary esté en off. Si en el comando diary no se incluye el nombre del fichero se utiliza por defecto un fichero llamado diary (sin extensión).
2.10. Líneas de comentarios
Ya se ha indicado que para MATLAB el carácter tanto por ciento (%) indica comienzo de comentario. Cuando aparece en una línea de comandos, el programa supone que todo lo que va desde ese
carácter hasta el fin de la línea es un comentario.
Más adelante se verá que los comentarios de los ficheros *.m tienen algunas peculiaridades importantes, pues pueden servir para definir help's personalizados de las funciones que el usuario vaya
creando.
MATLAB permite comentar bloques de sentencias, es decir, muchas sentencias contiguas de una
vez. Una forma de hacerlo es seleccionar las sentencias que se desea comentar, clicar con el botón
derecho, y elegir la opción Comment en el menú que se abre; las sentencias selecionadas se comentan individualmente con el carácter %. De forma similar se pueden eliminar los comentarios.
Otra forma de comentar bloques de sentencias (similar a la utilizada en C/C++ con /* y */) es encerrar las líneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques comentados pueden
incluirse dentro de otros bloques comentados más amplios (bloques anidados).
2.11. Medida de tiempos y de esfuerzo de cálculo
MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones matemáticas realizadas. Algunas de estas funciones son las siguientes:
cputime

devuelve el tiempo de CPU (con precisión de centésimas de segundo) desde
que el programa arrancó. Llamando antes y después de realizar una operación y
restando los valores devueltos, se puede saber el tiempo de CPU empleado en
esa operación. Este tiempo sigue corriendo aunque MATLAB esté inactivo.

Aprenda Matlab 7.0 como si estuviera en Primero

página 22

etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (¡atención al orden!), obtenidos
como respuesta al comando clock.
tic ops toc
imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj
a cero y toc obtiene el tiempo transcurrido.
A modo de ejemplo, el siguiente código mide de varias formas el tiempo necesario para resolver un
sistema de 1000 ecuaciones con 1000 incógnitas. Téngase en cuenta que los tiempos pequeños (del
orden de las décimas o centésimas de segundo), no se pueden medir con gran precisión.
>>
>>
>>
>>

n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1);
tiempoIni=clock; x=A\b; tiempo=etime(clock, tiempoIni)
time=cputime; x=A\b; time=cputime-time
tic; x=A\b; toc

donde se han puesto varias sentencias en la misma línea para que se ejecuten todas sin tiempos
muertos al pulsar intro. Esto es especialmente importante en la línea de comandos en la que se quiere medir los tiempos. Todas las sentencias de cálculos matriciales van seguidas de punto y coma (;)
con objeto de evitar la impresión de resultados. Conviene ejecutar dos o tres veces cada sentencia
para obtener tiempos óptimos, ya que la primera vez que se ejecutan se emplea un cierto tiempo en
cargar las funciones a memoria.

Capítulo 3: Operaciones con matrices y vectores

página 23

3. OPERACIONES CON MATRICES Y VECTORES
Ya se ha comentado que MATLAB es fundamentalmente un programa para cálculo matricial. Inicialmente se utilizará MATLAB como programa interactivo, en el que se irán definiendo las matrices, los vectores y las expresiones que los combinan y obteniendo los resultados sobre la marcha. Si
estos resultados son asignados a otras variables podrán ser utilizados posteriormente en otras expresiones. En este sentido MATLAB sería como una potente calculadora matricial (en realidad es esto
y mucho más...).
Antes de tratar de hacer cálculos complicados, la primera tarea será aprender a introducir matrices y
vectores desde el teclado. Más adelante se verán otras formas más potentes de definir matrices y
vectores.
3.1. Definición de matrices desde teclado
Como en casi todos los lenguajes de programación, en MATLAB las matrices y vectores son variables que tienen nombres. Ya se verá luego con más detalle las reglas que deben cumplir estos nombres. Por el momento se sugiere que se utilicen letras mayúsculas para matrices y letras minúsculas para vectores y escalares (MATLAB no exige esto, pero puede resultar útil).
Para definir una matriz no hace falta declararlas o 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 o introducen por filas6; los elementos de una misma fila están separados por blancos o
comas, mientras que las filas están separadas por pulsaciones intro o por caracteres punto y coma
(;). Por ejemplo, el siguiente comando define una matriz A de dimensión (3×3):
>> A=[1 2 3; 4 5 6; 7 8 9]

La respuesta del programa es la siguiente:
A =
1
4
7

2
5
8

3
6
9

A partir de este momento la matriz A está disponible para hacer cualquier tipo de operación con ella
(además de valores numéricos, en la definición de una matriz o vector se pueden utilizar expresiones y funciones matemáticas). Por ejemplo, una sencilla operación con A es hallar su matriz traspuesta. En MATLAB el apóstrofo (') es el símbolo de transposición matricial. Para calcular A'
(traspuesta de A) basta teclear lo siguiente (se añade a continuación la respuesta del programa):
>> A'
ans =
1
2
3

4
5
6

7
8
9

Como el resultado de la operación no ha sido asignado a ninguna otra matriz, MATLAB utiliza un
nombre de variable por defecto (ans, de answer), que contiene el resultado de la última operación.
La variable ans puede ser utilizada como operando en la siguiente expresión que se introduzca.
También podría haberse asignado el resultado a otra matriz llamada B:

6

Aunque en MATLAB las matrices se introducen por filas, se almacenan por columnas, lo cual tiene su importancia
como se verá más adelante.

Aprenda Matlab 7.0 como si estuviera en Primero

>> B=A'
B =
1
2
3

4
5
6

página 24

7
8
9

Ahora ya están definidas las matrices A y B, y es posible seguir operando con ellas. Por ejemplo, se
puede hacer el producto B*A (deberá resultar una matriz simétrica):
>> B*A
ans =
66
78
90

78
93
108

90
108
126

En MATLAB se accede a los elementos de un vector poniendo el índice entre paréntesis (por ejemplo x(3) ó x(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
(3×3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Invertir una matriz es casi tan fácil como trasponerla. A continuación se va a definir una nueva matriz A -no singular- en la forma:
>> A=[1 4 -3; 2 1 5; -2 5 3]
A =
1
4
-3
2
1
5
-2
5
3

Ahora se va a calcular la inversa de A y el resultado se asignará a B. Para ello basta hacer uso de la
función inv( ) (la precisión o número de cifras con que se muestra el resultado se puede cambiar con
el menú File/Preferences/General):
B=inv(A)
B =
0.1803
0.1311
-0.0984

0.2213
0.0246
0.1066

-0.1885
0.0902
0.0574

Para comprobar que este resultado es correcto basta pre-multiplicar A por B;
>> B*A
ans =
1.0000
0.0000
0.0000

0.0000
1.0000
0.0000

0.0000
0.0000
1.0000

De forma análoga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres
números están separados por blancos o comas, el resultado será un vector fila):
>> x=[10 20 30]
% vector fila
x =
10
20
30

Por el contrario, si los números están separados por intros o puntos y coma (;) se obtendrá un vector columna:

Capítulo 3: Operaciones con matrices y vectores

>> y=[11; 12; 13]
y =
11
12
13

página 25

% vector columna

MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se
intenta sumar los vectores x e y se obtendrá el siguiente mensaje de error:
>> x+y
??? Error using ==> +
Matrix dimensions must agree.

Estas dificultades desaparecen si se suma x con el vector transpuesto de y:
>> x+y'
ans =
21

32

43

MATLAB considera vectores fila por defecto, como se ve en el ejemplo siguiente:
>> x(1)=1, x(2)=2
x =
1
x =
1
2

A continuación se van a estudiar estos temas con un poco más de detenimiento.
3.2. Operaciones con matrices
3.2.1. OPERADORES ARITMÉTICOS
MATLAB puede operar con matrices por medio de operadores y por medio de funciones. Se han
visto ya los operadores suma (+), producto (*) y traspuesta ('), así como la función invertir inv( ).
Los operadores matriciales de MATLAB son los siguientes:
+
–
*
'
^
\
/
.*
./ y .\
.^

adición o suma
sustracción o resta
multiplicación
traspuesta
potenciación
división-izquierda
división-derecha
producto elemento a elemento
división elemento a elemento
elevar a una potencia elemento a elemento

Estos operadores se aplican también a las variables o valores escalares, aunque con algunas diferencias7. 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. En este caso la operación con el escalar se aplica a cada uno de los elementos de
la matriz. Considérese el siguiente ejemplo:
7

En términos de C++ se podría decir que son operadores sobrecargados, es decir, con varios significados distintos
dependiendo del contexto, es decir, de sus operandos.

Aprenda Matlab 7.0 como si estuviera en Primero

página 26

>> A=[1 2; 3 4]
A =
1
2
3
4
>> A*2
ans =
2
4
6
8
>> A-4
ans =
-3
-2
-1
0

MATLAB utiliza el operador de división / para dividir por un escalar todos los elementos de una
matriz o un vector. Esto no constituye ninguna sorpresa. Sin embargo, el uso que se describe a continuación sí requiere más atención.
3.2.2. OPERADORES PARA LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALES
MATLAB utiliza los operadores de división para la resolución de sistemas de ecuaciones lineales.
Por su gran importancia, estos operadores requieren una explicación detenida. Considérese el siguiente sistema de ecuaciones lineales,
Ax = b

(1)

donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolución de este sistema de ecuaciones se puede escribir en las 2 formas siguientes (¡Atención a la 2ª forma, basada en la
barra invertida (\)8, que puede resultar un poco extraña!):
x = inv(A)*b

(2a)

x = A\b

(2b)

Así pues, el operador división-izquierda por una matriz (barra invertida \) equivale a pre-multiplicar
por la inversa de esa matriz. En realidad este operador es más general y más inteligente de lo que
aparece en el ejemplo anterior: el operador división-izquierda es aplicable aunque la matriz no tenga
inversa e incluso no sea cuadrada, en cuyo caso la solución que se obtiene (por lo general) es la que
proporciona el método de los mínimos cuadrados. Cuando la matriz es triangular o simétrica aprovecha esta circunstancia para reducir el número de operaciones aritméticas. En algunos casos se
obtiene una solución con no más de r elementos distintos de cero, siendo r el rango de la matriz.
Esto puede estar basado en que la matriz se reduce a forma de escalón y se resuelve el sistema dando valor cero a las variables libres o independientes. Por ejemplo, considérese el siguiente ejemplo
de matriz (1×2) que conduce a un sistema de infinitas soluciones:
>> A=[1 2], b=[2]
A =
1
2
b =
2
>> x=A\b
x =
0
1

que es la solución obtenida dando valor cero a la variable independiente x(1). Por otra parte, en el
caso de un sistema de ecuaciones redundante (o sobre-determinado) el resultado de MATLAB es el
punto más “cercano” -en el sentido de mínima norma del error- a las ecuaciones dadas (aunque no
8

En inglés, MATLAB denomina mldivide a este operador. Para más información, teclear help mldivide.

Capítulo 3: Operaciones con matrices y vectores

página 27

cumpla exactamente ninguna de ellas). Véase el siguiente ejemplo de tres ecuaciones formadas por
una recta que no pasa por el origen y los dos ejes de coordenadas:
>> A=[1 2; 1 0; 0 1], b=[2 0 0]'
A =
1
2
1
0
0
1
b =
2
0
0
>> x=A\b, resto=A*x-b
x =
0.3333
0.6667
resto =
-0.3333
0.3333
0.6667

Si la matriz es singular o está muy mal escalada, el operador \ da un aviso (warning), pero proporciona una solución.
La “inteligencia” del operador barra invertida \ tiene un coste: MATLAB debe de emplear cierto
tiempo en determinar las características de la matriz: triangular, simétrica, etc. Si el usuario conoce
perfectamente y con seguridad las características de la matriz del sistema, lo mejor es utilizar la
función linsolve (ver sección 4.5.4, en la página 46), que no realiza ninguna comprobación y puede
obtener la máxima eficiencia.
Aunque no es una forma demasiado habitual, también se puede escribir un sistema de ecuaciones
lineales en la forma correspondiente a la traspuesta de la ecuación (1):
yB = c

(3)

donde y y c son vectores fila (c conocido). Si la matriz B es cuadrada e invertible, la solución de
este sistema se puede escribir en las formas siguientes:
y = c*inv(B)

(4a)

y = c/B

(4b)

En este caso, el operador división-derecha por una matriz (/) equivale a postmultiplicar por la inversa de la matriz. Si se traspone la ecuación (3) y se halla la solución aplicando el operador división-izquierda se obtiene:
y' = (B')\c'

(5)

Comparando las expresiones (4b) y (5) se obtiene la relación entre los operadores división-izquierda
y división-derecha (MATLAB sólo tiene implementado el operador división-izquierda):
c/B = ((B')\c')'

(6)

3.2.3. OPERADORES ELEMENTO A ELEMENTO
En MATLAB existe también la posibilidad de aplicar elemento a elemento los operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.). Por ejemplo:
>> [1 2 3 4]^2
??? Error using ==> ^
Matrix must be square.

Aprenda Matlab 7.0 como si estuviera en Primero

>> [1 2 3 4].^2
ans =
1
4

9

página 28

16

>> [1 2 3 4]*[1 -1 1 -1]
??? Error using ==> *
Inner matrix dimensions must agree.
>> [1 2 3 4].*[1 -1 1 -1]
ans =
1
-2
3
-4

3.3. Tipos de datos
Ya se ha dicho que MATLAB es un programa preparado para trabajar con vectores y matrices. Como caso particular también trabaja con variables escalares (matrices de dimensión 1). MATLAB
trabaja siempre en doble precisión, es decir guardando cada dato en 8 bytes, con unas 15 cifras decimales exactas. Ya se verá más adelante que también puede trabajar con cadenas de caracteres
(strings) y, desde la versión 5.0, también con otros tipos de datos: Matrices de más dos dimensiones, matrices dispersas, vectores y matrices de celdas, estructuras y clases y objetos. Algunos de
estos tipos de datos más avanzados se verán en la última parte de este manual.
3.3.1. NÚMEROS REALES DE DOBLE PRECISIÓN
Los elementos constitutivos de vectores y matrices son números reales almacenados en 8 bytes (53
bits para la mantisa y 11 para el exponente de 2; entre 15 y 16 cifras decimales equivalentes). Es
importante saber cómo trabaja MATLAB con estos números y los casos especiales que presentan.
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, obsérvese cómo responde
el programa al ejecutar el siguiente comando:
>> 1.0/0.0
Warning: Divide by zero
ans =
Inf

Así pues, para MATLAB el infinito se representa como inf ó Inf. MATLAB tiene también una representación especial para los resultados que no están definidos como números. Por ejemplo, ejecútense los siguientes comandos y obsérvense las respuestas obtenidas:
>> 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. 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.
MATLAB dispone de tres funciones útiles relacionadas con las operaciones de coma flotante. Estas
funciones, que no tienen argumentos, son las siguientes:

Capítulo 3: Operaciones con matrices y vectores

eps

página 29

devuelve la diferencia entre 1.0 y el número de coma flotante inmediatamente superior. Da una idea de la precisión o número de cifras almacenadas. En un PC, eps vale 2.2204e-016.

realmin devuelve el número más pequeño con que se puede trabajar (2.2251e-308)
realmax devuelve el número más grande con que se puede trabajar (1.7977e+308)
3.3.2. OTROS TIPOS DE VARIABLES: INTEGER, FLOAT Y LOGICAL
Como ya se ha comentado, por defecto MATLAB trabaja con variables de punto flotante y doble
precisión (double). Con estas variables pueden resolverse casi todos los problemas prácticos y con
frecuencia no es necesario complicarse la vida declarando variables de tipos distintos, como se hace
con cualquier otro lenguaje de programación. Sin embargo, en algunos casos es conveniente declarar variables de otros tipos porque puede ahorrarse mucha memoria y pueden hacerse los cálculos
mucho más rápidamente.
MATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes (8, 16, 32 y 64 bits). A su vez, estas
variables pueden tener signo o no tenerlo. Las variables con signo representan números en intervalos "casi" simétricos respecto al 0; las variables sin signo representan número no negativos, desde el
0 al número máximo.
Los tipos de los enteros con signo son int8, int16, int32 e int64, y sin signo uint8, uint16, uint32 y
uint64. Para crear una variable entera de un tipo determinado se pueden utilizar sentencias como las
siguientes:
>> i=int32(100);
% se crea un entero de 4 bytes con valor 100
>> j=zeros(100); i=int32(j);
% se crea un entero i a partir de j
>> i=zeros(1000,1000,'int32'); % se crea una mariz 1000x1000 de enteros

Las funciones intmin('int64') e intmax('int64') permiten por ejemplo saber el valor del entero más
pequeño y más grande (en valor algebraico) que puede formarse con variables enteras de 64 bits:
>> disp([intmin('int64'), intmax('int64')])
-9223372036854775808 9223372036854775807

La función isinteger(i) devuelve 1 si la variable i es entera y 0 en otro caso. La función class(i) devuelve el tipo de variable que es i (int8, int16, ...), mientras que la función isa(i, 'int16') permite
saber exactamente si la variable i corresponde a un entero de 16 bits.
MATLAB dispone de dos tipos de variables reales o float: single y double, que ocupan respectivamente 4 y 8 bytes. Por defecto se utilizan doubles. Las funciones single(x) y double(y) permiten
realizar conversiones entre ambos tipos de variables.
Las funciones realmin y realmax permiten saber los números double más pequeño y más grande
(en valor absoluto) que admite el computador. Para los correspondientes números de simple precisión habría que utilizar realmin('single') y realmax('single'). La función isfloat(x) permite saber si
x es una variable real, de simple o doble precisión. Para saber exactamente de qué tipo de variable
se rata se pueden utilizar las funciones isa(x, 'single') ó isa(x, 'double'). Obsérvese el ejemplo siguiente, en el que se ve cómo con variables single se reduce el tiempo de CPU y la memoria:
>> n=1000; AA=rand(n); A=single(AA);
>> tic, Bs=inv(A); toc
Elapsed time is 1.985000 seconds.
>> tic, Bd=inv(AA); toc
Elapsed time is 4.296000 seconds.

Quizás las variables más interesantes –aparte de las variables por defecto, las double– sean las variables logical, que sólo pueden tomar los valores true (1) y false (0). Las variables lógicas surgen

Aprenda Matlab 7.0 como si estuviera en Primero

página 30

como resultado de los operadores relacionales (==, <, <=, >, >=, ~=, ver Apartado 3.6, en la página
38) y de muchas funciones lógicas como any y all que se aplican a vectores y matrices, y que se
verán en el Apartado 4.6, a partir de la página 46.
La función logical(A) produce una variable lógica, con el mismo número de elementos que A, con
valores 1 ó 0 según el correspondiente elementos de A sea distinto de cero o igual a cero.
Una de las aplicaciones más importantes de las variables lógicas es para separar o extraer los elemntos de una matriz o vector que cumplen cierta condición, y operar luego selectivamente sobre dichos
elementos. Obsérvese, el siguiente ejemplo:
>> A=magic(4)
A =
16
2
3
5
11
10
9
7
6
4
14
15
>> j=A>10
j =
1
0
0
0
1
0
0
0
0
0
1
1
>> isa(j,'logical')
ans =
1
>> A(j)=-10
A =
-10
2
3
5
-10
10
9
7
6
4
-10
-10

13
8
12
1

1
0
1
0

-10
8
-10
1

3.3.3. NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX
En muchos cálculos matriciales los datos y/o los resultados no son reales sino complejos, con parte
real y parte imaginaria. MATLAB trabaja sin ninguna dificultad con números complejos. Para ver
como se representan por defecto los números complejos, ejecútense los siguientes comandos:
>> a=sqrt(-4)
a =
0 + 2.0000i
>> 3 + 4j
ans =
3.0000 + 4.0000i

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 signo (*). 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, pues
puede dar lugar a errores y confusiones. Por ejemplo, obsérvense los siguientes resultados:
>> i=2
i =
2
>> 2+3i
ans =
2.0000 + 3.0000i
>> 2+3*i

Capítulo 3: Operaciones con matrices y vectores

página 31

ans =
8
>> 2+3*j
ans =
2.0000 + 3.0000i

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 desde teclado puede hacerse de las dos
formas, que se muestran en el ejemplo siguiente (conviene hacer antes clear i, para que i no esté
definida como variable; este comando se estudiará más adelante):
>> 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
% En este caso el * es necesario
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 la matriz conjugada
(conj( )) y el operador punto y apóstrofo (.') que calcula simplemente la matriz traspuesta.
3.3.4. CADENAS DE CARACTERES
MATLAB puede definir variables que contengan cadenas de caracteres. En MATLAB las cadenas
de texto van entre apóstrofos o comillas simples (Nótese que en C van entre comillas dobles: "cadena"). Por ejemplo, en MATLAB:
s = 'cadena de caracteres'

Las cadenas de texto tienen su más clara utilidad en temas que se verán más adelante y por eso se
difiere hasta entonces una explicación más detallada.
3.4. Variables y expresiones matriciales
Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora se va a tratar de
generalizar un poco lo visto hasta ahora.
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,

Aprenda Matlab 7.0 como si estuviera en Primero

página 32

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 intro. Si se desea que una expresión continúe en la línea siguiente,
hay que introducir tres puntos (...) antes de pulsar intro. También se pueden incluir varias expresiones en una misma línea separándolas por comas (,) o puntos y comas (;).
Si una expresión termina en punto y coma (;) su resultado se calcula, pero no se escribe en pantalla.
Esta posibilidad es muy interesante, tanto para evitar la escritura de resultados intermedios, como
para evitar 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 63
letras y números. La función namelengthmax permite preguntar al programa por este número
máximo de caracteres. 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
del ordenador.
Cuando se quiere tener una relación de las variables que se han utilizado en una sesión de trabajo
se puede utilizar el comando who. Existe otro comando llamado whos que proporciona además información sobre el tamaño, la cantidad de memoria ocupada y el carácter real o complejo de cada
variable. Se sugiere utilizar de vez en cuando estos comandos en la sesión de MATLAB que se tiene abierta. Esta misma información se puede obtener gráficamente con el Workspace Browser, que
aparece con el comando View/Workspace o activando la ventana correspondiente si estaba abierto.
El comando clear tiene varias formas posibles:
clear
clear A, b
clear global
clear functions
clear all

sin argumentos, clear elimina todas las variables creadas previamente (excepto las variables globales).
borra las variables indicadas.
borra las variables globales.
borra las funciones.
borra todas las variables, incluyendo las globales, y las funciones.

3.5. Otras formas de definir matrices
MATLAB dispone de varias formas de definir matrices. El introducirlas por teclado sólo es práctico
en casos de pequeño tamaño y cuando no hay que repetir esa operación muchas veces. Recuérdese
que en MATLAB no hace falta definir el tamaño de una matriz. Las matrices toman tamaño al ser
definidas y este tamaño puede ser modificado por el usuario mediante adición y/o borrado de filas y
columnas. A continuación se van a ver otras formas más potentes y generales de definir y/o modificar matrices.
3.5.1. TIPOS DE MATRICES PREDEFINIDOS
Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos particulares. Algunas de estas funciones son las siguientes:
eye(4)

forma la matriz unidad de tamaño (4×4)

Capítulo 3: Operaciones con matrices y vectores

zeros(3,5)
zeros(4)
ones(3)
ones(2,4)

página 33

forma una matriz de ceros de tamaño (3×5)
ídem de tamaño (4×4)
forma una matriz de unos de tamaño (3×3)
idem de tamaño (2×4)

linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2
logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre
10^d1 y 10^d2. Si d2 es pi9, los puntos se generan entre 10^d1 y pi
rand(3)
rand(2,5)
randn(4)

forma una matriz de números aleatorios entre 0 y 1, con distribución
uniforme, de tamaño (3×3)
idem de tamaño (2×5)
forma una matriz de números aleatorios de tamaño (4×4), con distribución normal, de valor medio 0 y varianza 1.

magic(4)

crea una matriz (4×4) con los números 1, 2, ... 4*4, con la propiedad de
que todas las filas y columnas suman lo mismo

hilb(5)

crea una matriz de Hilbert de tamaño (5×5). La matriz de Hilbert es una
matriz cuyos elementos (i,j) responden a la expresión (1/(i+j-1)). Esta es
una matriz especialmente difícil de manejar por los grandes errores numéricos a los que conduce

invhilb(5)

crea directamente la inversa de la matriz de Hilbert

kron(x,y)

produce una matriz con todos los productos de los elementos del vector
x por los elementos del vector y. Equivalente a x'*y, donde x e y son
vectores fila

compan(pol)

construye una matriz cuyo polinomio característico tiene como coeficientes los elementos del vector pol (ordenados de mayor grado a menor)

vander(v)

construye la matriz de Vandermonde a partir del vector v (las columnas
son las potencias de los elementos de dicho vector)

Existen otras funciones para crear matrices de tipos particulares. Con Help/Matlab Help se puede
obtener información sobre todas las funciones disponibles en MATLAB, que aparecen agrupadas
por categorías o por orden alfabético. En la categoría Mathematics aparecen la mayor parte de las
funciones estudiadas en este apartado.
3.5.2. FORMACIÓN DE UNA MATRIZ A PARTIR DE OTRAS
MATLAB ofrece también la posibilidad de crear una matriz a partir de matrices previas ya definidas, por varios posibles caminos:
–

recibiendo alguna de sus propiedades (como por ejemplo el tamaño),

–

por composición de varias submatrices más pequeñas,

–

modificándola de alguna forma.

A continuación se describen algunas de las funciones que crean una nueva matriz a partir de otra o
de otras, comenzando por dos funciones auxiliares:

9

pi es una variable predefinida en MATLAB, que como es fácil suponer representa el número π.

Aprenda Matlab 7.0 como si estuviera en Primero

página 34

[m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz es
cuadrada basta recoger el primer valor de retorno
n=length(x)
calcula el número de elementos de un vector x
zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A previamente creada
ones(size(A)) ídem con unos
A=diag(x)
forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x
x=diag(A)
forma un vector x a partir de los elementos de la diagonal de una matriz ya
existente A
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A
blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le
pasan como argumentos
triu(A)
forma una matriz triangular superior a partir de una matriz A (no tiene por
qué ser cuadrada). Con un segundo argumento puede controlarse que se
mantengan o eliminen más diagonales por encima o debajo de la diagonal
principal.
tril(A)
ídem con una matriz triangular inferior
rot90(A,k)
Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un
entero que puede ser negativo. Si se omite, se supone k=1
flipud(A)
halla la matriz simétrica de A respecto de un eje horizontal
fliplr(A)
halla la matriz simétrica de A respecto de un eje vertical
reshape(A,m,n) Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m×n
cuyas columnas se obtienen a partir de un vector formado por las columnas
de A puestas una a continuación de otra. Si la matriz A tiene menos de
m×n elementos se produce un error.
Un caso especialmente interesante es el de crear una nueva matriz componiendo como submatrices
otras matrices definidas previamente. A modo de ejemplo, ejecútense las siguientes líneas de comandos y obsérvense los resultados obtenidos:
>> A=rand(3)
>> B=diag(diag(A))
>> C=[A, eye(3); zeros(3), B]

En el ejemplo anterior, la matriz C de tamaño (6×6) se forma por composición de cuatro matrices
de tamaño (3×3). Al igual que con simples escalares, las submatrices que forman una fila se separan
con blancos o comas, mientras que las diferentes filas se separan entre sí con intros o puntos y comas. Los tamaños de las submatrices deben de ser coherentes.
3.5.3. DIRECCIONAMIENTO DE VECTORES Y MATRICES A PARTIR DE VECTORES
Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En este caso,
x(v) equivale al vector x(v(1)), x(v(2)), ... Considérese el siguiente ejemplo:
>> v=[1 3 4]
v =
1
3
4
>> x=rand(1,6)
x =
0.5899
0.4987
>> x(v)
ans =
0.5899
0.7351

0.7351

0.9231

0.9231

0.1449

0.9719

Capítulo 3: Operaciones con matrices y vectores

página 35

De forma análoga, los elementos de una matriz A pueden direccionarse a partir de los elementos de
dos vectores f y c. Véase por ejemplo:
>> f=[2 4]; c=[1 2];
>> A=magic(4)
A =
16
2
3
5
11
10
9
7
6
4
14
15
>> A(f,c)
ans =
5
11
4
14

13
8
12
1

El siguiente ejemplo –continuación del anterior– permite comprobar cómo los elementos de una
matriz se pueden direccionar con un sólo índice, considerando que las columnas de la matriz están
una a continuación de otra formando un vector:
>> f=[1 3 5 7];
>> A(f), A(5), A(6)
ans =
16
9
2
ans =
2
ans =
11

7

Más adelante se verá que esta forma de extraer elementos de un vector y/o de una matriz tiene
abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos.
3.5.4. OPERADOR DOS PUNTOS (:)
Este operador es muy importante en MATLAB y puede usarse de varias formas. Se sugiere al lector
que practique mucho sobre los ejemplos contenidos en este apartado, introduciendo todas las modificaciones que se le ocurran y haciendo pruebas abundantes (¡Probar es la mejor forma de aprender!).
Para empezar, defínase un vector x con el siguiente comando:
>> x=1:10
x =
1

2

3

4

5

6

7

8

9

10

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

7

9

4.0000

7

6

5.5000

5

7.0000

4

3

8.5000

2

10.0000

1

Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener un vector
columna basta trasponer el resultado. El siguiente ejemplo genera una tabla de funciones seno y

Aprenda Matlab 7.0 como si estuviera en Primero

página 36

coseno. Ejecútese y obsérvese el resultado (recuérdese que con (;) después de un comando el resultado no aparece en pantalla).
>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]

El operador dos puntos (:) es aún más útil y potente –y también más complicado– con matrices. A
continuación se va a definir una matriz A de tamaño 6×6 y después se realizarán diversas operaciones sobre ella con el operador (:).
>> A=magic(6)
A =
35
1
3
32
31
9
8
28
30
5
4
36

6
7
2
33
34
29

26
21
22
17
12
13

19
23
27
10
14
18

24
25
20
15
16
11

Recuérdese que MATLAB accede a los elementos de una matriz por medio de los índices de fila y
de columna encerrados entre paréntesis y separados por una coma. Por ejemplo:
>> A(2,3)
ans =
7

El siguiente comando extrae los 4 primeros elementos de la 6ª fila:
>> A(6, 1:4)
ans =
4
36

29

13

Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguiente comando extrae todos los elementos de la 3ª fila:
>> A(3, :)
ans =
31
9

2

22

27

20

Para acceder a la última fila o columna puede utilizarse la palabra end, en lugar del número correspondiente. Por ejemplo, para extraer la sexta fila (la última) de la matriz:
>> A(end, :)
ans =
4
36

29

13

18

11

El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:
>> A(3:5,:)
ans =
31
9
8
28
30
5

2
33
34

22
17
12

27
10
14

20
15
16

Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por ejemplo, el siguiente
comando extrae las filas 1, 2 y 5:
>> A([1 2 5],:)
ans =
35
1
6
3
32
7
30
5
34

26
21
12

19
23
14

24
25
16

Capítulo 3: Operaciones con matrices y vectores

página 37

En los ejemplos anteriores se han extraído filas y no columnas por motivos del espacio ocupado por
el resultado en la hoja de papel. Es evidente que todo lo que se dice para filas vale para columnas y
viceversa: basta cambiar el orden de los índices.
El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Por ejemplo, a continuación se va a definir una matriz identidad B de tamaño 6×6 y se van a reemplazar filas de B por
filas de A. Obsérvese que la siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las
filas 1, 2 y 3 de A,
>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)
B =
1
0
0
0
35
1
6
26
0
0
1
0
3
32
7
21
31
9
2
22
0
0
0
0

0
19
0
23
27
0

0
24
0
25
20
1

Se pueden realizar operaciones aún más complicadas, tales como la siguiente10:
>> B=eye(size(A));
>> B(1:2,:)=[0 1; 1 0]*B(1:2,:)

Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de un vector:
>> x=rand(1,5)
x =
0.9103
0.7622
>> x=x(5:-1:1)
x =
0.7361
0.0475

0.2625

0.0475

0.7361

0.2625

0.7622

0.9103

Obsérvese que por haber utilizado paréntesis –en vez de corchetes– los valores generados por el
operador (:) afectan a los índices del vector y no al valor de sus elementos.
Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente:
>> A=magic(3)
A =
8
1
3
5
4
9
>> A(:,3:-1:1)
ans =
6
1
7
5
2
9

6
7
2

8
3
4

aunque hubiera sido más fácil utilizar la función fliplr(A), que es específica para ello.
Finalmente, hay que decir que A(:) representa un vector columna con las columnas de A una detrás
de otra.
3.5.5. MATRIZ VACÍA A[ ]. BORRADO DE FILAS O COLUMNAS
Para MATLAB una matriz definida sin ningún elemento entre los corchetes es una matriz que existe, pero que está vacía, o lo que es lo mismo que tiene dimensión cero. Considérense los siguientes
ejemplos de aplicación de las matrices vacías:

10

Se sustituyen las dos primeras filas de B por el producto de dichas filas por una matriz de permutación.

Aprenda Matlab 7.0 como si estuviera en Primero

>> A=magic(3)
A =
8
1
3
5
4
9
>> B=[]
B =
[]
>> exist(B)
ans =
[]
>> isempty(B)
ans =
1
>> A(:,3)=[]
A =
8
1
3
5
4
9

página 38

6
7
2

Las funciones exist() e isempty() permiten chequear si una variable existe y si está vacía. En el último ejemplo se ha eliminado la 3ª columna de A asignándole la matriz vacía.
3.5.6. DEFINICIÓN DE VECTORES Y MATRICES A PARTIR DE UN FICHERO
MATLAB acepta como entrada un fichero nombre.m (siempre con extensión .m) que contiene instrucciones y/o funciones. Dicho fichero se llama desde la línea de comandos tecleando simplemente
su nombre, sin la extensión. A su vez, un fichero *.m puede llamar a otros ficheros *.m, e incluso
puede llamarse a sí mismo (funciones recursivas). Las variables definidas dentro de un fichero de
comandos *.m que se ejecuta desde la línea de comandos son variables del espacio de trabajo base,
esto es, pueden ser accedidas desde fuera de dicho fichero; no sucede lo mismo si el fichero *.m
corresponde a una función. Si un fichero de comandos se llama desde una función, las variables que
se crean pertenecen al espacio de trabajo de dicha función.
Como ejemplo se puede crear un fichero llamado unidad.m que construya una matriz unidad de
tamaño 3×3 llamada U33 en un directorio llamado c:\matlab. Este fichero deberá contener la línea
siguiente:
U33=eye(3)

Desde MATLAB llámese al comando unidad y obsérvese el resultado. Entre otras razones, es muy
importante utilizar ficheros de comandos para poder utilizar el Debugger y para evitar teclear muchas veces los mismos datos, sentencias o expresiones.
3.5.7. DEFINICIÓN DE VECTORES Y MATRICES MEDIANTE FUNCIONES Y DECLARACIONES
También se pueden definir las matrices y vectores por medio de funciones de librería (las que se
verán en la siguiente sección) y de funciones programadas por el usuario (que también se verán
más adelante).
3.6. Operadores relacionales
El lenguaje de programación de MATLAB dispone de los siguientes operadores relacionales:
<
>
<=
>=

menor que
mayor que
menor o igual que
mayor o igual que

Capítulo 3: Operaciones con matrices y vectores

==
~=

página 39

igual que
distinto que11

Obsérvese que, salvo el último de ellos, coinciden con los correspondientes operadores relacionales
de C. Sin embargo, ésta es una coincidencia más bien formal. En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado especial.
Al igual que en C, si una comparación se cumple el resultado es 1 (true), mientras que si no se
cumple es 0 (false). Recíprocamente, cualquier valor distinto de cero es considerado como true y el
cero equivale a false. La diferencia con C está en que cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño, la comparación se realiza elemento
a elemento, y el resultado es otra matriz de unos y ceros del mismo tamaño, que recoge el resultado de cada comparación entre elementos. Considérese el siguiente ejemplo como ilustración de lo
que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
0
1
0
0
>> A~=B
ans =
1
0
1
1

3.7. Operadores lógicos
Los operadores lógicos de MATLAB son los siguientes:
&
&&
|
||
~
xor(A,B)

and (función equivalente: and(A,B)). Se evalúan siempre ambos operandos, y el
resultado es true sólo si ambos son true.
and breve: si el primer operando es false ya no se evalúa el segundo, pues el resultado final ya no puede ser más que false.
or (función equivalente: or(A,B)). Se evalúan siempre ambos operandos, y el resultado es false sólo si ambos son false.
or breve: si el primer operando es true ya no se evalúa el segundo, pues el resultado final no puede ser más que true.
negación lógica (función equivalente: not(A))
realiza un "or exclusivo", es decir, devuelve 0 en el caso en que ambos sean 1 ó
ambos sean 0.

Los operadores lógicos se combinan con los relacionales para poder comprobar el cumplimiento de
condiciones múltiples. Más adelante se verán otros ejemplos y ciertas funciones de las que dispone
MATLAB para facilitar la aplicación de estos operadores a vectores y matrices.
Los operadores lógicos breves (&&) y (||) se utilizan para simplificar las operaciones de comparación evitando operaciones innecesarias, pero también para evitar ciertos errores que se producirían
en caso de evaluar incondicionalmente el segundo argumento. Considérese por ejemplo la siguiente
sentencia, que evita una división por cero:
r = (b~=0) && (a/b>0);

11

El carácter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo Alt pulsada.

Aprenda Matlab 7.0 como si estuviera en Primero

página 40

4. FUNCIONES DE LIBRERÍA
MATLAB tiene un gran número de funciones incorporadas. Algunas son funciones intrínsecas,
esto es, funciones incorporadas en el propio código ejecutable del programa. Estas funciones son
particularmente rápidas y eficientes. Existen además funciones definidas en ficheros *.m y *.mex12
que vienen con el propio programa o que han sido aportadas por usuarios del mismo. Estas funciones extienden en gran manera las posibilidades del programa.
MATLAB dispone también de ficheros *.p, que son los ficheros *.m pre-compilados con la función
pcode. Se verán más adelante.
Recuérdese que para que MATLAB encuentre una determinada función de usuario el correspondiente fichero-M debe estar en el directorio actual o en uno de los directorios del search path.
4.1. Características generales de las funciones de MATLAB
El concepto de función en MATLAB es semejante al de C y al de otros lenguajes de programación,
aunque con algunas diferencias importantes. Al igual que en C, una función tiene nombre, valor de
retorno y argumentos. Una función se llama utilizando su nombre en una expresión o utilizándolo
como un comando más. Las funciones se pueden definir en ficheros de texto *.m en la forma que se
verá más adelante. Considérense los siguientes ejemplos de llamada a funciones:
>> [maximo, posmax] = max(x);
>> r = sqrt(x^2+y^2) + eps;
>> a = cos(alfa) - sin(alfa);

donde se han utilizado algunas funciones matemáticas bien conocidas como el cálculo del valor
máximo, el seno, el coseno y la raíz cuadrada. Los nombres de las funciones se han puesto en negrita. Los argumentos de cada función van a continuación del nombre entre paréntesis (y separados
por comas si hay más de uno). Los valores de retorno son el resultado de la función y sustituyen a
ésta en la expresión donde la función aparece.
Una diferencia importante con otros lenguajes es que en MATLAB las funciones pueden tener valores de retorno matriciales múltiples (ya se verá que pueden recogerse en variables ad hoc todos o
sólo parte de estos valores de retorno), como en el primero de los ejemplos anteriores. En este caso
se calcula el elemento de máximo valor en un vector, y se devuelven dos valores: el valor máximo y
la posición que ocupa en el vector. Obsérvese que los 2 valores de retorno se recogen entre corchetes, separados por comas.
Una característica de MATLAB es que las funciones que no tienen argumentos no llevan paréntesis,
por lo que a simple vista no siempre son fáciles de distinguir de las simples variables. En la segunda
línea de los ejemplos anteriores, eps es una función sin argumentos, que devuelve la diferencia entre
1.0 y el número de coma flotante inmediatamente superior. En lo sucesivo el nombre de la función
irá seguido de paréntesis si interesa resaltar que la función espera que se le pase uno o más argumentos.
Los nombres de las funciones de MATLAB no son palabras reservadas del lenguaje. Es posible
crear una variable llamada sin o cos, que ocultan las funciones correspondientes. Para poder acceder
a las funciones hay que eliminar (clear) las variables del mismo nombre que las ocultan, o bien
haber definido previamente una referencia a función (function handle). Las referencias a función
se estudiarán en el apartado 6.4, a partir de la página 72.
MATLAB permite que una función tenga un número variable de argumentos y valores de retorno,
determinado sólo en tiempo de ejecución. Más adelante se verá cómo se hace esto.
12

Los ficheros *.mex son ficheros de código ejecutable.

Capítulo 4: Funciones de librería

página 41

MATLAB tiene diversos tipos de funciones. A continuación se enumeran los tipos de funciones
más importantes, clasificadas según su finalidad:
1.2.3.4.5.6.7.8.9.10.11.-

Funciones matemáticas elementales.
Funciones especiales.
Funciones matriciales elementales.
Funciones matriciales específicas.
Funciones para la descomposición y/o factorización de matrices.
Funciones para análisis estadístico de datos.
Funciones para análisis de polinomios.
Funciones para integración de ecuaciones diferenciales ordinarias.
Resolución de ecuaciones no-lineales y optimización.
Integración numérica.
Funciones para procesamiento de señal.

A continuación se enumeran algunas características generales de todas las funciones de MATLAB:
–

Los argumentos actuales13 de estas funciones pueden ser expresiones y también llamadas a
otra función.

–

Las funciones de MATLAB nunca devuelven modificadas las variables que se pasan como
argumentos, a no ser que se incluyan también como valores de retorno. Si el usuario las modifica dentro de la función, previamente se sacan copias de esas variables (se modifican las copias, no las variables originales). Se podría decir que los argumentos de las funciones de MATLAB siempre se pasan por valor, nunca por referencia.

–

MATLAB admite valores de retorno matriciales múltiples. Por ejemplo, en el comando:
>> [V, D] = eig(A)

la función eig() calcula los valores y vectores propios de la matriz cuadrada A. Los vectores
propios se devuelven como columnas de la matriz V, mientras que los valores propios son los
elementos de la matriz diagonal D. En los ejemplos siguientes:
>> [xmax, imax] = max(x)
>> xmax = max(x)

puede verse que la misma función max() puede ser llamada recogiendo dos valores de retorno
(el máximo elemento de un vector y la posición que ocupa) o un sólo valor de retorno (el
máximo elemento).
–

Las operaciones de suma y/o resta de una matriz con un escalar consisten en sumar y/o restar
el escalar a todos los elementos de la matriz.

–

Recuérdese que tecleando help nombre_funcion se obtiene de inmediato información sobre la
función de ese nombre. En el Help Desk aparecen enlaces a “Functions - By Cathegory” y
“Functions – Alphabetical List”, en donde aparecen relaciones completas de las funciones
disponibles en MATLAB.

4.2. Equivalencia entre comandos y funciones
Existe una equivalencia entre las funciones y los comandos con argumentos de MATLAB. Así, un
comando en la forma,
>> comando arg1 arg2

13

Los argumentos actuales son los que se utilizan en la llamada de la función


Documentos relacionados


Documento PDF comandos de funcion de transferencia polos ceros y constantes en matlab
Documento PDF matem ticas iii yobal antologia
Documento PDF exam sep sep07
Documento PDF funciones vectoriales de una variable reall
Documento PDF 9 tips b sicos
Documento PDF texto en latex


Palabras claves relacionadas