introducción a matlab - um

34
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.

Upload: others

Post on 16-Oct-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a Matlab - UM

Introducción a Matlab∗

Enero 2005

Resumen

Este documento presenta una introducción a Matlab dirigida a usuarios queno han trabajado nunca con Matlab. Las principales características de Matlabasí como la creación de programas son explicadas. El documento trata deintroducir al usuario en los distintos temas explicados sin profundizar en ellos.El documento incluye una lista de referencias que el usuario puede utilizar paraampliar sus conocimientos sobre el programa.

∗Escrito por Abel Elizalde para la asignatura Evaluación de políticas públicas (CEMFI). Variosejemplos utilizados proceden de una versión anterior escrita por Javier Mencia.

Page 2: Introducción a Matlab - UM

Índice General

1 Entorno de trabajo 1

2 Definición de variables 3

3 Vectores y matrices 43.1 Acceso a elementos de una matriz . . . . . . . . . . . . . . . . . . . . 63.2 Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . 73.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 178.1 Condición if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178.2 Bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188.3 Bucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188.4 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

9 Otras funciones 20

10 Gráficos 22

11 Debug: depurar programas 22

12 Tipos de variables 24

13 Ejercicios 2813.1 Encontrar un punto fijo . . . . . . . . . . . . . . . . . . . . . . . . . . 2813.2 Evaluar funciones lineales a trozos . . . . . . . . . . . . . . . . . . . . 29

Referencias 31

Page 3: Introducción a Matlab - UM

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.

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 mues-

tran 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 ellas1La posición por defecto de las ventanas puede reestablecerse utilizando: View → Desktop

layout → Default.

1

Page 4: Introducción a Matlab - UM

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

Page 5: Introducción a Matlab - UM

