Manual de Matlab

62
 1 Curso introductorio: El programa MATLAB versión 7 Contenido Introducción................................................................................................................................... ................................... 3 1 EL PROGRAMA MATLAB: PRIMEROS PASOS............................................................................................................. 3 1.1 ¿Qué es MATLAB? ............................................................................................................................................. 3 1.2 ¿Cómo empiezo a usar MATLAB? ............................................................ ....................................................... 4 1.3 ¿Cómo obtengo ayuda para usar MATLAB? ..................................................................................................... 5 1.4 ¿Cómo es el entorno de trabajo de MATLAB? .................................................................................................. 5 1.4.1 La ventana con el historial ................................................................. ....................................................... 7 1.4.2 El directorio actual................................................................................................................................... . 8 1.4.3 El workspace browser y array editor ........................................................................................................ 9 1.4.4 El editor/debugger ................................................................................................................................. ... 9 1.5 Formatos de salida y de otras opciones de MATLAB ...................................................................................... 10 1.6 Guardar variables y estados de una sesión: Comandos save y load  ............................................................... 11 1.7  Guardar sesión y copiar salidas: Comando diary  ............................................................................................11 1.8 Líneas de comentarios ............................................................................................................................ ........ 12 1.9 Medida de tiempos y de esfuerzo de cálculo .................................................................................................12 2 VARIABLES: MATRICES y VECTORES........................................................................................................................1 4 2.1 Números reales de doble precisión ................................................................................................................1 4 2.2 Números complejos: función complex  ............................................................................................................15 2.3 Matrices y vectores ............................................................................................................................... .......... 16 2.1 Cadenas de caracteres .......................................................................................................................... .......... 20 3. OPERADORES Y FUNCIONES EN MATLAB ......................................................... ...................................................... 23 3.1 Operadores aritméticos .................................................................................................................................. 23 3.2 Funciones matemáticas elementales......................................................... ..................................................... 24 3.3 Operadores elemento a elemento..................................................................................................................25 3.4 Operadores para la resolución de sistemas de ecuaciones lineales ............................................................ ........ 2 6  Curso intrductorio de MATLAB.  Notas de clase en preparación Flavia E. Buffo 2012.  

description

m matlab

