Vous êtes sur la page 1sur 15

Notas de Matlab

Ramiro de Elejalde

y Mauricio Tejada

Contents
1 Preliminares 2
1.1 Presentacin: Men, ventanas y directorios . . . . . . . . . . . . . . . . . . . 2
1.2 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Variables: Tipos de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Matrices, operaciones y funciones bsicas de MATLAB 3
2.1 Crear una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Matrices tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.4 Secuencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.5 Referenciar elementos de una matriz y submatrices . . . . . . . . . . . . . . 4
2.6 Funciones escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.7 Funciones vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.8 Funciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Programar en MATLAB: M-les 5
3.1 M-les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Cuestiones bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

ILADES-Universidad Alberto Hurtado, Santiago, Chile; ramirode@gmail.com

ILADES-Universidad Alberto Hurtado, Santiago, Chile; matejada@uahurtado.cl


1
3.3 Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Generacin de nmeros aleatorios y funciones de probabilidad 7
5 Exportar e importar datos 7
6 Programar en MATLAB II: Funciones, condicionales y loops 8
6.1 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6.2 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.3 Condicionales y operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . 11
7 Grcos 12
8 Diferenciacin e integracin numrica 12
9 Solucin de ecuaciones lineales y no lineales 13
10 Optimizacin 13
1 Preliminares
1.1 Presentacin: Men, ventanas y directorios
clc, clear
cd(directorio)
addpath(directorio)
diary(directorio), diary on, diary off
1.2 Help
help
help comando
lookfor(palabra clave)
2
1.3 Variables: Tipos de variables
variable = expresin
clear variables
Tipo de variable: numrica, string,
global, local
who, whos
2 Matrices, operaciones y funciones bsicas de MATLAB
2.1 Crear una matriz
A = [1 2 3; 4 5 6; 7 8 9]
2.2 Operaciones matriciales
Suma +
Sustraccin -
Multiplicacin *
Potencia ^
Traspuesta
Divisin Izquierda \
Divisin Derecha /
Operaciones elemento por elemento: .*, .^, ./
2.3 Matrices tiles
eye(n), zeros(m,n), ones(m,n), diag(A), triu(A), tril(A), rand(m,n).
2.4 Secuencias
i:d:f, linspace(i,f,n), logspace(i,f,n).
3
2.5 Referenciar elementos de una matriz y submatrices
A = [1 2 3;4 5 6;7 8 9];
A(3,2); displays 8
A(2,1) + A(2,2) + A(3,2) the sum of row 2
A(:,2); read as all rows, column 2 and displays a column vector
Indexacin.
Extraccin en base a condicionales
Concatenar de matrices
2.6 Funciones escalares
sin, cos Seno, Coseno
exp, log, log10 Exponencial, logaritmo natural, logaritmo base 10
abs Valor absoluto
sign Signo (1 para positivo, -1 para negativo)
round, ceil, floor Redondea a entero
2.7 Funciones vectoriales
max, min Mximo, mnimo por columnas
sort, sortrows Ordenar vector, ordenar las de una matriz
sum, prod, cumsum, cumprod Suma, producto, suma acumulada, producto acumulado
std, mean, var, cov Media, desvo estandar, varianza, covarianza
length Tamao de un vector
4
2.8 Funciones matriciales
size tamao de la matriz
inv inversa (es mejor utilizar / )
eig eigenvalues y eigenvectors
chol descomposicion de Cholesky
dummyvar crea variables dummies en base a una variable categrica
det determinante
norm norma de una matriz
trace traza de la matriz
cond nmero condicin
rank rango
kron producto de kronecker
: convierte un matriz en un vector columna A(:)
3 Programar en MATLAB: M-les
3.1 M-les
M-les: Secuencia de comandos guardados en archivos con extensin .m (como do les de
Stata).
Funciones: Son M-les que tienen el nombre de la funcin y ejecutan tareas especcas.
Ayuda a que el cdigo sea modular. Si estn en el directorio de trabajo, se pueden utilizar
como comandos de MATLAB (built-in-functions).
File/New/Script Crea un nuevo M-le en el editor de MATLAB
File/Save as ... (elegir directorio de trabajo) Guarda M-le en el directorio de trabajo
F5 Ejecuta M-le que est activa
Comentarios:
1. Una vez que crean un M-le se abre el editor de MATLAB que es donde van a editar
el M-le.
5
2. El directorio de trabajo es donde van a guardar las funciones que van a utilizar en el
programa que estn trabajando.
3. Al ejecutar el M-le por primera vez, MATLAB le pregunta si desea cambiar la carpeta
actual donde est trabajando MATLAB a la carpeta donde se encuentra el M-le.
Acepte.
3.2 Cuestiones bsicas
clock, tic, toc Fecha y hora actual, tiempo entre tic y toc en segundos
... Indica a MATLAB que siga leyendo en la lnea siguiente
disp, fprintf Imprime variables en pantalla
save, load Guardar (leer) todas las variables de la memoria en archivo .mat
CTRL-C Parar proceso de MATLAB
3.3 Debugger
Un bug es un error en el cdigo. El debugger ayuda a localizar errores.
Debug/Set/Clear Breakpoint F12 Crea/Elimina un breakpoint
F10 Step: Ejecuta lnea por lnea del M-le
F11 Step in: Ejecuta lnea por lnea del M-le
y de las funciones que se llamen desde el M-le
Shift+F11 Step out: Si usamos step in y queremos salir de la
funcin al M-le principal
F5 Continue: Contina hasta el prximo breakpoint
Shift+F5 Sale del debugger
Si el cdigo produce algn error, MATLAB seala la lnea del cdigo donde se encuentra
el error y un mensaje de error en el Command Window.
6
4 Generacin de nmeros aleatorios y funciones de probabilidad
rng(nmero) semillar para generar la misma secuencia de nmeros aleatorios
rand(nlas, ncols) genera una matriz de nlas ncols de una distribucin uniforme (0,1)
randu(nlas, ncols) genera una matriz de nlas ncols de una distribucin normal (0,1)
normpdf(x) funcin de densidad de una variable normal (0,1) valuada en x
normcdf(x) funcin de probabilidad acumulada de una variable normal (0,1) valuada en x
Si tenemos una variable z normal (0,1) y la queremos convertir a normal (,
2
) solamente
tenemos que realizar la transformacin +

