Está en la página 1de 57

MATLAB para Economistas

Expositor: Juan Carlos Aquino

MATLAB para Economistas

Expositor: Juan Carlos Aquino

MATLAB para Economistas 1


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 1
Parte I: Ambiente de trabajo y comandos básicos en MATLAB

1. INTRODUCCIÓN:

En general, podemos distinguir tres clases de programas:

a. Los manejados por menús desplegables: EViews, Microfit y PCGive.


b. Los manejados por comandos: TSP, RATS.
c. Los lenguajes de programación: GAUSS, MATLAB (MATtrix LABboratory).

Este último, originalmente escrito en Fortran y posteriormente en C, no constituye un


paquete econométrico, ya que los estimadores y estadísticos generalmente empleados no
están incluidos en las rutinas predefinidas. Sin embargo la generalidad de este lenguaje
y su naturaleza orientada a las matrices implica que virtualmente cualquier estimador
puede ser fácilmente definido. En general, a pesar de ser más flexibles que los
programas mencionados anteriormente, estos lenguajes de alto nivel requieren un
considerable nivel de experiencia en programación.

2. El SISTEMA MATLAB:

Consta de cinco elementos (de los cuales, se emplearán los primeros cuatro):

a. Entorno de desarrollo: conjunto de herramientas que permite el empleo de las


funciones y los archivos de MATLAB, muchas de ellas Interfases Gráficas de
Usuario.
b. Biblioteca de funciones matemáticas: vasta colección de algoritmos
computacionales, con nivel de sofisticación variable.
c. El lenguaje MATLAB: lenguaje de programación matricial de alto nivel, el cual
permite la elaboración de programas con nivel de complejidad variable.
d. Gráficos: permite la elaboración, anotación e impresión de gráficos en dos y tres
dimensiones (visualización, presentación y animación de gráficos, entre otras)
e. Interfases externas en MATLAB: permite crear programas en C y Fortran que
interactúen con MATLAB.

Adicionalmente, MATLAB 7.0 Release 14 exhibe una familia de aplicaciones añadidas


complementarias (cajas de herramientas o toolboxes), especialmente dirigidas al
desarrollo de tópicos específicos (wavelets, simulación, redes neuronales artificiales,
etc).

Una vez invocado el programa, aparece por defecto el escritorio de trabajo, en el cual se
distinguen tres ventanas.

a. Current directory (carpeta actual): esta carpeta es la ubicación que utiliza el


programa para poder realizar acciones con los archivos (abrir, crear, copiar,

MATLAB para Economistas 2


MATLAB para Economistas
Expositor: Juan Carlos Aquino

borrar, sobrescribir, etc.). Por defecto la ubicación es c:\matlab7\work (carpeta


de trabajo).
b. Command window (ventana de comandos): esta ventana se utiliza para ingresar
las variables, correr las funciones definidas y los archivos–M (extensión *.m).
Se introducen las instrucciones respecto a las acciones o procedimientos que el
programa debe realizar.
c. Workspace (espacio de trabajo): en esta ventana figuran los objetos creados y
cargados en la memoria para cálculos o procedimientos posteriores. Los
resultados son presentados a través de las características
Nombre/Tamaño/Espacio/Clase.

3. MATRICES Y DISPOSICIONES1:

3.1. Declaración de variables2:

Los valores numéricos son asignados a través de la línea de comandos, a los cuales les
corresponde un nombre, y diferenciando el uso de mayúsculas y minúsculas.

3.1.1. Escalares:

1
Importante: todo en MATLAB es matriz.
2
Cuando MATLAB encuentra el nombre de una nueva variable, crea automáticamente la matriz asociada
y la almacena los valores. Si dicha matriz ya existía, la sobrescribe.

MATLAB para Economistas 3


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sintáxis
escalar = número
(Clave: se trata de una matriz 1x1)

Ejemplos:

>> a = 5
a =
5

>> A = 3
A =
3

Además de imprimirse en pantalla, los objetos y sus respectivos valores han sido
almacenados en el Workspace, listos para su posterior uso, de esta manera, los
respectivos objetivos son invocados únicamente al escribirse su valor numérico en la
línea de comandos. A manera de ejemplo, podemos invocar los valores anteriormente
creados.

>> a
a =
5

>> A
A =
3

A este nivel, nuevas variables numéricas pueden crearse a partir de las previamente
definidas, empleando para esto los operadores básicos.

+ : adición
- : sustracción
* : multiplicación
/ : división
^ : potenciación
() : especificar orden de evaluación (estos son los únicos signos de asociación)

Ejemplos:

4
Para calcular 1  2  3  escribimos:
56

>> 1+2-3*4/(5^6)

MATLAB para Economistas 4


MATLAB para Economistas
Expositor: Juan Carlos Aquino

ans =
2.9992

Este valor no será guardado permanentemente en el espacio de trabajo, sino que se


mantendrá temporalmente bajo el nombre ans (que corresponde al resultado del último
cómputo). Si ahora escribimos:

>> 2+3-4*5/(6^7)
ans =
4.9999

Se puede apreciar que el valor de ans ha cambiado por el hecho de haber realizado un
cómputo adicional.

3.1.2. Vectores fila:

Existen diversas formas de declarar vectores fila:

Introducción elemento por elemento:


Sintaxis:
vectorfila = [elemento1 elemento2 ... elementoN]
(Clave: dentro de una misma fila las separaciones son con espacios en blanco o el uso
de coma)

Ejemplo 1: ingresar el vector fila = 1 3 4 10 :

>> fila = [1 3 4 10]


fila =
1 3 4 10

Ejemplo 2: ingresar el vector alpha =  0.25 3.14 2.71 5.31 0.01 :

>> alpha = [-0.25 3.14 2.71 5.31 0.01]


alpha =
-0.2500 3.1400 2.7100 5.3100 0.0100

Creación de un vector a través de extremos y extensión de separación:

Sintaxis:
vector inicial:salto:final
(Es decir: vector = [inicial inicial+salto inicial+2*salto ...
final])

Un requisito es hacer que uno de los saltos coincida con el final, en caso contrario
tomará el máximo anterior.

MATLAB para Economistas 5


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Ejemplo 1
>> del1al9=1:1:9
del1al9 =
1 2 3 4 5 6 7 8 9

Ejemplo 2
>> sinrequisito=0:5:19
sinrequisito =
0 5 10 15

Caso especial:
Sintaxis:
vector numero1:numero2
(Clave: equivale a vector numero1:1:numero2)

Ejemplo:
>> casoespecial=1:5
casoespecial =
1 2 3 4 5

3.1.3. Vectores columna:

Existen diferentes formas de generarlas:

Introducción elemento por elemento:


Sintáxis
vectorcolumna = [elemento1 ; elemento2 ; ... ; elementoN].
(Clave: cada “;” representa el fin de una línea, en este caso el fin de la línea indíca el
fin de la fila)

Ejemplos:

>> columna = [3 ; 4 ; 6 ; 7 ; 2 ; 5 ; 3 ; 4 ; 45 ; 40 ; -
28.9]
columna =
3.0000
4.0000
6.0000
7.0000
2.0000
5.0000
3.0000
4.0000
45.0000
40.0000
-28.9000

MATLAB para Economistas 6


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Otra forma de crear un vector columna es insertando los elementos línea por línea,
bajando con shift+Enter

Ejemplo:

>> columna1 = [3
4
6
7
2
5
3
4
45
40
-28.9]

columna1 =
3.0000
4.0000
6.0000
7.0000
2.0000
5.0000
3.0000
4.0000
45.0000
40.0000
-28.9000

Por transposición de un vector fila:

Sintáxis:
vectorcolumna = vectorfila'
': operador transposición

>> cdel1al9=del1al9'
cdel1al9 =
1
2
3
4
5
6
7
8
9

>> colcasoespecial=casoespecial'

MATLAB para Economistas 7


MATLAB para Economistas
Expositor: Juan Carlos Aquino

colcasoespecial =

1
2
3
4
5

3.1.4. Disposiciones bidimensionales3 (matrices):

Introducción elemento por elemento:

Sintáxis:
matriz = [elem11 ... elem1N ; … ; elemM1 … elemMN]
(Esta inserción de elementos debe respetar las dimensiones de la matriz en
consideración)

Ejemplo:

>> A=[11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35; 41 42 43 44 45; 51 52 53


54 55]
A =
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55

3.2. Comandos matriciales:

Sea la matriz:
 A11  A1n 
A      
 Am1  Amn  mn

3.2.1. Subíndices:
Los siguientes comandos permiten hacer referencia a un conjunto de elementos de A 4,
tomemos para estos ejemplos la matriz A:

Sintáxis:
A(i,j): devuelve el elemento que se encuentra en la i-ésima fila y j-ésima columa
( Aij ).

3
Todo comando que asigne un valor en MATLAB será seguido por la presentación del resultado en la
pantalla. En caso de incluir un “;” al final de la instrucción, éste no será presentado (incrementando la
velocidad en la realización del trabajo).
4
No deben exceder el tamaño de la matriz.

MATLAB para Economistas 8


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Ejemplos:

>> A(3,4)
ans =
34

>> A(5,2)
ans =
52

Barrido de elementos:
Sintáxis:
A(i1 i2,j1 j2): devuelve los elementos en las filas i1-i2 y columnas j1-j2.

Ejemplo:

>> A(3:5,1:2)
ans =
31 32
41 42
51 52

Selectivo por columna:


Sintáxis:
A(i1:i2,j): devuelve los elementos en las filas entre i1-i2 y en la columna j.

Ejemplo:
>> A(1:4,3)
ans =
13
23
33
43

Selectivo por fila:


