0% encontró este documento útil (0 votos)
153 vistas6 páginas

Cge Models Matlab

Este documento presenta una introducción a un curso sobre modelos de equilibrio general computable resueltos con MatLab. Explica que estos modelos tienen "cajas negras" que deben abrirse para ver cómo se resuelven, y que el objetivo del curso es construir y resolver modelos sencillos paso a paso. También introduce el algoritmo de Newton-Raphson para encontrar soluciones numéricas y dos ejemplos sencillos resueltos con MatLab.

Cargado por

Olmedo Farfan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
153 vistas6 páginas

Cge Models Matlab

Este documento presenta una introducción a un curso sobre modelos de equilibrio general computable resueltos con MatLab. Explica que estos modelos tienen "cajas negras" que deben abrirse para ver cómo se resuelven, y que el objetivo del curso es construir y resolver modelos sencillos paso a paso. También introduce el algoritmo de Newton-Raphson para encontrar soluciones numéricas y dos ejemplos sencillos resueltos con MatLab.

Cargado por

Olmedo Farfan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Lecciones de Equilibrio General Computable con MatLab

Gonzalo Fernndez de Crdoba Martos Esta versin: 28 de julio de 2002

1
1.1

Leccin primera
Objetivo del curso

Muchos de los modelos que se utilizan en la actualidad para plantear y resolver problemas macroeconmicos son modelos de equilibrio general computables. Estos modelos deben ser resueltos con la ayuda de un ordenador puesto que salvo en raras excepciones estos modelos tienen soluciones analticas. Por tanto, en la mayora de las ocasiones nos encontraremos con complicados modelos en los que el lector no ve cmo han sido resueltos, es decir, estos modelos tienen una caja negra en las que se introducen un conjunto de condiciones y de las que sale un conjunto de soluciones. El objetivo fundamental de este curso es el de abrir la caja y ver qu sucede en su interior. Un ejemplo de modelo de equilibrio general dinmico computable y determinista con una enorme caja negra es el de Fernndez de Crdoba y Kehoe (1999). En las siguientes lecciones empezaremos a construir y resolver modelos sencillos que vayan aproximndose al modelo de FdCK introduciendo y explicando los elemento que dieron lugar a este modelo. Este curso de computacin de modelos de equilibrio general dinmico deterministas est dirigido a estudiantes de doctorado que quieren aprender a modelizar y a resolver con la ayuda de un ordenador modelos computables. No se supone ningn conocimiento previo de computacin y por ello las primeras lecciones se dedican a mostrar la lgica de los algoritmos de optimizacin basados en el mtodo de Newton explicando cmo se confeccionan los programas partiendo de los comandos ms bsicos. Todos los cdigos que R a continuacin se presentan estn escritos en MatLab : La razn es que MatLab es un lenguaje sucientemente exible y fcil de aprender, permite construir nuestras propias funciones con sencillez y el soporte grco es excelente. Adems son muchos los programas ya construidos en MatLab por economistas.

1.2

La lgica del algoritmo de Newton

Cualquier modelo que planteemos a lo largo del curso se reducir despus de unas transformaciones a un sistema de ecuaciones que estar formado por las condiciones de primer orden del problema y por las restricciones de factibilidad. Podemos describir este sistema de n ecuaciones en n incgnitas como F : Rn ! Rn: Nuestro problema ser entonces encontrar un vector 2