2
z.
Ejercicio 1. Escriba un M-le para crear una muestra de tamao N = 1000 de (y
i
, x
i
)
N
i=1
donde x
i
= (1 x
1i
), x
1i
Normal(1, 1), y
y
i
=
0
+
1
x
1i
+ u
i
,
donde u
i
Normal(0, 2),
0
= 1 y
1
= 1. Utilice una semilla de 20140311.
5 Exportar e importar datos
save nombre.mat variable Guardar variable en formato de MATLAB .mat
en nombre.mat
save nombre.txt variable -ascii Exportar variable en formato txt en nombre.txt
dlmwrite( nombre.txt , variable ) Exportar variable en formato txt en nombre.txt
xlswrite( nombre.xls , variable ) Exportar variable en formato xls en nombre.xls
load nombre.mat Cargar en la memoria el contenido de nombre.mat
load nombre.txt Importar nombre.txt en la variable nombre
variable=importdata( nombre.txt ) Importar nombre.txt en la variable variable
variable=xlsread( nombre.xls ) Importar nombre.xls en formato xls en variable
Ejercicio 2. Escriba un M-le para exportar los datos creados anteriormente en formato
txt y xls. Primero, cree una matriz con y en la primer columna y las xs en las siguientes.
7
Luego exporte dicha matriz de datos. Chequee que los archivos se pueden abrir con un editor
de texto y de hoja de clculo.
6 Programar en MATLAB II: Funciones, condicionales y loops
6.1 Funciones
Las funciones son M-les que se guardan con el nombre de la funcin. Las funciones ubicadas
en el directorio de trabajo se pueden utilizar como funciones de MATLAB. Es una buena
prctica dividir la tarea que queremos realizar con MATLAB en tareas simples y asignar una
funcin para cada tarea simple. Luego llamaremos a las distintas funciones desde el M-le
principal.
La sintaxis de una funcin es:
function [output1, output2] = nombre_funcion(input)
% Comentario
comandos
end
Ejemplo: Un M-le con nombre stat.
function [mean, stdev] = stat(x)
% STAT Mean and standard deviation
% For a vector x, stat(x) returns the
% mean and standard deviation of x.
% For a matrix x, stat(x) returns two row vectors containing,
% respectively, the mean and standard deviation of each column.
[m n] = size(x);
mean = sum(x)/m;
stdev = sqrt(sum(x.^2)/m - mean.^2);
end
8
Si el archivo stat.m est en el directorio de trabajo, podemos llamar la funcin stat(x) como
si fuese una funcin de MATLAB.
Tambin se puede trabajar con funciones annimas que se incluyen en el M-le principal.
La sintaxis es f = @(x) x^2. Luego podemos escribir por ejemplo f(2).
Ejercicio 3. Escriba una funcin que recibe como inputs un vector con la variable depen-
diente Y y una matriz con las variables X explicativas y cuyo resultado es el estimado por
Mnimos Cuadrados Ordinarios

= (X

X)
1
X