Sintáxis:
A(i,j1:j2): devuelve los elementos en la fila i y las columnas j1-j2.

Ejemplo:

>> A(2,3:4)
ans =
23 24

Sintáxis
A(:,j): devuelve todos los elementos en fila cualquiera y columna j (columna j).

MATLAB para Economistas 9


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Ejemplos:
>> A(:,2)
ans =

12
22
32
42
52

>> A(:,4)
ans =
14
24
34
44
54

Sintáxis:
A(i,:): devuelve todos los elementos en fila i y columna cualquiera (fila i).

Ejemplos:

>> A(2,:)
ans =
21 22 23 24 25

>> A(5,:)
ans =
51 52 53 54 55

(Clave: “:” se refiere a todos los elementos)

Sintáxis:
A(k): devuelve el k-ésimo elemento de la matriz, contando a lo largo de columnas y
avanzando en filas.

Ejemplo:

>> A(11)
ans =
13

>> A(20)
ans =
54

MATLAB para Economistas 10


MATLAB para Economistas
Expositor: Juan Carlos Aquino

>> A(2)
ans =
21

Si se almacena un elemento fuera de la matriz (excediendo sus dimensiones), el tamaño


se incrementa lo mínimo para acomodarse al nuevo elemento.
Ejemplo: si a la matriz A anteriormente considerada se el incluye el elemento 66 en su
sexta fila y sexta columna se obtiene:

11 12 13 14 15 0 
 21 22 23 24 25 0 

 31 32 33 34 35 0 
 
 41 42 43 44 45 0 
 51 52 53 54 55 0 
 
 0 0 0 0 0 66 

Es decir:

>> A(6,6)=66
A =
11 12 13 14 15 0
21 22 23 24 25 0
31 32 33 34 35 0
41 42 43 44 45 0
51 52 53 54 55 0
0 0 0 0 0 66

Sintáxis
sum(A): computa el vector fila conformado por la suma de elementos a lo largo de una
misma columna5.

Ejemplo:

>> sum(A)
ans =
155 160 165 170 175 66

Sintáxis
diag(A): devuelve un vector columna con los elementos de la diagonal principal de la
máxima matriz cuadrada contenida en A .

Ejemplo:

5
MATLAB tiene preferencia por el trabajo sobre las columnas de una matriz, de manera que las
operaciones sobre las filas debe estar precedido por el uso del operador transposición.

MATLAB para Economistas 11


MATLAB para Economistas
Expositor: Juan Carlos Aquino

>> diag(A)
ans =
11
22
33
44
55
66

4. FUNCIONES INCORPORADAS ELEMENTALES:

MATLAB posee un gran número de funciones incorporadas, cuyas características


pueden se exploradas con los comandos: help elfun funciones especializadas),
help specfun (funciones matemáticas especializadas), help elmat.(matrices
elementales y matrices especializadas)).

Funciones trigonométricas:
sin : seno
cos: coseno
Funciones exponenciales:
exp : exponencial en base natural
log : logaritmo natural
sqrt : raíz cuadrada
nthroot : raíz n-ésima real de números reales
Funciones con números complejos:
abs : valor absoluto
conj : complejo conjugado
imag : parte imaginaria de un complejo
real : parte real de un complejo
Funciones matemáticas especializadas:
beta : función Beta
gamma : función Gamma
cross : producto vectorial (vector)
dot : producto interno
Teoría de números:
gcd : máximo común divisor
lcm : mínimo común múltiplo
factorial : función factorial
Matrices elementales:
zeros : matriz de ceros
ones : matriz de unos
eye : matriz identidad
rand : matriz de números aleatorios distribuidos uniformemente
randn : matriz de números aleatorios distribuidos normalmente
meshgrid : disposiciones de X e Y para gráficos en 3D
: : vector regularmente espaciado e índice de una matriz
Información básica sobre matrices:

MATLAB para Economistas 12


MATLAB para Economistas
Expositor: Juan Carlos Aquino

size : tamaño de una matriz


length : longitud de de un vector
ndims : número de dimensiones
numel : número de elementos
disp : mostrar una matriz o un texto
Manipulación matricial:
reshape : cambiar tamaño
diag : matrices diagonales y diagonales de una matriz
blkdiag : concatenación diagonal en bloques
tril : extraer la parte triangular inferior
triu : extraer la parte triangular superior
: : vector regularmente espaciado e índice de una matriz
Utilitarios para disposiciones:
isscalar : verdadero para un escalar
isvector : verdadero para un vector
Variables y constantes especiales:
ans : respuesta más reciente
pi : - 3.1415926535897....
i , j : unidad imaginaria

Parte II: Fundamentos de Programación

Una etapa importante en la implementación de una metodología luego de haberla

comprendido, consiste en diseñar la serie de procedimientos que deberá realizar el

computador, antes de escribirlos en su correspondiente lenguaje. Para esto, es necesario

detenernos en los siguientes aspectos:

1. Diagramas de flujo (diseño y arquitectura de un programa):

Una vez diseñado el algoritmo, el siguiente paso es elaborar el diagrama de flujo. Para
realizar cualquier programa, indistintamente del lenguaje de programación con el que se
quiera trabajar, es necesario contar con un esquema lógico de procedimientos a seguir,
lo cual precede toda inserción de comandos. Para esto, resulta beneficioso el empleo de
la siguiente notación para los diversos procesos dentro de un mismo programa:

MATLAB para Economistas 13


MATLAB para Economistas
Expositor: Juan Carlos Aquino

En concreto, los diagramas de flujo representan la forma más tradicional para


especificar los detalles algorítmicos de un proceso. Se utilizan principalmente en
programación, economía y procesos industriales; estos diagramas utilizan una serie de
símbolos con significados especiales (su uso hacia un diagrama más claro,
comprensible y estandarizado):

- Flecha: indica el sentido y trayectoria del proceso de información o tarea.

- Rectángulo: se usa para representar un evento o proceso determinado. Éste es


controlado dentro del diagrama de flujo en que se encuentra. Es el símbolo
comúnmente utilizado.

- Rectángulo redondeado: se usa para representar un evento que ocurre de forma


automática y del cuál generalmente se sigue una secuencia determinada.

- Rombo: se utiliza para representar una condición. Normalmente el flujo de


información entra por arriba y sale por un lado si la condición se cumple o sale
por el lado opuesto si la condición no se cumple. Lo anterior hace que a partir de
éste el proceso tenga dos caminos posibles.

- Círculo: representa un punto de conexión entre procesos, se utiliza cuando es


necesario dividir un diagrama de flujo en varias partes, por ejemplo por razones
de espacio o simplicidad. Una referencia debe de darse dentro para distinguirlo
de otros.

2. Comandos de control de flujos:

2.1. Comandos del tipo loop6:

Este tipo de comandos funciona como “lazo”, entre un conjunto de instrucciones, el


cual depende de una variable “libre”.

2.1.1. for: repite una serie de enunciados un número específico de


veces.

6
También llamado “bucle”.

MATLAB para Economistas 14


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sintaxis:
for variable = expresion
enunciado1(variable)
enunciado2(variable)
...
enunciadoN(variable)
end

Las columnas en expresion son almacenadas por sola una vez en variable,
mientras que los siguientes enunciados son ejecutados hasta la instrucción end. En la
práctica, la expresión es casi siempre de forma escalar, en cuyo caso las columnas
son simplemente escalares. El alcance de este comando siempre está determinado.

2.1.2. while: repite una secuencia de comandos una serie comandos


un número indefinido de veces.

Sintaxis:
while expresion
enunciado1
enunciado2
...
enunciadoN
end

Los enunciados son ejecutados siempre y cuando expresion sea calificada como
verdadera (una precaución a tener en cuenta es que en caso de colocar una
tautología, el programa se ejecutaría indefinidamente), este objeto toma la forma
operador expresion.

operador:
Es uno de los seis siguientes operadores relacionales, que intervienen en la
elaboración de expresiones lógicas

<: “menor a …”
<=: “menor o igual a …”
>: “mayor a …”
>=: “mayor o igual a …”
==: “igual a …”
~=: “diferente de …”

El alcance de este comando siempre está determinado por la instrucción end.

2.2. Comandos condicionales:

Cada vez que se crea un archivo-M, se está escribiendo un programa de computadora


usando el lenguaje de programación MATLAB (es más, muchos comandos de
MATLAB son a su vez archivos-M, los cuales pueden a su vez ser examinados y
modificados, pero esto último no es recomendable).

MATLAB para Economistas 15


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Para muchas funciones definidas por el usuario, el programador puede escribir un


archivo-M que ejecuta siempre la misma serie de comandos, dados los argumentos de
entrada. Sin embargo, habrá ocasiones en las cuales se requerirá que una función
desempeñe diferentes secuencias de comandos, dependiendo de la situación (es decir, en
forma condicional). Esto se puede realizar a través de comandos de ramificación. Al
igual que en otros lenguajes de programación, la ramificación en MATLAB es
ejecutada con el comando if.

Sintaxis (comandos if, else y elseif)

if7 condicion if condicion if condicion if condicion

instrucciones instrucciones1 instruccionesA instruccionesX


end else8 elseif9 elseif

instrucciones2 instruccionesB instruccionesY


end end else

instruccionesZ
end

En general, el comando if debe seguirse en la misma línea por una expresión que
MATLAB podrá calificar como verdadera o falsa, y al final de los comandos debe haber
(como ocurría con for) una instrucción delimitadora end. En medio, de forma
opcional, puede haber enunciados del tipo elseif y/o else. Si la prueba resulta
verdadera, MATLAB ejecuta los todos los comandos entre el enunciado if y el primer
enunciado elseif, else o end e ignora todos los demás que están después del
enunciado end. Si la prueba resulta falsa, MATLAB ignora todos los primeros
comandos hasta elseif, else o end. El comando else se emplea cuando se
presenta una única alternativa a la condición lógica utilizada por if mientras que, el
comando elseif es útil cuando hay más de dos alternativas y estas pueden ser
distinguidas por una secuencia de pruebas de verdadero/falso. Es en esencia
equivalente a un comando else seguido inmediatamente por un comando if.

