Está en la página 1de 34

Introduccin a Matlab

Enero 2005

Resumen Este documento presenta una introduccin a Matlab dirigida a usuarios que no han trabajado nunca con Matlab. Las principales caractersticas de Matlab as como la creacin 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 Evaluacin de polticas pblicas (CEMFI). Varios ejemplos utilizados proceden de una versin anterior escrita por Javier Mencia.

ndice General
1 Entorno de trabajo 2 Denicin de variables 3 Vectores y matrices 3.1 Acceso a elementos de una matriz . . . . . . . . . . . . . . . . . . . . 3.2 Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Arrays multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . 4 M-le: escritura de programas 5 Utilizacin de la ayuda 6 Uso de funciones incluidas en Matlab 7 Funciones propias 8 Bucles 8.1 Condicin if 8.2 Bucle for . . 8.3 Bucle while . 8.4 switch . . . . 9 Otras funciones 10 Grcos 11 Debug: depurar programas 12 Tipos de variables 13 Ejercicios 13.1 Encontrar un punto jo . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Evaluar funciones lineales a trozos . . . . . . . . . . . . . . . . . . . . Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 6 7 9 9 11 12 15 17 17 18 18 19 20 22 22 24 28 28 29 31

Entorno de trabajo

El entorno operativo de Matlab se compone de una serie de ventanas que presentamos a continuacin. Aunque el reparto de estas ventanas en la pantalla puede cambiarse, generalmente aparecen en la misma posicin.1

Figura 1: Entorno de trabajo Matlab. Las ventanas que forman parte del entorno de trabajo de Matlab son: 1. Command Window: se utiliza para introducir rdenes directamente por el usuario (seguidas de enter). Los resultados de las rdenes introducidas se muestran en esta misma pantalla. Cuando las rdenes se envan desde un programa previamente escrito, que en Matlab recibe el nombre de M-le, los resultados tambin 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
La posicin 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 despus 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 sesin de Matlab. La ventana workspace nos proporciona informacin sobre el nombre, dimensiones, tamao 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 modicar sus valores. 4. Current directory: las operaciones de Matlab utilizan el directorio seleccionado en current directory (a travs del botn 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 chero en el que estemos trabajando.

Denicin 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; 3 (1)

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) ; crea una nueva variable b cuyo valor es el exponencial de la variable a. El punto y coma ; despus 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. (2)

Vectores y matrices

De la misma forma que se denen variables escalares pueden denirse vectores (arrays de 1 dimensin) y matrices (arrays de 2 dimensiones). Por ejemplo, para denir la matriz 1 2 M = 3 4 5 6 4

(3)

basta con teclear M = [1, 2; 3, 4; 5, 6]; (4)

donde los trminos de una misma la aparecen separados por comas, y el punto y coma hace de separador entre las. Para trasponer M, basta teclear M0 Existen una serie de funciones que denen matrices estndar como: Matriz de unos de dimensin N1 xN2 : Matriz de ceros de dimensin N1 xN2 : Matriz identidad de dimensin N1 xN1 : ones(N1 , N2 ) ; zeros(N1 , N2 ) ; eye(N1 ) ; (5)

linspace(primer elemento, ltimo elemento, nmero de elementos igualmente espaciados) . Por ejemplo: linspace (0, 1, 5) ; crea el vector la
h i

(6)

0 0.25 0.5 0.75 1

(7)

La orden M = [primer elemento : paso : ltimo elemento] ; (8) crea un vector la 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 la M=

1 1.5 2 2.5 3

(9)

3.1

Acceso a elementos de una matriz


Imaginemos que hemos denido la matriz 1 2 M = 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 nal de la orden el valor obtenido aparecer en pantalla. Tambin podemos asignar dicho valor a un escalar: a = M (i, j) ; Para acceder a la la i de la matriz M tecleamos M (i, :) Por ejemplo: M (1, :) nos devolver el vector la
h i

(12)

(13)

(14)

1 2

(15)

Para acceder a la columna j de la matriz M tecleamos M (:, j) Tambin podemos acceder a un rango determinado de la matriz. La orden M (i1 : i2 , j1 : j2 ) (17) (16)