Y .
6.2 Loops
Loops son bucles que sirven cuando tenemos que realizar la misma accin un nmero de
veces (for loops)o queremos realizar una accin hasta que una condicin se cumpla (while
loops).
La sintaxis para loops es for contador = inicio:step:nal
comandos
end
while condicin
comandos
end
Ejemplo 1: El siguiente cdigo calcula la suma acumulada de un vector.
n = 100;
x = rand(n, 1);
sum_x = zeros(n, 1);
sum_x(1) = x(1);
for i = 2:n
sum_x(i) = sum_x(i-1)+x(i);
end
Ejemplo 2: El siguiente cdigo aproxima el cero para MATLAB.
9
delta = 1;
while (1+delta) > 1
delta = delta/2;
disp(delta);
end
Comentarios:
1. MATLAB es MUY ineciente al utilizar loops. Es mucho ms eciente realizar la
misma tarea con matrices.
2. Un for loop puede ir desde 1000 a 1.
3. Podemos anidar varios loops. Por ejemplo:
for i = 1:m
for j = 1:n
H(i, j) = 1/(i+j-1);
end
end
4. Podemos utilizar un while loop como un for loop.
iter = 1;
while iter > 1000
iter = iter +1;
end
Ejercicio 4. Escriba una funcin que recibe como inputs un vector con la variable de-
pendiente Y y una matriz con las variables X explicativas y cuyo resultado es el esti-
mado por Mnimos Cuadrados Ordinarios pero utilice un loop y la frmula con sumatorios

= (

i
x
i
x

i
)
1

i
x
i
y
i
donde x
i
= (1 x
1i
) es un vector columna con los valores para el
individuo i. Compare el tiempo de con una funcin y la otra.
10
6.3 Condicionales y operadores lgicos
Los condicionales sirven para ejecutar un comando si se cumple cierta condicin.
La sintaxis para condicionales es
if condicion
comando
elseif condicion
comando
else
comando
end
Operadores lgicos
< menor a
> mayor a
<= menor o igual a
>= mayor o igual a
== igual a
~= no es igual a
& y: verdadero si ambas son verdaderas (genera escalar o matriz)
| o: verdadero si al menos una es verdadera (genera escalar o matriz)
&& y: verdadero si ambas son verdaderas (genera escalar)
|| o: verdadero si al menos una es verdadera (genera escalar)
~ negativo
any verdadero si algn elemento es no nulo
all verdadero si todos los elementos no nulos
find encuentra ndices de valor no nulos en una matriz
isnan detecta valores NaN en una matriz
isempty detecta si es una matriz vaca.
11
Comentario:
1. En un condicional es mejor utilizar && y || para asegurarnos que la respuesta es un
escalar. Si utilizamos & y | y la respuesta es una matriz, solamente si la condicin se
cumple para todos los elementos se ejecuta el comando indicado.
2. Matrices lgicas: dummy = (condicion) genera una matriz de dummies si y>0.
Ejercicio 5. Utilizando el vector de datos y, utilice un loop y condicionales para crear un
vector y_cond que es igual a 1 si y > 0 y cero en caso contrario. Calcule la media de x
condicional en y = 1 (difcil).
7 Grcos
8 Diferenciacin e integracin numrica
quad, trapz, derivest, gradest, jacobianest, hessian
1
Ejercicio 6. Encuentre la aproximacin de Taylor de primer orden de la f(x, y) = (x y)
2
alrededor del punto (1,1), esto es: f(x, y) f(1, 1) +f
x
(1, 1)(x1) +f
y
(y 1). El ejercicio
consisten entonces en evaluar la funcin en el punto de aproximacin f(1, 1) y encontrar las
derivadas parciales con respecto a x e y, y evaluarlas tambin en el punto de aproximacin:
f
x
(1, 1) y f
y
(1, 1).
Ejercicio 7. Calcular la esperanza matematica de una variable aleatoria normal, E(x) =