(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 referen-

cia. 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

Page 6: Introducción a Matlab - UM

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 23 45 6

(3)

4

Page 7: Introducción a Matlab - UM

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 N1xN2 : ones(N1, N2) ;

• Matriz de ceros de dimensión N1xN2 : zeros(N1, N2) ;

• Matriz identidad de dimensión N1xN1 : eye(N1) ;

• linspace(primer elemento, último elemento, número de elementos igualmente espaciados) .

Por ejemplo:

linspace (0, 1, 5) ; (6)

crea el vector fila h0 0.25 0.5 0.75 1

i(7)

• La ordenM = [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 =h1 1.5 2 2.5 3

i(9)

5

Page 8: Introducción a Matlab - UM

3.1 Acceso a elementos de una matriz

Imaginemos que hemos definido la matriz

M =

1 23 45 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 h1 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 (i1 : i2, j1 : j2) (17)

6

Page 9: Introducción a Matlab - UM

nos permite acceder a los elementos de la matriz M situados desde la fila i1 a

la fila i2 y desde la columna j1 hasta la columna j2. Por ejemplo

M (2 : 3, 1 : 1) (18)

nos devolvería el vector columna2

35

(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 dimensionesadecuadas):

A ∗B; (20)

A+B; (21)

A−B; (22)

• Inversa de la matriz A :inv (A) ; (23)

• Determinante de la matriz A :det (A) ; (24)

• Traspuesta de la matriz A :A0; (25)

2Cuando el rango al que deseemos acceder vaya hasta la última fila ó columna podemos utilizarend en lugar del número de la fila ó columna. La orden anterior podría escribirse como

M (2 : end, 1 : 1) ;

7

Page 10: Introducción a Matlab - UM

• Valores y vectores propios de los elementos de la matriz A :

eig (A) ; (26)

• Descomposición de cholesky de la matriz A :

chol (A) ; (27)

• Elementos de la diagonal de la matriz A :

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. Imag-inemos las matrices

A =

"1 35 7

#(31)

B =

"2 46 8

#(32)

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

Multiplicación A. ∗B"2 1230 56

#

División A./B

"0.5000 0.75000.8333 0.8750

#

Potencia A.ˆB

"1 81

15625 5764801

#(33)

3Para obtener la suma y producto por filas utilizaríamos las mismas funciones pero sobre lamatriz transpuesta:

sum (A0) ;prod (A0) ;

8

Page 11: Introducción a Matlab - UM

• Concatenación de matricesA =

"23

#(34)

La orden

B = [A,A+ 3;A ∗ 2, A− 1] ; (35)

genera la matriz

B =

2 53 64 16 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 posterior-

mente 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 que posteriormente se ejecuta.

Para abrir un M-file: File → New → M-file. Los M-files se guardan (File

→ Save) en el directorio en el que estemos trabajando (fijado en la ventana current

directory) con extensión .m. El comando save guarda las variables que se encuentren

en el workspace con extensión .mat. Tanto los M-files como los ficheros de datos,

creados previamente, se abren desde la ventana current directory haciendo doble click

sobre ellos.

9

Page 12: Introducción a Matlab - UM

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 comentario y por lo tanto no se ejecuta. Es

recomendable introducir comentarios en los programasM-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:

% Ejemplo de M-fileclc % para limpiar los resultados de command windowclear % para borrar las variables del workspace

% Creamos una matriz AA = [1,2;3,4];

% Creamos otra matriz B que sea la traspuesta de AB = A0;

% Mostramos B en la pantalla del command windowB

% 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 workspaceclear

% Cargamos de el fichero matrices_A_B previamente creadoload(‘matrices_A_B.mat’);

% Mostramos A en la pantalla del command windowA

% Fin del M-file

(38)

Para ejecutar unM-file hay dos opciones: pulsamos F5 o el botón Run, ver Figura4En 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

Page 13: Introducción a Matlab - UM

(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 Tool-

boxes5 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, ... ). Por5Matlab dispone de Toolboxes, que comercializa de forma separada al programa, sobre gran can-

tidad de materias: optimización, financial toolbox, financial derivatives toolbox, partial differentialequations toolbox, statistics toolbox, GARCH toolbox, ... Cada toolbox contiene funciones predefinidasde la materia que trata. Documentación (en PDF) de cada toolbox está disponible en la pestaña dela toolbox y en www.mathworks.com. Las Toolboxes han dado a Matlab gran parte del valor añadidoy del prestigio del que ahora disfruta.

11

Page 14: Introducción a Matlab - UM

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

Page 15: Introducción a Matlab - UM

Statistics Toolbox

regress

Multiple linear regression

Syntaxb = regress(y,X)

[b,bint,r,rint,stats] = regress(y,X)

[b,bint,r,rint,stats] = regress(y,X,alpha)

Descriptionb = 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% confidenceinterval for in the p-by-2 vector bint. The residuals are returned in r and a 95% confidence intervalfor each residual is returned in the n-by-2 vector rint. The vector stats contains the R2 statisticalong with the F and p values for the regression.

[b,bint,r,rint,stats] = regress(y,X,alpha) gives 100(1-alpha)% confidenceintervals for bint and rint. For example, alpha = 0.2 gives 80% confidence intervals.

ExamplesSuppose the true model is

where I is the identity matrix.

Page 16: Introducción a Matlab - UM

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 inLinear Regression. Statistical Science, 1986. pp. 379- 416.

refline regstats

Page 17: Introducción a Matlab - UM

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, de dimensión nxp, 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 elhecho 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), el R2 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

Page 18: Introducción a Matlab - UM

función:

f (x, y) = x2 + y3 +

√x+ y

2. (41)

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 unM-file necesitamos evaluar dicha función,

elM-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 1function resultado = f(x,y)

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

% operacionesresultado =(xˆ2)+ (yˆ3)+sqrt ((x+ y) /2) ;

(42)

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

Page 19: Introducción a Matlab - UM

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 cumplen en otros

programas como Fortran. Información acerca de estas opciones puede encontrarse en

el menú ayuda de Matlab, tecleando “passing variable numbers of arguments” en la

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;elsec = b

end

(46)

17

Page 20: Introducción a Matlab - UM

Para evaluar las condiciones se utilizan operadores lógicos como:

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(48)

Ejemplo: M-file función factorial

function h = fun_factorial(n)if (n == 0)

h = 1;elseh = 1;for i=1:nh = h ∗ i;

endend % final del if

(49)

8.3 Bucle while

Forma general:

while (condición)órdenes a ejecutar

end(50)

18

Page 21: Introducción a Matlab - UM

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 enun M-file.

n = 1;while (fun_factorial(n) < 1000000)n = n+ 1;

end

(51)

8.4 switch

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:

switch acase 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 ningunode los valores especificados en los distintos case

end

(52)

Comando break

El comando break termina la ejecución de un bucle.

19

Page 22: Introducción a Matlab - UM

Interrupción de programas en marcha

Para interrumpir un programa mientras se está ejecutando seleccionamos el com-

mand window y pulsamos Control + C.

9 Otras funciones

A continuación presentamos algunas funciones, a modo de ejemplo, que pueden resul-

tar ú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

Page 23: Introducción a Matlab - UM

• 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 distribu-

ción

Las siguientes funciones calculan, para la distribución de probabilidad normal es-

tá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

Page 24: Introducción a Matlab - UM

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 elM-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. Al ejecutar el M-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) se ejecutan todas las ór-

