Introducción a Matlab



Documentos relacionados
Comenzando con MATLAB

Centro de Capacitación en Informática

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Cálculo Simbólico también es posible con GeoGebra

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.

Introducción a la Programación en MATLAB

Tema 4: Empezando a trabajar con ficheros.m

MANEJANDO FICHEROS Y CARPETAS

Modulo 1 El lenguaje Java

Este programa mueve cada motor de forma independiente, y cuando termina una línea pasa a la siguiente.

Hoja1!C4. Hoja1!$C$4. Fila

Instructivo de Microsoft Excel 2003

Programa Presupuestos de Sevillana de Informática.

La ventana de Microsoft Excel

Manual de OpenOffice Impress

Fórmulas y funciones

Introducción a Matlab

Instalación del programa PSPP y obtención de una distribución de frecuencias.

Tema 3: Vectores y matrices. Conceptos básicos

A25. Informática aplicada a la gestión Curso 2005/2006 Excel Tema 7. Funciones avanzadas de Excel II

Manual de usuario de Solmicro BI. Página 1

Uso del programa CALC

MATERIAL 2 EXCEL 2007

PRÁCTICAS DE GESTIÓN GANADERA:

Para aquellos que tengan conocimientos de Access es lo más parecido a una consulta de referencias cruzadas, pero con más interactividad.

Teclado sobre una PDA para Personas con Parálisis Cerebral

Ahora comencemos!... Las operaciones matemáticas fundamentales pueden realizarse de forma rápida y sencilla con Miicrosofftt Excell.

Informática Aplicada a la Gestión de Empresas (IAGE) Parte III Excel e Internet Tema 2

Comerciales. Comisiones en Documentos de Venta WhitePaper Enero de 2008

PROPUESTAS COMERCIALES

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes:

EDWIN KÄMMERER ORCASITA INGENIERO ELECTRÓNICO

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Práctica 2 de Microsoft Access

MANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7

Operación de Microsoft Word

LAS BARRAS. La barra de acceso rápido

Proyectos de Innovación Docente

Los números racionales

Manual de ayuda para crear y gestionar Tareas, como actividad evaluable

Práctica 1ª: Introducción a Matlab. 1er curso de Ingeniería Industrial: Ingeniería de Control

Práctica de introducción a las redes neuronales. Perceptrón multicapa. Estimación de precios de casas

GE Power Management. 6S``O[WS\bORS1]\TWUc`OQWÕ\g. GE-FILES 7\ab`cQQW]\Sa 539$ &

Fórmulas y funciones

MANUAL DE USUARIO DE LA HERAMIENTA CONFIGURACION DE PRESUPUESTOS PARA DISTRIBUIDORES

Dando nuestros primeros pasos con 3DS Max. 1. Objetivos

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

MICROSOFT EXCEL Introducción: Qué es y para qué sirve Excel2007? TECNOLOGIA/ INFORMATICA: MS-EXCEL

CÓMO CREAR NUESTRO CATÁLOGO

NORMA (SEPA) 22/11/2013

Índice general de materias LECCIÓN 7 74

Otros tipos de Consultas

Elementos de Microsoft Word

Documentación del Terminal

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

Manual Impress Impress Impress Impress Impress Draw Impress Impress

MANUAL DE USUARIO ARCHIVO

Manual de Introducción a SIMULINK

Recursos de Aprendizaje

LECCIÓN 4ª Operaciones Numéricas

Capítulo 3: XML Spy como editor de documentos XML. 2. La interfaz de usuario de XML Spy

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Centro de Capacitación en Informática

GUÍA PGA SISTEMA EXTRANJERO

= C18+C19+C20+C21+C22 = SUMA(C18:C22) Con este sencillo ejemplo hemos querido demostrar que las funciones nos permiten simplificar los cálculos.

6.1. Conoce la papelera

GUÍA DE MANEJO APLICACIÓN POD

Reservas - Rooming List

Práctica 0. Emulador XENON de la computadora CESIUS

Programa para el Mejoramiento de la Enseñanza de la Matemática en ANEP Proyecto: Análisis, Reflexión y Producción. Fracciones

Tutorial de PowerPoint

2. Doctores 2.1. Dar de alta un doctor 2.2. Buscar un doctor 2.3. Editar un doctor 2.4. Borrar un doctor

MASTER EN INGENIERÍA DEL HORMIGÓN

1. La nueva interfaz del programa

Este botón situado en la barra de título de la ventana de la aplicación, nos da acceso a un menú mediante el cual podemos, entre otras opciones:

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

EDICIÓN Y FORMATO (II)

2º ITT SISTEMAS ELECTRÓNICOS 2º ITT SISTEMAS DE TELECOMUNICACIÓN 3º INGENIERÍA DE TELECOMUNICACIÓN AUTÓMATAS Y SISTEMAS DE CONTROL

Introducción al diseño híbrido con ZW3D

Una breve introducción a Excel c

Programación: QBASIC

SECRETARÍA VIRTUAL Perfil Ciudadano