nos permite acceder a los elementos de la matriz M situados desde la la i1 a la la i2 y desde la columna j1 hasta la columna j2 . Por ejemplo M (2 : 3, 1 : 1) nos devolvera el vector columna2 3 5 (19) (18)

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; A + B; A B; Inversa de la matriz A : inv (A) ; Determinante de la matriz A : det (A) ; Traspuesta de la matriz A :
2

(20) (21) (22)

(23)

(24)

A0 ;

(25)

Cuando el rango al que deseemos acceder vaya hasta la ltima la columna podemos utilizar end en lugar del nmero de la la columna. La orden anterior podra escribirse como M (2 : end, 1 : 1) ;

Valores y vectores propios de los elementos de la matriz A : eig (A) ; Descomposicin de cholesky de la matriz A : chol (A) ; Elementos de la diagonal de la matriz A : diag (A) ; Suma y producto, por columnas, de los elementos de la matriz A :3 sum (A) ; prod (A) ; (29) (30) (28) (27) (26)

Matlab tambin permite operar elemento a elemento entre matrices. Imaginemos las matrices A = B =
" "

1 3 5 7 2 4 6 8

# #

(31) (32)

Matlab nos permite multiplicar, dividir, ... dichas matrices elemento a elemento. Para ello debemos poner un punto delate del operador que deseemos utilizar: Operacin Orden Resultado # 2 12 30 56 " # 0.5000 0.7500 0.8333 0.8750 # " 1 81 15625 5764801
"

Multiplicacin A. B Divisin Potencia


3

A./B A.B

(33)

Para obtener la suma y producto por las utilizaramos las mismas funciones pero sobre la matriz transpuesta: sum (A0 ) ; prod (A0 ) ;

Concatenacin de matrices A= La orden

"

2 3

(34)

B = [A, A + 3; A 2, A 1] ; genera la matriz


(35)

B=

2 3 4 6

5 6 1 2

(36)

3.3

Arrays multidimensionales

Matlab permite crear arrays de ms 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 dimensin 2x2.

M-le: escritura de programas

M-les, tambin 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-le que posteriormente se ejecuta. Para abrir un M-le: File New M-file. Los M-les se guardan (File Save) en el directorio en el que estemos trabajando (jado en la ventana current directory) con extensin .m. El comando save guarda las variables que se encuentren en el workspace con extensin .mat. Tanto los M-les como los cheros 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-le, cualquier texto que aparezca tras el signo % es interpretado por Matlab como un comentario y por lo tanto no se ejecuta. Es recomendable introducir comentarios en los programas M-le para, cuando se revisan los cdigos, ayudar al lector a saber que es lo que el programa est haciendo. Los comentarios aparecen en color verde en los M-le. Una prctica bastante til al comenzar un M-le 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-le:
% Ejemplo de M-le 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 = A0 ;
% Mostramos B en la pantalla del command window

B
% % % % Guardamos las dos matrices creadas A y B en un chero llamodo matrices_A_B. El chero tendr extensin .mat y se guarda en el directorio en el que nos encontremos (jado en la ventana current directory).

(38)

save matrices_A_B;
% Borramos de la memoria de Matlab las variables del workspace

clear
% Cargamos de el chero matrices_A_B previamente creado

load(matrices_A_B.mat);
% Mostramos A en la pantalla del command window

A
% Fin del M-le

Para ejecutar un M-le hay dos opciones: pulsamos F5 o el botn Run, ver Figura
En el caso de que el M-le que esteis escribiendo vaya a hacer uso de variables previamente creadas, simplemente no pongais la orden clear al principio del M-le.
4

10

(6), situado en la botonera superior del M-le.

Figura 6: Boton Run.

Utilizacin de la ayuda