Aplicación 1: Método de la bisección

Se pide encontrar el valor en el dominio cuya imagen sea igual cero de la siguiente
función: f ( x)  2 x 4  3x 2  2 x 2  5 x  3 , en el intervalo 0,1 , para lo cual se deberá
utilizar el método de la bisección. Para realizar esto se utilizarán 2 programas: el
principal y una función. El programa principal tiene toda el algoritmo necesario para
desarrollar la procedimiento mediante el método propuesto y la función sirve para
simplificar el algoritmo principal, pues cada vez que se requiera obtener los valores de
la función para cierto valor del dominio (o para una grilla de valores) bastará con
utilizarla. Primero mostraremos el programa función:

7
“Si ocurre que…”.
8
“En caso contrario…“.
9
“Si además ocurre que…”.

MATLAB para Economistas 16


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Programa función

function f=func(x);
f=2*x^4+3*x^3-2*x^2+5*x-3;

Lo que hace este programa es devolver la imagen de cualquier valor del dominio de la
función que, en este caso, está representado por el escalar “x”. Este programa será
utilizado en varios ocasiones en el programa principal que se presenta a continuación.

Programa Principal

clear all
close all
clc

eps=0.00001; % Defino el valor de epsilon (el maximo de tolerancia)


condition=1;

a=input('Ingrese el punto a = '); % Ingreso el valor de inicio del


metodo de
% la biseccion
b=input('Ingrese el punto b = '); % Ingreso el valor final de metodo
% de la biseccion

fa=func(a); % Aplico la funcion al valor inicial


fb=func(b); % Aplico la funcion al valor final

if fa*fb > 0; % Le impongo la condicion que los valores de la funcion


de
% "a" y "b" deben tener signos diferentes. Si no
cumple,
% termina el programa.
'Los parametros no cumplen la restriccion'
break
else % Si cumple la condicion, empezamos a realizar el
metodo
% de la biseccion
while condition==1 % Empiezo el loop principal
c=(a+b)/2; % Creo una variable "c" como promedio entre "a" y
"b"
fc=func(c); % evaluo "c" en la funcion
if fc<0 % Si la funcion toma valores negativos
a=c; % Se redefine "a" como "c"
elseif fc>0 % Si la funcion toma valores negativos
b=c; % Se redefine "b" como "c"
end
if abs(fc)<eps % Si la funcion en valor absoluto es menor que
epsilon...
condition=0; % entonces no se satisface la condicion para que
siga el
% loop, por lo tanto para de iterar.
end
end

MATLAB para Economistas 17


MATLAB para Economistas
Expositor: Juan Carlos Aquino

end
'El cero se alcanza en:' % El programa imprimira el ultimo valor de c,
que en
c % este caso es justamente el valor del
dominio en el
% cual la función toma el valor 0
(aproximadamente,
% ya que hemos definido una tolerancia de
0.00001).

x3=[0:.1:1]; % Voy a dibujar la funcion, empiezo definiendo la


grilla.
for i=1:length(x3) % para cada valor de la grilla encuentro la imagen.
fx3(i)=func(x3(i));
end
plot(x3,fx3) % Dibujo la funcion
title('Grafico de la funcion');
grid on;

La idea del método de la bisección para encontrar el cero de una función es tomar el
punto medio entre dos valores en el dominio que deben cumplir una condición: la
imagen de uno de ellos debe ser positivo y la imagen del otro debe ser negativo (para
ello se utilizó el condicional if). Si se cumple la condición empieza el algoritmo
(básicamente es el loop for del programa): si la función evaluada en este punto medio
está por encima del cero se redefine el valor superior (en el dominio) como el punto
medio de los dos valores, por otro lado, si la función evaluada en el punto medio es
menor a cero, se redefine el valor inferior (en el dominio) como el punto medio de los
dos. De esta forma se va convergiendo hacia el valor (en el dominio) que haga que la
función evaluada en ese punto sea igual a cero. Al ejecutar el programa principal, la
pantalla inicial nos indica que ingresemos los valores de “a” y de “b”:

Ingrese el punto a =
Ingrese el punto b =

Si ingresamos algún valor de “a” que cuando lo evalúe en la función sea mayor a cero,
entonces el programa para (comando break). Asimismo, si ingresamos algún valor de
“b” que cuando lo evalúe en la función sea menor a cero, entonces el programa para.

Luego, si se cumplen las condiciones el programa prosigue aplicando un loop descrito


en el programa. El loop se realizará hasta que la divergencia entre el valor del promedio
evaluado en la función con el cero sea menor en valor absoluto a cierto épsilon. Cuando
encuentra este punto, el programa imprime el valor del promedio. El programa imprime
lo siguiente:

El cero se alcanza en:

c =

0.5746

Luego graficamos la función y obtenemos:

MATLAB para Economistas 18


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Grafico de la funcion
5

-1

-2

-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

En el gráfico se puede observar que el valor en el cual la función toma el valor cero es
aproximadamente el valor que nos arroja el programa, es cual es igual a 0.5746.

Aplicación 2:

% utilizacion del comando while - derivada creciente o


decreciente de % forma cuadratica

clear all
close all
clc

% la funcion es f(k)=k^2+8, por lo que la derivada es f’(k)


= 2*k

k=-2;
epsilon=0.001;
eps=0.1;
condition=1;
t=1;

% loop principal

if 2*k==0
kk=k+eps;
if 2*kk>2*k
fprintf('la funcion es convexa con minimo en')
k

MATLAB para Economistas 19


MATLAB para Economistas
Expositor: Juan Carlos Aquino

else
fprintf('la funcion es concava con maximo en')
k
end
else
while condition==1
k=k+eps; %aca comienza a correr el valor del
dominio
t=t+1;
if abs(2*k)<epsilon
kk=k+eps;
if 2*kk>2*k
fprintf('la funcion es convexa con minimo
en')
k
else
fprintf('la funcion es concava con maximo
en')
k
end
condition=0;
end
end
end

%genero la funcion para distintos valores de k

ks=[-5:0.1:5];
fs=ks.^2+ones(1,length(ks))*8;
ders=2*ks;

% graficos

subplot(2,1,1),
plot(fs,'k')
grid on
title('funcion')
subplot(2,1,2),
plot(ders)
grid on
title('derivada')

Aplicación 3: un metodo para buscar el 0 a una funcion

% vamos a utilizar la funcion f(x)=x^2-x

clear all
close all
clc

MATLAB para Economistas 20


MATLAB para Economistas
Expositor: Juan Carlos Aquino

puntos=100; %esto va a definir la cantidad de puntos de la


grilla
eps=0.0001; %el maximo de tolerancia
condition = 1;

while condition == 1;
x = linspace(-1/2,1/2,puntos);
% el comando linspace me genera un vector (ver el help)
fx=x.^2-x; %genero la funcion
absfx=abs(fx); %le tomo valor absoluto
[minimos ubic] = min(absfx); % me guarda en minimos los
minimos y
% en ubic la ubicacion de
los minimos
if min(minimos)<eps
condition=0;
else
puntos=puntos*2;
clear x fx absfx minimos ubic
end
end
'El cero se alcanza en:'
cero=x(ubic(find(min(minimos))))

%grafiquemos esto

subplot(2,1,1),
plot(x,fx)
title('Grafico de la funcion en la zona definida')
hold on
plot(x,0,'k:')

subplot(2,1,2),
plot(linspace(-1,2,5000),(linspace(-1,2,5000)).^2-
(linspace(-1,2,5000)))
hold on
plot(linspace(-1,2,5000),0,'k:')
title('Grafico completo')

MATLAB para Economistas 21


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 2

Parte I: Comandos auxiliares

1. Elección de la carpeta de trabajo:

Además de las ventanas del entorno de trabajo ya presentadas, en la parte superior


derecha de la pantalla aparece la ruta que corresponde a la carpeta de trabajo del
programa (es decir, aquella de donde se leerán y grabarán las hojas de comandos
gráficos, matrices, etc.). En relación a esto, tenemos el siguiente comando

Sintáxis:
cd (current directory)
Nos permite identificar o cambiar la carpeta de trabajo para la sesión actual en
MATLAB.

Por ejemplo:

>> cd

C:\MATLAB\work

Nos está diciendo que dicha carpeta es work, la cual está dentro de las carpetas que
corresponden al programa, por defecto esta va a ser siempre la carpeta de trabajo. Sin

MATLAB para Economistas 22


MATLAB para Economistas
Expositor: Juan Carlos Aquino

embargo si acompañamos el comando cd con una ruta especificada, lo que es estará


haciendo es cambiar la actual carpeta de trabajo.

>> cd C:\MATLAB

Lo cual no ha hecho más que cambiar la carpeta de trabajo a C:\MATLAB, lo cual


podemos corroborar con

>> cd

C:\MATLAB

De manera similar, hay una serie de comandos relacionados con DOS que pueden
resultar de utilidad:

Sintáxis:
cd ..
Mueve el directorio actual un nivel por encima

Por ejemplo, el caso anterior equivalía a escribir cd .. cuando el directorio era


C:\MATLAB\work.

Sintáxis:
dir
Muestra todo el contenido de la carpeta actual de trabajo.

Obviamente este comando puede hacerse más específico, por ejemplo:

>> dir C:\MATLAB

muestra el contenido de una carpeta especificada, mientras que

dir *.exe : muestra todos los archivos de extensión exe (dicha extensión puede
cambiarse según requerimiento).

Otro comando útil es:

Sintaxis
wd = cd
Almacena la ubicación de la carpeta actual como una cadena de caracteres
alfanuméricos.
(Clave: se está generando una variable, pero conformada por letras)

Alternativamente, se puede emplear el comando cd como cd('directorio'),


cuando la especificación de la carpeta está guardada como una cadena de caracteres.
Ejemplo:

>> cd

C:\MATLAB\work

>> wd = cd

MATLAB para Economistas 23


MATLAB para Economistas
Expositor: Juan Carlos Aquino

wd =
C:\MATLAB\work

>> cd .. ; cd ..
>> cd
C:\

>> cd(wd);

>> cd
C:\MATLAB\work

Sintaxis:
delete
Borra un archivo u objeto grafico.
(Clave: borra del disco)

delete nombre
Borra el archivo con llamado nombre del disco. Las abreviaturas pueden ser
empleadas en este comando. Por ejemplo delete *.txt borra todos los archivos de
extensión txt de la carpeta actual. Cuando el nombre del archivo se encuentra
almacenado en una cadena de caracteres, se suele usar la forma funcional de
delete, como delete(‘archivo’). Adicionalmente, delete revisa el status de la
opción recycle para determinar si este archivo debe ser enviado a la papelera de
reciclaje o borrado de forma irreversible.

delete(ruta\figura.fig)
Borra el objeto grafico con nombre figura, ubicado en \ruta\. Si el objeto es una
ventana abierta, esta es cerrada y borrada sin confirmación.

Sintaxis:
clear
"Limpia" variables.
(Clave: borra de la memoria, equivale a clear variables)

clear global
Remueve todas las variables globales.

clear functions
Remueve todos los archivos-M asociados a funciones.

clear all
Remueve todas las variables, locales y globales, además de las funciones.
clear var1 var2 ...
Borra las variables especificadas. La abreviatura caracter'*' puede ser empleada
para borrar variables que coinciden con un patrón. Por ejemplo clear X* borra todas
las variables en la carpeta actual que comienzan con X. Si X es variable global, clear
X remueve X de la carpeta actual, pero la deja accesible para cualquier función que la
declare como global.

clear global X

MATLAB para Economistas 24


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Remueve completamente la variable global X. La opción global debe ubicarse


primero.

clear fun
Borra las funciones especificadas.

2. Cargado y almacenado de datos:

Ya que muchas veces el trabajo realizado va a estar relacionado con datos


incorporados al programa, no resulta muy práctico cargar las matrices de datos
digitando las entradas una por una. Esta es la razón por la cual es necesario que
MATLAB pueda leer archivos que provienen de otros programas. Los de uso más
frecuente son los archivos de Excel (*.xls), los archivos de texto (*.txt) y los
archivos ASCII10 (*.ascii).

Archivos *.xls
La primera manera de cargar datos es en un modo interactivo; existen cuatro formas:
a) Seleccionando File\Open en el menú de comandos.
b) Presionando Ctrl+O.
c) Presionando el botón de la barra de herramientas.
d) A través del contenido de la carpeta de trabajo, haciendo doble clic.