Transcript of Manual de Matlab

  • 1

    Curso introductorio: El programa MATLAB versin 7

    Contenido Introduccin ...................................................................................................................................................................... 3

    1 EL PROGRAMA MATLAB: PRIMEROS PASOS ............................................................................................................. 3

    1.1 Qu es MATLAB? ............................................................................................................................................. 3

    1.2 Cmo empiezo a usar MATLAB? ................................................................................................................... 4

    1.3 Cmo obtengo ayuda para usar MATLAB? ..................................................................................................... 5

    1.4 Cmo es el entorno de trabajo de MATLAB? .................................................................................................. 5

    1.4.1 La ventana con el historial ........................................................................................................................ 7

    1.4.2 El directorio actual. ................................................................................................................................... 8

    1.4.3 El workspace browser y array editor ........................................................................................................ 9

    1.4.4 El editor/debugger .................................................................................................................................... 9

    1.5 Formatos de salida y de otras opciones de MATLAB ...................................................................................... 10

    1.6 Guardar variables y estados de una sesin: Comandos save y load ............................................................... 11

    1.7 Guardar sesin y copiar salidas: Comando diary ............................................................................................ 11

    1.8 Lneas de comentarios .................................................................................................................................... 12

    1.9 Medida de tiempos y de esfuerzo de clculo ................................................................................................. 12

    2 VARIABLES: MATRICES y VECTORES ........................................................................................................................ 14

    2.1 Nmeros reales de doble precisin ................................................................................................................ 14

    2.2 Nmeros complejos: funcin complex ............................................................................................................ 15

    2.3 Matrices y vectores ......................................................................................................................................... 16

    2.1 Cadenas de caracteres .................................................................................................................................... 20

    3. OPERADORES Y FUNCIONES EN MATLAB ............................................................................................................... 23

    3.1 Operadores aritmticos .................................................................................................................................. 23

    3.2 Funciones matemticas elementales .............................................................................................................. 24

    3.3 Operadores elemento a elemento .................................................................................................................. 25

    3.4 Operadores para la resolucin de sistemas de ecuaciones lineales .................................................................... 26

    Curso intrductorio de MATLAB. Notas de clase en preparacin

    Flavia E. Buffo

    2012.

  • 2

    3.5 Operadores relacionales ...................................................................................................................................... 27

    3.6 Operadores lgicos .............................................................................................................................................. 28

    3.7 Funciones que actan sobre vectores .................................................................................................................. 28

    3.8 Funciones que actan sobre matrices .................................................................................................................. 29

    4. PROGRAMACIN DE MATLAB ................................................................................................................................. 31

    4.1 Bucles y Bifurcaciones ..................................................................................................................................... 31

    4.2 Lectura y escritura interactiva de variables ................................................................................................... 34

    4.3 Archivos *.m .................................................................................................................................................... 35

    4.4 Help para las funciones de usuario ................................................................................................................. 37

    4.5 Referencias de funcin (function handles) ..................................................................................................... 38

    4.6 Funciones inline .............................................................................................................................................. 39

    4.7 Funciones annimas ....................................................................................................................................... 40

    4.8 Recomendaciones generales de programacin .............................................................................................. 40

    5. GRFICOS BIDIMENSIONALES ................................................................................................................................. 42

    5.1 Representacin grfica de funciones definidas por una frmula ................................................................... 42

    5.2 Funciones grficas 2D elementales ................................................................................................................. 43

    5.3 Control de ventanas grficas ........................................................................................................................... 48

    5.3 Otras funciones grficas 2-D ................................................................................................................................ 48

    5.4 Entrada de puntos con el ratn ...................................................................................................................... 51

    5.5 Preparacin de pelculas o "movies" .............................................................................................................. 51

    5.6 Las ventanas grficas de MATLAB ................................................................................................................... 52

    6 GRFICOS TRIDIMENSIONALES ................................................................................................................................... 53

    6.1. Dibujo simplificado de funciones 3-D ................................................................................................................. 53

    6.2 Otras forma de construir grficas tridimensionales ...................................................................................... 54

    6.3 Utilizacin del color en grficos 3-D ............................................................................................................... 56

    6.4 Otras funciones grficas 3D ............................................................................................................................ 57

    6.5 Elementos generales: ejes, puntos de vista, lneas ocultas. ........................................................................... 58

    7 FUNCIONES DE FUNCIN ........................................................................................................................................ 59

  • 3

    7.1 Races de ecuaciones escalares no lineales .................................................................................................... 59

    7.2 Clculo de extremos locales y globales ........................................................................................................... 59

    7.3 Clculo de integrales definidas ....................................................................................................................... 60

    7.4 Resolucin numrica de ecuaciones diferenciales ordinarias ........................................................................ 61

    Introduccin Este apunte pretende iniciar al lector en la utilizacin del programa MATLAB. Est organizado de la siguiente manera, en la primera seccin se mencionan brevemente las facilidades de MATLAB como herramienta de clculo, se presenta el entorno de MATLAB y los primeros pasos para acceder al programa y su a entorno. Se definen algunos conceptos bsicos como comandos, variables, constantes, operadores y funciones de MATLAB y la sintaxis para utilizarlos. En La seccin 2 estudia lo referente al ingreso de matrices y vectores. En la tercer seccin se presentan los operadores y las funciones de la librera MATLAB que se utilizan para realizar operaciones entre escalares, vectores y matrices. En la seccin 4 se menciona cmo programar con MATLAB, cmo crear archivos m (funciones y procedimientos de comandos) y las referencias de funcin. En las secciones 5 y 6 se describe cmo obtener grficos en 2D y 3D. Para finalizar con el manejo de funciones de funciones para resolver diferentes problemas: resolucin de ecuaciones no lineales, optimizacin, integracin numrica y resolucin numrica de ecuaciones diferenciales.

    1 EL PROGRAMA MATLAB: PRIMEROS PASOS

    1.1 Qu es MATLAB? MATLAB es el nombre abreviado de MATrix LABoratory. MATLAB es un programa para realizar clculos numricos con vectores y matrices. Como caso particular puede tambin trabajar con nmeros escalares tanto reales como complejos, con cadenas de caracteres y con otras estructuras de informacin ms complejas. Una de las capacidades ms atractivas es la de realizar una amplia variedad de grficos en dos y tres dimensiones. MATLAB tiene tambin un lenguaje de programacin propio. MATLAB es un gran programa de clculo tcnico y cientfico. Para ciertas operaciones es muy rpido, cuando puede ejecutar sus funciones en cdigo nativo con los tamaos ms adecuados para aprovechar sus capacidades de vectorizacin. En otras aplicaciones resulta bastante ms lento que el cdigo equivalente desarrollado en C/C++ o Fortran. El lenguaje de programacin de MATLAB siempre es una magnfica herramienta de alto nivel para desarrollar aplicaciones tcnicas, fcil de utilizar y que, como ya se ha dicho, aumenta significativamente la productividad de los programadores respecto a otros entornos de desarrollo. MATLAB dispone de un cdigo bsico y de varias libreras especializadas (toolboxes). En este curso slo se har referencia al cdigo bsico. Uno de los puntos fuertes de MATLAB son los grficos.

  • 4

    1.2 Cmo empiezo a usar MATLAB? MATLAB se inicia como cualquier otra aplicacin de Windows, clicando dos veces en el icono correspondiente en el escritorio o por medio del men Inicio. Al iniciar MATLAB se abre una ventana, el aspecto de esta ventana puede cambiarse eligiendo la opcin Layout/Default en el men Desktop de la toolbar. La parte ms importante de la ventana inicial es Command Window, que aparece en la parte derecha. En esta sub-ventana es donde se ejecutan los comandos de MATLAB, a continuacin del prompt caracterstico (>>), que indica que el programa est preparado para recibir instrucciones. En la parte superior izquierda de la pantalla 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 archivos del directorio activo o actual. El directorio activo se puede cambiar desde 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 archivos *.m del directorio activo se abre el editor de archivos 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 central izquierda 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. En la parte inferior izquierda de la pantalla aparece el botn Start, con una funcin anloga a la del botn Inicio de Windows. Start da acceso inmediato a ciertas capacidades del programa. El men Desktop realiza un papel anlogo al botn Start, dando acceso a los mdulos o componentes de MATLAB que se tengan instalados. Es posible recuperar comandos anteriores de MATLAB y moverse por dichos comandos con el ratn y con las teclas-flechas y . Al pulsar la primera de dichas flechas aparecer el comando que se haba introducido inmediatamente antes. De modo anlogo es posible moverse sobre la lnea de comandos con las teclas y , ir al principio de la lnea con la tecla Inicio, al final de la lnea con Fin, y borrar toda la lnea con Esc. Recurdese que slo hay una lnea activa (la ltima). Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command Window se pueden utilizar las funciones clc y home. La funcin clc (clear console) elimina todas las salidas anteriores, mientras que home las mantiene, pero lleva el prompt (>>) a la primera lnea de la ventana. 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.

  • 5

    1.3 Cmo obtengo ayuda para usar MATLAB? MATLAB 7.0 dispone de un excelente Help con el que se puede encontrar la informacin que se desee. Hay distintas opciones en el men Help de la ventana principal de la aplicacin. De forma muy inmediata, es posible recurrir al Help desde la lnea de comandos de la Command Window, como se indica a continuacin. >> help

    Las sentencias que se detallan a continuacin son algunas de las que sern tiles a lo largo del curso: >> help general Para obtener ayuda de los comandos generales de MATLAB. >> help ops Para obtener ayuda de los operadores y caracteres especiales. >> help lang Para obtener ayuda de construcciones del lenguaje de programacin. >> help elmat Para obtener ayuda de la manipulacin de matrices elementales. >> help elfun Para obtener ayuda de las funciones matemticas elementales. >> help specfun Para obtener ayuda de las funciones matemticas especiales. >> help matfun Para obtener ayuda de funciones de matrices y lgebra lineal numrica. >> help polyfun Para obtener ayuda de interpolacin y polinomios. >> help graph2d Para obtener ayuda de grficos en dos dimensiones. >> help graph3d Para obtener ayuda de grficos en tres dimensiones. >> help specgraph Para obtener ayuda de grfico especiales.

    1.4 Cmo es el entorno de trabajo de MATLAB? El entorno de trabajo de MATLAB es muy grfico e intuitivo, similar al de otras aplicaciones profesionales de Windows. Las componentes ms importantes del entorno de trabajo de MATLAB 7.0 se vern con ms detalle. La ventana Command Window es la ventana en la que se escriben las constantes y las variables, se ejecutan interactivamente las instrucciones de MATLAB que llamaremos comandos y se muestran los resultados correspondientes. En cierta forma es la ventana ms importante y la nica que exista en las primeras versiones de MATLAB. Una variable es un nombre que se da a una entidad numrica o no, que puede ser una matriz, un vector, un escalar, una cadena de caracteres e incluso una expresin. El valor de esa variable, e incluso el tipo de entidad 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

  • 6

    cambiar el valor de una variable es colocndola a la izquierda del operador de asignacin (=). MATLAB distingue entre maysculas y minsculas en los nombres de variables. Los nombres de variables deben empezar siempre por una letra y pueden constar de hasta 63 letras y nmeros. La funcin namelengthmax permite preguntar al programa por este nmero mximo de caracteres. El carcter guin bajo (_) se considera como una letra. A diferencia de los lenguajes de programacin no hace falta declarar 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. El comando clear sirve para eliminar variables y tiene varias formas posibles: clear elimina todas las variables creadas previamente (excepto

    las variables globales). clear A b borra las variables indicadas con A y b. clear global borra las variables globales. clear functions borra las funciones M y las funciones Mex. clear all borra todas las variables, incluyendo las globales, y las funciones.

    Una expresin de MATLAB puede tener las dos formas siguientes: primero, asignando su resultado a una variable, >> variable = expresin y segundo evaluando simplemente el resultado del siguiente modo, >> expresin en cuyo caso el resultado se asigna automticamente a una variable interna de MATLAB llamada ans (de answer) que almacena el ltimo resultado obtenido. Se considera por defecto que una expresin termina cuando se pulsa intro. Si se desea que una expresin contine en la lnea siguiente, hay que introducir tres puntos (...) antes de pulsar intro. Tambin se pueden incluir varias expresiones en una misma lnea separndolas por comas (,) o puntos y comas (;). Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se escribe en pantalla. Esta posibilidad es muy interesante, tanto para evitar la escritura de resultados intermedios, como para evitar la impresin de grandes cantidades de nmeros cuando se trabaja con matrices de gran tamao. MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones intrnsecas, esto es, funciones incorporadas en el propio cdigo ejecutable del programa. Estas funciones son particularmente rpidas y eficientes. Existen adems funciones definidas en archivos *.m y *.mex12 que vienen con el propio programa o que han sido aportadas por usuarios del mismo. Estas funciones extienden en gran manera las posibilidades del programa. El concepto de funcin en MATLAB es semejante al de otros lenguajes de programacin, aunque con algunas diferencias importantes. Una funcin tiene nombre, valor de retorno y argumentos. Una funcin se llama utilizando su nombre en una expresin o utilizndolo como un comando ms. Las funciones se pueden definir en archivos de texto *.m en la forma que se ver ms adelante. Los argumentos de cada

  • 7

    funcin van a continuacin del nombre entre parntesis (y separados por comas si hay ms de uno). Los valores de retorno son el resultado de la funcin y sustituyen a sta en la expresin donde la funcin aparece. Una caracterstica de MATLAB es que las funciones que no tienen argumentos no llevan parntesis, por lo que a simple vista no siempre son fciles de distinguir de las simples variables. Por ejemplo eps es una funcin sin argumentos, que devuelve la diferencia entre 1.0 y el nmero de coma flotante inmediatamente superior. En lo sucesivo el nombre de la funcin ir seguido de parntesis si interesa resaltar que la funcin espera que se le pase uno o ms argumentos. MATLAB permite que una funcin tenga un nmero variable de argumentos y valores de retorno, determinado slo en tiempo de ejecucin. MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos de funciones ms importantes, clasificadas segn su finalidad: 1.- Funciones matemticas elementales. 2.- Funciones matemticas especiales. 3.- Funciones matriciales elementales. 4.- Funciones matriciales especficas. 5.- Funciones para la descomposicin y/o factorizacin de matrices. 6.- Funciones para anlisis estadstico de datos. 7.- Funciones para anlisis de polinomios. 8.- Funciones para integracin de ecuaciones diferenciales ordinarias. 9.- Funciones para la resolucin de ecuaciones no-lineales y optimizacin. 10.- Funciones para la integracin numrica. 11.- Funciones para el procesamiento de seal. Algunas cosas tiles para conocer:

    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 una ventana las funciones disponibles que comienzan con las letras tecleadas por el usuario.

    Cuando al ejecutar un archivo *.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 archivo fuente en la que se ha producido el error. Clicando en ese enlace se va a la lnea correspondiente del archivo por medio del Editor/Debugger.

    1.4.1 La ventana con el historial 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 , pero esta ventana facilita mucho el tener una visin ms general de lo hecho anteriormente y seleccionar lo que realmente se desea repetir.

  • 8

    1.4.2 El directorio actual. El concepto de directorio activo o directorio actual es muy importante en MATLAB. Los programas de MATLAB se encuentran en archivos con la extensin *.m. Estos archivos se ejecutan escribiendo su nombre en la lnea de comandos (sin la extensin), seguido de los argumentos entre parntesis, si se trata de funciones. No todos los archivos *.m que se encuentren en el disco duro o en otras unidades lgicas montadas en una red local son accesibles. Para que un archivo *.m se pueda ejecutar es necesario que se cumpla una de las dos condiciones siguientes:

    Que est en el directorio actual. MATLAB mantiene en todo momento un nico directorio con esta condicin. Este directorio es el primer sitio en el que MATLAB busca cuando, desde la lnea de comandos, se le pide que ejecute un archivo. El comando dir muestra los archivos que contiene este directorio.

    Que est en uno de los directorios indicados en el Path de MATLAB, al que se accede eligiendo la opcin set path en el men file de la toolbar. El Path es una lista ordenada de directorios en los que el programa busca los archivos o las funciones que ha de ejecutar. Muchos de los directorios del Path son propios de MATLAB, pero los usuarios tambin pueden aadir sus propios directorios, normalmente al principio o al final de la lista.

    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, por ejemplo >>cd( C:\MATLAB\Ejemplos) Para subir un nivel en la jerarqua de directorios se utiliza el comando cd .., y cd ../.. para subir dos niveles. La ventana Current Directory permite explorar los directorios del ordenador en forma anloga a al Explorador u otras aplicaciones de Windows. Cuando se llega al directorio deseado se muestran las carpetas y los archivos 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 archivos *.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.

  • 9

    1.4.3 El workspace browser y array editor El espacio de trabajo de MATLAB (Workspace) es el conjunto de variables y de funciones de usuario que en un determinado momento estn definidas en la memoria del programa o de la funcin que se est ejecutando. Para obtener informacin sobre el Workspace desde la lnea de comandos se pueden utilizar los comandos who y whos. El segundo proporciona una informacin ms detallada que el primero. La ventana Workspace constituye un entorno grfico para ver las variables definidas en el espacio de trabajo. Se activa con el comando Desktop/Workspace. 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 persistent) 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 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.

    1.4.4 El editor/debugger En MATLAB tienen particular importancia los ya citados archivos-M (o M-files). Son archivos 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 archivos-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 archivo. El poder guardar instrucciones y grandes matrices en un archivo permite ahorrar mucho trabajo de tecleado. Aunque los archivos *.m se pueden crear con cualquier editor de archivos ASCII, MATLAB dispone de un editor que permite tanto crear y modificar estos archivos, como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuracin). 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

  • 10

    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 la sangra de los bucles y bifurcaciones de las sentencias seleccionadas. Para realizar la ejecucin de un archivo de comandos controlada con el Debugger dicha ejecucin se comienza eligiendo el comando Run en el men Debug, pulsando la tecla F5, clicando en el botn Continue ( ) de la barra de herramientas del Editor o tecleando el nombre del archivo en la lnea de comandos de la Command Window 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. Su uso correcto no es parte de los contenidos de un curso introductorio de MATLAB.

    1.5 Formatos de salida y de otras opciones de MATLAB MATLAB 7.0 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 comando Preferences del men File. El cuadro de dilogo Command/Window/Fonts ofrece la posibilidad de elegir el tipo de letra as como el tamao y el color, tanto de las letras como del fondo con la que se escribe en la ventana de comandos de MATLAB. Es muy importante utilizar tipos de letra de tamao constante (por ejemplo, Courier New, Lucida Console o Monospaced), para que las filas de las matrices se alineen bien en la pantalla. Respecto a los formatos numricos con que MATLAB muestra los resultados (recurdese que siempre calcula con doble precisin, es decir con unas 16 cifras decimales equivalentes), las posibilidades de mostrar los resultados son las siguientes:

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

  • 11

    Estos formatos se pueden cambiar tambin desde la lnea de comandos anteponiendo la palabra format. Por ejemplo, >> format long Por otra parte, el formato loose introduce algunas lneas en blanco en la salida (opcin por defecto), mientras que el formato compact elimina las lneas en blanco citadas. Estas opciones estn se pueden tambin establecer desde la lnea de comandos en la forma: >> format compact MATLAB aplica un factor de escala general a las matrices cuando los elementos no enteros ms grandes o ms pequeos son superiores o inferiores a una determinada cantidad (103 y 103, respectivamente). Hay que aadir que MATLAB trata de mantener el formato de los nmeros que han sido definidos como enteros (sin punto decimal). Si se elige la opcin format rational el programa trata de expresar los nmeros racionales como cocientes de enteros.

    1.6 Guardar variables y estados de una sesin: Comandos save y load En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo recuperar ms tarde en el mismo punto en el que se dej (con las mismas variables definidas, con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra automticamente. Para guardar el estado de una sesin de trabajo existe el comando save. Si se teclea: >> save antes de abandonar el programa, se crea en el directorio actual un archivo binario llamado MATLAB.mat (o MATLAB) con el estado de la sesin (excepto los grficos, que por ocupar mucha memoria hay que guardar aparte). Dicho estado puede recuperarse la siguiente vez que se arranque el programacon el comando: >> load Esta es la forma ms bsica de los comandos save y load. Se pueden guardar tambin matrices y vectores de forma selectiva y en archivos con nombre especificado por el usuario. Por ejemplo, el comando (sin comas entre los nombres de variables): >> save filename A x y guarda las variables A, x e y en un archivo binario llamado filename.mat (o filename). Para recuperarlas en otra sesin basta teclear: >> load filename Si no se indica ninguna variable, se guardan todas las variables creadas en esa sesin. Con la opcin -append en el comando save la informacin se guarda a continuacin de lo que hubiera en el archivo.

    1.7 Guardar sesin y copiar salidas: Comando diary Los comandos save y load crean archivos binarios o ASCII con el estado de la sesin. Existe otra forma ms sencilla de almacenar en un archivo 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:

  • 12

    >> diary filename.txt ... >> diary off ...

    >> diary on ... El comando diary off suspende la ejecucin de diary y diary on la reanuda. El simple comando diary pasa de on a off y viceversa. Para poder acceder al archivo filename.txt con Notepad o Word es necesario que diary est en off. Si en el comando diary no se incluye el nombre del archivo se utiliza por defecto un archivo llamado diary (sin extensin).

    1.8 Lneas de comentarios Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica comienzo de comentario. Cuando aparece en una lnea de comandos, el programa supone que todo lo que va desde ese carcter hasta el fin de la lnea es un comentario. Ms adelante se ver que los comentarios de los archivos *.m tienen algunas peculiaridades importantes, pues pueden servir para definir help's personalizados de las funciones que el usuario vaya creando. MATLAB permite comentar bloques de sentencias, es decir, muchas sentencias contiguas de una vez. Una forma de hacerlo es seleccionar las sentencias que se desea comentar, clicar con el botn derecho, y elegir la opcin Comment en el men que se abre; las sentencias seleccionadas se comentan individualmente con el carcter %. De forma similar se pueden eliminar los comentarios. Otra forma de comentar bloques de sentencias 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).

    1.9 Medida de tiempos y de esfuerzo de clculo MATLAB dispone de funciones que permiten calcular el tiempo empleado en las operaciones matemticas realizadas. Algunas de estas funciones son las siguientes:

    cputime devuelve el tiempo de CPU (con precisin de centsimas de segundo) desde que el programa arranc. Llamando antes y despus de realizar una operacin y restando los valores devueltos, se puede saber el tiempo de CPU empleado en esa operacin. Este tiempo sigue corriendo aunque MATLAB est inactivo.

    etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (atencin al orden!), obtenidos como respuesta al comando clock.

    tic ops toc imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj a cero y toc obtiene el tiempo transcurrido.

    A modo de ejemplo, el siguiente cdigo mide de varias formas el tiempo necesario para resolver un sistema de 1000 ecuaciones con 1000 incgnitas. Tngase en cuenta que los

  • 13

    tiempos pequeos (del orden de las dcimas o centsimas de segundo), no se pueden medir con gran precisin. >> n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1); >> tiempoIni=clock; x=A\b; tiempo=etime(clock, tiempoIni) >> time=cputime; x=A\b; time=cputime-time >> tic; x=A\b; toc Cuando de colocan varias sentencias en la misma lnea se ejecutan 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 el 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.

  • 14

    2 VARIABLES: MATRICES y VECTORES MATLAB es un programa preparado para trabajar con vectores y matrices. Como caso particular tambin trabaja con variables escalares (matrices de dimensin 1). MATLAB trabaja siempre en doble precisin, es decir guardando cada dato en 8 bytes, con unas 15 cifras decimales exactas, tambin puede trabajar con cadenas de caracteres (strings) y, desde la versin 5.0, tambin con otros tipos de datos: Matrices de ms dos dimensiones, matrices dispersas, vectores y matrices de celdas, estructuras y clases y objetos.

    2.1 Nmeros reales de doble precisin Los elementos constitutivos de vectores y matrices son nmeros reales almacenados en 8 bytes (53 bits para la mantisa y 11 para el exponente de 2; entre 15 y 16 cifras decimales equivalentes). Es importante saber cmo trabaja MATLAB con estos nmeros y los casos especiales que presentan. MATLAB mantiene una forma especial para los nmeros muy grandes (ms grandes que los que es capaz de representar), que son considerados como infinito. Por ejemplo, obsrvese cmo responde el programa al ejecutar el siguiente comando: >> 1.0/0.0 Warning: Divide by zero ans = Inf As pues, para MATLAB el infinito se representa como inf Inf. MATLAB tiene tambin una representacin especial para los resultados que no estn definidos como nmeros. Por ejemplo, ejectense los siguientes comandos y obsrvense las respuestas obtenidas: >> 0/0 Warning: Divide by zero ans = NaN >> inf/inf ans = NaN En ambos casos la respuesta es NaN, que es la abreviatura de Not a Number. Este tipo de respuesta, as como la de Inf, son enormemente importantes en MATLAB, pues permiten controlar la fiabilidad de los resultados de los clculos matriciales. Los NaN se propagan al realizar con ellos cualquier operacin aritmtica, en el sentido de que, por ejemplo, cualquier nmero sumado a un NaN da otro NaN. MATLAB tiene esto en cuenta. Algo parecido sucede con los Inf. A continuacin se detallan, adems de los mencionados antes, algunos otros nombres, que estn pre-definidos por MATLAB:

  • 15

    NaN resultados que no estn definidos como nmeros Inf nmeros muy grandes ans variable del sistema para almacenar el resultado de

    evaluar expresiones i , j unidad imaginaria : raiz cuadrada de -1 Pi nmero MATLAB dispone de tres funciones tiles relacionadas con las operaciones de coma flotante. Estas funciones, que no tienen argumentos, son las siguientes:

    eps devuelve la diferencia entre 1.0 y el nmero de coma flotante inmediatamente superior. Da una idea de la precisin o nmero de cifras almacenadas. En un PC, eps vale2.2204e-016.

    realmin devuelve el nmero ms pequeo con que se puede trabajar (2.2251e-308) realmax devuelve el nmero ms grande con que se puede trabajar (1.7977e+308).

    2.2 Nmeros complejos: funcin complex En muchos clculos los resultados no son reales sino complejos, con parte real y parte imaginaria. MATLAB trabaja sin ninguna dificultad con nmeros complejos. Para ver como se representan por defecto los nmeros complejos, ejectense los siguientes comandos: >> a=sqrt(-4) a = 0 + 2.0000i >> 3 + 4j ans = 3.0000 + 4.0000i En la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j para representar el nmero imaginario unidad (en la salida, sin embargo, puede verse que siempre aparece la i). Si la i o la j no estn definidas como variables, puede intercalarse el signo (*). Esto no es posible en el caso de que s estn definidas, porque entonces se utiliza el valor de la variable. En general, cuando se est trabajando con nmeros complejos, conviene no utilizar la i como variable ordinaria, pues puede dar lugar a errores y confusiones. Por ejemplo, obsrvense los siguientes resultados: >> i=2 i = 2 >> 2+3i ans = 2.0000 + 3.0000i >> 2+3*i ans = 8

  • 16

    >> 2+3*j ans = 2.0000 + 3.0000i Cuando i y j son variables utilizadas para otras finalidades, como unidad imaginaria puede utilizarse tambin la funcin sqrt(-1), o una variable a la que se haya asignado el resultado de esta funcin. MATLAB dispone asimismo de la funcin complex, que crea un nmero complejo a partir de dos argumentos que representan la parte real e imaginaria, como en el ejemplo siguiente: >> complex(1,2) ans = 1.0 .0000i

    2.3 Matrices y vectores Como en casi todos los lenguajes de programacin, en MATLAB las matrices y vectores son variables que tienen nombres. Se sugiere que se utilicen letras maysculas para matrices y letras minsculas para vectores y escalares (MATLAB no exige esto, pero puede resultar til). Para definir una matriz no hace falta declararlas o establecer de antemano su tamao. MATLAB determina automticamente el nmero de filas y de columnas en funcin del nmero de elementos que se proporcionan (o se utilizan). Hay diferentes maneras de introducir matrices, una de ellas es utilizando el teclado. Las matrices se introducen por filas, los elementos de una misma fila estn separados por blancos o comas, mientras que las filas estn separadas por pulsaciones enter o por caracteres punto y coma(;). Por ejemplo, el siguiente comando define una matriz A de dimensin (33): >> A=[1 2 3; 4 5 6; 7 8 9] A partir de este momento la matriz A est disponible para hacer cualquier tipo de operacin con ella (adems de valores numricos, en la definicin de una matriz o vector se pueden utilizar expresiones y funciones matemticas). Como casos especiales de matrices, se definen los vectores, un vector fila x en la forma siguiente (si los tres nmeros estn separados por blancos o comas, el resultado ser un vector fila): >> x=[10 20 30] % vector fila Por el contrario, si los nmeros estn separados por intros o puntos y coma (;) se obtendr un vector columna: >> y=[11; 12; 13] % vector columna.

  • 17

    MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. En MATLAB se accede a los elementos de vector poniendo el ndice entre parntesis (por ejemplo x(3) x(2)). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis, separados por una coma (por ejemplo A(1,2) A(3,2)). Las matrices se almacenan por columnas aunque se introduzcan por filas, y teniendo en cuenta esto se puede accederse a cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz (33) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4). Tambin se pueden definir matrices a partir de indicar elementos no cero de la misma por ejemplo >> clear A >> A(1,1)=1; A(2,2)=2;A(3,3) =3 nos dar una matriz diagonal de dimensin 3 y con los elementos ingresados. Para calcular la dimensin de una matriz o de un vector se utilizan las funciones de MATLAB size y length como sigue >> [m,n]=size(A) devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno. La sentencia >>n=length(x) calcula el nmero de elementos del vector y lo guarda en n. La asignacin de valores complejos a vectores y matrices desde teclado puede hacerse de las dos formas, que se muestran en el ejemplo siguiente (conviene hacer antes clear i, para que i no est definida como variable; este comando se estudiar ms adelante): >> A = [1+2i 2+3i; -1+i 2-3i] A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i >> A = [1 2; -1 2] + [2 3; 1 -3]*I % En este caso el * es necesario A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i Puede verse que es posible definir las partes reales e imaginarias por separado. En este caso s es necesario utilizar el operador (*), segn se muestra en el ejemplo anterior. Introducir las matrices por teclado slo es prctico cuando se trabaja con matrices de pequeo tamao o cuando no hay que repetir esa operacin muchas veces. Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos particulares. Algunas de estas funciones son las siguientes:

    eye(4) forma la matriz unidad de tamao (44)

  • 18

    zeros(3,5) forma una matriz de ceros de tamao (35) zeros(4) dem de tamao (44) ones(3) forma una matriz de unos de tamao (33) ones(2,4) idem de tamao (24) linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2 logspace(d1,d2,n) genera un vector con n valores espaciados logartmicamente entre

    10^d1 y 10^d2. Si d2 es pi, los puntos se generan entre 10^d1 y pi rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin

    uniforme, de tamao (33) rand(2,5) idem de tamao (25) randn(4) forma una matriz de nmeros aleatorios de tamao (44), con

    distribucinnormal, de valor medio 0 y varianza 1. magic(4) crea una matriz (44) con los nmeros 1, 2, ... 4*4, con la propiedad de que

    todas las filas, las columnas y la diagonal suman lo mismo. hilb(5) crea una matriz de Hilbert de tamao (55). La matriz de Hilbert es una matriz

    cuyos elementos (i,j) responden a la expresin (1/(i+j-1)). Esta es una matriz especialmente difcil de manejar por los grandes errores numricosa los que conduce

    invhilb(5) crea directamente la inversa de la matriz de Hilbert kron(x,y) produce una matriz con todos los productos de los elementos del vector x

    por los elementos del vector y. Equivalente a xT*y, donde x e y son vectores fila. Es una matriz de rango 1.

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

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

    Existen otras funciones para crear matrices de tipos particulares. Con Help/MATLAB Help se puede obtener informacin sobre todas las funciones disponibles en MATLAB, que aparecen agrupadas por categoras o por orden alfabtico. MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices previas ya definidas, por varios posibles caminos:

    recibiendo alguna de sus propiedades (como por ejemplo el tamao), por composicin de varias submatrices ms pequeas, siempre que los tamaos de

    las submatrices los permitan. modificndola de alguna forma.

    En la prctica 1 se presentan diferentes ejercicios que indican de qu manera se obtienen nuevas matrices utilizando las funciones de MATLAB diag(A), triu(A), tril(A) y combinaciones de ellas. Otra manera de cargar matrices es mediante el operador dos puntos (:). Este operador es muy importante en MATLAB y puede usarse de varias formas. Se sugiere al lector que

  • 19

    practique mucho sobre los ejercicios del prctico 1 en este apartado, introduciendo todas las modificaciones que se le ocurran y haciendo pruebas abundantes. Para empezar, defnase un vector x con el siguiente comando: >> x=1:10 x = 1 2 3 4 5 6 7 8 9 10 En cierta forma se podra decir que el operador (:) representa un rango: en este caso, los nmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador puede tambin utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el incremento va entre el valor inferior y el superior, en las formas que se muestran a continuacin: >> x=1:2:10 x = 1 3 5 7 9 >> x=1:1.5:10 x = 1.0 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000 >> x=10:-1:1 x = 10 8 7 6 5 4 3 2 1 Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener un vector columna basta trasponer el resultado. El operador dos puntos (:) es an ms til y potente y tambin ms complicado con matrices. Se usar para extraer filas y columnas de matrices. En la prctica 1 encontrars ejemplos. El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Por ejemplo, a continuacin se va a definir una matriz identidad B de tamao 66 y se van a reemplazar filas de B por filas de A. Obsrvese que la siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A, >> A=magic(6); >> B=eye(size(A)); >> B([2 4 5],:)=A(1:3,:) B = 1 0 0 0 0 0 35 1 6 26 19 24 0 0 1 0 0 0 3 32 7 21 23 25 31 9 2 22 27 20 0 0 0 0 0 1

  • 20

    Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de un vector: >> x=rand(1,5) x = 0.9103 0.7622 0.2625 0.0475 0.7361 >> x=x(5:-1:1) x = 0.7361 0.0475 0.2625 0.7622 0.9103 Obsrvese que por haber utilizado parntesis en vez de corchetes los valores generados por el operador (:) afectan a los ndices del vector y no al valor de sus elementos. Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente: >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> A(:,3:-1:1) ans = 6 1 8 7 5 3 2 9 4 aunque hubiera sido ms fcil utilizar la funcin fliplr(A), que es especfica para ello. Ver tambin las funciones flipud(A), flipdim(A). Un caso especialmente interesante es el de crear una nueva matriz componiendo como submatrices otras matrices definidas previamente. A modo de ejemplo, ejectense las siguientes lneas de comandos y obsrvense los resultados obtenidos: >> A=rand(3) >> B=diag(diag(A)) >> C=[A, eye(3); zeros(3), B] Finalmente, hay que decir que A(:) representa un vector columna con las columnas de A una detrs de otra. Tambin se pueden definir las matrices y vectores por medio de funciones de librera y funciones programadas por el usuario que se vern ms adelante.

    2.1 Cadenas de caracteres MATLAB puede definir variables que contengan cadenas de caracteres. Los caracteres de una cadena se almacenan en un vector, con un carcter por elemento. Cada carcter ocupa dos bytes. Las cadenas de caracteres van entre apstrofos o comillas simples, como por ejemplo: 'cadena'. Si la cadena debe contener comillas, stas se representan por un 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

  • 21

    caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener el mismo nmero de elementos. Si es preciso, las cadenas (filas) ms cortas se completan con blancos. A continuacin se pueden ver algunos ejemplos y practicar con ellos:>> c='cadena' c = cadena >> size(c) % dimensiones del array ans = 1 6 >> double(c) % convierte en nmeros ASCII cada carcter ans = 99 97 100 101 110 97 >> char(abs(c)) % convierte nmeros ASCII en caracteres ans = cadena >> cc=char('ms','madera') % convierte dos cadenas en una matriz cc = ms madera >> size(cc) % se han aadido tres espacios a 'ms' ans = 2 6 Las funciones ms importantes para manejo de cadenas de caracteres son las siguientes:

    double(c) convierte en nmeros ASCII cada carcter. char(v) convierte un vector de nmeros v en una cadena de caracteres. char(c1,c2) crea una matriz de caracteres, completando con blancos las

    cadenas ms cortas. deblank(c) elimina los blancos al final de una cadena de caracteres. disp(c) imprime el texto contenido en la variable c. ischar(c) detecta si una variable es una cadena de caracteres. 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 (funciona de modo diferente que la correspondiente funcin de C).

    strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y minsculas.

  • 22

    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, de acuerdo con las reglas y formatos de conversin del lenguaje C.

    Con las funciones anteriores se dispone en MATLAB de una amplia gama de posibilidades para trabajar con cadenas de caracteres. A continuacin se pueden ver algunos ejemplos: >> num2str(pi) % el resultado es una cadena de caracteres, no un nmero ans = 3.142 >> num2str(pi,8) ans = 3.1415927 Es habitual convertir los valores numricos en cadenas de caracteres para poder imprimirlos como ttulos en los dibujos o grficos.

  • 23

    3. OPERADORES Y FUNCIONES EN MATLAB MATLAB puede operar con escalares, vectores y matrices por medio de operadores y por medio de funciones.

    3.1 Operadores aritmticos Los operadores para variables escalares, vectoriales y matriciales de MATLAB son los siguientes:

    + adicin o suma - sustraccin o resta * multiplicacin ' traspuesta potenciacin \ divisin-izquierda / divisin-derecha

    Para utilizar estos operadores se deben tener en cuenta que las dimensiones de las variables sean coherentes con las correspondientes operaciones matriciales. Si los operadores no se usan de modo correcto se obtiene un mensaje de error. Por ejemplo, sean >> x=[10 20 30] % vector fila >> y=[11; 12; 13] % vector columna. si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de error: >> x+y ??? Error using ==> + Matrix dimensions must agree. Para calcular traspuesta de x basta teclear: >> x' Como el resultado de la operacin no ha sido asignado a ninguna variable, MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado de la ltima operacin. La variable ans puede ser utilizada como operando en la siguiente expresin que se introduzca. La dificultad al sumar x e y desaparece si se suma x con el vector transpuesto de y: >> x+y' Los operadores listados antes se pueden aplicar tambin de modo mixto. Dada la matriz >> A=[1 2 3; 4 5 6; 7 8 9] para calcular la traspuesta de A basta con hacer >> A'

  • 24

    Como el resultado de la operacin no ha sido asignado a ninguna otra matriz, MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado de la ltima operacin. Tambin podra haberse asignado el resultado a otra matriz llamada B: >> B=A' B = 1 4 7 2 5 8 3 6 9 Ahora ya estn definidas las matrices A y B, y es posible seguir operando con ellas. Por ejemplo, se puede hacer el producto B*A (deber resultar una matriz simtrica): >> B*A ans = 66 78 90 78 93 108 90 108 126 Es importante advertir que el operador de matriz traspuesta ('), aplicado a matrices complejas, produce la matriz conjugada y traspuesta. Existe una funcin que permite hallar la matriz conjugada (conj( )) y el operador punto y apstrofo (.') que calcula simplemente la matriz traspuesta. Ejemplos de operaciones de matrices con escalares como los siguientes se analizarn en el prctico 2. >> A=[1 2; 3 4] A = 1 2 3 4 >> A*2 ans = 2 4 6 8 >> A-4 ans = -3 -2 -1 0 MATLAB utiliza el operador de divisin / para dividir por un escalar todos los elementos de una matriz o un vector. Sin embargo, el uso del operador \ se describir con ms atencin.

    3.2 Funciones matemticas elementales Estas funciones, que comprenden las funciones matemticas trascendentales y otras funciones bsicas, cuando se aplican a una matriz actan sobre cada elemento de la matriz

  • 25

    como si se tratase de un escalar. Por tanto, se aplican de la misma forma a escalares, vectores y matrices. Algunas de las funciones de este grupo son las siguientes:

    sin(x) seno cos(x) coseno tan(x) tangente asin(x) arco seno acos(x) arco coseno atan(x) arco tangente (devuelve un ngulo entre -/2 y +/2) atan2(x) arco tangente (devuelve un ngulo entre - y +); se le pasan 2 argumentos,

    proporcionales al seno y al coseno. sinh(x) seno hiperblico cosh(x) coseno hiperblico tanh(x) tangente hiperblica asinh(x) arco seno hiperblico acosh(x) arco coseno hiperblico atanh(x) arco tangente hiperblica log(x) logaritmo natural log10(x) logaritmo decimal exp(x) funcin exponencial sqrt(x) raz cuadrada sign(x) devuelve -1 si 0. Aplicada a un nmero complejo, devuelve un vector unitario en la misma direccin rem(x,y) resto de la divisin (2 argumentos que no tienen que ser enteros) mod(x,y) similar a rem (Ver diferencias con el Help) round(x) redondeo hacia el entero ms prximo fix(x) redondea hacia el entero ms prximo a 0 floor(x) valor entero ms prximo hacia - ceil(x) valor entero ms prximo hacia + gcd(x) mximo comn divisor lcm(x) mnimo comn mltiplo real(x) partes reales imag(x) partes imaginarias abs(x) valores absolutos angle(x) ngulos de fase

    3.3 Operadores elemento a elemento En MATLAB existe tambin la posibilidad de aplicar elemento a elemento los operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.). Por ejemplo, >> [1 2 3 4]^2

  • 26

    ??? Error using ==> ^ Matrix must be square. >> [1 2 3 4].^2 ans = 1 4 9 16 >> [1 2 3 4]*[1 -1 1 -1] ??? Error using ==> * Inner matrix dimensions must agree. >> [1 2 3 4].*[1 -1 1 -1] ans = 1 -2 3 -4

    3.4 Operadores para la resolucin de sistemas de ecuaciones lineales

    MATLAB utiliza los operadores de divisin para la resolucin de sistemas de ecuaciones lineales. Considrese el sistema de ecuaciones lineales,

    Ax = b donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolucin de este sistema de ecuaciones se puede escribir en las 2 formas siguientes >>x = inv(A)*b >>x = A\b As pues, el operador divisin-izquierda por una matriz (barra invertida \) equivale a pre-multiplicar por la inversa de esa matriz. En realidad este operador es ms general y ms inteligente de lo que aparece en el ejemplo anterior: el operador divisin-izquierda es aplicable aunque la matriz no tenga inversa e incluso no sea cuadrada, en cuyo caso la solucin que se obtiene (por lo general) es la que proporciona el mtodo de los mnimos cuadrados. Cuando la matriz es triangular o simtrica aprovecha esta circunstancia para reducir el nmero de operaciones aritmticas. En algunos casos se obtiene una solucin con no ms de r elementos distintos de cero, siendo r el rango de la matriz. Esto se debe a que la matriz se reduce a forma de escaln y se resuelve el sistema dando valor cero a las variables libres o independientes. Por ejemplo, considrese el siguiente ejemplo de matriz (12) que conduce a un sistema de infinitas soluciones: >> A=[1 2], b=[2] >> x=A\b x = 0 1 que es la solucin obtenida dando valor cero a la variable independiente x(1). Por otra parte, en el caso de un sistema de ecuaciones redundante (o sobre-determinado) el

  • 27

    resultado de MATLAB es el punto ms cercano -en el sentido de mnima norma del error- a las ecuaciones dadas (aunque no cumpla exactamente ninguna de ellas). Vase el siguiente ejemplo de tres ecuaciones formadas por una recta que no pasa por el origen y los dos ejes de coordenadas: >> A=[1 2; 1 0; 0 1], b=[2 0 0]' >> x=A\b, resto=A*x-b x = 0.3333 0.6667 resto = -0.3333 0.3333 0.6667 Si la matriz es singular o est muy mal escalada, el operador \ da un aviso (warning), pero proporciona una solucin. La inteligencia del operador barra invertida \ tiene un costo, MATLAB debe de emplear cierto tiempo en determinar las caractersticas de la matriz, triangular, simtrica, etc. Si el usuario conoce perfectamente y con seguridad las caractersticas de la matriz del sistema, lo mejor es utilizar la funcin linsolve, que se ver ms adelante, que no realiza ninguna comprobacin y puede obtener la mxima eficiencia.

    3.5 Operadores relacionales

    El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales:

    < menor que

    > mayor que

    = mayor o igual que

    == igual que

    ~= distinto que

    El carcter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo Alt pulsada. En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado especial. En general, 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. 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

  • 28

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

    3.6 Operadores lgicos

    Los operadores lgicos de MATLAB son los siguientes:

    & Y lgico Se evalan siempre ambos operandos, y el resultado es true slo si ambos son true.

    | O lgico Se evalan siempre ambos operandos, y el resultado es false slo si ambos son false.

    ~ Negacin lgica devuelve 0 en el caso en que ambos sean 1 ambos sean 0.

    Los operadores lgicos se combinan con los relacionales para poder comprobar el cumplimiento de condiciones mltiples. Ms adelante se vern ejemplos y ciertas funciones de las que dispone MATLAB para facilitar la aplicacin de estos operadores a vectores y matrices.

    3.7 Funciones que actan sobre vectores

    max(x) mximo elemento de un vector. Devuelve el valor mximo de x y la posicin que ocupa.

    min(x) mnimo elemento de un vector. Devuelve el valor mnimo y la posicin que ocupa.

    sum(x) suma de los elementos de un vector. cumsum(x) devuelve el vector suma acumulativa de los elementos de un

    vector (cada elemento del resultado es una suma de elementos del original).

    mean(x) valor medio de los elementos de un vector. std(x) desviacin tpica.

  • 29

    prod(x) producto de los elementos de un vector cumprod(x) devuelve el vector producto acumulativo de los elementos de

    un vector. sort(x) devuelve un vector con la ordenacin de menor a mayor de los

    elementos del vector x y un vector con las posiciones iniciales en x de los elementos en el vector ordenado.

    norm(x) Norma 2 del vector x. norm(x,p) Norma p del vector x. norm(x,inf) Norma del vector x.

    3.8 Funciones que actan sobre matrices

    Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones ms tiles y potentes de MATLAB.

    A' calcula la traspuesta (conjugada) de la matriz A.

    A.' calcula la traspuesta (sin conjugar) de la matriz A.

    poly(A) devuelve un vector con los coeficientes del polinomio caracterstico de la matriz cuadrada A.

    trace(A) devuelve la traza (suma de los elementos de la diagonal) de una matriz cuadrada A.

    size(A) devuelve el nmero de filas y de columnas de una matriz rectangular A.

    size(A,1) devuelve el nmero de filas de A.

    size(A,2) devuelve el nmero de columnas de A.

    [L,U] = lu(A) descomposicin de Crout (A = LU) de una matriz. La matriz L es una permutacin de una matriz triangular inferior (dicha permutacin es consecuencia del pivoteo por columnas utilizado en la factorizacin) y U es triangular superior.

    [L,U,P] = lu(A) descomposicin de Crout (PA = LU) de una matriz. La matriz L es una matriz triangular inferior, U es triangular superior. Y P es una matriz de permutacin.

    B = inv(A) calcula la inversa de A. det(A) devuelve el determinante de la matriz cuadrada A. Equivale

    a det(L)*det(U) chol(A) descomposicin de Cholesky de matriz simtrica y positivo-

    definida.

  • 30

    rcond(A) devuelve una estimacin del recproco de la condicin numrica de la matriz A basada en la norma 1.

    [X,D] = eig(A) valores propios (diagonal de D) y vectores propios (columnas de X) de una matriz cuadrada A.

    [Q,R] = qr(A) descomposicin QR de una matriz rectangular. Se utiliza para sistemas con ms ecuaciones que incgnitas.

    [Q,R] = qr(A,0) similar a la anterior, pero con Q del mismo tamao que A, es decir, sin completar una base ortonormal cuando m>n.

    null(A) devuelve una base ortonormal del subespacio nulo de la matriz rectangular A.

    orth(A) devuelve una base ortonormal del espacio de columnas de A.

    [U,D,V] = svd(A) descomposicin en valores singulares de una matriz rectangular (A=U*D*V').

    pinv(A) calcula la pseudo-inversa de una matriz rectangular A. rank(A) calcula el rango r de una matriz rectangular A. norm(A) calcula la norma 2 de una matriz (el mayor valor singular). normest(A) calcula de forma aproximada la norma-2 con menos

    operaciones aritmticas. norm(A,1) calcula la norma 1 de una matriz. norm(A,fro) calcula la norma Frobenius de una matriz. norm(A,inf) norma- de A, mxima suma de valores absolutos por filas cond(A) Calcula el nmero de condicin de A en norma 2. condest(A) estimacin por defecto de la condicin numrica de A con la

    norma-1. linsolve(A,b)

    es la forma ms eficiente de que dispone MATLAB para resolver sistemas de ecuaciones lineales para cualquier A. Obviamente, si b es una matriz de segundos miembros, x ser una mariz de soluciones con el mismo n de columnas.

  • 31

    4. PROGRAMACIN DE MATLAB MATLAB es una aplicacin en la que se puede programar muy fcilmente. Se comenzar viendo las bifurcaciones y bucles, y la lectura y escritura interactiva de variables, que son los elementos bsicos de cualquier programa de una cierta complejidad.

    4.1 Bucles y Bifurcaciones MATLAB posee un lenguaje de programacin que como cualquier otro lenguaje dispone de sentencias para realizar bucles y bifurcaciones. Los bucles permiten repetir las mismas operaciones o operaciones anlogas sobre datos distintos. En la figura se muestra la forma de un 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. La sentencia for repite un conjunto de sentencias un nmero predeterminado de veces. La siguiente construccin ejecuta sentencias con valores de i de 1 a n, variando de uno en uno.

    o bien, donde vectorValores es un vector con los distintos valores que tomar la variable i. El caso ms general para la variable del bucle es

    for i=1:n sentencias

    end

    for i=vectorValores sentencias

    end

  • 32

    i= (valor_inicial:incremento: valor_final) En el ejemplo siguiente el bucle se ejecuta por primera vez con i=n, y luego i se va reduciendo de 1 en 1 hasta que llega a ser menor que 1, en cuyo caso el bucle se termina: En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La variable j es la que vara ms rpidamente (por cada valor de i, j toma todos sus posibles valores):

    Una ltima forma de inters del bucle for es la siguiente (A es una matriz):

    en la que 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. Lo mismo sucede con otras sentencias que se dan a continuacin. La estructura del bucle while tiene la siguiente sintaxis: Donde condicion puede ser una expresin vectorial o matricial. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condicion, es decir, mientras haya algn o algunos elementos true. El bucle se termina cuando todos los elementos de condicion son false (es decir, cero).

    for i=n:-1:1 sentencias

    end

    for i=1:m for j=1:n sentencias end

    end

    for i=A sentencias

    end

    while condicion sentencias

    end

  • 33

    La sentencia break hace que se termine inmediatamente la ejecucin del bucle for y/o while ms interno de los que comprenden a dicha sentencia. La sentencia continue hace que se pase inmediatamente a la siguiente iteracin del bucle for o while, saltando todas las sentencias que hay entre el continue y el fin del bucle en la iteracin actual. Las bifurcaciones permiten realizar una u otra operacin segn se cumpla o no una determinada condicin. A continuacin se muestran tres posibles formas de bifurcacin.

    En su forma ms simple, la sentencia if se escribe en la forma siguiente

    Otra opcin de la sentencia if se escribe en la forma siguiente

    Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones como se desee, y que tiene la forma

    if condicin sentencias

    end

    if condicin bloque 1

    else bloque 2

    end

  • 34

    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. Obsrvese que las sentencias aparecen desplazadas hacia la derecha respecto al if, else o end. Esto se hace para que el programa resulte ms legible, resultando ms fcil ver dnde empieza y termina la bifurcacin o el bucle. Es muy recomendable seguir esta prctica de programacin. La sentencia switch realiza una funcin anloga a un conjunto de if...elseif concatenados. Su forma general es la siguiente: Al principio se evala la switch_expresion, cuyo resultado debe ser un nmero escalar o una cadena de caracteres. Este resultado se compara con las case_expr, y se ejecuta el bloque de sentencias que corresponda con ese resultado. Si ninguno es igual a switch_expresion se ejecutan las sentencias correspondientes a otherwise. Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de archivos *.m. Tambin se aplican con frecuencia en el uso interactivo de MATLAB.

    4.2 Lectura y escritura interactiva de variables Se ver a continuacin una forma sencilla de leer variables desde teclado y escribir mensajes en la pantalla del PC. La funcin input permite imprimir un mensaje en la lnea de

    if condicin 1 bloque 1 elseif condicin 2

    bloque 2 elseif condicin 3

    bloque 3 else % opcin por defecto para cuando no se cumplan las

    condiciones 1, 2, 3 bloque 4

    end

    switch switch_expresion case case_expr1,

    bloque 1 case {case_expr 2, case_expr 3, case_expr 4,...}

    bloque 2 ... otherwise, % opcin por defecto

    bloque 3 end

  • 35

    comandos de MATLAB y recuperar como valor de retorno un valor numrico o el resultado de una expresin tecleada por el usuario. Despus de imprimir el mensaje, el programa espera que el usuario teclee el valor numrico o la expresin. Cualquier expresin vlida de MATLAB es aceptada por este comando. El usuario puede teclear simplemente un vector o una matriz. En cualquier caso, la expresin introducida es evaluada con los valores actuales de las variables de MATLAB y el resultado se devuelve como valor de retorno. Por ejemplo: >> n = input('Teclee el nmero de ecuaciones') Otra posible forma de esta funcin es la siguiente (obsrvese el parmetro 's'): >> nombre = input('Cmo te llamas?','s') En este caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo que se almacena en la cadena nombre. As pues, en este caso, si se teclea una frmula, se almacena como texto sin evaluarse. La funcin disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las cadenas de caracteres son un caso particular de vectores. Considrense los siguientes ejemplos de cmo se utiliza: >> disp('El programa ha terminado') >> A=rand(4,4) >> disp(A) Ejectense las sentencias anteriores en MATLAB y obsrvese la diferencia entre las dos formas de imprimir la matriz A.

    4.3 Archivos *.m Los archivos con extensin (.m) son archivos de texto sin formato (archivos ASCII) que constituyen el centro de la programacin en MATLAB. Estos archivos se crean y modifican con un editor de textos cualquiera, aunque se recomienda utilizar el propio editor de textos, que es tambin Debugger. Existen dos tipos de archivos *.m, los archivos de comandos (llamados scripts en ingls) y las funciones. Los primeros contienen simplemente un conjunto de comandos que se ejecutan sucesivamente cuando se teclea el nombre del archivo en la lnea de comandos de MATLAB o se incluye dicho nombre en otro archivo *.m. Un archivo de comandos puede llamar a otros archivos de comandos. Si un archivo de comandos se llama desde la lnea de comandos de MATLAB, las variables que crea pertenecen al espacio de trabajo base de MATLAB y permanecen en l cuando se termina la ejecucin de dicho archivo. El comando

  • 36

    echo hace que se impriman los comandos que estn en un script a medida que van siendo ejecutados. Este comando tiene varias formas:

    echo on activa el echo en todos los archivos script echo off desactiva el echo echo file on donde 'file' es el nombre de un archivo de funcin, activa el echo

    en esa funcin. echo file off desactiva el echo en la funcin echo file pasa de on a off y viceversa echo on all activa el echo en todas las funciones echo off all desactiva el echo de todas las funciones

    Una mencin especial merece el archivo de comandos startup.m . Este archivo se ejecuta cada vez que se entra en MATLAB. En l puede introducir todos aquellos comandos que le interesa se ejecuten siempre al iniciar la sesin, por ejemplo format compact y los comandos necesarios para modificar el path. Las funciones permiten definir funciones enteramente anlogas a las de MATLAB, con su nombre, sus argumentos y sus valores de retorno. Los archivos *.m que definen funciones permiten extender las posibilidades de MATLAB; de hecho existen bibliotecas de archivos *.m que se venden (toolkits) o se distribuyen gratuitamente (a travs de Internet). La primera lnea, que no sea un comentario, de un archivo llamado name.m que define una funcin tiene la forma: donde name es el nombre de la funcin. Entre corchetes y separados por comas van los valores de retorno (siempre que haya ms de uno), y entre parntesis tambin separados por comas los argumentos. Puede haber funciones sin valor de retorno y tambin sin argumentos. Recurdese que los argumentos son los datos de la funcin y los valores de retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y el signo igual (=); si slo hay un valor de retorno no hace falta poner corchetes. Tampoco hace falta poner parntesis si no hay argumentos. Los valores de retorno pueden ser mltiples y matriciales. Tanto el nmero de argumentos como el de valores de retorno no tienen que ser fijos, dependiendo de cmo el usuario llama a la funcin al ejecutarla. Recurdese que un archivo *.m puede llamar a otros archivos *.m, e incluso puede llamarse a s mismo de forma recursiva. Los archivos de comandos se pueden llamar tambin desde funciones, en cuyo caso las variables que se crean pertenecen al espacio de trabajo de la funcin. Las variables definidas dentro de una funcin son variables locales, en el sentido que son inaccesibles desde otras partes del

    function [lista de valores de retorno] = name(lista de argumentos)

  • 37

    programa y en el que no interfieren con variables del mismo nombre definidas en otras funciones o partes del programa. Se puede decir que pertenecen al propio espacio de trabajo de la funcin y no son vistas desde otros espacios de 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 nombres largos (ms de 5 letras) para las variables globales y con maysculas. La ejecucin de una funcin termina cuando se llega a su ltima sentencia ejecutable. Si se quiere forzar a que una funcin termine de ejecutarse se puede utilizar la sentencia return, que devuelve inmediatamente el control al entorno de llamada. Tradicionalmente MATLAB obligaba a crear un archivo *.m diferente por cada funcin. El nombre de la funcin deba coincidir con el nombre del archivo. A partir de la versin 5.0 se introdujeron las sub-funciones, que son funciones adicionales definidas en un mismo archivo *.m, con nombres diferentes del nombre del archivo (y del nombre de la funcin principal) y que las sub-funciones slo pueden ser llamadas por las funciones contenidas en ese archivo, resultando invisibles para otras funciones externas. A continuacin se muestra un ejemplo contenido en un archivo llamado mi_fun.m:

    4.4 Help para las funciones de usuario Tambin las funciones creadas por el usuario pueden tener su help, anlogo al que tienen las propias funciones de MATLAB. Esto se consigue de la siguiente forma: las primeras lneas de comentarios de cada archivo de funcin son muy importantes, pues permiten construir un help sobre esa funcin. Cuando se teclea en la ventana de comandos de MATLAB: >> help name_my_func el programa responde escribiendo las primeras lneas del archivo name_my_func.m que comienzan por el carcter (%), es decir, que son comentarios. De estas lneas, tiene una importancia particular la primera lnea de comentarios (llamada en ocasiones lnea H1). En

    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;

  • 38

    ella hay que intentar poner la informacin ms relevante sobre esa funcin. La razn es que existe una funcin, llamada lookfor que busca una determinada palabra en cada primera lnea de comentario de todas las funciones *.m.

    4.5 Referencias de funcin (function handles) Las referencias de funcin (function handles) constituyen un nuevo mecanismo para referirse a un nombre de funcin, introducido en MATLAB 6.0. En versiones anteriores la nica forma de referirse a una funcin era por medio del nombre. Las referencias de funcin permiten al programador un mayor control sobre la funcin que es efectivamente llamada. El principal uso de las referencias de funcin (como de los nombres de funcin en versiones anteriores) es pasar a una funcin el nombre de otra funcin, junto con sus argumentos, para que la pueda ejecutar. A estas funciones que ejecutan otras funciones que se les pasan como argumentos se les llama funciones de funcin. Por ejemplo, MATLAB dispone de una funcin llamada quad que calcula la integral definida de una funcin entre unos lmites dados. La funcin quad es genrica, esto es calcula, mediante mtodos numricos, integrales definidas de una amplia variedad de funciones, pero para que pueda calcular dicha integral hay que proporcionarle la funcin a integrar. Por ejemplo, para calcular, en forma aproximada,

    b

    a

    dxxsen

    se puede utilizar la sentencia: >> area=quad('sin',0,pi) area = 2.0000 La funcin quad ejecuta la funcin sin por medio de la funcin feval, que tiene la siguiente forma general: >>feval(funcname, arg1, arg2, arg3, ...) donde funcname es una cadena de caracteres con el nombre de la funcin a evaluar, y arg1, arg2, arg3, ... son los argumentos que se le pasan a feval para que se los pueda pasar a funcname. A partir de la versin 6.0 de MATLAB ya no se pasa, a las funciones de funcin, el nombre de la funcin como en el ejemplo anterior, sino una referencia de funcin o function handle. De todas formas, para mantener la compatibilidad con los programas desarrollados en versiones anteriores, se sigue admitiendo que se pase a feval el nombre de la funcin, pero este mecanismo ya no se soportar en versiones posteriores. En MATLAB 6.* la forma correcta de ejecutar el ejemplo anterior sera:

  • 39

    >>fh=@sin; >>area=quad(fh,0,pi); donde la variable fh es una referencia de funcin, que es un nuevo tipo de dato de MATLAB. Una referencia de funcin se puede crear de dos formas diferentes: Mediante el operador @ ("at" o "arroba"). La referencia a la funcin se crea

    precediendo el nombre de la funcin por el operador @. El resultado puede asignarse a una variable o pasarse como argumento a una funcin. Ejemplos:

    >>fh = @sin; >>area = quad(@sin, 0, pi); Mediante la funcin str2func que recibe como argumento una cadena de caracteres

    conteniendo el nombre de una funcin y devuelve como valor de retorno la referencia de funcin. Una de las ventajas de esta funcin es que puede realizar la conversin de un vector de celdas con los nombres en un vector de referencias de funcin. Ejemplos:

    >> fh = str2func('sin'); >> str2func({'sin','cos','tan'}) ans = @sin @cos @tan Una caracterstica comn e importante de ambos mtodos es que se aplican solamente al nombre de la funcin, y no al nombre de la funcin precedido o cualificado por su path. Adems los nombres de funcin deben tener menos de 31 caracteres.

    4.6 Funciones inline MATLAB permite definir funciones a partir de expresiones matemticas por medio de la funcin inline. Esta funcin trata de averiguar inteligentemente cules son los argumentos de la funcin inline, a partir del contenido de la expresin matemtica. Por defecto se supone que 'x' es el argumento, aunque es tambin posible determinarlos explcitamente al llamar a inline. Considrense los siguientes ejemplos: >> f=inline('expresin entre apstrofos'); >> f=inline('expresin', a1, a2, a3); % los argumentos son 'a1', 'a2', 'a3' >> f=inline('expresin', N); % los argumentos son 'x', 'P1', ..., 'PN' Las funciones inline se llaman con el handle (f en las sentencias anteriores) seguido de los argumentos entre parntesis. Por ejemplo >>f=inline(x 2-2*x+1)

  • 40

    >>f(2)

    4.7 Funciones annimas Las funciones annimas constituyen una forma muy flexible de crear funciones sobre la marcha, tanto en la lnea de comandos como en una lnea cualquiera de una funcin o de un archivo *.m. La forma general de las funciones annimas es la siguiente: >>fhandle = @(argumentos) expresin; Despus de ser creada, la funcin annima puede ser llamada a travs del fhandle seguido de la lista de argumentos actuales entre parntesis, o tambin puede ser pasada a otra funcin como argumento, tambin por medio del fhandle. Por ejemplo, la siguiente funcin annima calcula el valor del seno del ngulo doble: >>senoAngDoble = @(ang) 2*sin(ang).*cos(ang); Las funciones annimas acceden a las variables del espacio de trabajo en el que son definidas y crean en ese momento una copia de las variables que utilizan. El valor de dichas variables ya no se actualiza; slo los argumentos pueden cambiar de valor. De esta forma, las funciones annimas pueden ejecutarse a travs del handle en otros espacios de trabajo. Si las funciones annimas no tienen argumentos hay que poner los parntesis vacos, tanto al definirlas como al llamarlas. Por otra parte, pueden tener varios valores de retorno cuando la expresin que contienen devuelve varios valores. Se pueden recoger todos o slo algunos de estos valores. La nica limitacin importante de las funciones annimas es que estn limitadas a una nica expresin ejecutable de MATLAB. Por otra parte, su uso no tiene ms limitaciones que las del uso del handle de una funcin cualquiera.

    4.8 Recomendaciones generales de programacin Las funciones vectoriales de MATLAB son mucho ms rpidas que sus contrapartidas

    escalares. En la medida de lo posible es muy interesante vectorizar los algoritmos de clculo, es decir, realizarlos con vectores y matrices, y no con variables escalares dentro de bucles.

    Aunque los vectores y matrices pueden ir creciendo a medida que se necesita, es mucho ms rpido reservarles toda la memoria necesaria al comienzo del programa. Se puede utilizar para ello la funcin zeros. Adems de este modo la memoria reservada es contigua.

    Conviene desarrollar los programas incrementalmente, comprobando cada funcin o componente que se aade. De esta forma siempre se construye sobre algo que ya ha sido comprobado y que funciona, si aparece algn error, lo ms probable es que se deba a lo ltimo que se ha aadido, y de esta manera la bsqueda de errores est acotada y es mucho ms sencilla.

  • 41

    El debugger es una herramienta muy til a la hora de acortar ese tiempo de puesta a punto.

    Pensar bien las cosas al programar sobre una hoja de papel en blanco es mejor que sobre la pantalla del PC.

    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, introduciendo sangra en 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.

    En cualquier caso, la mejor forma (y la nica) de aprender a programar es programando.

  • 42

    5. GRFICOS BIDIMENSIONALES Los grficos 2-D de MATLAB estn fundamentalmente orientados a la representacin grfica de vectores y matrices. Cuando una matriz aparezca como argumento, se considerar como un conjunto de vectores columna (en algunos casos tambin de vectores fila). MATLAB utiliza un tipo especial de ventanas para realizar las operaciones grficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo lo que hubiera en ella, bien aadiendo nuevos elementos grficos a un dibujo anterior.

    5.1 Representacin grfica de funciones definidas por una frmula Los comandos que se presentan en este apartado son funciones MATLAB fciles de usar (easy-touse) para representar grficamente, de forma rpida, funciones definidas por una expresin matemtica. Tienen slo un pequeo nmero de parmetros que se pueden especificar. Todas ellas hac