You are on page 1of 124

Centro Universitario de Formacin e Innovacin Educativa (CUFIE),

Universidade da Corua

Curso de iniciacin
a MATLAB
Material de apoyo

M Cristina Naya Riveiro


30/11/2016
La informacin recogida en estos apuntes ha sido elaborada y adaptada de
otras fuentes bibliogrficas.
Curso de iniciacin a MATLAB

CONTENIDO

1. Interfaz de usuario de MATLAB ................................................................................................ 7

1.1 Introduccin ......................................................................................................................... 7

1.1.1 Qu es MATLAB? ....................................................................................................... 7

1.1.2 Desarrollo de algoritmos y aplicaciones ..................................................................... 10

1.1.3 Anlisis y acceso de datos .......................................................................................... 12

1.1.4 Visualizacin de datos ................................................................................................ 13

1.1.5 Clculo Numrico ........................................................................................................ 15

1.1.6 Publicacin de resultados y distribucin de aplicaciones ........................................... 16

1.1.7 El programa MATLAB ................................................................................................. 18

1.1.8 Uso del Help ................................................................................................................ 20

1.2 El entorno de trabajo de MATLAB ..................................................................................... 25

1.2.1 El escritorio de MATLAB (MATLAB DESKTOP) ......................................................... 25

1.2.2 Command window....................................................................................................... 27

1.2.3 Command history browser .......................................................................................... 28

1.2.4 Current DIRECTORY BROWSER .............................................................................. 29

1.2.5 Path de matlab: establecer el camino de bsqueda (SEARCH PATH) ...................... 29

1.2.6 Workspace browser y array editor .............................................................................. 32

1.2.7 El editor DEBUGGER ................................................................................................. 33

1.2.8 El profiler ..................................................................................................................... 36

Apps de MATLAB ................................................................................................................. 36

1.3 Preferencias: formatos de salida y de otras opciones de MATLAB .................................. 36

1.4 Ficheros matlabrc.m, startup.m y finish.m ......................................................................... 38

1.5 Guardar variables y estados de una sesin: comandos save y load ................................ 39

1.6 Guardar sesin y copiar salidas: comando diary .............................................................. 40

1.7 Lneas de comentarios ...................................................................................................... 40

1.8 Medida de tiempos y de esfuerzo de clculo .................................................................... 41

2. Ejecucin de comandos y creacin de variables .................................................................... 42

M Cristina Naya Riveiro 2


Curso de iniciacin a MATLAB

2.1 Operaciones aritmticas. Uso del MATLAB como calculadora ......................................... 42

2.1.1 Constantes .................................................................................................................. 42

2.1.2 Operaciones ................................................................................................................ 42

2.1.3 Variables y expresiones .............................................................................................. 43

2.1.4 Funciones intrnsicas de MATLAB .............................................................................. 48

2.2 Lmites, sucesiones, derivadas E integrales ..................................................................... 48

2.2.1 Lmites ......................................................................................................................... 49

2.2.2 Sucesiones .................................................................................................................. 49

2.2.3 Derivadas .................................................................................................................... 50

2.2.4 Integrales .................................................................................................................... 50

3. Anlisis de vectores, matrices, polinomios y sistemas de ecuaciones lineales. Otros tipos de


datos. ........................................................................................................................................... 52

3.1 Vectores ............................................................................................................................. 52

3.1.1 Vectores fila ................................................................................................................ 52

3.1.1 Vectores columna ....................................................................................................... 53

3.1.3 Operaciones entre vector y escalar ............................................................................ 54

3.1.4 Operaciones entre vectores ........................................................................................ 55

3.1.5 Operaciones con componentes. ................................................................................. 55

3.1.6 Expresiones ms complicadas. .................................................................................. 55

3.1.7 Funciones de MATLAB especficas para vectores ..................................................... 56

3.2 Matrices ............................................................................................................................. 58

3.2.1 Definicin de matrices ................................................................................................. 58

3.2.2 Operaciones con matrices .......................................................................................... 59

3.2.3 Funciones especficas para matrices.......................................................................... 59

3.2.4 Matrices dispersas o huecas ...................................................................................... 60

3.3 Polinomios ......................................................................................................................... 62

3.4 Sistemas de Ecuaciones lineales ...................................................................................... 63

3.5 Otros tipos de datos........................................................................................................... 64

3.5.1 Cadenas de caracteres ............................................................................................... 64

3.5.2 Hipermatrices .............................................................................................................. 67

M Cristina Naya Riveiro 3


Curso de iniciacin a MATLAB

3.5.3 Estructuras .................................................................................................................. 69

3.5.4. Vectores o matrices de celdas (Cell Arrays) .............................................................. 72

4. Grficos con MATLAB ............................................................................................................. 74

4.1 Representacin grfica de funciones definidas por una frmula ...................................... 74

4.1.1 Curvas planas ............................................................................................................. 74

4.1.2 Curvas en el espacio................................................................................................... 76

4.1.3 Superficies .................................................................................................................. 76

4.2 Ventana grfica de MATLAB ............................................................................................. 78

4.3 Algunos comandos grficos auxiliares .............................................................................. 78

4.4 Los comandos bsicos de dibujo 2D Y 3D ........................................................................ 82

5. Introduccin a la programacin en MATLAB. ......................................................................... 87

5.1 Sintaxis general ................................................................................................................. 87

5.2 Ejecucin de las funciones y scripts .................................................................................. 87

5.3 Bifurcaciones y bucles ....................................................................................................... 88

5.3.1 Sentencia IF ................................................................................................................ 89

5.3.2 Sentencia SWITCH ..................................................................................................... 90

5.3.3 Sentencia FOR............................................................................................................ 90

5.3.4 Sentencia WHILE ........................................................................................................ 91

5.3.5 Sentencia BREAK ....................................................................................................... 91

5.3.6 Sentencia CONTINUE ................................................................................................ 91

5.3.7 Sentencias TRY...CATCH...END ................................................................................ 91

5.4 Operadores relacionales.................................................................................................... 91

5.5 Operadores lgicos............................................................................................................ 92

5.6 Lectura y escritura interactiva de variables ....................................................................... 92

5.6.1 Funcin INPUT............................................................................................................ 93

5.6.2 Funcin DISP .............................................................................................................. 93

5.7 Ficheros *.m ....................................................................................................................... 93

5.7.1 Ficheros de comandos (scripts) .................................................................................. 94

5.7.2 Definicin de funciones ............................................................................................... 94

5.7.3 Sentencia RETURN .................................................................................................... 95

M Cristina Naya Riveiro 4


Curso de iniciacin a MATLAB

5.7.4 Funciones con nmero variable de argumentos ......................................................... 95

5.7.4 HELP para las funciones de usuario........................................................................... 96

5.7.5 HELP de directorios .................................................................................................... 96

5.7.6 Subfunciones .............................................................................................................. 97

5.7.6 Funciones privadas ..................................................................................................... 97

5.7.7 Funciones *.p .............................................................................................................. 97

5.7.8 Variables persistentes ................................................................................................. 97

5.7.9 Variables globales ....................................................................................................... 98

5.8 Entrada y salida de datos .................................................................................................. 98

5.8.1 Importar datos de otras aplicaciones .......................................................................... 98

5.8.2 Exportar datos a otras aplicaciones ............................................................................ 99

5.9 Lectura y escritura de ficheros .......................................................................................... 99

5.9.1 Funciones FOPEN Y FCLOSE ................................................................................... 99

5.9.2 Funciones FSCANF, SSCANF, FPRINTF Y SPRINTF .............................................. 99

5.9.3 Funciones FREAD Y FWRITE .................................................................................. 100

5.9.4 Ficheros de acceso directo ....................................................................................... 100

5.10 Recomendaciones generales de programacin ............................................................ 100

5.11 Acelerador JIT (Just In Time) en MATLAB .................................................................... 102

5.12 Llamada a comandos del sistema operativo y a otras funciones externas ................... 103

5.13 Distribucin del esfuerzo de clculo: Profiler................................................................. 103

6. Introduccin al anlisis de datos ........................................................................................... 106

6.1 Clculo del mnimo, mximo, media y mediana .............................................................. 106

6.2 Desviacin tpica .............................................................................................................. 110

6.3 Coeficientes de correlacin y matriz de covarianza ........................................................ 110

6.4 Grficos estadsticos ....................................................................................................... 111

6.5 Curvas de regresin ........................................................................................................ 114

6.6 Interpolacin uni y bidimensional .................................................................................... 115

7. Introduccin al uso de interfaces grficas de usuario (GUI) con MATLAB. .......................... 118

7.1 Uso de guide .................................................................................................................... 119

7.1.1 Controles de la GUI................................................................................................... 121

M Cristina Naya Riveiro 5


Curso de iniciacin a MATLAB

7.1.2 Fichero .m de guide .................................................................................................. 122

Bibliografa................................................................................................................................. 124

M Cristina Naya Riveiro 6


Curso de iniciacin a MATLAB

1. INTERFAZ DE USUARIO DE MATLAB

1.1 INTRODUCCIN

1.1.1 QU ES MATLAB?

MATLAB es un lenguaje de alto nivel y un entorno interactivo para el clculo numrico, la


visualizacin y la programacin. Mediante MATLAB, es posible analizar datos, desarrollar
algoritmos y crear modelos o aplicaciones. El lenguaje, las herramientas y las funciones
matemticas incorporadas permiten explorar diversos enfoques y llegar a una solucin antes
que con hojas de clculo o lenguajes de programacin tradicionales, como pueden ser C/C++ o
Java.

Es ampliamente usado por ingenieros y, cientficos de todo el mundo para una gran variedad
de aplicaciones, tales como anlisis y visualizacin de datos, modelizacin matemtica,
desarrollo de algoritmos, procesamiento de seales y comunicaciones, procesamiento de
imagen y vdeo, sistemas de control, pruebas y medidas, finanzas computacionales, biologa
computacional, posee adems una extraordinaria versatilidad y capacidad para resolver
problemas en matemtica aplicada, fsica, qumica, ingeniera, finanzas y muchas otras
aplicaciones. Est basado en un sofisticado software de matrices para el anlisis de sistemas
de ecuaciones. Permite resolver complicados problemas numricos sin necesidad de escribir
un programa. Por este motivo es usado en empresas lderes de ingeniera y ciencia, as como
el software estndar en ms de 5000 universidades de todo el mundo.

MATLAB es un entorno de computacin y desarrollo de aplicaciones totalmente integrado


orientado para llevar a cabo proyectos en donde se encuentren implicados elevados clculos
matemticos y la visualizacin grfica de los mismos.

MATLAB integra anlisis numrico, clculo matricial, proceso de seal y visualizacin grfica
en un entorno completo donde los problemas y sus soluciones son expresados del mismo
modo en que se escribiran tradicionalmente, sin necesidad de hacer uso de la programacin
tradicional.

MATLAB es el nombre abreviado de MATrix LABoratory. MATLAB es un programa para


realizar clculos numricos con vectores y matrices. Como caso particular puede tambin
trabajar con nmeros escalares tanto reales como complejos, con cadenas de caracteres y
con otras estructuras de informacin ms complejas. Una de las capacidades ms atractivas es
la de realizar una amplia variedad de grficos en dos y tres dimensiones. MATLAB tiene
tambin un lenguaje de programacin propio. MATLAB fue inicialmente concebido para
proporcionar fcil acceso a las libreras LINPACK y EISPACK, las cuales representan hoy en
da dos de las libreras ms importantes en computacin y clculo matricial.

MATLAB es un sistema de trabajo interactivo cuyo elemento bsico de trabajo son las matrices.
El programa permite realizar de un modo rpido la resolucin numrica de problemas en un
tiempo mucho menor que si se quisiesen resolver estos mismos problemas con lenguajes de
programacin tradicionales como pueden ser los lenguajes Fortran, Basic o C. En cualquier
caso, el lenguaje de programacin de MATLAB siempre es una magnfica herramienta de alto
nivel para desarrollar aplicaciones tcnicas, fcil de utilizar y que, como ya se ha dicho,
aumenta significativamente la productividad de los programadores respecto a otros entornos de
desarrollo.

MATLAB goza en la actualidad de un alto nivel de implantacin en escuelas y centros

M Cristina Naya Riveiro 7


Curso de iniciacin a MATLAB

universitarios, as como en departamentos de investigacin y desarrollo de muchas compaas


industriales nacionales e internacionales. En entornos universitarios, por ejemplo, MATLAB se
ha convertido en una herramienta bsica, tanto para los profesionales e investigadores de
centros docentes, como una importante herramienta para la imparticin de cursos
universitarios, tales como sistemas e ingeniera de control, lgebra lineal, proceso digital de
imagen, seal, etc. En el mundo industrial, MATLAB est siendo utilizado como herramienta de
investigacin para la resolucin de complejos problemas planteados en la realizacin y
aplicacin de modelos matemticos en ingeniera. Los usos ms caractersticos de la
herramienta los encontramos en reas de computacin y clculo numrico tradicional,
prototipaje algortmico, teora de control automtico, estadstica, anlisis de series temporales
para el proceso digital de seal.

MATLAB dispone de un cdigo bsico y tambin en la actualidad, de un amplio abanico de


programas de apoyo especializado, es decir, de varias libreras especializadas denominadas
Toolboxes, que extienden significativamente el nmero de funciones incorporadas en el
programa principal y que estn disponibles por separado. Estos Toolboxes cubren en la
actualidad prcticamente casi todas las reas principales en el mundo de la ingeniera y la
simulacin, destacando entre ellos el 'toolbox' de proceso de imgenes, seal, control robusto,
estadstica, anlisis financiero, matemticas simblicas, redes neurales, lgica difusa,
identificacin de sistemas, simulacin de sistemas dinmicos, etc. Adems tambin se dispone
del programa Simulink que es un entorno grfico interactivo con el que se puede analizar,
modelizar y simular la dinmica de sistemas no lineales.

Son caractersticas importantes de MATLAB las siguientes:

Lenguaje de alto nivel para clculos de ingeniera y cientficos (particularmente clculo


numrico, la visualizacin y el desarrollo de aplicaciones).
Entorno de escritorio afinado para la exploracin, el diseo y la solucin de problemas
de manera iterativa.
Funciones matemticas para lgebra lineal, estadstica, anlisis de Fourier, filtrado,
optimizacin, integracin numrica y resolucin de ecuaciones diferenciales ordinarias.
Grficos integrados para visualizar datos y herramientas para crear grficos
personalizados.
Apps para ajustar curvas, clasificar datos, analizar seales y muchas otras tareas
relacionadas con dominios concretos.
Herramientas de desarrollo para mejorar la calidad y el mantenimiento del cdigo, as
como para maximizar el rendimiento.
Herramientas para crear aplicaciones con interfaces de usuario personalizadas.
Funciones para integrar algoritmos basados en MATLAB con aplicaciones y lenguajes
externos tales como C, Java, .NET y Microsoft Excel.
Entorno de desarrollo para la gestin de cdigo, archivos y datos.
Toolboxes complementarias para una amplia variedad de aplicaciones de ingeniera y
cientficas.
Opciones de despliegue sin coste en concepto de derechos de licencia para compartir
programas de MATLAB con los usuarios finales.
Interfaces para C/C++, Java, .NET, Python, SQL, Hadoop y Microsoft Excel.

En estos apuntes se har referencia exclusiva al cdigo bsico, donde todos los conceptos
estudiados y funciones dadas sern vlidos para la gran mayora de las versiones de
MATLAB.

1.1.1.1 USO DE MATRICES

M Cristina Naya Riveiro 8


Curso de iniciacin a MATLAB

MATLAB emplea matrices porque con ellas se puede describir infinidad de cosas de una forma
altamente flexible y matemticamente eficiente. Una matriz de pixeles puede ser una imagen o
una pelcula. Una matriz de fluctuaciones de una seal puede ser un sonido o una voz humana.
Y tal vez ms significativamente, una matriz puede describir una relacin lineal entre los
componentes de un modelo matemtico. En este ltimo sentido, una matriz puede describir el
comportamiento de un sistema extremadamente complejo. Por ejemplo una matriz puede
representar el vuelo de un avin a 40.000 pies de altura, o un filtro digital de procesamiento de
seales.

1.1.1.2 ORIGEN DE MATLAB

MATLAB fue originalmente desarrollado en lenguaje FORTRAN para ser usado en


computadoras mainframe 1. Fue el resultado de los proyectos Linpack y Eispack desarrollados
en el Argonne National Laboratory. Su nombre proviene de MATrix LABoratory. Al pasar los
aos fue complementado y reimplementado en lenguaje C. Actualmente la licencia de MATLAB
es propiedad de MathWorks Inc. (Web http://www.mathworks.es).

1.1.1.3 PLATAFORMAS

MATLAB est disponible para un amplio nmero de plataformas: estaciones de trabajo SUN,
Apollo, VAXstation y HP, VAX, MicroVAX, Gould, Apple Macintosh y PC AT compatibles 80386
o superiores. Opera bajo sistemas operativos UNIX, Macintosh y Windows.

Tambin est disponible una plataforma mvil, MATLAB Mobile, que ofrece un escritorio ligero
para iPhone, iPad o dispositivos Android. Esta aplicacin permite conectarse a una sesin de
MATLAB que se ejecuta en la nube MathWorks o en un ordenador, y desde la cual se pueden
ejecutar scripts, crear y manipular figuras, y ver los resultados con teclados personalizados
para el iOS y Android, lo que facilita la entrada fcil de la sintaxis de MATLAB.

Recientemente se pueden encontrar soluciones para implementar aplicaciones con MATLAB y


Simulink en hardware de bajo coste como Arduino y Raspberry Pi.

1.1.1.4 PRODUCTOS

La empresa MathWorks ofrece MATLAB como su principal producto para computacin


numrica, anlisis y visualizacin de datos. Tambin ofrece Simulink como un anexo a
MATLAB y que interacta con l en lenguaje de MATLAB y lenguaje de bajo nivel C. Simulink
es usado para simulacin modelado no lineal avanzado. Se ofrecen adems numerosas
herramientas especiales en "Toolboxes" para resolver problemas de aplicaciones especficas,
por ejemplo control, procesamiento de seales, redes neurales, etc. Estas herramientas son
colecciones de rutinas escritas en MATLAB.

MATLAB dispone de una versin para estudiantes MATLAB and Simulink Student Versin que
incluye la versin R2015b, y es compatible con Windows, Mac, y Linux. Esta versin estudiante
R2015b incluye adems soporte integrado para prototipado, pruebas y ejecucin de modelos
en plataformas hardware de bajo coste, tales como, Arduino, LEGO MINDSTORMS NXT,
PandaBoard, Rasperry Pi, Gumstix Overo y BeagleBoard. Adems de soporte de hardware
para sensores de iOS, Raspberry PiTM 2 y BeagleBone Black.

1
Una computadora central o mainframe es una computadora grande, potente y costosa usada
principalmente por una gran compaa para el procesamiento de una gran cantidad de datos;
por ejemplo, para el procesamiento de transacciones bancarias.

M Cristina Naya Riveiro 9


Curso de iniciacin a MATLAB

1.1.2 DESARROLLO DE ALGORITMOS Y APLICACIONES

MATLAB proporciona un lenguaje de alto nivel y herramientas de desarrollo que permiten


desarrollar y analizar algoritmos y aplicaciones con rapidez.

El lenguaje MATLAB incluye operaciones vectoriales y matriciales que son fundamentales para
resolver problemas de ingeniera y cientficos. Agiliza, tanto el desarrollo, como la ejecucin.

Con el lenguaje de MATLAB, se pueden escribir programas y desarrollar algoritmos de manera


ms rpida que con los lenguajes tradicionales, ya que no es necesario realizar tareas
administrativas de bajo nivel tales como declarar variables, especificar tipos de datos y asignar
memoria. En muchos casos, el soporte para las operaciones de vectores y matrices elimina la
necesidad de bucles For. Como resultado, con frecuencia una lnea de cdigo de MATLAB
puede reemplazar varias lneas de cdigo C o C++.

Al mismo tiempo, MATLAB ofrece todas las caractersticas de los lenguajes de programacin
tradicionales, que incluyen operadores aritmticos, control de flujo, estructuras de datos, tipos
de datos, gestin de errores y programacin orientada a objetos (OOP).

Un algoritmo de comunicaciones que genera 1024 bits aleatorios, convierte el vector en una
seal transmitida, aade ruido gaussiano complejo y representa el resultado grficamente, se
integra en MATLAB en slo nueve lneas de cdigo:

Figura 1

MATLAB posibilita ejecutar comandos o grupos de comandos de forma interactiva uno tras
otro, sin compilar ni enlazar, y repetir su ejecucin hasta lograr la solucin ptima

Para ejecutar rpidamente clculos matriciales y vectoriales complejos, MATLAB utiliza


bibliotecas optimizadas para el procesador. Para clculos escalares de aplicacin general,
MATLAB, genera instrucciones en cdigo mquina utilizando su tecnologa JIT (Just In Time).
Gracias a esta tecnologa, que est disponible para la mayora de las plataformas, las
velocidades de ejecucin son mucho ms rpidas que las de los lenguajes de programacin

M Cristina Naya Riveiro 10


Curso de iniciacin a MATLAB

tradicionales.

MATLAB incluye herramientas de desarrollo que ayudan a implementar algoritmos


eficientemente. Las siguientes son algunas de ellas:

Ventana de comandos: permite introducir datos, ejecutar comandos o programas y


mostrar los resultados de forma interactiva.
MATLAB Editor: ofrece caractersticas de edicin y depuracin, tales como establecer
puntos de interrupcin y avanzar paso a paso por lneas de cdigo individuales.
M-Lint Code Checker (analizador de cdigo): comprueba el cdigo automticamente en
busca de problemas y recomienda modificaciones para maximizar el rendimiento y el
mantenimiento.
MATLAB Profiler: registra el tiempo que tarda en ejecutarse cada lnea de cdigo, es
decir, mide el rendimiento de los programas de MATLAB e identifica reas de cdigo
que se pueden modificar para mejorarlas.
Directory Reports: explora todos los archivos de un directorio y crea informes sobre la
eficiencia del cdigo, las diferencias entre los archivos, las dependencias de los
archivos y la cobertura del cdigo.

Tambin se puede usar la herramienta interactiva GUIDE (Graphical User Interface


Development Environment) para disear y editar interfaces de usuario. Esta herramienta
permite incluir listas de seleccin, mens desplegables, botones de controles ActiveX. Tambin
se pueden crear interfaces grficas de usuario por medio de programacin usando las
funciones de MATLAB.

Figura 2

Imagen de las diferentes opciones que podemos generar con la interface de usuario de MATLAB. Imagen
obtenida de:
http://www.google.es/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&docid=jH89yKGaoJSxuM&tbni
d=INf4JG_GjBk6LM:&ved=0CAQQjB0&url=http%3A%2F%2Flims.mech.northwestern.edu%2Fprojects%2Ffrictio
ninducedforcefields%2F&ei=xrFZUe3fAaGI0AXD4YHwAg&bvm=bv.44442042,d.ZGU&psig=AFQjCNF1-
x43Pez6t3eGR6WDFIXkpkU-Pw&ust=1364919092339419

M Cristina Naya Riveiro 11


Curso de iniciacin a MATLAB

1.1.3 ANLISIS Y ACCESO DE DATOS

MATLAB soporta el proceso completo de acceso a datos desde la adquisicin de datos de


dispositivos externos y bases de datos, pasando por el preprocesado, visualizacin y el anlisis
numrico, hasta la produccin de resultados con calidad de presentacin.

MATLAB permite gestionar, filtrar y preprocesar los datos como ya se ha comentado, pero
adems es posible realizar anlisis de datos exploratorios a fin de descubrir tendencias, probar
suposiciones y elaborar modelos descriptivos. MATLAB proporciona funciones para filtrado y
suavizado, interpolacin, convolucin y transformadas rpidas de Fourier (FFT). Los productos
complementarios proporcionan capacidades para ajuste de curvas o de superficies, estadstica
multivariante, anlisis espectral, anlisis de imgenes, identificacin de sistemas y otras tareas
de anlisis. En resumen, MATLAB proporciona herramientas interactivas y funciones en lnea
de comandos para operaciones de anlisis de datos incluyendo:

interpolacin,
extraccin de secciones de datos, escalado y promediacin,
umbralacin y suavizamiento,
correlacin, anlisis de Fourier y filtraje,
bsqueda de picos unidimensionales y ceros,
estadstica bsica y ajuste de curvas,
anlisis matricial, etc.

En la Figura 3 se observa un diagrama en el que se muestra una curva ajustada a las


diferencias de presin atmosfrica promediadas entre Easter Island y Darwin en Australia.

Figura 3: Ejemplo de una ventana grfica de MATLAB.

En cuanto a acceso a datos, MATLAB es una plataforma eficiente para acceder a datos desde
archivos, otras aplicaciones, bases de datos y dispositivos externos. Puede leer datos desde
los formatos ms populares como Microsoft Excel, Texto ASCII o archivos binarios, imgenes,

M Cristina Naya Riveiro 12


Curso de iniciacin a MATLAB

archivos de sonido y video o archivos cintficos tales como netCDF y HDF. Las funciones de
entrada y salida de bajo nivel para archivos binarios permiten trabajar con datos en cualquier
formato. Las funciones adicionales permiten leer datos desde pginas web y XML. Es decir, las
funciones de entrada/salida de archivos permiten trabajar con archivos de datos de cualquier
formato.

Puede llamar otras aplicaciones y lenguajes como C, C++, objetos COM, DLLs, Java, Fortran y
Microsoft Excel y acceder a sitios ftp y servicios Web. Usando el Database Toolbox, incluso
puede acceder a bases de datos ODBC/JDBC.

Puede adquirir datos desde dispositivos de hardware, como el puerto serial de las
computadoras o la tarjeta de sonido, o bien recurrir al streaming de los datos dinmicos
medidos directamente a MATLAB para su anlisis y visualizacin Tambin es posible
comunicarse con instrumentos tales como osciloscopios, generadores de funciones y
analizadores de seales.

Usando Data Acquisition Toolbox, puede medir datos directamente en MATLAB para anlisis y
visualizacin. Instrument Control Toolbox permite la comunicacin con hardware GPIB y VXI.

Figura 4: ventana de importacin de datos.

1.1.4 VISUALIZACIN DE DATOS

Todas las caractersticas grficas que son requeridas para visualizar datos de ingeniera y
cientficos estn disponibles en MATLAB. Esto incluye funciones de representacin de
diagramas bidimensionales y tridimensionales, visualizacin de volmenes, herramientas para
crear graficas interactivamente y la posibilidad de exportar los resultados a todos los formatos
de grficos ms conocidos y usuales. Es posible
personalizar las grficas aadiendo mltiples ejes,
cambiando los colores de las lneas y marcadores,
aadir anotaciones, ecuaciones en LaTEX,
leyendas y trazando formas.

Se pueden visualizar vectores de datos con

M Cristina Naya Riveiro 13


Curso de iniciacin a MATLAB

funciones de representacin de diagramas bidimensionales para crear:

Lneas, reas, barras y grficas de pastel.


Grficas de Direccin y Velocidad.
Histogramas.
Polgonos y superficies.
Grficas Dispersas y de Burbujas.
Animaciones.
Figura 5
La Figura 5 muestra los diagramas lineales de los resultados de varias pruebas de emisin de
un motor, con una curva ajustada a los datos.

MATLAB tambin proporciona funciones para visualizar matrices bidimensionales, datos


escalares tridimensionales y datos vectoriales tridimensionales. Es posible usar estas funciones
para visualizar y comprender grandes cantidades de datos multidimensionales, generalmente
complejos. Tambin es posible definir las caractersticas de los diagramas, tales como el
ngulo de la orientacin de la cmara, la perspectiva, el efecto de iluminacin, la ubicacin de
la fuente de luz y la transparencia. Las funciones de creacin de diagramas tridimensionales
incluyen:

Superficies, contornos y mallas


Graficar imgenes
Cono, seccin, cascadas e isosuperficies

En la Figura 6 se observa un diagrama tridimensional de isosuperficie que revela la estructura


geodsica abovedada de una molcula de fullerene carbono-60.

Figura 6

MATLAB proporciona herramientas interactivas para el diseo y la modificacin de grficas.


Desde una figura o diagrama de MATLAB se puede desarrollar las siguientes tareas:

Colocar nuevos datos en las grficas arrastrndolos.


Cambiar las propiedades de cualquier objeto en la figura.
Acercar, rotar, deslizar y cambiar el ngulo de la cmara y de la luz.
Aadir anotaciones y etiquetas de datos.
Trazar formas.
Generar una funcin de cdigo M para reutilizarla con datos diferentes.

M Cristina Naya Riveiro 14


Curso de iniciacin a MATLAB

En la Figura 7 se observa una coleccin de grficos, creada interactivamente arrastrando


conjuntos de datos a la ventana de diagramas, creando nuevos subdiagramas, cambiando las
propiedades tales como colores y tipos de letra y aadiendo anotaciones.

Figura 7

MATLAB permite leer y escribir en diversos formatos de archivos de datos y de grficos, como
GIF, JPEG, BMP, EPS, TIFF, PNG, HDF, AVI y PCX. Como resultado, puede exportar las
grficas de MATLAB a otras aplicaciones como Microsoft Word y Microsoft PowerPoint, o
software de autoedicin. Antes de exportar, puede crear y aplicar plantillas de estilo, que
contengan el diseo, los tipos de letra, la definicin del grosor de las lneas, el fondo y la
escala, etc., necesarios para cumplir con las especificaciones para su publicacin.

La galera de grficos de MATLAB ofrece multitud de ejemplos para mostrar los datos de forma
grfica en MATLAB. En cada ejemplo podr ver y descargar el cdigo fuente a fin de emplearlo
en su aplicacin de MATLAB.

1.1.5 CLCULO NUMRICO

MATLAB contiene funciones matemticas, estadsticas y de ingeniera que soportan las


operaciones ms comunes a realizar en estos campos. Estas funciones, desarrolladas por
expertos en matemticas, son la base del lenguaje de MATLAB. En ncleo de funciones
matemticas usan las bibliotecas de algebra lineal de LAPACK y BLAS y la biblioteca de la
transformada de Fourier de FFTW. Debido a que el procesador depende de las bibliotecas,
stas se optimizan en las diferentes plataformas que MATLAB soporta, con lo que se ejecutan
ms rpido que su equivalente en C o C++.

Por citar algunos ejemplos, MATLAB proporciona los siguientes tipos de funciones para
desarrollar las operaciones matemticas y de anlisis de datos:

Manipulacin de matrices y algebra lineal.


Polinomios e interpolacin y regresin.
Diferenciacin e integracin.
Anlisis de Fourier y filtrado.
Valores propios y valores singulares.

M Cristina Naya Riveiro 15


Curso de iniciacin a MATLAB

Anlisis de Datos y Estadstica.


Optimizacin e integracin numrica.
Ecuaciones Diferenciales Ordinarias (ODEs).
Ecuaciones Diferenciales Parciales (PDEs).
Operaciones de Matrices Dispersas.

1.1.6 PUBLICACIN DE RESULTADOS Y DISTRIBUCIN DE


APLICACIONES

MATLAB contiene una serie de funciones para documentar y compartir su trabajo. Puede
integrar su cdigo en otros lenguajes y aplicaciones, desplegar algoritmos y aplicaciones de
MATLAB como programas independientes o mdulos de software.

MATLAB permite exportar los resultados como grficas o como informes completos. Puede
exportar las figuras a todos los formatos de grficos ms usados y conocidos para luego
importarlos a otros paquetes, como Microsoft Word o Microsoft PowerPoint. Usando el Editor
de MATLAB se puede, automticamente, publicar el cdigo MATLAB en HTML, Word, LaTEX y
otros formatos. Por ejemplo, en la Figura 8 se observa un programa de cdigo M (izquierda)
publicado en HTML (derecha) usando MATLAB Editor. Los resultados, que se envan a la
ventana de comandos o a diagramas, se capturan e incluyen en el documento y los
comentarios se convierten en ttulos y texto en HTML.

Figura 8: Programa de MATLAB (izquierda) publicado como HTML (derecha) mediante MATLAB Editor. Los
resultados que se muestran en la ventana de comandos o en forma de grficos se capturan y se incluyen,
mientras que los comentarios sobre el cdigo se convierten en ttulos de seccin y cuerpo de texto en HTML.
Extrada de: http://es.mathworks.com/products/matlab/features.html

Es posible crear informes ms complejos, tales como ejecuciones simuladas y varias pruebas
de parmetros, utilizando MATLAB Report Generator disponible por separado. El informe
contiene el cdigo, los comentarios y los resultados del programa, incluidos los grficos. Los

M Cristina Naya Riveiro 16


Curso de iniciacin a MATLAB

informes se pueden publicar en diversos formatos, tales como HTML, PDF, Word o LaTeX.

En cuanto a la integracin del cdigo MATLAB con otros lenguajes y aplicaciones, MATLAB
proporciona funciones para integrar cdigo C y C++, Fortran, Objetos COM y cdigo de Java
con sus aplicaciones y .NET. Puede llamar a DLLs, clases de Java y Controles Active X.
Usando las bibliotecas de MATLAB, se puede tambin llamar a MATLAB desde su cdigo C,
C++ y Fortran.

En cuanto a distribucin de aplicaciones, puede crearse algoritmos en MATLAB y distribuirlos a


otros usuarios de MATLAB como cdigo de MATLAB que se puede empaquetar a modo de
aplicacin de MATLAB, lo cual genera un archivo nico para la distribucin. Las aplicaciones se
instalan automticamente en la galera de aplicaciones de MATLAB para que resulte fcil
acceder a ellas.

Si desea compartir aplicaciones con personas que no disponen de MATLAB, puede utilizar
productos de distribucin de aplicaciones. Estos productos complementarios generan de forma
automtica aplicaciones autnomas, libreras compartidas y componentes de software para su
integracin en entornos de C, C++, Java, .NET y Excel. Los ejecutables y los componentes se
pueden distribuir de forma gratuita usando el MATLAB Compiler (disponible por separado).

Figura 9

MATLAB Coder (disponible por separado) se puede emplear para generar cdigo C
independiente a partir del cdigo de MATLAB. MATLAB Coder admite un subconjunto del
lenguaje de MATLAB que suelen emplear los ingenieros de diseo para desarrollar algoritmos
a modo de componentes de sistemas ms amplios. Este cdigo se puede utilizar para la
ejecucin autnoma, para la integracin con otras aplicaciones de software o como parte de
una aplicacin embebida.

M Cristina Naya Riveiro 17


Curso de iniciacin a MATLAB

1.1.7 EL PROGRAMA MATLAB

MATLAB se puede arrancar como cualquier otra aplicacin 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 10: escritorio de MATLAB.

Con el fin de ayudar a los usuarios, ya sean nuevos o experimentados, a navegar por las
capacidades en continua expansin de MATLAB, MathWorks ha actualizado el escritorio de
MATLAB desde la versin 2012b con dos mejoras principales:

La cinta de herramientas (toolstrip) de MATLAB que sustituye a los mens y a las


barras de herramientas, cuenta con iconos para las caractersticas de MATLAB ms
utilizadas, como seleccionar el mejor tipo de grfico para los datos.
La galera de aplicaciones (Apps) ofrece aplicaciones de la familia de productos
MATLAB con las que los usuarios pueden llevar a cabo tareas frecuentes sin
necesidad de escribir cdigo.
Visualizacin de varias pginas de documentacin a la vez gracias a la navegacin con
pestaas.
Sugerencias de correccin para funciones y variables mal escritas en la ventana de
comandos.

Otras caractersticas nuevas ayudan a los usuarios a empaquetar aplicaciones de MATLAB


para incluirlas en la galera, importar datos desde archivos de texto tanto de ancho fijo como
delimitados mediante la herramienta de importacin, y corregir funciones o variables mal
escritas en la ventana de comandos.

sta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default, en el men View en
versiones anteriores a 2012b, pero en el nuevo escritorio con vistas de pestaas, se va a la
pestaa de HOME, en el icono de Layout y Default. Como esta configuracin puede ser
cambiada fcilmente por el usuario, es posible que en muchos casos concretos lo que
aparezca sea muy diferente.

La parte ms importante de la ventana inicial es la Command Window o Ventana de comandos,


que aparece en la parte derecha. En esta subventana es donde se ejecutan los comandos de
MATLAB, a continuacin del prompt (aviso) caracterstico (>>), que indica que el programa
est preparado para recibir instrucciones.

En la parte superior izquierda de la pantalla (ver Figura 10) aparecen dos ventanas tambin
muy tiles: en la parte superior aparece la ventana Current Directory, que se puede alternar
con Workspace clicando en la pestaa 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 mens) con los mtodos de navegacin 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 programacin sobre la que se volver en las
prximas pginas. El Workspace contiene informacin sobre todas las variables que se hayan
definido en esta sesin y permite ver y modificar las matrices con las que se est trabajando.