Tema 7: Programación con Matlab

Descarga Automática. Manual de Usuario. Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, Madrid

Capítulo 6. Modificar archivos de datos. Ordenar casos

Plantilla de texto plano

Práctica 3 Cálculo Matricial

Operación de Microsoft Excel. Guía del Usuario Página 79. Centro de Capacitación en Informática

Informática I Notas del curso

PROTEUS Depuración de programas para microprocesadores

INVENTARIO INTRODUCCIÓN RESUMEN DE PASOS

GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)

Lectura de datos. Marcelo Reyes Notas sobre gretl 1.8.6cvs

Gestión de usuarios en la web educativa del centro con JOOMLA!

FOCO GESTIÓN DE GRUPOS

Qué es y para qué sirve Excel2007?

MATEMÁTICAS CON LA HOJA DE CÁLCULO

SMS PUSH SMS ENCUESTAS INTERNET FAX

Transcripción:

Introducción a Matlab Enero 2005 Resumen Este documento presenta una introducción a Matlab dirigida a usuarios que no han trabajado nunca con Matlab. Las principales características de Matlab así como la creación de programas son explicadas. El documento trata de introducir al usuario en los distintos temas explicados sin profundizar en ellos. El documento incluye una lista de referencias que el usuario puede utilizar para ampliar sus conocimientos sobre el programa. Escrito por Abel Elizalde para la asignatura Evaluación de políticas públicas (CEMFI). Varios ejemplos utilizados proceden de una versión anterior escrita por Javier Mencia.

Índice General 1 Entorno de trabajo 1 2 Definición de variables 3 3 Vectores y matrices 4 3.1 Accesoaelementosdeunamatriz... 6 3.2 Operacionesmatriciales... 7 3.3 Arrays multidimensionales... 9 4 M-file: escritura de programas 9 5 Utilización de la ayuda 11 6 Uso de funciones incluidas en Matlab 12 7 Funciones propias 15 8 Bucles 17 8.1 Condición if... 17 8.2 Bucle for... 18 8.3 Bucle while... 18 8.4 switch... 19 9 Otras funciones 20 10 Gráficos 22 11 Debug: depurar programas 22 12 Tipos de variables 24 13 Ejercicios 28 13.1 Encontrar un punto fijo... 28 13.2Evaluarfuncioneslinealesatrozos... 29 Referencias 31

1 Entorno de trabajo El entorno operativo de Matlab se compone de una serie de ventanas que presentamos a continuación. Aunque el reparto de estas ventanas en la pantalla puede cambiarse, generalmente aparecen en la misma posición. 1 Figura 1: Entorno de trabajo Matlab. LasventanasqueformanpartedelentornodetrabajodeMatlabson: 1. Command Window: se utiliza para introducir órdenes directamente por el usuario (seguidas de enter). Losresultadosdelasórdenesintroducidassemuestran en esta misma pantalla. Cuando las órdenes se envían desde un programa previamente escrito, que en Matlab recibe el nombre de M-file, los resultados también aparecen en esta ventana. 2. Command history: las órdenes introducidas en la ventana command window quedan grabadas en esta ventana, de forma que, haciendo doble click sobre ellas 1 La posición por defecto de las ventanas puede reestablecerse utilizando: View Desktop layout Default. 1

Figura 2: Command window. las podemos volver a ejecutar. De la misma forma, si nos situamos en la ventana command window, en el espacio reservado para introducir nuevas órdenes, i.e. inmediatamente después de >>, y presionamos la tecla, podemos acceder a órdenes introducidas con anterioridad. Figura 3: Command history. 3. Workspace: esta ventana contiene las variables (escalares, vectores, matrices,...) creadas en la sesión de Matlab. La ventana workspace nos proporciona información sobre el nombre, dimensiones, tamaño y tipo de variable. Existen dos opciones para eliminar una variable: 2

(a) Introducir en command window el comando clear seguido del nombre de la variable. (b) Seleccionar la variable en el workspace y borrarla directamente con la tecla delete. Figura 4: Workspace. Haciendo doble click en una variable se accede al contenido de dicha variable, pudiendo modificar sus valores. 4. Current directory: las operaciones de Matlab utilizan el directorio seleccionado en current directory (a través del botón para explorar) como punto de referencia. Por ejemplo, si guardamos una serie de variables con el comando save, se guardan en el directorio en el que estemos trabajando. Lo mismo ocurre cuando cargamos datos con el comando load: el ordenador busca los datos en el fichero en el que estemos trabajando. 2 Definición de variables Para crear una variable en Matlab, simplemente se ha de introducir, en la ventana command window, el nombre de la variable y su valor. Por ejemplo: a =3; (1) 3