Inmediatamente aparecerá el asistente de importación, a partir del cual los datos


pueden ser cargados automáticamente (esto en el caso de que el archivo contenga
estos últimos en la disposición de una matriz).

10
American Standard Code for Interchange of Information.

MATLAB para Economistas 25


MATLAB para Economistas
Expositor: Juan Carlos Aquino

De igual manera, los datos quedarán cargados en el workspace de la sesión actual.

La segunda manera es a través de la línea de comandos, para esto la sintaxis es:

Sintáxis
N=xlsread('archivo')
Devuelve los datos numéricos en una matriz N a partir de la primera hoja del archivo
de Excel con nombre archivo, ignorando filas o columnas que contengan texto.

Variantes:

N = xlsread('archivo', -1)
Abre archivo en una ventana de Excel, permitiendo seleccionar interactivamente el
contenido a ser importado. Para importar una hoja completa, primero se selecciona la
hoja en la ventana de Excel y luego se presiona el boton OK en el cuadro de Diálogo
de Selección de Datos. Para seleccionar un rango determinado, se le selecciona en la
ventana de Excel arrastrando el ratón sobre dicho rango y presionando OK.

N = xlsread('archivo', hoja)
Lee la hoja especificada del archivo file, donde hoja es o bien un valor escalar
doble positivo o una cadena de caracteres que contiene el nombre de la hoja.

Sintaxis:
[type, sheets] = xlsfinfo('excel')
Determina los nombres de las hojas en un archivo.

N = xlsread('file', 'rango')
Carga los datos de una región rectangular específica de la hoja por defecto (Hoja1).
Especifique el rango usando la sintaxis 'C1:C2', donde C1 y C2 son dos esquinas
opuestas que definen la región a ser leía.

MATLAB para Economistas 26


MATLAB para Economistas
Expositor: Juan Carlos Aquino

N = xlsread('file', hoja, 'rango')


Es una combinación de los comandos anteriores.

También podemos guardar datos a través de líneas de comando:

Sintáxis:
xlswrite('archivo', M)
Escribe la matriz M al archivo Excel nombrado archivo. La matriz insumo M es una
matriz de tamaño m-por-n numérica, de caracteres, o disposición de celdas, donde
m<65536 y n<256. La matriz de datos es escrita en la primera hoja en el archivo,
empezando en A1.

La variante xlswrite('archivo', M, hoja) escribe la matriz M a la hoja


especificada de archivo. El argumento hoja, puede ser un valor escalar doble
representando el índice de la misma, o una cadena de caracteres que contenga su
nombre. Si hoja no existe, una nueva hoja es añadida al final de la colección. Si hoja
es de un índice mayor al número de hojas, se añaden hojas vacías hasta que el
número total iguale el número de hoja. En cualquier caso, MATLAB genera una
advertencia indicando que ha añadido una nueva hoja.

Archivos *.txt

Son abiertos por el editor de archivos-M y pueden ser modificados mas no ejecutados,
aunque contengan instrucciones que corresponden al mismo programa.

Archivos *.ascii
Los archivos ASCII (American Standard Code for Interchange of Information) son
crucialmente importantes debido a que son el formato más primitivo para almacenar la
información (a través del uso de simples cadenas alfanuméricas). En virtud de esto,
prácticamente la mayoría de programas tiene la capacidad de interactuar con este tipo
de archivos, con lo cual este formato se convierte en el “puente” para comunicar la
información entre programas. Existen dos formas de realizar esta operación:

Empleando la función save:

Es la más sencilla de usar11 (por defecto los delimitadores son espacios en blanco).

Sintaxis:
save nombre.ext matriz –ASCII
donde: nombre: nombre del archivo contenedor de datos.
ext : extensión del archivo (para nuestros fines, esta será *.ascii)
matriz: matriz de donde provienen los datos.
Empleando la función dlmwrite:

Provee una mayor flexibilidad, permitiendo especificar cualquier carácter como


delimitador y exportar subconjuntos de una disposición al especificar un rango de
valores.

11
Cuando se usa save para escribir una disposición de caracteres en un archivo ASCII, este
escribe sus caracteres ASCII equivalentes. Por ejemplo si se escribe la cadena “hello”, save
escribe los valores 104 101 108 108 111.

MATLAB para Economistas 27


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sintaxis:
dlmwrite('nombre.ext',matriz,'delimitador')
donde: nombre: nombre del archivo
ext: extensión
matriz: matriz cargada en la memoria
delimitador: separador de elementos

Por ejemplo, para exportar la matriz AA = [ 1 2 3 4 ; 5 6 7 8 ]:

AA =
1 2 3 4
5 6 7 8

Como un archivo de datos ASCII que usa puntos y comas como un delimitador,
utilizamos el comando

dlmwrite('data.ascii',A, ';')

Si dicho archivo es visualizado en un editor de texto, se vería de la siguiente manera:

1;2;3;4
5;6;7;8

Nótese que dlmwrite no inserta delimitadores al final de las filas. Por defecto, si no
se especifica un delimitador, dlmwrite emplea una coma como un delimitador. Puede
especificarse un espacio (' ') como un delimitador o, si se especifica citas vacías, no
asigna delimitador alguno.

Parte II: Archivos-M (scripts y functions)

Cuando se escribe un programa en MATLAB, este se guarda en un archivo-M


(nombrado así por la extensión *.m). Existen dos tipos de archivos-M que pueden ser
escritos, siendo las funciones las del tipo más complejo y útil.

1. Definición de funciones personalizadas:

Se adhieren nuevas funciones al vocabulario de MATLAB al expresarlas en términos


de funciones ya existentes (parte del lenguaje) que residen a su vez en un archivo-M.
Estos pueden constituir scripts o functions:

a) Partituras son archivos simples que contienen una secuencia (muchas veces
lineal) de comandos y enunciados en MATLAB.

b) Funciones hacen uso de variables locales para aceptar argumentos de entrada


y devolver objetos de salida. El nombre del archivo-M debe comenzar con un
carácter y poseer la extensión *.m.

Así, el archivo-M menos su extensión es lo que MATLAB buscará cuando se trate de


invocar el script o function. En el caso de una función, una línea en la parte

MATLAB para Economistas 28


MATLAB para Economistas
Expositor: Juan Carlos Aquino

superior del archivo-M debe contener el nombre de la misma en la primera línea y


debe ser el igual al de archivo sin la extensión *.m.

Ejemplo 1: la función empleada en la sesión anterior.

