Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion Matlab PDF
Introduccion Matlab PDF
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 Acceso a elementos de una matriz . . . . . . . . . . . . . . . . . . . . 6
3.2 Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Arrays multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . 9
5 Utilización de la ayuda 11
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
12 Tipos de variables 24
13 Ejercicios 28
13.1 Encontrar un punto fijo . . . . . . . . . . . . . . . . . . . . . . . . . . 28
13.2 Evaluar funciones lineales a trozos . . . . . . . . . . . . . . . . . . . . 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
Las ventanas que forman parte del entorno de trabajo de Matlab son:
1
Figura 2: Command window.
2
(a) Introducir en command window el comando clear seguido del nombre de
la variable.
Figura 4: Workspace.
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
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
1 2
M =
3 4 (3)
5 6
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
M0 (5)
Por ejemplo:
linspace (0, 1, 5) ; (6)
• 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] ;
5
3.1 Acceso a elementos de una matriz
Dicha matriz aparecerá en el workspace y puede ser utilizada hasta que se borre.
M (i, j) (11)
a = M (i, j) ; (12)
M (i, :) (13)
Por ejemplo:
M (1, :) (14)
M (:, j) (16)
M (i1 : i2 , j1 : j2 ) (17)
6
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)
3
(19)
5
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)
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
• Valores y vectores propios de los elementos de la matriz A :
8
• Concatenación de matrices " #
2
A= (34)
3
La orden
B = [A, A + 3; A ∗ 2, A − 1] ; (35)
genera la matriz
2 5
3 6
B=
(36)
4 1
6 2
Matlab permite crear arrays de más de dos dimensiones. Por ejemplo, la orden
crea un array de tres dimensiones: un cubo formado por tres matrices de dimensión
2x2.
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 comentario y por lo tanto no se ejecuta. 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:
% Ejemplo de M-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 = A0 ;
% 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 (38)
% 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
% Fin del M-file
Para ejecutar un M-file hay dos opciones: pulsamos F5 o el botón Run, ver Figura
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.
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-
boxes 5 de Matlab.
11
Figura 7: Matlab Help.
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:
Examples
Suppose the true model is
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, 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 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
solamente obtenemos una variable de salida b con los parámetros estimados. Por el
contrario, si escribimos
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: √
2 x+y
3
f (x, y) = x + y + . (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
(42)
% variable de salida: resultado
% 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:
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 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;
else (46)
c=b
end
17
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
(47)
== Igual que
~= Distinto que
& Si
| O
~ No
Forma general:
Forma general:
while (condición)
órdenes a ejecutar (50)
end
18
Ejemplo: bucle while que encuentra el menor número entero n cuyo factorial es
mayor que 1000000, utilizando la función f un_f actorial(·) definida previamente en
un M-file.
n = 1;
while (f un_f actorial(n) < 1000000)
(51)
n = n + 1;
end
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 a
case 1
órdenes a ejecutar si a = 1
case 2
órdenes a ejecutar si a = 2
case 3
(52)
órdenes a ejecutar si a = 3
...
otherwise
órdenes a ejecutar si a no toma ninguno
de los valores especificados en los distintos case
end
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 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
• fprintf(‘escribir texto’)
• size(matriz)
• rand(n, m)
20
• randn(n, m)
• sort(vector o matriz)
Otras funciones
• normpdf(x)
• normcdf(x)
• norminf(x)
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.
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
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,
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 Continuar ejecución
siguiente orden hasta el final del M-
file o hasta el
siguiente breakpoint
Borrar Detener
breakpoints ejecución
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 escribimos
a = 2.4; (54)
• Si escribimos
a = 2 + 3i; (55)
• Si escribimos
a = ‘texto’; (56)
24
Matlab considera la variable de tipo texto o carácter (char).
% variables de entrada: x e y
% variable de salida: resultado
(57)
global e; % declaración de la variable global e
% operaciones
e = sqrt ((x + y) /2) ;
resultado = (xˆ2) + (yˆ3) +e;
q
x+y
Cada vez que se evalúa la función f (·), la variable e toma el valor 2
, 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
A continuación nos situamos en el command window y definimos la variable e
como global, esto es
>> global e; (59)
26
donde e será una variable global. El M-file que define dicha función sería:
% variables de entrada: x e y
% variable de salida: resultado
(64)
global e; % declaración de la variable global e
% operaciones
resultado = (xˆ2) + (yˆ3) + sqrt ((x + y) /2) +e;
>> global e;
(65)
>> e = 2;
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
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.
28
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 puntos
en los que cambia la pendiente de la función.
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.
gx (i + 1) − gx (i)
g (z) = gx (i) + (z − x (i)) . (66)
x (i + 1) − x (i)
29
g (x )
g ( x (i + 1 ))
¿ g (z ) ?
g ( x (i ))
x (i ) z x (i + 1 )
30
Referencias
[1] “Getting Started with Matlab”, The MathWorks, www.mathworks.com.
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.
4. Script M-files.
6. Multidimensional arrays.
8. Character strings.
10. Control flow: for loops, while loops, if loops, switch loops
31
15. Time computations.
19. Polynomials.
22. Optimization.
28. ...
32