4 votos

Análisis numérico en economía

Recientemente me he interesado por el análisis numérico en macroeconomía. En concreto, he estado intentando aprender algoritmos como la "iteración hacia atrás", el "método de disparo", etc., para resolver numéricamente un modelo de control óptimo, más concretamente un modelo de crecimiento.

¿Podría darme algunas referencias de libros de texto de análisis numérico introductorio e intermedio?

3voto

Pavel Feldman Puntos 2140

También puede encontrar el libro de Kenneth Judd sobre análisis numérico aquí . Es uno de los libros más conocidos y notorios en ese campo.

2voto

dp. Puntos 39

Lee la teoría y luego intenta codificar. Pero tienes suerte, porque yo estaba ansioso por desarrollar e implementar el algoritmo de disparo hacia adelante a mí mismo y por lo tanto proporcionarla.

Crecimiento óptimo

(Véase Ben Moll para más detalles).

Modelo de crecimiento óptimo en tiempo continuo lee \begin{align} &\max_c\int^\infty_0 e^{-\rho t}u(c)dt\\ \text{s.t.}~~~& \dot k = f(k) - \delta k - c\\ &c\in[0,f(k)]\\ &k(0) = k_0 \end{align} donde \begin{align} f(k)&=Ak^\alpha\\ u(c)&=\frac{c^{1-\sigma}}{1-\sigma}. \end{align} A partir de las condiciones de primer orden derivamos un sistema de ecuaciones diferenciales \begin{align} \dot k &= f(k) - \delta k - c\\ \dot c &= \frac{c}{\sigma}(f'(k) - \delta - \rho) \end{align}

Puntos fijos dados en \begin{align} \dot k &= 0 \quad \Longrightarrow\quad \tilde k = \left(\frac{\alpha A}{\delta+\rho}\right)^\frac{1}{1-\alpha}\\[2mm] \dot c &= 0 \quad \Longrightarrow\quad \tilde c = f(\tilde k) -\delta \tilde k \end{align}

Dado que el sistema es estable en el punto de silla de montar, sólo hay una trayectoria que converge al estado estacionario único. Las existencias iniciales están dadas y, por tanto, son óptimas $k^*(0) = k_0$ . Nuestro objetivo es resolver $c^*(0)$ .

La idea de disparar es adivinar $c(0)$ y luego iterar en el tiempo. Si las trayectorias temporales conducen al estado estacionario hemos terminado, de lo contrario tenemos que intentar una conjetura diferente. En primer lugar tenemos que discretizar las ecuaciones diferenciales. (El ordenador trabaja con pasos discretos. Sin embargo, si te gusta trabajar con las ecuaciones diferenciales, prueba el solucionador de valores límite de Matlab. bvp4c() . Esto resulta bastante fácil. Como no tenemos ni idea de lo que hace el solucionador, nos gustaría resolver las ecuaciones "manualmente"). La diferencia directa de alguna función $\dot x$ se define como \begin{align} \dot x(t) :\approx \frac{x(t+1)-x(t)}{\Delta t} \end{align}

que da \begin{align} k(t+1) &= \Delta t(f(k(t)) - \delta k(t) - c(t)) + k(t)\\[2mm] c(t+1) &= \Delta t\frac{c(t)}{\sigma}(f'(k(t)) - \delta - \rho) + c(t). \end{align}

Dado que la probabilidad de acertar $c^*(0)$ tiende a cero, necesitamos aplicar un algoritmo que converja hacia el valor verdadero.

Disparos

El siguiente fragmento de código está escrito en Matlab y presenta la idea principal.

c_lo = 0;
c_hi = A*k(1)^a;
i = 0;
dist_k = tol + 1;
dist_c = tol + 1;
while (i < I) & (dist_k > tol | dist_c > tol);
c(1) = (c_lo + c_hi)/2;
    for t = 1:T-1;
        k(t+1) = del_t*(A*k(t)^a - d*k(t) - c(t)) + k(t);
        c(t+1) = del_t*c(t)/s*(a*A*k(t)^(a-1) - p - d) + c(t);
        if c(t+1) > A*k(t+1)^a
           c(t+1) = A*k(t+1)^a;
        elseif c(t+1) < 0 
               c(t+1) = 0;
        end
    end
    if k(T) > k_ss & c(T) < c_ss
        c_lo = c(1);
        elseif k(T) < k_ss & c(T) < c_ss
        c_hi = c(1);
        elseif k(T) < k_ss & c(T) > c_ss
        c_hi = c(1);
    end
dist_k = abs(k(T) - k(T-1));
dist_c = abs(c(T) - c(T-1));
i = i + 1;
end
  • Por falta de tiempo no puedo dar una explicación detallada. Espero que se explique por sí sola. Puede que responda a preguntas concretas que demuestren cierto esfuerzo.

Problema del valor límite

Como he mencionado anteriormente podemos resolver fácilmente el sistema aplicando el solucionador de problemas de valores límite de Matlab bvp4c . Utilización de $\tilde c = c(T)$ como condición terminal tenemos dos EDOs y dos condiciones de contorno.

% differential equations with y(1) = k, y(2) = c
dy = @(t,y) [A*y(1)^a - d*y(1) - y(2); ...     % dk/dt;
             y(2)/s*(a*y(1)^(a-1) - p - d)];   % dc/dt
% boundary conditions
bc = @(y0,yT) [y0(1) - k0;     % initial condition
               yT(2) - c_ss];  % terminal condition

solinit = bvpinit(linspace(0,T,10), [k0 c0]);   % initital guess
sol = bvp4c(dy, bc, solinit);                   % call solver
t = linspace(0,T)';  % time axis
y = deval(sol,t)';   % call solution values
k = y(:,1);    % transform variables
c = y(:,2);    % transform variables

1voto

Dr.Dredel Puntos 684

Recursive Macroeconomic Theory no es un libro de "análisis numérico" propiamente dicho, pero tiene una excelente exposición del algoritmo de disparo en un modelo de crecimiento en el capítulo 11 de la segunda edición (no creo que los números de los capítulos hayan cambiado mucho, pero el capítulo se llama "Fiscal Policies in the Nonstochastic Growth Model"). Yo recomendaría empezar por ahí.

Referencias

Ljungqvist, Lars y Sargent, Thomas J. "Teoría macroeconómica recursiva". MIT Press, Cambridge, Massachusetts, 2000.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X