b = (x b 1; ; x b n ) de Rn tal que su imagen por F : Rn ! Rn sea F (x b ) = 0: El x algoritmo basado en el mtodo de Newton-Raphson pretende encontrar una b) = 0: Para encontrar el x b solucin del solucin a este sistema de la forma F ( x sistema se aproxima la funcin a travs de la primera expansin de Taylor a la funcin F . F (x) = F (x) + J (x)(x x); (1)

donde J (x) es la matriz jacobiana de F evaluada en x; es decir,


2 4

J (x) = 6

F 11 (x) F12(x) 6 6 F 21 (x) F22(x)

F n1 (x) Fn2(x)

F1n(x) F2n(x) 7 7 Fnn(x)

7; 5

i (x ) donde Fij (x) = @F : @x j Dado que estamos buscando un cero de la ecuacin F (x), la ecuacin 1 b y escribirla como, podemos evaluarla en x

El algoritmo funcionara de la siguiente manera: 1. Proponemos una semilla x1 y evaluamos la funcin F (x1) y J 1(x1) , para calcular x2 = x1 J (x1 )1 F (x1) 2. Fijamos un nivel de tolerancia " y calculamos alguna distancia entre x2 y x1 . Si la distancia es inferior a ", entonces nos quedamos con x2 como solucin. En caso contrario volvemos al paso 1. y evaluamos la funcin F (x2 ) y J 1( x2 ), para calcular x3 = x2 J (x2 )1 F (x2) Realizamos estas operaciones tantas veces como sea necesario hasta que encontremos un xt y xt+1 tales que la distancia sea menor que el nivel de tolerancia. 1.2.1 Ejemplo 1

b = x J (x)1F (x) : x

Veamos ahora cmo funciona con un ejemplo sencillo. Queremos encontrar los ceros de la funcin y = (x 4)(x + 4): 3

La simple inspeccin visual muestra que los ceros de la funcin se encontrarn en x = 4 y x = 4: Ahora vamos a construir nuestro primer programa de MatLab para encontrar esas soluciones.

%ej1.m %Este programa resuelve la ecuacin sencilla del ejemplo 1 %La ecuacin es: y = (x 4)(x + 4) clear %Punto inicial x(1) = -10; %Mximo nmero de iteraciones maxit=1000; for s=1:maxit J(s) = 2*x(s); x(s+1) = x(s)-J(s)^(-1)*(x(s)-4)*(x(s)+4); if abs(x(s+1)-x(s))<1e-20; break; end end if s>=maxit sprintf(Atencin: Nmero mximo de %g iteraciones alcanzado, maxit) end sprintf(La solucin es %g, x(s))

El programa ha empezado con una semilla x1 = 10; y por tanto la solucin que el programa nos dar es x = 4: Si hubiramos introducido como semilla el valor x1 = 10; el programa habra dado como solucin x = 4: En este simple ejemplo vemos algo esencial del algoritmo de Newton: las semillas son de una importancia capital para encontrar la solucin a un problema. La localizacin de la semilla en relacin a la solucin tiene un impacto en la respuesta del programa. Cuanto ms cerca est la semilla a la solucin que buscamos tanto mejor. En este sencillo problema de hallar los ceros de una funcin de R en R hemos podido computar el jacobiano sin ningn problema, pero si la funcin hubiera sido de Rn en Rn con n muy grande entonces computar el jacobiano se puede convertir en un problema tan complicado como el de hallar los ceros del sistema. Para resolver este problema podemos computar las derivadas numricas de la funcin. La denicin de derivada nos dice que F (x) F (x1 + h; x2; ; xn) ; h1 !0 h1 F (x) F (x1; x2 + h; ; xn) J2(x) = lim ; h2 !0 h2 . . . . . = . F (x) F (x1; x2 ; ; xn + h) Jn(x) = lim ; hn !0 hn J1(x) = lim donde Ji(x) es el vector columna con las n derivadas parciales con respecto a xi: Por tanto J ( x) = [ J1 (x); J2 (x); ; Jn(x)]: Podemos jar en un ordenador un incremento h sucientemente pequeo como para poder escribir F (x) F (x1 + h1; x2; ; xn ) ; h1 F (x) F (x1; x2 + h2; ; xn ) J2( x) ; h2 . . . . . . F (x) F (x1; x2 ; ; xn + hn ) Jn( x) ; hn J1( x) y de esta manera aproximar las derivadas parciales.

1.2.2

Ejemplo 2

Ahora queremos encontrar los ceros de la funcin del Ejemplo 1, pero haciendo uso de una aproximacin numerica a la derivada de y con respecto a x: Para ello construimos el siguiente programa en el que denimos un cociente incremental para el jacobiano y un incremento que jamos en h = 1e-8. %ej2.m %Este programa resuelve por el mtodo de Newton-Raphson la %ecuacin trivial y = (x + 4) (x 4) haciendo uso de una %aproximacin numrica a la derivada de y con respecto a x

clear %Punto inicial x0 = -10; %Nmero mximo de iteraciones permitido maxit = 1000; %Incremento h = 1e-8; x(1) = x0; for s=1:maxit J(s) = 1/(2*h)*((x(s)+h+4)*(x(s)+h-4)-(x(s)-h+4)*(x(s)-h-4)); x(s+1) = x(s)-J(s)^(-1)*(x(s)-4)*(x(s)+4); if abs(x(s+1)-x(s))<1e-20; break; end end if s>=maxit sprintf(Atencin: Numero mximo de %g iteraciones alcanzado, maxit) end sprintf(La solucin es %g, x(s))

También podría gustarte