En la parte inferior derecha (ver figura 10) 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 botn derecho
del ratn 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.

M Cristina Naya Riveiro 18


Curso de iniciacin a MATLAB

Figura 10: escritorio de MATLAB, la primera con la versin actual y la segunda con la versin anterior a la
2012b

En versiones anterores a la 2012b, en la parte inferior izquierda de la pantalla aparece el botn


Start, con una funcin anloga a la del botn Inicio de Windows. Start da acceso inmediato a
ciertas capacidades del programa. La Figura 12 muestra las posibilidades de Start/MATLAB,
mientras que la Figura 11 muestra las opciones de Start/Desktop Tools, que permiten el acceso
a las principales componentes o mdulos de MATLAB. El men Desktop realiza un papel
anlogo al botn Start, dando acceso a los mdulos o componentes de MATLAB que se tengan

M Cristina Naya Riveiro 19


Curso de iniciacin a MATLAB

instalados.

Estas funciones en la nueva versin se pueden obtener a partir de los iconos de la cinta de
herramientas en las distintas pestaas.

Figura 12: Menu Start/MATLAB Figura 11: Men Start/Desktop Tools

Puede hacerse que al arrancar MATLAB se ejecute automticamente 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 automtico cada vez que se entra en el programa (el
fichero startup.m, que debe de estar en un fichero determinado, por ejemplo
C:\Matlal701\Work).

Con la Command History, es posible recuperar comandos anteriores de MATLAB y moverse


por dichos comandos con el ratn y con las teclas-flechas y . Al pulsar la primera de dichas
flechas aparecer el comando que se haba introducido inmediatamente antes. De modo
anlogo es posible moverse sobre la lnea de comandos con las teclas y , ir al principio de
la lnea con la tecla Inicio, al final de la lnea con Fin, y borrar toda la lnea con Esc.
Recurdese que slo hay una lnea 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 funcin clc (clear console) elimina todas las salidas
anteriores, mientras que home las mantiene, pero lleva el prompt (>> ) a la primera lnea de la
ventana.

En la nueva versin de MATLAB las propias ventanas ya tiene un men desplegable indicado

con que permite utilizar todas las opciones de cada ventana comentadas anteriormente.

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 aplicacin en Windows.

Veremos todas estas caractersticas con ms detalle, en una prxima seccin.

1.1.8 USO DEL HELP

MATLAB dispone de un excelente Help con el que se puede encontrar la informacin que se
desee. Se puede obtener ayuda a travs del botn Ayuda de la barra de iconos o a travs de la
opcin Help de la barra de mens, y a travs de comandos implementados como objetos de
MATLAB. La Figura 13, muestra las distintas opciones que aparecen en el men Help de la
ventana principal de la aplicacin.

M Cristina Naya Riveiro 20


Curso de iniciacin a MATLAB

Figura 13 Men Help de MATLAB, la primera de las versiones anteriores a 2012b y la segunda de la actual.

1. Full Product Family Help o Product Help, Se abre la ventana de la Figura 15, en la
que se puede buscar informacin general sobre MATLAB o sobre otros productos de la
familia a los que se tenga acceso. La forma de la ventana de ayuda es tpica y comn
con otros niveles de ayuda. La mayor parte de las pginas de ayuda estn en formato
HTML.

M Cristina Naya Riveiro 21


Curso de iniciacin a MATLAB

Figura 15: Ventana inicial de Help Full Product Family Figura 14a: Ventana inicial de MATLAB Help

2. MATLAB Help o Function Browser. Se abre la ventana de la Figura 14a o de la


Figura 14b, en la que se puede buscar ayuda general sobre MATLAB o sobre la
funcin o el concepto que se desee. La portada de esta ayuda tiene siete captulos
principales: Functions, que contiene informacin de referencia sobre las funciones por
orden alfabtico o por categoras; Handle Graphics, que permite acceder a informacin
concreta sobre las distintas propiedades de los objetos grficos; Documentation Set,
que da acceso a versiones completas de los manuales del programa en formato de
pantalla fcilmente navegable (con apartados de Getting Started, User Guides,
Programming Tips y Examples in Documentation), Product Demos (con una coleccin
de ejemplos programados que se pueden ejecutar y cuyo cdigo se puede examinar
para ver cmo estn programados), What's New (con las novedades de esta versin
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 amplsima coleccin 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 pestaa Contents, aparece un ndice temtico
estructurado en forma de rbol que puede ser desplegado y recorrido con gran
facilidad. Las restantes pestaas de esta ventana dan acceso a un ndice por palabras
(Index), a un formulario de bsqueda (Search) y a la coleccin de ejemplos ya
programados antes citada (Demos).

M Cristina Naya Riveiro 22


Curso de iniciacin a MATLAB

Figura 14b: Men del Function Browser.

3. Using the Desktop. Se abre una ventana de ayuda con un formato similar a las de las
figuras anteriores con informacin detallada sobre cmo utilizar y configurar el entorno
de desarrollo o Desktop. Las distintas herramientas disponibles se describen
sucesivamente. Cada pgina dispone de flechas y enlaces que permiten ir a la pgina
siguiente o volver a la anterior. Es posible tambin imprimir aquellas pginas que se
desee consultar o archivar sobre papel. Una caracterstica muy importante es la
posibilidad de organizar las ventanas con gran flexibilidad, agrupndolas o
independizndolas segn los propios gustos o deseos.
4. Using the Command Window. Esta opcin del men Help da acceso a la informacin
necesaria para aprovechar las capacidades de la Command Window, que es el
corazn de MATLAB.
5. Web Resources. Muestra algunas direcciones de Internet con informacin interesante
sobre MATLAB. Todas ellas corresponden a distintas secciones de la web de The
Mathworks (la empresa que desarrolla y comercializa MATLAB), cuya pgina de inicio
se muestra en primer lugar. Adems en las ltimas versiones ofrece Training de ofertas
de cursos de formacin en MATLAB (ver Figura 16 o 13).

Figura 16: Algunas pginas web sobre MATLAB

6. Check for Updates. MATLAB se conecta con The Mathworks y comprueba si hay
versiones ms recientes de los productos instalados. Si se es un usuario registrado, es
posible descargar las versiones ms actuales.
7. Licesing. Acceso a todo lo relacionado con la licencia del producto, actualizaciones,
activacin/desactivacin de software, etc.

M Cristina Naya Riveiro 23


Curso de iniciacin a MATLAB

8. Demos. Se abre una ventana como la mostrada en la Error! No se encuentra el


origen de la referencia.7 que da acceso a un buen nmero de ejemplos resueltos con
MATLAB, cuyos resultados se presentan grficamente de diversas formas. Es muy
interesante recorrer estos ejemplos para hacerse idea de las posibilidades del
programa, tanto en clculo como en grficos. Es asimismo muy instructivo analizar los
ficheros *.m de los ejemplos de caractersticas similares a las de la aplicacin que se

Figura 17: Demos disponibles en Matlab.

desea desarrollar.

Adems, de una forma muy inmediata, es posible tambin recurrir al Help desde la lnea de
comandos de la Command Window. Se aconseja practicar un poco al respecto. Por ejemplo,
obsrvese la respuesta a los siguientes usos del comando help:

>> help

>> help lang

Como se puede comprobar el comando help ofrece ayuda general sobre todos los comandos
de MATLAB. Haciendo clic sobre cualquiera de ellos, se obtiene su ayuda particular. Se pide
ayuda sobre un comando especfico o sobre cualquier tema del contenido utilizando el
comando help comando o help tema.

El comando lookfor secuencia permite encontrar todas aquellas funciones o comandos de


MATLAB que se refieren a dicha secuencia o la contienen. Este comando es muy til, bien
cuando no se dispone de ayuda directa para la secuencia especificada, o bien para ver la
ayuda de todos los comandos que contienen la secuencia. Por ejemplo, si buscamos ayuda
para todos los comandos que contienen la secuencia inv, podemos usar el comando lookfor
inv.

El comando helpwin seguido de un nombre de comando o de funcin muestra la informacin


correspondiente a ese comando en la ventana Help (ver Error! No se encuentra el origen de

M Cristina Naya Riveiro 24


Curso de iniciacin a MATLAB

la referencia.). En la parte superior de la ventana que se abre y se muestra una barra de


mens, donde en la opcin View y luego Code for , permite acceder al cdigo fuente si est
disponible; con la opcin Go to online doc for ... se accede a una informacin ms completa
que puede incluir ejemplos y comandos similares sobre los que tambin se ofrece ayuda. En la
parte inferior de la pgina aparece una lista de enlaces See Also a funciones relacionadas.

El comando doc tecleado en la lnea de comandos equivale a Help/Full Product Family Help; si
va seguido de un nombre de comando o funcin se muestra la informacin detallada
correspondiente a ese comando de modo similar a Go to online doc for... en el prrafo anterior.

En resumen, MATLAB dispone de una ayuda muy completa y accesible, estructurada en varios
niveles (lnea de comandos en la Command Window, ventana Help, y manuales en formato
PDF), con la que es muy importante estar familiarizado, porque hasta los ms expertos
programadores tienen que acudir a ella con una cierta frecuencia.

1.2 EL ENTORNO DE TRABAJO DE MATLAB

El entorno de trabajo de MATLAB es muy grfico e intuitivo, similar al de otras aplicaciones


profesionales de Windows. En la introduccin a MATLAB realizada en el apartado anterior, ya
se han citado algunas de las componentes ms importantes de este entorno de trabajo o de
desarrollo. Ahora se explicarn estas componentes con un poco ms de detalle.

Las componentes ms importantes del entorno de trabajo de MATLAB son las siguientes:

1. El Escritorio de MATLAB (MATLAB Desktop), que es la ventana o contenedor de


mximo nivel en la que se pueden situar las dems componentes, y es la pantalla de
entrada al programa, que constituye el entorno de trabajo primario de MATLAB.
2. Las componentes individuales, orientadas a tareas concretas, entre las que se puede
citar:
a. la ventana de comandos (Command Window),
b. la ventana histrica de comandos (Command History),
c. el espacio de trabajo (Workspace),
d. la plataforma de lanzamiento (Launch Pad),
e. el directorio actual (Current Directory),
f. la ventana de ayuda (Help)
g. el editor de ficheros y depurador de errores (Editor&Debugger),
h. el editor de vectores y matrices (Array Editor).
i. la ventana que permite estudiar cmo se emplea el tiempo de ejecucin
(Profiler).

A continuacin se describen brevemente estas componentes. Tngase en cuenta que utilizar


MATLAB y desarrollar programas para MATLAB es mucho ms fcil si se conoce bien este
entorno de trabajo.

1.2.1 EL ESCRITORIO DE MATLAB (MATLAB DESKTOP)

El MATLAB Desktop es la ventana ms general de la aplicacin. 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 subventanas independientes o como pestaas dentro de una de las subventanas.
MATLAB ofrece una gran flexibilidad al respecto y es cada usuario quien decide en qu forma
desea utilizar la aplicacin.

M Cristina Naya Riveiro 25


Curso de iniciacin a MATLAB

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 subventana superior izquierda
contiene dos componentes superpuestas que se permutan por medio de la pestaa
correspondiente.

La Figura 19a 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 19a la
ventana activa es la Command Window (resalta en azul), en el men de la Figura 19b aparece
la opcin de dejar de alojar dicha ventana en el MATLAB Desktop (Undock Command
Window). Dicho men permite tambin eliminar del Desktop alguna de las componentes
visibles o visualizar el Help (que no est visible). Con los submens de Desktop Layout se
pueden adoptar algunas configuraciones predefinidas, como la configuracin por defecto
(Default) o incluir slo la Command Window. La configuracin adoptada por el usuario se
mantendr la siguiente vez que arranque el programa. Es posible tambin guardar distintas
configuraciones con distintos nombres, para su uso posterior.

Figura 18: Distintas configuraciones del MATLAB DESKTOP (a,b,c,d)

Adems del men mostrado en la Figura 18b, que cambia en algunos detalles segn cual sea
la ventana activa, el usuario puede configurar el MATLAB Desktop por medio del ratn
mediante algunas operaciones como las siguientes:

1. Colocando el ratn sobre los bordes intermedios de las subventanas y arrastrando


puede modificar su tamao en la forma que desee.
2. Clicando sobre la barra de ttulo de la subventana activa y arrastrando (Figura 18c) se
puede llevar a otra parte del Desktop, obtenindose el resultado mostrado en la Figura

M Cristina Naya Riveiro 26


Curso de iniciacin a MATLAB

18d.
3. Si todas las ventanas se van seleccionando sucesivamente y se elige la
correspondiente opcin Undock... en el men View, se podra obtener una
configuracin como la mostrada en la Figura 19a, en la que todas las ventanas son
independientes y aparecen separadas en la barra de tareas.
4. Finalmente, si se parte de la configuracin por defecto y cada uno de los componentes
se arrastra sobre la Command Window se puede obtener una configuracin como la
mostrada en la Figura 19b, en la que todos los componentes abiertos aparecen como
pestaas alternativas en una ventana nica.

Figura 19: Otras configuraciones del MATLAB DESKTOP (a,b)

La variedad de configuraciones mostradas en las figuras precedentes da una idea de las


posibilidades de adaptacin a las preferencias del usuario que tiene MATLAB. Otros
componentes como el Help Browser podran aadirse a esta ventana de forma anloga. En los
apartados siguientes se analizan algunas de las posibilidades de cada componente.

1.2.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 ms importante y la nica que exista en las primeras versiones de la aplicacin.
Algunas caractersticas que nos permiten hacer el programa sobre esta ventana son:

1. Cualquier entrada a ejecutar en MATLAB se escribe a la derecha del input del usuario
encabezado con el prompt >>obtenindose la respuesta en las lneas
inmediatamente inferiores. Despus de la salida vuelve a aparecer el input de usuario
para introducir ms entradas.
2. Cuando en la entrada (input de usuario) que se le proponga a MATLAB en la venta de
comandos no se cita una variable para recoger el resultado, devuelve la respuesta
utilizando la expresin ans=. Pero si definimos una variable que recoja los resultados,
posteriormente podremos utilizar esa variable como argumento de entradas
posteriores.
3. Para que MATLAB ejecute una entrada, basta con pulsar Enter una vez escrita la
misma. Si al final de la entrada colocamos un punto y coma, el programa ejecuta los
clculos y los guarda en la memoria (Workspace), pero no muestra el resultado en la
pantalla. Aparece el prompt de input >> para indicar que se puede introducir una
nueva entrada.
4. Al igual que el lenguaje C de programacin, MATLAB es sensible a la diferencia entre

M Cristina Naya Riveiro 27


Curso de iniciacin a MATLAB

maysculas y minsculas.
5. Los nombres de todas las funciones incorporadas empiezan con minscula.
6. No debe haber espacios en los nombres de las rdenes, en smbolos de ms de una
letra ni en los nombres de las funciones. En los dems casos, los espacios no se tienen
en cuenta. Se pueden poner algunos para hacer ms legibles su input.
7. Se pueden realizar varias entradas en la misma lnea de la ventana de comandos
separndolas por comas y pulsando Enter al final de la ltima entrada. En caso de
utilizar un punto y coma al final de una de las entradas de la lnea, se omite su
correspondiente salida.
8. Es posible introducir comentarios descriptivos en una lnea de entrada de la ventana de
comandos inicindolos con el signo %. Al ejecutar la entrada, MATLAB ignora la zona
de comentario y procesa el resto.
9. Para simplificar el proceso de introduccin de comandos para ser evaluados por el
intrprete de MATLAB, se pueden utilizar una serie de teclas con las siguientes
funciones:
Flecha hacia arriba (Ctrl-P) Recupera la entrada anterior a la actual.
Flecha hacia abajo (Ctrl-N) Recupera la entrada siguiente a la actual.
Flecha hacia la izquierda (Ctrl-B) Lleva el cursor un carcter a la izquierda.
Flecha hacia la derecha (Ctrl-F) Lleva el cursor un carcter a la derecha.
Ctrl-Flecha a la izquierda Lleva el cursor una palabra a la izquierda.
Ctrl-Flecha a la derecha Lleva el cursor una palabra a la derecha.
Inicio (Ctrl-A) Lleva el cursor al comienzo de la lnea.
Fin (Ctrl-E) Lleva el cursor al final de la lnea actual.
Escape Borra la lnea de comandos.
Supr (Ctrl-D) Borra el carcter indicado por el cursor.
Backspace Borra el carcter a la izquierda del cursor.
Ctrl-k Borra toda la lnea actual.

10. El comando clc borra la ventana de comandos, pero no borra su contenido del rea de
trabajo (el contenido permanece en memoria).
11. Escribir lneas de comandos muy largas que automticamente siguen en la lnea
siguiente al llegar al margen derecho de la ventana. Para ello hay que activar la opcin
Wrap Lines, en el men File/Preferences/Command Window.
12. Clicando con el botn derecho sobre el nombre de una funcin que aparezca en esta
ventana se tiene acceso a la pgina del Help sobre dicha funcin. Si el cdigo fuente
(fichero *.m) est disponible, tambin se puede acceder al fichero correspondiente por
medio del Editor/ Debugger.
13. Comenzando a teclear el nombre de una funcin y pulsando la tecla Tab, MATLAB
completa automticamente el nombre de la funcin, o bien muestra en la lnea
siguiente todas las funciones disponibles que comienzan con las letras tecleadas por el
usuario.
14. 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 lnea del fichero fuente en la que se ha producido el error. Clicando en ese enlace
se va a la lnea correspondiente del fichero por medio del Editor/Debugger.

1.2.3 COMMAND HISTORY BROWSER

La ventana Command History ofrece acceso a las sentencias que se han ejecutado
anteriormente en la Command Window. Estas sentencias estn tambin accesibles por medio
de las teclas y como se ha comentado anteriormente, pero esta ventana facilita mucho el
tener una visin ms general de lo hecho anteriormente y seleccionar lo que realmente se

M Cristina Naya Riveiro 28


Curso de iniciacin a MATLAB

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 botn derecho. Tambin
se pueden copiar y volcar sobre la lnea de comandos, pero se ha de copiar toda la lnea, sin
que se admita la copia de un fragmento de la sentencia. Existen opciones para borrar algunas
o todas las lneas de esta ventana. Se puede tambin hacer un profile (evaluar la eficiencia
relativa) de una sentencia o de un grupo de sentencias.

1.2.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 extensin *.m. Estos ficheros se
ejecutan tecleando su nombre en la lnea de comandos (sin la extensin), seguido de los
argumentos entre parntesis, si se trata de funciones. No todos los ficheros *.m que se
encuentren en el disco duro o en otras unidades lgicas montadas en una red local son
accesibles sin ms. 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 condicin. Este directorio es el primer sitio en el que MATLAB busca
cuando desde la lnea 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 tambin pueden aadir sus propios directorios, normalmente al principio o
al final de la lista. En un prximo apartado se ver cmo se controla el Path.

El comando pwd (de print working directory) permite saber cul es el directorio actual. Para
cambiar de directorio actual se puede utilizar el comando cd (de change directory) en la lnea
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
jerarqua 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 anloga a
la del Explorador u otras aplicaciones de Windows. Cuando se llega al directorio deseado se
muestran los ficheros all contenidos. La ventana Current Directory permite ordenarlos por
fecha, tamao, nombre, etc. El directorio actual cambia automticamente en funcin del
directorio seleccionado con este explorador, y tambin 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 botn derecho en cualquier parte de la
ventana Current Directory se tiene la posibilidad de aadir ese directorio al Path de MATLAB.

1.2.5 PATH DE MATLAB: ESTABLECER EL CAMINO DE BSQUEDA