Una de las principales ventajas de Matlab con respecto a similares programas consiste en la gran cantidad de informacin que el usuario puede obtener del funcionamiento del programa y de los comandos a travs 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 funcin o cual es el comando para realizar una determinada operacin puede resolverse utilizando la ayuda. El men Help contiene, adems de dos aplicaciones para introducir al usuario el entorno de trabajo (Help Using the Desktop and Help Using the Command Window), una pestaa llamada Matlab Help. Matlab Help permite al usuario buscar informacin de tres formas diferentes: 1. La pestaa Contents permite ver un ndice con todas las aplicaciones y Toolboxes 5 de Matlab. 2. La pestaa Index permite buscar, por orden alfabtico, en el ndice de materias de Matlab, informacin sobre palabras clave (comandos, ordenes, ... ). Por
Matlab dispone de Toolboxes, que comercializa de forma separada al programa, sobre gran cantidad de materias: optimizacin, nancial toolbox, nancial derivatives toolbox, partial dierential equations toolbox, statistics toolbox, GARCH toolbox, ... Cada toolbox contiene funciones predenidas de la materia que trata. Documentacin (en PDF) de cada toolbox est disponible en la pestaa de la toolbox y en www.mathworks.com. Las Toolboxes han dado a Matlab gran parte del valor aadido y del prestigio del que ahora disfruta.
5

11

Figura 7: Matlab Help. ejemplo, si escribimos plot obtenemos informacin sobre dicho comando, que se utiliza para hacer grcos. 3. La pestaa Search busca en toda la documentacin de ayuda de Matlab las palabras introducidas.

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 ejecucin de la funcin. A modo de ejemplo, analizamos la funcin regress que permite realizar regresin lineal. Si tecleamos regress en la pestaa Index de ayuda de Matlab obtenemos informacin sobre como utilizar la funcin. A continuacin presentamos el resultado de dicha bsqueda: 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 R2 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 funcin regress tiene dos variables de entrada obligatorias: un vector columna y de datos sobre la variable dependiente, de dimensin nx1, y una matriz X, de dimensin nxp, que contiene (por columnas) p variables independientes. Si no incluimos ningna otra variable de entrada, la funcin regress devuelve (en una de las variables de salida) un intervalo de conanza al 95% de los parmetros estimados. Si, por el contrario, incluimos una tercera variable de entrada alpha, el intervalo de conanza es del (1 alpha) %. Este ejemplo ilustra el hecho de que muchas funciones de Matlab tienen un nmero 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 parmetros 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 conanza para los parmetros estimados (bint), los errores de la regresin (r), el R2 de la regresin, ... Al igual que con los variables de entrada, las funciones de Matlab pueden generar un nmero variable de variables de salida, dependiendo de como se escriba la orden. Para utilizar de forma eciente dichas funciones el men de ayuda de Matlab nos proporciona informacin sobre dichas funciones, sus variables de entrada y variables de salida.

Funciones propias

En ocasiones nos interesa utilizar funciones que Matlab no tiene predenidas. Por ejemplo, supongamos que necesitamos evaluar, en repetidas ocasiones la siguiente 15

funcin:

x+y f (x, y) = x + y + . 2
2 3

(41)

Deniremos una funcin propia en un M-le nuevo que debe acompaarse al directorio de trabajo (current directory) en el que estemos trabajando cada vez que evaluemos la funcin. Por ejemplo, si en un M-le necesitamos evaluar dicha funcin, el M-le donde hemos denido la funcin debe estar en el mismo directorio de trabajo que el M-le donde la estamos utilizando. La siguiente gura contiene el cdigo que el M-le que dene la funcin f (x, y) debe contener:
% Funcin propia 1

function resultado = f(x, y)


% variables de entrada: x e y % variable de salida: resultado % operaciones

(42)

resultado = (x2) + (y3) +sqrt ((x + y) /2) ; donde la funcin sqrt es una funcin que Matlab incorpora para calcular races cuadradas. La palabra function precede a la forma de la funcin: resultado = f (x, y) , (43)

donde x e y son los variables de entrada y resultado es la variable que la funcin devuelve como resultado. La ltima lnea del M-le calcula el valor de la variable resultado utilizando las variables de entrada. Una vez est denida la funcin, si tecleamos en el command window (o escribimos en un M-le): a = f (c, d) ; (44)

la funcin asignar a la variable a el valor de la funcin f () evaluada en el punto (c, d). Como puede observarse, no es necesario, al evaluar una funcin, usar las variables con los mismos nombres que aparecen en la denicin de la funcin. 16