Para buscar el directorio deseado Figura 5: Current directory. hace que, en el espacio de trabajo workspace, se cree una variable escalar con valor 3. Cualquier orden posterior puede hacer uso de esta variable por medio de una llamada a a, por ejemplo: b =exp(a); (2) crea una nueva variable b cuyo valor es el exponencial de la variable a. El punto y coma ; después de una orden no es necesario. Si no ponemos el punto y coma, el resultado de la orden aparece en la pantalla command window. En caso contrario la orden se ejecuta pero su resultado no aparece en pantalla. 3 Vectores y matrices De la misma forma que se definen variables escalares pueden definirse vectores (arrays de 1 dimensión) y matrices (arrays de 2 dimensiones). Por ejemplo, para definir la matriz M = 1 2 3 4 5 6 (3) 4

basta con teclear M =[1, 2; 3, 4; 5, 6]; (4) donde los términos de una misma fila aparecen separados por comas, y el punto y coma hace de separador entre filas. Para trasponer M, basta teclear M 0 (5) Existen una serie de funciones que definen matrices estándar como: Matriz de unos de dimensión N 1 xn 2 : ones(n 1,N 2 ); Matriz de ceros de dimensión N 1 xn 2 : zeros(n 1,N 2 ); Matriz identidad de dimensión N 1 xn 1 : eye(n 1 ); linspace(primer elemento, último elemento, número de elementos igualmente espaciados). Por ejemplo: linspace (0, 1, 5) ; (6) crea el vector fila h 0 0.25 0.5 0.75 1 i (7) La orden M =[primer elemento : paso : último elemento]; (8) crea un vector fila que va desde primer elemento hasta último elemento dando saltos de la magnitud indicada por paso. Por ejemplo M =[1:0.5 :3]; genera el vector fila M = h 1 1.5 2 2.5 3 i (9) 5

3.1 Acceso a elementos de una matriz Imaginemos que hemos definido la matriz M = 1 2 3 4 5 6 (10) Dicha matriz aparecerá en el workspace y puede ser utilizada hasta que se borre. Para acceder al elemento (i, j) de la matriz M tecleamos M (i, j) (11) Si no ponemos punto y coma al final de la orden el valor obtenido aparecerá en pantalla. También podemos asignar dicho valor a un escalar: a = M (i, j); (12) Para acceder a la fila i de la matriz M tecleamos M (i, :) (13) Por ejemplo: M (1, :) (14) nos devolverá el vector fila h 1 2 i (15) Para acceder a la columna j de la matriz M tecleamos M (:,j) (16) También podemos acceder a un rango determinado de la matriz. La orden M (i 1 : i 2,j 1 : j 2 ) (17) 6

nos permite acceder a los elementos de la matriz M situados desde la fila i 1 a la fila i 2 y desde la columna j 1 hasta la columna j 2. Por ejemplo M (2 : 3, 1:1) (18) nos devolvería el vector columna 2 3 5 (19) 3.2 Operaciones matriciales Matlab permite operar con matrices utilizando funciones como: Multiplicar, sumar y restar matrices A y B (siempre que tengan las dimensiones adecuadas): A B; (20) A + B; (21) A B; (22) Inversa de la matriz A : Determinante de la matriz A : Traspuesta de la matriz A : inv (A); (23) det (A); (24) A 0 ; (25) 2 Cuando el rango al que deseemos acceder vaya hasta la última fila ó columna podemos utilizar end en lugar del número de la fila ó columna. La orden anterior podría escribirse como M (2 : end, 1:1); 7

ValoresyvectorespropiosdeloselementosdelamatrizA : eig (A); (26) Descomposición de cholesky de la matriz A : chol (A); (27) ElementosdeladiagonaldelamatrizA : diag (A); (28) Suma y producto, por columnas, de los elementos de la matriz A : 3 sum (A); (29) prod (A); (30) Matlab también permite operar elemento a elemento entre matrices. Imaginemos las matrices " # 1 3 A = (31) 5 7 " # 2 4 B = (32) 6 8 Matlab nos permite multiplicar, dividir,... dichas matrices elemento a elemento. Para ello debemos poner un punto delate del operador que deseemos utilizar: Operación Orden Resultado " # 2 12 Multiplicación A. B 30 56 " # 0.5000 0.7500 (33) División A./B 0.8333 0.8750 " # 1 81 Potencia A.ˆB 15625 5764801 3 Para obtener la suma y producto por filas utilizaríamos las mismas funciones pero sobre la matriz transpuesta: sum (A 0 ); prod (A 0 ); 8

Concatenación de matrices La orden A = " 2 3 # (34) B =[A, A +3;A 2,A 1] ; (35) genera la matriz B = 2 5 3 6 4 1 6 2 (36) 3.3 Arrays multidimensionales Matlab permite crear arrays de más de dos dimensiones. Por ejemplo, la orden A = zeros(2, 2, 3); (37) crea un array de tres dimensiones: un cubo formado por tres matrices de dimensión 2x2. 4 M-file: escritura de programas M-files, también llamados scripts, permiten al usuario escribir un conjunto de órdenes en un editor de texto (incluido en el programa Matlab) para ejecutarlas posteriormente en el orden en el que se han escrito. En lugar de introducir las órdenes una a una en el command window o ventana de comandos las órdenes se escriben una tras otra en un M-file queposteriormenteseejecuta. Para abrir un M-file: File New M-file. Los M-files se guardan (File Save) eneldirectorioenelqueestemostrabajando(fijado en la ventana current directory) conextensión.m. El comando save guardalasvariablesqueseencuentren en el workspace con extensión.mat. TantolosM-files como los ficheros de datos, creados previamente, se abren desde la ventana current directory haciendo doble click sobre ellos. 9