(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
cules son las reglas que determinan qu funcin o qu fichero *.m es el que se va a ejecutar

M Cristina Naya Riveiro 29


Curso de iniciacin a MATLAB

cuando su nombre aparezca en una lnea de comandos del programa. Esto queda determinado
por el camino de bsqueda (search path) que el programa utiliza cuando encuentra el nombre
de una funcin.

El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir de
la lnea de comandos, o utilizando el cuadro de dilogo Set Path, del men File. El comando
path hace que se escriba el search path de MATLAB (el resultado depende de en qu directorio
est instalado MATLAB; se muestran slo unas pocas lneas 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 cmo se utiliza el search path supngase 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 funcin interna o intrnseca de MATLAB.
3. Comprueba si nombre1 es una sub-funcin o una funcin privada del usuario.
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 cmo 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 bsqueda 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 estn en
el mismo directorio.

M Cristina Naya Riveiro 30


Curso de iniciacin a MATLAB

Figura 20: Ventanas del Path (a,b)

El cuadro de dilogo 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 dilogo de la Figura
191a, en el cual se muestra la lista de directorios en la que MATLAB buscar. Para aadir (o
quitar) un directorio a esta lista se debe clicar sobre los botones Add Folder o Add with
Subfolders, con lo cual aparece un nuevo cuadro de dilogo, mostrado en la Figura 20b, que
ayuda a elegir el directorio deseado. El nuevo directorio se aade al comienzo de la lista, pero
desde esa posicin 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 bsqueda: si dos funciones con el mismo nombre
estn en dos directorios diferentes, se utilizar la que primero se encuentre. El cuadro de
dilogo Set Path contiene los botones necesarios para realizar todas las operaciones que el
usuario desee.

Para incluir desde la lnea de comandos de MATLAB un directorio nuevo al comienzo del Path
sin utilizar el cuadro de dilogo Set Path, se puede utilizar tambin el comando path, que
concatena dos listas de directorios (slo se deben utilizar directorios que realmente existan en
el PC), como por ejemplo:

>> path('c:\mat\MATLAB', path) 2

mientras que para aadir el nuevo directorio al final de la lista, se utilizara el comando:

>> path(path, 'c:\mat\practicas')

El comando addpath permite aadir uno o ms 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 opcin por defecto (cuando no se pone ni begin ni end) es aadir al comienzo de la
lista. Despus de ejecutar estos comandos conviene comprobar cmo ha quedado modificado
el search path (recurdese que los directorios deben existir en realidad).

2
El comando path dentro del parntesis de la funcin devuelve la lista de directorios anterior.

M Cristina Naya Riveiro 31


Curso de iniciacin a MATLAB

No es difcil borrar las lneas que se han introducido en el Path: por una parte, los cambios no
son permanentes y dejarn de surtir efecto al salir de MATLAB y volver a entrar (salvo que se
guarden como opciones estables). Adems 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.

1.2.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 estn definidas en la memoria del programa o de la
funcin que se est ejecutando. Para obtener informacin sobre el Workspace desde la lnea
de comandos se pueden utilizar los comandos who y whos. El segundo proporciona una
informacin ms detallada que el primero. Por ejemplo, una salida tpica del comando whos es
la siguiente:

>> whos

Name Size Bytes Class

A 3x3 72 double array

B 3x3 72 double array

C 3x3 72 double array

D 3x3 72 double array

Grand total is 36 elements using 288 bytes.

stas son las variables del espacio de trabajo base (el de la lnea de comandos de MATLAB).
Ms adelante se ver que cada funcin 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 grfico para ver las variables definidas en el
espacio de trabajo. Se activa con el comando View/Workspace. La Figura 21a 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 pestaa,
si la ventana ya exista) del Array Editor, en la que se muestran y pueden ser modificados los
elementos de dicha matriz (ver Figura 21b).

Es importante insistir en que cada una de las funciones de MATLAB tiene su propio espacio de
trabajo, al que en principio slo pertenecen las variables recibidas como argumentos o
definidas dentro de la propia funcin. 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 funcin y se devuelve el
control al programa que la haba llamado, las variables definidas en la funcin dejan de existir
(salvo que se hayan declarado como persistentes) y tambin deja de existir su espacio de
trabajo.

M Cristina Naya Riveiro 32


Curso de iniciacin a MATLAB

Figura 21: Ventanas del Workspace y de su editor (a,b).

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

Clicando con el botn 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 grficamente dicha variable.

El Array Editor no slo permite ver los valores de los elementos de cualquier matriz o vector
definido en el programa: es tambin 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 tambin para entender bien ciertos algoritmos, ejecutando paso a
paso un programa y viendo cmo cambian los valores de las distintas variables. Es posible
aparcar o situar las ventanas o pestaas del Array Editor en la misma ventana del
Editor/Debugger, que se va a ver a continuacin.

1.2.7 EL EDITOR DEBUGGER

En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files). Son ficheros de
texto ASCII, con la extensin *.m, que contienen conjuntos de comandos o definicin de
funciones (estos ltimos son un poco ms complicados y se vern ms adelante). La
importancia de estos ficheros-M es que al teclear su nombre en la lnea 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.

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 depuracin).
La Figura 22 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 sentencias:

M Cristina Naya Riveiro 33


Curso de iniciacin a MATLAB

Figura 22: Ventana Editor/Debugger.

clear all;

A=rand(3,3);

B=A';

C=inv(A);

D=C*A; disp('Ya he terminado');

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 tambin de que las comillas o parntesis que se abren, no se queden sin el
correspondiente elemento de cierre. Colocando el cursor antes o despus de una apertura o
cierre de corchete o parntesis y pulsando las teclas () o (), el Editor muestra con qu
cierre o apertura de corchete o parntesis se empareja el elemento considerado; si no se
empareja con ninguno, aparece con una rayita de tachado.

Seleccionando varias lneas y clicando con el botn derecho aparece un men contextual cuya
sentencia Comment permite entre otras cosas comentar con el carcter % todas las lneas
seleccionadas. Estos comentarios pueden volver a su condicin de cdigo ejecutable
seleccionndolos y ejecutando Uncomment en el men contextual. Otra opcin muy til de ese
men contextual es Smart Indent, que organiza el sangrado de los bucles y bifurcaciones de
las sentencias seleccionadas.

La Figura 22 corresponde a una ejecucin de este fichero de comandos controlada con el


Debugger. Dicha ejecucin se comienza eligiendo el comando Run en el men Debug,
pulsando la tecla F5, clicando en el botn Run and Advance de la barra de herramientas del
Editor o tecleando el nombre del fichero en la lnea de comandos de la Command Window. Los
puntos rojos que aparecen en el margen izquierdo son breakpoints (puntos en los que se
detiene la ejecucin de programa); cuando el cursor se coloca sobre una variable (en este caso
sobre A) aparece una pequea ventana con los valores numricos de esa variable.

En la Figura 22 puede apreciarse tambin que estn 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 lnea 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 lnea.

Step In. Avanzar un paso, y si en ese paso hay una llamada a una funcin cuyo fichero
*.m est accesible, entra en dicha funcin.

M Cristina Naya Riveiro 34


Curso de iniciacin a MATLAB

Step Out. Salir de la funcin que se est ejecutando en ese momento.

Continue. Continuar la ejecucin hasta el siguiente breakpoint.

Quit Debugging. Terminar la ejecucin del Debugger.

Function Call Stack. En la parte derecha de la barra de herramientas aparece esta lista

desplegable (visible en la Figura 22 con las letras Prueba1) 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 lnea de comandos) y el espacio de trabajo de cada funcin

son diferentes.

El Debugger es un programa que hay que conocer muy bien, pues es muy til para detectar y
corregir errores. Es tambin enormemente til para aprender mtodos numricos y tcnicas de
programacin. 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 lnea de comandos de MATLAB y teclear una expresin para ver su resultado. Tambin se
puede seleccionar con el ratn una sub-expresin en cualquier lnea vista en el
Editor/Debugger, clicar con el botn derecho y en el men contextual que se abre elegir
Evaluate Selection. El resultado de evaluar esa sub-expresin aparece en la lnea de
comandos de MATLAB.

Al realizar operaciones con el Debugger grfico van apareciendo las correspondientes


instrucciones en la lnea de comandos de MATLAB. Para ms informacin sobre los comandos
del Debugger alfanumrico, buscar en la seccin Editing and Debugging M-Files en
Help/MATLAB/Desktop Tools and Development Environment.

Seleccionando el nombre de una funcin o de un fichero de comandos en el cdigo mostrado


en la ventana del Editor/Debugger y abriendo con el botn 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 funcin
seleccionada.

MATLAB permite tambin introducir breakpoints condicionales (indicados con un punto


amarillo, en vez de rojo), en los que el programa se para slo si se cumple una determinada
condicin. Para introducir un breakpoint condicional basta clicar con el botn derecho en la
correspondiente lnea del cdigo 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 en la Figura 23 en la que se escribe la condicin que debe cumplirse para que el
programa se detenga en dicho punto.

M Cristina Naya Riveiro 35


Curso de iniciacin a MATLAB

Figura 23

1.2.8 EL PROFILER

El profiler es un programa de utilidad que permite saber cmo se ha empleado el tiempo de la


CPU en la ejecucin 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 lneas de cdigo
que ms veces se llaman y que se llevan la mayor parte del tiempo de ejecucin. Por ejemplo,
es obvio que si se trata de mejorar la eficiencia de un programa, sera ms importante mejorar
una funcin que se llevase el 60% del tiempo total que otra que slo se llevase el 2%. Dentro
de la funcin ms llamada, el profiler proporciona informacin sobre el tiempo que se lleva cada
sentencia, y da tambin algunas orientaciones
sobre las posibilidades de mejorarla.

En esta nueva versin tenemos directamente


un botn Run and Time que nos facilita esta
informacin.

APPS DE MATLAB

Las Apps de MATLAB son Apps interactivas


escritas para realizar tareas de clculo tcnico.
Diversos productos de MATLAB incluyen Apps.
La pestaa Apps de la barra de herramientas
de MATLAB muestra las Apps que hay
instaladas en la actualidad.

Existen varias formas de obtener ms Apps: en


la seccin de intercambio de archivos de
MATLAB, mediante otros productos de
MATLAB y creando Apps propias. A partir de
MATLAB R2012b, es posible crear Apps y
compartirlas con los miembros de la
comunidad de MATLAB. Ejemplo de iconos de Apps.

1.3 PREFERENCIAS: FORMATOS DE SALIDA Y DE OTRAS OPCIONES


DE MATLAB

MATLAB dispone de un cuadro de dilogo desde el que se establecen casi todas las opciones
que el usuario puede determinar por su cuenta. Este cuadro de dilogo se abre con el icono
Preferences del men mostrando todas las posibilidades que ofrece en el men de la izquierda:

M Cristina Naya Riveiro 36


Curso de iniciacin a MATLAB

en total son 24 cuadros de dilogo diferentes. La Figura 24b muestra el que permite elegir los
colores generales del cdigo.

Figura 24: Ventana Preferences/General (a,b)

El cuadro de dilogo Command Window/Fonts ofrece la posibilidad de elegir el tipo de letra


as como el tamao 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 tamao
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 numricos con que MATLAB muestra los resultados (recurdese que
siempre calcula con doble precisin, es decir con unas 16 cifras decimales equivalentes), las
posibilidades existentes se muestran en la lista desplegable de la Figura 25a y son las
siguientes:

short coma fija con 4 decimales (defecto)


long coma fija con 15 decimales
hex cifras hexadecimales
bank nmeros con dos cifras decimales
short e notacin cientfica con 4 decimales
short g notacin cientfica o decimal, dependiendo del valor
long e notacin cientfica con 15 decimales
long g notacin cientfica o decimal, dependiendo del valor
rational expresa los nmeros racionales como cocientes de enteros

Estos formatos se pueden cambiar tambin desde la lnea 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 lneas en blanco en la salida (opcin por
defecto), mientras que el formato compact elimina las lneas en blanco citadas. Estas opciones
estn disponibles en el cuadro de dilogo de la Figura 25a y se pueden tambin establecer
desde la lnea de comandos en la forma:

M Cristina Naya Riveiro 37


Curso de iniciacin a MATLAB

>> format compact

El cuadro de dilogo de la Figura 25b 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 automtico
al ejecutarlos con el Debugger.

Figura 25: Ventana Preferencias (a,b)

MATLAB aplica un factor de escala general a las matrices cuando los elementos no enteros
ms grandes o ms pequeos son superiores o inferiores a una determinada cantidad (103 y
103, respectivamente).

Hay que aadir que MATLAB trata de mantener el formato de los nmeros que han sido
definidos como enteros (sin punto decimal). Si se elige la opcin format rational el programa
trata de expresar los nmeros racionales como cocientes de enteros.

1.4 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 subdirectorio toolbox\local. Este fichero contiene tambin otros parmetros
de inicializacin y es, por ejemplo, el responsable de los mensajes que aparecen al arrancar el
programa. Este fichero se ejecuta automticamente 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 algn 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 MATLAB se coloca un fichero creado por el usuario llamado startup.m las
instrucciones contenidas en dicho fichero se ejecutarn automticamente 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!')

M Cristina Naya Riveiro 38


Curso de iniciacin a MATLAB

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 ms 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 anloga, al abandonar la ejecucin de MATLAB con el comando quit se ejecuta


automticamente 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 y poder continuar en otro momento a partir del punto en el que se abandon el
trabajo, por ejemplo al cerrar el programa.

1.5 GUARDAR VARIABLES Y ESTADOS DE UNA SESIN: COMANDOS


SAVE Y LOAD

En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo
recuperar ms 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 automticamente.