Pueden crearse funciones propias con un nmero variable de variables de entrada y variables de salida. La utilizacin de funciones propias con varias variables de salida cumple en Matlab la misma funcin que las denominadas subrutinas cumplen en otros programas como Fortran. Informacin acerca de estas opciones puede encontrarse en el men ayuda de Matlab, tecleando passing variable numbers of arguments en la pestaa Search. El uso de funciones propias es la manera ms limpia de programar. Otra de las ventajas de escribir funciones propias en M-les separados del programa principal es la posibilidad de utilizar dichas funciones en otros programas.

Bucles

La mejor forma de saber cmo funciona un bucle y cual es su sintaxis es utilizar la ayuda de Matlab. En esta seccin presentamos algunos de los ms utilizados.

8.1

Condicin if

Forma general:

if (condicin 1) rdenes a ejecutar si condicin 1 se satisface elseif (condicin 2) rdenes a ejecutar si condicin 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

Para evaluar las condiciones se utilizan operadores lgicos como: Operador > >= < <= == ~= & | ~ Descripcin 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 : n rdenes a ejecutar end Ejemplo: M-le funcin factorial function h = f un_f actorial(n) if (n == 0) h = 1; else h = 1; for i=1:n h = h i; end end % nal del if

(48)

(49)

8.3

Bucle while

Forma general: while (condicin) rdenes a ejecutar end 18

(50)

Ejemplo: bucle while que encuentra el menor nmero entero n cuyo factorial es mayor que 1000000, utilizando la funcin f un_f actorial() denida previamente en un M-le. n = 1; while (f un_f actorial(n) < 1000000) n = n + 1; end (51)

8.4

switch

switch es til cuando tenemos varios if anidados. El comando switch evala una variable, y en funcin 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 lnea del cdigo. 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 especicados en los distintos case se ejecutan las rdenes que aparecen en el apartado otherwise. Forma general: 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 especicados en los distintos case end Comando break El comando break termina la ejecucin de un bucle.

(52)

19

Interrupcin de programas en marcha Para interrumpir un programa mientras se est ejecutando seleccionamos el command window y pulsamos Control + C.

Otras funciones

A continuacin 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 descripcin 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 nal del programa y subir el volumen de los altavoces. tic y toc tic pone el cronmetro de Matlab en marcha, y toc lo para, imprimiendo por pantalla el tiempo transcurrido desde que tic se ejecut. til para controlar tiempos de ejecucin. fprintf(escribir texto) Imprime escribir texto en la pantalla. size(matriz) Devuelve las dimensiones de una matriz. rand(n, m) Genera una matriz de dimensin nxm de nmeros aleatorios a partir de una distribucin normal [0, 1] .

20

randn(n, m) Similar a rand pero utilizando una normal estndar. 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 desviacin tpica de los elementos de un vector o matriz. max: calcula el mximo de los elementos de un vector o matriz. min: calcula el mnimo de los elementos de un vector o matriz. Funciones de densidad, distribucin e inversa de la funcin de distribucin Las siguientes funciones calculan, para la distribucin de probabilidad normal estndar, la densidad, funcin de distribucin e inversa de la funcin de distribucin de un punto x: normpdf(x) normcdf(x) norminf(x) Similares funciones para otras distribuciones de probabilidad tambin estn disponibles.

21

10

Grcos

Otro de los puntos fuertes de Matlab son los grcos, tanto en dos como en tres dimensiones. La funcin plot se utiliza para hacer grcos en dos dimensiones y las funciones plot3, mesh, surface, contour, ... se utilizan para hacer grcos en tres dimensiones. El libro Hanselman y Littleeld (2001), citado en la bibliografa, tiene varios captulos muy buenos sobre la realizacin de grcos.

11

Debug: depurar programas

Cometer errores a la hora de escribir cdigo es inevitable. Por ello, Matlab, al igual que otros programas similares, incluye una aplicacin llamada debugger destinada a ayudar al usuario a depurar sus cdigos. El debugger se aplica sobre los programas escritos en Matlab, esto es, sobre los M-les donde se ha escrito cualquier tipo de cdigo. En el caso de que exista un error en el cdigo, al ejecutar el M-le, Matlab detiene su ejecucin en el punto donde se encuentra el error e imprime en la pantalla del command window el tipo de error y la lnea del M-le donde se encuentra, de forma que podemos ir a dicha lnea de cdigo en el M-le y corregir el error. Por ejemplo, en el ejemplo de M-le que utilizamos en (38), imaginemos que, en la tercera lnea de cdigo, en lugar de escribir el comando clear olvidamos la letra r y escribimos solo clea. Al ejecutar el M-le nos aparecera el siguiente error: ??? Undened function or variable clea. On line 4 ==> clea (53)