func.m
function f=func(x);
f=2*x^4+3*x^3-2*x^2+5*x-3;

nos permite ejecutar

>> func(9)

ans =

15189

evitando el basarnos en casos específicos.

Ejemplo 2: la existencia de un archivo del tipo

Stat1.m
function [mean,stdev] = stat1(x)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/n));

define una nueva función llamada stat, que calcula la media y la desviación estándar
de un vector. Las variables en el cuerpo de la función son todas variables locales.

Por otro lado, una subfunción, visible sólo para otras funciones dentro del mismo
archivo, se crea definiendo a su vez una nueva función con la palabra clave de la
función después del cuerpo de la función o subfunción precedente. Por ejemplo:

stat2.m
function [mean,stdev] = stat2(x)
n = length(x);
mean = avg(x,n);
stdev = sqrt(sum((x-avg(x,n)).^2)/n);

function mean = avg(x,n)


mean = sum(x)/n;

Aquí, avg es una subfunción dentro del archivo stat.m.

Las subfunciones no son visibles fuera del archivo en el cual han sido definidas. Por
otro lado, las funciones normalmente se desactivan cuando el fin de la misma ha sido
alcanzado, pero el programador puede utilizar un enunciado de retorno para forzar un
regreso temprano.

Cuando se llama una función de archivo-M desde la línea de comandos o desde otro
archivo-M, MATLAB analiza la función y la almacena en memoria. La función

MATLAB para Economistas 29


MATLAB para Economistas
Expositor: Juan Carlos Aquino

analizada permanece en la memoria hasta que es borrada con el comando clear o


cuando se cierre sesión en MATLAB.

2. Comandos relacionados:

Sintáxis:
nargin, nargout (número de argumentos de una función)
n = nargin('funcion')
n = nargout('funcion')

En el cuerpo de una función de archivo-M, nargin('funcion') y


nargout('funcion') indican cuantos argumentos de entrada o salida ha
suministrado el usuario en funcion, respectivamente. Fuera del mismo; indican el
número de argumentos de entrada o salida que posee funcion. Este número es
negativo si la función tiene un número variable de argumentos.

MATLAB para Economistas 30


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Aplicación 1: algoritmo de Newton

El algoritmo de Newton utiliza la siguiente fórmula iterativa para encontrar el valor de


cero de una función:
f ( xk )
x k 1  x k 
f ' ( x k 1 )

Inicialización: elegir el criterio de convergencia "e", partiendo de un punto x0. Fijamos


k=0.

Paso 1: Computar la siguiente iteración utilizando x k 1  x k  f ( x k ) / f ' ( x k ) .


Paso 2: Verificar la convergencia: si x k  x k 1  e , ir al paso 3, de otra manera ir al
paso 1.
Paso 3: Mostrar los resultados y detener.

Función:
function [y,dy]=funct(x)
y = 2*x^4+3*x^3-2*x^2+5*x-3; % función evaluada en x
dy = 8*x^3+9*x^2-4*x+5; % derivada de la función en x

[x,it]=newton(‘funct’,1)
function [x1,it]=newton(funct,x0)
% función que resuelve el valor nulo de una función
% usando el método de Newton
%
% Sintaxis [x,it]=newton('func',x0)
% func: nombre de la función
% x0: punto inicial
% x: punto en el cual la función es cero
% it: número de iteraciones
%
% Es necesario crear una función 'funct' cuyas salidas sean la
% función evaluada en x y la derivada. Por ejemplo
% function [y,dy]=funct(x)
% y=2*x^4+3*x^3-2*x^2+5*x-3; función evaluada en x
% dy=8*x^3+9*x^2-4*x+5; derivada de la función en
x

e=1e-10; % nivel de tolerancia


cond=0; % condición
maxit=100; % máximo número de iteraciones
it=1; % contador
while (cond==0 & it<maxit)
[f,df]=feval(funct,x0); % evalúa la función y la derivada
x1=x0-f/df;
if abs(x1-x0)<=e*x0 % criterio de convergencia
cond=1;
else
x0=x1;
it=it+1;
end
end

MATLAB para Economistas 31


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Aplicación 2: función de producción Cobb-Douglas

Función:
function x3 = cobbdouglas(x1,x2,A,alpha1,alpha2);
% Función Cobb-Douglas (parámetros: alpha1, alpha2)
x3 = A*(x1^alpha1)*(x2^alpha2);

Script:
% Gráficos: una función Cobb-Douglas
clear all;

nx = 100; % número de elementos eje x


ny = 100; % número de elementos eje y
p = 0.02; % precisión
x = zeros(1,nx);
y = zeros(1,ny);

% Parámetros de la función

alpha = 1/3;
beta = 2/3;

for i = 1 : 1 : nx;
x(1,i) = p*i;
end
for j = 1 : 1 : ny;
y(1,j) = p*j;
end
z = zeros(nx,ny);
for i = 1 : 1 : nx;
for j = 1 : 1 : ny;
z(i,j) = cobbdouglas(i,j,1,alpha,beta);
end;
end; meshc(x,y,z);

Aplicación 3: Envolventes de Largo Plazo

Consideremos una firma que emplea dos factores (capital y trabajo) y cuya tecnología
está representada por una función de producción del tipo Cobb-Douglas bajo
rendimientos decrecientes de escala, es decir: Q  f ( K , L)  K  L con K  0 , L  0
y 0      1 . Esto quiere decir que en el largo plazo, dada una cuota de producción
Q0 , la firma minimizará sus costos, con sus demandas satisfaciendo:

1
 Q0   w  D
LDLP    y K LPD    LLP
  w /  r 

  r 

TOT
Así, en el largo plazo sus costos serán CLP  wLDLP  rK LP
D
 CLP
TOT
 Q0 , w, r ,  ,   .

MATLAB para Economistas 32


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sin embargo, por estar fijo el nivel de capital en el corto plazo en K , para una cuota
de Q0 , su demanda de trabajo vendrá dada por
1
 Q 
LDCP   0 
K 

y sus costos dependerán adicionalmente del capital fijo, es decir

TOT
CCP 
 wLDCP  r K  CCP Q0 , w, r ,  ,  , K 
Script:
% Costos Totales y Medios de Largo Plazo como envolventes
de los Costos de Corto Plazo

clc;
clear all;
w = 1;
r = 1;
alpha = 0.49;
beta = 0.48;
maxQ0 = 10;
maxKcp = 20;

%Tipo de gráfico;
tipo = 1; % 1 para costos totales y 2 para costos medios

% Generación de datos

costos1 = 1:1:maxQ0;
costos1 = costos1';

% Costos toales:

for Q0 = 1:1:maxQ0;

Llp=(Q0/(((alpha*w)/(beta*r))^alpha))^(1/(alpha+beta));
Klp=((alpha*w)/(beta*r))*Llp;
costos1(Q0,2) = w*Llp+r*Klp;
end

for Q0 = 1:1:maxQ0;
for Kcp = 1:1:maxKcp;
Lcp = ((Q0/(Kcp^alpha))^(1/beta));
costos1(Q0,2+Kcp) = w*Lcp+r*Kcp;
end
end
costos1

MATLAB para Economistas 33


MATLAB para Economistas
Expositor: Juan Carlos Aquino

% Costos medios:

costos2 = costos1;
for i = 1:1:maxQ0;
for j = 2:1:maxKcp+2;
costos2(i,j) = costos1(i,j)/costos1(i,1);
end
end

% Graficando las datos:

if tipo == 1;
for i = 2:maxKcp+2;
if i == 2;
plot(costos1(:,1),costos1(:,i),'-r*');
else
plot(costos1(:,1),costos1(:,i),'-b*');
end
pause(0.1);
hold on;
end
title('Costos Totales de Corto y Largo Plazo');
end

if tipo == 2;
for i = 2:maxKcp+2;
if i == 2;
plot(costos2(:,1),costos2(:,i),'-r*');
else
plot(costos2(:,1),costos2(:,i),'-b*');
end
pause(0.2);
hold on;
end
title('Costos Medios de Corto y Largo Plazo');
end

MATLAB para Economistas 34


MATLAB para Economistas
Expositor: Juan Carlos Aquino

MATLAB para Economistas 35


MATLAB para Economistas
Expositor: Juan Carlos Aquino

MATLAB para Economistas 36


MATLAB para Economistas
Expositor: Juan Carlos Aquino

MATLAB para Economistas 37


MATLAB para Economistas
Expositor: Juan Carlos Aquino

MATLAB para Economistas 38


MATLAB para Economistas
Expositor: Juan Carlos Aquino

MATLAB para Economistas 39


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 3
Elaboración y edición de gráficos

1. Introducción:

El tipo de gráfico que se muestra depende de la clase de datos involucrados y de


aquello que se quiera examinar acerca de los mismos. MATLAB predefine muchos
tipos de gráficos, tales como líneas, barras, histogramas, entre otros. Se dispone
también de gráficos en tres dimensiones, tales como superficies, planos cortantes y
líneas deslizantes.

Existen dos formas básicas de crear gráficos en MATLAB:

a. A través del uso de herramientas interactivas.


b. A través de la línea de comandos de trazado.

Los gráficos están compuestos de objetos, los cuales poseen propiedades


modificables que afectan la forma en la que los diversos componentes del gráfico se
ven y comportan.

Por ejemplo, los ejes usados para definir el sistema de coordenadas del gráfico tienen
propiedades que definen los límites de cada eje, la escala, color, etc. La línea usada
para crear un gráfico de línea posee propiedades tales como color, tipo de marcador
usado en cada punto de dato, estilo de línea, etc. Nótese que los datos empleados
para crear un gráfico de línea son propiedades de la línea. Por tanto, se puede
cambiar algún dato sin necesidad de crear un nuevo gráfico.