Para guardar el estado de una sesin 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 sesin (excepto los grficos, 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 ms bsica de los comandos save y load. Se pueden guardar tambin
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 sesin basta teclear:

>> load filename

Si no se indica ninguna variable, se guardan todas las variables creadas en esa sesin.

El comando save permite guardar el estado de la sesin en formato ASCII utilizndolo de la


siguiente forma (lo que va detrs del carcter (%) 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 slo se guardan los valores y no otra informacin tal como los
nombres de las matrices y/o vectores. Cuando se recuperan estos ficheros con load -ascii toda

M Cristina Naya Riveiro 39


Curso de iniciacin a MATLAB

la informacin se guarda en una nica matriz con el nombre del fichero. Esto produce un error
cuando no todas las filas tienen el mismo nmero de elementos.

Con la opcin -append en el comando save la informacin se guarda a continuacin 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.

1.6 GUARDAR SESIN Y COPIAR SALIDAS: COMANDO DIARY

Los comandos save y load crean ficheros binarios o ASCII con el estado de la sesin. Existe
otra forma ms 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 ejecucin 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 extensin).

1.7 LNEAS DE COMENTARIOS

Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica comienzo de
comentario. Cuando aparece en una lnea de comandos, el programa supone que todo lo que
va desde ese carcter hasta el fin de la lnea es un comentario.

Ms 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 botn derecho, y elegir la opcin Comment en el men que se abre; las sentencias
seleccionadas se comentan individualmente con el carcter %. 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 lneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques
comentados pueden incluirse dentro de otros bloques comentados ms amplios (bloques
anidados).

M Cristina Naya Riveiro 40


Curso de iniciacin a MATLAB

1.8 MEDIDA DE TIEMPOS Y DE ESFUERZO DE CLCULO

MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones
matemticas realizadas. Algunas de estas funciones son las siguientes:

cputime devuelve el tiempo de CPU (con precisin de centsimas de segundo) desde


que el programa arranc. Llamando antes y despus de realizar una operacin
y restando los valores devueltos, se puede saber el tiempo de CPU empleado
en esa operacin. Este tiempo sigue corriendo aunque MATLAB est inactivo.

etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (atencin 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 cdigo mide de varias formas el tiempo necesario para
resolver un sistema de 1000 ecuaciones con 1000 incgnitas. Tngase en cuenta que los
tiempos pequeos (del orden de las dcimas o centsimas de segundo), no se pueden medir
con gran precisin.

>> 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 lnea para que se ejecuten todas sin
tiempos muertos al pulsar intro. Esto es especialmente importante en la lnea de comandos en
la que se quiere medir los tiempos. Todas las sentencias de clculos matriciales van seguidas
de punto y coma (;) con objeto de evitar la impresin 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.

Prctica:

1. Modifica el entorno original para que aparezca:


a. nicamente la ventana de comandos.
b. La Ventana de comandos y los comandos ejecutados en sesiones anteriores.
c. La ventana de comandos y el directorio de trabajo.
d. Prueba otras posibilidades y escoge la que ms se adece a tu forma de
trabajo.
2. Crea un directorio de trabajo con tu nombre.
>> diary primera_sesion.dia
Al final de la sesin de trabajo y, antes de salir de MatLab, bastar teclear
>> diary off
Para comprobar que ha sido grabado podemos escribir
>>dir (viendo que existe en el listado de ficheros)
Visualizar su contenido:
>>type primera_sesion.dia

M Cristina Naya Riveiro 41


Curso de iniciacin a MATLAB

2. EJECUCIN DE COMANDOS Y CREACIN DE VARIABLES

2.1 OPERACIONES ARITMTICAS. USO DEL MATLAB COMO


CALCULADORA

La utilizacin ms bsica de MATLAB es su uso como calculadora, que funciona de una forma
similar que una calculadora programable, aunque bastante ms verstil.

Los elementos bsicos del MATLAB, como en cualquier otro lenguaje de programacin son:
constantes, operaciones, variables, expresiones y funciones.

2.1.1 CONSTANTES

Una constante numrica es cualquier nmero que se utiliza en un clculo sin que experimente
variacin durante una sesin de trabajo. Al igual que en clculo elemental tendremos tres tipos
de nmeros y, por lo tanto, tres tipos de constantes:

1. Nmeros enteros: 2 58 39 479 -98 (nmeros escritos sin punto decimal).


2. Nmeros reales: 23. -95.9 1.2 (con punto decimal, es obligatorio el uso de punto y no
de la coma). Pueden escribirse de la siguiente manera:
Con un mximo de 16 cifras significativas y el punto decimal en cualquier
posicin.
i. Ejemplos vlidos: 5693.258 25.9
ii. Ejemplos no vlidos: 12,87 pues no se admite la , en la definicin de
una constante.
Utilizando la letra E (tanto en maysculas como en minscula e) a continuacin
de un nmero con punto decimal, seguida de un nmero positivo o negativo de
3 cifras, que indicar la potencia de 10 por la que debe multiplicarse el nmero
que le precede. Esta posibilidad permite simplificar la escritura de constantes
reales muy grandes o muy pequeas.
i. Ejemplos vlidos: 85.E4 (= 85. x 104), 0.587E-02 (=0.587x10-2).
ii. Ejemplos no vlidos: 96,E1 pues no se admite la ,, 5E1.6 pues el
exponente debe ser un nmero entero.

Esta forma de representar los nmeros reales se conoce como notacin


exponencial o cientfica.

3. Nmeros complejos: 3+4i, 3.-8.i, 3+4*j, , donde i,j= 1.

En MATLAB las variables i y j estn predefinidas como 1. Como veremos el signo de


la multiplicacin en MATLAB es *; sin embargo, en la escritura de los nmeros
complejos no es preciso poner este signo antes del complejo i.

Cualquier constante que no vaya precedida de signo se considera positiva.

2.1.2 OPERACIONES

En la tabla siguiente se ilustran las operaciones aritmticas elementales, el smbolo que


emplea MATLAB y un ejemplo.

M Cristina Naya Riveiro 42


Curso de iniciacin a MATLAB

Operacin Smbolo Ejemplo


Suma + 9.3+7
Resta - 9-12
Multiplicacin * 9*53
Divisin / 7/9
Divisin inversa (produce el inverso de la divisin a\b=b/a) \ 5\50
Exponenciacin ^ 6^2

El orden en que estas operaciones se evalan en una expresin est dado por la siguiente ley
de precedencia:

Las expresiones se evalan de izquierda a derecha, con la operacin de potencia o de


exponenciacin teniendo el orden de precedencia ms alto, seguido por multiplicacin y
divisin que tienen ambas igual precedencia y seguidas finalmente, por suma y resta que
tienen igual precedencia.

Se pueden usar parntesis para alterar esta usual ordenacin, en cuyo caso la evaluacin se
inicia dentro del parntesis ms interno y se procede hacia fuera.

Ejercicio:

Para observar cmo funcionan estas operaciones en MATLAB, resolver:

i. 3^2+1-2/2*4
ii. (3^2+1-2)/2*4
iii. 3^(2+1)-2/(2*4)

2.1.3 VARIABLES Y EXPRESIONES

Una variable es la etiqueta que identifica una porcin de memoria; en ella podemos guardar
datos de un mismo tipo, nmeros o caracteres, recuperables y modificables durante la vida de
la variable en la sesin de trabajo, sin ms que hacer referencia a su nombre. Es decir, es un
nombre que se le da a una entidad numrica o carcter, que puede ser una matriz, un vector o
un escalar. El valor de esa variable, e incluso el tipo de entidad numrica o carcter que
representa, puede cambiar a lo largo de una sesin de MATLAB o a lo largo de la ejecucin de
un programa. La forma ms normal de cambiar el valor de una variable es colocndola a la
izquierda del operador de asignacin (=). Por ejemplo:

>> a=4/3;
>> b=11;
>> volumen=2;
>> temperatura=33.5;
>> nombre='Javier'
nombre =
Javier

Como se muestra el ejemplo, MATLAB puede definir variables que contengan cadenas de
caracteres. Las cadenas de texto van entre apstrofos o comillas simples s = 'cadena de
caracteres'.

A partir de expresiones aritmticas tambin podemos definir variables. Por ejemplo:


>> c=a*(b-1)
c=
13.3333
Las expresiones numricas son un conjunto de nmeros, funciones y variables previamente

M Cristina Naya Riveiro 43


Curso de iniciacin a MATLAB

definidas, relacionados todos ellos por operadores aritmticos. Se permite utilizar espacios en
blanco para separar las unidades bsicas de la expresin, mejorando su presentacin y lectura
posterior.

Una expresin de MATLAB puede tener las dos formas siguientes: primero, asignando su
resultado a una variable,

variable = expresin

y segundo evaluando simplemente el resultado del siguiente modo,

expresin

en cuyo caso el resultado se asigna automticamente a una variable interna de MATLAB


llamada ans (de answer) que almacena el ltimo resultado obtenido.

>> 4*a-6/b+c

ans =

18.1212

Se considera por defecto que una expresin termina cuando se pulsa intro. Si se desea que
una expresin contine en la lnea siguiente, por ejemplo si es demasiado larga, hay que
introducir tres puntos (...) antes de pulsar intro (para evitar que pueda confundirse el primer
punto de este comando con el punto decimal, es conveniente dejar un espacio en blanco antes
de escribirlo).

>> s=1+2+3+4+5+6+7+8+9...

+10+11

s=

66

Tambin se pueden incluir varias expresiones en una misma lnea separndolas por comas (,)
o puntos y comas (;).

La ventaja de usar variables en las expresiones es que permite guardar todas las cifras
significativas de los clculos intermedios, teniendo por tanto una mayor precisin en el
resultado final y una mayor comodidad.

Si una expresin 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 impresin de grandes cantidades de nmeros cuando se
trabaja con matrices de gran tamao.

MATLAB distingue entre maysculas y minsculas en los nombres de variables, es decir la


variable AB y la variable ab son distintas.

Los nombres de variables deben empezar siempre por una letra y pueden constar de hasta
63 caracteres, que pueden ser letras y nmeros. No pueden utilizarse para nombrar variables
los caracteres especiales siguientes:

+, -,=,*, <, >, ^,

M Cristina Naya Riveiro 44


Curso de iniciacin a MATLAB

El carcter guion bajo (_) se considera como una letra. La funcin namelengthmax permite
preguntar al programa por este nmero mximo de caracteres. A diferencia de otros lenguajes
de programacin, MATLAB no requiere ningn tipo de declaracin de las variables que se
vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres
errneos en las variables, porque no se recibir ningn aviso del ordenador.

Cuando se quiere tener una relacin de las variables que se han utilizado en una sesin de
trabajo se puede utilizar el comando who.

>> who

Your variables are:

a c temperatura
b nombre volumen
Existe otro comando llamado whos que proporciona adems informacin sobre el tamao o
dimensin, la cantidad de memoria ocupada y el carcter real o complejo de cada variable.
>> whos
Name Size Bytes Class

a 1x1 8 double array


b 1x1 8 double array
c 1x1 8 double array
nombre 1x6 12 char array
temperatura 1x1 8 double array
volumen 1x1 8 double array

Grand total is 11 elements using 52 bytes

Se sugiere utilizar de vez en cuando estos comandos en la sesin de MATLAB que se tiene
abierta. Esta misma informacin se puede obtener grficamente con el Workspace Browser, que
aparece con el comando View/Workspace o activando la ventana correspondiente si estaba
abierto.

Si en algn momento de la sesin de MATLAB deseamos eliminar una variable se utiliza el


comando clear, que tiene tiene varias formas posibles:

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

Este comando es muy interesante, pues permite que la variable tenga un tiempo de vida
limitado durante una sesin de trabajo y, as, optimizar los recursos de la memoria.

La ejecucin de una sentencia puede abortarse pulsando simultneamente las teclas Control y
C.

Cualquier comentario que desee introducirse para facilitar posteriores lecturas de los comandos
ejecutados, puede incluirse en una lnea suelta, o a continuacin de una expresin; tan slo
debe ir precedido por %. Por ejemplo:

>> %Definimos, a continuacin, la temperatura:

M Cristina Naya Riveiro 45


Curso de iniciacin a MATLAB

>> temp= 48; % temp toma el valor inicial 48

>> %cualquier otro comentario puede ir aqu.

MATLAB tiene predefinidas una serie de variables y constantes especiales, que son variables
permanentes es decir, son aquellas con significado especial, y que no se pueden eliminar:

ans: variable utilizada por defecto para almacenar el resultado de evaluar expresiones
aritmticas, que contiene la respuesta (answer) del ultimo comando ejecutado, cuando
el resultado de dicho comando no se asigna explcitamente a ninguna variable.
eps: nmero ms pequeo que, aadido a otro, crea un nuevo nmero en coma
flotante 3 sobre el ordenador.

>> eps

ans =

2.2204e-016

pi: .
i, j: 1 Constante imaginaria.
inf: . Se trata de un valor excesivamente grande para ser almacenado.
>> 1/0
Warning: Divide by zero.
ans =
Inf
NaN: Not a number. Es el resultado que se proporciona si durante una operacin se
0
produce una indeterminacin, del tipo 0, , , etc.
0
>> b=inf/inf
b=
NaN
Con respecto a estas dos ltimas variables es necesario subrayar que el usuario debe
extremar las precauciones en el uso del paquete pues, por ejemplo, si a lo largo de un
programa se realiza el cculo 3/Inf (que matemticamente carece de sentido) el
programa se sigue ejecutando tomando para tal expresin el valor cero y dificultando
posteriormente la identificacin del error correspondiente.
date: toma el valor de la fecha actual.
clock: da un vector de 6 elementos que contiene como coordenadas el ao, el mes, el
da, la hora, el minuto y los segundos.
CLOCK = [year month day hour minute seconds]
>> clock
ans =
1.0e+003 *
2.0120 0.0050 0.0240 0.0170 0.0570 0.0126.
rand: genera de forma aleatoria un nmero entre 0 y 1.
>> rand
ans =

3
La representacin de coma flotante, es una forma de notacin cientfica usada en los CPU,
GPU, FPU, etc, con la cual se pueden representar nmeros reales extremadamente grandes y
pequeos de una manera muy eficiente y compacta, y con la que se pueden realizar
operaciones aritmticas.

M Cristina Naya Riveiro 46


Curso de iniciacin a MATLAB

0.9501
>> rand
ans =
0.2311
realmin: el menor nmero positivo utilizable.
realmax: el mayor nmero positivo utilizable.
>> realmin
ans =
2.2251e-308
>> realmax
ans =
1.7977e+308
flops: nmero de operaciones en punto flotante realizadas hasta el momento.

Por defecto, si solicitamos el valor de una variable slo se nos informa de cinco cifras
significativas, correspondientes a la visualizacin en formato corto. Para cambiar este nmero
tecleamos el comando:

>> format long

Que nos ofrece 14 cifras significativas. Para volver al formato corte es preciso teclear:

>> format

o bien:

>> format short

Si deseamos que nos exprese en formato corto y en notacin exponencial el valor de las
variables, debemos usar el comando:

>> format short e

De la misma forma,

>> format long e

Permite expresar en formato largo y en notacin exponencial el valor de las variables. El


formato:

>> format rat

Nos da una aproximacin racional, es decir en forma de fraccin, del valor de las variables que
se soliciten a continuacin.

Cuando se sale de MATLAB, se pierden todas las variables. Para evitarlo se puede utilizar la
instruccin save antes de salir. Esto hace que las variables se almacenen en el archivo de
disco matllab.mat. Al ingresar nuevamente a MATLAB se pueden recuperar todas las variables
con la instruccin load.

En resumen, en MATLAB podemos encontrar variables unidimensionales, vectoriales,


matriciales y las denominadas variables simblicas. Son aquellas que nos permitirn trabajar
con el clculo matemtico simblico, manipular con facilidad y rapidez las frmulas y
expresiones algebraicas y realizar la mayora de las operaciones con las mismas.

Sin embargo para realizar estas tareas es necesario disponer del mdulo MATLAB Symbolic

M Cristina Naya Riveiro 47


Curso de iniciacin a MATLAB

Math Toolbox. Para que una variable o expresin algebraica sea simblica, previamente hay
que declararla como tal con el comando syms, con el comando sym o introducindola entre
comillas. Ejemplo:

>> syms x y
>> x+x-6*y
ans =

2*x-5*y

>> y=sym(x)

2.1.4 FUNCIONES INTRNSICAS DE MATLAB

Una funcin tiene la forma:

nombre(argumento)

donde nombre identifica la funcin a utilizar y argumento el punto donde queremos evaluarla.
Existen numerosas funciones intrnsecas ya definidas en MATLAB, y es precisamente aqu
donde radica la gran potencia de este problema. En su nombre slo intervienen letras
minsculas. Enumeramos a continuacin algunas de ellas:

sqrt(x): calcula la raz cuadrada de x. El argumento puede ser real o complejo.


abs(x): calcula el mdulo del nmero x, sea real o complejo.
conj(z): calcula el conjugado del nmero comlejo z.
real(x), imag(z): calcula la parte real e imaginaria del nmero complejo z.
exp(x): calcula ex, siendo x un nmero real o complejo.
sin(x): funcin seno de x
asin(x): funcin arcoseno de x con valores de /2 a /2.
cos(x): funcin seno de x
acos(x): funcin arcoseno de x con valores de /2 a /2.
tan(x): funcin tangentede x.
atan(x): funcin arcotantgente de x con valores de /2 a /2.
angle(z): calcula el argumento del nmero complejo z.
log(x): funcin logaritmo natural en base e del nmero x.
log10(x): funcin logaritmo decimal del nmero x
rats(x): aproxima el argumento por una fraccin, es decir, por un nmero racional.
rem(x,y): calcula el resto de dividir x por y.
round(x): redondea el valor de x por el entero ms prximo.
sign(x): calcula el signo de x. Para una cantidad positiva el signo es 1, para una
negativa el signo es -1, y para el cero el signo es 0.

En todas las funciones intrnsecas, el argumento debe ir entre parntesis y puede ser una
constante, una variable ya definida anteriormente o una expresin.

En las funciones trigonomtricas el ngulo debe darse en radianes. Por tanto, si conocemos el
ngulo en grados debe convertirse previamente a radianes. MATLAB no proporciona funcin
alguna que transforme grados a radianes.

2.2 LMITES, SUCESIONES, DERIVADAS E INTEGRALES

MATLAB incorpora funciones que permiten trabajar con lmites, sucesiones, derivadas o

M Cristina Naya Riveiro 48


Curso de iniciacin a MATLAB

integrales. Veremos unos ejemplos sencillos para trabajar estos conceptos matemticos.

2.2.1 LMITES

MATLAB contiene funciones que permiten trabajar con lmites y lmites laterales de una manera
muy simple. Esto posibilita el anlisis del estudio de la continuidad y derivabilidad de funciones,
as como analizar el carcter de las series numricas y de las series de potencias. Algunos
ejemplos son:

limit(funcin o sucesin, variable, valor, left o right): calcula el lmite de la funcin o


sucesin de su primer argumento, indicada por su expresin analtica o su trmino
general, respectivamente cuando la variable tiende hacia el valor por la derecha o
izquierda.

>> syms x

>> limit(exp(1/x),x,0,'left')

ans =0

>> limit(exp(1/x),x,0,'right')

ans =Inf

>> syms n

>> limit((3+n)/(2+6*n),inf)

ans =1/6

2.2.2 SUCESIONES

MATLAB permite trabajar con series numricas, tanto de trminos positivos como alternados.

Algunos ejemplos son:

symsum(S,v,a,b): suma la serie S para la variable v variando entre a y b.


>> syms x
>> syms k
>> symsum(x^k/sym('k!'),k,0,inf)
ans =exp(x)
taylor(f,a): realiza el desarrollo de McLaurin de orden n para la funcin f siendo n un
nmero natural.
taylor(f,n,v,a): realiza el desarrollo de Taylor de orden n-1 para la funcin f en la
variable v en un entorno del punto a.

>> syms x

f=exp(x^2);

>> pretty(taylor(f))

4 2

M Cristina Naya Riveiro 49


Curso de iniciacin a MATLAB

x/2 + x + 1

>> pretty(taylor(f,3,x,2))

exp(4) + 4 exp(4) (x - 2) + 9 exp(4) (x - 2)

La funcin pretty(s) imprime la expresin s en un formato que se asemeja al usado en


Matemticas.

2.2.3 DERIVADAS

MATLAB permite trabajar con derivadas a travs de un grupo de comandos que habilita
especialmente para esta tarea. Algunos ejemplos son:

diff(f,x,n): halla la funcin derivada ensima de f respecto a x.


R=jacobian(w,v): halla la matriz jacobiana de w respecto de v.
>> syms x
>> diff (sin(x^2),x,2)
ans =2*cos(x^2) - 4*x^2*sin(x^2)
>> syms x y z
>> jacobian([x*y*z; y; x+z],[x y z])
ans =
[ y*z, x*z, x*y]
[ 0, 1, 0]
[ 1, 0, 1]

2.2.4 INTEGRALES

MATLAB trata integrales de una o varias variables a travs de un conjunto de funciones


intrnsecas especficas para ello. Algunos ejemplos son:

int(f(x),x): calcula la integral indefinida ().


int(int(f(x,y),x),y): calcula la integral doble (, )

int(f(x),x,a,b): calcula la integral definida () .

>> syms x y z

>> int(tan(x),x)

ans =-log(cos(x))

>> int(int(int(sin(x+y+z),x),y),z)

ans =cos(x + y + z)

>> int((cos(x))^2,x,-pi,pi)

ans =pi

M Cristina Naya Riveiro 50


Curso de iniciacin a MATLAB

Prctica:

Ejemplo de iconos de Apps.

M Cristina Naya Riveiro 51


Curso de iniciacin a MATLAB

3. ANLISIS DE VECTORES, MATRICES, POLINOMIOS Y SISTEMAS DE


ECUACIONES LINEALES. OTROS TIPOS DE DATOS.

Ya se ha comentado que MATLAB es fundamentalmente un programa para clculo matricial.


Inicialmente se utilizar MATLAB como programa interactivo, en el que se irn definiendo los
vectores, las matrices, los polinomios, los sistemas de ecuaciones lineales y las expresiones
que los combinan. Adems uno de los aspectos ms notables de MATLAB lo constituye la
forma en que permite manipular y operar con vectores y matrices.

3.1 VECTORES

El tratamiento que el paquete MATLAB hace de los vectores, tambin llamados arrays,
simplifica considerablemente la resolucin de problemas bsicos como pueden ser la
representacin grfica de funciones, el tratamiento estadstico de datos, etc.

Al igual que en clculo elemental, distinguiremos entre vectores fila y vectores columna.

3.1.1 VECTORES FILA

En general, se introducen escribiendo entre corchetes cada una de sus componentes


separadas por un espacio o una coma; la diferencia con respecto a su escritura tradicional
estriba en que en vez de utilizar parntesis para delimitar sus componentes debemos utilizar
corchetes. Por ejemplo:

>> v=[4 -6 5]

v=

4 -6 5

>> v=[4, -6, 5]

v=

4 -6 5

Tambin se pueden introducir especificando el valor de cada componente en el orden que


desee:

>> w(2)=-6, w(1)=4, w(3)=5

w=

0 -6

w=

4 -6

w=

4 -6 5

Las componentes de un vector pueden ser constantes, variables o expresiones aritmticas y


sern identificadas por su ndice: la variable w(2) representa la segunda componente de w. Los

M Cristina Naya Riveiro 52


Curso de iniciacin a MATLAB

ndices sern secuencias de nmeros naturales empezando por el 1.

Tambin podremos acceder a un bloque de componentes a la vez, tecleando:

subvector_w=w(i:j)

que identifica todas las componentes de w comprendidas entre la i-sima componente y la j-


sima componente, guardndolas en la variable subvector w.

Otras rdenes para casos particulares:

v=[a:h:b] Define un vector fila cuyo primer elemento es a y los dems elementos
aumentan de h en h sin superar b .
v=[a:b] Define un vector fila cuyo primer elemento es a y los dems elementos
aumentan de 1 en 1 sin superar b .
v=linspace(a,b,n) Define un vector fila de n componentes, cuyo primer elemento es a
y cuyo ltimo elemento es b, con diferencia constante entre componentes consecutivas
k=(b-a)/(n-1).
v=logspace(a,b,n) Genera un vector fila de n puntos logartmicamente espaciados entre
10a y 10b. Si se omite el valor de n, se toma 50.

Por ejemplo,

>> u=linspace(-4,7,6)

u=

-4.0000 -1.8000 0.4000 2.6000 4.8000 7.0000

>> v=[-4:2:7], w=[-4:7]

v=

-4 -2 0 2 4 6

w=

-4 -3 -2 -1 0 1 2 3 4 5 6 7

>> v=-4:2:7, w=-4:7; % se puede escribir sin los corchetes

La longitud de un vector se obtiene utilizando el comando

>> length(nombre_vector)

La dimensin de un vector se obtiene utilizando el comando

>> size(nombre_vector)

3.1.1 VECTORES COLUMNA

En general, se introducen como los vectores fila, separando las filas por un punto y coma:

>> b=[0;1;-5]

b=

M Cristina Naya Riveiro 53


Curso de iniciacin a MATLAB

-5

v transpone el vector v (el transpuesto de un vector fila es un vector columna).

3.1.3 OPERACIONES ENTRE VECTOR Y ESCALAR

Las operaciones entre escalares y vectores son directas. Desde el punto de vista terico, no se
puede sumar un escalar a un vector. Sin embargo, MATLAB si lo permite. Por ejemplo, si y es
un vector, el comando y+2 aadir 2 a cada componente del vector.

Es decir, dado un vector v y un nmero real k:

v+k: suma k a cada componente de v.


v-k: resta k a cada componente de v.
v*k o k*v: multiplica por k cada componente de v.
v/k: divide por k cada componente de v.
k./v: divide k por cada componente de v.
v.^k es un nuevo vector donde cada componente se obtiene al elevar a k la
correspondiente de v.
k.^v: es un vector cuya componente i-sima se obtiene al elevar k a la i-sima
componente de v.

El . Indica que trabajaremos con los vectores componente a componente, no en el sentido


usual del lgebra lineal.

Estdiense las salidas de los siguientes comandos.

>> y=1:5

>> y+2

>> y-2

>> 2*y

>> y/2

Por supuesto, estas operaciones son igualmente vlidas para vectores columna.

>> w=(1:3:20)

>> w+3

>> w-11

>> .1*w

>> w/10

M Cristina Naya Riveiro 54


Curso de iniciacin a MATLAB

3.1.4 OPERACIONES ENTRE VECTORES

En primer lugar, considrense los siguientes vectores.

>> a=1:3

>> b=4:6

La adicin y sustraccin de vectores es natural y fcil. Introdzcanse los siguientes comandos.

>> a,b,a+b

>> a,b,a-b

De nuevo, estas operaciones son vlidas para vectores columna.

>> a=(1:3),b=(4:6)

>> a+b,a-b

Producto escalar de vectores *: si v es un vector fila, w un vector columna y ambos tienen la


misma dimensin, entonces admiten el comando v*w que calcula el producto escalar de
ambos.

3.1.5 OPERACIONES CON COMPONENTES.

Para multiplicar los vectores a y b componente a componente, ejectese el siguiente comando


de MATLAB.

>> a=(1:3),b=(4:6)

>> a,b,a.*b

El smbolo .* es el operador de MATLAB para la multiplicacin elemento a elemento. La salida


se calcula multiplicando las primeras componentes de los vectores a y b, a continuacin las
segundas componentes, etc. El operador de MATLAB para la divisin componente a
componente es ./

>> a,b,a./b

Para elevar cada componente de un vector a una potencia, sese .^

>> a,a.^2

3.1.6 EXPRESIONES MS COMPLICADAS.

Con un poco de prctica se aprender como evaluar expresiones ms complejas.


Supongamos, por ejemplo, para evaluar la expresin x2 2x 3 para valores de x entre 1 y 10,
con incremento de 1 escrbase

>> x=1:10

>> y=x.^2-2*x-3

Supngase ahora que se quiere evaluar la expresin sen(x)/x para valores de x entre 1 y 1

M Cristina Naya Riveiro 55


Curso de iniciacin a MATLAB

con incrementos de 0,1 unidades se hara:

>> x=-1:.1:1

>> y=sin(x)./x

Los operadores por componentes tambin funcionan con vectores columna.

>> xdata=(1:10)

>> xdata.^2

3.1.7 FUNCIONES DE MATLAB ESPECFICAS PARA VECTORES


Las funciones matemticas elementales admiten vectores como argumentos y se interpretan
componente a componente.

Algunas funciones especficas para vectores son:

sum(v) suma de las componentes del vector v,


prod(v) producto de las componentes del vector v,
dot(v,w) producto escalar de dos vectores del mismo tipo y las mismas dimensiones,
cross(v,w) producto vectorial de dos vectores del mismo tipo y dimensin,
max(v) mximo de las componentes del vector v (atencin: sin valor absoluto),
norm(v) norma eucldea del vector v,
norm(v,p) norma-p del vector v: sum(abs(v).^p)^(1/p),
norm(v,inf) norma infinito del vector v.

Las funciones MATLAB pueden devolver un nmero variable de resultados. Cuando una
funcin tiene, en su definicin, ms de un argumento de salida, puede ser utilizada de varias
formas. La funcin max nos proporciona un ejemplo:

- si, simplemente, utilizamos la funcin en la forma:

>> max(v)

MATLAB nos devolver el mximo valor de entre las componentes del vector v

- si la utilizamos en la forma:

>> [m,k]=max(v)

utilizando dos variables para almacenar la salida, en la variable m quedar almacenado el


mximo de las componentes, y en la variable k se guardar el valor del subndice de la
componente que produce el mximo.

Hay otras funciones que tambin pueden tener un nmero variable de argumentos de entrada:
por ejemplo la funcin norm tiene distinto comportamiento segn la llamemos con un solo
argumento (norm(v)) o con dos argumentos (norm(v,p)).

Si v es un vector fila (respectivamente columna) de componentes vi, entonces exp(v) es otro


vector fila (resp. columna) de componentes exp(vi).

>> v=[1,2,4,-5,0,-1];

>> sum(v)

M Cristina Naya Riveiro 56


Curso de iniciacin a MATLAB

ans =1

>> max(v)

ans =4

>> [m,k]=max(abs(v))

m =5

k =4

>> sqrt(sum(v.^2))

ans =6.8557

Prctica:
1.
Dadas las variables vectoriales a=(,2,3,4,5) y b=(e,2e,3e,4e,5e) calcular
c=sen a+b, d=cosh a, e=ln b, f=c*d, g=c/d, h=d2

Clculo de errores relativos

2. Supongamos que para resolver una ecuacin diferencial ordinaria hemos


utilizado:
Un mtodo analtico mediante el cual sabemos que su solucin en el
intervalo [0,1] es y(x)=x2+cos(x).
Un mtodo numrico para aproximar la solucin en el intervalo [0,1] con
parmetro de discretizacin 0.2, obteniendo la siguiente tabla de soluciones
aproximadas:

Calcular el mximo error relativo.

M Cristina Naya Riveiro 57


Curso de iniciacin a MATLAB

3.2 MATRICES

3.2.1 DEFINICIN DE MATRICES

Las matrices se definen de forma similar a los vectores, introduciendo sus filas como vectores
fila y separando unas filas de otras mediante punto y coma o saltos de lnea.

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

A=

123

456

789

Las componentes de una matriz se designan mediante los nmeros de sus subndices.

Un vector fila de dimensin n es en realidad una matriz de dimensin 1xn.

Un vector columna de dimensin m es en realidad una matriz de dimensin mx1.

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

>> A(1,3)

ans =

>> A(1,:) % primera fila de A

ans =

123

>> A(:,2) % segunda columna de A

ans =

>> A(1:2;2:3) % submatriz de A

ans =

23

56

M Cristina Naya Riveiro 58


Curso de iniciacin a MATLAB

3.2.2 OPERACIONES CON MATRICES

A+B suma de matrices


A-B diferencia de matrices
A*B producto de matrices (habitual)
A^2 producto de la matriz A por si misma
A\B A-1 B
A/B A B-1
A.*B producto componente a componente (aij bij)
A.^2 cuadrado componente a componente (aij ^2)
A./B divisin componente a componente (aij / bij)
A transpuesta de A (la adjunta si A es compleja)

3.2.3 FUNCIONES ESPECFICAS PARA MATRICES

Las matrices pueden tambin utilizarse como argumento de las funciones intrnsecas. Algunas
funciones especficas para manejo de matrices son:

diag(A) vector conteniendo la diagonal principal de la matriz A


diag(A,k) k-sima sub o super diagonal de A (segn sea k>0, k=0, k<0)
max(A) Vector conteniendo el valor mximo de las componentes de cada columna.
[y,k]=max(A) nos da, adems, la fila en la que se produce el mximo de cada columna
zeros(n,m) matriz nxm con todas sus componentes iguales a cero
zeros(n) dem nxn
ones(n,m) matriz nxm con todas sus componentes iguales a uno
ones(n) dem nxn
eye(n,m) matriz unidad: matriz nxm con diagonal principal =1 y el resto de las
componentes =0
diag(v) (donde v es un vector) matriz con la diagonal principal = v y ceros en el resto
diag(v,k) (donde v es un vector) dem con la k-sima diagonal=v y ceros en el resto

(Obsrvese la diferencia de comportamiento de la funcin diag, en funcin de que el


argumento de entrada sea una matriz o un vector). Por ejemplo:

>> diag([1,2,3,1])

ans =

1000

0200

0030

0001

>> eye(3,3)+diag([-1,-1],1)

ans =

1 -1 0

0 1 -1

M Cristina Naya Riveiro 59


Curso de iniciacin a MATLAB

001

Tambin se pueden definir matrices por bloques:

[A,B] es la matriz (A B)
[A;B] es la matriz (A B) transpuesta (columna)
[ ] representa la matriz vaca (0x0)
A(:,3)=[] elimina la tercera columna de la matriz A
A(1,:)=[] elimina la primera fila de A

Ejemplo

>> A=diag([1,2,3,4]); A(:,3)=[];

>> A

A=

100

020

000

004

>> A(1,:)=[]

A=

020

000

004

3.2.4 MATRICES DISPERSAS O HUECAS

Las matrices que tienen un gran nmero de elementos nulos se conocen como matrices
dispersas o huecas. MATLAB dispone de un sistema especial de almacenamiento y
manipulacin de matrices huecas.

La funcin

>> sparse(i,j,c,m,n)

dnde:

i , j son vectores de subndices, de la misma longitud


c es un vector de la misma longitud que los anteriores
n , m son nmeros naturales.

Esta funcin genera una matriz hueca de dimensin nxm, cuyos nicos elementos no nulos
son los de subndices (i(k),j(k)), de valor c(k)

Por ejemplo:

M Cristina Naya Riveiro 60


Curso de iniciacin a MATLAB

>> fil=[1,1,2,3,4];

>> col=[1,3,2,4,1];

>> val=[1,2,-1,3,4];

>> C=sparse(fil,col,val,4,4)

C=

(1,1) 1

(1,3) 2

(2,2) -1

(3,4) 3

(4,1) 4

full(A) Si A es una matriz en forma hueca, devuelve su forma estndar


[i,j,c]=find(A) Si A es una matriz (en forma hueca o no), devuelve los vectores i, j y c
correspondientes a su almacenamiento sparse.
sparse(A) Si A es una matriz en forma estndar, devuelve su forma esparse.

Las operaciones entre matrices pueden tambin realizarse entre matrices huecas.

Aqu C es la matriz del ejemplo anterior:

>> CS=full(C)

CS =

1020

0 -1 0 0

0003

4000

>> [i,j,c]=find(C)

i=

11234

j=

13241

c=

1 2 -1 3 4

>> sparse(CS)

ans=

M Cristina Naya Riveiro 61


Curso de iniciacin a MATLAB

(1,1) 1

(1,3) 2

(2,2) -1

(3,4) 3

(4,1) 4

Prctica:

Para un laboratorio se compran los materiales especificados en la tabla siguiente.

Utilizar matrices y el producto de vectores para calcular el coste de cada producto y el


total a pagar (la tabla de precios no incluye IVA, debiendo por tanto aplicarse un 21%
de incremento.

3.3 POLINOMIOS

Un polinomio de grado n se representa en MATLAB por un vector fila de dimensin n+1, cuya
componente i-sima es el coeficiente de xn-i+1; es decir, el vector se forma con los coeficientes
del polinomio ordenados en orden decreciente de la potencia de la variable. Todos los
coeficientes intermedios que sean nulos deben incluirse. Es decir, en MATLAB los polinomios
se identifican con el vector fila de sus coeficientes:

p=[3,5,0,1,2] representa el polinomio 3x4+5x3+x+2

roots(p) Calcula las races del polinomio p (es un vector columna y, en general, calcula
aproximaciones).
poly(raices) Si raices es un vector columna, devuelve el polinomio que tiene dichas
races. Se obtiene normalizado y puede ser de coeficientes complejos.
poly(A) Si A es una matriz cuadrada, es el polinomio caracterstico.
polyval(p,x) Calcula el valor del polinomio p en el punto x (x puede ser un vector.
conv(p1,p2) Producto de los polinomios p1 y p2.
deconv(p1,p2) Divisin de polinomios.
polyder(p) Derivada del polinomio p.
polyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que se ajusta a
los datos p(x(i)) ~= y(i), en el sentido de mnimo error cuadrtico medio.

M Cristina Naya Riveiro 62


Curso de iniciacin a MATLAB

Ejemplo:

>> p=[3,5,0,1,2];polival(p,0)

ans =

>> raices=roots(p)

raices =

-1.6394

0.3716 + 0.6243 i

0.3716 - 0.6243 i

-0.7704

>> poly(CS) % CS es la del ejemplo de la pgina anterior

ans=

1 0 -1 -24 -24

>> polyder(p)

ans =

12 15 0 1

Prctica:
x3 + x 2 + 1
Descomponer en fracciones simples el cociente
x 3 3x 2 + 4

x3 + x 2 + 1 35 13 1
= + + +1
x 3x + 4 9( x 2) 3( x 2) 9( x + 1)
3 2 2

3.4 SISTEMAS DE ECUACIONES LINEALES

Dado un sistema algebraico de ecuaciones lineales de la forma Ax=b, lo resolveremos


utilizando mtodos clsicos, y tambin, funciones propias de MATLAB. De este modo
enumeramos a continuacin algunas funciones de MATLAB cuyo argumento son matrices, que
simplifican considerablemente la resolucin analtica de sistemas lineales y de ecuaciones
diferenciales ordinarias con coeficientes constantes:

det(A) Calcula el determinante de la matriz A.


inv(A) Calcula la inversa de la matriz cuadrada A.
rank(A) Calcula el rango de la matriz A.

M Cristina Naya Riveiro 63


Curso de iniciacin a MATLAB

En particular, si deseamos saber si un sistema Ax=b es compatible podemos


comprobar si el rango de la matriz de coeficientes y el de la ampliada coinciden; para
ello ejecutamos las sentencias
>>rank(A)-rank([A,b])
cond(A) Nmero de condicin de la matriz A. Este nmero indica cun sensible es la
solucin de un problema respecto de pequeos cambios relativos en los datos de
entrada. Si el nmero de condicin est prximo a la unidad, la matriz se dice bien
condicionada; en este caso pequeas perturbaciones en los datos, o lo que es lo
mismo en el segundo miembro del sistema, slo ocasionarn pequeas modificaciones
en la solucin. En cambio, si el nmero de condicin es grande, entonces A es mal
condicionada y cualquier solucin numrica del sistema Ax=b debe examinarse con
precaucin.
A\b Calcula la solucin del sistema lineal Ax=b. Previamente a los clculos, MATLAB
realiza un anlisis de la matriz A para decidir cul es el mtodo ms adecuado:
triangular, Cholesky, LU, QR, Gauss, etc., y adems lleva a cabo un pre-ordenamiento
si A es hueca.
eig(A) calcula los autovalores o valores propios de una matriz cuadrada A, cuyo
resultado se almacena en un vector columna.
[V,D]=eig(A) almacena en cada columna de la matriz V los autovectores de la matriz A,
los autovalores se guardan en la matriz diagonal D.

Prctica:
6 18 2
1. Se considera la matriz A= 7
2 4

4 10 6

2. Calcular el determinante de la matriz A. Resolver el sistema siendo b un vector


columna igual a (1 2 3).

3. Ver qu ocurre cuando se cambia el elemento a13 por -10.

3.5 OTROS TIPOS DE DATOS

MATLAB puede tambin trabajar con otros tipos de datos:

1. Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de


programacin.
2. Hipermatrices, o matrices de ms de dos dimensiones.
3. Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza
diferente.
4. Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos
elementos pueden ser cualquier otro tipo de dato.

3.5.1 CADENAS DE CARACTERES

Los caracteres de una cadena se almacenan en un vector, con un carcter por elemento. Cada
carcter ocupa dos bytes. Las cadenas de caracteres van entre apstrofos o comillas simples,
como por ejemplo: 'cadena'. Si la cadena debe contener comillas, stas se representan por un

M Cristina Naya Riveiro 64


Curso de iniciacin a MATLAB

doble carcter comilla, de modo que se pueden distinguir fcilmente del principio y final de la
cadena. Por ejemplo, para escribir la cadena ni idea' se escribira ni idea.

Una matriz de caracteres es una matriz cuyos elementos son caracteres, o bien una matriz
cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener
el mismo nmero de elementos. Si es preciso, las cadenas (filas) ms cortas se completan con
blancos.

A continuacin se pueden ver algunos ejemplos y practicar con ellos:

>> c='cadena'

c=

cadena

>> size(c) % dimensiones del array

ans =

1 6

>> double(c) % convierte en nmeros ASCII cada carcter

ans =

99 97 100 101 110 97

>> char(abs(c)) % convierte nmeros ASCII en caracteres

ans =

cadena

>> cc=char('ms','madera') % convierte dos cadenas en una matriz

cc =

ms

madera

>> size(cc) % se han aadido tres espacios a 'ms'

ans =

2 6

Las funciones ms importantes para manejo de cadenas de caracteres son las siguientes:

double(c) convierte en nmeros ASCII cada carcter,


char(v) convierte un vector de nmeros v en una cadena de caracteres,
char(c1,c2) crea una matriz de caracteres, completando con blancos las cadenas ms
cortas,
deblank(c) elimina los blancos al final de una cadena de caracteres,
disp(c) imprime el texto contenido en la variable c,
ischar(c) detecta si una variable es una cadena de caracteres,

M Cristina Naya Riveiro 65


Curso de iniciacin a MATLAB

isletter() detecta si un carcter es una letra del alfabeto. Si se le pasa un vector o matriz
de caracteres devuelve un vector o matriz de unos y ceros,
isspace() detecta si un carcter es un espacio en blanco. Si se le pasa un vector o
matriz de caracteres devuelve un vector o matriz de unos y ceros,
strcmp(c1,c2) comparacin de cadenas. Si las cadenas son iguales devuelve un uno, y
si no lo son, devuelve un cero,
strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y
minsculas,
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara
dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros,
s=[s,' y ms'] concatena cadenas, aadiendo la segunda a continuacin de la primera,
findstr(c1,c2) devuelve un vector con las posiciones iniciales de todas las veces en que
la cadena ms corta aparece en la ms larga,
strmatch(cc,c) devuelve los ndices de todos los elementos de la matriz de caracteres
(o vector de celdas) cc, que empiezan por la cadena c,
strrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en c1
[p,r]=strtok(t) separa las palabras de una cadena de caracteres t. Devuelve la primera
palabra p y el resto de la cadena r,
int2str(v) convierte un nmero entero en cadena de caracteres,
num2str(x,n) convierte un nmero real x en su expresin por medio de una cadena de
caracteres, con cuatro cifras decimales por defecto (pueden especificarse ms cifras,
con un argumento opcional n),
str2double(str) convierte una cadena de caracteres representando un nmero real en el
nmero real correspondiente,
vc=cellstr(cc) convierte una matriz de caracteres cc en un vector de celdas vc,
eliminando los blancos adicionales al final de cada cadena. La funcin char() realiza las
conversiones opuestas,
sprintf convierte valores numricos en cadenas de caracteres.

Con las funciones anteriores se dispone en MATLAB de una amplia gama de posibilidades
para trabajar con cadenas de caracteres.

A continuacin se pueden ver algunos ejemplos:

>> num2str(pi) % el resultado es una cadena de caracteres, no un nmero

ans =3.142

>> num2str(pi,8)

ans =3.1415927

Es habitual convertir los valores numricos en cadenas de caracteres para poder imprimirlos
como ttulos en los dibujos o grficos. Vase el siguiente ejemplo:

>> fahr=70; grd=(fahr-32)/1.8;

>> title(['Temperatura ambiente: ',num2str(grd),' grados centgrados'])

M Cristina Naya Riveiro 66


Curso de iniciacin a MATLAB

3.5.2 HIPERMATRICES

Son arrays de ms de dos dimensiones, es decir con matrices de ms de dos dimensiones (por
ejemplo, ver en la figura una hipermatriz de tres dimensiones).

Una posible aplicacin es almacenar con un nico nombre distintas matrices del mismo tamao
(resulta una hipermatriz de 3 dimensiones). Los elementos de una hipermatriz pueden ser
nmeros, caracteres, estructuras, y vectores o matrices de celdas. El tercer subndice
representa la tercera dimensin: la profundidad de la hipermatriz.

3.5.2.1 DEFINICIN DE HIPERMATRICES

Las funciones para trabajar con estas hipermatrices estn en el subdirectorio


toolbox\MATLAB\datatypes. Las funciones que operan con matrices de ms de dos
dimensiones son anlogas a las funciones vistas previamente, aunque con algunas diferencias.
Por ejemplo, las siguientes sentencias generan, en dos pasos, una matriz de 232:

>> AA(:,:,1)=[1 2 3; 4 5 6] % matriz inicial

AA =

123

456

>> AA(:,:,2)=[2 3 4; 5 6 7] % se aade una segunda matriz

AA(:,:,1) =

123

456

AA(:,:,2) =

234

M Cristina Naya Riveiro 67


Curso de iniciacin a MATLAB

567

3.5.2.2 FUNCIONES QUE TRABAJAN CON HIPERMATRICES

Algunas funciones de MATLAB para generar matrices admiten ms de dos subndices y


pueden ser utilizadas para generar hipermatrices. Entre ellas estn rand(), randn(), zeros() y
ones(). Por ejemplo, vase la siguiente sentencia y su resultado:

>> BB=randn(2,3,2)

BB(:,:,1) =

-0.4326 0.1253 -1.1465

-1.6656 0.2877 1.1909

BB(:,:,2) =

1.1892 0.3273 -0.1867

-0.0376 0.1746 0.7258

La funcin cat() permite concatenar matrices segn las distintas dimensiones, como puede
verse en el siguiente ejemplo:

>> A=zeros(2,3); B=ones(2,3);

A(i,j,k)

>> cat(1,A,B)

ans =

000

000

111

111

>> cat(2,A,B)

ans =

000111

000111

>> cat(3,A,B)

M Cristina Naya Riveiro 68


Curso de iniciacin a MATLAB

ans(:,:,1) =

000

000

ans(:,:,2) =

111

111

Las siguientes funciones de MATLAB se pueden emplear tambin con hipermatrices:

size() devuelve tres o ms valores (el n de elementos en cada dimensin),


ndims() devuelve el nmero de dimensiones,
squeeze() elimina las dimensiones que son igual a uno,
reshape() distribuye el mismo nmero de elementos en una matriz con distinta forma o
con distintas dimensiones,
permute(A,v) permuta las dimensiones de A segn los ndices del vector v,
ipermute(A,v) realiza la permutacin inversa.

Respecto al resto de las funciones de MATLAB, se pueden establecer las siguientes reglas
para su aplicacin a hipermatrices:

1. Todas las funciones de MATLAB que operan sobre escalares (sin(), cos(), etc.) se
aplican sobre hipermatrices elemento a elemento (igual que sobre vectores y matrices).
Las operaciones con escalares tambin se aplican de la misma manera.
2. Las funciones que operan sobre vectores (sum(), max(), etc.) se aplican a matrices e
hipermatrices segn la primera dimensin, resultando un array de una dimensin
inferior.
3. Las funciones matriciales propias del lgebra Lineal (det(), inv(), etc.) no se pueden
aplicar a hipermatrices. Para poderlas aplicar hay que extraer primero las matrices
correspondientes (por ejemplo, con el operador dos puntos (:)).

3.5.3 ESTRUCTURAS

Una estructura (struct) es una agrupacin de datos de tipo diferente bajo un mismo nombre.
Estos datos se llaman miembros (members) o campos (fields). Una estructura es un nuevo tipo
de dato, del que luego se pueden crear muchas variables (objetos o instances). Por ejemplo, la
estructura alumno puede contener los campos nombre (una cadena de caracteres) y carnet (un
nmero).

3.5.3.1 CREACIN DE ESTRUCTURAS

En MATLAB la estructura alumno se crea creando un objeto de dicha estructura. A diferencia


de otros lenguajes de programacin, no hace falta definir previamente el modelo o patrn de la
estructura.

Una posible forma de hacerlo es crear uno a uno los distintos campos, como en el ejemplo
siguiente:

M Cristina Naya Riveiro 69


Curso de iniciacin a MATLAB

>> alu.nombre='Miguel'

alu =

nombre: 'Miguel'

>> alu.carnet=75482

alu =

nombre: 'Miguel'

carnet: 75482

>> alu

alu =

nombre: 'Miguel'

carnet: 75482

Se accede a los miembros o campos de una estructura por medio del operador punto (.), que
une el nombre de la estructura y el nombre del campo (por ejemplo: alu.nombre).

Tambin puede crearse la estructura por medio de la funcin struct(), como por ejemplo,

>> al = struct('nombre', 'Ignacio', 'carnet', 76589)

al =

nombre: 'Ignacio'

carnet: 76589

Los nombres de los campos se pasan a la funcin struct() entre apstrofos ('), seguidos del
valor que se les quiere dar. Este valor puede ser la cadena vaca ('') o la matriz vaca ([]).

Pueden crearse vectores y matrices (e hipermatrices) de estructuras. Por ejemplo, la sentencia,


>> alum(10) = struct('nombre', 'Ignacio', 'carnet', 76589)

crea un vector de 10 elementos cada uno de los cuales es una estructura tipo alumno. Slo el
elemento 10 del vector es inicializado con los argumentos de la funcin struct(); el resto de los
campos se inicializan con una cadena vaca o una matriz vaca 4. Para dar valor a los campos
de los elementos restantes se puede utilizar un bucle for con sentencias del tipo:

>> alum(i).nombre='Noelia', alum(i).carnet=77524;

MATLAB permite aadir un nuevo campo a una estructura en cualquier momento. La siguiente
sentencia aade el campo edad a todos los elementos del vector alum, aunque slo se da valor
al campo del elemento 5:

>> alum(5).edad=18;

Para ver el campo edad en los 10 elementos del vector puede teclearse el comando:

4
Esta forma de crear arrays de estructuras da error si la estructura ha sido previamente
declarada global.

M Cristina Naya Riveiro 70


Curso de iniciacin a MATLAB

>> alum.edad

3.5.3.2. FUNCIONES PARA OPERAR CON ESTRUCTURAS

Las estructuras de MATLAB disponen de funciones que facilitan su uso. Algunas de estas
funciones son las siguientes:

fieldnames() devuelve un vector de celdas con cadenas de caracteres que recogen los
nombres de los campos de una estructura,
isfield(ST,s) permite saber si la cadena s es un campo de una estructura ST,
isstruct(ST) permite saber si ST es o no una estructura,
rmfield(ST,s) elimina el campo s de la estructura ST,
getfield(ST,s) devuelve el valor del campo especificado. Si la estructura es un array hay
que pasarle los ndices como cell array (entre llaves {}) como segundo argumento,
setfield(ST,s,v) da el valor v al campo s de la estructura ST. Si la estructura es un
array, hay que pasarle los ndices como cell array (entre llaves {}) como segundo
argumento.

MATLAB permite definir estructuras anidadas, es decir una estructura con campos que sean
otras estructuras. Para acceder a los campos de la estructura ms interna se utiliza dos veces
el operado punto (.), como puede verse en el siguiente ejemplo, en el que la estructura clase
contiene un campo que es un vector alum de alumnos:

>> clase=struct('curso','primero','grupo','A', ...

'alum', struct('nombre','Juan', 'edad', 19))

clase =

curso: 'primero'

grupo: 'A'

alum: [1x1 struct]

>> clase.alum(2).nombre='Mara';

>> clase.alum(2).edad=17;

>> clase.alum(2)

ans =

nombre: 'Mara'

edad: 17

>> clase.alum(1)

ans =

nombre: 'Juan'

edad: 19

M Cristina Naya Riveiro 71


Curso de iniciacin a MATLAB

Las estructuras se generalizan con las clases y los objetos, que no se vern en este manual.

3.5.4. VECTORES O MATRICES DE CELDAS (CELL ARRAYS)

Un vector (matriz o hipermatriz) de celdas es un vector (matriz o hipermatriz) cuyos elementos


son cada uno de ellos una variable de tipo cualquiera. En un array ordinario todos sus
elementos son nmeros o cadenas de caracteres. Sin embargo, en un array de celdas, el
primer elemento puede ser un nmero; el segundo una matriz; el tercero una cadena de
caracteres; el cuarto una estructura, etc.

3.5.4.1 CREACIN DE VECTORES Y MATRICES DE CELDAS

Obsrvese por ejemplo cmo se crea, utilizando llaves {}, el siguiente vector de celdas,

>> vc(1)={[1 2 3]}

vc =

[1x3 double]

>> vc(2)={'mi nombre'}

vc =

[1x3 double] 'mi nombre'

>> vc(3)={rand(3,3)}

vc =

[1x3 double] 'mi nombre' [3x3 double]

Es importante que el nombre del vector de celdas vc no haya sido utilizado previamente para
otra variable (si as fuera, se obtendra un error). Si es preciso se utiliza el comando clear.

Obsrvese que para crear un vector de celdas los valores asignados a cada elemento se han
definido entre llaves {...}.

Otra nomenclatura alternativa y similar, que tambin utiliza llaves, es la que se muestra a
continuacin:

>> vb{1}=[1 2 3]

vb =

[1x3 double]

>> vb{2}='mi nombre'

vb =

[1x3 double] 'mi nombre'

>> vb{3}=rand(3,3)

vb =

M Cristina Naya Riveiro 72


Curso de iniciacin a MATLAB

[1x3 double] 'mi nombre' [3x3 double]

y tambin es posible crear el vector de celdas en una sola operacin en la forma:

vcc = {[1 2 3], 'mi nombre', rand(3,3)}

3.5.4.2 FUNCIONES PARA TRABAJAR CON VECTORES Y MATRICES DE


CELDAS

MATLAB dispone de las siguientes funciones para trabajar con cell arrays:

cell(m,n) crea un cell array vaco de m filas y n columnas,


celldisp(ca) muestra el contenido de todas las celdas de ca,
cellplot(ca) muestra una representacin grfica de las distintas celdas,
iscell(ca) indica si ca es un vector de celdas,
num2cell() convierte un array numrico en un cell array,
cell2struct() convierte un cell array en una estructura,
struct2cell() convierte una estructura en un cell array.

3.5.4.3 CONVERSIN ENTRE ESTRUCTURAS Y VECTORES DE CELDAS

El siguiente ejemplo convierte el cell array vcc creado previamente en una estructura ST cuyos
campos se pasan como argumentos a la funcin cell2struct(). El tercer argumento (un 2) indica
que es la segunda dimensin del cell array (las columnas) la que va a dar origen a los campos
de la estructura.

Con posterioridad la estructura ST se convierte en un nuevo cell array llamado vbb,

>> ST=cell2struct(vb,{'vector','cadena','matriz'},2)

ST =

vector: [1 2 3]

cadena: 'mi nombre'

matriz: [3x3 double]

>> vbb = struct2cell(ST)' % hay que transponer para obtener una fila

vbb =

[1x3 double] 'mi nombre' [3x3 double]

La gran ventaja de las estructuras y los arrays de celdas es que proporcionan una gran
flexibilidad para el almacenamiento de los ms diversos tipos de informacin. El inconveniente
es que se pierde parte de la eficiencia que MATLAB tiene trabajando con vectores y matrices.

M Cristina Naya Riveiro 73


Curso de iniciacin a MATLAB

4. GRFICOS CON MATLAB

4.1 REPRESENTACIN GRFICA DE FUNCIONES DEFINIDAS POR UNA


FRMULA

Los comandos que se presentan en este apartado son funciones MATLAB fciles de usar
(easy-touse) para representar grficamente, de forma rpida, funciones definidas por una
expresin matemtica. Tienen slo un pequeo nmero de parmetros que se pueden
especificar. Todas ellas hacen uso de otras funciones MATLAB que disponen de un nmero
superior de opciones y parmetros que podemos modificar. Cuando se necesite hacer grficas
de funciones que no vienen definidas por una frmula (definidas a trozos, definidas a travs de
programas o por sus valores en un nmero finito de puntos, ) habr que recurrir a dichas
funciones ms generales.

4.1.1 CURVAS PLANAS

El comando ms fcil de usar de que dispone MATLAB para dibujar curvas planas definidas
por una frmula matemtica (no por un conjunto de valores) es el comando ezplot, que puede
ser usado de varias formas.

ezplot(f) donde f es una cadena de caracteres


conteniendo la expresin de una funcin y=f(x) dibuja
la funcin y=f(x) para x en el intervalo [-2,2]

Ejemplo:

>> ezplot('2*sin(x/2)*cos(3*x)')

Tambin puede utilizarse el comando fplot(funcion,


[xo,x1], opcin), que representa la funcin dada en el
intervalo [xo,x1], con la opcin elegida. Adems
tambin acta sobre una funcin f definida en un fichero m-fichero. Si queremos
representar la funcin definida en sol.m, escribimos:

>>f=sol;

>>fplot(f,[0 2*pi], --)

Y se obtiene la grfica de la funcin definida en sol.m en el intervalo [0,2], con trazo


discontinuo.

Podemos construir un nico polgono dando los vrtices y usando el comando


fill(x,y.opcin), que lo colorea segn se
especifique en opcin. Construir varios polgonos:

fill(x1,y1.opcin1, x2,y2.opcin2, ),

ezplot(f,[a,b]) lo mismo que la anterior para x


variando en el intervalo [a,b]

Ejemplo:

>> ezplot('2*sin(x/2)*cos(3*x)',[0,pi/2])

M Cristina Naya Riveiro 74


Curso de iniciacin a MATLAB

ezplot(f), ezplot(f,[a,b]) si f es una expresin de


(x,y), dibuja la curva implcitamente definida por
f(x,y)=0, para x e y variando en el intervalo [-
2,2] en el primer caso y para x e y variando en
el intervalo [a,b] en el segundo caso.
Ejemplo:
>> ezplot('x^2*y-1')

ezplot(x,y), ezplot(x,y,[a,b]) donde x e y son dos


cadenas de caracteres conteniendo las
expresiones de dos funciones x(t) e y(t) dibuja la
curva de ecuaciones paramtricas x=x(t) y=y(t)
para t en el intervalo [0,2], en el primer caso y
para t en el intervalo [a,b] en el segundo
Ejemplo:
>> ezplot('sin(3*t)','cos(t)')

ezpolar(f), ezpolar(f,[a,b]) donde f es una cadena


de caracteres conteniendo la expresin de una
funcin f() dibuja la curva definida en
coordenadas polares por = f() para variando
en el intervalo [0,2], en el primer caso y en el
intervalo [a,b] en el segundo
Ejemplo:
>> ezpolar('sin(2*t)*cos(3*t)',[0,pi])

Prctica:

Representar las funciones:

y1= sin(3 x)/ex

y2=cos(3 x)/ex

con x variando entre 0 y 3


,obteniendo una nica figura con
la forma que muestra la imagen:

M Cristina Naya Riveiro 75


Curso de iniciacin a MATLAB

4.1.2 CURVAS EN EL ESPACIO

Para dibujar curvas en el espacio tridimensional, MATLAB dispone del comando ezplot3:
ezplot3(x,y,z), ezplot3(x,y,z,[a,b]) donde x , y , z son tres cadenas de caracteres conteniendo
las expresiones de tres funciones x(t) , y(t) , z(t) dibuja la curva de ecuaciones paramtricas
x=x(t) y=y(t) z=z(t) para t en el intervalo [0,2], en el
primer caso y para t en el intervalo [a,b] en el segundo
caso.
Ejemplo:
>> ezplot3('3*cos(t)','t*sin(t^2)','sqrt(t)')

4.1.3 SUPERFICIES

ezmesh(f), ezmesh(f,[a,b]), ezmesh(f,[a,b,c,d]) donde f


es una expresin de dos variables dibuja la superficie
z=f(x,y) para (x,y) variando en el cuadrado [-,]x[-,]
en el primer caso, en el cuadrado [a,b]x[a,b] en el
segundo, y en el rectngulo [a,b]x[c,d] en el tercer caso.
El mtodo de dibujo es una malla con segmentos
coloreados, en funcin de los valores en los extremos.
Ejemplo:
>> ezmesh('x*exp(-x^2 - y^2)')

ezmesh(x,y,z), ezmesh(x,y,z,[a,b]),
ezmesh(x,y,z,[a,b,c,d]) donde x, y, z son expresiones de
funciones de dos variables dibuja la superficie de
coordenadas paramtricas x=x(s,t) y=y(s,t) z=z(s,t)
para (s,t) variando en el cuadrado [-2,2]x[-2,2] en
el primer caso, en el cuadrado [a,b]x[a,b] en el
segundo, y en el rectngulo [a,b]x[c,d] en el tercer caso
Ejemplo:
>> ezmesh('s*cos(t)','s*sin(t)','t',[- pi,pi])

ezmesh(... , circ) en cualquiera de los usos anteriores,


dibuja la funcin correspondiente sobre un crculo
centrado en el origen.
Ejemplo:
>> ezmesh('x*exp(-x^2 - y^2)','circ')

ezcontour(f), ezcontour(f,[a,b]), ezcontour(f,[a,b,c,d])


dibuja las lneas de nivel (isovalores) de la funcin

M Cristina Naya Riveiro 76


Curso de iniciacin a MATLAB

z=f(x,y).
Ejemplo:
>> ezcontour('x*exp(-x^2 - y^2)')

ezcontourf(. . . ) hace lo mismo que ezcontour, pero


rellenando con un color slido las distintas zonas
determinadas por las lneas de nivel.
Ejemplo:
>> ezcontourf('x*exp(-x^2 - y^2)')

ezmeshc(f) con los mismos argumentos que ezmesh,


dibuja simultneamente las lneas de nivel y la superficie.
Ejemplo:
>> ezmeshc('sin(u/2)*sin(v/2)')

ezsurf(f) dibuja una superficie coloreada z=f(x,y). Sus


argumentos son como en ezmesh.
Ejemplo:
>> ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)')

M Cristina Naya Riveiro 77


Curso de iniciacin a MATLAB

ezsurfc(f) como la anterior pero, adems, dibuja las


lneas de nivel.
Ejemplo:
>>ezsurfc('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)')

4.2 VENTANA GRFICA DE MATLAB

4.3 ALGUNOS COMANDOS GRFICOS AUXILIARES

Vamos a ver algunos comandos que modifican el aspecto de un grfico. Veremos su efecto
sobre la grfica. No se exponen todas las posibilidades de estos comandos. Utilizando el help
de MATLAB, se pueden ver el resto de las opciones.

Dado el grfico siguiente, veremos cmo vara segn las diferentes opciones que aadamos:

M Cristina Naya Riveiro 78


Curso de iniciacin a MATLAB

grid on / grid off aade / elimina las cuadrculas sobre los ejes actuales.

xlabel(texto para el eje x)


ylabel(texto para el eje y)
zlabel(texto para el eje z)

title(Ttulo de la grfica)

axis on / axis off: activa / desactiva todos los etiquetados de los ejes.

axis([x1,x2,y1,y2,z1,z2]) determina los lmites de la grfica. En grficos bidimensionales


no se incluyen z1, z2.
axis auto impone los lmites establecidos por defecto por MATLAB ([-10,10,-10,10,-
0.5,1])
Ejemplo:
axis([-10,10,-10,10,0,4])

M Cristina Naya Riveiro 79


Curso de iniciacin a MATLAB

axis equal determina los mismos factores de escala para todos los ejes

view(r,e) en las grficas tridimensionales permite cambiar el punto de observacin del


objeto representado. Los valores por defecto son r=-37.5, e=30.
>> view(10,50)

shading determina la forma de utilizar los colores de las superficies coloreadas.


shading flat la funcin color es constante a trozos (en cada segmento o panel).
shading interp la funcin color es bilineal a trozos (en cada segmento o panel).
shading faceted (es la opcin por defecto) la funcin color es constante a trozos (como
en flat), pero adems se superpone el dibujo de la malla con los segmentos en negro.

hold on

M Cristina Naya Riveiro 80


Curso de iniciacin a MATLAB

...
hold off
Todas las rdenes de dibujo entre ambos comandos se ejecutan sobre la misma
ventana grfica, sin borrar lo anterior.

figure
figure(h)
Crea una nueva ventana grfica, la activa y la trae al frente, delante de todas las
ventanas abiertas.
En el primer caso le asigna un nmero de forma automtica.
En el segundo caso le asigna el nmero h, es decir, el nombre Figure No. h

gcf Devuelve el nmero de la ventana grfica activa en ese momento.


shg Trae la ventana grfica activa al frente de todas.
clf Borra la figura de la ventana grfica activa. No cierra la ventana; slo borra su
contenido.
close
close(h)
Cierra la ventana grfica activa, en el primer caso, o la de nmero h, en el segundo.

subplot(m,n,p) Este comando permite dividir la ventana grfica en una matriz mxn de
subventanas grficas, activando para dibujar la p-sima de ellas. Ver ejemplo siguiente:
>> subplot(2,2,1); ezcontour('x*exp(-x^2 - y^2)');

>> subplot(2,2,2); ezmeshc('sin(u/2)*sin(v/2)');

>> subplot(2,2,3); ezmesh('x*exp(-x^2 - y^2)');

M Cristina Naya Riveiro 81


Curso de iniciacin a MATLAB

>> subplot(2,2,4); ezplot('sin(3*x)');

4.4 LOS COMANDOS BSICOS DE DIBUJO 2D Y 3D

Vemos aqu los comandos ms completos de que dispone MATLAB para dibujar curvas planas
y en el espacio, superficies, lneas de nivel, etc.
plot(x,y) Si x e y son dos vectores de la misma dimensin, n, dibuja una curva (lineal a trozos)
que pasa por los puntos (xi , yi), i=1, n. Es decir, reproduce la grfica de las componentes de
un vector frente a las componentes de otro vector, y para ello ambos vectores deben tener la
misma dimensin.
Ejemplo:
>> x=0:pi/100:4*pi; y=sin(x).*cos(x/3);
>> plot(x,y)

plot(x1,y1,x2,y2) Dibuja las dos curvas (x1i , y1i), i=1, n1 y (x2i , y2i), i=1, n2 en la misma
ventana y en los mismos ejes.
Ejemplo:
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3); z=sin(x).*cos(x/2);
>> plot(x,y,x,z)

plot(x,A) donde x es un vector columna (resp. fila) y A es una matriz, dibuja tantas curvas (xi ,
Aij), i=1, n (como columnas (resp. filas) tenga la matriz A.

Ejemplo:
>> x=0:pi/100:4*pi;
>> A=[sin(x);sin(x/2);sin(x/3);sin(x/4)];

M Cristina Naya Riveiro 82


Curso de iniciacin a MATLAB

>> plot(x,A)

El comando plot asigna, por defecto, determinados colores a las grficas. Estos colores, as
como el tipo de lnea a utilizar para dibujar (continua, de puntos, con marcadores, etc.) se
pueden modificar.
plot(x,y,param) donde param es una cadena de caracteres como mximo, cada uno a elegir de
una de las columnas siguientes:
b amarillo. asteriscos - lnea slida,
b azul. puntos - lnea slida,
g verde o crculo : linea de puntos,
r rojo x aspas -. punto-guin,
c cyan + cruces guiones,
m magenta * asteriscos,
y amarillos s square,
k negro d diamantes,
v tringulo,s
etc. (para ms informacin se puede consultar help plot).

Ejemplo:
>> x=0:pi/100:4*pi; y=sin(x).*cos(x/3);
>> plot(x,y,r*)

plot3(x,y,z), plot3(x,y,z,param). Si x , y , z son tres vectores de la misma dimensin, n, dibuja


una curva tridimensional (lineal a trozos) que pasa por los puntos (xi , yi , zi), i=1, n.

Ejemplo:
>> alpha=0:pi/80:8*pi; z=alpha/8;
>> x=z/(8*pi)+z.*cos(alpha);
>> y=z/(8*pi)+z.*sin(alpha);

M Cristina Naya Riveiro 83


Curso de iniciacin a MATLAB

>> plot3(x,y,z)

meshgrid(xp,yp), mesh(x,y,z), meshc(x,y,z) Representa una superficie z=f(x,y) sobre una malla
rectangular. Los argumentos x , y , z son matrices de la misma dimensin conteniendo,
respectivamente, las coordenadas x , y , z de los nodos de la malla. Los segmentos de la malla
se colorean segn los valores de la funcin (coordenada z).
La funcin meshc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY.
La funcion meshgrid sirve para construir la malla de base, en el plano XY.
Si xp es una particin del intervalo [x0,x1] e yp es una particin del intervalo [y0,y1], entonces
>> [x,y]=meshgrid(xp,yp)
construye dos matrices, x e y, que definen una malla del rectngulo [x0,x1]x[y0,y1]. . La matriz
x contiene las coordenadas X de los puntos de la malla y la matriz y sus coordenadas Y.

Ejemplo:
>> xp=linspace(pi/4,2*pi,50);
>> [x,y]=meshgrid(xp,xp);
>> z=(cos(x)./x).*(sin(y)./sqrt(y));
>> mesh(x,y,z)

surf(x,y,z) / surfc(x,y,z) / surfl(x,y,z) La funcin surf hace lo mismo que mesh, pero dibujando
los segmentos de la malla en color negro y rellenando los rectngulos de la malla de color,
segn los valores de la funcin.
La funcin surfc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY.
La funcion surfl hace lo mismo que surf, pero adems aade una fuente de luz lateral

M Cristina Naya Riveiro 84


Curso de iniciacin a MATLAB

contour(x,y,z,n)
contour3(x,y,z,n)
La funcin contour dibuja las proyecciones sobre el plano XY de las lneas de nivel
(isovalores)
La funcin contour3 dibuja las lneas de nivel sobre la misma superficie. En ambos casos n es
el nmero de lneas a dibujar. Se puede usar la funcin colorbar para aadir a la grfica una
barra con la graduacin de colores y la correspondencia con los valores de la funcin
representada. (Esta funcin puede ser usada con cualquier otra funcin grfica que utilice
colores).

colormap(m) permite cambiar el mapa de colores que se utiliza en la representacin. En


general, m es una matriz con tres columnas, de modo que la i-sima fila determina las
proporciones en la escala RGB, del i-simo color utilizado.
Para ms comodidad, MATLAB dispone de una serie de mapas de colores predefinidos, que se
pueden imponer mediante colormap(mapa), mapa puede tomar uno de los valores siguientes:
hsv - la escala por defecto (hue-saturation-value).
cool - Gama de colores entre cyan y magenta.
hot - Gama de colores entre rojo oscuro y amarillo.
gray - Gama de colores grises.
copper - Gama de colores cobrizos.
pink - Gama de colores rosados.
flag - Alterna rojo blanco azul - negro.
colorcube - Contraste de colores.
autumn - Colores entre el rojo y el amarillo.
spring - Colores entre el magenta y el amarillo.
winter - Colores entre el azul y el verde.
summer - Colores entre el verde y el amarillo.
...
para obtener ms informacin consultar help graph3d.

M Cristina Naya Riveiro 85


Curso de iniciacin a MATLAB

Prctica:

Ejecuta estos comandos y observa sus figuras.

M Cristina Naya Riveiro 86


Curso de iniciacin a MATLAB

5. INTRODUCCIN A LA PROGRAMACIN EN MATLAB.

Los programas o funciones de MATLAB se guardan en ficheros de nombre ****.m. Por esto nos
referimos a ellos como m-ficheros o ficheros-m. Son ficheros ASCII (de texto) que contienen
secuencias de comandos de MATLAB.

Para crear y modificar estos ficheros, la versin para Windows de MATLAB dispone de su
propio EDITOR (aunque puede usarse cualquier otro editor ASCII).

Existen dos tipos de ficheros ****.m :

los ficheros de comandos o scripts son ficheros que contienen un conjunto de


comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero en la
lnea de comandos.
las funciones. Son ficheros con una estructura especial, que definen funciones
anlogas a las de MATLAB. Con carcter general, una funcin recibe unos DATOS DE
ENTRADA, ejecuta unas RDENES y produce unos DATOS DE SALIDA.

La primera lnea de un fichero nombre.m que define una funcin debe tener la forma

function [variables de salida]=nombre(argumentos de entrada)

Los argumentos de entrada y las variables de salida, cuando hay varios, se separan por
comas. Puede no haber unos y otros. Si no hay argumentos de entrada, no es necesario poner
los parntesis. Si no hay variables de salida, no es necesario poner los corchetes ni el signo =

Si slo hay una variable de salida, no es necesario poner los corchetes.

5.1 SINTAXIS GENERAL

Las lneas que comienzan por el carcter % son lneas de comentario, es decir, son ignoradas
al ejecutar la funcin o script.

Las primeras lneas de comentario de un fichero ****.m pueden utilizarse para construir un help
del programa.

Si una expresin es demasiado larga, se puede continuar en la lnea siguiente, indicndolo por
tres puntos: ...

En los scripts y funciones conviene terminar cada lnea por punto y coma, ya que sino
aparecer un exceso de informacin en el terminal.

5.2 EJECUCIN DE LAS FUNCIONES Y SCRIPTS

Las funciones y los scripts pueden ser llamados desde la lnea de comandos y desde otro
fichero *.m.

Para ejecutar un script llamado program.m basta con teclear su nombre program (sin el punto
ni la m), siempre y cuando su localizacin forme parte del search path. La ejecucin del
programa termina cuando se llega a su ltima sentencia ejecutable. En cualquier punto del

M Cristina Naya Riveiro 87


Curso de iniciacin a MATLAB

programa se puede forzar el fin de la ejecucin mediante la instruccin return.

El nmero de argumentos de salida de una funcin no tiene que ser fijo. Puede depender de
cmo se llame a la funcin

Una funcin llamada funcionita.m se llama como el resto de funciones MATLAB: por su
nombre (sin el punto ni la m) y proporcionando los datos de entrada necesarios, a travs de
variables o de constantes.

Observacin: en un fichero *.m que contenga una funcin pueden incluirse subfunciones.
Son funciones con nombre diferente del nombre del fichero (y por tanto de la funcin principal),
y que slo son visibles para las funciones del mismo fichero.

Se comenzar viendo las bifurcaciones y bucles, y la lectura y escritura interactiva de variables,


que son los elementos bsicos de cualquier programa de una cierta complejidad.

5.3 BIFURCACIONES Y BUCLES

MATLAB posee un lenguaje de programacin que como cualquier otro lenguaje dispone de
sentencias para realizar bifurcaciones o estructuras de control condicionadas y bucles.

Las bifurcaciones o estructuras de control condicionadas permiten realizar una u otra


operacin segn se cumpla o no una determinada condicin. Es decir, permiten controlar
mediante una condicin si una parte de un programa se ejecuta o no.

Una condicin es una expresin que puede incluir operaciones aritmticas, relacionales y
lgicas, y cuyo resultado es un verdadero o falso lgico. Un ejemplo sencillo sera 2*a+1>0.

Para su evaluacin, se calcula el valor de 2*a+1; si es estrictamente positivo la condicin es


verdadera, en caso contrario la condicin es falsa. El estudio detallado de los operadores
relacionales y lgicos que pueden intervenir en la definicin de una condicin ser objeto del
siguiente apartado. La Figura 26 muestra tres posibles formas de bifurcacin.

Figura 26

M Cristina Naya Riveiro 88


Curso de iniciacin a MATLAB

Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos. En
MATLAB el cuerpo de estas sentencias de determina mediante la palabra end.

Figura 27

La Figura 27 muestra dos posibles formas de bucle, con el control situado al principio o al final
del mismo. Si el control est situado al comienzo del bucle es posible que las sentencias no se
ejecuten ninguna vez, por no haberse cumplido la condicin cuando se llega al bucle por
primera vez. Sin embargo, si la condicin est al final del bucle las sentencias se ejecutarn
por lo menos una vez, aunque la condicin no se cumpla. Muchos lenguajes de programacin
disponen de bucles con control al principio (for y while en C/C++/Java) y al final (do while
en C/C++/Java). En MATLAB no hay bucles con control al final del bucle, es decir, no existe
construccin anloga a do ... while.
Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de ficheros *.m.
Tambin se aplican con frecuencia en el uso interactivo de MATLAB.

5.3.1 SENTENCIA IF
En su forma ms simple, la sentencia if se escribe en la forma siguiente:
if condicion
sentencias
end
Si la condicin es:
verdadera se ejecutan los comandos entre if y end.
falsa se pasa el control de la ejecucin a la sentencia siguiente a la end.
Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones como
se desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opcin por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
donde la opcin por defecto else puede ser omitida: si no est presente no se hace nada en
caso de que no se cumpla ninguna de las condiciones que se han chequeado.
Una observacin muy importante: la condicin del if puede ser una condicin matricial, del tipo
A==B, donde A y B son matrices del mismo tamao. Para que se considere que la condicin
se cumple, es necesario que sean iguales dos a dos todos los elementos de las matrices A y B
(aij=bij, 1im, 1jn). Basta que haya dos elementos aij y bij diferentes para que las matrices ya

M Cristina Naya Riveiro 89


Curso de iniciacin a MATLAB

no sean iguales, y por tanto las sentencias del if no se ejecuten. Anlogamente, una condicin
en la forma A=B exige que todos los elementos sean diferentes dos a dos (aijbij, 1im,
1jn). Bastara que hubiera dos elementos aij y bij iguales para que la condicin no se
cumpliese. En resumen:
if A==B exige que todos los elementos sean iguales dos a dos
if A=B exige que todos los elementos sean diferentes dos a dos
Como se ha dicho, MATLAB dispone de funciones especiales para ayudar en el chequeo de
condiciones matriciales. Por ejemplo, la funcin isequal(A, B) devuelve un uno si las dos
matrices son idnticas y un cero en caso de que difieran en algo.

5.3.2 SENTENCIA SWITCH


La sentencia switch realiza una funcin anloga a un conjunto de if...elseif concatenados.
Permite realizar bifurcaciones en un programa atendiendo al resultado de una expresin. Su
forma general es la siguiente:
switch switch_expresion
case case_expr1,
bloque1
case {case_expr2, case_expr3, case_expr4,...}
bloque2
...
otherwise, % opcin por defecto
bloque3
end
Al principio se evala la switch_expresion, cuyo resultado debe ser un nmero escalar o una
cadena de caracteres. Este resultado se compara con las case_expr, y se ejecuta el bloque de
sentencias que corresponda con ese resultado. Si ninguno es igual a switch_expresion se
ejecutan las sentencias correspondientes a otherwise. Segn puede verse en el ejemplo
anterior, es posible agrupar varias condiciones dentro de unas llaves (constituyendo lo que se
llama un cell array o vector de celdas); basta la igualdad con cualquier elemento del cell array
para que se ejecute ese bloque de sentencias. La igualdad debe entenderse en el sentido del
operador de igualdad (==) para escalares y la funcin strcmp() para cadenas de caracteres).

5.3.3 SENTENCIA FOR


La sentencia for repite un conjunto de sentencias un nmero predeterminado de veces. La
estructura ms simple de los bucles tiene la siguiente estructura y la siguiente construccin
ejecuta sentencias con valores de i de 1 a n, variando de uno en uno:
for i=1:n
sentencias
end
o bien,
for i=vectorValores
sentencias
end
donde vectorValores es un vector con los distintos valores que tomar la variable i.
En el siguiente ejemplo se presenta el caso ms general para la variable del bucle
(valor_inicial: incremento: valor_final); el bucle se ejecuta por primera vez con i=n, y luego i se
va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso el bucle se
termina:
for i=n:-0.2:1
sentencias
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La
variable j es la que vara ms rpidamente (por cada valor de i, j toma todos sus posibles
valores):
for i=1:m
for j=1:n
sentencias
end

M Cristina Naya Riveiro 90


Curso de iniciacin a MATLAB

end
Una ltima forma de inters del bucle for es la siguiente (A es una matriz):
for i=A
sentencias
end
La variable i es un vector que va tomando en cada iteracin el valor de una de las columnas de
A. Cuando se introducen interactivamente en la lnea de comandos, los bucles for se ejecutan
slo despus de introducir la sentencia end que los completa.

5.3.4 SENTENCIA WHILE


La estructura del bucle while es la siguiente:
while condicion
sentencias
end
donde condicion puede ser una expresin vectorial o matricial. Las sentencias se siguen
ejecutando mientras haya elementos distintos de cero en condicion, es decir, mientras haya
algn o algunos elementos true. El bucle se termina cuando todos los elementos de condicion
son false (es decir, cero).

5.3.5 SENTENCIA BREAK


La sentencia break hace que se termine la ejecucin del bucle for y/o while ms interno de los
que comprenden a dicha sentencia.

5.3.6 SENTENCIA CONTINUE


La sentencia continue hace que se pase inmediatamente a la siguiente iteracin del bucle for
o while, saltando todas las sentencias que hay entre el continue y el fin del bucle en la
iteracin actual.

5.3.7 SENTENCIAS TRY...CATCH...END


La construccin try...catch...end permite gestionar los errores que se pueden producir en
tiempo de ejecucin. Su forma es la siguiente:
try
sentencias1
catch
sentencias2
end
En el caso de que durante la ejecucin del bloque sentencias1 se produzca un error, el control
de la ejecucin se transfiere al bloque sentencias2. Si la ejecucin transcurriera normalmente,
sentencias2 no se ejecutara nunca. MATLAB dispone de una funcin lasterr que devuelve
una cadena de caracteres con el mensaje correspondiente al ltimo error que se ha producido.
En la forma lasterr('') pone a cero este contador de errores, y hace que la funcin lasterr
devuelva la matriz vaca [] hasta que se produzca un nuevo error.

5.4 OPERADORES RELACIONALES


El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que 5
Obsrvese que, salvo el ltimo de ellos, coinciden con los correspondientes operadores
relacionales de C. Sin embargo, sta es una coincidencia ms bien formal. En MATLAB los

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

M Cristina Naya Riveiro 91


Curso de iniciacin a MATLAB

operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un
significado especial.
Si una comparacin se cumple el resultado es 1 (true), mientras que si no se cumple es 0
(false). Recprocamente, cualquier valor distinto de cero es considerado como true y el
cero equivale a false. Cuando los operadores relacionales de MATLAB se aplican a dos
matrices o vectores del mismo tamao, la comparacin se realiza elemento a elemento, y el
resultado es otra matriz de unos y ceros del mismo tamao, que recoge el resultado de
cada comparacin entre elementos. Considrese el siguiente ejemplo como ilustracin de lo
que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
01
00
>> A~=B
ans =
10
11

5.5 OPERADORES LGICOS


Los operadores lgicos de MATLAB son los siguientes:
& and (funcin equivalente: and(A,B)). Se evalan siempre ambos operandos, y el
resultado es true slo si ambos son true.
&& and breve: si el primer operando es false ya no se evala el segundo, pues el
resultado final ya no puede ser ms que false.
| or (funcin equivalente: or(A,B)). Se evalan siempre ambos operandos, y el
resultado es false slo si ambos son false.
|| or breve: si el primer operando es true ya no se evala el segundo, pues el resultado
final no puede ser ms que true.
~ negacin lgica (funcin equivalente: not(A)).
Los operadores lgicos se combinan con los relacionales para poder comprobar el
cumplimiento de condiciones mltiples.
Los operadores lgicos breves (&&) y (||) se utilizan para simplificar las operaciones de
comparacin evitando operaciones innecesarias, pero tambin para evitar ciertos errores que
se produciran en caso de evaluar incondicionalmente el segundo argumento. Considrese por
ejemplo la siguiente sentencia, que evita una divisin por cero:
r = (b~=0) && (a/b>0);

Adems de los operadores bsicos, comunes a cualquier lenguaje de programacin avanzado,


MATLAB aporta las siguientes funciones lgicas o relacionales:
xor(A,B) realiza un "or exclusivo", es decir, devuelve 0 en el caso en que ambos sean
no cero o ambos sean 0, y 1 cuando ni A ni B, pero no ambos son no nulos.
any(x) si el argumento es un vector, devuelve un 1 si alguna de las componentes de x
son no nulas. Si el argumento es una matriz, devuelve un vector fila, con un 1 para
cada columna de la matriz x que tiene alguna de sus filas no nulas, y 0 en otro caso.
all(x) si el argumento es un vector, devuelve un 1 si todas las componentes de x son no
nulas. Si el argumento es una matriz, devuelve un vector fila con un 1 para cada
columna de la matriz x que tiene todas sus filas no nulas, y 0 en otro caso.
isempty(x) devuelve un 1 si la matriz x es vaca y 0 en caso contrario.
isequal(x1,x2,,xn) devuelve un 1 si todas las matrices son idnticas y un 0 en caso
contrario.
Otros comandos de estas caractersticas sera isreal, isnan, isfinite, isinf,

5.6 LECTURA Y ESCRITURA INTERACTIVA DE VARIABLES


Todos los m-ficheros admiten sentencias que permiten mantener una comunicacin con el
usuario sobre la ventana de comandos. Para ellos, se ver a continuacin una forma sencilla
de leer variables desde teclado y escribir mensajes en la pantalla del PC.

M Cristina Naya Riveiro 92


Curso de iniciacin a MATLAB

5.6.1 FUNCIN INPUT


La funcin input permite la introduccin de datos por pantalla, es decir, permite imprimir un
mensaje en la lnea de comandos de MATLAB y recuperar como valor de retorno un valor
numrico o el resultado de una expresin tecleada por el usuario.
Despus de imprimir el mensaje, el programa espera que el usuario teclee el valor numrico o
la expresin. Cualquier expresin vlida de MATLAB es aceptada por este comando. El usuario
puede teclear simplemente un vector o una matriz. En cualquier caso, la expresin introducida
es evaluada con los valores actuales de las variables de MATLAB y el resultado se devuelve
como valor de retorno. Vase un ejemplo de uso de esta funcin:
>> n = input('Teclee el nmero de ecuaciones')
Otra posible forma de esta funcin es la siguiente (obsrvese el parmetro 's'):
>> nombre = input('Cmo te llamas?','s')
En este caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo que se
almacena en la cadena nombre. As pues, en este caso, si se teclea una frmula, se almacena
como texto sin evaluarse.

5.6.2 FUNCIN DISP


La funcin disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero
sin imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las cadenas
de caracteres son un caso particular de vectores. Considrense los siguientes ejemplos de
cmo se utiliza:
>> disp('El programa ha terminado')
>> A=rand(4,4)
>> disp(A)
Ejectense las sentencias anteriores en MATLAB y obsrvese la diferencia entre las dos
formas de imprimir la matriz A.

5.7 FICHEROS *.M


Los ficheros con extensin (.m) son ficheros de texto sin formato (ficheros ASCII) que
constituyen el centro de la programacin en MATLAB. Ya se han utilizado en varias ocasiones.
Estos ficheros se crean y modifican con un editor de textos cualquiera. En el caso de MATLAB
ejecutado en un PC bajo Windows, lo mejor es utilizar su propio editor de textos, que es
tambin Debugger.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts en ingls) y las
funciones.
Los primeros contienen simplemente un conjunto de comandos que se ejecutan sucesivamente
cuando se teclea el nombre del fichero en la lnea de comandos de MATLAB o se incluye dicho
nombre en otro fichero *.m. Un fichero de comandos puede llamar a otros ficheros de
comandos.
Si un fichero de comandos se llama desde de la lnea de comandos de MATLAB, las variables
que crea pertenecen al espacio de trabajo base de MATLAB, y permanecen en l cuando se
termina la ejecucin de dicho fichero.
Las funciones permiten definir funciones enteramente anlogas a las de MATLAB, con su
nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que definen funciones
permiten extender las posibilidades de MATLAB; de hecho existen bibliotecas de ficheros *.m
que se venden (toolkits) o se distribuyen gratuitamente (a travs de Internet). Las funciones
definidas en ficheros *.m se caracterizan porque la primera lnea (que no sea un comentario)
comienza por la palabra function, seguida por los valores de retorno (entre corchetes [ ] y
separados por comas, si hay ms de uno), el signo igual (=) y el nombre de la funcin, seguido
de los argumentos (entre parntesis y separados por comas).
Recurdese que un fichero *.m puede llamar a otros ficheros *.m, e incluso puede llamarse a s
mismo de forma recursiva. Los ficheros de comandos se pueden llamar tambin desde
funciones, en cuyo caso las variables que se crean pertenecen al espacio de trabajo de la
funcin. El espacio de trabajo de una funcin es independiente del espacio de trabajo base y
del espacio de trabajo de las dems funciones. Esto implica por ejemplo que no puede haber
colisiones entre nombres de variables: aunque varias funciones tengan una variable llamada A,
en realidad se trata de variables completamente distintas (a no ser que A haya sido declarada
como variable global).

M Cristina Naya Riveiro 93


Curso de iniciacin a MATLAB

A continuacin se ver con un poco ms de detalle ambos tipos de ficheros *.m.

5.7.1 FICHEROS DE COMANDOS (SCRIPTS)


Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un nombre tal como
file1.m que contienen una sucesin de comandos anloga a la que se tecleara en el uso
interactivo del programa. Dichos comandos se ejecutan sucesivamente cuando se teclea el
nombre del fichero que los contiene (sin la extensin), es decir cuando se teclea file1 con el
ejemplo considerado.
Cuando se ejecuta desde la lnea de comandos, las variables creadas por file1 pertenecen al
espacio de trabajo base de MATLAB. Por el contrario, si se ejecuta desde una funcin, las
variables que crea pertenecen al espacio de trabajo de la funcin.
En los ficheros de comandos conviene poner los puntos y coma (;) al final de cada sentencia,
para evitar una salida de resultados demasiado cuantiosa. Un fichero *.m puede llamar a otros
ficheros *.m, e incluso se puede llamar a s mismo de modo recursivo. Sin embargo, no se
puede hacer profile de un fichero de comandos: slo se puede hacer de las funciones.
Las variables definidas por los ficheros de comandos son variables del espacio de trabajo
desde el que se ejecuta el fichero, esto es, variables con el mismo carcter que las que se
crean interactivamente en MATLAB si el fichero se ha ejecutado desde la lnea de comandos.
Al terminar la ejecucin del script, dichas variables permanecen en memoria.
El comando echo hace que se impriman los comandos que estn en un script a medida que
van siendo ejecutados. Este comando tiene varias formas:
echo on activa el echo en todos los ficheros script,
echo off desactiva el echo,
echo file on donde 'file' es el nombre de un fichero de funcin, activa el echo en esa
funcin,
echo file off desactiva el echo en la funcin,
echo file pasa de on a off y viceversa,
echo on all activa el echo en todas las funciones,
echo off all desactiva el echo de todas las funciones.
Mencin especial merece el fichero de comandos startup.m. Este fichero se ejecuta cada vez
que se entra en MATLAB. En l puede introducir todos aquellos comandos que le interesa se
ejecuten siempre al iniciar la sesin, por ejemplo format compact y los comandos necesarios
para modificar el path.

5.7.2 DEFINICIN DE FUNCIONES


La primera lnea de un fichero llamado name.m que define una funcin tiene la forma:
function [lista de valores de retorno] = name(lista de argumentos)
donde name es el nombre de la funcin. Entre corchetes y separados por comas van los
valores de retorno (siempre que haya ms de uno), y entre parntesis tambin separados por
comas los argumentos.
Puede haber funciones sin valor de retorno y tambin sin argumentos. Recurdese que los
argumentos son los datos de la funcin y los valores de retorno sus resultados. Si no hay
valores de retorno se omiten los corchetes y el signo igual (=); si slo hay un valor de retorno
no hace falta poner corchetes. Tampoco hace falta poner parntesis si no hay argumentos.
En MATLAB una funcin no puede modificar nunca los argumentos que recibe, de cara al
entorno que ha realizado la llamada. Los resultados de una funcin de MATLAB se obtienen
siempre a travs de los valores de retorno, que pueden ser mltiples y matriciales. Tanto el
nmero de argumentos como el de valores de retorno no tienen que ser fijos, dependiendo de
6
cmo el usuario llama a la funcin .
Las variables definidas dentro de una funcin son variables locales, en el sentido de que son
inaccesibles desde otras partes del programa y en el de que no interfieren con variables del
mismo nombre definidas en otras funciones o partes del programa. Se puede decir que
pertenecen al propio espacio de trabajo de la funcin y no son vistas desde otros espacios de

6
Es un concepto distinto del de funciones sobrecargadas (funciones distintas con el mismo
nombre y distintos argumentos), utilizadas en C/C++/Java. En MATLAB una misma funcin
puede ser llamada con ms o menos argumentos y valores de retorno. Tambin en C/C++ es
posible tener un nmero variable de argumentos, aunque no de valores de retorno.

M Cristina Naya Riveiro 94


Curso de iniciacin a MATLAB

trabajo. Para que la funcin tenga acceso a variables que no han sido pasadas como
argumentos es necesario declarar dichas variables como variables globales, tanto en el
programa principal como en las distintas funciones que deben acceder a su valor. Es frecuente
utilizar el convenio de usar para las variables globales nombres largos (ms de 5 letras) y con
maysculas.
Por razones de eficiencia, los argumentos que recibe una funcin de MATLAB no se copian a
variables locales si no son modificados por dicha funcin. Esto tiene importantes
consecuencias en trminos de eficiencia y ahorro de tiempo de clculo. Sin embargo, si dentro
de la funcin se realizan modificaciones sobre los argumentos recibidos, antes se sacan copias
de dichos argumentos a variables locales y se modifican las copias. .
Dentro de la funcin, los valores de retorno deben ser calculados en algn momento.De todas
formas, no hace falta calcular siempre todos los posibles valores de retorno de la funcin, sino
slo los que el usuario espera obtener en la sentencia de llamada a la funcin. En cualquier
funcin existen dos variables definidas de modo automtico, llamadas nargin y nargout, que
representan respectivamente el nmero de argumentos y el nmero de valores de retorno con
los que la funcin ha sido llamada. Dentro de la funcin, estas variables pueden ser utilizadas
como el programador desee.
La ejecucin de una funcin termina cuando se llega a su ltima sentencia ejecutable. Si se
quiere forzar el que una funcin termine de ejecutarse se puede utilizar la sentencia return,
que devuelve inmediatamente el control al entorno de llamada.

5.7.3 SENTENCIA RETURN


De ordinario las funciones devuelven el control despus de que se ejecute la ltima de sus
sentencias.
La sentencia return, incluida dentro del cdigo de una funcin, hace que se devuelva
inmediatamente el control al programa que realiz la llamada.

5.7.4 FUNCIONES CON NMERO VARIABLE DE ARGUMENTOS


Desde la versin 5.0, MATLAB dispone de una nueva forma de pasar a una funcin un nmero
variable de argumentos por medio de la variable varargin, que es un vector de celdas que
contiene tantos elementos como sean necesarios para poder recoger en dichos elementos
todos los argumentos que se hayan pasado en la llamada. No es necesario que varargin sea
el nico argumento, pero s debe ser el ltimo de los que haya, pues recoge todos los
argumentos a partir de una determinada posicin. Recurdese que a los elementos de un cell
array se accede utilizando llaves {}, en lugar de parntesis ().
De forma anloga, una funcin puede tener un nmero indeterminado de valores de retorno
utilizando varargout, que es tambin un cell array que agrupa los ltimos valores de retorno
de la funcin.
Puede haber otros valores de retorno, pero varargout debe ser el ltimo. El cell array
varargout se debe crear dentro de la funcin y hay que dar valor a sus elementos antes de
salir de la funcin.
Recurdese tambin que las variables nargin y nargout indican el nmero de argumentos y de
valores de retorno con que ha sido llamada la funcin. A continuacin se presenta un ejemplo
sencillo: obsrvese el cdigo de la siguiente funcin atan3:
function varargout=atan3(varargin)
if nargin==1
rad = atan(varargin{1});
elseif nargin==2
rad = atan2(varargin{1},varargin{2});
else
disp('Error: ms de dos argumentos')
return
end
varargout{1}=rad;
if nargout>1
varargout{2}=rad*180/pi;
end
MATLAB (y muchos otros lenguajes de programacin) dispone de dos funciones, llamadas

M Cristina Naya Riveiro 95


Curso de iniciacin a MATLAB

atan y atan2, para calcular el arco cuya tangente tiene un determinado valor. El resultado de
dichas funciones est expresado en radianes. La funcin atan recibe un nico argumento, con
lo cual el arco que devuelve est comprendido entre /2 y +/2 (entre 90 y 90), porque por
ejemplo un arco de 45 es indistinguible de otro de 135, si slo se conoce la tangente. La
funcin atan2 recibe dos argumentos, uno proporcional al seno del ngulo y otro al coseno. En
este caso ya se pueden distinguir los ngulos en los cuatro cuadrantes, entre y (entre
180 y 180).
La funcin atan3 definida anteriormente puede recibir uno o dos argumentos: si recibe uno
llama a atan y si recibe dos llama a atan2 (si recibe ms da un mensaje de error). Adems,
atan3 puede devolver uno o dos valores de retorno. Por ejemplo, si el usuario la llama en la
forma:
>> a = atan3(1);
devuelve un valor de retorno que es el ngulo en radianes, pero si se llama en la forma:
>> [a, b] = atan3(1,-1);
devuelve dos valores de retorno, uno con el ngulo en radianes y otro en grados. Obsrvese
cmo la funcin atan3 utiliza los vectores de celdas varargin y varargout, as como el nmero
actual de argumentos nargin con los que ha sido llamada.

5.7.4 HELP PARA LAS FUNCIONES DE USUARIO


Tambin las funciones creadas por el usuario pueden tener su help, anlogo al que tienen las
propias funciones de MATLAB. Esto se consigue de la siguiente forma: las primeras lneas de
comentarios de cada fichero de funcin son muy importantes, pues permiten construir un help
sobre esa funcin. En otras palabras, cuando se teclea en la ventana de comandos de
MATLAB:
>> help mi_func
el programa responde escribiendo las primeras lneas del fichero mi_func.m que comienzan
por el carcter (%), es decir, que son comentarios.
De estas lneas, tiene una importancia particular la primera lnea de comentarios (llamada en
ocasiones lnea H1). En ella hay que intentar poner la informacin ms relevante sobre esa
funcin. La razn es que la funcin, llamada lookfor busca una determinada palabra en cada
primera lnea de comentario de todas las funciones *.m.

5.7.5 HELP DE DIRECTORIOS


MATLAB permite que los usuarios creen una ayuda general para todas las funciones que estn
en un determinado directorio. Para ello se debe crear en dicho directorio un fichero llamado
contents.m. A continuacin se muestra un fichero tpico contents.m correspondiente al
directorio toolbox\local de MATLAB:
% Preferences.
%
% Saved preferences files.
% startup - User startup M-file.
% finish - User finish M-file.
% MATLABrc - Master startup M-file.
% pathdef - Search path defaults.
% docopt - Web browser defaults.
% printopt - Printer defaults.
%
% Preference commands.
% cedit - Set command line editor keys.
% terminal - Set graphics terminal type.
%
% Configuration information.
% hostid - MATLAB server host identification number.
% license - License number.
% version - MATLAB version number.
% Utilities.
% userpath - User environment path.
% Copyright 1984-2002 The MathWorks, Inc.

M Cristina Naya Riveiro 96


Curso de iniciacin a MATLAB

% $Revision: 1.14 $ $Date: 2002/06/07 21:45:05 $


Comprubese que la informacin anterior es exactamente la que se imprime con el comando
>> help local
Si el fichero contents.m no existe, se listan las primeras lneas de comentarios (lneas H1) de
todas las funciones que haya en ese directorio. Para que el Help de directorios funcione
correctamente hace falta que ese directorio est en el search path de MATLAB o que sea el
directorio actual.

5.7.6 SUBFUNCIONES
Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada funcin. El
nombre de la funcin deba coincidir con el nombre del fichero. A partir de la versin 5.0 se
introdujeron las subfunciones, que son funciones adicionales definidas en un mismo fichero
*.m, con nombres diferentes del nombre del fichero (y del nombre de la funcin principal) y que
las subfunciones slo pueden ser llamadas por las funciones contenidas en ese fichero,
resultando invisibles para otras funciones externas.
A continuacin se muestra un ejemplo contenido en un fichero llamado mi_fun.m:
function y=mi_fun(a,b)
y=subfun1(a,b);
function x=subfun1(y,z)
x=subfun2(y,z);
function x=subfun2(y,z)
x=y+z+2;

5.7.6 FUNCIONES PRIVADAS


Las funciones privadas (private) son funciones que no se pueden llamar desde cualquier otra
funcin, aunque se encuentren en el path o en el directorio actual. Slo ciertas funciones
estn autorizadas a utilizarlas. Las funciones privadas se definen en subdirectorios que se
llaman private y slo pueden ser llamadas por funciones definidas en el directorio padre del
subdirectorio private.
En la bsqueda de nombres que hace MATLAB cuando encuentra un nombre en una
expresin, las funciones privadas se buscan inmediatamente despus de las subfunciones, y
antes que las funciones de tipo general.

5.7.7 FUNCIONES *.P


Las funciones *.p son funciones *.m pre-compiladas con la funcin pcode. Por defecto el
resultado del comando pcode func.m es un fichero func.p en el directorio actual (el fichero
func.m puede estar en cualquier directorio del search path). El comando pcode -inplace
func.m crea el fichero func.p en el mismo directorio donde encuentra el fichero func.m.
Pueden pasarse varios ficheros *.m al comando pcode de una sola vez.
Los ficheros *.p se ejecutan algo ms rpidamente que los *.m y permiten ocultar el cdigo de
los ficheros ASCII correspondientes a las funciones *.m de MATLAB.

5.7.8 VARIABLES PERSISTENTES


Las variables persistentes son variables locales de las funciones (pertenecen al espacio de
trabajo de la funcin y slo son visibles en dicho espacio de trabajo), que conservan su valor
entre distintas llamadas a la funcin. Por defecto, las variables locales de una funcin se crean
y destruyen cada vez que se ejecuta la funcin. Las variables persistentes se pueden definir en
funciones, pero no en ficheros de comandos. Es habitual utilizar para ellas letras maysculas.
Las variables se declaran como persistentes utilizando la palabra persistent seguida de los
nombres separados por blancos, como por ejemplo:
>> persistent VELOCIDAD TIEMPO
Las variables persistent se inicializan a la matriz vaca [] y permanecen en memoria hasta que
se hace clear de la funcin o cuando se modifica el fichero-M. Para evitar que un fichero-M se
modifique se puede utilizar el comando mlock file.m, que impide la modificacin del fichero. El
comando munlock desbloquea el fichero mientras que la funcin mislocked permite saber si
est bloqueado o no.

M Cristina Naya Riveiro 97


Curso de iniciacin a MATLAB

5.7.9 VARIABLES GLOBALES


Las variables globales son visibles en todas las funciones (y en el espacio de trabajo base o
general) que las declaran como tales. Dichas variables se declaran precedidas por la palabra
global y separadas por blancos, en la forma:
global VARIABLE1 VARIABLE2
Como ya se ha apuntado, estas variables slo son visibles en los espacios de trabajo de las
funciones que las declaran como tales (y en el propio espacio de trabajo base, si tambin ah
han sido declaradas como globales). Ya se ha dicho tambin que se suele recurrir al criterio de
utilizar nombres largos y con maysculas, para distinguirlas fcilmente de las dems variables.

Prctica:

Crear una funcin que reciba un vector u y devuelva un 1 si todos los elementos del
vector son estrictamente positivos y 0 en caso contrario.

Por ejemplo, si v=(7,4,0,2), la funcin devolver 0, y si u=(7,4,7,2), la funcin devolver 1.

Posible solucin:

function flag=ftodospos(u)
flag=1;
i=1;
while i<=length(u)
if u(i)<=0
flag=0;
break;
end
i=i+1;
end

5.8 ENTRADA Y SALIDA DE DATOS


Ya se ha visto una forma de realizar la entrada interactiva de datos por medio de la funcin
input y de imprimir resultados por medio de la funcin disp. Ahora se van a ver otras formas de
intercambiar datos con otras aplicaciones.

5.8.1 IMPORTAR DATOS DE OTRAS APLICACIONES


Hay varias formas de pasar datos de otras aplicaciones por ejemplo de Excel a MATLAB. Se
pueden enumerar las siguientes:
se puede utilizar el Copy y Paste para copiar datos de la aplicacin original y
depositarlos entre los corchetes de una matriz o vector, en una lnea de comandos de
MATLAB. Tiene el inconveniente de que estos datos no se pueden editar.
se puede crear un fichero *.m con un editor de textos, con lo cual no existen problemas
de edicin.
es posible leer un flat file escrito con caracteres ASCII. Un flat file es un fichero con
filas de longitud constante separadas con Intro, y varios datos por fila separados por
blancos. Estos ficheros pueden ser ledos desde MATLAB con el comando load. Si se
ejecuta load datos.txt el contenido del flat file se deposita en una matriz con el
nombre datos. Por ejemplo, creando un fichero llamado flat.txt que contenga las
lneas:
23.456 56.032 67.802
3.749 -98.906 34.910
el comando A=load('flat.txt') leer estos valores y los asignar a la matriz A. Para ms
informacin utilizar help load.
el comando textread permite leer datos de cualquier tipo de un fichero siempre que
estn convenientemente separados. Ver el Help para ms informacin.
se pueden leer datos de un fichero con las funciones fopen y fread.

M Cristina Naya Riveiro 98


Curso de iniciacin a MATLAB

existen tambin otros mtodos posibles: escribir funciones en C para traducir a formato
*.mat (y cargar despus con load), crear un fichero ejecutable *.mex 7 que lea los
datos, etc.

5.8.2 EXPORTAR DATOS A OTRAS APLICACIONES


De forma anloga, tambin los resultados de MATLAB se pueden exportar a otras aplicaciones
como Word o Excel.
utilizar el comando diary para datos de pequeo tamao,
utilizar el comando save con la opcin ascii,
utilizar las funciones de bajo nivel fopen, fwrite y otras,
otros mtodos, por ejemplo: escribir subrutinas en C para traducir de formato *.mat
(guardando previamente con save), crear un fichero ejecutable *.mex que escriba los
datos, etc.
Hay que sealar que los ficheros binarios *.mat son trasportables entre versiones de MATLAB
en distintos tipos de computadores, porque contienen informacin sobre el tipo de mquina en
el header del fichero, y el programa realiza la transformacin de modo automtico. Los ficheros
*.m son de tipo ASCII, y por tanto pueden ser ledos por distintos computadores sin problemas
de ningn tipo.

5.9 LECTURA Y ESCRITURA DE FICHEROS


MATLAB dispone de funciones de lectura/escritura anlogas a las del lenguaje C (en las que
estn inspiradas), aunque con algunas diferencias. En general son versiones simplificadas
con menos opciones y posibilidades que las correspondientes funciones de C.

5.9.1 FUNCIONES FOPEN Y FCLOSE


Estas funciones sirven para abrir y cerrar ficheros, respectivamente. La funcin fopen tiene la
forma siguiente:
[fi,texto] = fopen('filename','c')
donde fi es un valor de retorno que sirve como identificador del fichero, texto es un mensaje
para caso de que se produzca un error, y c es un carcter (o dos) que indica el tipo de
operacin que se desea realizar. Las opciones ms importantes son las siguientes:
'r' lectura (de read)
'w' escritura reemplazando (de write)
'a' escritura a continuacin (de append)
'r+' lectura y escritura
Cuando por alguna razn el fichero no puede ser abierto, se devuelve un (-1). En este caso el
valor de retorno texto puede proporcionar informacin sobre el tipo de error que se ha
producido (tambin existe una funcin llamada ferror que permite obtener informacin sobre
los errores. En el Help del programa se puede ver cmo utilizar esta funcin).
Despus de realizar las operaciones de lectura y escritura deseadas, el fichero se puede cerrar
con la funcin close en la forma siguiente:
st = fclose(fi)
donde st es un valor de retorno para posibles condiciones de error. Si se quieren cerrar a la
vez todos los ficheros abiertos puede utilizarse el comando:
st = close('all')

5.9.2 FUNCIONES FSCANF, SSCANF, FPRINTF Y SPRINTF


Estas funciones permiten leer y escribir en ficheros ASCII, es decir, en ficheros formateados. La
forma general de la funcin fscanf es la siguiente:
[var1,var2,...] = fscanf(fi,'cadena de control',size)
donde fi es el identificador del fichero (devuelto por la funcin fopen), y size es un argumento
opcional que puede indicar el tamao del vector o matriz a leer. Obsrvese otra diferencia con
C: las variables ledas se devuelven como valor de retorno y no como argumentos pasados por
referencia (precedidos por el carcter &). La cadena de control va encerrada entre apstrofos
simples, y contiene los especificadores de formato para las variables:

7
Los archivos .mex son archivos Matlab ejecutables compilados a partir de Fortran o C.

M Cristina Naya Riveiro 99


Curso de iniciacin a MATLAB

%s para cadenas de caracteres


%d para variables enteras
%f para variables de punto flotante
%lf para variables de doble precisin
La funcin sscanf es similar a fscanf pero la entrada de caracteres no proviene de un fichero
sino de una cadena de caracteres.
Finalmente, la funcin fprintf dirige su salida formateada hacia el fichero indicado por el
identificador. Su forma general es:
fprintf(fi,'cadena de control',var1,var2,...)
sta es la funcin ms parecida a su homloga de C. La cadena de control contiene los
formatos de escritura, que son similares a los de C, como muestran los ejemplos siguientes:
fprintf(fi,'El nmero de ecuaciones es: %d\n',n)
fprintf(fi,'El determinante es: %lf10.4\n',n)
De forma anloga, la funcin sprintf convierte su resultado en una cadena de caracteres que
devuelve como valor de retorno, en vez de enviarlo a un fichero. Vase un ejemplo:
resultado = sprintf('El cuadrado de %f es %12.4f\n',n,n*n)
donde resultado es una cadena de caracteres. Esta funcin constituye el mtodo ms general
de convertir nmeros en cadenas de caracteres, por ejemplo para ponerlos como ttulos de
figuras.

5.9.3 FUNCIONES FREAD Y FWRITE


Estas funciones son anlogas a fscanf y fprintf, pero en vez de leer o escribir en un fichero de
texto (ASCII), lo hacen en un fichero binario, no legible directamente por el usuario. Aunque
dichos ficheros no se pueden leer y/o modificar con un editor de textos, tienen la ventaja de que
las operaciones de lectura y escritura son mucho ms rpidas, eficientes y precisas (no se
pierden decimales al escribir). Esto es particularmente significativo para grandes ficheros de
datos. Para ms informacin sobre estas funciones se puede utilizar el help.

5.9.4 FICHEROS DE ACCESO DIRECTO


De ordinario los ficheros de disco se leen y escriben secuencialmente, es decir, de principio a
final, sin volver nunca hacia atrs ni realizar saltos. Sin embargo, a veces interesa acceder a un
fichero de un modo arbitrario, sin ningn orden preestablecido. Esto se puede conseguir con
las funciones ftell y fseek.
En cada momento, hay una especie de cursor que indica en qu parte del fichero se est
posicionado.
La funcin fseek permite mover este cursor hacia delante o hacia atrs, respecto a la posicin
actual ('cof'), respecto al principio ('bof') o respecto al final del fichero ('eof'). La funcin ftell
indica en qu posicin est el cursor. Si alguna vez se necesita utilizar este tipo de acceso a
disco, se puede buscar ms informacin por medio del help.

5.10 RECOMENDACIONES GENERALES DE PROGRAMACIN


Las funciones vectoriales de MATLAB son mucho ms rpidas que sus contrapartidas
escalares. En la medida de lo posible es muy interesante vectorizar los algoritmos de clculo,
es decir, realizarlos con vectores y matrices, y no con variables escalares dentro de bucles.
Aunque los vectores y matrices pueden ir creciendo a medida que se necesita, es mucho ms
rpido reservarles toda la memoria necesaria al comienzo del programa. Se puede utilizar para
ello la funcin zeros. Adems de este modo la memoria reservada es contigua.
Es importante utilizar el profile para conocer en qu sentencias de cada funcin se gasta la
mayor parte del tiempo de clculo. De esta forma se descubren cuellos de botella y se
pueden desarrollar aplicaciones mucho ms eficientes.
Conviene desarrollar los programas incrementalmente, comprobando cada funcin o
componente que se aade. De esta forma siempre se construye sobre algo que ya ha sido
comprobado y que funciona: si aparece algn error, lo ms probable es que se deba a lo ltimo
que se ha aadido, y de esta manera la bsqueda de errores est acotada y es mucho ms
sencilla. Recurdese que de ordinario el tiempo de correccin de errores en un programa
puede ser 4 5 veces superior al tiempo de programacin. El debugger es una herramienta
muy til a la hora de acortar ese tiempo de puesta a punto. En este mismo sentido, puede

M Cristina Naya Riveiro 100


Curso de iniciacin a MATLAB

decirse que pensar bien las cosas al programar (sobre una hoja de papel en blanco, mejor que
sobre la pantalla del PC) siempre es rentable, porque se disminuye ms que proporcionalmente
el tiempo de depuracin y eliminacin de errores.
Otro objetivo de la programacin debe ser mantener el cdigo lo ms sencillo y ordenado
posible. Al pensar en cmo hacer un programa o en cmo realizar determinada tarea es
conveniente pensar siempre primero en la solucin ms sencilla, y luego plantearse otras
cuestiones como la eficiencia.
Finalmente, el cdigo debe ser escrito de una manera clara y ordenada, introduciendo
comentarios, utilizando lneas en blanco para separar las distintas partes del programa,
sangrando las lneas para ver claramente el rango de las bifurcaciones y bucles, utilizando
nombres de variables que recuerden al significado de la magnitud fsica correspondientes, etc.
En cualquier caso, la mejor forma (y la nica) de aprender a programar es programando.

Prctica:

Supongamos que queremos leer los datos almacenados en un fichero, denominado datos.txt,
que contiene esta informacin:

Nombre Clculo lgebra Fsica Estadstica


Fernando Gmez Pereira 3 6 5 7
Susana Rodrguez Prez 7 4 3 1
Carlos Leis lvarez 8 9 7 9
Arturo Gmez lvarez 5 4 5 9
Silvia Tais lvarez 10 9 10 9
Andrea Gallego Nimes 3 3 2 4
Alicia Caballero Leis 6 8 8 5
Antonio Fraga Gmez 5 7 6 5
Beatriz Machado Gmez 4 3 5 4
Laura Tobo Manzanal 7 8 5 9
Juan Rico Fraga 4 7 5 5
Andrs Pena Gmez 6 8 5 6
Luis Blanco Villa 8 6 6 4
Sandra Puentes Gallego 9 9 7 9
Isolina Prieto Gmez 5 5 6 6
Teresa Sieiro Gon 4 2 5 3
Ricardo Lpez Amigo 8 6 2 9

Una forma posible de poder leer estos datos es mediante el fichero:

M Cristina Naya Riveiro 101


Curso de iniciacin a MATLAB

ident=fopen('datos.txt');% se abre el fichero


frewind(ident)% se situa el puntero al inicio del fichero
variables=[];%contiene el nombre de los distintos campos,
%es decir la primera lnea del fichero
%La longitud de cada una se guarda en el vector long_v
for i=1:5
variable=fscanf(ident,'%s',1);
%se lee una variable caracter
long_v(i)=length(variables)+length(variable);
variables=[variables variable];
% Se imprime el nombre de cada valor ledo
if(i==1)
fprintf(1,'\t%s\t\t',variable)
else
fprintf(1,'\t%s\t',variable)
end
end
%A continuacin se leen las lneas restantes.
%La variable carcter nombres contiene los nombres y apellidos
%La variable numrica califica contendr las calificaciones.
nombres=[];
califica=[];
for i=1:17
nombre=fscanf(ident,'%s,%c',1);
apellido1=fscanf(ident,'%s,%c',1);
apellido2=fscanf(ident,'%s,%c',1);
l=3*(i-1)
long_n(l+1)=length(nombres)+length(nombre);
long_n(l+2)=long_n(l+1)+length(apellido1);
long_n(l+3)=long_n(l+2)+length(apellido2);
nombres=[nombres nombre apellido1 apellido2];
califica=[califica; fscanf(ident,'%i',4)'];
fprintf(1,'\n%9s %s %9s',nombre, apellido1, apellido2)
fprintf(1,'\t%i\t\t%i\t\t%i\t\t%i',califica(i,:))
end
fclose(ident)%Se cierra el fichero

Analizar lo que hace este programa.

5.11 ACELERADOR JIT (JUST IN TIME) EN MATLAB


La versin 6.5 de MATLAB incorpor por primera vez un acelerador para los ficheros *.m, que
permite acercarse a las velocidades de otros lenguajes de programacin como Fortran y /C++.
Es importante saber qu tipo de programas pueden ser acelerados y cules no lo son. En
principio MATLAB acelera los bucles de los ficheros *.m que no contienen cierto tipo de
sentencias. Ms en concreto, se pueden ofrecer las siguientes recomendaciones prcticas:
1. No utilizar estructuras, vectores de celdas, clases ni llamadas a funcin por medio de
referencias.
2. No utilizar hipermatrices con ms de tres dimensiones.
3. Utilizar slo llamadas a funciones nativas de MATLAB (funciones compiladas, no
definidas por medio de ficheros *.m o ficheros MEX).
4. No utilizar variables que cambian de tipo a lo largo de la ejecucin (por ejemplo, una
variable que primero es una cadena de caracteres y luego pasa a ser una matriz real).
5. No utilizar las variables i y/o j con nmeros complejos como si fueran variables
normales (por ejemplo, no utilizar 3*i, sino 3i).
6. No utilizar vectores y/o matrices que crecen a lo largo de la ejecucin del programa. Es
mucho mejor reservar previamente toda la memoria necesaria mediante la funcin
zeros, ones o equivalente.

M Cristina Naya Riveiro 102


Curso de iniciacin a MATLAB

5.12 LLAMADA A COMANDOS DEL SISTEMA OPERATIVO Y A OTRAS


FUNCIONES EXTERNAS
Estando en la ventana de comandos de MATLAB, se pueden ejecutar comandos de MS-DOS
precedindolos por el carcter (!), como por ejemplo:
>> !edit fichero1.m
Si el comando va seguido por el carcter ampersand (&) el comando se ejecuta en
background, es decir, se recupera el control del programa sin esperar que el comando
termine de ejecutarse. Por ejemplo, para arrancar Notepad en background,
>> !notepad &
Existe tambin la posibilidad de arrancar una aplicacin y dejarla iconizada. Esto se hace
postponiendo el carcter barra vertical (|), como por ejemplo en el comando:
>> !notepad |
Algunos comandos de MATLAB realizan la misma funcin que los comandos anlogos del
sistema operativo MS-DOS, con lo que se puede evitar utilizar el operador (!). Algunos de estos
comandos son los siguientes:
dir contenido del directorio actual
what ficheros *.m en el directorio actual
delete filename borra el fichero llamado filename
mkdir(nd) crea un subdirectorio con el nombre nd
copyfile(sc, dst) copia el fichero sc en el fichero dst
type file.txt imprime por la pantalla el contenido del fichero de texto file.txt
cd cambiar de directorio activo
pwd muestra el path del directorio actual
which func localiza una funcin llamada func
lookfor palabra busca palabra en todas las primeras lneas de los
ficheros *.m

5.13 DISTRIBUCIN DEL ESFUERZO DE CLCULO: PROFILER


El profiler es una utilidad que permite saber qu tiempo de clculo se ha gastado en cada
lnea de una funcin definida en un fichero *.m o en general de un programa de MATLAB. El
profiler tambin puede utilizarse con ficheros de comandos *.m, es decir con programas que
no sean funciones.
Permite asimismo determinar el nmero de llamadas a dicha funcin, las funciones que la han
llamado (parent functions), las funciones llamadas por ella (child functions), etc.
El profiler mejora la calidad de los programas, pues permite detectar los cuellos de botella de
una aplicacin y concentrar en ellos los esfuerzos para mejorar su eficiencia. Por ejemplo,
sabiendo el nmero de veces que se llama a una funcin y el tiempo que cuesta cada llamada,
se puede decidir si es mejor emplear ms memoria en guardar resultados intermedios para no
tener que calcular varias veces lo mismo.
El profiler ha sido mejorado en las distintas versiones de MATLAB, disponiendo de una
interface de usuario propia como muestran las siguientes figuras:

M Cristina Naya Riveiro 103


Curso de iniciacin a MATLAB

Figura 28 (a,b,c,d)

Con el profiler se puede medir el tiempo (en centsimas de segundo) empleado en cada lnea
del fichero, en cada llamada a una funcin e incluso en cada operador del lenguaje.
Para arrancar la ventana del profiler se puede ejecutar el comando Profiler en el men
Desktop, utilizar el men Start/MATLAB o simplemente teclear profile viewer en la ventana
de comandos. El resultado ser que se abre la ventana que se muestra en la Figura 28-a.
Ahora se debe introducir en la ventana Run this code el nombre de la funcin o fichero *.m
que se quiere analizar y despus clicar en el botn Start Profiling. Inmediatamente el
programa empieza a ejecutarse bajo la supervisin del profiler, lo cual se sabe porque en la
parte superior derecha de la ventana aparece una marca verde y comienza a correr el tiempo.
Al acabar la ejecucin se muestra el resumen de resultados (Profile Summary), que para el
programa tiroparMain4.m. En esta figura se muestra un informe del n de veces que ha sido
llamada cada funcin y del tiempo total que se ha empleado en ella.
Clicando sobre el enlace a la funcin tiropar4salida se muestra la informacin de la Figura 28-
c y de la Figura 28-d. En la parte de arriba de la ventana (Figura 28-c) se muestra el nmero de
veces que ha sido llamada cada lnea de cdigo y el tiempo empleado en ella. En la parte
inferior de la ventana (Figura 28-d) aparece una informacin similar referida al cdigo fuente del
fichero. Las sentencias que se han llevado ms tiempo de CPU aparecen coloreadas en un
tono rosa de intensidad creciente.
Una informacin particularmente interesante es la proporcionada bajo el epgrafe M-Lint
results, (no mostrados en las figuras) que contiene sugerencias para mejorar la eficiencia del
programa. Por ejemplo, se avisa de la existencia de variables que se calculan pero no se
utilizan posteriormente, de la existencia de alternativas ms eficientes, etc.
El profiler proporciona tambin informacin sobre la funcin padre (la que la ha llamado) y las
funciones hijas de cada funcin.
Otra forma de llamar al profiler es por medio de la funcin profile, que se intercala en el

M Cristina Naya Riveiro 104


Curso de iniciacin a MATLAB

cdigo fuente en la forma (se supone que estas lneas forman parte de un fichero *.m):
profile on -detail 'builtin';
sol=ode15s(@tiropar4,tspan2,y0,options,1,0.001);
profile viewer;
donde la primera lnea activa el profiler a la vez que define el grado de detalle que se desea y
el tipo de tiempo que se desea medir. La segunda lnea es una llamada a la funcin ode15s
que a su vez llama a muchas otras funciones y la tercera lnea detiene el profiler y le pide un
informe con los resultados calculados. Los informes presentados por el Profiler son similares a
los de la Figura 29, aunque en este caso no se muestra un informe total sobre la funcin
tiroparMain4, sino slo sobre la parte de cdigo que est entre profile on y profile viewer.
Existen dos posibles grados de detalle respecto a la informacin que se le pide al profiler:
'mmex' determina el tiempo utilizado por funciones y subfunciones definidas en
ficheros *.m y *.mex. sta es la opcin por defecto.
'builtin' como el anterior incluyendo las funciones intrnsecas de MATLAB.
Otros posibles comandos relacionados con el profiler de MATLAB son los siguientes:
profile viewer abre la ventana del profiler mostrada en la Figura 29,
profile on activa el profiler poniendo a cero los contadores,
profile on detail level como el anterior, pero con el grado de detalle indicado,
profile on history activa el profiler con informacin sobre el orden de las llamadas a
las funciones (puede registrar hasta 10000 llamadas),
profile off desactiva el profiler sin poner a cero los contadores,
profile resume vuelve a activar el profiler sin poner a cero los contadores,
profile clear pone a cero los contadores,
s = profile('status') muestra una estructura conteniendo los datos del profile,
stats = profile('info') detiene el profiler y muestra una estructura con los resultados
(consultar el Help para ms informacin sobre las variables miembro de estas
estructuras).
El profiler se puede aplicar a funciones y a ficheros de comandos. La ejecucin de un
programa con el profiler puede ser bastante ms lenta que sin l, por el trabajo extra que
conlleva.

M Cristina Naya Riveiro 105


Curso de iniciacin a MATLAB

6. INTRODUCCIN AL ANLISIS DE DATOS

Cuando se desea analizar el comportamiento de una o varias variables estadsticas, se


comienza por recopilar una gran cantidad de informacin numrica acerca de las variables en
cuestin. Para la presentacin de estos datos en una forma til y significativa, ser necesario
reorganizar la informacin de forma adecuada para obtener una visin global del conjunto de
datos; a partir de esta agrupacin ser necesario, entre otras cosas:

Calcular medias para deducir algo acerca del comportamiento especfico del problema
en estudio.
Describir la dispersin de los datos respecto de la media.
Estudiar la relacin que existe entre distintas variables medidas.
Visualizar grficamente los datos.
Realizar distintas interpolaciones a partir de los datos medidos para deducir el
comportamiento en otros puntos no medidos.

En esta parte mostraremos las soluciones que MATLAB ofrece para cada uno de los puntos
anteriores.

Para analizar, con MATLAB, anlisis estadsticos de un conjunto de datos, stos deben ser
almacenados utilizando matrices: cada columna de la matriz representar una variable medida
y cada fila los valores que toman todas las variables consideradas en un determinado punto de
medida. Si el nmero de datos es pequeo, se puede introducir los datos a mano mediante una
matriz, sino recomendamos el uso de un fichero.

Tambin podemos usar la funcin:

tblread(datos.txt)

que lee los datos almacenados en un fichero datos.txt interpretando los nombres de las
variables (primera fila) y los nombres de los individuos (primera columna). Permite distintos
caracteres como delimitadores de campos (espacios en blanco, coma, punto y coma, etc.)

Ej. [datos, nombresvariables, nombresindividuos] = tblread(Demog.tex);

datos, nombresvariables, nombresindividuos

Una vez realizada esta agrupacin de los datos veremos en los apartados siguientes cmo
proceder a su anlisis.

6.1 CLCULO DEL MNIMO, MXIMO, MEDIA Y MEDIANA

Como primer paso, supongamos que tenemos una sola variable cuyos valores medidos hemos
almacenado en un vector y de datos. Los comandos:

min(y): calcula el valor mnimo.


max(y): calcula el valor mximo.
mean(y): calcula el valor medio.
median(y): calcula la mediana de las componentes de y. Recordamos que la mediana
de un conjunto de nmeros ordenados en magnitud es, o el valor central, o la media de
los dos valores centrales.
tabulate(y): obtiene la tabla de distribucin de frecuencias de x. El argumento x debe
ser un vector de nmeros naturales.

M Cristina Naya Riveiro 106


Curso de iniciacin a MATLAB

Ejemplo:

r = unidrnd(10,5,1)% deuelve un array aleatorio de valores comprendidos entre 1 y 10,


de dimensin 5x1.

r=

tabulate(r)

Value Count Percent

1 0 0.00%

2 0 0.00%

3 0 0.00%

4 2 40.00%

5 1 20.00%

6 0 0.00%

7 0 0.00%

8 1 20.00%

9 1 20.00%

Si los datos estn almacenados en una matriz:

nanmin(A), nanmax(A):Calculan, respectivamente, el mnimo y el mximo de los datos


que ocupan cada una de las columnas (variables) de la matriz A. Los datos missing
se omiten. Ej.:

r = unidrnd(10,5,2)

r=

98

9 10

17

88

94

M Cristina Naya Riveiro 107


Curso de iniciacin a MATLAB

nanmin(r),nanmax(r)

ans =

14

ans =

9 10

Podramos tambin usar

[a,i]=min(A) almacena en el vector fila a el elemento ms pequeo de cada


columna de A, y en i la fila en la que se encuentra este valor.

range(A): Calcula el rango estadstico, es decir, la diferencia entre el valor mximo y el


mnimo, de los datos que ocupan cada una de las columnas (variables) de la matriz A.
Ej.:

r = unidrnd(10,5,2)

r=

13

35

49

92

46

range(r)

ans =

87

median(A): Calcula la mediana de los datos que ocupan cada una de las columnas
(variables) de la matriz A. Ej.:

r = unidrnd(10,5,2)

r=

10 3

88

8 10

37

26

median(r)

M Cristina Naya Riveiro 108


Curso de iniciacin a MATLAB

ans =

87

iqr(A): Calcula el rango intercuartlico de los datos que ocupan cada una de las
columnas (variables) de la matriz A. Ej.:

r = unidrnd(10,5,2)

r=

5 10

32

11

34

27

iqr(r)

ans =

1.7500 6.0000

prdtile(A,p): Calcula los percentiles designados en p (en porcentaje) para cada una de
las columnas (variables) de A. El resultado es una matriz cuya fila i-sima contiene los
percentiles del p(i), de cada una de las columnas de A. Ej.:

r = unidrnd(10,5,2)

r=

68

57

91

92

55

prctile(r,[25;50;75])

ans =

5.0000 1.7500

6.0000 5.0000

9.0000 7.2500

nansum(A), nanmean(A), nanmedian(A), nanstd(A): Calculan, respectivamente, la


suma, la media aritmtica, la mediana y la (cuasi) desviacin estndar de los datos que
ocupan cada una de las columnas (variables) de la matriz A. Los datos missing se

M Cristina Naya Riveiro 109


Curso de iniciacin a MATLAB

omiten. Ej.:

r = unidrnd(10,5,2)

r=

92

45

11

85

10 9

nansum(r),nanmean(r),nanmedian(r),nanstd(r)

ans =

32 22

ans =

6.4000 4.4000

ans =

85

ans =

3.7815 3.1305

6.2 DESVIACIN TPICA

La dispersin o variacin de los datos, para dar una idea de cuan esparcidos se encuentran,
puede medirse utilizando la desviacin tpica. Dado un vector y de datos, su desviacin tpica o
estndar se define por:

(() )2
() =

siendo la media de los valores almacenados en y y N el nmero de datos, es decir, la


dimensin de y.

>>std(y)

El argumento de la funcin std tambin puede ser una matriz; en ese caso la desviacin se
calcular para cada una de las columnas de la misma y se guardar en un vector fila.

6.3 COEFICIENTES DE CORRELACIN Y MATRIZ DE COVARIANZA

Dadas dos variables x e y, si deseamos expresar cuantitativamente hasta qu grado estn


relacionadas, es necesario calcular la covarianza y el coeficiente de correlacin de x e y. La

M Cristina Naya Riveiro 110


Curso de iniciacin a MATLAB

correlacin se define como:


=1 ()()
=
( 2 2 2 2
=1 () ) (=1 () )

Si r toma un valor prximo a cero, significa que no hay apenas correlacin entre las variables.

>>r=corrcoef([x,y])

donde suponemos que los valores de las variables x e y se guardan en los vectores columna
de nombre respectivo.

Dada una matriz A,

corrcoef(A): Calcula la matriz de correlaciones asociada con las columnas (variables)


de A. Ej.:

X=unifrnd(2,10,1,100);Y=2.*X+normrnd(0,2,1,100);

corrcoef([X;Y])

ans =

1.0000 0.9371

0.9371 1.0000

El numerador de la formula anterior se denomina covarianza de x e y, y en MATLAB se


incorpora mediante el comando:

>> s=cov([x,y])

que calcula la estimacin no sesgada de la covarianza entre ambas variables, es decir:


=1 ()()
=
1

Si A es una matriz donde cada fila es una observacin y cada columna una variable, el
comando

cov(A): Calcula la matriz de covarianzas asociada con las columnas (variables) de A.


Ej.:

X=unifrnd(2,10,1,100);Y=normrnd(0,3,1,100);

cov([X;Y])

ans =

4.9814 -0.5150

-0.5150 11.6290

El vector diag(cov(A)) se llama vector de varianzas y es fcil comprobar que sus componentes
son las del vector de desviaciones tpicas al cuadrado.

6.4 GRFICOS ESTADSTICOS

M Cristina Naya Riveiro 111


Curso de iniciacin a MATLAB

Supongamos que tenemos un fenmeno expresado en trminos de una variable discreta y. Su


representacin grfica puede hacerse de las siguientes formas:

1. Histograma: es un grfico para la distribucin de una variable cuantitativa continua que


representa frecuencias mediante reas. El histograma se construye colocando en el eje
de abscisas los intervalos de clase, como trozos de la recta real, y levantando sobre
ellos rectngulos con rea proporcional a la frecuencia. Una vez ms, aqu resulta
irrelevante trabajar con frecuencias absolutas o relativas.
Destacamos que es el rea y no la altura de los rectngulos lo que debe ser
proporcional a la frecuencia. As, el eje de ordenadas no refleja la frecuencia, sino que
la altura de cada rectngulo representa la densidad de frecuencia sobre ese intervalo,
definida como:

MATLAB ofrece el comando hist para construir la agrupacin en intervalos de clase,


calcular las frecuencias y representarlas mediante un histograma. Presenta las
siguientes posibilidades:
ni = hist(y): reparte la muestra contenida en el vector y en diez intervalos de
igual longitud y devuelve en el vector ni las frecuencias absolutas de cada
intervalo.
ni = hist(y,m): utiliza m intervalos.
ni = hist(y,x): utiliza las marcas de clase especificadas por el vector x.

Ilustracin
Figura 29:1:ejemplo
Ejemplodedehistograma.
histograma.

[ni, x] = hist(y): devuelve en x las marcas de clase.


hist(y): sin argumentos de salida, produce la figura con el histograma. Ojo! las
alturas que representa son frecuencias absolutas.

2. Grfico de barras: es un tipo de grfico de variables cualitativas. De este modo, la


funcin bar(y) dibuja el grfico de barras con los elementos de vector y; bar(x,y) realiza
un diagrama de barras que considera en el eje de abscisas los individuos especificados
en la variable x y en el de ordenadas la variable y. La dimensin de los vectores x e y
debe coincidir. Podemos influir en la anchura de los rectngulos representados. La
funcin stem(x,y) representa segmentos verticales rematados con una circunferencia

M Cristina Naya Riveiro 112


Curso de iniciacin a MATLAB

en su extremo superior, en las posiciones del eje de abscisas contenidas en el vector x


y cuyas alturas vienen dadas por el vector y.

Figura 30: ejemplo de un grfico de barras.

3. Perfil de la muestra.
a. El comando stairs(y) es anlogo al bar pero pintando nicamente el perfil de la
muestra.
b. stem(y) crea una grfica con los datos dados en el vector y sobre el eje de
ordenadas, en el de abscisas se consideran trodos los puntos de la muestra y
para cada valor de la muestra se representa la lnea paralela al eje oy que
conecta este punto del eje ox con la correspondiente ordenada.
>>stem(x,y)
representa la secuencia de datos de la variable y en los valores especificados
de la variable x. En resumen, el comando stem presenta tambin el perfil de la
muestra.
Con un string adicional se puede elegir el estilo de la lnea:
>>stem(x,y,option)

M Cristina Naya Riveiro 113


Curso de iniciacin a MATLAB

donde la eleccin del trazo (no del color) se hace igual que con el comando
plot.

Figura 31: la funcin stem representa segmentos verticales.

4. Grficos de errores

Dados tres vectores de la misma dimensin,

>>errorbar(x,y,e)

dibuja la grfica del vector y frente al vector x con una barra vertical en cada punto
dado, que representa el error especificado en el vector e. Adems, la barra csobre el
punto i-simo est centrada en el punto (x(i),y(i)) y su longitud es doble que la de la
componente i-sima del vector e.

5. Histograma angular
El comando rose nos permite realizar un histograma angular. La utilizacin es similar al
comando hist, con la muestra y formada por ngulos en [0,2]; para ello, en muchos
casos ser necesaria una manipulacin adecuada de los elementos de la muestra.
Todos estos comandos de dibujo pueden complementarse con los de etiquetado, definicin de
ejes, utilizados con plot.

6.5 CURVAS DE REGRESIN

Cuando se realizan experimentos, en muchas ocasiones encontramos que existen relaciones


entre varias variables que intervienen en el mismo; por ejemplo, la presin de una masa de gas
dada depende del volumen que ocupe y la temperatura a las que se encuentre. Una cuestin
de inters es encontrar una expresin matemtica que indique la relacin entre las variables

M Cristina Naya Riveiro 114


Curso de iniciacin a MATLAB

observadas.

Para ello, en primer lugar debemos recoger datos que muestren los valores correspondientes a
las variables x e y para las cuales se han realizado las medidas ()
=1 e ()=1 ,
respectivamente. Si representamos los puntos medidos sobre un sistema de coordenadas
rectangulares obtendremos lo que se conoce como diagrama de dispersin.

En lo sigue, trataremos de resolver la siguiente cuestin: construir una curva que permita
obtener el valor de la variable y en puntos de la variable x distintos de los medidos, y as poder
expresar la ley de comportamiento que liga ambas variables. A esta pregunta se puede
responder de dos formas: calculando la curva de regresin o realizando interpolacin.

Se construye la curva de ajuste de mnimos cuadrados o curva de regresin y se analiza la


bondad del ajuste realizado. Esta curva se caracteriza por ser una curva suave que minimiza
la suma de los cuadrados de las desviaciones desde la curva (valores estimados) a cada uno
de los valores medidos. El comando de MATLAB:

>>p=polyfit(x,y,n)

calcula el polinomio de regresin de grado n; es decir, el polinomio p de grado n que minimiza:


(( ) )2 .
=1

Prctica:

La tabla siguiente recoge el peso de 30 estudiantes.

71 82 65 75 77 91 59 84 89 81

73 91 82 75 96 85 69 76 81 92

84 79 77 95 81 79 84 85 76 82

Construir sobre una misma ventana las 4 figuras siguientes:

1.-Un histograma de frecuencias con el ox peso y oy frecuencia de valores.

2.-El polgono de frecuencias, curva obtenida entre los puntos definidos por las marcas
de clase y la frecuencia.

3.-El perfil de muestra mediante stairs

4.-El perfil de muestra mediante stem.

5.-Calcular el mximo y mnimo peso y la media de pesos.

6.6 INTERPOLACIN UNI Y BIDIMENSIONAL

En este apartado aproximaremos los datos x e y por una curva que pasa por todos los puntos
medidos y que est formada por trozos de funciones polinmicas; en general, no ser una
curva regular. Esta tcnica se conoce con el nombre de interpolacin. Dependiendo del grado
de las funciones consideradas tendremos interpolacin lineal (grado 1), cbica (grado 3), etc.

M Cristina Naya Riveiro 115


Curso de iniciacin a MATLAB

La interpolacin lineal es el mtodo utilizado, por ejemplo, por el comando plot para realizar la
representacin grfica.

El comando de MATLAB:

vector_y=interp1(x,y,vector_x,opcin)

a partir de los valores medidos en las variables x e y, utiliza un mtodo de interpolacin para
calcular, en cada componente de la variable independiente vector_x el correspondiente valor
de la variable dependiente. Las componentes de vector_s deben estar en el rango
determinadao por los valores mnimo y mximo de las x; fuera de este rango el valor calculado
es NaN. El argumento opcin es una variable carcter que indica el mtodo a considerar:

linear: interpolacin lineal.


cubic: interpolacin cbica.
spline: interpolacin spline cbica.

La opcin por defecto es la interpolacin lineal.

El argumento de salida vector_y ser un vector de la misma dimensin y tipo que el vector_x.

El comando de interpolacin interp1 requiere que el vector x sea montono y, adems, si se


utiliza la opcin spline, los puntos de interpolacin deben estar igualmente espaciados.

Si no estn igualmente espaciados, un comando de interpolacin ms rpido es:

interp1q(x,y,vector_x)

donde x e y deben ser vectores columna de la misma dimensin y, adems, x debe ser
montona creciente.

Si se desea hacer una interpolacin bidimensional el comando es:

matriz_z=interp2(X;Y;Z;matriz_x,matriz_y,opcin)

donde,

X e Y son matrices que definen una malla sobre el plano XY de puntos de medida. Su
estructura debe ser similar a la obtenida con el comando meshgrid.
Z contiene los valores medidos en las abscisas correspondientes de las matrices X e Y.
matriz_x y matriz_y especifican los puntos donde se desea estimar el valor de la
variable Z.
El argumento opcin es una variable carcter que indica el mtodo a considerar:
o linear: interpolacin bilineal
o cubic: interpolacin bicbica.
Ambos mtodos necesitan que las variables X e Y sean montonos. Adems, la
interpolacin bicbica necesita que los puntos estn igualmente espaciados.
matriz_z alamacena los correspondientes valores estimados.

Prctica:

Se ha medido experimentalmente la conductividad elctrica del acero a distintas temperaturas,


recogindose los siguientes valores:

M Cristina Naya Riveiro 116


Curso de iniciacin a MATLAB

Obtener los polinomios de regresin de primero y segundo grado. Calcular para los polinomios
obtenidos cul sera el valor estimado de la conductividad elctrica a los 600 y a los 1000C.

M Cristina Naya Riveiro 117


Curso de iniciacin a MATLAB

7. INTRODUCCIN AL USO DE INTERFACES GRFICAS DE USUARIO


(GUI) CON MATLAB.

Para que un lenguaje de programacin revele todo su potencial debe permitir que los usuarios
puedan interaccionar con los programas de una forma cmoda. Para esto se desarroll el
concepto de GUI.

Matlab Guide es un entorno de programacin visual que ofrece Matlab para poder realizar y
ejecutar programas de simulacin, tiene las caractersticas bsicas de todos los programas
visuales como Visual Basic o Visual C++.

El lenguaje ms habitual para crear GUIs es Java, ya que tiene la enorme ventaja de funcionar
en cualquier mquina, sin embargo Java resulta muy lento para hacer clculos eficientes. En
comparacin con Java, Matlab es ms poderoso al realizar clculos grandes.

En MATLAB podemos desarrollar las GUI de dos maneras. O bien desde cero, lo cual implica
tener que definir por texto cada uno de los elementos que configuran la GUI. O bien haciendo
uso de una utilidad que incorpora MATLAB llamada GUIDE.

Para construir una GUI con GUIDE desde esta generaremos una distribucin de los elementos
que la componen (botones, textos, paneles, desplegables), GUIDE compilar estos
elementos en un fichero con extensin .fig y crear un fichero .m que deberemos programar
para obtener las funcionalidades deseadas. Es decir, la GUI consta de dos archivos: uno .m
que contiene el cdigo del programa, y otro .fig que es la parte grfica. Las dos partes estn
unidas a travs de las subrutinas de llamada denominadas callback. La cadena de llamada es
una cadena que consiste en un comando, un conjunto de rdenes o una llamada de funcin.
En esta cadena se especifican todas las tareas de cmputo que deben ejecutarse al elegirse la
opcin.

No siempre es necesario definir la propiedad callback, ya que algunos objetos no ejecutan


ningn comando de Matlab.

El archivo .m que se crea tiene una estructura predeterminada. Consta de un encabezado y el


cdigo correspondiente a las subrutinas. Este archivo es construido automticamente por
Matlab y las lneas de cdigo que aparecen son las que crean la interfaz que aparece en el
archivo .fig. El archivo de inicializacin define los parmetros bsicos de la interfaz y crea un
conjunto de identificadores (handles) para cada uno de los objetos que vayan apareciendo
sobre la interfaz.

Cada uno de los objetos de Matlab tiene un identificador nico. Algunos grficos tienen muchos
objetos, por lo tanto tienen mltiples handles.

En una GUI, el flujo de datos est controlado por las acciones en la interfaz. Los comandos
para crear una interfaz con el usuario se escriben en un guin, la interfaz invoca el guin que
se ejecute, mientras la interfaz del usuario permanece en la pantalla aunque no se haya
completado la ejecucin del guin.

Cuando se interacta con un control, el programa registra el valor de esa opcin y ejecuta los
comandos prescritos en la cadena de llamada o invocacin. Al completarse la ejecucin de las
instrucciones de la cadena de llamada, el control vuelve a la interfaz para que pueda elegirse
otra opcin del men. Este ciclo se repite hasta que se cierra la GUI.

El control guarda un string que describe la accin a realizar cuando se invoca, puede consistir

M Cristina Naya Riveiro 118


Curso de iniciacin a MATLAB

en un solo comando de Matlab o una secuencia de comandos, o en una llamada a una funcin.

7.1 USO DE GUIDE

Para inicializar GUIDE deberemos ejecutar el comando guide desde la lnea de comandos y
obtendremos una ventana como la de la Figura 32.

Figura 32: aplicacin GUIDE

Esta ventana ofrece el objeto raz (pantalla), que es siempre nico y su identificador es el cero.
El identificador de las ventanas es un entero, que aparece en la barra de nombre de dicha
ventana. Los identificadores de otros elementos grficos son nmeros flotantes (float), que
pueden ser obtenidos como valor de retorno y almacenados en variables de Matlab.
El objeto ms general de una GUI es la pantalla (screen). Este objeto es la raz de todos los
dems objetos y slo puede haber un objeto pantalla. Una pantalla puede contener una o ms
ventanas (figures). A su vez cada una de las ventanas puede tener uno o ms ejes de
coordenadas (axes). Una ventana puede tener tambin controles (uicontrol) tales como
botones, barras de desplazamiento, botones de seleccin o de opcin, etc.) y mens (uimenu).
Finalmente, los ejes pueden contener los seis tipos de elementos grficos que permite Matlab:
lneas (line), rectngulos (rectangle), polgonos (patches), superficies (surface), imgenes
bitmap (image) y texto (text).

Figura 33: Mini GUI con GUIDE

M Cristina Naya Riveiro 119


Curso de iniciacin a MATLAB

En la Figura 33 podemos observar cmo hemos creado un panel y un botn. En esencia esta
es la GUI ms sencilla que podemos crear.
Para modificar las caractersticas de los objetos (por ejemplo, color, etiqueta, valor, posicin,
texto, etc.) deberemos hacer uso del inspector de atributos al que se accede con el men
contextual del botn derecho. Para el botn este tiene el aspecto de la Figura 34. Como
atributos ms obvios, resaltado en rojo, tenemos el String que es el texto del botn (Push
Button) o el BackgroundColor (gris medio). No obstante los atributos ms interesantes de cara
a la programacin son Tag y UserData. El primero nos permite darle un nombre concreto y
nos ayudar a encontrar el objeto suministrndonos su handles. El segundo es un campo que
nos permite almacenar datos del tipo que queramos (nmeros, textos).

Figura 34: Atributos del botn pushbutton1.

Cuando guardemos la GUI, GUIDE generar el fichero .m que deberemos programar. Notemos
que todos los elementos de la GUI son objetos del entorno de programacin. Una vez que
ejecutemos la GUI tendremos unas instancias de estos que podremos manejar y editar como
tales.
Las Componentes principales de GUIDE son:

M Cristina Naya Riveiro 120


Curso de iniciacin a MATLAB

Barra de Mens: Es donde se encuentran las funciones elementales de edicin de


GUIs.
Paleta de Componentes: Contiene los controles (uicontrols) que se muestran en la GUI.
Barra de Herramientas: Es donde se encuentran los siguientes botones:
o Alineacin de Componentes (Alignment tool): esta opcin permite alinear los
componentes que se encuentra en el rea de trabajo (Layout Area) de manera
personalizada.
o Propiedades del Inspector (Property Inspector): Contiene todas las
propiedades de cada objeto en forma personalizada.
o Navegador de Objetos (Object Browser): Muestra todos los objetos que se
encuentran en la figura (en forma de rbol).
o Editor de Mens (Menu Editor): El redactor de Men crea mens de ventana y
mens de contexto.
o Editor de orden (Tab Order Editor): Es para editar el orden de los objetos de la
GUI.
o Editor de archivos M (M-File Editor): Despliega en pantalla el archivo .m.

7.1.1 CONTROLES DE LA GUI

Los controles de la interfaz con el usuario en Matlab se especifican con la orden uicontrol, y se
localizan en la parte izquierda de la pantalla principal de la GUI, son los siguientes:

Figura 35: Controles de la GUI.

Men desplegable (Popup Menu). Provee una lista de opciones.


Botones (Push Button). Invoca un evento inmediatamente.
Caja de listas (List Box). Muestra una lista deslizable.
Casilla de verificacin (Check Box). Estn diseadas para realizar operaciones de
encendido/apagado. Indican el estado de una opcin o atributo.
Botn de radio (Radio Button). Indica una opcin que puede ser seleccionada. Cuando slo
se usa un botn de radio, no existe ninguna diferencia funcional con respecto a una casilla
de verificacin. Los botones de radio en grupo son mutuamente exclusivos (es decir, si un
botn esta encendido, todos los dems botones se apagan), mientras que las casillas de
verificacin son independientes entre s.
Texto esttico (Static Text). Muestra un string de texto en una caja.
Barra deslizadora (Slider). Usado para representar un rango de valores.
Texto editable (Text Edit). Permite al usuario teclear una cadena de entrada.
Panel de botones (Panel Button). Sirve para agrupar dispositivos.
Botn de palanca (Toggle Button). Genera una accin que indica un estado binario.
(encendido o apagado).

M Cristina Naya Riveiro 121


Curso de iniciacin a MATLAB

Grupo de botones (Button Group) Permite exclusividad de seleccin con los radio button.
Active x. Permite crear aplicaciones exportables.

7.1.2 FICHERO .M DE GUIDE

El aspecto del fichero .m generado por GUIDE es aproximadamente como el de la Figura 36.
En l se ha eliminado alguna informacin superflua, en forma de comentarios, que genera de
forma automtica GUIDE.

Figura 36: Fichero .m de GUIDE

M Cristina Naya Riveiro 122


Curso de iniciacin a MATLAB

Hay que tener en cuenta que todos los valores de las propiedades de los elementos de Matlab
(ej. color, etiqueta, valor, posicin, texto, etc.) y los valores de las variables del programa se
guardan en una estructura, los cuales son accedidos mediante un nico y mismo puntero. Una
estructura (struct) es una agrupacin de datos de tipo diferente bajo un mismo nombre, como
se ha estudiado anteriormente y estos datos se llaman miembros (members) o campos (fields).
Hemos resaltado la funcin pushbutton1_Callback(). Esta la es la que se ejecutar cuando
pulsemos el botn. En este momento est vaca pero podemos programarla para que haga
cosas de nuestro inters por ejemplo representar una grfica, llamar a otra funcin, etc.

Para terminar queremos mostrar cmo se accede a un objeto concreto y como se modifican
sus caractersticas. Esto se hace por medio de la funcin findobj(). Por ejemplo:
h_boton = findobj('Tag', 'pushbutton1');

Esta funcin nos devolver la handles que apunta a la entidad cuya etiqueta (Tag) es
pushbutton1. Una vez que hemos encontrado el objeto podemos leer los valores de sus
atributos con funciones get() y modificarlos con set().
Por ejemplo, con las instrucciones:
color = get(h_boton, 'BackgroundColor');
set(h_boton, 'BackgroundColor', rand(1,3))
Obtendremos, por si tenemos inters en ello, el color del botn (get()) y lo modificaremos con el
color que queramos, en este caso con un color aleatorio suministrando un vector con 3 valores
elegidos al azar (set()).
Vemos pues, que en esencia, la interaccin con la GUI a nivel de programacin se realiza en
base a encontrar la handles del objeto, consultar sus propiedades, modificarlas y recuperarlas.
Esto aplica a cualquier elemento presente en una GUI: cajetines, botones de radio, grficas
Pero no slo a estos, si no a otros objetos que conforman otros ms complejos. En una grfica
tenemos los ejes de coordenadas, los datos, la lnea que representa los datos, las leyendas,
etc.

M Cristina Naya Riveiro 123


Curso de iniciacin a MATLAB

BIBLIOGRAFA

Baillo Moreno, A., Gran Chvez, A. 100 Ejercicios resueltos de Estadstica Multivariante
(Implementados en MATLAB). Madrid: Delta Publicaciones, 2008. (Ofrece ejercicios
estadsticos interesantes y es una buena opcin para ver cmo trabaja MATLAB el anlisis
estadstico).
Carrera, A.R., Martnez, M. Introduccin a MATLAB y a la creacin de interfaces grficas.
Servicio Editorial de la Universidad de Pas Vasco, 2004. (Muy buena ayuda para grficos e
interfaces).
Gilat, A. Una introduccin con ejemplos prcticos. Editorial Revert, S.A, 2006. (Contiene
clculo simblico).
Higham, D.J., Higham, N.J. MATLAB guide. Society for Industrial and Applied Mathematics,
2000. (Un libro sobre MATLAB exhaustivo y con buenos ejemplos).
Lara Sotelo, S.I. Apoyos didcticos para la clase de comunicaciones con MATLAB. Trabajo
de investigacin de la Universidad Autnoma de Ciudad Jurez, 2010. (Contiene ejemplos
sencillos y bsicos para trabajar distintas seales de comunicacin).
Merino, M., Vadillo, F. Matemtica financiera con MATLAB. Revista de Mtodos
Cuantitativos para la Economa y la Empresa, 4 pp. 35-55, 2007.
Moore, H. MATLAB for engineers. Editorial Pearson, 2015. (Lo hay en la Escuela
Politcnica Superior, y est muy bien enfocado para trabajar las matemticas del
ingeniero).
Ortega Ruiz, M. MATLAB aplicado a las telecomunicaciones. Barcelona: Editorial
Marcombo, 2015. (Ejemplos de cmo utilizar MATLAB para la teora de la seal).
Quintela Estvez, P. Matemticas en ingeniera con MATLAB. Servicio de Publicacins da
Universidade de Santiago de Compostela, 2000. (Tiene ejemplos hechos en MATLAB y
adems est en castellano).
Souto, A., Bravo, J.L. Cantn, A., Gonzlez, M. Curso bsico de programacin en Matlab.
Editorial Tbar, S.L. 2013. (Muy fcil de leer y con multitud de ejemplos).
Prez, C. MATLAB a travs de ejemplos. Garceta grupo editorial, 2011. (Con contenidos
matemticos como derivadas, integrales, lmites, etc.).
The Math Works Inc. MATLAB, edicin de estudiante: versin 4. Prentice Hall, cop. 1996.
(Es el manual del programa en una versin ms antigua, pero ms que suficiente).

M Cristina Naya Riveiro 124

You might also like