En cada lnea del M-le, situado a la derecha del mismo (justo despus de los nmeros que indican el nmero de lnea), aparece una barrita horizontal. Haciendo click sobre dicha barra jamos un breakpoint, que queda marcado por un punto rojo sobre la barra: Al jar un breakpoint y ejecutar el programa (Run) se ejecutan todas las rdenes anteriores al breakpoint, detenindose la ejecucin del programa en el break22

Figura 8: Breakpoint. point. Cuando eso ocurre, una echa verde se sita al principio de la lnea donde est situado el breakpoint, como puede verse en la Figura (8). La echa verde indica la lnea del programa hasta la cual se han ejecutado las rdenes. Al jar un breakpoint y ejecutar el programa, su ejecucin se para en el breakpoint y, en ese momento, utilizando el workspace o el command window, podemos ver los valores de cada variable o introducir rdenes en el command window. Esta aplicacin es muy til para comprobar que rdenes situadas dentro del cdigo generan los resultados deseados. Una vez la ejecucin se detiene en el breakpoint y aparece la echa verde al principio de la lnea tenemos varias opciones: 1. Detener la ejecucin, 2. poner de nuevo el programa a ejecutarse desde el breakpoint hasta el nal del M-le (o hasta el siguiente breakpoint), o 3. ir ejecutando orden por orden a partir del breakpoint. La Figura (9) muestra los botones del M-le 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-le, que borra todos los breakpoints que haya en el M-le. Podemos jar tantos breakpoints como queramos. 23

Ejecutar siguiente orden

Continuar ejecucin hasta el final del Mfile o hasta el siguiente breakpoint

Borrar breakpoints

Detener ejecucin

Figura 9: Botones para depurar un programa.

12

Tipos de variables

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, carcter, ...): cuando una nueva variable se crea Matlab le asigna el tipo que le corresponda. Por ejemplo: Si escribimos a = 2.4; Matlab considera la variable como real. Si escribimos a = 2 + 3i; Matlab considera la variable como compleja. Si escribimos a = texto; 24 (56) (55) (54)