2. Ploteo (trazado de gráficos):

Dada la naturaleza de las posteriores aplicaciones en el curso, nos centraremos sólo


en determinadas instrucciones.

Sintaxis (comando plot)


plot(X,Y)
Traza los elementos del vector columna Y dentro del eje vertical versus los elementos
del vector X en eje horizontal.

MATLAB para Economistas 40


MATLAB para Economistas
Expositor: Juan Carlos Aquino

3
Ejemplo:
2
T = 120;
1

t = 1:1:T; t=t';
0

x = randn(T,1);
-1

plot(t,x);
-2

-3
0 20 40 60 80 100 120

Si se da el caso de estar trabajando pares de matrices (de igual tamaño), la instrucción


de trazado actuará con cada par de columnas como en el caso anterior.

6
Ejemplo:
5
T = [0 1 2; 20 30 40; 80
100 120]; 4

X = [0 1 2; 2 3 4; 4 5 6];
plot(T,X); 3

0
0 20 40 60 80 100 120

Si X o Y es un vector, entonces el vector es trazado contra cada una de las columnas


contenidas en la matriz.

Sintaxis:
plot(X1,Y1,...,Xi,Yi,...,Xn,Yn)
Grafica todas las líneas definidas por los pares (Xn,Yn).
(Clave: esta estructura es útil al definir las opciones que van a acompañar a cada
subgrupo Xi,Yi).

MATLAB para Economistas 41


MATLAB para Economistas
Expositor: Juan Carlos Aquino

6
Ejemplo:
5

4
>> plot(t,x,T,X)
3

-1

-2

-3
0 20 40 60 80 100 120

Nota: si en las líneas anteriores, cada dupla Xi,Yi es remplazada por la tripleta
Xi,Yi,spec, la instrucción aumentada consiste en determinar para las líneas
comprendidas el tipo, el símbolo marcador y el color de trazo. Desde luego, pueden
mezclarse las tripletas Xi,Yi,spec con los pares Xi,Yi; por ejemplo:

>> plot(X1,Y1,X2,Y2,spec,X3,Y3).

spec='estilomarcacolor' es una cadena de caracteres que puede tomar


elementos de las siguientes tres columnas; por su naturaleza debe ser insertado entre
comillas y sus detalles en un orden preestablecido:

>> plot(x,y,'EstiloColorMarca')

Donde:

Estilo Color Marca


– línea sólida (por defecto) r rojo + signo más
–– línea rayada g verde o círculo
: línea punteada b azul * asterisco
.– línea rayada y punteada c ciánico . punto
m magenta x cruz
y amarillo s cuadrado
k negro d diamante
w blanco ^ triangulo hacia arriba
v triangulo hacia abajo
> triangulo a la derecha
< triangulo a la izquierda
p estrella de cinco puntas
h estrella de seis puntas

MATLAB para Economistas 42


MATLAB para Economistas
Expositor: Juan Carlos Aquino

4
Ejemplo:
3

>> plot(t,x,'-.r*') 2

-1

-2

-3
0 20 40 60 80 100 120

6
Ejemplo:
5

>> plot(T,X,'-.b*')
4

0
0 20 40 60 80 100 120

3. Anotaciones en los gráficos:

Las anotaciones son el texto, flechas, notas y otras etiquetas añadidas a los gráficos
para ayudar a los observadores a captar lo que es importante en la data. Típicamente
se añaden anotaciones a los gráficos cuando se quieren mostrar a otras personas o
cuando se quiere guardarla como referencia posterior.

4. Exportando un gráfico:

La exportación de un gráfico está referida a la creación de una copia del mismo en un


formato de archivo de gráfico estándar (jpeg, por ejemplo). Dicho archivo puede ser
importado a un procesador de texto, incluirse en un documento HTML, o modificarse
en un editor de gráficos.

5. Grabar gráficos para ser recargados en MATLAB:

Hay dos formas de grabar gráficos que permitan salvar el trabajo invertido en su
preparación:
a. Grabar el gráfico como un archivo archivo-FIG.
b. Generar un código MATLAB que pueda recrear el gráfico (seleccionando la
opción Generate M-file del menú File para figuras).

MATLAB para Economistas 43


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 4

clc;
clear all;

% DOS DIMENSIONES:

% Comando plot:
% Graficando una columna versus otra
% Ejemplo 1:
T = 120;
t = 1:1:T; t=t';
x = randn(T,1);
plot(t,x);

% Podemos cambiar las especificaciones de linea


plot(t,x,'-.r*');

% Cuando tenemos matrices


% Ejemplo 2:
T = [0 1 2; 20 30 40; 80 100 120];
X = [0 1 2; 2 3 4; 4 5 6];
plot(T,X);

% Podemos también cambiar las especificaciones del grupo


plot(T,X,'-.b+');

% Graficando una función paramétrica:


T = 0:0.01:1;
plot(cos(2*pi*T),sin(2*pi*T));
axis square;

% Contorno o curvas de nivel


[X Y] = meshgrid(-3:0.1:3 -3:0.1:3);
contour(X,Y, X.^2 + Y.^2);
axis square;

% Podemos generar curvas asociadas a nivles específicos


contour(X, Y, X.^2 + Y.^2, [1 2 3]);

% Nótese que este comando debe tener al menos dos niveles


[X Y] = meshgrid(-1.1:0.01:1.1, -1.1:0.01:1.1);
contour(X, Y, (X.^2 + Y.^2).^2 - X.^2 + Y.^2, [0 0]);
axis square;
title('Relación x^2-y^2=(x^2+y^2)^2');

% El comando title etiqueta el trazado con una cadena de


caracteres
% especificada (el interpretador por defecto de "^" es la
inserción de un
% exponente, mientras qye "_" es empleado para un subíndice.

MATLAB para Economistas 44


MATLAB para Economistas
Expositor: Juan Carlos Aquino

% TRES DIMENSIONES:
T = -2:0.01:2;
plot3(cos(2*pi*T), sin(2*pi*T), T);
grid on

% Superficies en el espacio tridimensional: dos comandos


básicos:
% mesh (acoplamiento)
% surf (surface o superficie)

% Ejemplo: un punto de silla, punto silla o ensilladura.


% Instrucción mesh
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2);
Z = X.^2 - Y.^2;
mesh(X,Y,Z);
% Instrucción meshc (acompañada de contornos)
meshc(X,Y,Z);

% Instrucción surf (surface)


surf(X,Y,Z);

% Instrucción surfc (acompañada de contornos)


surfc(X,Y,Z);
colorbar;

% Nota:
% Si se desea graficar una superficie que no puede ser
representada de la
% z = f(x,y), una alternativa es parametrizar la superficien
bajo un
% sistema coordenado distinto (por ejempplo: coordenadas
cilinrdricas y
% espéricas); sin embargo estas prácticas son más empleadas en
ingeniería,
% razón por la cual no entraremos en mayores detalles.

% MATLAB también es capaz de comibinar varios graficos:


% subplot divide la ventana figura en figuras mas pequeñas, los
primeros
% dos argumetnos se refieren a la dimension de la disposisción
rectangular.

x = 0:0.05:40;
for j = 1:4;
subplot(2,2,j);
plot(x, besselj(j*ones(size(x)),x));
end

% Animaciones básicas:

% Forma 1: estilo COMETA (se detiene en la actualización de cada


dato)
t = 0:0.01*pi:2*pi;
figure;

MATLAB para Economistas 45


MATLAB para Economistas
Expositor: Juan Carlos Aquino

axis equal;
axis([-1 1 -1 1]);
hold on;
comet(cos(t), sin(t));

% Forma 2: estilo FRAME


x = 0:0.01:1;
for j = 0:50;
plot(x, sin(j*pi/5)*sin(pi*x)), axis([0, 1, -2, 2]);
M(j+1) = getframe;
end
movie(M);
% Para ver la animación en una ventana separada, se usa la orden
movieview(M);

% title('Aqui es donde va un título en particular')