xf(x)dx, donde f(x) es la funcin de densidad normal. Para esto escriba la funcin
en un script con fx = x.*normpdf(x,mu,sigma), donde mu=1 y sigma =0.51, y use el
comando integral para aproximar la integral. Repita el ejercicio anterior pero ahora cal-
culando E(x
2
) y use sus dos resultados previos para calcular var(x) = E(x
2
) (E(x))
2
.
1
Adaptive Robust Numerical Dierentiation Toolbox (http://www.mathworks.com/matlabcentral/leexchange/13490-
adaptive-robust-numerical-dierentiation).
12
9 Solucin de ecuaciones lineales y no lineales
fsolve, fzero
Ejercicio 8. Escriba el siguiente sistema en un script:
f(x, y) = ax + bx
2
+ cxy
g(x, y) = dy + ey
2
+ fxy
y encuentre su solucin usando el comando fsolve. Use como punto inicial x
0
= 1 e
y
0
= 1 y pase los parmetros como argumento adicional a la funcin con los siguiente valores
(a, b, c, d, e, f) = (1, 4, 1, 2, 1, 3).
10 Optimizacin
Estamos interesados en problemas de optimizacin del tipo:
min
x
f(x),
donde f(x) : R
n
R. Existen varias funciones que permiten optimizar una funcin en
MATLAB como fminsearch, fminunc, o fminbnd, u optimizar sujeto a restricciones como
fmincon. En este curso nos vamos a enfocar en fminsearch y fminunc.
fminsearch utiliza el algoritmo de Nelder-Mead para encontrar el mnimo de una funcin. El
algoritmo de Nelder-Mead parte n+1 puntos y partir de un simplex formado por estos puntos
realiza distintas transformaciones (reeccin, expansin, contraccin, etc.) para buscar otro
punto que sea mejor que el peor punto de los anteriores.
Es un algoritmo simple que no necesita que la funcin sea diferenciable pero es lento y
necesita probar muchos puntos hasta llegar al ptimo.
La sintaxis ms simple es :
[x_opt, f_opt]= fminsearch(@nombre_funcion, valor_inicial );
13
donde nombre_funcion es el nombre de la funcin que queremos minimizar (tiene que ser
una funcin como las estudiadas anteriormente), valor_inicial es el valor inicial desde donde
empieza a buscar el mnimo, x_opt es el ptimo encontrado y f_opt es el valor de la funcin
en el ptimo.
Se pueden utilizar distintas opciones como mostrar los resultados de cada iteracin, etc. La
sintaxis es la siguiente:
opciones=optimset(Display, iter);
[x_opt, f_opt]= fminsearch(@nombre_funcion, valor_inicial, opciones);
El siguiente ejemplo utiliza fminsearch para obtener el mnimo de la funcin de Rosenbrock
f = @(x) 100*(x(2)-x(1)^2)^2+(1-x(1))^2; % Funcion de Rosenbrock
x_ini = [0 0]; % Valores iniciales
[x_simplex, f_simplex, exit_simplex, output_simplex] = fminsearch(f, x_ini);
fminunc utiliza un algoritmo basado en la idea de Newton-Raphson para encontrar el mnimo
de una funcin. Dado un valor inicial x
0
, el algoritmo de Newton-Raphson calcula x
1
,
el mnimo de una aproximacin cuadrtica de la funcin f(x) en x
0
. Luego repite este
procedimiento en x
1
y asi sucesivamente.
Formalmente, la aproximacin de Taylor de 2do orden es:
f(x) f(x
0
) + f

(x
0
)(x x
0
) +
f

(x
0
)
2
(x x
0
)
2
y el mnimo de la aproximacin es:
x
1
= x
0
f

(x
0
)
1
f

(x
0
). (1)
Por lo tanto, el algoritmo de Newton-Raphson utiliza la ecuacin 1 en forma iterativa hasta
encontrar el mnimo de la funcin. Es un algoritmo que necesita calcular la derivadas
primeras y segundas (lo cual es muy costoso computacionalmente) y puede converger a
un mximo en lugar de un mnimo. Para mejorar el desempeo del algoritmo, los algoritmos
14
llamados Quasi-Newton reemplazan el clculo de la derivada segunda por una matriz denida
positiva que aprovecha los evaluaciones anteriores de la funcin. Adems, si llamamos a:

1
= f

(x
0
)
1
f

(x
0
). (2)
el Newton step, algunos algoritmos buscan el tamao ptimo del step. fminunc realiza ambas
mejoras a Newton-Raphson.
La sintaxis ms simple es :
[x_opt, f_opt]= fminunc(@nombre_funcion, valor_inicial ); .
Se pueden utilizar distintas opciones como en el caso anterior. El siguiente ejemplo utiliza
fminunc para obtener el mnimo de la funcin de Rosenbrock
x_ini = [0 0]; % Valores iniciales
[x_newton2, f_newton2, exit_newton2, output_newton2] = fminunc(@(x)f_rosenbrock(x), x_ini, options_newton);
donde f_rosenbrock(x) es una funcin que calcula el funcin de Rosenbock.
Ejercicio 9. Escriba una funcin f_mse que recibe como inputs un vector con la variable
dependiente Y , una matriz con las variables X explicativas y un vector de coecientes y
calcula la suma de los errores de prediccin al cuadrado:
f
MSE
=

i
(y
i
x

i
)
2
=

2
i
.
Luego minimice la funcin f_mse en para obtener el estimador por MCO de una forma
alternativa. Utilice la funciones fminsearch y fminunc.
Pista: Dado que la funcin depende de inputs sobre los que no queremos optimizar utilice
@(beta)f_mse(y,x,beta).
15

Vous aimerez peut-être aussi