Un componente principal de cualquier programa son los comentarios, es decir, texto que ayuda a interpretar (al lector) lo que el programa está haciendo pero que Matlab no lee como órdenes. En un M-file, cualquier texto que aparezca tras el signo % es interpretado por Matlab como un comentarioyporlotantonoseejecuta. Es recomendable introducir comentarios en los programas M-file para, cuando se revisan los códigos, ayudar al lector a saber que es lo que el programa está haciendo. Los comentarios aparecen en color verde en los M-file. Una práctica bastante útil al comenzar un M-file es escribir, en primer lugar, los comandos clc y clear. clc limpia la pantalla command window y clear borra todas las variables que hubiera en el workspace. 4 La orden clear borra todas las variables que se encuentren en el workspace. Ejemplo de M-file: %EjemplodeM-file clc % para limpiar los resultados de command window clear % para borrar las variables del workspace % Creamos una matriz A A =[1, 2; 3, 4]; % Creamos otra matriz B que sea la traspuesta de A B = A 0 ; % Mostramos B en la pantalla del command window B % Guardamos las dos matrices creadas A y B en un fichero llamodo % matrices_a_b. El fichero tendrá extensión.mat y se guarda en el % directorio en el que nos encontremos (fijado en la ventana % current directory). save matrices_a_b; % Borramos de la memoria de Matlab las variables del workspace clear % Cargamos de el fichero matrices_a_b previamente creado load( matrices_a_b.mat ); % Mostramos A en la pantalla del command window A %FindelM-file (38) Para ejecutar un M-file hay dos opciones: pulsamos F5 o el botón Run, verfigura 4 En el caso de que el M-file que esteis escribiendo vaya a hacer uso de variables previamente creadas, simplemente no pongais la orden clear al principio del M-file. 10

(6), situado en la botonera superior del M-file. Figura 6: Boton Run. 5 Utilización de la ayuda Una de las principales ventajas de Matlab con respecto a similares programas consiste en la gran cantidad de información que el usuario puede obtener del funcionamiento del programa y de los comandos a través de la ayuda (Menú Help). Para programar en Matlab es necesario saber manejarse en el entorno de trabajo y saber utilizar la ayuda. Cualquier duda sobre como utilizar una función o cual es el comando para realizar una determinada operación puede resolverse utilizando la ayuda. El menú Help contiene, además de dos aplicaciones para introducir al usuario el entorno de trabajo (Help Using the Desktop and Help Using the Command Window), una pestaña llamada Matlab Help. Matlab Help permite al usuario buscar información de tres formas diferentes: 1. La pestaña Contents permite ver un índice con todas las aplicaciones y Toolboxes 5 de Matlab. 2. La pestaña Index permite buscar, por orden alfabético, en el índice de materias de Matlab, información sobre palabras clave (comandos, ordenes,... ). Por 5 Matlab dispone de Toolboxes, que comercializa de forma separada al programa, sobre gran cantidad de materias: optimización, financial toolbox, financial derivatives toolbox, partial differential equations toolbox, statistics toolbox, GARCH toolbox,... Cada toolbox contiene funciones predefinidas de la materia que trata. Documentación (en PDF) de cada toolbox está disponible en la pestaña de la toolbox y en www.mathworks.com. Las Toolboxes han dado a Matlab gran parte del valor añadido y del prestigio del que ahora disfruta. 11

Figura 7: Matlab Help. ejemplo, si escribimos plot obtenemos información sobre dicho comando, que se utiliza para hacer gráficos. 3. La pestaña Search busca en toda la documentación de ayuda de Matlab las palabras introducidas. 6 Uso de funciones incluidas en Matlab Para utilizar las funciones que Matlab incorpora, lo mas conveniente es consultar la ayuda. Las funciones constan de una serie de variables de entrada (inputs) que deben ser proporcionados por el usuario y una serie de variables de salida (outputs) como resultado de la ejecución de la función. A modo de ejemplo, analizamos la función regress que permite realizar regresión lineal. Si tecleamos regress en la pestaña Index de ayuda de Matlab obtenemos información sobre como utilizar la función. A continuación presentamos el resultado de dicha búsqueda: 12

Statistics Toolbox regress Multiple linear regression Syntax b = regress(y,x) [b,bint,r,rint,stats] = regress(y,x) [b,bint,r,rint,stats] = regress(y,x,alpha) Description b = regress(y,x) returns the least squares fit of y on X by solving the linear model for, where: y is an n-by-1 vector of observations X is an n-by-p matrix of regressors is a p-by-1 vector of parameters is an n-by-1 vector of random disturbances [b,bint,r,rint,stats] = regress(y,x) returns an estimate of in b, a 95% confidence interval for in the p-by-2 vector bint. The residuals are returned in r and a 95% confidence interval for each residual is returned in the n-by-2 vector rint. The vector stats contains the R 2 statistic along with the F and p values for the regression. [b,bint,r,rint,stats] = regress(y,x,alpha) gives 100(1-alpha) % confidence intervals for bint and rint. For example, alpha = 0.2 gives 80% confidence intervals. Examples Suppose the true model is where I is the identity matrix.