denes anteriores al breakpoint, deteniéndose la ejecución del programa en el break-

22

Page 25: Introducción a Matlab - UM

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 break-

point 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

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 y aparece la flecha verde al prin-

cipio de la línea tenemos varias opciones:

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

Page 26: Introducción a Matlab - UM

Borrar breakpoints

Detener ejecución

Ejecutar siguiente orden

Continuar ejecución hasta el final del M-file o hasta el siguiente breakpoint

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, carácter, ...): cuando una nueva variable se crea

Matlab le asigna el tipo que le corresponda. Por ejemplo:

• Si escribimosa = 2.4; (54)

Matlab considera la variable como real.

• Si escribimosa = 2 + 3i; (55)

Matlab considera la variable como compleja.

• Si escribimosa = ‘texto’; (56)

24

Page 27: Introducción a Matlab - UM

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 globalfunction resultado = f(x,y)

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

global e; % declaración de la variable global e

% operacionese = sqrt ((x+ y) /2) ;resultado =(xˆ2)+ (yˆ3)+e;

(57)

Cada vez que se evalúa la función f (·), la variable e toma el valorqx+y2, donde x

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

Page 28: Introducción a Matlab - UM

A continuación nos situamos en el command window y definimos la variable e

como global, esto es

>> global e; (59)

Después evaluamos la función f (x, y), por ejemplo

>> f (1, 1) (60)

lo que nos da un resultado de 3. Al mismo tiempo que la función f (x, y) se ha

ejecutado, hemos asignado el valorq1+12, 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 (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:

f (x, y) = x2 + y3 +

√x+ y

2+ e, (63)

26

Page 29: Introducción a Matlab - UM

donde e será una variable global. El M-file que define dicha función sería:

% Función propia 1 con variable globalfunction resultado = f(x,y)

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

global e; % declaración de la variable global e

% operacionesresultado =(xˆ2)+ (yˆ3) + sqrt ((x+ y) /2)+e;

(64)

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á valor2 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 deentrada de dicha función.

27

Page 30: Introducción a Matlab - UM

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 xy 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

Page 31: Introducción a Matlab - UM

13.2 Evaluar funciones lineales a trozos

El objetivo de este ejercicio es evaluar una función lineal a trozos en un punto de-

terminado. Se trata de una función que se comporta de forma lineal en intervalos

previamente determinados. Con este tipo de funciones se pueden obtener aproxima-

ciones 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 puntosen 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 seencuentran 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

Page 32: Introducción a Matlab - UM

( )ix z ( )1+ix

( )xg

( )( )1+ixg

( )( )ixg

( )?¿ zg

Figura 10: Función a trozos.

.

30

Page 33: Introducción a Matlab - UM

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

Page 34: Introducción a Matlab - UM

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