Académique Documents
Professionnel Documents
Culture Documents
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
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