Professional Documents
Culture Documents
Universidade da Corua
Curso de iniciacin
a MATLAB
Material de apoyo
CONTENIDO
1.5 Guardar variables y estados de una sesin: comandos save y load ................................ 39
5.12 Llamada a comandos del sistema operativo y a otras funciones externas ................... 103
7. Introduccin al uso de interfaces grficas de usuario (GUI) con MATLAB. .......................... 118
Bibliografa................................................................................................................................. 124
1.1 INTRODUCCIN
1.1.1 QU ES MATLAB?
Es ampliamente usado por ingenieros y, cientficos de todo el mundo para una gran variedad
de aplicaciones, tales como anlisis y visualizacin de datos, modelizacin matemtica,
desarrollo de algoritmos, procesamiento de seales y comunicaciones, procesamiento de
imagen y vdeo, sistemas de control, pruebas y medidas, finanzas computacionales, biologa
computacional, posee adems una extraordinaria versatilidad y capacidad para resolver
problemas en matemtica aplicada, fsica, qumica, ingeniera, finanzas y muchas otras
aplicaciones. Est basado en un sofisticado software de matrices para el anlisis de sistemas
de ecuaciones. Permite resolver complicados problemas numricos sin necesidad de escribir
un programa. Por este motivo es usado en empresas lderes de ingeniera y ciencia, as como
el software estndar en ms de 5000 universidades de todo el mundo.
MATLAB integra anlisis numrico, clculo matricial, proceso de seal y visualizacin grfica
en un entorno completo donde los problemas y sus soluciones son expresados del mismo
modo en que se escribiran tradicionalmente, sin necesidad de hacer uso de la programacin
tradicional.
MATLAB es un sistema de trabajo interactivo cuyo elemento bsico de trabajo son las matrices.
El programa permite realizar de un modo rpido la resolucin numrica de problemas en un
tiempo mucho menor que si se quisiesen resolver estos mismos problemas con lenguajes de
programacin tradicionales como pueden ser los lenguajes Fortran, Basic o C. En cualquier
caso, el lenguaje de programacin de MATLAB siempre es una magnfica herramienta de alto
nivel para desarrollar aplicaciones tcnicas, fcil de utilizar y que, como ya se ha dicho,
aumenta significativamente la productividad de los programadores respecto a otros entornos de
desarrollo.
En estos apuntes se har referencia exclusiva al cdigo bsico, donde todos los conceptos
estudiados y funciones dadas sern vlidos para la gran mayora de las versiones de
MATLAB.
MATLAB emplea matrices porque con ellas se puede describir infinidad de cosas de una forma
altamente flexible y matemticamente eficiente. Una matriz de pixeles puede ser una imagen o
una pelcula. Una matriz de fluctuaciones de una seal puede ser un sonido o una voz humana.
Y tal vez ms significativamente, una matriz puede describir una relacin lineal entre los
componentes de un modelo matemtico. En este ltimo sentido, una matriz puede describir el
comportamiento de un sistema extremadamente complejo. Por ejemplo una matriz puede
representar el vuelo de un avin a 40.000 pies de altura, o un filtro digital de procesamiento de
seales.
1.1.1.3 PLATAFORMAS
MATLAB est disponible para un amplio nmero de plataformas: estaciones de trabajo SUN,
Apollo, VAXstation y HP, VAX, MicroVAX, Gould, Apple Macintosh y PC AT compatibles 80386
o superiores. Opera bajo sistemas operativos UNIX, Macintosh y Windows.
Tambin est disponible una plataforma mvil, MATLAB Mobile, que ofrece un escritorio ligero
para iPhone, iPad o dispositivos Android. Esta aplicacin permite conectarse a una sesin de
MATLAB que se ejecuta en la nube MathWorks o en un ordenador, y desde la cual se pueden
ejecutar scripts, crear y manipular figuras, y ver los resultados con teclados personalizados
para el iOS y Android, lo que facilita la entrada fcil de la sintaxis de MATLAB.
1.1.1.4 PRODUCTOS
MATLAB dispone de una versin para estudiantes MATLAB and Simulink Student Versin que
incluye la versin R2015b, y es compatible con Windows, Mac, y Linux. Esta versin estudiante
R2015b incluye adems soporte integrado para prototipado, pruebas y ejecucin de modelos
en plataformas hardware de bajo coste, tales como, Arduino, LEGO MINDSTORMS NXT,
PandaBoard, Rasperry Pi, Gumstix Overo y BeagleBoard. Adems de soporte de hardware
para sensores de iOS, Raspberry PiTM 2 y BeagleBone Black.
1
Una computadora central o mainframe es una computadora grande, potente y costosa usada
principalmente por una gran compaa para el procesamiento de una gran cantidad de datos;
por ejemplo, para el procesamiento de transacciones bancarias.
El lenguaje MATLAB incluye operaciones vectoriales y matriciales que son fundamentales para
resolver problemas de ingeniera y cientficos. Agiliza, tanto el desarrollo, como la ejecucin.
Al mismo tiempo, MATLAB ofrece todas las caractersticas de los lenguajes de programacin
tradicionales, que incluyen operadores aritmticos, control de flujo, estructuras de datos, tipos
de datos, gestin de errores y programacin orientada a objetos (OOP).
Un algoritmo de comunicaciones que genera 1024 bits aleatorios, convierte el vector en una
seal transmitida, aade ruido gaussiano complejo y representa el resultado grficamente, se
integra en MATLAB en slo nueve lneas de cdigo:
Figura 1
MATLAB posibilita ejecutar comandos o grupos de comandos de forma interactiva uno tras
otro, sin compilar ni enlazar, y repetir su ejecucin hasta lograr la solucin ptima
tradicionales.
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
adems es posible realizar anlisis de datos exploratorios a fin de descubrir tendencias, probar
suposiciones y elaborar modelos descriptivos. MATLAB proporciona funciones para filtrado y
suavizado, interpolacin, convolucin y transformadas rpidas de Fourier (FFT). Los productos
complementarios proporcionan capacidades para ajuste de curvas o de superficies, estadstica
multivariante, anlisis espectral, anlisis de imgenes, identificacin de sistemas y otras tareas
de anlisis. En resumen, MATLAB proporciona herramientas interactivas y funciones en lnea
de comandos para operaciones de anlisis de datos incluyendo:
interpolacin,
extraccin de secciones de datos, escalado y promediacin,
umbralacin y suavizamiento,
correlacin, anlisis de Fourier y filtraje,
bsqueda de picos unidimensionales y ceros,
estadstica bsica y ajuste de curvas,
anlisis matricial, etc.
En cuanto a acceso a datos, MATLAB es una plataforma eficiente para acceder a datos desde
archivos, otras aplicaciones, bases de datos y dispositivos externos. Puede leer datos desde
los formatos ms populares como Microsoft Excel, Texto ASCII o archivos binarios, imgenes,
archivos de sonido y video o archivos cintficos tales como netCDF y HDF. Las funciones de
entrada y salida de bajo nivel para archivos binarios permiten trabajar con datos en cualquier
formato. Las funciones adicionales permiten leer datos desde pginas web y XML. Es decir, las
funciones de entrada/salida de archivos permiten trabajar con archivos de datos de cualquier
formato.
Puede llamar otras aplicaciones y lenguajes como C, C++, objetos COM, DLLs, Java, Fortran y
Microsoft Excel y acceder a sitios ftp y servicios Web. Usando el Database Toolbox, incluso
puede acceder a bases de datos ODBC/JDBC.
Puede adquirir datos desde dispositivos de hardware, como el puerto serial de las
computadoras o la tarjeta de sonido, o bien recurrir al streaming de los datos dinmicos
medidos directamente a MATLAB para su anlisis y visualizacin Tambin es posible
comunicarse con instrumentos tales como osciloscopios, generadores de funciones y
analizadores de seales.
Usando Data Acquisition Toolbox, puede medir datos directamente en MATLAB para anlisis y
visualizacin. Instrument Control Toolbox permite la comunicacin con hardware GPIB y VXI.
Todas las caractersticas grficas que son requeridas para visualizar datos de ingeniera y
cientficos estn disponibles en MATLAB. Esto incluye funciones de representacin de
diagramas bidimensionales y tridimensionales, visualizacin de volmenes, herramientas para
crear graficas interactivamente y la posibilidad de exportar los resultados a todos los formatos
de grficos ms conocidos y usuales. Es posible
personalizar las grficas aadiendo mltiples ejes,
cambiando los colores de las lneas y marcadores,
aadir anotaciones, ecuaciones en LaTEX,
leyendas y trazando formas.
Figura 6
Figura 7
MATLAB permite leer y escribir en diversos formatos de archivos de datos y de grficos, como
GIF, JPEG, BMP, EPS, TIFF, PNG, HDF, AVI y PCX. Como resultado, puede exportar las
grficas de MATLAB a otras aplicaciones como Microsoft Word y Microsoft PowerPoint, o
software de autoedicin. Antes de exportar, puede crear y aplicar plantillas de estilo, que
contengan el diseo, los tipos de letra, la definicin del grosor de las lneas, el fondo y la
escala, etc., necesarios para cumplir con las especificaciones para su publicacin.
La galera de grficos de MATLAB ofrece multitud de ejemplos para mostrar los datos de forma
grfica en MATLAB. En cada ejemplo podr ver y descargar el cdigo fuente a fin de emplearlo
en su aplicacin de MATLAB.
Por citar algunos ejemplos, MATLAB proporciona los siguientes tipos de funciones para
desarrollar las operaciones matemticas y de anlisis de datos:
MATLAB contiene una serie de funciones para documentar y compartir su trabajo. Puede
integrar su cdigo en otros lenguajes y aplicaciones, desplegar algoritmos y aplicaciones de
MATLAB como programas independientes o mdulos de software.
MATLAB permite exportar los resultados como grficas o como informes completos. Puede
exportar las figuras a todos los formatos de grficos ms usados y conocidos para luego
importarlos a otros paquetes, como Microsoft Word o Microsoft PowerPoint. Usando el Editor
de MATLAB se puede, automticamente, publicar el cdigo MATLAB en HTML, Word, LaTEX y
otros formatos. Por ejemplo, en la Figura 8 se observa un programa de cdigo M (izquierda)
publicado en HTML (derecha) usando MATLAB Editor. Los resultados, que se envan a la
ventana de comandos o a diagramas, se capturan e incluyen en el documento y los
comentarios se convierten en ttulos y texto en HTML.
Figura 8: Programa de MATLAB (izquierda) publicado como HTML (derecha) mediante MATLAB Editor. Los
resultados que se muestran en la ventana de comandos o en forma de grficos se capturan y se incluyen,
mientras que los comentarios sobre el cdigo se convierten en ttulos de seccin y cuerpo de texto en HTML.
Extrada de: http://es.mathworks.com/products/matlab/features.html
Es posible crear informes ms complejos, tales como ejecuciones simuladas y varias pruebas
de parmetros, utilizando MATLAB Report Generator disponible por separado. El informe
contiene el cdigo, los comentarios y los resultados del programa, incluidos los grficos. Los
informes se pueden publicar en diversos formatos, tales como HTML, PDF, Word o LaTeX.
En cuanto a la integracin del cdigo MATLAB con otros lenguajes y aplicaciones, MATLAB
proporciona funciones para integrar cdigo C y C++, Fortran, Objetos COM y cdigo de Java
con sus aplicaciones y .NET. Puede llamar a DLLs, clases de Java y Controles Active X.
Usando las bibliotecas de MATLAB, se puede tambin llamar a MATLAB desde su cdigo C,
C++ y Fortran.
Si desea compartir aplicaciones con personas que no disponen de MATLAB, puede utilizar
productos de distribucin de aplicaciones. Estos productos complementarios generan de forma
automtica aplicaciones autnomas, libreras compartidas y componentes de software para su
integracin en entornos de C, C++, Java, .NET y Excel. Los ejecutables y los componentes se
pueden distribuir de forma gratuita usando el MATLAB Compiler (disponible por separado).
Figura 9
MATLAB Coder (disponible por separado) se puede emplear para generar cdigo C
independiente a partir del cdigo de MATLAB. MATLAB Coder admite un subconjunto del
lenguaje de MATLAB que suelen emplear los ingenieros de diseo para desarrollar algoritmos
a modo de componentes de sistemas ms amplios. Este cdigo se puede utilizar para la
ejecucin autnoma, para la integracin con otras aplicaciones de software o como parte de
una aplicacin embebida.
MATLAB se puede arrancar como cualquier otra aplicacin de Windows, clicando dos veces en
el icono correspondiente en el escritorio o por medio del men Inicio. Al arrancar MATLAB se
abre una ventana similar a la mostrada en la Figura 10: escritorio de MATLAB.
Con el fin de ayudar a los usuarios, ya sean nuevos o experimentados, a navegar por las
capacidades en continua expansin de MATLAB, MathWorks ha actualizado el escritorio de
MATLAB desde la versin 2012b con dos mejoras principales:
sta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default, en el men View en
versiones anteriores a 2012b, pero en el nuevo escritorio con vistas de pestaas, se va a la
pestaa de HOME, en el icono de Layout y Default. Como esta configuracin puede ser
cambiada fcilmente por el usuario, es posible que en muchos casos concretos lo que
aparezca sea muy diferente.
En la parte superior izquierda de la pantalla (ver Figura 10) aparecen dos ventanas tambin
muy tiles: en la parte superior aparece la ventana Current Directory, que se puede alternar
con Workspace clicando en la pestaa correspondiente. La ventana Current Directory muestra
los ficheros del directorio activo o actual. El directorio activo se puede cambiar desde la
Command Window, o desde la propia ventana (o desde la barra de herramientas, debajo de la
barra de mens) con los mtodos de navegacin de directorios propios de Windows. Clicando
dos veces sobre alguno de los ficheros *.m del directorio activo se abre el editor de ficheros de
MATLAB, herramienta fundamental para la programacin sobre la que se volver en las
prximas pginas. El Workspace contiene informacin sobre todas las variables que se hayan
definido en esta sesin y permite ver y modificar las matrices con las que se est trabajando.
En la parte inferior derecha (ver figura 10) aparece la ventana Command History que muestra
los ltimos comandos ejecutados en la Command Window. Estos comandos se pueden volver
a ejecutar haciendo doble clic sobre ellos. Clicando sobre un comando con el botn derecho
del ratn se muestra un men contextual con las posibilidades disponibles en ese momento.
Para editar uno de estos comandos hay que copiarlo antes a la Command Window.
Figura 10: escritorio de MATLAB, la primera con la versin actual y la segunda con la versin anterior a la
2012b
instalados.
Estas funciones en la nueva versin se pueden obtener a partir de los iconos de la cinta de
herramientas en las distintas pestaas.
Puede hacerse que al arrancar MATLAB se ejecute automticamente un fichero, de modo que
aparezca por ejemplo un saludo inicial personalizado. Esto se hace mediante un fichero de
comandos que se ejecuta de modo automtico cada vez que se entra en el programa (el
fichero startup.m, que debe de estar en un fichero determinado, por ejemplo
C:\Matlal701\Work).
Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command Window se
pueden utilizar las funciones clc y home. La funcin clc (clear console) elimina todas las salidas
anteriores, mientras que home las mantiene, pero lleva el prompt (>> ) a la primera lnea de la
ventana.
En la nueva versin de MATLAB las propias ventanas ya tiene un men desplegable indicado
con que permite utilizar todas las opciones de cada ventana comentadas anteriormente.
Si se desea salir de MATLAB basta teclear los comandos quit o exit, elegir Exit MATLAB en el
men File o utilizar cualquiera de los medios de terminar una aplicacin en Windows.
MATLAB dispone de un excelente Help con el que se puede encontrar la informacin que se
desee. Se puede obtener ayuda a travs del botn Ayuda de la barra de iconos o a travs de la
opcin Help de la barra de mens, y a travs de comandos implementados como objetos de
MATLAB. La Figura 13, muestra las distintas opciones que aparecen en el men Help de la
ventana principal de la aplicacin.
Figura 13 Men Help de MATLAB, la primera de las versiones anteriores a 2012b y la segunda de la actual.
1. Full Product Family Help o Product Help, Se abre la ventana de la Figura 15, en la
que se puede buscar informacin general sobre MATLAB o sobre otros productos de la
familia a los que se tenga acceso. La forma de la ventana de ayuda es tpica y comn
con otros niveles de ayuda. La mayor parte de las pginas de ayuda estn en formato
HTML.
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 informacin detallada sobre cmo utilizar y configurar el entorno
de desarrollo o Desktop. Las distintas herramientas disponibles se describen
sucesivamente. Cada pgina dispone de flechas y enlaces que permiten ir a la pgina
siguiente o volver a la anterior. Es posible tambin imprimir aquellas pginas que se
desee consultar o archivar sobre papel. Una caracterstica muy importante es la
posibilidad de organizar las ventanas con gran flexibilidad, agrupndolas o
independizndolas segn los propios gustos o deseos.
4. Using the Command Window. Esta opcin del men Help da acceso a la informacin
necesaria para aprovechar las capacidades de la Command Window, que es el
corazn de MATLAB.
5. Web Resources. Muestra algunas direcciones de Internet con informacin interesante
sobre MATLAB. Todas ellas corresponden a distintas secciones de la web de The
Mathworks (la empresa que desarrolla y comercializa MATLAB), cuya pgina de inicio
se muestra en primer lugar. Adems en las ltimas versiones ofrece Training de ofertas
de cursos de formacin en MATLAB (ver Figura 16 o 13).
6. Check for Updates. MATLAB se conecta con The Mathworks y comprueba si hay
versiones ms recientes de los productos instalados. Si se es un usuario registrado, es
posible descargar las versiones ms actuales.
7. Licesing. Acceso a todo lo relacionado con la licencia del producto, actualizaciones,
activacin/desactivacin de software, etc.
desea desarrollar.
Adems, de una forma muy inmediata, es posible tambin recurrir al Help desde la lnea de
comandos de la Command Window. Se aconseja practicar un poco al respecto. Por ejemplo,
obsrvese la respuesta a los siguientes usos del comando help:
>> help
Como se puede comprobar el comando help ofrece ayuda general sobre todos los comandos
de MATLAB. Haciendo clic sobre cualquiera de ellos, se obtiene su ayuda particular. Se pide
ayuda sobre un comando especfico o sobre cualquier tema del contenido utilizando el
comando help comando o help tema.
El comando doc tecleado en la lnea de comandos equivale a Help/Full Product Family Help; si
va seguido de un nombre de comando o funcin se muestra la informacin detallada
correspondiente a ese comando de modo similar a Go to online doc for... en el prrafo anterior.
En resumen, MATLAB dispone de una ayuda muy completa y accesible, estructurada en varios
niveles (lnea de comandos en la Command Window, ventana Help, y manuales en formato
PDF), con la que es muy importante estar familiarizado, porque hasta los ms expertos
programadores tienen que acudir a ella con una cierta frecuencia.
Las componentes ms 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 pestaa
correspondiente.
La Figura 19a muestra un detalle del men Desktop, desde el que se controlan las
componentes visibles y la forma en que se visualizan. Por ejemplo, como en la Figura 19a la
ventana activa es la Command Window (resalta en azul), en el men de la Figura 19b aparece
la opcin de dejar de alojar dicha ventana en el MATLAB Desktop (Undock Command
Window). Dicho men permite tambin eliminar del Desktop alguna de las componentes
visibles o visualizar el Help (que no est visible). Con los submens de Desktop Layout se
pueden adoptar algunas configuraciones predefinidas, como la configuracin por defecto
(Default) o incluir slo la Command Window. La configuracin adoptada por el usuario se
mantendr la siguiente vez que arranque el programa. Es posible tambin guardar distintas
configuraciones con distintos nombres, para su uso posterior.
Adems del men mostrado en la Figura 18b, que cambia en algunos detalles segn cual sea
la ventana activa, el usuario puede configurar el MATLAB Desktop por medio del ratn
mediante algunas operaciones como las siguientes:
18d.
3. Si todas las ventanas se van seleccionando sucesivamente y se elige la
correspondiente opcin Undock... en el men View, se podra obtener una
configuracin como la mostrada en la Figura 19a, en la que todas las ventanas son
independientes y aparecen separadas en la barra de tareas.
4. Finalmente, si se parte de la configuracin por defecto y cada uno de los componentes
se arrastra sobre la Command Window se puede obtener una configuracin como la
mostrada en la Figura 19b, en la que todos los componentes abiertos aparecen como
pestaas alternativas en una ventana nica.
1. Cualquier entrada a ejecutar en MATLAB se escribe a la derecha del input del usuario
encabezado con el prompt >>obtenindose la respuesta en las lneas
inmediatamente inferiores. Despus de la salida vuelve a aparecer el input de usuario
para introducir ms entradas.
2. Cuando en la entrada (input de usuario) que se le proponga a MATLAB en la venta de
comandos no se cita una variable para recoger el resultado, devuelve la respuesta
utilizando la expresin ans=. Pero si definimos una variable que recoja los resultados,
posteriormente podremos utilizar esa variable como argumento de entradas
posteriores.
3. Para que MATLAB ejecute una entrada, basta con pulsar Enter una vez escrita la
misma. Si al final de la entrada colocamos un punto y coma, el programa ejecuta los
clculos y los guarda en la memoria (Workspace), pero no muestra el resultado en la
pantalla. Aparece el prompt de input >> para indicar que se puede introducir una
nueva entrada.
4. Al igual que el lenguaje C de programacin, MATLAB es sensible a la diferencia entre
maysculas y minsculas.
5. Los nombres de todas las funciones incorporadas empiezan con minscula.
6. No debe haber espacios en los nombres de las rdenes, en smbolos de ms de una
letra ni en los nombres de las funciones. En los dems casos, los espacios no se tienen
en cuenta. Se pueden poner algunos para hacer ms legibles su input.
7. Se pueden realizar varias entradas en la misma lnea de la ventana de comandos
separndolas por comas y pulsando Enter al final de la ltima entrada. En caso de
utilizar un punto y coma al final de una de las entradas de la lnea, se omite su
correspondiente salida.
8. Es posible introducir comentarios descriptivos en una lnea de entrada de la ventana de
comandos inicindolos con el signo %. Al ejecutar la entrada, MATLAB ignora la zona
de comentario y procesa el resto.
9. Para simplificar el proceso de introduccin de comandos para ser evaluados por el
intrprete de MATLAB, se pueden utilizar una serie de teclas con las siguientes
funciones:
Flecha hacia arriba (Ctrl-P) Recupera la entrada anterior a la actual.
Flecha hacia abajo (Ctrl-N) Recupera la entrada siguiente a la actual.
Flecha hacia la izquierda (Ctrl-B) Lleva el cursor un carcter a la izquierda.
Flecha hacia la derecha (Ctrl-F) Lleva el cursor un carcter a la derecha.
Ctrl-Flecha a la izquierda Lleva el cursor una palabra a la izquierda.
Ctrl-Flecha a la derecha Lleva el cursor una palabra a la derecha.
Inicio (Ctrl-A) Lleva el cursor al comienzo de la lnea.
Fin (Ctrl-E) Lleva el cursor al final de la lnea actual.
Escape Borra la lnea de comandos.
Supr (Ctrl-D) Borra el carcter indicado por el cursor.
Backspace Borra el carcter a la izquierda del cursor.
Ctrl-k Borra toda la lnea actual.
10. El comando clc borra la ventana de comandos, pero no borra su contenido del rea de
trabajo (el contenido permanece en memoria).
11. Escribir lneas de comandos muy largas que automticamente siguen en la lnea
siguiente al llegar al margen derecho de la ventana. Para ello hay que activar la opcin
Wrap Lines, en el men File/Preferences/Command Window.
12. Clicando con el botn derecho sobre el nombre de una funcin que aparezca en esta
ventana se tiene acceso a la pgina del Help sobre dicha funcin. Si el cdigo fuente
(fichero *.m) est disponible, tambin se puede acceder al fichero correspondiente por
medio del Editor/ Debugger.
13. Comenzando a teclear el nombre de una funcin y pulsando la tecla Tab, MATLAB
completa automticamente el nombre de la funcin, o bien muestra en la lnea
siguiente todas las funciones disponibles que comienzan con las letras tecleadas por el
usuario.
14. Cuando al ejecutar un fichero *.m se produce un error y se obtiene el correspondiente
mensaje en la Command Window, MATLAB muestra mediante un subrayado un enlace
a la lnea del fichero fuente en la que se ha producido el error. Clicando en ese enlace
se va a la lnea correspondiente del fichero por medio del Editor/Debugger.
La ventana Command History ofrece acceso a las sentencias que se han ejecutado
anteriormente en la Command Window. Estas sentencias estn tambin accesibles por medio
de las teclas y como se ha comentado anteriormente, pero esta ventana facilita mucho el
tener una visin ms general de lo hecho anteriormente y seleccionar lo que realmente se
desea repetir.
Las sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un doble clic o
por medio del men contextual que se abre al clicar sobre ellas con el botn derecho. Tambin
se pueden copiar y volcar sobre la lnea de comandos, pero se ha de copiar toda la lnea, sin
que se admita la copia de un fragmento de la sentencia. Existen opciones para borrar algunas
o todas las lneas de esta ventana. Se puede tambin hacer un profile (evaluar la eficiencia
relativa) de una sentencia o de un grupo de sentencias.
El comando pwd (de print working directory) permite saber cul es el directorio actual. Para
cambiar de directorio actual se puede utilizar el comando cd (de change directory) en la lnea
de comandos, seguido del nombre del directorio, para el cual se puede utilizar un path absoluto
(por ejemplo cd C:\MATLAB\Ejemplos) o relativo (cd Ejemplos). Para subir un nivel en la
jerarqua de directorios se utiliza el comando cd .., y cd ../.. para subir dos niveles. ste es el
mismo sistema que se sigue para cambiar de directorio en las ventanas de MS-DOS. MATLAB
permite utilizar la barra normal (/) y la barra invertida (\), indistintamente.
La ventana Current Directory permite explorar los directorios del ordenador en forma anloga a
la del Explorador u otras aplicaciones de Windows. Cuando se llega al directorio deseado se
muestran los ficheros all contenidos. La ventana Current Directory permite ordenarlos por
fecha, tamao, nombre, etc. El directorio actual cambia automticamente en funcin del
directorio seleccionado con este explorador, y tambin se puede cambiar desde la propia barra
de herramientas del MATLAB Desktop. Los ficheros *.m mostrados en la ventana Current
Directory se pueden abrir con el Editor/Debugger mediante un doble clic.
A partir del men contextual que se abre clicando con el botn derecho en cualquier parte de la
ventana Current Directory se tiene la posibilidad de aadir ese directorio al Path de MATLAB.
MATLAB puede llamar a una gran variedad de funciones, tanto propias como programadas por
los usuarios. Puede incluso haber funciones distintas con el mismo nombre. Interesa saber
cules son las reglas que determinan qu funcin o qu fichero *.m es el que se va a ejecutar
cuando su nombre aparezca en una lnea de comandos del programa. Esto queda determinado
por el camino de bsqueda (search path) que el programa utiliza cuando encuentra el nombre
de una funcin.
El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir de
la lnea de comandos, o utilizando el cuadro de dilogo Set Path, del men File. El comando
path hace que se escriba el search path de MATLAB (el resultado depende de en qu directorio
est instalado MATLAB; se muestran slo unas pocas lneas de la respuesta real del
programa):
>> path
>> path
MATLABPATH
C:\MATLAB701\toolbox\MATLAB\general
C:\MATLAB701\toolbox\MATLAB\ops
C:\MATLAB701\toolbox\MATLAB\lang
C:\MATLAB701\toolbox\MATLAB\elmat
...
C:\MATLAB701\toolbox\MATLAB\helptools
C:\MATLAB701\toolbox\MATLAB\winfun
C:\MATLAB701\toolbox\MATLAB\demos
C:\MATLAB701\toolbox\local
Para ver cmo se utiliza el search path supngase que se utiliza la palabra nombre1 en un
comando. El proceso que sigue el programa para tratar de conocer qu es nombre1 es el
siguiente:
Estos pasos se realizan por el orden indicado. En cuanto se encuentra lo que se est buscando
se detiene la bsqueda y se utiliza el fichero que se ha encontrado. Conviene saber que, a
igualdad de nombre, los ficheros *.mex tienen precedencia sobre los ficheros *.m que estn en
el mismo directorio.
El cuadro de dilogo que se abre con el comando File/Set Path ayuda a definir la lista de
directorios donde MATLAB debe buscar los ficheros de comandos y las funciones, tanto del
sistema como de usuario. Al ejecutar dicho comando aparece el cuadro de dilogo de la Figura
191a, en el cual se muestra la lista de directorios en la que MATLAB buscar. Para aadir (o
quitar) un directorio a esta lista se debe clicar sobre los botones Add Folder o Add with
Subfolders, con lo cual aparece un nuevo cuadro de dilogo, mostrado en la Figura 20b, que
ayuda a elegir el directorio deseado. El nuevo directorio se aade al comienzo de la lista, pero
desde esa posicin puede desplazarse hacia abajo o hasta el final con los botones Move Down
o Move to Botton, respectivamente. Como ya se ha dicho el orden de la lista es muy
importante, porque refleja el orden de la bsqueda: si dos funciones con el mismo nombre
estn en dos directorios diferentes, se utilizar la que primero se encuentre. El cuadro de
dilogo Set Path contiene los botones necesarios para realizar todas las operaciones que el
usuario desee.
Para incluir desde la lnea de comandos de MATLAB un directorio nuevo al comienzo del Path
sin utilizar el cuadro de dilogo Set Path, se puede utilizar tambin el comando path, que
concatena dos listas de directorios (slo se deben utilizar directorios que realmente existan en
el PC), como por ejemplo:
mientras que para aadir el nuevo directorio al final de la lista, se utilizara el comando:
El comando addpath permite aadir uno o ms directorios al Path. Su forma general puede
verse en los siguientes ejemplos:
donde la opcin por defecto (cuando no se pone ni begin ni end) es aadir al comienzo de la
lista. Despus de ejecutar estos comandos conviene comprobar cmo ha quedado modificado
el search path (recurdese que los directorios deben existir en realidad).
2
El comando path dentro del parntesis de la funcin devuelve la lista de directorios anterior.
No es difcil borrar las lneas que se han introducido en el Path: por una parte, los cambios no
son permanentes y dejarn de surtir efecto al salir de MATLAB y volver a entrar (salvo que se
guarden como opciones estables). Adems se puede utilizar el comando rmpath (de remove
path), al que se le pasan la lista de directorios a eliminar del Path. Por ejemplo, el comando:
>> whos
stas son las variables del espacio de trabajo base (el de la lnea de comandos de MATLAB).
Ms adelante se ver que cada funcin tiene su propio espacio de trabajo, con variables cuyos
nombres no interfieren con las variables de los otros espacios de trabajo.
La ventana Workspace constituye un entorno grfico para ver las variables definidas en el
espacio de trabajo. Se activa con el comando View/Workspace. La Figura 21a muestra el
aspecto inicial de la ventana Workspace cuando se abre desde un determinado programa.
Haciendo doble clic por ejemplo sobre la matriz BARS aparece una nueva ventana (o pestaa,
si la ventana ya exista) del Array Editor, en la que se muestran y pueden ser modificados los
elementos de dicha matriz (ver Figura 21b).
Es importante insistir en que cada una de las funciones de MATLAB tiene su propio espacio de
trabajo, al que en principio slo pertenecen las variables recibidas como argumentos o
definidas dentro de la propia funcin. En la barra de herramientas de la ventana Workspace
aparece una lista desplegable llamada Stack, con los espacios de trabajo del programa actual.
Hay que tener en cuenta que cuando se termina de ejecutar una funcin y se devuelve el
control al programa que la haba llamado, las variables definidas en la funcin dejan de existir
(salvo que se hayan declarado como persistentes) y tambin deja de existir su espacio de
trabajo.
Si se desean examinar otras matrices y/o vectores, al hacer doble clic sobre ellas el Array
Editor las muestra en la misma ventana como subventanas con una pestaa diferente.
Clicando con el botn derecho sobre alguna de las variables del Workspace Browser se abre
un men contextual que ofrece algunas posibilidades interesantes, como por ejemplo la de
representar grficamente dicha variable.
El Array Editor no slo permite ver los valores de los elementos de cualquier matriz o vector
definido en el programa: es tambin posible modificar estos valores clicando sobre la celda
correspondiente. La ventana del Array Editor incluye una lista desplegable en la que se puede
elegir el formato en el que se desea ver los datos.
El Array Editor es muy til tambin para entender bien ciertos algoritmos, ejecutando paso a
paso un programa y viendo cmo cambian los valores de las distintas variables. Es posible
aparcar o situar las ventanas o pestaas del Array Editor en la misma ventana del
Editor/Debugger, que se va a ver a continuacin.
En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files). Son ficheros de
texto ASCII, con la extensin *.m, que contienen conjuntos de comandos o definicin de
funciones (estos ltimos son un poco ms complicados y se vern ms adelante). La
importancia de estos ficheros-M es que al teclear su nombre en la lnea de comandos y pulsar
Intro, se ejecutan uno tras otro todos los comandos contenidos en dicho fichero. El poder
guardar instrucciones y grandes matrices en un fichero permite ahorrar mucho trabajo de
tecleado.
Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal como
Notepad, MATLAB dispone de un editor que permite tanto crear y modificar estos ficheros,
como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuracin).
La Figura 22 muestra la ventana principal del Editor/Debugger, en la que se ha tecleado un
fichero-M llamado Prueba1.m, que contiene un comentario y seis sentencias:
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 tambin de que las comillas o parntesis que se abren, no se queden sin el
correspondiente elemento de cierre. Colocando el cursor antes o despus de una apertura o
cierre de corchete o parntesis y pulsando las teclas () o (), el Editor muestra con qu
cierre o apertura de corchete o parntesis se empareja el elemento considerado; si no se
empareja con ninguno, aparece con una rayita de tachado.
Seleccionando varias lneas y clicando con el botn derecho aparece un men contextual cuya
sentencia Comment permite entre otras cosas comentar con el carcter % todas las lneas
seleccionadas. Estos comentarios pueden volver a su condicin de cdigo ejecutable
seleccionndolos y ejecutando Uncomment en el men contextual. Otra opcin muy til de ese
men contextual es Smart Indent, que organiza el sangrado de los bucles y bifurcaciones de
las sentencias seleccionadas.
En la Figura 22 puede apreciarse tambin que estn activados los botones que corresponden
al Debugger. El significado de estos botones, que aparece al colocar sobre ellos el cursor, es el
siguiente:
Clear All Breakpoints. Elimina todos los breakpoints que haya en el fichero.
Step. Avanzar un paso sin entrar en las funciones de usuario llamadas en esa lnea.
Step In. Avanzar un paso, y si en ese paso hay una llamada a una funcin cuyo fichero
*.m est accesible, entra en dicha funcin.
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 tambin enormemente til para aprender mtodos numricos y tcnicas de
programacin. 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 dilogo desde el que se establecen casi todas las opciones
que el usuario puede determinar por su cuenta. Este cuadro de dilogo se abre con el icono
Preferences del men mostrando todas las posibilidades que ofrece en el men de la izquierda:
en total son 24 cuadros de dilogo diferentes. La Figura 24b muestra el que permite elegir los
colores generales del cdigo.
Respecto a los formatos numricos con que MATLAB muestra los resultados (recurdese que
siempre calcula con doble precisin, es decir con unas 16 cifras decimales equivalentes), las
posibilidades existentes se muestran en la lista desplegable de la Figura 25a y son las
siguientes:
Por otra parte, el formato loose introduce algunas lneas en blanco en la salida (opcin por
defecto), mientras que el formato compact elimina las lneas en blanco citadas. Estas opciones
estn disponibles en el cuadro de dilogo de la Figura 25a y se pueden tambin establecer
desde la lnea de comandos en la forma:
El cuadro de dilogo de la Figura 25b permite elegir un editor de programas distinto del que
trae MATLAB (built-in editor), as como obligar a que los ficheros se abran de modo automtico
al ejecutarlos con el Debugger.
MATLAB aplica un factor de escala general a las matrices cuando los elementos no enteros
ms grandes o ms pequeos son superiores o inferiores a una determinada cantidad (103 y
103, respectivamente).
Hay que aadir que MATLAB trata de mantener el formato de los nmeros que han sido
definidos como enteros (sin punto decimal). Si se elige la opcin format rational el programa
trata de expresar los nmeros racionales como cocientes de enteros.
El search path inicial o por defecto de MATLAB est definido en un fichero llamado
MATLABrc.m, en el subdirectorio toolbox\local. Este fichero contiene tambin otros parmetros
de inicializacin y es, por ejemplo, el responsable de los mensajes que aparecen al arrancar el
programa. Este fichero se ejecuta automticamente al arrancar MATLAB.
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 ms tarde en el mismo punto en el que se dej (con las mismas variables definidas,
con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del
programa todo el contenido de la memoria se borra automticamente.
Para guardar el estado de una sesin de trabajo existe el comando save. Si se teclea:
>> save
>> load
Esta es la forma ms bsica de los comandos save y load. Se pueden guardar tambin
matrices y vectores de forma selectiva y en ficheros con nombre especificado por el usuario.
Por ejemplo, el comando (sin comas entre los nombres de variables):
Si no se indica ninguna variable, se guardan todas las variables creadas en esa sesin.
>> save -ascii -double -tab % almacena 16 cifras separadas por tabs
aunque en formato ASCII slo se guardan los valores y no otra informacin tal como los
nombres de las matrices y/o vectores. Cuando se recuperan estos ficheros con load -ascii toda
la informacin se guarda en una nica matriz con el nombre del fichero. Esto produce un error
cuando no todas las filas tienen el mismo nmero de elementos.
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 sesin. Existe
otra forma ms sencilla de almacenar en un fichero un texto que describa lo que el programa
va haciendo (la entrada y salida de los comandos utilizados). Esto se hace con el comando
diary en la forma siguiente:
...
...
>> diary on
...
El comando diary off suspende la ejecucin de diary y diary on la reanuda. El simple comando
diary pasa de on a off y viceversa. Para poder acceder al fichero filename.txt con Notepad o
Word es necesario que diary est en off. Si en el comando diary no se incluye el nombre del
fichero se utiliza por defecto un fichero llamado diary (sin extensin).
Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica comienzo de
comentario. Cuando aparece en una lnea de comandos, el programa supone que todo lo que
va desde ese carcter hasta el fin de la lnea es un comentario.
Ms adelante se ver que los comentarios de los ficheros *.m tienen algunas peculiaridades
importantes, pues pueden servir para definir help's personalizados de las funciones que el
usuario vaya creando.
Otra forma de comentar bloques de sentencias (similar a la utilizada en C/C++ con /* y */) es
encerrar las lneas que se desea inutilizar entre los caracteres %{ y %}. Los bloques
comentados pueden incluirse dentro de otros bloques comentados ms amplios (bloques
anidados).
MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones
matemticas realizadas. Algunas de estas funciones son las siguientes:
etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (atencin al orden!), obtenidos
como respuesta al comando clock.
tic ops toc imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj
a cero y toc obtiene el tiempo transcurrido.
A modo de ejemplo, el siguiente cdigo mide de varias formas el tiempo necesario para
resolver un sistema de 1000 ecuaciones con 1000 incgnitas. Tngase en cuenta que los
tiempos pequeos (del orden de las dcimas o centsimas de segundo), no se pueden medir
con gran precisin.
donde se han puesto varias sentencias en la misma lnea para que se ejecuten todas sin
tiempos muertos al pulsar intro. Esto es especialmente importante en la lnea de comandos en
la que se quiere medir los tiempos. Todas las sentencias de clculos matriciales van seguidas
de punto y coma (;) con objeto de evitar la impresin de resultados. Conviene ejecutar dos o
tres veces cada sentencia para obtener tiempos ptimos, ya que la primera vez que se
ejecutan se emplea un cierto tiempo en cargar las funciones a memoria.
Prctica:
La utilizacin ms bsica de MATLAB es su uso como calculadora, que funciona de una forma
similar que una calculadora programable, aunque bastante ms verstil.
Los elementos bsicos del MATLAB, como en cualquier otro lenguaje de programacin son:
constantes, operaciones, variables, expresiones y funciones.
2.1.1 CONSTANTES
Una constante numrica es cualquier nmero que se utiliza en un clculo sin que experimente
variacin durante una sesin de trabajo. Al igual que en clculo elemental tendremos tres tipos
de nmeros y, por lo tanto, tres tipos de constantes:
2.1.2 OPERACIONES
El orden en que estas operaciones se evalan en una expresin est dado por la siguiente ley
de precedencia:
Se pueden usar parntesis para alterar esta usual ordenacin, en cuyo caso la evaluacin se
inicia dentro del parntesis ms interno y se procede hacia fuera.
Ejercicio:
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 porcin de memoria; en ella podemos guardar
datos de un mismo tipo, nmeros o caracteres, recuperables y modificables durante la vida de
la variable en la sesin de trabajo, sin ms que hacer referencia a su nombre. Es decir, es un
nombre que se le da a una entidad numrica o carcter, que puede ser una matriz, un vector o
un escalar. El valor de esa variable, e incluso el tipo de entidad numrica o carcter que
representa, puede cambiar a lo largo de una sesin de MATLAB o a lo largo de la ejecucin de
un programa. La forma ms normal de cambiar el valor de una variable es colocndola a la
izquierda del operador de asignacin (=). Por ejemplo:
>> a=4/3;
>> b=11;
>> volumen=2;
>> temperatura=33.5;
>> nombre='Javier'
nombre =
Javier
Como se muestra el ejemplo, MATLAB puede definir variables que contengan cadenas de
caracteres. Las cadenas de texto van entre apstrofos o comillas simples s = 'cadena de
caracteres'.
definidas, relacionados todos ellos por operadores aritmticos. Se permite utilizar espacios en
blanco para separar las unidades bsicas de la expresin, mejorando su presentacin y lectura
posterior.
Una expresin de MATLAB puede tener las dos formas siguientes: primero, asignando su
resultado a una variable,
variable = expresin
expresin
>> 4*a-6/b+c
ans =
18.1212
Se considera por defecto que una expresin termina cuando se pulsa intro. Si se desea que
una expresin contine en la lnea siguiente, por ejemplo si es demasiado larga, hay que
introducir tres puntos (...) antes de pulsar intro (para evitar que pueda confundirse el primer
punto de este comando con el punto decimal, es conveniente dejar un espacio en blanco antes
de escribirlo).
>> s=1+2+3+4+5+6+7+8+9...
+10+11
s=
66
Tambin se pueden incluir varias expresiones en una misma lnea separndolas por comas (,)
o puntos y comas (;).
La ventaja de usar variables en las expresiones es que permite guardar todas las cifras
significativas de los clculos intermedios, teniendo por tanto una mayor precisin en el
resultado final y una mayor comodidad.
Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se escribe en
pantalla. Esta posibilidad es muy interesante, tanto para evitar la escritura de resultados
intermedios, como para evitar la impresin de grandes cantidades de nmeros cuando se
trabaja con matrices de gran tamao.
Los nombres de variables deben empezar siempre por una letra y pueden constar de hasta
63 caracteres, que pueden ser letras y nmeros. No pueden utilizarse para nombrar variables
los caracteres especiales siguientes:
El carcter guion bajo (_) se considera como una letra. La funcin namelengthmax permite
preguntar al programa por este nmero mximo de caracteres. A diferencia de otros lenguajes
de programacin, MATLAB no requiere ningn tipo de declaracin de las variables que se
vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres
errneos en las variables, porque no se recibir ningn aviso del ordenador.
Cuando se quiere tener una relacin de las variables que se han utilizado en una sesin de
trabajo se puede utilizar el comando who.
>> who
a c temperatura
b nombre volumen
Existe otro comando llamado whos que proporciona adems informacin sobre el tamao o
dimensin, la cantidad de memoria ocupada y el carcter real o complejo de cada variable.
>> whos
Name Size Bytes Class
Se sugiere utilizar de vez en cuando estos comandos en la sesin de MATLAB que se tiene
abierta. Esta misma informacin se puede obtener grficamente con el Workspace Browser, que
aparece con el comando View/Workspace o activando la ventana correspondiente si estaba
abierto.
clear sin argumentos, clear elimina todas las variables creadas previamente (excepto
las variables globales).
clear A, b borra las variables indicadas.
clear global borra las variables globales.
clear functions borra las funciones.
clear all borra todas las variables, incluyendo las globales, y las funciones.
Este comando es muy interesante, pues permite que la variable tenga un tiempo de vida
limitado durante una sesin de trabajo y, as, optimizar los recursos de la memoria.
La ejecucin de una sentencia puede abortarse pulsando simultneamente las teclas Control y
C.
Cualquier comentario que desee introducirse para facilitar posteriores lecturas de los comandos
ejecutados, puede incluirse en una lnea suelta, o a continuacin de una expresin; tan slo
debe ir precedido por %. Por ejemplo:
MATLAB tiene predefinidas una serie de variables y constantes especiales, que son variables
permanentes es decir, son aquellas con significado especial, y que no se pueden eliminar:
ans: variable utilizada por defecto para almacenar el resultado de evaluar expresiones
aritmticas, que contiene la respuesta (answer) del ultimo comando ejecutado, cuando
el resultado de dicho comando no se asigna explcitamente a ninguna variable.
eps: nmero ms pequeo que, aadido a otro, crea un nuevo nmero en coma
flotante 3 sobre el ordenador.
>> eps
ans =
2.2204e-016
pi: .
i, j: 1 Constante imaginaria.
inf: . Se trata de un valor excesivamente grande para ser almacenado.
>> 1/0
Warning: Divide by zero.
ans =
Inf
NaN: Not a number. Es el resultado que se proporciona si durante una operacin se
0
produce una indeterminacin, del tipo 0, , , etc.
0
>> b=inf/inf
b=
NaN
Con respecto a estas dos ltimas variables es necesario subrayar que el usuario debe
extremar las precauciones en el uso del paquete pues, por ejemplo, si a lo largo de un
programa se realiza el cculo 3/Inf (que matemticamente carece de sentido) el
programa se sigue ejecutando tomando para tal expresin el valor cero y dificultando
posteriormente la identificacin del error correspondiente.
date: toma el valor de la fecha actual.
clock: da un vector de 6 elementos que contiene como coordenadas el ao, el mes, el
da, la hora, el minuto y los segundos.
CLOCK = [year month day hour minute seconds]
>> clock
ans =
1.0e+003 *
2.0120 0.0050 0.0240 0.0170 0.0570 0.0126.
rand: genera de forma aleatoria un nmero entre 0 y 1.
>> rand
ans =
3
La representacin de coma flotante, es una forma de notacin cientfica usada en los CPU,
GPU, FPU, etc, con la cual se pueden representar nmeros reales extremadamente grandes y
pequeos de una manera muy eficiente y compacta, y con la que se pueden realizar
operaciones aritmticas.
0.9501
>> rand
ans =
0.2311
realmin: el menor nmero positivo utilizable.
realmax: el mayor nmero positivo utilizable.
>> realmin
ans =
2.2251e-308
>> realmax
ans =
1.7977e+308
flops: nmero de operaciones en punto flotante realizadas hasta el momento.
Por defecto, si solicitamos el valor de una variable slo se nos informa de cinco cifras
significativas, correspondientes a la visualizacin en formato corto. Para cambiar este nmero
tecleamos el comando:
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 notacin exponencial el valor de las
variables, debemos usar el comando:
De la misma forma,
Nos da una aproximacin racional, es decir en forma de fraccin, del valor de las variables que
se soliciten a continuacin.
Cuando se sale de MATLAB, se pierden todas las variables. Para evitarlo se puede utilizar la
instruccin save antes de salir. Esto hace que las variables se almacenen en el archivo de
disco matllab.mat. Al ingresar nuevamente a MATLAB se pueden recuperar todas las variables
con la instruccin load.
Sin embargo para realizar estas tareas es necesario disponer del mdulo MATLAB Symbolic
Math Toolbox. Para que una variable o expresin algebraica sea simblica, previamente hay
que declararla como tal con el comando syms, con el comando sym o introducindola entre
comillas. Ejemplo:
>> syms x y
>> x+x-6*y
ans =
2*x-5*y
>> y=sym(x)
nombre(argumento)
donde nombre identifica la funcin a utilizar y argumento el punto donde queremos evaluarla.
Existen numerosas funciones intrnsecas ya definidas en MATLAB, y es precisamente aqu
donde radica la gran potencia de este problema. En su nombre slo intervienen letras
minsculas. Enumeramos a continuacin algunas de ellas:
En todas las funciones intrnsecas, el argumento debe ir entre parntesis y puede ser una
constante, una variable ya definida anteriormente o una expresin.
En las funciones trigonomtricas el ngulo debe darse en radianes. Por tanto, si conocemos el
ngulo en grados debe convertirse previamente a radianes. MATLAB no proporciona funcin
alguna que transforme grados a radianes.
MATLAB incorpora funciones que permiten trabajar con lmites, sucesiones, derivadas o
integrales. Veremos unos ejemplos sencillos para trabajar estos conceptos matemticos.
2.2.1 LMITES
MATLAB contiene funciones que permiten trabajar con lmites y lmites laterales de una manera
muy simple. Esto posibilita el anlisis del estudio de la continuidad y derivabilidad de funciones,
as como analizar el carcter de las series numricas y de las series de potencias. Algunos
ejemplos son:
>> syms x
>> limit(exp(1/x),x,0,'left')
ans =0
>> limit(exp(1/x),x,0,'right')
ans =Inf
>> syms n
>> limit((3+n)/(2+6*n),inf)
ans =1/6
2.2.2 SUCESIONES
MATLAB permite trabajar con series numricas, tanto de trminos positivos como alternados.
>> 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 travs 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
Prctica:
3.1 VECTORES
El tratamiento que el paquete MATLAB hace de los vectores, tambin llamados arrays,
simplifica considerablemente la resolucin de problemas bsicos como pueden ser la
representacin grfica de funciones, el tratamiento estadstico de datos, etc.
Al igual que en clculo elemental, distinguiremos entre vectores fila y vectores columna.
>> 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 dems elementos
aumentan de h en h sin superar b .
v=[a:b] Define un vector fila cuyo primer elemento es a y los dems elementos
aumentan de 1 en 1 sin superar b .
v=linspace(a,b,n) Define un vector fila de n componentes, cuyo primer elemento es a
y cuyo ltimo elemento es b, con diferencia constante entre componentes consecutivas
k=(b-a)/(n-1).
v=logspace(a,b,n) Genera un vector fila de n puntos logartmicamente espaciados entre
10a y 10b. Si se omite el valor de n, se toma 50.
Por ejemplo,
>> u=linspace(-4,7,6)
u=
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 terico, no se
puede sumar un escalar a un vector. Sin embargo, MATLAB si lo permite. Por ejemplo, si y es
un vector, el comando y+2 aadir 2 a cada componente del vector.
>> y=1:5
>> y+2
>> y-2
>> 2*y
>> y/2
Por supuesto, estas operaciones son igualmente vlidas para vectores columna.
>> w=(1:3:20)
>> w+3
>> w-11
>> .1*w
>> w/10
>> a=1:3
>> b=4:6
>> a,b,a+b
>> a,b,a-b
>> a=(1:3),b=(4:6)
>> a+b,a-b
>> 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
Supngase ahora que se quiere evaluar la expresin 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 nmero variable de resultados. Cuando una
funcin tiene, en su definicin, ms de un argumento de salida, puede ser utilizada de varias
formas. La funcin max nos proporciona un ejemplo:
>> max(v)
MATLAB nos devolver el mximo valor de entre las componentes del vector v
- si la utilizamos en la forma:
>> [m,k]=max(v)
Hay otras funciones que tambin pueden tener un nmero variable de argumentos de entrada:
por ejemplo la funcin norm tiene distinto comportamiento segn la llamemos con un solo
argumento (norm(v)) o con dos argumentos (norm(v,p)).
>> 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
Prctica:
1.
Dadas las variables vectoriales a=(,2,3,4,5) y b=(e,2e,3e,4e,5e) calcular
c=sen a+b, d=cosh a, e=ln b, f=c*d, g=c/d, h=d2
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 lnea.
A=
123
456
789
Las componentes de una matriz se designan mediante los nmeros de sus subndices.
>> A(1,3)
ans =
ans =
123
ans =
ans =
23
56
Las matrices pueden tambin utilizarse como argumento de las funciones intrnsecas. Algunas
funciones especficas 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 vaca (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 nmero de elementos nulos se conocen como matrices
dispersas o huecas. MATLAB dispone de un sistema especial de almacenamiento y
manipulacin de matrices huecas.
La funcin
>> sparse(i,j,c,m,n)
dnde:
Esta funcin genera una matriz hueca de dimensin nxm, cuyos nicos elementos no nulos
son los de subndices (i(k),j(k)), de valor c(k)
Por ejemplo:
>> 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 tambin 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
Prctica:
3.3 POLINOMIOS
Un polinomio de grado n se representa en MATLAB por un vector fila de dimensin n+1, cuya
componente i-sima es el coeficiente de xn-i+1; es decir, el vector se forma con los coeficientes
del polinomio ordenados en orden decreciente de la potencia de la variable. Todos los
coeficientes intermedios que sean nulos deben incluirse. Es decir, en MATLAB los polinomios
se identifican con el vector fila de sus coeficientes:
roots(p) Calcula las races del polinomio p (es un vector columna y, en general, calcula
aproximaciones).
poly(raices) Si raices es un vector columna, devuelve el polinomio que tiene dichas
races. Se obtiene normalizado y puede ser de coeficientes complejos.
poly(A) Si A es una matriz cuadrada, es el polinomio caracterstico.
polyval(p,x) Calcula el valor del polinomio p en el punto x (x puede ser un vector.
conv(p1,p2) Producto de los polinomios p1 y p2.
deconv(p1,p2) Divisin de polinomios.
polyder(p) Derivada del polinomio p.
polyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que se ajusta a
los datos p(x(i)) ~= y(i), en el sentido de mnimo error cuadrtico medio.
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
Prctica:
x3 + x 2 + 1
Descomponer en fracciones simples el cociente
x 3 3x 2 + 4
x3 + x 2 + 1 35 13 1
= + + +1
x 3x + 4 9( x 2) 3( x 2) 9( x + 1)
3 2 2
Prctica:
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 carcter por elemento. Cada
carcter ocupa dos bytes. Las cadenas de caracteres van entre apstrofos o comillas simples,
como por ejemplo: 'cadena'. Si la cadena debe contener comillas, stas se representan por un
doble carcter comilla, de modo que se pueden distinguir fcilmente del principio y final de la
cadena. Por ejemplo, para escribir la cadena ni idea' se escribira ni idea.
Una matriz de caracteres es una matriz cuyos elementos son caracteres, o bien una matriz
cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener
el mismo nmero de elementos. Si es preciso, las cadenas (filas) ms cortas se completan con
blancos.
>> c='cadena'
c=
cadena
ans =
1 6
ans =
ans =
cadena
cc =
ms
madera
ans =
2 6
Las funciones ms importantes para manejo de cadenas de caracteres son las siguientes:
isletter() detecta si un carcter es una letra del alfabeto. Si se le pasa un vector o matriz
de caracteres devuelve un vector o matriz de unos y ceros,
isspace() detecta si un carcter es un espacio en blanco. Si se le pasa un vector o
matriz de caracteres devuelve un vector o matriz de unos y ceros,
strcmp(c1,c2) comparacin de cadenas. Si las cadenas son iguales devuelve un uno, y
si no lo son, devuelve un cero,
strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y
minsculas,
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara
dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros,
s=[s,' y ms'] concatena cadenas, aadiendo la segunda a continuacin de la primera,
findstr(c1,c2) devuelve un vector con las posiciones iniciales de todas las veces en que
la cadena ms corta aparece en la ms larga,
strmatch(cc,c) devuelve los ndices de todos los elementos de la matriz de caracteres
(o vector de celdas) cc, que empiezan por la cadena c,
strrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en c1
[p,r]=strtok(t) separa las palabras de una cadena de caracteres t. Devuelve la primera
palabra p y el resto de la cadena r,
int2str(v) convierte un nmero entero en cadena de caracteres,
num2str(x,n) convierte un nmero real x en su expresin por medio de una cadena de
caracteres, con cuatro cifras decimales por defecto (pueden especificarse ms cifras,
con un argumento opcional n),
str2double(str) convierte una cadena de caracteres representando un nmero real en el
nmero real correspondiente,
vc=cellstr(cc) convierte una matriz de caracteres cc en un vector de celdas vc,
eliminando los blancos adicionales al final de cada cadena. La funcin char() realiza las
conversiones opuestas,
sprintf convierte valores numricos en cadenas de caracteres.
Con las funciones anteriores se dispone en MATLAB de una amplia gama de posibilidades
para trabajar con cadenas de caracteres.
ans =3.142
>> num2str(pi,8)
ans =3.1415927
Es habitual convertir los valores numricos en cadenas de caracteres para poder imprimirlos
como ttulos en los dibujos o grficos. Vase el siguiente ejemplo:
3.5.2 HIPERMATRICES
Son arrays de ms de dos dimensiones, es decir con matrices de ms de dos dimensiones (por
ejemplo, ver en la figura una hipermatriz de tres dimensiones).
Una posible aplicacin es almacenar con un nico nombre distintas matrices del mismo tamao
(resulta una hipermatriz de 3 dimensiones). Los elementos de una hipermatriz pueden ser
nmeros, caracteres, estructuras, y vectores o matrices de celdas. El tercer subndice
representa la tercera dimensin: la profundidad de la hipermatriz.
AA =
123
456
AA(:,:,1) =
123
456
AA(:,:,2) =
234
567
>> BB=randn(2,3,2)
BB(:,:,1) =
BB(:,:,2) =
La funcin cat() permite concatenar matrices segn 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 aplicacin a hipermatrices:
1. Todas las funciones de MATLAB que operan sobre escalares (sin(), cos(), etc.) se
aplican sobre hipermatrices elemento a elemento (igual que sobre vectores y matrices).
Las operaciones con escalares tambin se aplican de la misma manera.
2. Las funciones que operan sobre vectores (sum(), max(), etc.) se aplican a matrices e
hipermatrices segn la primera dimensin, resultando un array de una dimensin
inferior.
3. Las funciones matriciales propias del lgebra Lineal (det(), inv(), etc.) no se pueden
aplicar a hipermatrices. Para poderlas aplicar hay que extraer primero las matrices
correspondientes (por ejemplo, con el operador dos puntos (:)).
3.5.3 ESTRUCTURAS
Una estructura (struct) es una agrupacin de datos de tipo diferente bajo un mismo nombre.
Estos datos se llaman miembros (members) o campos (fields). Una estructura es un nuevo tipo
de dato, del que luego se pueden crear muchas variables (objetos o instances). Por ejemplo, la
estructura alumno puede contener los campos nombre (una cadena de caracteres) y carnet (un
nmero).
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).
Tambin puede crearse la estructura por medio de la funcin struct(), como por ejemplo,
al =
nombre: 'Ignacio'
carnet: 76589
Los nombres de los campos se pasan a la funcin struct() entre apstrofos ('), seguidos del
valor que se les quiere dar. Este valor puede ser la cadena vaca ('') o la matriz vaca ([]).
crea un vector de 10 elementos cada uno de los cuales es una estructura tipo alumno. Slo el
elemento 10 del vector es inicializado con los argumentos de la funcin struct(); el resto de los
campos se inicializan con una cadena vaca o una matriz vaca 4. Para dar valor a los campos
de los elementos restantes se puede utilizar un bucle for con sentencias del tipo:
MATLAB permite aadir un nuevo campo a una estructura en cualquier momento. La siguiente
sentencia aade el campo edad a todos los elementos del vector alum, aunque slo se da valor
al campo del elemento 5:
>> alum(5).edad=18;
Para ver el campo edad en los 10 elementos del vector puede teclearse el comando:
4
Esta forma de crear arrays de estructuras da error si la estructura ha sido previamente
declarada global.
>> 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 ms interna se utiliza dos veces
el operado punto (.), como puede verse en el siguiente ejemplo, en el que la estructura clase
contiene un campo que es un vector alum de alumnos:
clase =
curso: 'primero'
grupo: 'A'
>> clase.alum(2).nombre='Mara';
>> clase.alum(2).edad=17;
>> clase.alum(2)
ans =
nombre: 'Mara'
edad: 17
>> clase.alum(1)
ans =
nombre: 'Juan'
edad: 19
Las estructuras se generalizan con las clases y los objetos, que no se vern en este manual.
Obsrvese por ejemplo cmo 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 obtendra un error). Si es preciso se utiliza el comando clear.
Obsrvese que para crear un vector de celdas los valores asignados a cada elemento se han
definido entre llaves {...}.
Otra nomenclatura alternativa y similar, que tambin utiliza llaves, es la que se muestra a
continuacin:
>> vb{1}=[1 2 3]
vb =
[1x3 double]
vb =
>> 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 funcin cell2struct(). El tercer argumento (un 2) indica
que es la segunda dimensin del cell array (las columnas) la que va a dar origen a los campos
de la estructura.
>> 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 ms diversos tipos de informacin. 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 fciles de usar
(easy-touse) para representar grficamente, de forma rpida, funciones definidas por una
expresin matemtica. Tienen slo un pequeo nmero de parmetros que se pueden
especificar. Todas ellas hacen uso de otras funciones MATLAB que disponen de un nmero
superior de opciones y parmetros que podemos modificar. Cuando se necesite hacer grficas
de funciones que no vienen definidas por una frmula (definidas a trozos, definidas a travs de
programas o por sus valores en un nmero finito de puntos, ) habr que recurrir a dichas
funciones ms generales.
El comando ms fcil de usar de que dispone MATLAB para dibujar curvas planas definidas
por una frmula matemtica (no por un conjunto de valores) es el comando ezplot, que puede
ser usado de varias formas.
Ejemplo:
>> ezplot('2*sin(x/2)*cos(3*x)')
>>f=sol;
fill(x1,y1.opcin1, x2,y2.opcin2, ),
Ejemplo:
>> ezplot('2*sin(x/2)*cos(3*x)',[0,pi/2])
Prctica:
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 paramtricas
x=x(t) y=y(t) z=z(t) para t en el intervalo [0,2], en el
primer caso y para t en el intervalo [a,b] en el segundo
caso.
Ejemplo:
>> ezplot3('3*cos(t)','t*sin(t^2)','sqrt(t)')
4.1.3 SUPERFICIES
ezmesh(x,y,z), ezmesh(x,y,z,[a,b]),
ezmesh(x,y,z,[a,b,c,d]) donde x, y, z son expresiones de
funciones de dos variables dibuja la superficie de
coordenadas paramtricas x=x(s,t) y=y(s,t) z=z(s,t)
para (s,t) variando en el cuadrado [-2,2]x[-2,2] en
el primer caso, en el cuadrado [a,b]x[a,b] en el
segundo, y en el rectngulo [a,b]x[c,d] en el tercer caso
Ejemplo:
>> ezmesh('s*cos(t)','s*sin(t)','t',[- pi,pi])
z=f(x,y).
Ejemplo:
>> ezcontour('x*exp(-x^2 - y^2)')
Vamos a ver algunos comandos que modifican el aspecto de un grfico. Veremos su efecto
sobre la grfica. No se exponen todas las posibilidades de estos comandos. Utilizando el help
de MATLAB, se pueden ver el resto de las opciones.
Dado el grfico siguiente, veremos cmo vara segn las diferentes opciones que aadamos:
grid on / grid off aade / elimina las cuadrculas sobre los ejes actuales.
title(Ttulo de la grfica)
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 grfica, sin borrar lo anterior.
figure
figure(h)
Crea una nueva ventana grfica, la activa y la trae al frente, delante de todas las
ventanas abiertas.
En el primer caso le asigna un nmero de forma automtica.
En el segundo caso le asigna el nmero h, es decir, el nombre Figure No. h
subplot(m,n,p) Este comando permite dividir la ventana grfica en una matriz mxn de
subventanas grficas, activando para dibujar la p-sima de ellas. Ver ejemplo siguiente:
>> subplot(2,2,1); ezcontour('x*exp(-x^2 - y^2)');
Vemos aqu los comandos ms completos de que dispone MATLAB para dibujar curvas planas
y en el espacio, superficies, lneas de nivel, etc.
plot(x,y) Si x e y son dos vectores de la misma dimensin, n, dibuja una curva (lineal a trozos)
que pasa por los puntos (xi , yi), i=1, n. Es decir, reproduce la grfica de las componentes de
un vector frente a las componentes de otro vector, y para ello ambos vectores deben tener la
misma dimensin.
Ejemplo:
>> x=0:pi/100:4*pi; y=sin(x).*cos(x/3);
>> plot(x,y)
plot(x1,y1,x2,y2) Dibuja las dos curvas (x1i , y1i), i=1, n1 y (x2i , y2i), i=1, n2 en la misma
ventana y en los mismos ejes.
Ejemplo:
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3); z=sin(x).*cos(x/2);
>> plot(x,y,x,z)
plot(x,A) donde x es un vector columna (resp. fila) y A es una matriz, dibuja tantas curvas (xi ,
Aij), i=1, n (como columnas (resp. filas) tenga la matriz A.
Ejemplo:
>> x=0:pi/100:4*pi;
>> A=[sin(x);sin(x/2);sin(x/3);sin(x/4)];
>> plot(x,A)
El comando plot asigna, por defecto, determinados colores a las grficas. Estos colores, as
como el tipo de lnea a utilizar para dibujar (continua, de puntos, con marcadores, etc.) se
pueden modificar.
plot(x,y,param) donde param es una cadena de caracteres como mximo, cada uno a elegir de
una de las columnas siguientes:
b amarillo. asteriscos - lnea slida,
b azul. puntos - lnea slida,
g verde o crculo : linea de puntos,
r rojo x aspas -. punto-guin,
c cyan + cruces guiones,
m magenta * asteriscos,
y amarillos s square,
k negro d diamantes,
v tringulo,s
etc. (para ms informacin se puede consultar help plot).
Ejemplo:
>> x=0:pi/100:4*pi; y=sin(x).*cos(x/3);
>> plot(x,y,r*)
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 dimensin conteniendo,
respectivamente, las coordenadas x , y , z de los nodos de la malla. Los segmentos de la malla
se colorean segn los valores de la funcin (coordenada z).
La funcin meshc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY.
La funcion meshgrid sirve para construir la malla de base, en el plano XY.
Si xp es una particin del intervalo [x0,x1] e yp es una particin del intervalo [y0,y1], entonces
>> [x,y]=meshgrid(xp,yp)
construye dos matrices, x e y, que definen una malla del rectngulo [x0,x1]x[y0,y1]. . La matriz
x contiene las coordenadas X de los puntos de la malla y la matriz y sus coordenadas Y.
Ejemplo:
>> xp=linspace(pi/4,2*pi,50);
>> [x,y]=meshgrid(xp,xp);
>> z=(cos(x)./x).*(sin(y)./sqrt(y));
>> mesh(x,y,z)
surf(x,y,z) / surfc(x,y,z) / surfl(x,y,z) La funcin surf hace lo mismo que mesh, pero dibujando
los segmentos de la malla en color negro y rellenando los rectngulos de la malla de color,
segn los valores de la funcin.
La funcin surfc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY.
La funcion surfl hace lo mismo que surf, pero adems aade una fuente de luz lateral
contour(x,y,z,n)
contour3(x,y,z,n)
La funcin contour dibuja las proyecciones sobre el plano XY de las lneas de nivel
(isovalores)
La funcin contour3 dibuja las lneas de nivel sobre la misma superficie. En ambos casos n es
el nmero de lneas a dibujar. Se puede usar la funcin colorbar para aadir a la grfica una
barra con la graduacin de colores y la correspondencia con los valores de la funcin
representada. (Esta funcin puede ser usada con cualquier otra funcin grfica que utilice
colores).
Prctica:
Los programas o funciones de MATLAB se guardan en ficheros de nombre ****.m. Por esto nos
referimos a ellos como m-ficheros o ficheros-m. Son ficheros ASCII (de texto) que contienen
secuencias de comandos de MATLAB.
Para crear y modificar estos ficheros, la versin para Windows de MATLAB dispone de su
propio EDITOR (aunque puede usarse cualquier otro editor ASCII).
La primera lnea de un fichero nombre.m que define una funcin 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 parntesis. Si no hay variables de salida, no es necesario poner los corchetes ni el signo =
Las lneas que comienzan por el carcter % son lneas de comentario, es decir, son ignoradas
al ejecutar la funcin o script.
Las primeras lneas de comentario de un fichero ****.m pueden utilizarse para construir un help
del programa.
Si una expresin es demasiado larga, se puede continuar en la lnea siguiente, indicndolo por
tres puntos: ...
En los scripts y funciones conviene terminar cada lnea por punto y coma, ya que sino
aparecer un exceso de informacin en el terminal.
Las funciones y los scripts pueden ser llamados desde la lnea de comandos y desde otro
fichero *.m.
Para ejecutar un script llamado program.m basta con teclear su nombre program (sin el punto
ni la m), siempre y cuando su localizacin forme parte del search path. La ejecucin del
programa termina cuando se llega a su ltima sentencia ejecutable. En cualquier punto del
El nmero de argumentos de salida de una funcin no tiene que ser fijo. Puede depender de
cmo se llame a la funcin
Una funcin llamada funcionita.m se llama como el resto de funciones MATLAB: por su
nombre (sin el punto ni la m) y proporcionando los datos de entrada necesarios, a travs de
variables o de constantes.
Observacin: en un fichero *.m que contenga una funcin pueden incluirse subfunciones.
Son funciones con nombre diferente del nombre del fichero (y por tanto de la funcin principal),
y que slo son visibles para las funciones del mismo fichero.
MATLAB posee un lenguaje de programacin que como cualquier otro lenguaje dispone de
sentencias para realizar bifurcaciones o estructuras de control condicionadas y bucles.
Una condicin es una expresin que puede incluir operaciones aritmticas, relacionales y
lgicas, y cuyo resultado es un verdadero o falso lgico. Un ejemplo sencillo sera 2*a+1>0.
Figura 26
Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos. En
MATLAB el cuerpo de estas sentencias de determina mediante la palabra end.
Figura 27
La Figura 27 muestra dos posibles formas de bucle, con el control situado al principio o al final
del mismo. Si el control est situado al comienzo del bucle es posible que las sentencias no se
ejecuten ninguna vez, por no haberse cumplido la condicin cuando se llega al bucle por
primera vez. Sin embargo, si la condicin est al final del bucle las sentencias se ejecutarn
por lo menos una vez, aunque la condicin no se cumpla. Muchos lenguajes de programacin
disponen de bucles con control al principio (for y while en C/C++/Java) y al final (do while
en C/C++/Java). En MATLAB no hay bucles con control al final del bucle, es decir, no existe
construccin anloga a do ... while.
Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de ficheros *.m.
Tambin se aplican con frecuencia en el uso interactivo de MATLAB.
5.3.1 SENTENCIA IF
En su forma ms simple, la sentencia if se escribe en la forma siguiente:
if condicion
sentencias
end
Si la condicin es:
verdadera se ejecutan los comandos entre if y end.
falsa se pasa el control de la ejecucin a la sentencia siguiente a la end.
Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones como
se desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opcin por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
donde la opcin por defecto else puede ser omitida: si no est presente no se hace nada en
caso de que no se cumpla ninguna de las condiciones que se han chequeado.
Una observacin muy importante: la condicin del if puede ser una condicin matricial, del tipo
A==B, donde A y B son matrices del mismo tamao. Para que se considere que la condicin
se cumple, es necesario que sean iguales dos a dos todos los elementos de las matrices A y B
(aij=bij, 1im, 1jn). Basta que haya dos elementos aij y bij diferentes para que las matrices ya
no sean iguales, y por tanto las sentencias del if no se ejecuten. Anlogamente, una condicin
en la forma A=B exige que todos los elementos sean diferentes dos a dos (aijbij, 1im,
1jn). Bastara que hubiera dos elementos aij y bij iguales para que la condicin no se
cumpliese. En resumen:
if A==B exige que todos los elementos sean iguales dos a dos
if A=B exige que todos los elementos sean diferentes dos a dos
Como se ha dicho, MATLAB dispone de funciones especiales para ayudar en el chequeo de
condiciones matriciales. Por ejemplo, la funcin isequal(A, B) devuelve un uno si las dos
matrices son idnticas y un cero en caso de que difieran en algo.
end
Una ltima forma de inters del bucle for es la siguiente (A es una matriz):
for i=A
sentencias
end
La variable i es un vector que va tomando en cada iteracin el valor de una de las columnas de
A. Cuando se introducen interactivamente en la lnea de comandos, los bucles for se ejecutan
slo despus de introducir la sentencia end que los completa.
5
El carcter (~) 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 comparacin se cumple el resultado es 1 (true), mientras que si no se cumple es 0
(false). Recprocamente, cualquier valor distinto de cero es considerado como true y el
cero equivale a false. Cuando los operadores relacionales de MATLAB se aplican a dos
matrices o vectores del mismo tamao, la comparacin se realiza elemento a elemento, y el
resultado es otra matriz de unos y ceros del mismo tamao, que recoge el resultado de
cada comparacin entre elementos. Considrese el siguiente ejemplo como ilustracin de lo
que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
01
00
>> A~=B
ans =
10
11
6
Es un concepto distinto del de funciones sobrecargadas (funciones distintas con el mismo
nombre y distintos argumentos), utilizadas en C/C++/Java. En MATLAB una misma funcin
puede ser llamada con ms o menos argumentos y valores de retorno. Tambin en C/C++ es
posible tener un nmero variable de argumentos, aunque no de valores de retorno.
trabajo. Para que la funcin tenga acceso a variables que no han sido pasadas como
argumentos es necesario declarar dichas variables como variables globales, tanto en el
programa principal como en las distintas funciones que deben acceder a su valor. Es frecuente
utilizar el convenio de usar para las variables globales nombres largos (ms de 5 letras) y con
maysculas.
Por razones de eficiencia, los argumentos que recibe una funcin de MATLAB no se copian a
variables locales si no son modificados por dicha funcin. Esto tiene importantes
consecuencias en trminos de eficiencia y ahorro de tiempo de clculo. Sin embargo, si dentro
de la funcin se realizan modificaciones sobre los argumentos recibidos, antes se sacan copias
de dichos argumentos a variables locales y se modifican las copias. .
Dentro de la funcin, los valores de retorno deben ser calculados en algn momento.De todas
formas, no hace falta calcular siempre todos los posibles valores de retorno de la funcin, sino
slo los que el usuario espera obtener en la sentencia de llamada a la funcin. En cualquier
funcin existen dos variables definidas de modo automtico, llamadas nargin y nargout, que
representan respectivamente el nmero de argumentos y el nmero de valores de retorno con
los que la funcin ha sido llamada. Dentro de la funcin, estas variables pueden ser utilizadas
como el programador desee.
La ejecucin de una funcin termina cuando se llega a su ltima sentencia ejecutable. Si se
quiere forzar el que una funcin termine de ejecutarse se puede utilizar la sentencia return,
que devuelve inmediatamente el control al entorno de llamada.
atan y atan2, para calcular el arco cuya tangente tiene un determinado valor. El resultado de
dichas funciones est expresado en radianes. La funcin atan recibe un nico argumento, con
lo cual el arco que devuelve est comprendido entre /2 y +/2 (entre 90 y 90), porque por
ejemplo un arco de 45 es indistinguible de otro de 135, si slo se conoce la tangente. La
funcin atan2 recibe dos argumentos, uno proporcional al seno del ngulo y otro al coseno. En
este caso ya se pueden distinguir los ngulos en los cuatro cuadrantes, entre y (entre
180 y 180).
La funcin atan3 definida anteriormente puede recibir uno o dos argumentos: si recibe uno
llama a atan y si recibe dos llama a atan2 (si recibe ms da un mensaje de error). Adems,
atan3 puede devolver uno o dos valores de retorno. Por ejemplo, si el usuario la llama en la
forma:
>> a = atan3(1);
devuelve un valor de retorno que es el ngulo en radianes, pero si se llama en la forma:
>> [a, b] = atan3(1,-1);
devuelve dos valores de retorno, uno con el ngulo en radianes y otro en grados. Obsrvese
cmo la funcin atan3 utiliza los vectores de celdas varargin y varargout, as como el nmero
actual de argumentos nargin con los que ha sido llamada.
5.7.6 SUBFUNCIONES
Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada funcin. El
nombre de la funcin deba coincidir con el nombre del fichero. A partir de la versin 5.0 se
introdujeron las subfunciones, que son funciones adicionales definidas en un mismo fichero
*.m, con nombres diferentes del nombre del fichero (y del nombre de la funcin principal) y que
las subfunciones slo pueden ser llamadas por las funciones contenidas en ese fichero,
resultando invisibles para otras funciones externas.
A continuacin se muestra un ejemplo contenido en un fichero llamado mi_fun.m:
function y=mi_fun(a,b)
y=subfun1(a,b);
function x=subfun1(y,z)
x=subfun2(y,z);
function x=subfun2(y,z)
x=y+z+2;
Prctica:
Crear una funcin que reciba un vector u y devuelva un 1 si todos los elementos del
vector son estrictamente positivos y 0 en caso contrario.
Posible solucin:
function flag=ftodospos(u)
flag=1;
i=1;
while i<=length(u)
if u(i)<=0
flag=0;
break;
end
i=i+1;
end
existen tambin otros mtodos posibles: escribir funciones en C para traducir a formato
*.mat (y cargar despus con load), crear un fichero ejecutable *.mex 7 que lea los
datos, etc.
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 ms que proporcionalmente
el tiempo de depuracin y eliminacin de errores.
Otro objetivo de la programacin debe ser mantener el cdigo lo ms sencillo y ordenado
posible. Al pensar en cmo hacer un programa o en cmo realizar determinada tarea es
conveniente pensar siempre primero en la solucin ms sencilla, y luego plantearse otras
cuestiones como la eficiencia.
Finalmente, el cdigo debe ser escrito de una manera clara y ordenada, introduciendo
comentarios, utilizando lneas en blanco para separar las distintas partes del programa,
sangrando las lneas para ver claramente el rango de las bifurcaciones y bucles, utilizando
nombres de variables que recuerden al significado de la magnitud fsica correspondientes, etc.
En cualquier caso, la mejor forma (y la nica) de aprender a programar es programando.
Prctica:
Supongamos que queremos leer los datos almacenados en un fichero, denominado datos.txt,
que contiene esta informacin:
Figura 28 (a,b,c,d)
Con el profiler se puede medir el tiempo (en centsimas de segundo) empleado en cada lnea
del fichero, en cada llamada a una funcin e incluso en cada operador del lenguaje.
Para arrancar la ventana del profiler se puede ejecutar el comando Profiler en el men
Desktop, utilizar el men Start/MATLAB o simplemente teclear profile viewer en la ventana
de comandos. El resultado ser que se abre la ventana que se muestra en la Figura 28-a.
Ahora se debe introducir en la ventana Run this code el nombre de la funcin o fichero *.m
que se quiere analizar y despus clicar en el botn Start Profiling. Inmediatamente el
programa empieza a ejecutarse bajo la supervisin del profiler, lo cual se sabe porque en la
parte superior derecha de la ventana aparece una marca verde y comienza a correr el tiempo.
Al acabar la ejecucin se muestra el resumen de resultados (Profile Summary), que para el
programa tiroparMain4.m. En esta figura se muestra un informe del n de veces que ha sido
llamada cada funcin y del tiempo total que se ha empleado en ella.
Clicando sobre el enlace a la funcin tiropar4salida se muestra la informacin de la Figura 28-
c y de la Figura 28-d. En la parte de arriba de la ventana (Figura 28-c) se muestra el nmero de
veces que ha sido llamada cada lnea de cdigo y el tiempo empleado en ella. En la parte
inferior de la ventana (Figura 28-d) aparece una informacin similar referida al cdigo fuente del
fichero. Las sentencias que se han llevado ms tiempo de CPU aparecen coloreadas en un
tono rosa de intensidad creciente.
Una informacin particularmente interesante es la proporcionada bajo el epgrafe M-Lint
results, (no mostrados en las figuras) que contiene sugerencias para mejorar la eficiencia del
programa. Por ejemplo, se avisa de la existencia de variables que se calculan pero no se
utilizan posteriormente, de la existencia de alternativas ms eficientes, etc.
El profiler proporciona tambin informacin sobre la funcin padre (la que la ha llamado) y las
funciones hijas de cada funcin.
Otra forma de llamar al profiler es por medio de la funcin profile, que se intercala en el
cdigo fuente en la forma (se supone que estas lneas forman parte de un fichero *.m):
profile on -detail 'builtin';
sol=ode15s(@tiropar4,tspan2,y0,options,1,0.001);
profile viewer;
donde la primera lnea activa el profiler a la vez que define el grado de detalle que se desea y
el tipo de tiempo que se desea medir. La segunda lnea es una llamada a la funcin ode15s
que a su vez llama a muchas otras funciones y la tercera lnea detiene el profiler y le pide un
informe con los resultados calculados. Los informes presentados por el Profiler son similares a
los de la Figura 29, aunque en este caso no se muestra un informe total sobre la funcin
tiroparMain4, sino slo sobre la parte de cdigo que est entre profile on y profile viewer.
Existen dos posibles grados de detalle respecto a la informacin que se le pide al profiler:
'mmex' determina el tiempo utilizado por funciones y subfunciones definidas en
ficheros *.m y *.mex. sta es la opcin por defecto.
'builtin' como el anterior incluyendo las funciones intrnsecas de MATLAB.
Otros posibles comandos relacionados con el profiler de MATLAB son los siguientes:
profile viewer abre la ventana del profiler mostrada en la Figura 29,
profile on activa el profiler poniendo a cero los contadores,
profile on detail level como el anterior, pero con el grado de detalle indicado,
profile on history activa el profiler con informacin sobre el orden de las llamadas a
las funciones (puede registrar hasta 10000 llamadas),
profile off desactiva el profiler sin poner a cero los contadores,
profile resume vuelve a activar el profiler sin poner a cero los contadores,
profile clear pone a cero los contadores,
s = profile('status') muestra una estructura conteniendo los datos del profile,
stats = profile('info') detiene el profiler y muestra una estructura con los resultados
(consultar el Help para ms informacin sobre las variables miembro de estas
estructuras).
El profiler se puede aplicar a funciones y a ficheros de comandos. La ejecucin de un
programa con el profiler puede ser bastante ms lenta que sin l, por el trabajo extra que
conlleva.
Calcular medias para deducir algo acerca del comportamiento especfico del problema
en estudio.
Describir la dispersin de los datos respecto de la media.
Estudiar la relacin que existe entre distintas variables medidas.
Visualizar grficamente los datos.
Realizar distintas interpolaciones a partir de los datos medidos para deducir el
comportamiento en otros puntos no medidos.
En esta parte mostraremos las soluciones que MATLAB ofrece para cada uno de los puntos
anteriores.
Para analizar, con MATLAB, anlisis estadsticos de un conjunto de datos, stos deben ser
almacenados utilizando matrices: cada columna de la matriz representar una variable medida
y cada fila los valores que toman todas las variables consideradas en un determinado punto de
medida. Si el nmero de datos es pequeo, se puede introducir los datos a mano mediante una
matriz, sino recomendamos el uso de un fichero.
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 agrupacin de los datos veremos en los apartados siguientes cmo
proceder a su anlisis.
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 intercuartlico de los datos que ocupan cada una de las
columnas (variables) de la matriz A. Ej.:
r = unidrnd(10,5,2)
r=
5 10
32
11
34
27
iqr(r)
ans =
1.7500 6.0000
prdtile(A,p): Calcula los percentiles designados en p (en porcentaje) para cada una de
las columnas (variables) de A. El resultado es una matriz cuya fila i-sima contiene los
percentiles del p(i), de cada una de las columnas de A. Ej.:
r = unidrnd(10,5,2)
r=
68
57
91
92
55
prctile(r,[25;50;75])
ans =
5.0000 1.7500
6.0000 5.0000
9.0000 7.2500
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 dispersin o variacin de los datos, para dar una idea de cuan esparcidos se encuentran,
puede medirse utilizando la desviacin tpica. Dado un vector y de datos, su desviacin tpica o
estndar se define por:
(() )2
() =
>>std(y)
El argumento de la funcin std tambin puede ser una matriz; en ese caso la desviacin se
calcular para cada una de las columnas de la misma y se guardar en un vector fila.
=1 ()()
=
( 2 2 2 2
=1 () ) (=1 () )
Si r toma un valor prximo a cero, significa que no hay apenas correlacin entre las variables.
>>r=corrcoef([x,y])
donde suponemos que los valores de las variables x e y se guardan en los vectores columna
de nombre respectivo.
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 observacin 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 fcil comprobar que sus componentes
son las del vector de desviaciones tpicas al cuadrado.
Ilustracin
Figura 29:1:ejemplo
Ejemplodedehistograma.
histograma.
3. Perfil de la muestra.
a. El comando stairs(y) es anlogo al bar pero pintando nicamente el perfil de la
muestra.
b. stem(y) crea una grfica con los datos dados en el vector y sobre el eje de
ordenadas, en el de abscisas se consideran trodos los puntos de la muestra y
para cada valor de la muestra se representa la lnea paralela al eje oy que
conecta este punto del eje ox con la correspondiente ordenada.
>>stem(x,y)
representa la secuencia de datos de la variable y en los valores especificados
de la variable x. En resumen, el comando stem presenta tambin el perfil de la
muestra.
Con un string adicional se puede elegir el estilo de la lnea:
>>stem(x,y,option)
donde la eleccin del trazo (no del color) se hace igual que con el comando
plot.
4. Grficos de errores
>>errorbar(x,y,e)
dibuja la grfica del vector y frente al vector x con una barra vertical en cada punto
dado, que representa el error especificado en el vector e. Adems, la barra csobre el
punto i-simo est centrada en el punto (x(i),y(i)) y su longitud es doble que la de la
componente i-sima del vector e.
5. Histograma angular
El comando rose nos permite realizar un histograma angular. La utilizacin es similar al
comando hist, con la muestra y formada por ngulos en [0,2]; para ello, en muchos
casos ser necesaria una manipulacin adecuada de los elementos de la muestra.
Todos estos comandos de dibujo pueden complementarse con los de etiquetado, definicin de
ejes, utilizados con plot.
observadas.
Para ello, en primer lugar debemos recoger datos que muestren los valores correspondientes a
las variables x e y para las cuales se han realizado las medidas ()
=1 e ()=1 ,
respectivamente. Si representamos los puntos medidos sobre un sistema de coordenadas
rectangulares obtendremos lo que se conoce como diagrama de dispersin.
En lo sigue, trataremos de resolver la siguiente cuestin: construir una curva que permita
obtener el valor de la variable y en puntos de la variable x distintos de los medidos, y as poder
expresar la ley de comportamiento que liga ambas variables. A esta pregunta se puede
responder de dos formas: calculando la curva de regresin o realizando interpolacin.
>>p=polyfit(x,y,n)
(( ) )2 .
=1
Prctica:
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 polgono 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 polinmicas; en general, no ser una
curva regular. Esta tcnica se conoce con el nombre de interpolacin. Dependiendo del grado
de las funciones consideradas tendremos interpolacin lineal (grado 1), cbica (grado 3), etc.
La interpolacin lineal es el mtodo utilizado, por ejemplo, por el comando plot para realizar la
representacin grfica.
El comando de MATLAB:
vector_y=interp1(x,y,vector_x,opcin)
a partir de los valores medidos en las variables x e y, utiliza un mtodo de interpolacin para
calcular, en cada componente de la variable independiente vector_x el correspondiente valor
de la variable dependiente. Las componentes de vector_s deben estar en el rango
determinadao por los valores mnimo y mximo de las x; fuera de este rango el valor calculado
es NaN. El argumento opcin es una variable carcter que indica el mtodo a considerar:
El argumento de salida vector_y ser un vector de la misma dimensin y tipo que el vector_x.
interp1q(x,y,vector_x)
donde x e y deben ser vectores columna de la misma dimensin y, adems, x debe ser
montona creciente.
matriz_z=interp2(X;Y;Z;matriz_x,matriz_y,opcin)
donde,
X e Y son matrices que definen una malla sobre el plano XY de puntos de medida. Su
estructura debe ser similar a la obtenida con el comando meshgrid.
Z contiene los valores medidos en las abscisas correspondientes de las matrices X e Y.
matriz_x y matriz_y especifican los puntos donde se desea estimar el valor de la
variable Z.
El argumento opcin es una variable carcter que indica el mtodo a considerar:
o linear: interpolacin bilineal
o cubic: interpolacin bicbica.
Ambos mtodos necesitan que las variables X e Y sean montonos. Adems, la
interpolacin bicbica necesita que los puntos estn igualmente espaciados.
matriz_z alamacena los correspondientes valores estimados.
Prctica:
Obtener los polinomios de regresin de primero y segundo grado. Calcular para los polinomios
obtenidos cul sera el valor estimado de la conductividad elctrica a los 600 y a los 1000C.
Para que un lenguaje de programacin revele todo su potencial debe permitir que los usuarios
puedan interaccionar con los programas de una forma cmoda. Para esto se desarroll el
concepto de GUI.
Matlab Guide es un entorno de programacin visual que ofrece Matlab para poder realizar y
ejecutar programas de simulacin, tiene las caractersticas bsicas de todos los programas
visuales como Visual Basic o Visual C++.
El lenguaje ms habitual para crear GUIs es Java, ya que tiene la enorme ventaja de funcionar
en cualquier mquina, sin embargo Java resulta muy lento para hacer clculos eficientes. En
comparacin con Java, Matlab es ms poderoso al realizar clculos grandes.
En MATLAB podemos desarrollar las GUI de dos maneras. O bien desde cero, lo cual implica
tener que definir por texto cada uno de los elementos que configuran la GUI. O bien haciendo
uso de una utilidad que incorpora MATLAB llamada GUIDE.
Para construir una GUI con GUIDE desde esta generaremos una distribucin de los elementos
que la componen (botones, textos, paneles, desplegables), GUIDE compilar estos
elementos en un fichero con extensin .fig y crear un fichero .m que deberemos programar
para obtener las funcionalidades deseadas. Es decir, la GUI consta de dos archivos: uno .m
que contiene el cdigo del programa, y otro .fig que es la parte grfica. Las dos partes estn
unidas a travs de las subrutinas de llamada denominadas callback. La cadena de llamada es
una cadena que consiste en un comando, un conjunto de rdenes o una llamada de funcin.
En esta cadena se especifican todas las tareas de cmputo que deben ejecutarse al elegirse la
opcin.
Cada uno de los objetos de Matlab tiene un identificador nico. Algunos grficos tienen muchos
objetos, por lo tanto tienen mltiples handles.
En una GUI, el flujo de datos est controlado por las acciones en la interfaz. Los comandos
para crear una interfaz con el usuario se escriben en un guin, la interfaz invoca el guin que
se ejecute, mientras la interfaz del usuario permanece en la pantalla aunque no se haya
completado la ejecucin del guin.
Cuando se interacta con un control, el programa registra el valor de esa opcin y ejecuta los
comandos prescritos en la cadena de llamada o invocacin. Al completarse la ejecucin de las
instrucciones de la cadena de llamada, el control vuelve a la interfaz para que pueda elegirse
otra opcin del men. Este ciclo se repite hasta que se cierra la GUI.
El control guarda un string que describe la accin a realizar cuando se invoca, puede consistir
en un solo comando de Matlab o una secuencia de comandos, o en una llamada a una funcin.
Para inicializar GUIDE deberemos ejecutar el comando guide desde la lnea de comandos y
obtendremos una ventana como la de la Figura 32.
Esta ventana ofrece el objeto raz (pantalla), que es siempre nico y su identificador es el cero.
El identificador de las ventanas es un entero, que aparece en la barra de nombre de dicha
ventana. Los identificadores de otros elementos grficos son nmeros flotantes (float), que
pueden ser obtenidos como valor de retorno y almacenados en variables de Matlab.
El objeto ms general de una GUI es la pantalla (screen). Este objeto es la raz de todos los
dems objetos y slo puede haber un objeto pantalla. Una pantalla puede contener una o ms
ventanas (figures). A su vez cada una de las ventanas puede tener uno o ms ejes de
coordenadas (axes). Una ventana puede tener tambin controles (uicontrol) tales como
botones, barras de desplazamiento, botones de seleccin o de opcin, etc.) y mens (uimenu).
Finalmente, los ejes pueden contener los seis tipos de elementos grficos que permite Matlab:
lneas (line), rectngulos (rectangle), polgonos (patches), superficies (surface), imgenes
bitmap (image) y texto (text).
En la Figura 33 podemos observar cmo hemos creado un panel y un botn. En esencia esta
es la GUI ms sencilla que podemos crear.
Para modificar las caractersticas de los objetos (por ejemplo, color, etiqueta, valor, posicin,
texto, etc.) deberemos hacer uso del inspector de atributos al que se accede con el men
contextual del botn derecho. Para el botn este tiene el aspecto de la Figura 34. Como
atributos ms obvios, resaltado en rojo, tenemos el String que es el texto del botn (Push
Button) o el BackgroundColor (gris medio). No obstante los atributos ms interesantes de cara
a la programacin son Tag y UserData. El primero nos permite darle un nombre concreto y
nos ayudar a encontrar el objeto suministrndonos su handles. El segundo es un campo que
nos permite almacenar datos del tipo que queramos (nmeros, textos).
Cuando guardemos la GUI, GUIDE generar el fichero .m que deberemos programar. Notemos
que todos los elementos de la GUI son objetos del entorno de programacin. Una vez que
ejecutemos la GUI tendremos unas instancias de estos que podremos manejar y editar como
tales.
Las Componentes principales de GUIDE son:
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:
Grupo de botones (Button Group) Permite exclusividad de seleccin con los radio button.
Active x. Permite crear aplicaciones exportables.
El aspecto del fichero .m generado por GUIDE es aproximadamente como el de la Figura 36.
En l se ha eliminado alguna informacin superflua, en forma de comentarios, que genera de
forma automtica GUIDE.
Hay que tener en cuenta que todos los valores de las propiedades de los elementos de Matlab
(ej. color, etiqueta, valor, posicin, texto, etc.) y los valores de las variables del programa se
guardan en una estructura, los cuales son accedidos mediante un nico y mismo puntero. Una
estructura (struct) es una agrupacin de datos de tipo diferente bajo un mismo nombre, como
se ha estudiado anteriormente y estos datos se llaman miembros (members) o campos (fields).
Hemos resaltado la funcin pushbutton1_Callback(). Esta la es la que se ejecutar cuando
pulsemos el botn. En este momento est vaca pero podemos programarla para que haga
cosas de nuestro inters por ejemplo representar una grfica, llamar a otra funcin, etc.
Para terminar queremos mostrar cmo se accede a un objeto concreto y como se modifican
sus caractersticas. Esto se hace por medio de la funcin findobj(). Por ejemplo:
h_boton = findobj('Tag', 'pushbutton1');
Esta funcin nos devolver la handles que apunta a la entidad cuya etiqueta (Tag) es
pushbutton1. Una vez que hemos encontrado el objeto podemos leer los valores de sus
atributos con funciones get() y modificarlos con set().
Por ejemplo, con las instrucciones:
color = get(h_boton, 'BackgroundColor');
set(h_boton, 'BackgroundColor', rand(1,3))
Obtendremos, por si tenemos inters en ello, el color del botn (get()) y lo modificaremos con el
color que queramos, en este caso con un color aleatorio suministrando un vector con 3 valores
elegidos al azar (set()).
Vemos pues, que en esencia, la interaccin con la GUI a nivel de programacin se realiza en
base a encontrar la handles del objeto, consultar sus propiedades, modificarlas y recuperarlas.
Esto aplica a cualquier elemento presente en una GUI: cajetines, botones de radio, grficas
Pero no slo a estos, si no a otros objetos que conforman otros ms complejos. En una grfica
tenemos los ejes de coordenadas, los datos, la lnea que representa los datos, las leyendas,
etc.
BIBLIOGRAFA
Baillo Moreno, A., Gran Chvez, A. 100 Ejercicios resueltos de Estadstica Multivariante
(Implementados en MATLAB). Madrid: Delta Publicaciones, 2008. (Ofrece ejercicios
estadsticos interesantes y es una buena opcin para ver cmo trabaja MATLAB el anlisis
estadstico).
Carrera, A.R., Martnez, M. Introduccin a MATLAB y a la creacin de interfaces grficas.
Servicio Editorial de la Universidad de Pas Vasco, 2004. (Muy buena ayuda para grficos e
interfaces).
Gilat, A. Una introduccin con ejemplos prcticos. Editorial Revert, S.A, 2006. (Contiene
clculo simblico).
Higham, D.J., Higham, N.J. MATLAB guide. Society for Industrial and Applied Mathematics,
2000. (Un libro sobre MATLAB exhaustivo y con buenos ejemplos).
Lara Sotelo, S.I. Apoyos didcticos para la clase de comunicaciones con MATLAB. Trabajo
de investigacin de la Universidad Autnoma de Ciudad Jurez, 2010. (Contiene ejemplos
sencillos y bsicos para trabajar distintas seales de comunicacin).
Merino, M., Vadillo, F. Matemtica financiera con MATLAB. Revista de Mtodos
Cuantitativos para la Economa y la Empresa, 4 pp. 35-55, 2007.
Moore, H. MATLAB for engineers. Editorial Pearson, 2015. (Lo hay en la Escuela
Politcnica Superior, y est muy bien enfocado para trabajar las matemticas del
ingeniero).
Ortega Ruiz, M. MATLAB aplicado a las telecomunicaciones. Barcelona: Editorial
Marcombo, 2015. (Ejemplos de cmo utilizar MATLAB para la teora de la seal).
Quintela Estvez, P. Matemticas en ingeniera con MATLAB. Servicio de Publicacins da
Universidade de Santiago de Compostela, 2000. (Tiene ejemplos hechos en MATLAB y
adems est en castellano).
Souto, A., Bravo, J.L. Cantn, A., Gonzlez, M. Curso bsico de programacin en Matlab.
Editorial Tbar, S.L. 2013. (Muy fcil de leer y con multitud de ejemplos).
Prez, C. MATLAB a travs de ejemplos. Garceta grupo editorial, 2011. (Con contenidos
matemticos como derivadas, integrales, lmites, etc.).
The Math Works Inc. MATLAB, edicin de estudiante: versin 4. Prentice Hall, cop. 1996.
(Es el manual del programa en una versin ms antigua, pero ms que suficiente).