Matlab considera la variable de tipo texto o carcter (char). Aunque esta caracterstica 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 nmero (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-le en el que se crean. Por ejemplo, en la funcin f (x, y) denida en la seccin de funciones propias (42), las variables x, y y resultado solo pueden utilizarse dentro del M-le que dene la funcin f (x, y). Una vez que la funcin 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-les donde se quiera utilizar. Por ejemplo, consideremos la denicin alternativa de la funcin f (x, y) que fue denida en (42):
% Funcin propia 1 con variable global

function resultado = f(x, y)


% variables de entrada: x e y % variable de salida: resultado

(57) global e;
% operaciones % declaracin de la variable global e

e = sqrt ((x + y) /2) ; resultado = (x2) + (y3) +e; Cada vez que se evala la funcin f (), la variable e toma el valor
q
x+y , 2

donde x

e y son las variables de entrada introducidos por el usuario. Para denir una variable global en un M-le o en el command window tecleamos global e; 25 (58)

A continuacin nos situamos en el command window y denimos la variable e como global, esto es >> global e; Despus evaluamos la funcin f (x, y), por ejemplo >> f (1, 1) (60) (59)

lo que nos da un resultado de 3. Al mismo tiempo que la funcin f (x, y) se ha ejecutado, hemos asignado el valor
q
1+1 , 2

a la variable global e. Como la hemos

declarado global en el command window, ahora podemos acceder a ella. Si tecleamos en el command window >> e obtenemos su valor en pantalla: e=1 (62) (61)

En lugar de denir la variable global e en el command window lo podramos haber hecho en cualquier M-le que estemos utilizando. En el ejemplo que acabamos de ver, la variable global toma su valor cuando la funcin propia se ejecuta para poder ser utilizado fuera de dicha funcin propia, es decir, en el programa principal. En este caso hemos utilizado la variable global como variable de salida. Tambin podemos utilizar la variable global como variable de entrada. Podemos denir en el programa principal (o command window) una variable como global y utilizarla en una funcin propia sin necesidad de pasarla como variable de entrada de la funcin propia. Imaginemos que denimos la funcin (42) de la siguiente forma: x+y 2 3 f (x, y) = x + y + + e, (63) 2

26

donde e ser una variable global. El M-le que dene dicha funcin sera:
% Funcin propia 1 con variable global

function resultado = f(x, y)


% variables de entrada: x e y % variable de salida: resultado

(64)

global e;
% operaciones

% declaracin de la variable global e

resultado = (x2) + (y3) + 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 funcin f () denida en (64) la variable e tomar valor 2 y el resultado se ver modicado en consecuencia. Ntese que, aunque la variable global e se utiliza en la ejecucin de la funcin propia f (), no es una variable de entrada de dicha funcin.

27

13
13.1

Ejercicios
Encontrar un punto jo

El objetivo es encontrar un punto jo x para la funcin f (x) = a + b x donde x y a son matrices de 5x5 y b es un nmero real. Consideramos que hemos llegado al punto jo cuando la distancia entre dos iteraciones x (n) y x (n + 1) sea menor que un nmero real arbitrariamente pequeo llamado distance. 1. Dar valores a los parmetros b y distance. Tomamos b = 0.95 y distance = 106 . 2. Abrir los cheros 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 funcin f (x) como una rutina (funcin propia) separada. La matriz a y el nmero real b habrn sido denidos como variables globales y por tanto no sern dados como variables locales (de entrada) en esta rutina. 4. Escribir una rutina para la funcin de distancia. Dicha funcin toma como variables de entrada dos matrices de 5x5 y entrega un nmero real no negativo. Se puede tomar, por ejemplo, la distancia mxima entre los elementos de las dos matrices. 5. Hacer un bucle while para evaluar la funcin 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 nmero de iteracin, y guardar las iteraciones y las distancias en dos vectores. 6. Condicin de salida: cuando la distancia entre dos repeticiones sea menor que distance, salir del bucle. 7. Guardar en un chero la matriz con el punto jo x . 8. Representar en un grco la evolucin del criterio distancia para cada iteracin. 28

13.2

Evaluar funciones lineales a trozos

El objetivo de este ejercicio es evaluar una funcin lineal a trozos en un punto determinado. Se trata de una funcin que se comporta de forma lineal en intervalos previamente determinados. Con este tipo de funciones se pueden obtener aproximaciones bastante exactas para cualquier funcin ms 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 funcin. El vector gx contiene el valor de la funcin en cada uno de los puntos que se encuentran en el vector x. Con los datos de estos dos vectores tenemos la informacin suciente para evaluar la funcin en cualquier punto. Por ejemplo, la Figura (10) muestra que para evaluar una funcin 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 interpolacin lineal, se obtiene el resultado buscado. g (z) = gx (i) + gx (i + 1) gx (i) (z x (i)) . x (i + 1) x (i) (66)

En el ejemplo, los vectores x y gx se encuentran guardados dentro de los cheros 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-le que dene la funcin g ().

29

g (x ) g ( x (i + 1 )) g (z ) ? g ( x (i ))

x (i )

x (i + 1 )

Figura 10: Funcin a trozos. .

30

Referencias
[1] Getting Started with Matlab, The MathWorks, www.mathworks.com. [2] Hanselman, D., y Littleeld, 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 Littleeld (2001), disponible en la biblioteca: 1. Getting started. 2. Basic features. 3. The Matlab desktop. 4. Script M-les. 5. Arrays and array operations. 6. Multidimensional arrays. 7. Cell arrays and structures. 8. Character strings. 9. Relational and logical operators. 10. Control ow: for loops, while loops, if loops, switch loops 11. Function M-les. 12. M-le debugging and proling. 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 dierentiation. 24. Dierential equations. 25. Two dimensional graphics. 26. Three dimensional graphics. 27. Using color and light. 28. ...

32

También podría gustarte