X = [ones(10,1) (1:10)'] X = 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 y = X * [10;1] + normrnd(0,0.1,10,1) y = 11.1165 12.0627 13.0075 14.0352 14.9303 16.1696 17.0059 18.1797 19.0264 20.0872 [b,bint] = regress(y,x,0.05) b = 10.0456 1.0030 bint = 9.9165 10.1747 0.9822 1.0238 Compare b to [10 1]'. Note that bint includes the true model values. Reference [1] Chatterjee, S. and A. S. Hadi. Influential Observations, High Leverage Points, and Outliers in Linear Regression. Statistical Science, 1986. pp. 379-416. refline regstats

Generalmente las funciones pueden tener una o varias variables de entrada y una o varias variables de salida. En este caso la función regress tiene dos variables de entrada obligatorias: un vector columna y de datos sobre la variable dependiente, de dimensión nx1, y una matriz X, dedimensiónnxp, que contiene (por columnas) p variables independientes. Si no incluimos ningúna otra variable de entrada, la función regress devuelve (en una de las variables de salida) un intervalo de confianza al 95% de los parámetros estimados. Si, por el contrario, incluimos una tercera variable de entrada alpha, el intervalo de confianza es del (1 alpha)%. Este ejemplo ilustra el hecho de que muchas funciones de Matlab tienen un número de variables de entrada variable. Respecto a las variables de salida, si escribimos b = regress(y, X); (39) solamente obtenemos una variable de salida b con los parámetros estimados. Por el contrario, si escribimos [b, bint, r, rint, stats] =regress(y, X); (40) obtenemos un conjunto de variables de salida: b, bint, r, rint, stats que recogen, entre otras cosas un intervalo de confianza para los parámetros estimados (bint), los errores de la regresión (r), elr 2 de la regresión,... Al igual que con los variables de entrada, las funciones de Matlab pueden generar un número variable de variables de salida, dependiendo de como se escriba la orden. Para utilizar de forma eficiente dichas funciones el menú de ayuda de Matlab nos proporciona información sobre dichas funciones, sus variables de entrada y variables de salida. 7 Funciones propias En ocasiones nos interesa utilizar funciones que Matlab no tiene predefinidas. Por ejemplo, supongamos que necesitamos evaluar, en repetidas ocasiones la siguiente 15

función: x + y f (x, y) =x 2 + y 3 +. (41) 2 Definiremos una función propia en un M-file nuevo que debe acompañarse al directorio de trabajo (current directory) en el que estemos trabajando cada vez que evaluemos la función. Por ejemplo, si en un M-file necesitamos evaluar dicha función, el M-file donde hemos definido la función debe estar en el mismo directorio de trabajo que el M-file donde la estamos utilizando. La siguiente figura contiene el código que el M-file que define la función f (x, y) debe contener: % Función propia 1 function resultado = f(x, y) % variables de entrada: x e y % variable de salida: resultado (42) % operaciones resultado =(xˆ2)+(yˆ3) +sqrt ((x + y) /2); donde la función sqrt es una función que Matlab incorpora para calcular raíces cuadradas. La palabra function precede a la forma de la función: resultado = f (x, y), (43) donde x e y son los variables de entrada y resultado es la variable que la función devuelve como resultado. La última línea del M-file calcula el valor de la variable resultado utilizando las variables de entrada. Una vez está definida la función, si tecleamos en el command window (o escribimos en un M-file): a = f (c, d); (44) la función asignará a la variable a el valor de la función f ( ) evaluada en el punto (c, d). Como puede observarse, no es necesario, al evaluar una función, usar las variables con los mismos nombres que aparecen en la definición de la función. 16

Pueden crearse funciones propias con un número variable de variables de entrada y variables de salida. La utilización de funciones propias con varias variables de salida cumple en Matlab la misma función que las denominadas subrutinas cumplenenotros programas como Fortran. Información acerca de estas opciones puede encontrarse en el menú ayuda de Matlab, tecleando passing variable numbers of arguments enla pestaña Search. El uso de funciones propias es la manera más limpia de programar. Otra de las ventajas de escribir funciones propias en M-files separados del programa principal es la posibilidad de utilizar dichas funciones en otros programas. 8 Bucles La mejor forma de saber cómo funciona un bucle y cual es su sintaxis es utilizar la ayuda de Matlab. En esta sección presentamos algunos de los más utilizados. 8.1 Condición if Forma general: if (condición 1) órdenes a ejecutar si condición 1 se satisface elseif (condición 2) órdenes a ejecutar si condición 2 se satisface... else órdenes a ejecutar si no se satisface ninguna de las condiciones anteriores end (45) Ejemplo: if (a >b) c = a; else c = b end (46) 17

Paraevaluarlascondicionesseutilizanoperadoreslógicoscomo: Operador Descripción > Mayor que >= Mayor o igual que < Menor que <= Menor o igual que == Igual que ~= Distinto que & Si O ~ No (47) 8.2 Bucle for Forma general: for contador=inicio : fin órdenes a ejecutar end Ejemplo: M-file función factorial function h = fun_factorial(n) if (n == 0) h =1; else h =1; for i=1:n h = h i; end end % final del if (48) (49) 8.3 Bucle while Forma general: while (condición) órdenes a ejecutar end (50) 18

Ejemplo: bucle while que encuentra el menor número entero n cuyo factorial es mayor que 1000000, utilizando la función fun_factorial( ) definida previamente en un M-file. 8.4 switch n =1; while (fun_factorial(n) < 1000000) n = n +1; end switch es útil cuando tenemos varios if anidados. El comando switch evalúa una variable, y en función del valor de dicha variable, realiza un conjunto de acciones u otro. En el siguiente ejemplo, la variable a es evaluada por switch en la primera línea del código. Si el valor de la variable a es 1, se realizan las operaciones incluidas en el apartado case 1, si el valor de la variable a es 2, se realizan las operaciones incluidas en el apartado case 2,... Si la variable a no toma ninguno de los valores especificados en los distintos case se ejecutan las órdenes que aparecen en el apartado otherwise. Forma general: (51) switch a case 1 órdenes a ejecutar si a =1 case 2 órdenes a ejecutar si a =2 case 3 órdenes a ejecutar si a =3... otherwise órdenes a ejecutar si a no toma ninguno de los valores especificados en los distintos case end (52) Comando break El comando break termina la ejecución de un bucle. 19

Interrupción de programas en marcha Para interrumpir un programa mientras se está ejecutando seleccionamos el command window y pulsamos Control + C. 9 Otras funciones A continuación presentamos algunas funciones, a modo de ejemplo, que pueden resultar útiles a la hora de escribir programas. Consultar la ayuda de Matlab para obtener una descripción detallada. beep Produce un sonido cada vez que se ejecuta. Muy útil cuando se deja a correr un programa y uno se pone a hacer otras cosas pero quiere enterarse de cuando termina el programa: poner un beep al final del programa y subir el volumen de los altavoces. tic y toc tic pone el cronómetro de Matlab en marcha, y toc lo para, imprimiendo por pantalla el tiempo transcurrido desde que tic se ejecutó. Útil para controlar tiempos de ejecución. fprintf( escribir texto ) Imprime escribir texto en la pantalla. size(matriz) Devuelve las dimensiones de una matriz. rand(n, m) Genera una matriz de dimensión nxm de números aleatorios a partir de una distribución normal [0, 1]. 20

randn(n, m) Similar a rand pero utilizando una normal estándar. sort(vector o matriz) Ordena de mayor a menor los elementos de un vector o matriz. Otras funciones sum: suma los elementos de un vector o matriz. mean: calcula la media de los elementos de un vector o matriz. var: calcula la varianza de los elementos de un vector o matriz. std: calcula la desviación típica de los elementos de un vector o matriz. max: calcula el máximo de los elementos de un vector o matriz. min: calcula el mínimo de los elementos de un vector o matriz. Funciones de densidad, distribución e inversa de la función de distribución Las siguientes funciones calculan, para la distribución de probabilidad normal estándar, la densidad, función de distribución e inversa de la función de distribución de un punto x: normpdf(x) normcdf(x) norminf(x) Similares funciones para otras distribuciones de probabilidad también están disponibles. 21

10 Gráficos Otro de los puntos fuertes de Matlab son los gráficos, tanto en dos como en tres dimensiones. La función plot se utiliza para hacer gráficos en dos dimensiones y las funciones plot3, mesh, surface, contour,... se utilizan para hacer gráficos en tres dimensiones. El libro Hanselman y Littlefield (2001), citado en la bibliografía, tiene varios capítulos muy buenos sobre la realización de gráficos. 11 Debug: depurar programas Cometer errores a la hora de escribir código es inevitable. Por ello, Matlab, al igual que otros programas similares, incluye una aplicación llamada debugger destinada a ayudar al usuario a depurar sus códigos. El debugger se aplica sobre los programas escritos en Matlab, esto es, sobre los M-files donde se ha escrito cualquier tipo de código. En el caso de que exista un error en el código, al ejecutar el M-file, Matlab detiene su ejecución en el punto donde se encuentra el error e imprime en la pantalla del command window el tipo de error y la línea del M-file donde se encuentra, de forma que podemos ir a dicha línea de código en el M-file y corregir el error. Por ejemplo, en el ejemplo de M-file que utilizamos en (38), imaginemos que, en la tercera línea de código, en lugar de escribir el comando clear olvidamos la letra r y escribimos solo clea. AlejecutarelM-file nos aparecería el siguiente error:??? Undefined function or variable clea. On line 4 ==> clea (53) En cada línea del M-file, situado a la derecha del mismo (justo después de los números que indican el número de línea), aparece una barrita horizontal. Haciendo click sobre dicha barra fijamos un breakpoint, que queda marcado por un punto rojo sobre la barra: Al fijar un breakpoint y ejecutar el programa (Run) seejecutantodaslasór- denes anteriores al breakpoint, deteniéndose la ejecución del programa en el break- 22

Figura 8: Breakpoint. point. Cuando eso ocurre, una flecha verde se sitúa al principio de la línea donde está situado el breakpoint, como puede verse en la Figura (8). La flecha verde indica la línea del programa hasta la cual se han ejecutado las órdenes. Al fijar un breakpoint y ejecutar el programa, su ejecución se para en el breakpoint y, en ese momento, utilizando el workspace oelcommand window, podemos ver los valores de cada variable o introducir órdenes en el command window. Esta aplicación es muy útil para comprobar que órdenes situadas dentro del código generan los resultados deseados. Una vez la ejecución se detiene en el breakpoint yaparecelaflecha verde al principiodelalíneatenemosvariasopciones: 1. Detener la ejecución, 2. poner de nuevo el programa a ejecutarse desde el breakpoint hasta el final del M-file (o hasta el siguiente breakpoint), o 3. ir ejecutando orden por orden a partir del breakpoint. La Figura (9) muestra los botones del M-file que realizan estas acciones. Para borrar un breakpoint podemos hacer click sobre él o presionar uno de los botones que aparecen en la botonera del M-file, que borra todos los breakpoints que haya en el M-file. Podemos fijar tantos breakpoints como queramos. 23

Ejecutar siguiente orden Continuar ejecución hasta el final del M- file o hasta el siguiente breakpoint Borrar breakpoints Detener ejecución 12 Tipos de variables Figura 9: Botones para depurar un programa. Matlab, a diferencia de otros programas, no requiere al usuario a declarar las variables antes de utilizarlas. De la misma forma, tampoco es necesario declarar el tipo de cada variable (entero, real, complejo, carácter,...): cuando una nueva variable se crea Matlab le asigna el tipo que le corresponda. Por ejemplo: Si escribimos a =2.4; (54) Matlab considera la variable como real. Si escribimos a =2+3i; (55) Matlab considera la variable como compleja. Si escribimos a = texto ; (56) 24

Matlab considera la variable de tipo texto o carácter (char). Aunque esta característica de Matlab puede parecer conveniente por su sencillez tiene varios inconvenientes. Por ejemplo, al no declarar todas las variables al principio de cada programa generalmente se pierde la cuenta del número (y nombre) de todas las variables creadas, lo que puede ocasionar problemas. Variables globales y locales Por defecto todas las variables creadas en Matlab son variables locales, esto es, solo pueden utilizarse en el M-file en el que se crean. Por ejemplo, en la función f (x, y) definida en la sección de funciones propias (42), las variables x, y y resultado solo pueden utilizarse dentro del M-file que define la función f (x, y). Una vez que la función ha sido evaluada dichas variables desaparecen de la memoria. Las variables globales pueden utilizarse en todo momento. Para ello, es necesario declarar la variable como global en todos los M-files donde se quiera utilizar. Por ejemplo, consideremos la definición alternativa de la función f (x, y) que fue definida en (42): % Función propia 1 con variable global function resultado = f(x, y) % variables de entrada: x e y % variable de salida: resultado global e; % declaración de la variable global e (57) % operaciones e = sqrt ((x + y) /2); resultado =(xˆ2)+(yˆ3)+e; Cada vez que se evalúa la función f ( ), lavariablee toma el valor q x+y,dondex 2 e y son las variables de entrada introducidos por el usuario. Para definir una variable global en un M-file o en el command window tecleamos global e; (58) 25

A continuación nos situamos en el command window ydefinimos la variable e como global, esto es >> global e; (59) Después evaluamos la función f (x, y), porejemplo lo que nos da un resultado de 3. >> f (1, 1) (60) Al mismo tiempo que la función f (x, y) se ha ejecutado, hemos asignado el valor q 1+1, a la variable global e. Como la hemos 2 declarado global en el command window, ahora podemos acceder a ella. Si tecleamos en el command window >> e (61) obtenemos su valor en pantalla: e =1 (62) En lugar de definir la variable global e en el command window lo podríamos haber hecho en cualquier M-file que estemos utilizando. En el ejemplo que acabamos de ver, la variable global toma su valor cuando la función propia se ejecuta para poder ser utilizado fuera de dicha función propia, es decir, en el programa principal. En este caso hemos utilizado la variable global como variable de salida. También podemos utilizar la variable global como variable de entrada. Podemos definir en el programa principal (o command window) una variable como global y utilizarla en una función propia sin necesidad de pasarla como variable de entrada de la función propia. Imaginemos que definimos la función (42) de la siguiente forma: x + y f (x, y) =x 2 + y 3 + 2 + e, (63) 26

donde e será una variable global. El M-file que define dicha función sería: % Función propia 1 con variable global function resultado = f(x, y) % variables de entrada: x e y % variable de salida: resultado global e; % declaración de la variable global e (64) % operaciones resultado =(xˆ2)+(yˆ3) +sqrt ((x + y) /2) +e; Si declaramos la variable e como global en el programa principal (o en el command window) y le asignamos un determinado valor: >> global e; >> e =2; (65) cada vez que ejecutemos la función f ( ) definida en (64) la variable e tomará valor 2 y el resultado se verá modificado en consecuencia. Nótese que, aunque la variable global e se utiliza en la ejecución de la función propia f ( ), no es una variable de entrada de dicha función. 27

13 Ejercicios 13.1 Encontrar un punto fijo El objetivo es encontrar un punto fijo x para la función f (x) =a + b x donde x y a son matrices de 5x5 y b es un número real. Consideramos que hemos llegado al punto fijo cuando la distancia entre dos iteraciones x (n) y x (n +1) sea menor que un número real arbitrariamente pequeño llamado distance. 1. Dar valores a los parámetros b y distance. Tomamos b =0.95 y distance =10 6. 2. Abrir los ficheros matrixa y matrix0 (tienen formato.txt) donde se hallan la matriz a y una matriz inicial x (0) y cargarlos en memoria. 3. Escribir una función f (x) como una rutina (función propia) separada. La matriz a y el número real b habrán sido definidos como variables globales y por tanto no serán dados como variables locales (de entrada) en esta rutina. 4. Escribir una rutina para la función de distancia. Dicha función toma como variables de entrada dos matrices de 5x5 y entrega un número real no negativo. Se puede tomar, por ejemplo, la distancia máxima entre los elementos de las dos matrices. 5. Hacer un bucle while para evaluar la función f (x) de manera repetida sobre los resultados previos: x (1) = f (x (0)), x (2) = f (x (1)), x (3) = f (x (2)), etc. Mostrar por pantalla la distancia entre cada paso junto con el número de iteración, y guardar las iteraciones y las distancias en dos vectores. 6. Condición de salida: cuando la distancia entre dos repeticiones sea menor que distance, salir del bucle. 7. Guardar en un fichero la matriz con el punto fijo x. 8. Representar en un gráfico la evolución del criterio distancia para cada iteración. 28

13.2 Evaluar funciones lineales a trozos El objetivo de este ejercicio es evaluar una función lineal a trozos en un punto determinado. Se trata de una función que se comporta de forma lineal en intervalos previamente determinados. Con este tipo de funciones se pueden obtener aproximaciones bastante exactas para cualquier función más general. En nuestro caso, disponemos de dos vectores: x y gx. El vector x indica los extremos de cada intervalo, o en otras palabras los puntos en los que cambia la pendiente de la función. El vector gx contiene el valor de la función en cada uno de los puntos que se encuentran en el vector x. Con los datos de estos dos vectores tenemos la información suficiente para evaluar la función en cualquier punto. Por ejemplo, la Figura (10) muestra que para evaluar una función de este tipo en el argumento z, hay que encontrar, en primer lugar, los componentes de x anterior y posterior a z (x (i) y x (i +1), respectivamente). Finalmente, por interpolación lineal, se obtiene el resultado buscado. g (z) =gx (i)+ gx (i +1) gx (i) x (i +1) x (i) (z x (i)). (66) En el ejemplo, los vectores x y gx se encuentran guardados dentro de los ficheros con el mismo nombre, x y gx (en formato.txt). Estos vectores se cargan en memoria con la orden load function.mat en el M-file que define la función g ( ). 29

g ( x ) g ( x( i + 1) ) g ( x() i ) g ()? z x() i z x( i + 1) Figura 10: Función a trozos.. 30

Referencias [1] Getting Started with Matlab, The MathWorks, www.mathworks.com. [2] Hanselman, D., y Littlefield, B., 2001, Mastering Matlab 6: A Comprehensive Tutorial and Reference, Prentice Hall. Para hacernos una idea de las posibilidades que Matlab ofrece solamente hace falta echarle un vistazo al índice de contenidos de Hanselman y Littlefield (2001), disponible en la biblioteca: 1. Getting started. 2. Basic features. 3. The Matlab desktop. 4. Script M-files. 5. Arrays and array operations. 6. Multidimensional arrays. 7. Cell arrays and structures. 8. Character strings. 9. Relational and logical operators. 10. Control flow: for loops, while loops, if loops, switch loops 11. Function M-files. 12. M-file debugging and profiling. 13. File and directory management. 14. Set, bit and base functions. 31

15. Time computations. 16. Matrix algebra. 17. Data analysis. 18. Data interpolation. 19. Polynomials. 20. Cubic splines. 21. Fourier analysis. 22. Optimization. 23. Numerical integration and differentiation. 24. Differential equations. 25. Two dimensional graphics. 26. Three dimensional graphics. 27. Using color and light. 28.... 32