Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Universidade da Coruña
Curso de iniciación
a MATLAB
Material de apoyo
CONTENIDO
1.5 Guardar variables y estados de una sesión: comandos save y load ................................ 39
5.12 Llamada a comandos del sistema operativo y a otras funciones externas ................... 103
7. Introducción al uso de interfaces gráficas de usuario (GUI) con MATLAB. .......................... 118
Bibliografía................................................................................................................................. 127
1.1 INTRODUCCIÓN
Es ampliamente usado por ingenieros y, científicos de todo el mundo para una gran variedad
de aplicaciones, tales como análisis y visualización de datos, modelización matemática,
desarrollo de algoritmos, procesamiento de señales y comunicaciones, procesamiento de
imagen y vídeo, sistemas de control, pruebas y medidas, finanzas computacionales, biología
computacional, posee además una extraordinaria versatilidad y capacidad para resolver
problemas en matemática aplicada, física, química, ingeniería, finanzas y muchas otras
aplicaciones. Está basado en un sofisticado software de matrices para el análisis de sistemas
de ecuaciones. Permite resolver complicados problemas numéricos sin necesidad de escribir
un programa. Por este motivo es usado en empresas líderes de ingeniería y ciencia, así como
el software estándar en más de 5000 universidades de todo el mundo.
MATLAB integra análisis numérico, cálculo matricial, proceso de señal y visualización gráfica
en un entorno completo donde los problemas y sus soluciones son expresados del mismo
modo en que se escribirían tradicionalmente, sin necesidad de hacer uso de la programación
tradicional.
MATLAB es un sistema de trabajo interactivo cuyo elemento básico de trabajo son las matrices.
El programa permite realizar de un modo rápido la resolución numérica de problemas en un
tiempo mucho menor que si se quisiesen resolver estos mismos problemas con lenguajes de
programación tradicionales como pueden ser los lenguajes Fortran, Basic o C. En cualquier
caso, el lenguaje de programación de MATLAB siempre es una magnífica herramienta de alto
nivel para desarrollar aplicaciones técnicas, fácil de utilizar y que, como ya se ha dicho,
aumenta significativamente la productividad de los programadores respecto a otros entornos de
desarrollo.
En estos apuntes se hará referencia exclusiva al código básico, donde todos los conceptos
estudiados y funciones dadas serán válidos para la gran mayoría de las versiones de
MATLAB.
MATLAB emplea matrices porque con ellas se puede describir infinidad de cosas de una forma
altamente flexible y matemáticamente eficiente. Una matriz de pixeles puede ser una imagen o
una película. Una matriz de fluctuaciones de una señal puede ser un sonido o una voz humana.
Y tal vez más significativamente, una matriz puede describir una relación lineal entre los
componentes de un modelo matemático. 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 avión a 40.000 pies de altura, o un filtro digital de procesamiento de
señales.
1.1.1.3 PLATAFORMAS
MATLAB está disponible para un amplio número 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.
También está disponible una plataforma móvil, MATLAB Mobile, que ofrece un escritorio ligero
para iPhone, iPad o dispositivos Android. Esta aplicación permite conectarse a una sesión 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 fácil de la sintaxis de MATLAB.
1.1.1.4 PRODUCTOS
MATLAB dispone de una versión para estudiantes MATLAB and Simulink Student Versión que
incluye la versión R2015b, y es compatible con Windows, Mac, y Linux. Esta versión estudiante
R2015b incluye además soporte integrado para prototipado, pruebas y ejecución de modelos
en plataformas hardware de bajo coste, tales como, Arduino, LEGO MINDSTORMS NXT,
1
Una computadora central o mainframe es una computadora grande, potente y costosa usada
principalmente por una gran compañía para el procesamiento de una gran cantidad de datos;
por ejemplo, para el procesamiento de transacciones bancarias.
El lenguaje MATLAB incluye operaciones vectoriales y matriciales que son fundamentales para
resolver problemas de ingeniería y científicos. Agiliza, tanto el desarrollo, como la ejecución.
Al mismo tiempo, MATLAB ofrece todas las características de los lenguajes de programación
tradicionales, que incluyen operadores aritméticos, control de flujo, estructuras de datos, tipos
de datos, gestión de errores y programación orientada a objetos (OOP).
Un algoritmo de comunicaciones que genera 1024 bits aleatorios, convierte el vector en una
señal transmitida, añade ruido gaussiano complejo y representa el resultado gráficamente, se
integra en MATLAB en sólo nueve líneas de código:
Figura 1
MATLAB posibilita ejecutar comandos o grupos de comandos de forma interactiva uno tras
otro, sin compilar ni enlazar, y repetir su ejecución hasta lograr la solución óptima
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
MATLAB permite gestionar, filtrar y preprocesar los datos como ya se ha comentado, pero
además es posible realizar análisis de datos exploratorios a fin de descubrir tendencias, probar
suposiciones y elaborar modelos descriptivos. MATLAB proporciona funciones para filtrado y
suavizado, interpolación, convolución y transformadas rápidas de Fourier (FFT). Los productos
complementarios proporcionan capacidades para ajuste de curvas o de superficies, estadística
multivariante, análisis espectral, análisis de imágenes, identificación de sistemas y otras tareas
de análisis. En resumen, MATLAB proporciona herramientas interactivas y funciones en línea
de comandos para operaciones de análisis de datos incluyendo:
• interpolación,
• extracción de secciones de datos, escalado y promediación,
• umbralación y suavizamiento,
• correlación, análisis de Fourier y filtraje,
• búsqueda de picos unidimensionales y ceros,
• estadística básica y ajuste de curvas,
• análisis matricial, etc.
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 más populares como Microsoft Excel, Texto ASCII o archivos binarios, imágenes,
archivos de sonido y video o archivos cintíficos 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 páginas 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 dinámicos
medidos directamente a MATLAB para su análisis y visualización También es posible
comunicarse con instrumentos tales como osciloscopios, generadores de funciones y
analizadores de señales.
Usando Data Acquisition Toolbox, puede medir datos directamente en MATLAB para análisis y
visualización. Instrument Control Toolbox permite la comunicación con hardware GPIB y VXI.
Todas las características gráficas que son requeridas para visualizar datos de ingeniería y
científicos están disponibles en MATLAB. Esto incluye funciones de representación de
diagramas bidimensionales y tridimensionales, visualización de volúmenes, herramientas para
crear graficas interactivamente y la posibilidad de exportar los resultados a todos los formatos
de gráficos más conocidos y usuales. Es posible personalizar las gráficas añadiendo múltiples
ejes, cambiando los colores de las líneas y marcadores, añadir anotaciones, ecuaciones en
LaTEX, leyendas y trazando formas.
Figura 6
Figura 7
MATLAB permite leer y escribir en diversos formatos de archivos de datos y de gráficos, como
GIF, JPEG, BMP, EPS, TIFF, PNG, HDF, AVI y PCX. Como resultado, puede exportar las
gráficas de MATLAB a otras aplicaciones como Microsoft Word® y Microsoft PowerPoint®, o
software de autoedición. Antes de exportar, puede crear y aplicar plantillas de estilo, que
contengan el diseño, los tipos de letra, la definición del grosor de las líneas, el fondo y la
escala, etc., necesarios para cumplir con las especificaciones para su publicación.
La galería de gráficos de MATLAB ofrece multitud de ejemplos para mostrar los datos de forma
gráfica en MATLAB. En cada ejemplo podrá ver y descargar el código fuente a fin de emplearlo
en su aplicación de MATLAB.
Por citar algunos ejemplos, MATLAB proporciona los siguientes tipos de funciones para
desarrollar las operaciones matemáticas y de análisis de datos:
MATLAB contiene una serie de funciones para documentar y compartir su trabajo. Puede
integrar su código en otros lenguajes y aplicaciones, desplegar algoritmos y aplicaciones de
MATLAB como programas independientes o módulos de software.
MATLAB permite exportar los resultados como gráficas o como informes completos. Puede
exportar las figuras a todos los formatos de gráficos más usados y conocidos para luego
importarlos a otros paquetes, como Microsoft Word o Microsoft PowerPoint. Usando el Editor
de MATLAB se puede, automáticamente, publicar el código MATLAB en HTML, Word, LaTEX y
otros formatos. Por ejemplo, en la Figura 8 se observa un programa de código M (izquierda)
publicado en HTML (derecha) usando MATLAB Editor. Los resultados, que se envían a la
ventana de comandos o a diagramas, se capturan e incluyen en el documento y los
comentarios se convierten en títulos 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 gráficos se capturan y se incluyen,
mientras que los comentarios sobre el código se convierten en títulos de sección y cuerpo de texto en HTML.
Extraída de: http://es.mathworks.com/products/matlab/features.html
Es posible crear informes más complejos, tales como ejecuciones simuladas y varias pruebas
En cuanto a la integración del código MATLAB con otros lenguajes y aplicaciones, MATLAB
proporciona funciones para integrar código C y C++, Fortran, Objetos COM y código 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 también llamar a MATLAB desde su código C,
C++ y Fortran.
Si desea compartir aplicaciones con personas que no disponen de MATLAB, puede utilizar
productos de distribución de aplicaciones. Estos productos complementarios generan de forma
automática aplicaciones autónomas, librerías compartidas y componentes de software para su
integración 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 código C
independiente a partir del código de MATLAB. MATLAB Coder admite un subconjunto del
lenguaje de MATLAB que suelen emplear los ingenieros de diseño para desarrollar algoritmos
a modo de componentes de sistemas más amplios. Este código se puede utilizar para la
ejecución autónoma, para la integración con otras aplicaciones de software o como parte de
MATLAB se puede arrancar como cualquier otra aplicación de Windows, clicando dos veces en
el icono correspondiente en el escritorio o por medio del menú Inicio. Al arrancar MATLAB se
abre una ventana similar a la mostrada en la Figura 10: escritorio de MATLAB.
Con el fin de ayudar a los usuarios, ya sean nuevos o experimentados, a navegar por las
capacidades en continua expansión de MATLAB, MathWorks ha actualizado el escritorio de
MATLAB desde la versión 2012b con dos mejoras principales:
Ésta es la vista que se obtiene eligiendo la opción Desktop Layout/Default, en el menú View en
versiones anteriores a 2012b, pero en el nuevo escritorio con vistas de pestañas, se va a la
pestaña de HOME, en el icono de Layout y Default. Como esta configuración puede ser
cambiada fácilmente por el usuario, es posible que en muchos casos concretos lo que
aparezca sea muy diferente.
En la parte superior izquierda de la pantalla (ver Figura 10) aparecen dos ventanas también
muy útiles: en la parte superior aparece la ventana Current Directory, que se puede alternar
con Workspace clicando en la pestaña correspondiente. La ventana Current Directory muestra
los ficheros del directorio activo o actual. El directorio activo se puede cambiar desde la
Command Window, o desde la propia ventana (o desde la barra de herramientas, debajo de la
barra de menús) con los métodos de navegación de directorios propios de Windows. Clicando
dos veces sobre alguno de los ficheros *.m del directorio activo se abre el editor de ficheros de
MATLAB, herramienta fundamental para la programación sobre la que se volverá en las
próximas páginas. El Workspace contiene información sobre todas las variables que se hayan
definido en esta sesión y permite ver y modificar las matrices con las que se esté trabajando.
En la parte inferior derecha (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 botón derecho
del ratón se muestra un menú contextual con las posibilidades disponibles en ese momento.
Para editar uno de estos comandos hay que copiarlo antes a la Command Window.
Figura 10: escritorio de MATLAB, la primera con la versión actual y la segunda con la versión anterior a la
2012b
mientras que la Figura 11 muestra las opciones de Start/Desktop Tools, que permiten el acceso
a las principales componentes o módulos de MATLAB. El menú Desktop realiza un papel
análogo al botón Start, dando acceso a los módulos o componentes de MATLAB que se tengan
instalados.
Estas funciones en la nueva versión se pueden obtener a partir de los iconos de la cinta de
herramientas en las distintas pestañas.
Puede hacerse que al arrancar MATLAB se ejecute automáticamente un fichero, de modo que
aparezca por ejemplo un saludo inicial personalizado. Esto se hace mediante un fichero de
comandos que se ejecuta de modo automático cada vez que se entra en el programa (el
fichero startup.m, que debe de estar en un fichero determinado, por ejemplo
C:\Matlal701\Work).
Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command Window se
pueden utilizar las funciones clc y home. La función clc (clear console) elimina todas las salidas
anteriores, mientras que home las mantiene, pero lleva el prompt (>> ) a la primera línea de la
ventana.
En la nueva versión 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 aplicación en Windows.
Veremos todas estas características con más detalle, en una próxima sección.
MATLAB dispone de un excelente Help con el que se puede encontrar la información que se
desee. Se puede obtener ayuda a través del botón Ayuda de la barra de iconos o a través de la
opción Help de la barra de menús, y a través 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 aplicación.
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 información general sobre MATLAB o sobre otros productos de la
familia a los que se tenga acceso. La forma de la ventana de ayuda es típica y común
con otros niveles de ayuda. La mayor parte de las páginas de ayuda están en formato
HTML.
Figura 15: Ventana inicial de Help Full Product Family Figura 14a: Ventana inicial de MATLAB Help
3. Using the Desktop. Se abre una ventana de ayuda con un formato similar a las de las
figuras anteriores con información detallada sobre cómo utilizar y configurar el entorno
de desarrollo o Desktop. Las distintas herramientas disponibles se describen
sucesivamente. Cada página dispone de flechas y enlaces que permiten ir a la página
siguiente o volver a la anterior. Es posible también imprimir aquellas páginas que se
desee consultar o archivar sobre papel. Una característica muy importante es la
posibilidad de organizar las ventanas con gran flexibilidad, agrupándolas o
independizándolas según los propios gustos o deseos.
4. Using the Command Window. Esta opción del menú Help da acceso a la información
necesaria para aprovechar las capacidades de la Command Window, que es el
corazón de MATLAB.
5. Web Resources. Muestra algunas direcciones de Internet con información interesante
sobre MATLAB. Todas ellas corresponden a distintas secciones de la web de The
Mathworks (la empresa que desarrolla y comercializa MATLAB), cuya página de inicio
se muestra en primer lugar. Además, en las últimas versiones ofrece Training de
ofertas de cursos de formación en MATLAB (ver Figura 16 o 13).
6. Check for Updates. MATLAB se conecta con The Mathworks y comprueba si hay
versiones más recientes de los productos instalados. Si se es un usuario registrado, es
posible descargar las versiones más actuales.
7. Licesing. Acceso a todo lo relacionado con la licencia del producto, actualizaciones,
activación/desactivación de software, etc.
Además, de una forma muy inmediata, es posible también recurrir al Help desde la línea de
comandos de la Command Window. Se aconseja practicar un poco al respecto. Por ejemplo,
obsérvese la respuesta a los siguientes usos del comando help:
>> help
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 específico o sobre cualquier tema del contenido utilizando el
comando help comando o help tema.
ventana que se abre se muestra una barra de menús, donde en la opción View, y luego Code
for …, permite acceder al código fuente si está disponible; con la opción Go to online doc for ...
se accede a una información más completa que puede incluir ejemplos y comandos similares
sobre los que también se ofrece ayuda. En la parte inferior de la página aparece una lista de
enlaces See Also a funciones relacionadas.
El comando doc tecleado en la línea de comandos equivale a Help/Full Product Family Help; si
va seguido de un nombre de comando o función se muestra la información detallada
correspondiente a ese comando de modo similar a Go to online doc for... en el párrafo anterior.
En resumen, MATLAB dispone de una ayuda muy completa y accesible, estructurada en varios
niveles (línea de comandos en la Command Window, ventana Help, y manuales en formato
PDF), con la que es muy importante estar familiarizado, porque hasta los más expertos
programadores tienen que acudir a ella con una cierta frecuencia.
Las componentes más importantes del entorno de trabajo de MATLAB son las siguientes:
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 pestaña
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 opción de dejar de alojar dicha ventana en el MATLAB Desktop (Undock Command
Window). Dicho menú permite también eliminar del Desktop alguna de las componentes
visibles o visualizar el Help (que no está visible). Con los submenús de Desktop Layout se
pueden adoptar algunas configuraciones predefinidas, como la configuración por defecto
(Default) o incluir sólo la Command Window. La configuración adoptada por el usuario se
mantendrá la siguiente vez que arranque el programa. Es posible también guardar distintas
configuraciones con distintos nombres, para su uso posterior.
Además del menú mostrado en la Figura 18b, que cambia en algunos detalles según cual sea
la ventana activa, el usuario puede configurar el MATLAB Desktop por medio del ratón
mediante algunas operaciones como las siguientes:
18d.
3. Si todas las ventanas se van seleccionando sucesivamente y se elige la
correspondiente opción Undock... en el menú View, se podría obtener una
configuración como la mostrada en la Figura 19a, en la que todas las ventanas son
independientes y aparecen separadas en la barra de tareas.
4. Finalmente, si se parte de la configuración por defecto y cada uno de los componentes
se arrastra sobre la Command Window se puede obtener una configuración como la
mostrada en la Figura 19b, en la que todos los componentes abiertos aparecen como
pestañas alternativas en una ventana única.
1. Cualquier entrada a ejecutar en MATLAB se escribe a la derecha del input del usuario
encabezado con el prompt “>>”·obteniéndose la respuesta en las líneas
inmediatamente inferiores. Después de la salida vuelve a aparecer el input de usuario
para introducir más 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 expresión 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
cálculos 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 programación, MATLAB es sensible a la diferencia entre
mayúsculas y minúsculas.
5. Los nombres de todas las funciones incorporadas empiezan con minúscula.
6. No debe haber espacios en los nombres de las órdenes, en símbolos de más de una
letra ni en los nombres de las funciones. En los demás casos, los espacios no se tienen
en cuenta. Se pueden poner algunos para hacer más legibles su input.
7. Se pueden realizar varias entradas en la misma línea de la ventana de comandos
separándolas 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 línea, se omite su
correspondiente salida.
8. Es posible introducir comentarios descriptivos en una línea de entrada de la ventana de
comandos iniciándolos con el signo “%”. Al ejecutar la entrada, MATLAB ignora la zona
de comentario y procesa el resto.
9. Para simplificar el proceso de introducción de comandos para ser evaluados por el
intérprete 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 carácter a la izquierda.
Flecha hacia la derecha (Ctrl-F) Lleva el cursor un carácter 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 línea.
Fin (Ctrl-E) Lleva el cursor al final de la línea actual.
Escape Borra la línea de comandos.
Supr (Ctrl-D) Borra el carácter indicado por el cursor.
Backspace Borra el carácter a la izquierda del cursor.
Ctrl-k Borra toda la línea 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 líneas de comandos muy largas que automáticamente siguen en la línea
siguiente al llegar al margen derecho de la ventana. Para ello hay que activar la opción
Wrap Lines, en el menú File/Preferences/Command Window.
12. Clicando con el botón derecho sobre el nombre de una función que aparezca en esta
ventana se tiene acceso a la página del Help sobre dicha función. Si el código fuente
(fichero *.m) está disponible, también se puede acceder al fichero correspondiente por
medio del Editor/ Debugger.
13. Comenzando a teclear el nombre de una función y pulsando la tecla Tab, MATLAB
completa automáticamente el nombre de la función, o bien muestra en la línea
siguiente todas las funciones disponibles que comienzan con las letras tecleadas por el
usuario.
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 línea del fichero fuente en la que se ha producido el error. Clicando en ese enlace
se va a la línea correspondiente del fichero por medio del Editor/Debugger.
La ventana Command History ofrece acceso a las sentencias que se han ejecutado
anteriormente en la Command Window. Estas sentencias están también accesibles por medio
de las teclas ↑ y ↓ como se ha comentado anteriormente, pero esta ventana facilita mucho el
tener una visión más general de lo hecho anteriormente y seleccionar lo que realmente se
desea repetir.
Las sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un doble clic o
por medio del menú contextual que se abre al clicar sobre ellas con el botón derecho. También
se pueden copiar y volcar sobre la línea de comandos, pero se ha de copiar toda la línea, sin
que se admita la copia de un fragmento de la sentencia. Existen opciones para borrar algunas
o todas las líneas de esta ventana. Se puede también hacer un profile (evaluar la eficiencia
relativa) de una sentencia o de un grupo de sentencias.
El comando pwd (de print working directory) permite saber cuál es el directorio actual. Para
cambiar de directorio actual se puede utilizar el comando cd (de change directory) en la línea
de comandos, seguido del nombre del directorio, para el cual se puede utilizar un path absoluto
(por ejemplo cd C:\MATLAB\Ejemplos) o relativo (cd Ejemplos). Para subir un nivel en la
jerarquía de directorios se utiliza el comando cd .., y cd ../.. para subir dos niveles. Éste es el
mismo sistema que se sigue para cambiar de directorio en las ventanas de MS-DOS. MATLAB
permite utilizar la barra normal (/) y la barra invertida (\), indistintamente.
La ventana Current Directory permite explorar los directorios del ordenador en forma análoga a
la del Explorador u otras aplicaciones de Windows. Cuando se llega al directorio deseado se
muestran los ficheros allí contenidos. La ventana Current Directory permite ordenarlos por
fecha, tamaño, nombre, etc. El directorio actual cambia automáticamente en función del
directorio seleccionado con este explorador, y también se puede cambiar desde la propia barra
de herramientas del MATLAB Desktop. Los ficheros *.m mostrados en la ventana Current
Directory se pueden abrir con el Editor/Debugger mediante un doble clic.
A partir del menú contextual que se abre clicando con el botón derecho en cualquier parte de la
ventana Current Directory se tiene la posibilidad de añadir ese directorio al Path de MATLAB.
MATLAB puede llamar a una gran variedad de funciones, tanto propias como programadas por
los usuarios. Puede incluso haber funciones distintas con el mismo nombre. Interesa saber
cuáles son las reglas que determinan qué función o qué fichero *.m es el que se va a ejecutar
cuando su nombre aparezca en una línea de comandos del programa. Esto queda determinado
por el camino de búsqueda (search path) que el programa utiliza cuando encuentra el nombre
de una función.
El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir de
la línea de comandos, o utilizando el cuadro de diálogo Set Path, del menú File. El comando
path hace que se escriba el search path de MATLAB (el resultado depende de en qué directorio
esté instalado MATLAB; se muestran sólo unas pocas líneas de la respuesta real del
programa):
>> path
>> path
MATLABPATH
C:\MATLAB701\toolbox\MATLAB\general
C:\MATLAB701\toolbox\MATLAB\ops
C:\MATLAB701\toolbox\MATLAB\lang
C:\MATLAB701\toolbox\MATLAB\elmat
...
C:\MATLAB701\toolbox\MATLAB\helptools
C:\MATLAB701\toolbox\MATLAB\winfun
C:\MATLAB701\toolbox\MATLAB\demos
C:\MATLAB701\toolbox\local
Para ver cómo se utiliza el search path supóngase que se utiliza la palabra nombre1 en un
comando. El proceso que sigue el programa para tratar de conocer qué es nombre1 es el
siguiente:
Estos pasos se realizan por el orden indicado. En cuanto se encuentra lo que se está buscando
se detiene la búsqueda y se utiliza el fichero que se ha encontrado. Conviene saber que, a
igualdad de nombre, los ficheros *.mex tienen precedencia sobre los ficheros *.m que están en
el mismo directorio.
El cuadro de diálogo que se abre con el comando File/Set Path ayuda a definir la lista de
directorios donde MATLAB debe buscar los ficheros de comandos y las funciones, tanto del
sistema como de usuario. Al ejecutar dicho comando aparece el cuadro de diálogo de la Figura
191a, en el cual se muestra la lista de directorios en la que MATLAB buscará. Para añadir (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 diálogo, mostrado en la Figura 20b, que
ayuda a elegir el directorio deseado. El nuevo directorio se añade al comienzo de la lista, pero
desde esa posición puede desplazarse hacia abajo o hasta el final con los botones Move Down
o Move to Botton, respectivamente. Como ya se ha dicho el orden de la lista es muy
importante, porque refleja el orden de la búsqueda: si dos funciones con el mismo nombre
están en dos directorios diferentes, se utilizará la que primero se encuentre. El cuadro de
diálogo Set Path contiene los botones necesarios para realizar todas las operaciones que el
usuario desee.
Para incluir desde la línea de comandos de MATLAB un directorio nuevo al comienzo del Path
sin utilizar el cuadro de diálogo Set Path, se puede utilizar también el comando path, que
concatena dos listas de directorios (sólo se deben utilizar directorios que realmente existan en
el PC), como, por ejemplo:
mientras que para añadir el nuevo directorio al final de la lista, se utilizaría el comando:
El comando addpath permite añadir uno o más directorios al Path. Su forma general puede
verse en los siguientes ejemplos:
donde la opción por defecto (cuando no se pone ni –begin ni –end) es añadir al comienzo de la
lista. Después de ejecutar estos comandos conviene comprobar cómo ha quedado modificado
el search path (recuérdese que los directorios deben existir en realidad).
2
El comando path dentro del paréntesis de la función devuelve la lista de directorios anterior.
No es difícil borrar las líneas que se han introducido en el Path: por una parte, los cambios no
son permanentes y dejarán de surtir efecto al salir de MATLAB y volver a entrar (salvo que se
guarden como opciones estables). También, 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:
>> whos
Éstas son las variables del espacio de trabajo base (el de la línea de comandos de MATLAB).
Más adelante se verá que cada función tiene su propio espacio de trabajo, con variables cuyos
nombres no interfieren con las variables de los otros espacios de trabajo.
La ventana Workspace constituye un entorno gráfico para ver las variables definidas en el
espacio de trabajo. Se activa con el comando View/Workspace. La Figura 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 pestaña,
si la ventana ya existía) del Array Editor, en la que se muestran y pueden ser modificados los
elementos de dicha matriz (ver Figura 21b).
Es importante insistir en que cada una de las funciones de MATLAB tiene su propio espacio de
trabajo, al que en principio sólo pertenecen las variables recibidas como argumentos o
definidas dentro de la propia función. En la barra de herramientas de la ventana Workspace
aparece una lista desplegable llamada Stack, con los espacios de trabajo del programa actual.
Hay que tener en cuenta que cuando se termina de ejecutar una función y se devuelve el
control al programa que la había llamado, las variables definidas en la función dejan de existir
(salvo que se hayan declarado como persistentes) y también deja de existir su espacio de
trabajo.
Si se desean examinar otras matrices y/o vectores, al hacer doble clic sobre ellas el Array
Editor las muestra en la misma ventana como subventanas con una pestaña diferente.
Clicando con el botón derecho sobre alguna de las variables del Workspace Browser se abre
un menú contextual que ofrece algunas posibilidades interesantes, como por ejemplo la de
representar gráficamente dicha variable.
El Array Editor no sólo permite ver los valores de los elementos de cualquier matriz o vector
definido en el programa: es también posible modificar estos valores clicando sobre la celda
correspondiente. La ventana del Array Editor incluye una lista desplegable en la que se puede
elegir el formato en el que se desea ver los datos.
El Array Editor es muy útil también para entender bien ciertos algoritmos, ejecutando paso a
paso un programa y viendo cómo cambian los valores de las distintas variables. Es posible
aparcar o situar las ventanas o pestañas del Array Editor en la misma ventana del
Editor/Debugger, que se va a ver a continuación.
En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files). Son ficheros de
texto ASCII, con la extensión *.m, que contienen conjuntos de comandos o definición de
funciones (estos últimos son un poco más complicados y se verán más adelante). La
importancia de estos ficheros-M es que al teclear su nombre en la línea de comandos y pulsar
Intro, se ejecutan uno tras otro todos los comandos contenidos en dicho fichero. El poder
guardar instrucciones y grandes matrices en un fichero permite ahorrar mucho trabajo de
tecleado.
Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal como
Notepad, MATLAB dispone de un editor que permite tanto crear y modificar estos ficheros,
como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuración).
La Figura 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:
clear all;
A=rand(3,3);
B=A';
C=inv(A);
El Editor muestra con diferentes colores los diferentes tipos o elementos constitutivos de los
comandos (en verde los comentarios, en violeta las cadenas de caracteres, etc.). El Editor se
preocupa también de que las comillas o paréntesis que se abren, no se queden sin el
correspondiente elemento de cierre. Colocando el cursor antes o después de una apertura o
cierre de corchete o paréntesis y pulsando las teclas (←) o (→), el Editor muestra con qué
cierre o apertura de corchete o paréntesis se empareja el elemento considerado; si no se
empareja con ninguno, aparece con una rayita de tachado.
Seleccionando varias líneas y clicando con el botón derecho aparece un menú contextual cuya
sentencia Comment permite entre otras cosas comentar con el carácter % todas las líneas
seleccionadas. Estos comentarios pueden volver a su condición de código ejecutable
seleccionándolos y ejecutando Uncomment en el menú contextual. Otra opción muy útil de ese
menú contextual es Smart Indent, que organiza el sangrado de los bucles y bifurcaciones de
las sentencias seleccionadas.
En la Figura 22 puede apreciarse también que están activados los botones que corresponden
al Debugger. El significado de estos botones, que aparece al colocar sobre ellos el cursor, es el
siguiente:
Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero.
Step. Avanzar un paso sin entrar en las funciones de usuario llamadas en esa línea.
Step In. Avanzar un paso, y si en ese paso hay una llamada a una función cuyo fichero
*.m está accesible, entra en dicha función.
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
son diferentes.
El Debugger es un programa que hay que conocer muy bien, pues es muy útil para detectar y
corregir errores. Es también enormemente útil para aprender métodos numéricos y técnicas de
programación. Para aprender a manejar el Debugger lo mejor es practicar.
Figura 23
1.2.8 EL PROFILER
APPS DE MATLAB
MATLAB dispone de un cuadro de diálogo desde el que se establecen casi todas las opciones
que el usuario puede determinar por su cuenta. Este cuadro de diálogo se abre con el icono
Preferences del menú mostrando todas las posibilidades que ofrece en el menú de la izquierda:
en total son 24 cuadros de diálogo diferentes. La Figura 24b muestra el que permite elegir los
colores generales del código.
Respecto a los formatos numéricos con que MATLAB muestra los resultados (recuérdese que
siempre calcula con doble precisión, es decir con unas 16 cifras decimales equivalentes), las
posibilidades existentes se muestran en la lista desplegable de la Figura 25a y son las
siguientes:
Por otra parte, el formato loose introduce algunas líneas en blanco en la salida (opción por
defecto), mientras que el formato compact elimina las líneas en blanco citadas. Estas opciones
están disponibles en el cuadro de diálogo de la Figura 25a y se pueden también establecer
desde la línea de comandos en la forma:
El cuadro de diálogo 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 automático
al ejecutarlos con el Debugger.
MATLAB aplica un factor de escala general a las matrices cuando los elementos no enteros
más grandes o más pequeños son superiores o inferiores a una determinada cantidad (103 y
10–3, respectivamente).
Hay que añadir que MATLAB trata de mantener el formato de los números que han sido
definidos como enteros (sin punto decimal). Si se elige la opción format rational el programa
trata de expresar los números racionales como cocientes de enteros.
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 también otros parámetros
de inicialización y es, por ejemplo, el responsable de los mensajes que aparecen al arrancar el
programa. Este fichero se ejecuta automáticamente al arrancar MATLAB.
Un posible contenido de este fichero puede ser el siguiente (crearlo con el Editor/Debugger):
>> disp('¡Hola!')
En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo
recuperar más tarde en el mismo punto en el que se dejó (con las mismas variables definidas,
con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del
programa todo el contenido de la memoria se borra automáticamente.
Para guardar el estado de una sesión de trabajo existe el comando save. Si se teclea:
>> save
>> load
Esta es la forma más básica de los comandos save y load. Se pueden guardar también
matrices y vectores de forma selectiva y en ficheros con nombre especificado por el usuario.
Por ejemplo, el comando (sin comas entre los nombres de variables):
Si no se indica ninguna variable, se guardan todas las variables creadas en esa sesión.
>> save -ascii -double -tab % almacena 16 cifras separadas por tabs
aunque en formato ASCII sólo se guardan los valores y no otra información tal como los
nombres de las matrices y/o vectores. Cuando se recuperan estos ficheros con load -ascii toda
la información se guarda en una única matriz con el nombre del fichero. Esto produce un error
cuando no todas las filas tienen el mismo número de elementos.
El comando load admite las opciones -ascii y -mat, para obligarle a leer en formato ASCII o
binario, respectivamente.
Los comandos save y load crean ficheros binarios o ASCII con el estado de la sesión. Existe
otra forma más sencilla de almacenar en un fichero un texto que describa lo que el programa
va haciendo (la entrada y salida de los comandos utilizados). Esto se hace con el comando
diary en la forma siguiente:
...
...
>> diary on
...
El comando diary off suspende la ejecución de diary y diary on la reanuda. El simple comando
diary pasa de on a off y viceversa. Para poder acceder al fichero filename.txt con Notepad o
Word es necesario que diary esté en off. Si en el comando diary no se incluye el nombre del
fichero se utiliza por defecto un fichero llamado diary (sin extensión).
Ya se ha indicado que para MATLAB el carácter tanto por ciento (%) indica comienzo de
comentario. Cuando aparece en una línea de comandos, el programa supone que todo lo que
va desde ese carácter hasta el fin de la línea es un comentario.
Más adelante se verá que los comentarios de los ficheros *.m tienen algunas peculiaridades
importantes, pues pueden servir para definir help's personalizados de las funciones que el
usuario vaya creando.
Otra forma de comentar bloques de sentencias (similar a la utilizada en C/C++ con /* y */) es
encerrar las líneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques
comentados pueden incluirse dentro de otros bloques comentados más amplios (bloques
anidados).
MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones
matemáticas realizadas. Algunas de estas funciones son las siguientes:
etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (¡atención al orden!), obtenidos
como respuesta al comando clock.
tic ops toc imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj
a cero y toc obtiene el tiempo transcurrido.
A modo de ejemplo, el siguiente código mide de varias formas el tiempo necesario para
resolver un sistema de 1000 ecuaciones con 1000 incógnitas. Téngase en cuenta que los
tiempos pequeños (del orden de las décimas o centésimas de segundo), no se pueden medir
con gran precisión.
donde se han puesto varias sentencias en la misma línea para que se ejecuten todas sin
tiempos muertos al pulsar intro. Esto es especialmente importante en la línea de comandos en
la que se quiere medir los tiempos. Todas las sentencias de cálculos matriciales van seguidas
de punto y coma (;) con objeto de evitar la impresión de resultados. Conviene ejecutar dos o
tres veces cada sentencia para obtener tiempos óptimos, ya que la primera vez que se
ejecutan se emplea un cierto tiempo en cargar las funciones a memoria.
Práctica:
La utilización más básica de MATLAB es su uso como calculadora, que funciona de una forma
similar que una calculadora programable, aunque bastante más versátil.
Los elementos básicos del MATLAB, como en cualquier otro lenguaje de programación son:
constantes, operaciones, variables, expresiones y funciones.
2.1.1 CONSTANTES
Una constante numérica es cualquier número que se utiliza en un cálculo sin que experimente
variación durante una sesión de trabajo. Al igual que en cálculo elemental tendremos tres tipos
de números y, por lo tanto, tres tipos de constantes:
En MATLAB las variables i y j están predefinidas como √−1. Como veremos el signo de
la multiplicación en MATLAB es *; sin embargo, en la escritura de los números
complejos no es preciso poner este signo antes del complejo i.
2.1.2 OPERACIONES
El orden en que estas operaciones se evalúan en una expresión está dado por la siguiente ley
de precedencia:
Se pueden usar paréntesis para alterar esta usual ordenación, en cuyo caso la evaluación se
inicia dentro del paréntesis más interno y se procede hacia fuera.
Ejercicio:
i. 3^2+1-2/2*4
ii. (3^2+1-2)/2*4
iii. 3^(2+1)-2/(2*4)
Una variable es la etiqueta que identifica una porción de memoria; en ella podemos guardar
datos de un mismo tipo, números o caracteres, recuperables y modificables durante la vida de
la variable en la sesión de trabajo, sin más que hacer referencia a su nombre. Es decir, es un
nombre que se le da a una entidad numérica o carácter, que puede ser una matriz, un vector o
un escalar. El valor de esa variable, e incluso el tipo de entidad numérica o carácter que
representa, puede cambiar a lo largo de una sesión de MATLAB o a lo largo de la ejecución de
un programa. La forma más normal de cambiar el valor de una variable es colocándola a la
izquierda del operador de asignación (=). 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 apóstrofos o comillas simples s = 'cadena de
caracteres'.
definidas, relacionados todos ellos por operadores aritméticos. Se permite utilizar espacios en
blanco para separar las unidades básicas de la expresión, mejorando su presentación y lectura
posterior.
Una expresión de MATLAB puede tener las dos formas siguientes: primero, asignando su
resultado a una variable,
variable = expresión
expresión
>> 4*a-6/b+c
ans =
18.1212
Se considera por defecto que una expresión termina cuando se pulsa intro. Si se desea que
una expresión continúe en la línea siguiente, 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
También se pueden incluir varias expresiones en una misma línea separándolas por comas (,)
o puntos y comas (;).
La ventaja de usar variables en las expresiones es que permite guardar todas las cifras
significativas de los cálculos intermedios, teniendo por tanto una mayor precisión en el
resultado final y una mayor comodidad.
Si una expresión termina en punto y coma (;) su resultado se calcula, pero no se escribe en
pantalla. Esta posibilidad es muy interesante, tanto para evitar la escritura de resultados
intermedios, como para evitar la impresión de grandes cantidades de números cuando se
trabaja con matrices de gran tamaño.
Los nombres de variables deben empezar siempre por una letra y pueden constar de hasta
63 caracteres, que pueden ser letras y números. No pueden utilizarse para nombrar variables
los caracteres especiales siguientes:
El carácter guion bajo (_) se considera como una letra. La función namelengthmax permite
preguntar al programa por este número máximo de caracteres. A diferencia de otros lenguajes
de programación, MATLAB no requiere ningún tipo de declaración de las variables que se
vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres
erróneos en las variables, porque no se recibirá ningún aviso del ordenador.
Cuando se quiere tener una relación de las variables que se han utilizado en una sesión de
trabajo se puede utilizar el comando who.
>> who
a c temperatura
b nombre volumen
Existe otro comando llamado whos que proporciona además información sobre el tamaño o
dimensión, la cantidad de memoria ocupada y el carácter real o complejo de cada variable.
>> whos
Name Size Bytes Class
Se sugiere utilizar de vez en cuando estos comandos en la sesión de MATLAB que se tiene
abierta. Esta misma información se puede obtener gráficamente con el Workspace Browser, que
aparece con el comando View/Workspace o activando la ventana correspondiente si estaba
abierto.
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 sesión de trabajo y, así, optimizar los recursos de la memoria.
La ejecución de una sentencia puede abortarse pulsando simultáneamente las teclas Control y
C.
Cualquier comentario que desee introducirse para facilitar posteriores lecturas de los comandos
ejecutados, puede incluirse en una línea suelta, o a continuación de una expresión; tan sólo
debe ir precedido por “%”. Por ejemplo:
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
aritméticas, que contiene la respuesta (answer) del ´ultimo comando ejecutado, cuando
el resultado de dicho comando no se asigna explíıcitamente a ninguna variable.
eps: número más pequeño que, añadido a otro, crea un nuevo número en coma
flotante3 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 operación se
0 ∞
produce una indeterminación, 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 cáculo 3/Inf (que matemáticamente carece de sentido) el
programa se sigue ejecutando tomando para tal expresión el valor cero y dificultando
posteriormente la identificación del error correspondiente.
date: toma el valor de la fecha actual.
clock: da un vector de 6 elementos que contiene como coordenadas el año, el mes, el
día, 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 número entre 0 y 1.
3
La representación de coma flotante, es una forma de notación científica usada en los CPU,
GPU, FPU, etc, con la cual se pueden representar números reales extremadamente grandes y
pequeños de una manera muy eficiente y compacta, y con la que se pueden realizar
operaciones aritméticas.
>> rand
ans =
0.9501
>> rand
ans =
0.2311
realmin: el menor número positivo utilizable.
realmax: el mayor número positivo utilizable.
>> realmin
ans =
2.2251e-308
>> realmax
ans =
1.7977e+308
flops: número de operaciones en punto flotante realizadas hasta el momento.
Por defecto, si solicitamos el valor de una variable sólo se nos informa de cinco cifras
significativas, correspondientes a la visualización en formato corto. Para cambiar este número
tecleamos el comando:
Que nos ofrece 14 cifras significativas. Para volver al formato corte es preciso teclear:
>> format
o bien:
Si deseamos que nos exprese en formato corto y en notación exponencial el valor de las
variables, debemos usar el comando:
De la misma forma,
Nos da una aproximación racional, es decir en forma de fracción, del valor de las variables que
se soliciten a continuación.
Cuando se sale de MATLAB, se pierden todas las variables. Para evitarlo se puede utilizar la
instrucción 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 instrucción load.
Sin embargo, para realizar estas tareas es necesario disponer del módulo MATLAB Symbolic
Math Toolbox. Para que una variable o expresión algebraica sea simbólica, previamente hay
que declararla como tal con el comando syms, con el comando sym o introduciéndola entre
comillas. Ejemplo:
>> syms x y
>> x+x-6*y
ans =
2*x-5*y
>> y=sym(‘x’)
nombre(argumento)
donde nombre identifica la función a utilizar y argumento el punto donde queremos evaluarla.
Existen numerosas funciones intrínsecas ya definidas en MATLAB, y es precisamente aquí
donde radica la gran potencia de este problema. En su nombre sólo intervienen letras
minúsculas. Enumeramos a continuación algunas de ellas:
En todas las funciones intrínsecas, el argumento debe ir entre paréntesis y puede ser una
constante, una variable ya definida anteriormente o una expresión.
En las funciones trigonométricas el ángulo debe darse en radianes. Por tanto, si conocemos el
ángulo en grados debe convertirse previamente a radianes. MATLAB no proporciona función
alguna que transforme grados a radianes.
MATLAB incorpora funciones que permiten trabajar con límites, sucesiones, derivadas o
integrales. Veremos unos ejemplos sencillos para trabajar estos conceptos matemáticos.
2.2.1 LÍMITES
MATLAB contiene funciones que permiten trabajar con límites y límites laterales de una manera
muy simple. Esto posibilita el análisis del estudio de la continuidad y derivabilidad de funciones,
así como analizar el carácter de las series numéricas y de las series de potencias. Algunos
ejemplos son:
>> 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 numéricas, tanto de términos positivos como alternados.
>> syms x
f=exp(x^2);
>> pretty(taylor(f))
4 2
x/2 + x + 1
>> pretty(taylor(f,3,x,2))
2.2.3 DERIVADAS
MATLAB permite trabajar con derivadas a través de un grupo de comandos que habilita
especialmente para esta tarea. Algunos ejemplos son:
2.2.4 INTEGRALES
>> 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
Práctica:
3.1 VECTORES
El tratamiento que el paquete MATLAB hace de los vectores, también llamados arrays,
simplifica considerablemente la resolución de problemas básicos como pueden ser la
representación gráfica de funciones, el tratamiento estadístico de datos, etc.
Al igual que en cálculo elemental, distinguiremos entre vectores fila y vectores columna.
>> v=[4 -6 5]
v=
4 -6 5
v=
4 -6 5
w=
0 -6
w=
4 -6
w=
4 -6 5
subvector_w=w(i:j)
v=[a:h:b] Define un vector “fila” cuyo primer elemento es a y los demás elementos
aumentan de h en h sin superar b .
v=[a:b] Define un vector “fila” cuyo primer elemento es a y los demás 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 logarítmicamente espaciados entre
10a y 10b. Si se omite el valor de n, se toma 50.
Por ejemplo,
>> u=linspace(-4,7,6)
u=
v=
-4 -2 0 2 4 6
w=
-4 -3 -2 -1 0 1 2 3 4 5 6 7
>> length(nombre_vector)
>> size(nombre_vector)
En general, se introducen como los vectores “fila”, separando las filas por un punto y coma:
>> b=[0;1;-5]
b=
-5
Las operaciones entre escalares y vectores son directas. Desde el punto de vista teórico, 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 añadirá 2 a cada componente del vector.
El “.” Indica que trabajaremos con los vectores componente a componente, no en el sentido
usual del álgebra lineal.
>> y=1:5
>> y+2
>> y-2
>> 2*y
>> y/2
Por supuesto, estas operaciones son igualmente válidas para vectores columna.
>> w=(1:3:20)’
>> w+3
>> w-11
>> .1*w
>> w/10
>> a=1:3
>> b=4:6
>> a,b,a+b
>> a,b,a-b
>> 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 dimensión, entonces admiten el comando v*w que calcula el producto escalar de
ambos.
>> a=(1:3)’,b=(4:6)’
>> a,b,a.*b
>> a,b,a./b
>> a,a.^2
>> x=1:10
>> y=x.^2-2*x-3
Supóngase ahora que se quiere evaluar la expresión sen(x)/x para valores de x entre −1 y 1
>> x=-1:.1:1
>> y=sin(x)./x
>> xdata=(1:10)’
>> xdata.^2
Las funciones MATLAB pueden devolver un número variable de resultados. Cuando una
función tiene, en su definición, más de un argumento de salida, puede ser utilizada de varias
formas. La función max nos proporciona un ejemplo:
>> max(v)
MATLAB nos devolverá el máximo valor de entre las componentes del vector v
- si la utilizamos en la forma:
>> [m,k]=max(v)
Hay otras funciones que también pueden tener un número variable de argumentos de entrada:
por ejemplo la función norm tiene distinto comportamiento según la llamemos con un solo
argumento (norm(v)) o con dos argumentos (norm(v,p)).
>> v=[1,2,4,-5,0,-1];
>> sum(v)
ans =1
>> max(v)
ans =4
>> [m,k]=max(abs(v))
m =5
k =4
>> sqrt(sum(v.^2))
ans =6.8557
Práctica:
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
3.2 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 línea.
A=
123
456
789
Las componentes de una matriz se designan mediante los números de sus subíndices.
>> A(1,3)
ans =
ans =
123
ans =
ans =
23
56
Las matrices pueden también utilizarse como argumento de las funciones intrínsecas. Algunas
funciones específicas para manejo de matrices son:
>> diag([1,2,3,1])
ans =
1000
0200
0030
0001
>> eye(3,3)+diag([-1,-1],1)
ans =
1 -1 0
0 1 -1
001
[A,B] es la matriz (A B)
[A;B] es la matriz (A B) transpuesta (columna)
[ ] representa la matriz “vacía” (0x0)
A(:,3)=[] elimina la tercera columna de la matriz A
A(1,:)=[] elimina la primera fila de A
Ejemplo
>> A
A=
100
020
000
004
>> A(1,:)=[]
A=
020
000
004
Las matrices que tienen un gran número de elementos nulos se conocen como matrices
dispersas o huecas. MATLAB dispone de un sistema especial de almacenamiento y
manipulación de matrices huecas.
La función
>> sparse(i,j,c,m,n)
dónde:
Esta función genera una matriz hueca de dimensión nxm, cuyos únicos elementos no nulos
son los de subíndices (i(k),j(k)), de valor c(k)
Por ejemplo:
>> 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
Las operaciones entre matrices pueden también realizarse entre matrices huecas.
>> 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=
(1,1) 1
(1,3) 2
(2,2) -1
(3,4) 3
(4,1) 4
Práctica:
3.3 POLINOMIOS
Un polinomio de grado n se representa en MATLAB por un vector fila de dimensión 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:
roots(p) Calcula las raíces 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
raíces. Se obtiene normalizado y puede ser de coeficientes complejos.
poly(A) Si A es una matriz cuadrada, es el polinomio característico.
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) División 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 mínimo error cuadrático medio.
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
ans=
1 0 -1 -24 -24
>> polyder(p)
ans =
12 15 0 1
Práctica:
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
Práctica:
6 18 2
1. Se considera la matriz A= 7
2 4
4 10 6
Los caracteres de una cadena se almacenan en un vector, con un carácter por elemento. Cada
carácter ocupa dos bytes. Las cadenas de caracteres van entre apóstrofos o comillas simples,
como, por ejemplo: 'cadena'. Si la cadena debe contener comillas, éstas se representan por un
doble carácter comilla, de modo que se pueden distinguir fácilmente del principio y final de la
cadena. Por ejemplo, para escribir la cadena ‘ni idea' se escribiría “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 número de elementos. Si es preciso, las cadenas (filas) más cortas se completan con
blancos.
>> c='cadena'
c=
cadena
ans =
1 6
ans =
ans =
cadena
cc =
más
madera
ans =
2 6
Las funciones más importantes para manejo de cadenas de caracteres son las siguientes:
isletter() detecta si un carácter 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 carácter 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) comparación 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 mayúsculas y
minúsculas,
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara
dos cadenas carácter a carácter. Devuelve un vector o matriz de unos y ceros,
s=[s,' y más'] concatena cadenas, añadiendo la segunda a continuación de la primera,
findstr(c1,c2) devuelve un vector con las posiciones iniciales de todas las veces en que
la cadena más corta aparece en la más 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 número entero en cadena de caracteres,
num2str(x,n) convierte un número real x en su expresión por medio de una cadena de
caracteres, con cuatro cifras decimales por defecto (pueden especificarse más cifras,
con un argumento opcional n),
str2double(str) convierte una cadena de caracteres representando un número real en el
número 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 función char() realiza las
conversiones opuestas,
sprintf convierte valores numéricos en cadenas de caracteres.
Con las funciones anteriores se dispone en MATLAB de una amplia gama de posibilidades
para trabajar con cadenas de caracteres.
ans =3.142
>> num2str(pi,8)
ans =3.1415927
Es habitual convertir los valores numéricos en cadenas de caracteres para poder imprimirlos
como títulos en los dibujos o gráficos. Véase el siguiente ejemplo:
3.5.2 HIPERMATRICES
Son arrays de más de dos dimensiones, es decir con matrices de más de dos dimensiones (por
ejemplo, ver en la figura una hipermatriz de tres dimensiones).
Una posible aplicación es almacenar con un único nombre distintas matrices del mismo tamaño
(resulta una hipermatriz de 3 dimensiones). Los elementos de una hipermatriz pueden ser
números, caracteres, estructuras, y vectores o matrices de celdas. El tercer subíndice
representa la tercera dimensión: la “profundidad” de la hipermatriz.
AA =
123
456
AA(:,:,1) =
123
456
AA(:,:,2) =
234
567
Algunas funciones de MATLAB para generar matrices admiten más de dos subíndices y
pueden ser utilizadas para generar hipermatrices. Entre ellas están rand(), randn(), zeros() y
ones(). Por ejemplo, véase la siguiente sentencia y su resultado:
>> BB=randn(2,3,2)
BB(:,:,1) =
BB(:,:,2) =
La función cat() permite concatenar matrices según las distintas “dimensiones”, como puede
verse en el siguiente ejemplo:
A(i,j,k)
>> cat(1,A,B)
ans =
000
000
111
111
>> cat(2,A,B)
ans =
000111
000111
>> cat(3,A,B)
ans(:,:,1) =
000
000
ans(:,:,2) =
111
111
Respecto al resto de las funciones de MATLAB, se pueden establecer las siguientes reglas
para su aplicación 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 también se aplican de la misma manera.
2. Las funciones que operan sobre vectores (sum(), max(), etc.) se aplican a matrices e
hipermatrices según la primera dimensión, resultando un array de una dimensión
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 agrupación 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
número).
Una posible forma de hacerlo es crear uno a uno los distintos campos, como en el ejemplo
siguiente:
>> 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).
También puede crearse la estructura por medio de la función struct(), como por ejemplo,
al =
nombre: 'Ignacio'
carnet: 76589
Los nombres de los campos se pasan a la función struct() entre apóstrofos ('), seguidos del
valor que se les quiere dar. Este valor puede ser la cadena vacía ('') o la matriz vacía ([]).
crea un vector de 10 elementos cada uno de los cuales es una estructura tipo alumno. Sólo el
elemento 10 del vector es inicializado con los argumentos de la función struct(); el resto de los
campos se inicializan con una cadena vacía o una matriz vacía4. Para dar valor a los campos
de los elementos restantes se puede utilizar un bucle for con sentencias del tipo:
MATLAB permite añadir un nuevo campo a una estructura en cualquier momento. La siguiente
sentencia añade el campo edad a todos los elementos del vector alum, aunque sólo 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.
>> alum.edad
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 más 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 =
curso: 'primero'
grupo: 'A'
>> clase.alum(2).nombre='María';
>> clase.alum(2).edad=17;
>> clase.alum(2)
ans =
nombre: 'María'
edad: 17
>> clase.alum(1)
ans =
nombre: 'Juan'
edad: 19
Las estructuras se generalizan con las clases y los objetos, que no se verán en este manual.
Obsérvese por ejemplo cómo se crea, utilizando llaves {}, el siguiente vector de celdas,
vc =
[1x3 double]
vc =
>> vc(3)={rand(3,3)}
vc =
Es importante que el nombre del vector de celdas vc no haya sido utilizado previamente para
otra variable (si así fuera, se obtendría un error). Si es preciso se utiliza el comando clear.
Obsérvese que para crear un vector de celdas los valores asignados a cada elemento se han
definido entre llaves {...}.
Otra nomenclatura alternativa y similar, que también utiliza llaves, es la que se muestra a
continuación:
>> vb{1}=[1 2 3]
vb =
[1x3 double]
vb =
>> vb{3}=rand(3,3)
vb =
MATLAB dispone de las siguientes funciones para trabajar con cell arrays:
El siguiente ejemplo convierte el cell array vcc creado previamente en una estructura ST cuyos
campos se pasan como argumentos a la función cell2struct(). El tercer argumento (un 2) indica
que es la segunda dimensión del cell array (las columnas) la que va a dar origen a los campos
de la estructura.
>> ST=cell2struct(vb,{'vector','cadena','matriz'},2)
ST =
vector: [1 2 3]
>> vbb = struct2cell(ST)' % hay que transponer para obtener una fila
vbb =
La gran ventaja de las estructuras y los arrays de celdas es que proporcionan una gran
flexibilidad para el almacenamiento de los más diversos tipos de información. El inconveniente
es que se pierde parte de la eficiencia que MATLAB tiene trabajando con vectores y matrices.
Los comandos que se presentan en este apartado son funciones MATLAB “fáciles de usar”
(easy-touse) para representar gráficamente, de forma rápida, funciones definidas por una
expresión matemática. Tienen sólo un pequeño número de parámetros que se pueden
especificar. Todas ellas hacen uso de otras funciones MATLAB que disponen de un número
superior de opciones y parámetros que podemos modificar. Cuando se necesite hacer gráficas
de funciones que no vienen definidas por una fórmula (definidas a trozos, definidas a través de
programas o por sus valores en un número finito de puntos, …) habrá que recurrir a dichas
funciones más generales.
El comando más fácil de usar de que dispone MATLAB para dibujar curvas planas definidas
por una fórmula matemática (no por un conjunto de valores) es el comando ezplot, que puede
ser usado de varias formas.
Ejemplo:
>> ezplot('2*sin(x/2)*cos(3*x)')
>>f=’sol’;
Ejemplo:
>> ezplot('2*sin(x/2)*cos(3*x)',[0,pi/2])
Práctica:
y2=cos(3π x)/ex
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 paramétricas
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(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 paramétricas 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 rectángulo [a,b]x[c,d] en el tercer caso
Ejemplo:
>> ezmesh('s*cos(t)','s*sin(t)','t',[- pi,pi])
z=f(x,y).
Ejemplo:
>> ezcontour('x*exp(-x^2 - y^2)')
Vamos a ver algunos comandos que modifican el aspecto de un gráfico. Veremos su efecto
sobre la gráfica. No se exponen todas las posibilidades de estos comandos. Utilizando el help
de MATLAB, se pueden ver el resto de las opciones.
Dado el gráfico siguiente, veremos cómo varía según las diferentes opciones que añadamos:
grid on / grid off añade / elimina las cuadrículas sobre los ejes actuales.
title(‘Título de la gráfica’)
axis on / axis off: activa / desactiva todos los etiquetados de los ejes.
axis equal determina los mismos factores de escala para todos los ejes
hold on
...
hold off
Todas las órdenes de dibujo entre ambos comandos se ejecutan sobre la misma
ventana gráfica, sin borrar lo anterior.
figure
figure(h)
Crea una nueva ventana gráfica, la activa y la trae al frente, delante de todas las
ventanas abiertas.
En el primer caso le asigna un número de forma automática.
En el segundo caso le asigna el número h, es decir, el nombre “Figure No. h”
subplot(m,n,p) Este comando permite dividir la ventana gráfica en una matriz mxn de
subventanas gráficas, activando para dibujar la p-ésima de ellas. Ver ejemplo siguiente:
>> subplot(2,2,1); ezcontour('x*exp(-x^2 - y^2)');
Vemos aquí los comandos más completos de que dispone MATLAB para dibujar curvas planas
y en el espacio, superficies, líneas de nivel, etc.
plot(x,y) Si x e y son dos vectores de la misma dimensión, n, dibuja una curva (lineal a trozos)
que pasa por los puntos (xi , yi), i=1,… n. Es decir, reproduce la gráfica de las componentes de
un vector frente a las componentes de otro vector, y para ello ambos vectores deben tener la
misma dimensión.
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)];
>> plot(x,A)
El comando plot asigna, por defecto, determinados colores a las gráficas. Estos colores, así
como el tipo de línea 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 máximo, cada uno a elegir de
una de las columnas siguientes:
b amarillo. asteriscos - línea sólida,
b azul. puntos - línea sólida,
g verde o círculo : linea de puntos,
r rojo x aspas -. punto-guión,
c cyan + cruces – guiones,
m magenta * asteriscos,
y amarillos s square,
k negro d diamantes,
v triángulo,s
etc. (para más información se puede consultar help plot).
Ejemplo:
>> x=0:pi/100:4*pi; y=sin(x).*cos(x/3);
>> plot(x,y,’r*’)
Ejemplo:
>> alpha=0:pi/80:8*pi; z=alpha/8;
>> x=z/(8*pi)+z.*cos(alpha);
>> y=z/(8*pi)+z.*sin(alpha);
>> 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 dimensión conteniendo,
respectivamente, las coordenadas x , y , z de los nodos de la malla. Los segmentos de la malla
se colorean según los valores de la función (coordenada z).
La función meshc hace lo mismo, pero dibujando además las líneas de nivel en el plano XY.
La funcion meshgrid sirve para construir la malla de base, en el plano XY.
Si xp es una partición del intervalo [x0,x1] e yp es una partición del intervalo [y0,y1], entonces
>> [x,y]=meshgrid(xp,yp)
construye dos matrices, x e y, que definen una malla del rectángulo [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 función surf hace lo mismo que mesh, pero dibujando
los segmentos de la malla en color negro y rellenando los “rectángulos” de la malla de color,
según los valores de la función.
La función surfc hace lo mismo, pero dibujando además las líneas de nivel en el plano XY.
La funcion surfl hace lo mismo que surf, pero además añade una fuente de luz lateral
contour(x,y,z,n)
contour3(x,y,z,n)
La función contour dibuja las proyecciones sobre el plano XY de las líneas de nivel
(isovalores)
La función contour3 dibuja las líneas de nivel sobre la misma superficie. En ambos casos n es
el número de líneas a dibujar. Se puede usar la función colorbar para añadir a la gráfica una
barra con la graduación de colores y la correspondencia con los valores de la función
representada. (Esta función puede ser usada con cualquier otra función gráfica que utilice
colores).
Práctica:
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 versión para Windows de MATLAB dispone de su
propio EDITOR (aunque puede usarse cualquier otro editor ASCII).
La primera línea de un fichero nombre.m que define una función debe tener la forma
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 paréntesis. Si no hay variables de salida, no es necesario poner los corchetes ni el signo =
Las líneas que comienzan por el carácter % son líneas de comentario, es decir, son ignoradas
al ejecutar la función o script.
Las primeras líneas de comentario de un fichero ****.m pueden utilizarse para construir un help
del programa.
Si una expresión es demasiado larga, se puede continuar en la línea siguiente, indicándolo por
“tres puntos”: ...
En los scripts y funciones conviene terminar cada línea por “punto y coma”, ya que sino
aparecerá un exceso de información en el terminal.
Las funciones y los scripts pueden ser “llamados” desde la línea 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 localización forme parte del search path. La ejecución del
programa termina cuando se llega a su última sentencia ejecutable. En cualquier punto del
El número de argumentos de salida de una función no tiene que ser fijo. Puede depender de
cómo se “llame” a la función
Una función 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 través de
variables o de constantes.
Observación: en un fichero *.m que contenga una función pueden incluirse subfunciones.
Son funciones con nombre diferente del nombre del fichero (y por tanto de la función principal),
y que sólo son “visibles” para las funciones del mismo fichero.
MATLAB posee un lenguaje de programación que –como cualquier otro lenguaje– dispone de
sentencias para realizar bifurcaciones o estructuras de control condicionadas y bucles.
Una condición es una expresión que puede incluir operaciones aritméticas, relacionales y
lógicas, y cuyo resultado es un verdadero o falso lógico. Un ejemplo sencillo sería 2*a+1>0.
Figura 26
Los bucles permiten repetir las mismas o análogas 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 condición cuando se llega al bucle por
primera vez. Sin embargo, si la condición está al final del bucle las sentencias se ejecutarán
por lo menos una vez, aunque la condición no se cumpla. Muchos lenguajes de programación
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
construcción análoga a do ... while.
Las bifurcaciones y bucles no sólo son útiles en la preparación de programas o de ficheros *.m.
También se aplican con frecuencia en el uso interactivo de MATLAB.
5.3.1 SENTENCIA IF
En su forma más simple, la sentencia if se escribe en la forma siguiente:
if condicion
sentencias
end
Si la condición es:
verdadera se ejecutan los comandos entre if y end.
falsa se pasa el control de la ejecución a la sentencia siguiente a la end.
Existe también la bifurcación múltiple, 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 % opción por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
donde la opción por defecto else puede ser omitida: si no está presente no se hace nada en
caso de que no se cumpla ninguna de las condiciones que se han chequeado.
Una observación muy importante: la condición del if puede ser una condición matricial, del tipo
A==B, donde A y B son matrices del mismo tamaño. Para que se considere que la condición
se cumple, es necesario que sean iguales dos a dos todos los elementos de las matrices A y B
(aij=bij, 1≤i≤m, 1≤j≤n). Basta que haya dos elementos aij y bij diferentes para que las matrices ya
no sean iguales, y por tanto las sentencias del if no se ejecuten. Análogamente, una condición
en la forma A∼=B exige que todos los elementos sean diferentes dos a dos (aij≠bij, 1≤i≤m,
1≤j≤n). Bastaría que hubiera dos elementos aij y bij iguales para que la condición 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 función isequal(A, B) devuelve un uno si las dos
matrices son idénticas y un cero en caso de que difieran en algo.
end
Una última forma de interés 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 iteración el valor de una de las columnas de
A. Cuando se introducen interactivamente en la línea de comandos, los bucles for se ejecutan
sólo después de introducir la sentencia end que los completa.
5
El carácter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo
Alt pulsada.
operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un
significado especial.
Si una comparación se cumple el resultado es 1 (true), mientras que si no se cumple es 0
(false). Recíprocamente, cualquier valor distinto de cero es considerado como true y el
cero equivale a false. Cuando los operadores relacionales de MATLAB se aplican a dos
matrices o vectores del mismo tamaño, la comparación se realiza elemento a elemento, y el
resultado es otra matriz de unos y ceros del mismo tamaño, que recoge el resultado de
cada comparación entre elementos. Considérese el siguiente ejemplo como ilustración de lo
que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
01
00
>> A~=B
ans =
10
11
A continuación se verá con un poco más de detalle ambos tipos de ficheros *.m.
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 función
puede ser llamada con más o menos argumentos y valores de retorno. También en C/C++ es
posible tener un número variable de argumentos, aunque no de valores de retorno.
trabajo. Para que la función 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 (más de 5 letras) y con
mayúsculas.
Por razones de eficiencia, los argumentos que recibe una función de MATLAB no se copian a
variables locales si no son modificados por dicha función. Esto tiene importantes
consecuencias en términos de eficiencia y ahorro de tiempo de cálculo. Sin embargo, si dentro
de la función 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 función, los valores de retorno deben ser calculados en algún momento.De todas
formas, no hace falta calcular siempre todos los posibles valores de retorno de la función, sino
sólo los que el usuario espera obtener en la sentencia de llamada a la función. En cualquier
función existen dos variables definidas de modo automático, llamadas nargin y nargout, que
representan respectivamente el número de argumentos y el número de valores de retorno con
los que la función ha sido llamada. Dentro de la función, estas variables pueden ser utilizadas
como el programador desee.
La ejecución de una función termina cuando se llega a su última sentencia ejecutable. Si se
quiere forzar el que una función termine de ejecutarse se puede utilizar la sentencia return,
que devuelve inmediatamente el control al entorno de llamada.
atan y atan2, para calcular el arco cuya tangente tiene un determinado valor. El resultado de
dichas funciones está expresado en radianes. La función 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 sólo se conoce la tangente. La
función 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 función atan3 definida anteriormente puede recibir uno o dos argumentos: si recibe uno
llama a atan y si recibe dos llama a atan2 (si recibe más da un mensaje de error). Además,
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. Obsérvese
cómo la función atan3 utiliza los vectores de celdas varargin y varargout, así como el número
actual de argumentos nargin con los que ha sido llamada.
5.7.6 SUBFUNCIONES
Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada función. El
nombre de la función debía coincidir con el nombre del fichero. A partir de la versión 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 función principal) y que
las subfunciones sólo pueden ser llamadas por las funciones contenidas en ese fichero,
resultando “invisibles” para otras funciones externas.
En lo siguiente, 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;
Práctica:
Crear una función que reciba un vector u y devuelva un 1 si todos los elementos del
vector son estrictamente positivos y 0 en caso contrario.
Posible solución:
function flag=ftodospos(u)
flag=1;
i=1;
while i<=length(u)
if u(i)<=0
flag=0;
break;
end
i=i+1;
end
– existen también otros métodos posibles: escribir funciones en C para traducir a formato
*.mat (y cargar después con load), crear un fichero ejecutable *.mex 7 que lea los
datos, etc.
7
Los archivos .mex son archivos Matlab ejecutables compilados a partir de Fortran o C.
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 más que proporcionalmente
el tiempo de depuración y eliminación de errores.
Otro objetivo de la programación debe ser mantener el código lo más sencillo y ordenado
posible. Al pensar en cómo hacer un programa o en cómo realizar determinada tarea es
conveniente pensar siempre primero en la solución más sencilla, y luego plantearse otras
cuestiones como la eficiencia.
Finalmente, el código debe ser escrito de una manera clara y ordenada, introduciendo
comentarios, utilizando líneas en blanco para separar las distintas partes del programa,
sangrando las líneas para ver claramente el rango de las bifurcaciones y bucles, utilizando
nombres de variables que recuerden al significado de la magnitud física correspondientes, etc.
En cualquier caso, la mejor forma (y la única) de aprender a programar es programando.
Práctica:
Supongamos que queremos leer los datos almacenados en un fichero, denominado datos.txt,
que contiene esta información:
Figura 28 (a,b,c,d)
Con el profiler se puede medir el tiempo (en centésimas de segundo) empleado en cada línea
del fichero, en cada llamada a una función 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 función o fichero *.m
que se quiere analizar y después clicar en el botón Start Profiling. Inmediatamente el
programa empieza a ejecutarse bajo la supervisión 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 ejecución 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 función y del tiempo total que se ha empleado en ella.
Clicando sobre el enlace a la función tiropar4salida se muestra la información 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 número de
veces que ha sido llamada cada línea de código y el tiempo empleado en ella. En la parte
inferior de la ventana (Figura 28-d) aparece una información similar referida al código fuente del
fichero. Las sentencias que se han llevado más tiempo de CPU aparecen coloreadas en un
tono rosa de intensidad creciente.
Una información particularmente interesante es la proporcionada bajo el epígrafe 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 más eficientes, etc.
El profiler proporciona también información sobre la función padre (la que la ha llamado) y las
funciones hijas de cada función.
Otra forma de llamar al profiler es por medio de la función profile, que se intercala en el
código fuente en la forma (se supone que estas líneas forman parte de un fichero *.m):
profile on -detail 'builtin';
sol=ode15s(@tiropar4,tspan2,y0,options,1,0.001);
profile viewer;
donde la primera línea 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 línea es una llamada a la función ode15s
que a su vez llama a muchas otras funciones y la tercera línea 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 función
tiroparMain4, sino sólo sobre la parte de código que está entre profile on y profile viewer.
Existen dos posibles grados de detalle respecto a la información que se le pide al profiler:
'mmex' determina el tiempo utilizado por funciones y subfunciones definidas en
ficheros *.m y *.mex. Ésta es la opción por defecto.
'builtin' como el anterior incluyendo las funciones intrínsecas 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 información 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 más información sobre las variables miembro de estas
estructuras).
El profiler se puede aplicar a funciones y a ficheros de comandos. La ejecución de un
programa con el profiler puede ser bastante más lenta que sin él, por el trabajo extra que
conlleva.
– Calcular medias para deducir algo acerca del comportamiento específico del problema
en estudio.
– Describir la dispersión de los datos respecto de la media.
– Estudiar la relación que existe entre distintas variables medidas.
– Visualizar gráficamente 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, análisis estadísticos 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 número de datos es pequeño, se puede introducir los datos a mano mediante una
matriz, sino recomendamos el uso de un fichero.
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.)
Una vez realizada esta agrupación de los datos veremos en los apartados siguientes cómo
proceder a su análisis.
Como primer paso, supongamos que tenemos una sola variable cuyos valores medidos hemos
almacenado en un vector y de datos. Los comandos:
– Ejemplo:
r=
tabulate(r)
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%
r = unidrnd(10,5,2)
r=
98
9 10
17
88
94
nanmin(r),nanmax(r)
ans =
14
ans =
9 10
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)
ans =
87
– iqr(A): Calcula el rango intercuartílico 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
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
La dispersión o variación de los datos, para dar una idea de cuan esparcidos se encuentran,
puede medirse utilizando la desviación típica. Dado un vector y de datos, su desviación típica o
estándar se define por:
∑𝑖 (𝑦(𝑖) − 𝑦̅)2
𝑠𝑡𝑑(𝑦) = √
𝑁
>>std(y)
El argumento de la función std también puede ser una matriz; en ese caso la desviación se
calculará para cada una de las columnas de la misma y se guardará en un vector fila.
Dadas dos variables x e y, si deseamos expresar cuantitativamente hasta qué grado están
relacionadas, es necesario calcular la covarianza y el coeficiente de correlación de x e y. La
∑𝑁
𝑖=1 𝑥(𝑖)𝑦(𝑖)
𝑟=
√(∑𝑁 2 2 𝑁 2 2
𝑖=1 𝑥(𝑖) ) (∑𝑖=1 𝑦(𝑖) )
Si r toma un valor próximo a cero, significa que no hay apenas correlación 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.
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
>> s=cov([x,y])
∑𝑁
𝑖=1 𝑥(𝑖)𝑦(𝑖)
𝑠=
𝑁−1
Si A es una matriz donde cada fila es una observación y cada columna una variable, el
comando
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 fácil comprobar que sus componentes
son las del vector de desviaciones típicas al cuadrado.
𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎
𝑑𝑒𝑛𝑠𝑖𝑑𝑎𝑑 𝑑𝑒 𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 =
𝑎𝑚𝑝𝑙𝑖𝑡𝑢𝑑
Ilustración
Figura 29:1:ejemplo
Ejemplodedehistograma.
histograma.
3. Perfil de la muestra.
a. El comando stairs(y) es análogo al bar pero pintando únicamente el perfil de la
muestra.
b. stem(y) crea una gráfica 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 línea 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 también el perfil de la
muestra.
Con un “string” adicional se puede elegir el estilo de la línea:
>>stem(x,y,’option’)
donde la elección del trazo (no del color) se hace igual que con el comando
plot.
4. Gráficos de errores
>>errorbar(x,y,e)
dibuja la gráfica del vector y frente al vector x con una barra vertical en cada punto
dado, que representa el error especificado en el vector e. Además, 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 utilización es similar al
comando hist, con la muestra y formada por ángulos en [0,2π]; para ello, en muchos
casos será necesaria una manipulación adecuada de los elementos de la muestra.
Todos estos comandos de dibujo pueden complementarse con los de etiquetado, definición de
ejes, … utilizados con plot.
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 dispersión.
En lo sigue, trataremos de resolver la siguiente cuestión: 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 regresión o realizando interpolación.
>>p=polyfit(x,y,n)
∑(𝑝(𝑥𝑖 ) − 𝑦𝑖 )2 .
𝑖=1
Práctica:
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
2.-El polígono de frecuencias, curva obtenida entre los puntos definidos por las marcas
de clase y la frecuencia.
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 polinómicas; en general, no será una
curva “regular”. Esta técnica se conoce con el nombre de interpolación. Dependiendo del grado
de las funciones consideradas tendremos interpolación lineal (grado 1), cúbica (grado 3), etc.
La interpolación lineal es el método utilizado, por ejemplo, por el comando plot para realizar la
representación gráfica.
El comando de MATLAB:
vector_y=interp1(x,y,vector_x,opción)
a partir de los valores medidos en las variables x e y, utiliza un método de interpolación 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 mínimo y máximo de las x; fuera de este rango el valor calculado
es NaN. El argumento opción es una variable carácter que indica el método a considerar:
El argumento de salida vector_y será un vector de la misma dimensión y tipo que el vector_x.
interp1q(x,y,vector_x)
donde x e y deben ser vectores columna de la misma dimensión y, además, x debe ser
monótona creciente.
matriz_z=interp2(X;Y;Z;matriz_x,matriz_y,opción)
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 opción es una variable carácter que indica el método a considerar:
o linear: interpolación bilineal
o cubic: interpolación bicúbica.
Ambos métodos necesitan que las variables X e Y sean monótonos. Además, la
interpolación bicúbica necesita que los puntos estén igualmente espaciados.
– matriz_z alamacena los correspondientes valores estimados.
Práctica:
Obtener los polinomios de regresión de primero y segundo grado. Calcular para los polinomios
obtenidos cuál sería el valor estimado de la conductividad eléctrica a los 600 y a los 1000ºC.
Para que un lenguaje de programación revele todo su potencial debe permitir que los usuarios
puedan interaccionar con los programas de una forma cómoda. Para esto se desarrolló el
concepto de GUI.
Matlab Guide es un entorno de programación visual que ofrece Matlab para poder realizar y
ejecutar programas de simulación, tiene las características básicas de todos los programas
visuales como Visual Basic o Visual C++.
El lenguaje más habitual para crear GUI’s es Java, ya que tiene la enorme ventaja de funcionar
en cualquier máquina, sin embargo, Java resulta muy lento para hacer cálculos eficientes. En
comparación con Java, Matlab es más poderoso al realizar cálculos 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 distribución de los elementos
que la componen (botones, textos, paneles, desplegables…), GUIDE compilará estos
elementos en un fichero con extensión .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 código del programa, y otro .fig que es la parte gráfica. Las dos partes están
unidas a través 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 función.
En esta cadena se especifican todas las tareas de cómputo que deben ejecutarse al elegirse la
opción.
Cada uno de los objetos de Matlab tiene un identificador único. Algunos gráficos tienen muchos
objetos, por lo tanto tienen múltiples 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 guión, la interfaz invoca el guión que
se ejecute, mientras la interfaz del usuario permanece en la pantalla aunque no se haya
completado la ejecución del guión.
Cuando se interactúa con un control, el programa registra el valor de esa opción y ejecuta los
comandos prescritos en la cadena de llamada o invocación. Al completarse la ejecución de las
instrucciones de la cadena de llamada, el control vuelve a la interfaz para que pueda elegirse
otra opción del menú. Este ciclo se repite hasta que se cierra la GUI.
El control guarda un string que describe la acción a realizar cuando se invoca, puede consistir
en un solo comando de Matlab o una secuencia de comandos, o en una llamada a una función.
Figura 32.
Las Componentes principales de GUIDE son:
Barra de Menús
Barra de Herrameintas
Paleta de
componentes
Área de diseño
Esta ventana ofrece el objeto raíz (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 gráficos son números flotantes (float), que
pueden ser obtenidos como valor de retorno y almacenados en variables de Matlab.
El objeto más general de una GUI es la pantalla (screen). Este objeto es la raíz de todos los
demás objetos y sólo puede haber un objeto pantalla. Una pantalla puede contener una o más
ventanas (figures). A su vez cada una de las ventanas puede tener uno o más ejes de
coordenadas (axes).
Una ventana puede tener también controles (uicontrol) tales como botones, barras de
desplazamiento, botones de selección o de opción, etc.) y menús (uimenu).
Finalmente, los ejes pueden contener los seis tipos de elementos gráficos que permite Matlab:
líneas (line), rectángulos (rectangle), polígonos (patches), superficies (surface), imágenes
bitmap (image) y texto (text).
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 programación. Una vez
que ejecutemos la GUI tendremos unas instancias de estos que podremos manejar y editar
como tales.
En la Figura 33 podemos observar cómo hemos creado un panel y un botón. En esencia esta
es la GUI más sencilla que podemos crear.
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:
Cada uno de los elementos de la GUI, tiene un conjunto de opciones que podemos acceder
con un click en el botón derecho.
Para modificar las características de los objetos (por ejemplo, color, etiqueta, valor, posición,
texto, etc.), es decir, personalizarlos, deberemos hacer uso del inspector de atributos al que se
accede con el menú contextual del botón derecho.
Para el botón este tiene el aspecto de la Figura 35. Como atributos más obvios, resaltado en
rojo, tenemos el ‘String’ que es el texto del botón (Push Button) o el ‘BackgroundColor’ (gris
medio). No obstante, los atributos más interesantes de cara a la programación son ‘Tag’ y
‘UserData’. El primero nos permite darle un nombre concreto y nos ayudará a encontrar el
objeto suministrándonos su handles. El segundo es un campo que nos permite almacenar
datos del tipo que queramos (números, textos…).
El aspecto del fichero .m generado por GUIDE es aproximadamente como el de la Figura 36.
En él se ha eliminado alguna información superflua, en forma de comentarios, que genera de
forma automática GUIDE.
Hay que tener en cuenta que todos los valores de las propiedades de los elementos de Matlab
(ej. color, etiqueta, valor, posición, 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 agrupación 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 función pushbutton1_Callback(). Esta la es la que se ejecutará cuando
pulsemos el botón, y se puede acceder a ella al hacer click en el elemento ubicado en el área
de diseño (en este caso es el botón) y tomando la opción de View Callback, la cual al ejecutarla
abre el archivo .m asociado a nuestro diseño y nos posiciona en la parte del programa que
corresponde a la subrutina que se ejecutará cuando se realice una determinada acción sobre el
elemento que estamos editando.
En este momento está vacía, pero podemos programarla para que haga cosas de nuestro
interés por ejemplo representar una gráfica, llamar a otra función, etc.
Para ejecutar una Interfaz Gráfica si la hemos etiquedatdo con el nombre curso.fig,
simplemente ejecutamos en la ventana de comandos >> curso o haciendo click derecho en el
m-file y seleccionando la opción RUN.
Todos los valores de las propiedades de los elementos (color, valor, posición, string, …) y los
valores de las variables transitorias del programa se almacenan en una estructura, los cuales
son accedidos mediante un único y mismo identificador para todos éstos. Tomando el
programa anteriormente presentado, el identificador se asigna en: handles.output=hObject.
handles, es nuestro identificador a los datos de la aplicación. Esta definición de identificador es
salvada con la siguiente instrucción: guidata (hObject, handles);
guidata es la sentencia para salvar los datos de la aplicación.
guidata es la función que guarda las variables y propiedades de los elementos en la estructura
de datos de la aplicación, por lo tanto, como regla general, en cada subrutina se debe escribir
en la última línea lo siguiente:
guidata(hObject,handles);
Esta sentencia nos garantiza que cualquier cambio o asignación de propiedades o variables
quede almacenado.
Por ejemplo, si dentro de una subrutina una operación dio como resultado una variable curso,
para poder utilizarla desde le programa u otra subrutina debemos slavarla de la siguiente
manera:
handles.curso=curso;
guidata(hObject,handles);
La primera línea crea la variable curso a la estructura de datos de la aplicación apuntada por
handles y la segunda graba el valor.
Para terminar, queremos mostrar cómo se accede a un objeto concreto y como se modifican
sus características. Esto se hace por medio de la función findobj(). Por ejemplo:
h_boton = findobj('Tag', 'pushbutton1');
Esta función 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 interés en ello, el color del botón (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 interacción con la GUI a nivel de programación 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, gráficas…
Pero no sólo a estos, si no a otros objetos que conforman otros más complejos. En una gráfica
tenemos los ejes de coordenadas, los datos, la línea que representa los datos, las leyendas,
etc.
BIBLIOGRAFÍA
– Baillo Moreno, A., Grané Chávez, A. 100 Ejercicios resueltos de Estadística Multivariante
(Implementados en MATLAB). Madrid: Delta Publicaciones, 2008. (Ofrece ejercicios
estadísticos interesantes y es una buena opción para ver cómo trabaja MATLAB el análisis
estadístico).
– Carrera, A.R., Martínez, M. Introducción a MATLAB y a la creación de interfaces gráficas.
Servicio Editorial de la Universidad de País Vasco, 2004. (Muy buena ayuda para gráficos e
interfaces).
– Gilat, A. Una introducción con ejemplos prácticos. Editorial Reverté, S.A, 2006. (Contiene
cálculo simbólico).
– 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 didácticos para la clase de comunicaciones con MATLAB. Trabajo
de investigación de la Universidad Autónoma de Ciudad Juárez, 2010. (Contiene ejemplos
sencillos y básicos para trabajar distintas señales de comunicación).
– Merino, M., Vadillo, F. Matemática financiera con MATLAB©. Revista de Métodos
Cuantitativos para la Economía y la Empresa, 4 pp. 35-55, 2007.
– Moore, H. MATLAB for engineers. Editorial Pearson, 2015. (Lo hay en la Escuela
Politécnica Superior, y está muy bien enfocado para trabajar las matemáticas del
ingeniero).
– Ortega Ruiz, M. MATLAB aplicado a las telecomunicaciones. Barcelona: Editorial
Marcombo, 2015. (Ejemplos de cómo utilizar MATLAB para la teoría de la señal).
– Quintela Estévez, P. Matemáticas en ingeniería con MATLAB. Servicio de Publicacións da
Universidade de Santiago de Compostela, 2000. (Tiene ejemplos hechos en MATLAB y
además está en castellano).
– Souto, A., Bravo, J.L. Cantón, A., González, M. Curso básico de programación en Matlab®.
Editorial Tébar, S.L. 2013. (Muy fácil de leer y con multitud de ejemplos).
– Pérez, C. MATLAB a través de ejemplos. Garceta grupo editorial, 2011. (Con contenidos
matemáticos como derivadas, integrales, límites, etc.).
– The Math Works Inc. MATLAB, edición de estudiante: versión 4. Prentice Hall, cop. 1996.
(Es el manual del programa en una versión más antigua, pero más que suficiente).