% text(0.5, 0.5, 'Este es un texto que es fijado en una
ubicación puntual')

% xlabel('Sirve para asignar el rótulo al eje horizontal');


% ylabel('Sirve para asignar el rótulo al eje vertical');
% zlabel('Sirve para asignar el rótulo al eje de altura, en caso
de 3D');

% No es necesario contar con datos para hacer acabados


text(0.5, 0.5, '\leftarrow \Sigma')
text(0.2, 0.5, 'Segundo punto')
xlabel('Este es el eje x')
ylabel('Este es el eje y')

% Nota: se puede emplear TeX

t = 0:pi/20:2*pi;
y = exp(sin(t));
plotyy(t,y,t,y,'plot','stem')
xlabel('El eje X')
xlabel('El eje Y')
title('Los dos ejes')

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
xlabel('x=0:2\pi');
ylabel('Size of x'):
title('Gráfico de la función seno','FontSize',12);

% Múltiples gráficos dentro de una ventana


x = 0:pi/100:2*pi;
y = sin(x);
y2 = sin(x-0.25);
y3 = sin(x-0.5);
plot(x,y,x,y2,x,y3);
legend('sin(x)','sin(x-.25)','sin(x-.5)');

MATLAB para Economistas 46


MATLAB para Economistas
Expositor: Juan Carlos Aquino

% El comando hold permite añadir trazados a un gráficos ya


existentes
% hold on

% Controlando los ejes

% En 2D:
% Sintáxis : axis([xin xmax ymin ymax]);

% En 3D:
% Sintáxis : axis([xin xmax ymin ymax zmin zmax];

% Ejemplo:
t= -pi:pi/100:pi;
y=sin(t);
plot(t,y);
axis([-pi pi -1 1]);
xlabel(' -\pi \leq {\itt} \leq \pi ');
ylabel('sen(t)');
title('Gráfico de la función seno');
text(1, -1/3,'{\itNote the simetría impar.}');
grid on

% Ejemplo:
[X,Y] = meshgrid(-8:0.5:8);
R = sqrt(X.^2 + Y.^2);
Z = sin(R)./R;
mesh(X,Y,Z,'EdgeColor','black');

% Opciones adicionales
% Escala de valores
surf(X,Y,Z);
colormap hsv;
colorbar;

% Nivel de transparencia
surf(X,Y,Z);
colormap hsv % colormap por defecto: jet
alpha(1);

MATLAB para Economistas 47


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 4
Ecuaciones Diferenciales Ordinarias

Una ecuación diferencial es una ecuación en términos del operador derivada sobre una
función desconocida. Su solución viene dada por una función que satisfaga la igualdad
planteada, definida sobre cierta región. Si esta ecuación contiene sólo derivadas de una
función de una variable, entonces se dice que esta es ordinaria. Para este último caso,
una formulación generalmente empleada es la siguiente:

dy
 f (t ) y  g (t )
dt
y su solución viene dada por y (t )  e  F (t ) (k   g (t )e F ( t ) dt ) donde F (t )   f (t )dt .
En economía, muchas veces interesa estudiar no sólo las soluciones analíticas
y sus propiedades teóricas sino también, para casos más específicos, el
comportamiento de las funciones solución a través de los valores numéricos
imputados a los datos de un problema. MATLAB permite llevar a cabo esta
tarea, además de posibilitar la resolución de ecuaciones diferenciales con una
formulación más general que la previamente señalada. Esto se hace con una
serie de comandos ode (Ordinary Differential Equations), los cuales se
especializan en determinados “tipos” de problemas; no obstante lo anterior,
todos ellos comparten una estructura similar.

Dependiendo de la complejidad el problema que se tenga que resolver, se


empleará una de las funciones ode, estos son: ode23, ode45, ode113,
ode15s, ode23s, ode23t, ode23tb. Si bien todas estas funciones comparten
una sintaxis en común, nos basaremos en un ejemplo de la función más
empleada a través de la siguiente ilustración.

Sea el problema de resolver la siguiente ecuación diferencial:

dy dy
 f (t ) y   (t 2  t  3) y  3sen(t  0.25)  g (t )
dt dt

es decir, f (t )  t 2  t  3 y g (t )  3sen(t  0.25) .

MATLAB para Economistas 48


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Solución en MATLAB:

Primero, se definen los datos del problema, como f(t) y g(t):

ft = linspace(0,5,25)
% Genera el horizonte en t para f , de 0 a 5 con 25 elementos.

f = ft.^2 - ft – 3
% Genera f (t )

gt = linspace(1,6,25)

% Genera el horizonte en t para g , de 1 a 6 con 25 elementos.

g = 3*sin(gt-0.25)
% Genera g (t ) .

Se debe escribir una función de archivo-M para interpolar el conjunto de datos,


especificados líneas arriba para así obtener el valor de los términos independientes del
tiempo en un momento específico:

function dydt = myode(t,y,ft,f,gt,g)

f = interp1(ft,f,t)
% Interpola el conjunto de datos (ft,f) en el momento t.

g = interp1(gt,g,t)
% Interpola el conjunto de datos (gt,g) en el momento t.

dydt = -f.*y + g
% Evaluar la EDO en el momento t.

Se debe llamar a la función definida como myode.m con la función ode45 de


MATLAB especificando el tiempo como el primer argumento:

Tspan = [1 5]
% Horizonte de solución de t=1 a t=5.

IC = 1
% Condición inicial y(t=0) = 1

[T Y] = ode45(@(t,y) myode(t,y,ft,f,gt,g),Tspan,IC)
% Solución mediante el comando ODE.

MATLAB para Economistas 49


MATLAB para Economistas
Expositor: Juan Carlos Aquino

plot(T, Y)
title('Plot of y as a function of time')
xlabel('Time')
ylabel('Y(t)')
% Se grafica la solución y como dependiente del tiempo (es decir, y (t ) ).
Gráfico de y como función del tiempo
25

20

15
Y(t)

10

-5
1 1.5 2 2.5 3 3.5 4 4.5 5
Tiempo

MATLAB para Economistas 50


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Simulación de Montecarlo

En diversas aplicaciones es frecuente estudiar las propiedades de variables endógenas


que dependen de variables exógenas aleatorias. Si conocemos cómo se distribuye la
variable exógena podremos conocer la distribución de la variable endógena. En muchas
situaciones se conoce la forma exacta de la distribución de la endógena, pero en muchas
otras situaciones debemos encontrar sus propiedades (momentos) mediante sucesivas
repeticiones en las realizaciones (escenarios) de la variable endógena, de tal forma que
se obtenga una nueva distribución. Esto se logra mediante un número grande de
realizaciones en la variable (usualmente por encima de las 10,000 repeticiones).

Simbólicamente, si X  f ( ) donde  posee una distribución conocida podemos


generar artificialmente multiples realizaciones de la variable X de la siguiente
manera:

X 1  f ( 1 )
X 2  f ( 2 )

X N  f ( N )

donde N es un número usualmente no menor a 10,000. Esta es la idea básica de las


Simulación de Montecarlo. Para ilustrar mejor el concepto, haremos referencia a dos
ejemplos.

A. Distribución del estimador de Mínimos Cuadrados Ordinarios


(archivo MontecarloMCO.m):

Considérese el modelo de regresión lineal clásico:

yt     xt   t

donde el estimador de mínimos cuadrados es de la forma:

N N

 ( yt  y)( xt  x)  (   x   t t  y )( xt  x)
es ˆMCO  t 1
N
 t 1
N

 ( xt  x)
t 1
2
 ( x  x)
t 1
t
2

Si asumimos que la variable xt es no estocástica y fija en muestras repetidas,


tenemos que el único elemento estocástico en el modelo viene dado por  t . Esta es la
razón por la cual el término se convierte en una variable aleatoria. Para realizar
inferencia, necesitamos conocer la distribución de  t , la cual asumimos como normal.

MATLAB para Economistas 51


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Los resultados del ejercicio de simulación obtenidos confirmar los resultados teóricos
referidos a las insesgadez y eficiencia del estimador.

B. Distribución de una prueba de Raíz Unitaria


(archivo MontecarloRU.m):

Sea el modelo

yt   . yt 1   t

donde el término  t es bien comportado. Bajo no estacionariedad estocástica (es


decir,   1 ) la inferencia estadística deja de ser la convencional, para dar lugar a otro
tipo de distribuciones límite y a una nueva teoría asintótica. El principal resultado viene
dado por:

T (ˆ  1)  (1 / 2)(W (1)  1) /  W r  dr


2

donde ̂ es el estimador por mínimos cuadrados y W r  es un proceso de Wiener o


Movimiento Browniano estándar. El símbolo  denota convergencia en distribución,
esta integrale estocástica constituye a su vez una variable aleatoria susceptible de ser
simuladas bajo la misma metodología.

MATLAB para Economistas 52


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Sesión 5
Software for RE Analysis

La siguiente presentación consiste en una versión traducida del documento “Software


for RE Analysis”, perteneciente a Bennet McCallum y disponible en:
http://public.tepper.cmu.edu/facultydirectory/FacultyDirectoryProfile.aspx?id=96

Software para Análisis bajo Expectativas Racionales

El presente manual describe un conjunto de archivos en MATLAB para formular,


resolver, y analizar modelos lineales bajo Expectativas Racionales (ER). Se provee
una guía para su instalación y su uso. Se trata de archivos MATLAB del tipo .m, los
cuales deberán ser usados dentro del entorno MATLAB estándar. El archivo principal
es solvek.m el cual es un algoritmo para calcular soluciones bajo ER, en la manera
descrita en McCallum (1998, 1999). Es una versión modificada de un programa escrito
por Paul Klein, cuyo análisis más detallado puede ser encontrado en Klein (2000).

Aunque solvek.m es el archivo principal, no es el único con en el que el usuario


trabajará. En lugar de ello, este empleará mucho de su tiempo escribiendo o
modificando archivos con modelos, lo cuales especifican el modelo a ser resuelto por
solvek.m. Adicionalmente, se empleará un tiempo considerable analizando las
propiedades del modelo a través del uso de los archivos que conducen las
simulaciones estocásticas y grafican las funciones impulso respuesta, basadas en una
solución previamente obtenida. El paquete actual incluye archivos llamados sim33p.m
e impo.m para dichos propósitos. Una muestra de archivo de modelo también se
incluye, para proveer un punto de partida para el usuario. Este es llamado
modfile1.m. Más adelante se describen algunos ejercicios iniciales.

El primer paso consiste en instalar los archivos .m en la respectiva carpeta de


MATLAB. Esto puede diferir de computadora en computadora, lo importante es que los
archivos deben encontrarse en la ruta especificada. Los siguientes archivos deben ser
instalados: solvek.m, reorder.m, qzswitch.m, sim33p.m, autocor.m, impo.m,
y modfile1.m.

Adicionalmente, si la instalación de MATLAB no incluye Control Toolbox, será


necesario instalar dlsim.m y dimpulse.m.

Si Control Toolbox se encuentra en la computadora, es mejor no instalar estos


archivos. Es importante además que estos archivos sean instalados como archivos .m
y no como texto (archivos .txt). Se recomienda que el usuario imprima los archivos
solvek.m, impo.m y sim33p.m y lea las introducciones.

Para comenzar, el usuario debería correr el archivo modefile1.m. Para lograrlo,


simplemente debe digitar “modfile1” (sin las comillas y ni extensión .m en la Ventana
de Comandos y presionar Enter. Si el archivo se ejecuta sin inconvenientes, el cursor
se moverá hacia la siguiente línea y no arrojará resultado alguno.

Para verificar si el modelo ha sido resuelto, el usuario puede digitar “m” en la Ventana
de Comandos. Una matriz llamada m por solvek.m, será reportada. Esta es la matriz
denotada por M en la sección introductoria de solvek.m. Así, esto consiste en una

MATLAB para Economistas 53


MATLAB para Economistas
Expositor: Juan Carlos Aquino

parte crucial de la solución. Las otras partes son las matrices N, P y Q, las cuales
pueden ser obtenidas al digitar “n”, “p” o “q” en la Ventana de Comandos. Si estos
pasos son satisfactorios, el usuario debería modificar modfile1.m mediante el
cambio en el valor de algún parámetro y la solución del modelo modificado. Por
ejemplo, el parámetro mu1 de la regla de política puede ser cambiado. Después de
hacerlo, el archivo modfile1.m debe ser cambiado, quizás bajo un nuevo nombre
con el fin de retener un archivo sin modificación. Entonces se digita el nuevo nombre y
se reporta la matriz m; nótese que sus valores han cambiado. Cambios más
sustanciales serán discutidos en líneas posteriores.

Luego, el usuario debiera graficar las funciones impulso-respuesta. Después de


resolver un modelo, se digita impo en la Ventana de Comandos. Si todo marcha bien,
un conjunto de funciones impulso respuesta aparecerá en la pantalla. Estas son las
respuesta a un shock particular, el cual es especificado en una de las primeras líneas
del archivo impo.m. El usuario debe dirigirse a dicho archivo para saber qué shock
está siendo usado, entonces lo cambia y observa la nuevas impulso-respuestas. En
este contexto, note que el archivo impo.m incluye un enunciado del tipo “gtext” que
origina que una cadena de texto sea incluida sobre el gráfico en una ubicación
escogida por el usuario (al posicionar una marca movible “+” con el mouse y haciendo
click). Si este enunciado se encuentra activo (es decir, no se encuentra como
comentario en el archivo), este texto debe ser posicionado y clickeado antes de que el
usuario pueda proseguir de manera habitual. El archivo impo.m es un archivo muy
simple para generar funciones impulso respuesta. El usuario puede examinarlo y
aprender cómo añadir o cambiar paneles, o cambiar aquellas variables que son
graficadas en cada uno de los paneles existentes. Es posible extender los usos del
archivos en diferentes direcciones, como graficar respuestas a diferentes shocks en
varios paneles e inclusive la exhibición de gráficos para dos modelos en cada panel.

Esta es una forma de ejecutar un archivo .m, digitando simplemente su nombre, sin el
sufijo, en la Ventana de Comandos.

El archivo sim33p.m implementa las simulaciones estocásticas de un modelo


resuelto. El usuario debe contar con una concordancia entre este y el archivo del
modelo, así como con la numeración de los diferentes shocks. Entonces, las
desviaciones estándar de las innovaciones de los varios AR(1) deben ser ingresados
en el archivos sim33p.m, y también la lista de nombres de las variables endógenas
cuya varianza y covarianza son deseados. La porción introductoria de sim33p.m debe
ser estudiada cuidadosamente para apreciar cómo se realiza y aprender las múltiples
opciones con relación al resultado que es generado. Nótese que los coeficientes AR
de los términos de shock son especificados en el archivo de modelo, no en sim33p.m.

Después de alcanzar satisfactoriamente este punto, el usuario querrá aprender cómo


especificar modelos. Un primer paso es modificar el modelo en modfile1.m en
formas más substanciales que simplemente cambiar el valor de algún parámetro. Al
hacer esto, el usuario puede encontrar de mucha ayuda el Apéndice A, el cual explica
cómo generar variables rezagadas, variables de expectativas, etc.

Sin embargo primero se necesitará entender la forma del modelo entendido por

solvek.m. Para esto, se debe estudiar las líneas introductorias de solvek.m.

MATLAB para Economistas 54


MATLAB para Economistas
Expositor: Juan Carlos Aquino

Una complicación es que al incluir una variable predeterminada en las lista de aquellas
cuya respuesta es estudiada se requiere que los valores simulados sean tomados de
la matriz X en lugar de la matriz Y.

Una vez más, aparece una complicación si una variable predeterminada está en la
lista a ser estudiada.

Precisamente, para entender el archivo modfile1.m, se necesitará recurrir al


apéndice.

Básicamente, el formato es AEt xt 1  Bxt  Czt donde xt es un vector de variables


endógenas, xt   yt ' kt ' , donde kt es predeterminado y yt es no-predeterminado.
También zt es un vector de variables exógenas generadas por un proceso AR(1)
multivariado. Para especificar un modelo, el usuario debe decidir el ordenamiento de
las variables en xt (y en zt ), especificar las dimensiones de A, B y C e ingresar sus
valores no nulos, el número de variables en kt debe estar correctamente especificado
y también los coeficiente de la matriz AR(1), la cual es llamada phi en el programa. El
formato puede, al margen de las apariencias, acomodarse virtualmente a cualquier
otra especificación de un modelo RE lineal (al definirse nuevas variables que son
valores rezagas de otras, etc.).

Tanto modfile1.m como el Apéndice A emplean un truco de programación para


guardar registro de la ubicación de las variables en el vector xt . Cada variable recibe
un nombre que el usuario puede recordar, con lo cual el número posición en xt para la
variable es llamada por su nombre pero con una i adjuntada en su inicio. Por ejemplo,
el nivel de precios el nivel de precios puede ser considerado como p en cuyo caso el
enunciado es ip=3 podría convertir a p en la tercera variable en xt . La ventaja radica
en que el usuario no tiene que recordar el índice de las variables al ingresar las
ecuaciones del modelo. Él hace esto al especificar los coeficientes no nulos en las
matrices A, B y C. Él también trabajará usualmente sobre una ecuación por vez, de tal
manera que pueda recordar fácilmente el índice de fila a ser ingresado. Entonces, para
el índice de columna, él no ingresa un número directamente sino el “nombre” como ip,
al cual se le ha asignado un número anteriormente. El examen del archivo
modfile1.m debería hacer esta práctica entendible.

El ordenamiento escogido para las variables en es irrelevante excepto en que todas la


variables yt (no-predeterminadas) deben venir antes de las variables kt
(predeterminadas).

Puede ser de utilidad escribir, en notación macroeconómica, las ecuaciones

estructurales del modelo que están representadas por modfile1.m. Estas son

similares a aquellas en la forma más sencilla reportada en McCallum (2001), mas no

son idénticas. Las ecuaciones son:

MATLAB para Economistas 55


MATLAB para Economistas
Expositor: Juan Carlos Aquino

(IS) yt  b0  b1 Rt  Et pt 1   Et yt 1  vt


(AS) pt  0.5Et pt 1  pt 1    .g t  ut
(MP) Rt  1   3 1pt   2 Et 1 g t    3 Rt 1  et
(Def) g t  yt  y t
(exog) y t  0.95 y t 1   t

con vt , ut , et y  t shocks del tipo ruido blanco. Los valores para los parámetros son
b0  0 , b1  0.5 ,   0.22 , 0  0 , 1  1.99 ,  2  0 , 3  0.8 .

Referencias

Klein, Paul, “Using the generalized Schur form to solve a multivariate linear rational
expectations model,” Journal of Economic Dynamics and Control 24 (September
2000), 1405-1423.
McCallum, Bennett T., “Solutions to linear rational expectations models: a compact
exposition,” Economics Letters 61 (November 1998), 143-147.
_________________, “Role of the minimal state variable criterion in rational
expectations models,” International Tax and Public Finance 6 (November 1999), 621-
639. Also in International Finance and Financial Crises: Essays in Honor of Robert P.
Flood, Jr., edited by Peter Isard, Assaf Razin, and Andrew K. Rose, Kluwer Academic
Publishing, 1999.
________________, “Should monetary policy respond strongly to output gaps?”
American Economic Review Papers and Proceedings 91 (May 2001), 258-262.

Apéndice A

Definición de variables para su uso en el programa de MATLAB solvek.m.

Notation: Et  j xt  k es denotado por ejxk, excepto para 0 que no esta considerado


para j o k. También xt  j se escribe como xlagj, excepto que xlag1 se escribe
xlag.

1. Definir xt 1 a partir de xt (xlag)


A(r,ixlag) = 1; y especifique que xlag es una variable predeterminada
B(r,ix) = 1;

2. Definir Et xt 1 (ex1)
A(r,ix) = 1;
B(r,iex1) = 1;

3. Definir Et 1 xt (e1x) mediante el rezago de Et xt 1


A(r,ie1x) = 1; y especificar que e1x es predeterminada
B(r,iex1) = 1;
a. Definir Et 1 xt en un paso (e1x)

MATLAB para Economistas 56


MATLAB para Economistas
Expositor: Juan Carlos Aquino

A(r,ie1x) = 1; e1x predeterminada


A(r,ix) = -1;

4. Definir Et xt  2 (ex2)
A(r,iex1) = 1; emplea la definición en 2 y la ley de expectativas iteradas
B(r,iex2) = 1;

5. Definir Et 1 xt 1 (e1x1) mediante el rezago de Et xt  2


A(r,ie1x1) = 1; y e1x1 predeterminada
B(r,iex2) = 1;
a. Definir Et 1 xt 1 en un paso (con Et xt 1 ya definida)
A(r,ie1x1) = 1; e1x1 predeterminada
A(r,iex1) = -1;

MATLAB para Economistas 57

También podría gustarte