Deterministic Dynamics and Introduction to Growth Models

Undergraduate Computational Macro

Jesse Perla

University of British Columbia

Overview

Motivation and Materials

  • In this lecture, we will introduce (non-linear) dynamics
    • This lets us explore stationarity and convergence
    • We will see an additional example of a fixed point and convergence
  • The primary applications will be to simple models of growth, such as the Solow growth model.

Materials

using LaTeXStrings, LinearAlgebra, Plots, NLsolve, Roots
using Plots.PlotMeasures
default(;legendfontsize=16, linewidth=2, tickfontsize=12,
         bottom_margin=15mm)

Difference Equations

(Nonlinear) Difference Equations

\[ x_{t+1} = h(x_t) \]

  • A time homogeneous first order difference equation
    • \(h : S \to S\) for some \(S \subseteq \mathbb{R}\) in the univariate case
    • \(S\) is called the state space and \(x\) is called the state variable.
    • Time homogeneity: \(h\) is the same at each time \(t\)
    • First order: depends on one lag (i.e., \(x_{t+1}\) and \(x_t\) but not \(x_{t-1}\))

Trajectories

  • An initial condition \(x_0\) is required to solve for the sequence \(\{x_t\}_{t=0}^\infty\)
  • Given this, we can generate a trajectory recursively \[ \begin{aligned} x_1 &= h(x_0) \\ x_2 &= h(x_1) = h(h(x_0)) \\ x_{t+1} &= h(x_t) = h(h(\ldots h(x_0))) \equiv h^t(x_0) \end{aligned} \]
  • If not time homogeneous, we can write \(x_{t+1} = h_t(x_t)\)
  • Stochastic if \(x_{t+1} = h(x_t, \epsilon_{t+1})\) where \(\epsilon_{t+1}\) is a random variable

Linear Difference Equations

\[ x_{t+1} = a x_t + b \] For constants \(a\) and \(b\). Iterating, \[ \begin{aligned} x_1 &= h(x_0) = a x_0 + b\\ x_2 &= h(h(x_0)) = a (a x_0 + b) + b = a^2 x_0 + a b + b\\ x_3 &= a(a^2 x_0 + a b + b) + b = a^3 x_0 + a^2 b + a b + b\\ \ldots & \\ x_t &= b \sum_{j=0}^{t-1} a^j + a^t x_0 = b \frac{1 - a^t}{1 - a} + a^t x_0 \end{aligned} \]

Convergence and Stability for Linear Difference Equations

  • If \(|a| < 1\), take limit to check for global stability, for all \(x_0\) \[ \lim_{t\to\infty} x_t = \lim_{t\to\infty}g^{t-1}(x_0) = \lim_{t\to\infty}\left(b \frac{1 - a^t}{1 - a} + a^t x_0\right) = \frac{b}{1 - a} \]
  • If \(a = 1\) then diverges unless \(b=0\) and \(|a| > 1\) diverges for all \(b\)
  • Linear difference equations are either globally stable or globally unstable
  • Nonlinear difference equations may be locally stable
    • For some \(|x_0 - x^*| < \epsilon\) for some \(x^*\) and \(\epsilon > 0\). Global if \(\epsilon = \infty\)

Nonlinear Difference Equations

  • We can ask the same questions for nonlinear \(h(\cdot)\)
  • Keep in mind the connection to the fixed points from the previous lecture
    • If \(h(\cdot)\) has a unique fixed point from any initial condition, it tells us about the dynamics
  • Connecting to contraction mappings etc. would help us be more formal, but we will stay intuitive here
  • Let us investigate nonlinear dynamics with a classic example

Solow Growth Model

Models of Economic Growth

  • There are different perspectives on what makes countries grow
    • Malthusian models: population growth uses all available resources
    • Capital accumulation: more capital leads to more output, tradeoff of consumption today to build more capital for tomorrow
    • Technological progress/innovation: new ideas lead to more output, so the tradeoffs are between consumption today vs. researching technologies for the future
  • The appropriate model depends on country and time-period
    • Malthusian models are probably most relevant right up until about the time he came up with the idea

Exogenous vs. Endogenous

  • In these, the tradeoffs are key
    • Can be driven by some sort of decision driven by the agent’s themselves (e.g., government plans, consumers saving, etc.) endogenously
    • Or exogenously choose, not responsive to policy and incentives
    • You always leave some things exogenous to isolate a key force
  • What determines the longrun growth rate? Use fixed points!
    • In models of capital accumulation, technology limits the longrun growth
    • Models of innovation choice often called endogenous growth models

Solow Model Summary

  • The Solow model describes aggregate growth from the perspective of accumulating physical capital
    • The tension is between consumption and savings
    • Production not directed towards consumption goods is used to build capital for future consumption
    • e.g. factories, robots, facilities, etc.
  • Endogeneity
    • Technology and population growth are left fully exogenous
    • Capital accumulation occurs through an exogenously given savings rate
    • The neoclassical growth model endogenizing that rate

Technology

  • In this economy, output is produced by combining labor and capital

  • Labor \(N_t\), which we assume is supplied inelastically

    • Assume it is proportional to the population
  • Capital, \(K_t\), which is accumulated over time

  • In addition, total factor productivity (TFP), \(z_t\), is the technological level in the economy

  • The physical output from operating the technology is:

    \[ Y_t = z_t F(K_t, N_t) \]

Properties of the Technology Function

  • Note that land, etc. are NOT a factor of production

  • We will assume \(F(\cdot, \cdot)\) is constant returns to scale

    \[ F(\alpha K, \alpha N) = \alpha F(K, N) \quad \forall \alpha > 0 \]

  • Assume \(F\) has diminishing marginal products

    • i.e. \(\frac{\partial F(K, N)}{\partial K} > 0\), \(\frac{\partial F(K, N)}{\partial N} > 0\), \(\frac{\partial^2 F(K, N)}{\partial K^2} < 0\), \(\frac{\partial^2 F(K, N)}{\partial N^2} < 0\)

Constant Returns to Scale

  • Define output per worker as \(y_t = Y_t/N_t\) and capital per worker as \(k_t = K_t/N_t\)

  • Take \(F\), divide by \(N_t\), use CRS, and define \(f(\cdot)\)

    \[ \begin{aligned} Y_t &= z_t F(K_t, N_t)\\ \frac{Y_t}{N_t} &= \frac{z_t F(K_t, N_t)}{N_t}\\ y_t &= z_t F\left(\frac{K_t}{N_t}, \frac{N_t}{N_t}\right) = z_t F(k_t, 1) \equiv z_t f(k_t) \end{aligned} \]

    • \(f\) also has diminishing marginal products, \(f'(k) > 0\), \(f''(k) < 0\)

Population Growth

  • From some initial condition \(N_0\) for population
  • Assume that population grows at a constant rate \(g_N\), i.e. \[ N_{t+1} = (1 + g_N) N_t \]
  • Hence \(N_{t+1}/N_t = 1 + g_N\) and \(N_t = (1 + g_N)^t N_0\)
  • If \(g_N < 0\) then shrinking population

Capital Accumulation

  • Capital is accumulated by investment, \(X_t\), with per capital \(x_t \equiv X_t/N_t\)
    • Macroeconomists should think in “allocations”, not “dollars”!
  • Output, \(Y_t\) from production can be used for consumption or investment
  • Between periods, \(\delta \in (0,1)\) proportion of capital depreciates
    • e.g. machines break down, buildings decay, etc.

\[ \begin{aligned} C_t + X_t &= Y_t \equiv \underbrace{z_t F(K_t, N_t)}_{\text{Total Output}}\\ \underbrace{K_{t+1}}_{\begin{smallmatrix} \text{Next} \\ \text{periods} \\ \text{capital} \end{smallmatrix}} &= \underbrace{(1-\delta)}_{\begin{smallmatrix}\text{depreciation} \\ \text{of capital} \end{smallmatrix}} K_t + \underbrace{X_t}_{\begin{smallmatrix}\text{investment} \\ \text{in new} \\ \text{capital} \end{smallmatrix}}, \delta \in (0,1) \end{aligned} \]

Per Capita Capital Dynamics

  • Recall that \(N_{t+1}/N_t = 1 + g_N\) and \(y_t = z_t f(k_t)\) \[ \begin{aligned} \frac{K_{t+1}}{N_t} &= (1-\delta) \frac{K_t}{N_t} + \frac{X_t}{N_t}\\ \frac{N_{t+1}}{N_{t+1}} \frac{K_{t+1}}{N_t} &= \left(\frac{N_{t+1}}{N_t}\right) \left(\frac{K_{t+1}}{N_{t+1}} \right) = (1-\delta) \frac{K_t}{N_t} + \frac{X_t}{N_t} \\ k_{t+1}(1+g_N) &= (1-\delta) k_t + x_t \end{aligned} \]
  • So, the per-capita dynamics of capital are \[ k_{t+1} = \frac{1}{1+g_N} \left[(1-\delta) k_t + x_t\right] \]

Savings

  • In the Solow model, the savings rate is exogenously given as \(s \in (0,1)\)
    • In the neoclassical growth model, it is endogenously determined based on consumer or planner preferences
  • Hence, \(x_t = s y_t = s z_t f(k_t)\). Combine with previous dynamics to get \[ k_{t+1} = \frac{1}{1+g_N} \left[(1-\delta) k_t + s z_t f(k_t)\right] \]
  • Given assumptions on \(f(\cdot)\), this is a nonlinear difference equation given an exogenous \(z_t\) process
  • With this, we can analyze the dynamics of \(y_t\), \(k_t\), and \(c_t\) over time

Steady State

  • Assume that \(z_t = \bar{z}\) is constant over time
  • Look for steady state: \(k_{t+1} = k_t = \bar{k}\) and \(y_{t+1} = y_t = \bar{y}\), etc.
    • Note that this is a fixed point of the dynamics. May or may not exist
    \[ \begin{aligned} \bar{k} &= \frac{1-\delta}{1+g_N}\bar{k} + \frac{s \bar{z}}{1+g_N}f(\bar{k}) \\ \left(\frac{1+g_N}{1+g_N}-\frac{1-\delta}{1+g_N} \right)\bar{k} &= \frac{s \bar{z}}{1+g_N}f(\bar{k}) \\ \underbrace{(g_N+\delta)\bar{k}}_{\text{Growth-adjusted depreciation}} &= \underbrace{s \bar{z} f(\bar{k})}_{\text{investment per capita}} \\ \end{aligned} \]

Example Production Function

  • Consider production function of \(f(k) = k^{\alpha}\) for \(\alpha \in (0,1)\)

  • In this case, \(\alpha\) will be interpretable as the capital share of income

    \[ \bar{k} = \left(\frac{s \bar{z}}{g_N + \delta}\right)^{\frac{1}{1-\alpha}} \]

Visualizing the Steady State

g_N = 0.02
delta = 0.05
s = 0.2
z = 1.0
alpha = 0.5
k_ss = (s * z / (g_N + delta))^(1/(1-alpha))

k_values = 0.1:0.01:10.0
lhs = (g_N + delta) * k_values
rhs = s * z .* k_values.^alpha

plot(k_values, lhs, label=L"Growth-adjusted depreciation: $(\delta + g_N)k$",
     xlabel=L"Capital per capita ($k$)")
plot!(k_values, rhs, label=L"Investment per capita: $s \bar{z} f(k)$")
vline!([k_ss], label=L"Steady State Capital: $\bar{k}$", linestyle=:dash)

Visualizing the Steady State

Wages and Rental Rate of Capital

  • Production could be run by a planner, or by a set of firms
  • Consider (real) profit maximizing firms. Price normalized to 1
    • Hire labor and capital at real rates \(w_t\) and \(r_t\) respectively \[ \max_{K_t, N_t}\left[z_t F(K_t, N_t) - w_t N_t - r_t K_t\right] \]
  • The first order conditions are \[ \begin{aligned} z_t \frac{\partial F(K_t, N_t)}{\partial K_t} &= r_t \\ z_t \frac{\partial F(K_t, N_t) }{\partial N_t}&= w_t \end{aligned} \]

Using Constant Returns to Scale

  • Can show that for any CRS \(F(K_t, N_t)\) that \(\frac{\partial F(\gamma K_t, \gamma N_t)}{\partial K_t} = \frac{\partial F(K_t, N_t)}{\partial K_t}\)
    • Same for \(N_t\) derivative. ,
  • Set \(\gamma = 1/N_t\) and write the marginal products as ratios, \[ \begin{aligned} \frac{\partial F(K_t, N_t)}{\partial K_t} &= f'(K_t/N_t) = f'(k_t)\\ \frac{\partial F(K_t, N_t)}{\partial N_t} &= f(k_t) - k_t f'(k_t) \end{aligned} \]

Wages and Rental Rate of Capital

  • Finally, we can write \[ \begin{aligned} r_t &= z_t f'(k_t)\\ w_t &= z_t f(k_t) - z_t f'(k_t) k_t \end{aligned} \]
  • For the Cobb-Douglas production function \(F(K_t, N_t) = K_t^{\alpha} N_t^{1-\alpha}\), we have \[ \begin{aligned} f(k_t) &= k_t^{\alpha} \\ f'(k_t) &= \alpha k_t^{\alpha - 1}\\ r_t &= \alpha z_t k_t^{\alpha - 1}\\ w_t &= z_t k_t^{\alpha} - z_t \alpha k_t^{\alpha - 1} k_t =(1 - \alpha) z_t k_t^{\alpha} \end{aligned} \]

Shares of Income

  • Recall that per-capita output is \(y_t = z_t f(k_t)\)
  • \(w_t = (1 - \alpha) z_t k_t^{\alpha}\)
    • Interpret \(1-\alpha\) as the labor share of output, or income
  • \(r_t k_t = \alpha z_t k_t^{\alpha}\)
    • Interpret \(\alpha\) as the capital share
  • Key to these expressions were competitive markets in hiring labor/capital
    • i.e., workers end up paid their marginal products

Solow Model Dynamics

Summary of Equations

  • Exogenous \(z_t\) sequence. e.g., \(z_{t+1}/z_t = 1 + g_z\) given some initial \(z_0\)

  • Population growth \(N_{t+1}/N_t = 1 + g_N\) given some initial \(N_0\)

    \[ k_{t+1} = \frac{1}{1+g_N} \left[(1-\delta) k_t + s z_t f(k_t)\right],\quad \text{given } k_0 \]

    • Output per capita \(y_t = z_t f(k_t)\)
    • Consumption per capita \(c_t = (1-s) y_t = (1-s) z_t f(k_t)\)
  • Wages \(w_t = (1 - \alpha) z_t k_t^{\alpha}\) and rental rate of capital \(r_t = \alpha z_t k_t^{\alpha - 1}\)

  • Steady state capital \(\bar{k} = \left(\frac{s \bar{z}}{g_N + \delta}\right)^{\frac{1}{1-\alpha}}\) if \(g_z = 0\) and \(z_0 = \bar{z}\)

45 Degree Diagram

  • With a fixed point \(k_{t+1} = h(k_t)\) note that a fixed point is when \(\bar{k} = h(\bar{k})\)
  • We can plot the dynamics of the sequence comparing the functions to the 45 degree line where that occurs
  • This diagram will help us interpret stability and convergence

Iteration

  • First, lets write a general function to iterate a (univariate) map
function iterate_map(f, x0, T)
    x = zeros(T + 1)
    x[1] = x0
    for t in 2:(T + 1)
        x[t] = f(x[t - 1])
    end
    return x
end
iterate_map (generic function with 1 method)

Plotting the Dynamics

function plot45(f, xmin, xmax, x0, T; num_points = 100, label = L"h(k)",
                xlabel = "k", size = (600, 500))
    # Plot the function and the 45 degree line
    x_grid = range(xmin, xmax, num_points)
    plt = plot(x_grid, f.(x_grid); xlim = (xmin, xmax), ylim = (xmin, xmax),
               linecolor = :black, lw = 2, label, size)
    plot!(x_grid, x_grid; linecolor = :blue, lw = 2, label = nothing)

    # Iterate map and add ticks
    x = iterate_map(f, x0, T)
    if !isnothing(xlabel) && T > 1
      xticks!(x, [L"%$(xlabel)_{%$i}" for i in 0:T])
      yticks!(x, [L"%$(xlabel)_{%$i}" for i in 0:T])
    end

    # Plot arrows and dashes
    for i in 1:T
        plot!([x[i], x[i]], [x[i], x[i + 1]], arrow = :closed, linecolor = :black,
              alpha = 0.5, label = nothing)
        plot!([x[i], x[i + 1]], [x[i + 1], x[i + 1]], arrow = :closed,
              linecolor = :black, alpha = 0.5, label = nothing)
        plot!([x[i + 1], x[i + 1]], [0, x[i + 1]], linestyle = :dash,
              linecolor = :black, alpha = 0.5, label = nothing)
    end
    plot!([x[1], x[1]], [0, x[1]], linestyle = :dash, linecolor = :black,
          alpha = 0.5, label = nothing)
end
plot45 (generic function with 1 method)

Fixed Points

# Implementation of our capital dynamics
h(k; p) = (1 / (1 + p.g_N)) * (
   p.s * p.z_bar * k^p.alpha
   + (1 - p.delta) * k)
k_bar(p) = (p.s * p.z_bar /
      (p.g_N + p.delta))^(1/(1-p.alpha))
p = (;z_bar = 2.0, s = 0.3, alpha = 0.3,
     delta = 0.4, g_N = 0.0)
@show k_bar(p)
@show h(k_bar(p); p)
@show h(0.0;p);
k_bar(p) = 1.7846741842265788
h(k_bar(p); p) = 1.7846741842265788
h(0.0; p) = 0.0

45 Degree Diagram for Solow

k_min = 0.0
k_max = 3.0
k_0 = 0.25
T = 6
plot45(k -> h(k; p), k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")

Transition Dynamics

k_vals = iterate_map(k -> h(k; p), k_0, T)
plot(0:T, k_vals; label =[L"k_t" nothing],
     title=L"Dynamics from $k_0 = %$k_0$",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400))      

Rental Rate of Capital

  • Why does it decrease?
r(k;p) = p.alpha * p.z_bar * k^(p.alpha - 1)
w(k;p) = (1 - p.alpha) * p.z_bar * k^(p.alpha)

@show k_0
plot(0:T, r.(k_vals; p); label = L"r_t",
     title="Real Rental Rate of Capital",
     xlabel = "t", size=(600, 400))
hline!([r(k_bar(p);p)];linestyle=:dash,
       label=L"r(\bar{k})", alpha=0.5)
k_0 = 0.25

Wages

  • Why does it increase?
@show k_0
plot(0:T, w.(k_vals; p); label = L"w_t",
     title="Real Wages",
      xlabel = "t", size=(600, 400))
hline!([w(k_bar(p);p)];linestyle=:dash,
      label=L"w(\bar{k})", alpha=0.5)
k_0 = 0.25

Above the Steady State?

k_0 = 2.5
plot45(k -> h(k; p), k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")

Transition Dynamics

k_vals = iterate_map(k -> h(k; p), k_0, T)
plot(0:T, k_vals; label =[L"k_t" nothing],
     title=L"Dynamics from $k_0 = %$k_0$",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400))      

Rental Rate of Capital

  • Why does it increase?
@show k_0
plot(0:T, r.(k_vals; p); label = L"r_t",
     title="Real Rental Rate of Capital",
     xlabel = "t", size=(600, 400))
hline!([r(k_bar(p);p)];linestyle=:dash,
       label=L"r(\bar{k})", alpha=0.5)
k_0 = 2.5

Wages

  • Why does it decrease?
@show k_0
plot(0:T, w.(k_vals; p); label = L"w_t",
     title="Real Wages",
      xlabel = "t", size=(600, 400))
hline!([w(k_bar(p);p)];linestyle=:dash,
      label=L"w(\bar{k})", alpha=0.5)
k_0 = 2.5

At Zero Capital

k_0 = 0.0
@show h(k_0; p)
plot45(k -> h(k; p), k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")
h(k_0; p) = 0.0

Perturb Zero Capital

k_0 = 0.0001
@show h(k_0; p)
plot45(k -> h(k; p), k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")
h(k_0; p) = 0.03791744066881159

Transition Dynamics

k_vals = iterate_map(k -> h(k; p), k_0, T)
plot(0:T, k_vals; label =[L"k_t" nothing],
     title=L"Dynamics from $k_0 = %$k_0$",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400))  

Marginal Product of Capital

  • Recall that the Marginal Product of Capital (MPK) is \[ z_t \frac{\partial F(K_t, N_t)}{\partial K_t} = z_t f'(K_t/N_t) = \alpha z_t k_t^{\alpha - 1} \]
  • How does the MPK change as the economy grows?

Visualizing the MPK

  • Strictly positive, monotonically decreasing, asymptote at \(k=0\)
# No g_N here, that is in dynamics
MPK(k; p) = p.alpha * p.z_bar * k^(p.alpha - 1)
k_vals = range(0.0, 10.0; length=100)
plot(k_vals, MPK.(k_vals; p);
     label = L"\alpha\bar{z}k^{\alpha-1}",
     xlabel = "k",
     title="Marginal Product of Capital",
     size=(600, 500), ylim=(0.0, 2.0))

Visualizing the MPK Transition

  • Converges to a point where capital can’t accumulate without smaller \(s\)
k_0 = 0.25
T = 10
k_vals = iterate_map(k -> h(k; p), k_0, T)
plot(0:T, MPK.(k_vals; p);
     label = L"\alpha\bar{z}k_t^{\alpha-1}",
     xlabel = "t",
     title="MPK Transition Dynamics",
     size=(600, 500), ylim=(0.0, 2.0))

Gradients of \(h(k)\)

\[ \nabla h(k; p) = \frac{1}{1 + g_N} ( \alpha s z_t k^{1-\alpha} + 1 - \delta) \]

  • Recall fixed points are \(k^* = h(k^*)\)
  • Contraction mappings are a global property where points get closer
  • Locally, we can ask the same question. Gradients help us understand whether points expand or contract

Plotting \(\nabla h(k)\)

h_k(k; p) = (1 / (1 + p.g_N)) * (
   p.alpha * p.s * p.z_bar * k^(p.alpha-1)
   + 1 - p.delta)
k_vals = range(0.0, 10.0; length=100)
plot(k_vals, h_k.(k_vals; p);
     label = L"\nabla h(k)",
     xlabel = "k",
     title=L"Gradient of $h(k)$",
     size=(600, 500), ylim=(0.0, 2.0))
vline!([k_bar(p)];label=L"h(\bar{k})=\bar{k}",
       linestyle=:dash)
vline!([0.0];label=L"h(0)=0", linestyle=:dash)
hline!([1.0];linestyle=:dot, label=nothing,
       alpha=0.5, lw=1)

Local and Global Stability

  • Consider a fixed point \(\bar{k} = h(\bar{k})\)
  • \(\bar{k}\) is local stable if there exists an \(\epsilon > 0\)
    • For all \(|k - \bar{k}| < \epsilon\), \(\lim_{T\to\infty} h^T(k) = \bar{k}\)
  • i.e., starting close to the steady state it converges to steady state
    • Global stability if \(\epsilon = \infty\)
    • Given some continuity assumptions, can show that \(\nabla h(\bar{k}) < 1\) is sufficient
  • Solow: \(k = 0\) blows up, so this is only locally stable for \(\epsilon = \bar{k}\)

Non-convexity in Production

  • Let \(f(k) = - \frac{1}{3}k^3 +k^2 + \frac{1}{3}k, h(k) = s f(k) + (1-\delta) k\)
function h_multi(k;s=0.95, delta=0.99)
  return s*(-k^3/3 + k^2 + k/3) + (1 - delta)*k
end
k_min = 0.0
k_max = 2.2
k_vals = range(k_min, k_max; length=100)
plot(k_vals, h_multi.(k_vals);
     label = L"h(k)",
     xlabel = "k",
     title="Multiple Crossings",
     size=(600, 500))
plot!(k_vals, k_vals; label=nothing,
      style=:dash)

Fixed Points

  • There are now 3 fixed points
  • In this case we can eyeball the graph for initial conditions
h_multi_vec(k_vec) = [h_multi(k_vec[1])] # pack/unpack as vector
k_star_1 = fixedpoint(h_multi_vec, [0.0]).zero[1]
k_star_2 = fixedpoint(h_multi_vec, [1.0]).zero[1]
k_star_3 = fixedpoint(h_multi_vec, [2.0]).zero[1]
@show k_star_1, k_star_2, k_star_3;
(k_star_1, k_star_2, k_star_3) = (0.0, 1.1483123394919963, 1.8516876604860064)

Detour into Roots of Equations

  • A root or zero of a function \(\hat{h}(\cdot)\) is a point \(k^*\) such that \(\hat{h}(k^*) = 0\)
  • Fixed points \(k^* = h(k^*)\) is a root of the equation \(\hat{h}(k) \equiv h(k) - k\)
  • Alternative algorithms for univariate solvers can bracket a solution
sol = nlsolve(k -> h_multi_vec(k) .- k, [1.0]) # vectorized, NLsolve
@show sol.zero
@show find_zero(k -> h_multi(k) - k, (1.0, 1.5)); # bracketed, from Roots
sol.zero = [1.1483123394996155]
find_zero((k->begin
            #= In[23]:3 =#
            h_multi(k) - k
        end), (1.0, 1.5)) = 1.1483123395307762

Steady States and Gradients

  • There are now 3 fixed points, lets look at the gradients
  • Remember that \(\nabla h(\bar{k}) < 1\) is sufficient for stability
h_multi_k(k;s=0.95, delta=0.99) = s*(-k^2 + 2 * k + 1/3) + (1 - delta)
@show k_star_1, h_multi_k(k_star_1)
@show k_star_2, h_multi_k(k_star_2)
@show k_star_3, h_multi_k(k_star_3);
(k_star_1, h_multi_k(k_star_1)) = (0.0, 0.32666666666666666)
(k_star_2, h_multi_k(k_star_2)) = (1.1483123394919963, 1.2557699441233567)
(k_star_3, h_multi_k(k_star_3)) = (1.8516876604860064, 0.5875633891937458)

In Increasing Returns Region

k_0 = 0.8
T = 5
plot45(h_multi, k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")

In Decreasing Returns Region

k_0 = 1.5
T = 5
plot45(h_multi, k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")

In Decreasing Returns Region

k_0 = 2.0
T = 3
plot45(h_multi, k_min, k_max, k_0,
       T;label = L"k_{t+1} = h(k_t)")

Visualizing the MPK

function MPK_multi(k;s=0.95, delta=0.99)
    return s*(-k^2 + 2 * k + 1/3)
end
k_vals = range(0.0, 2.0; length=100)
plot(k_vals, MPK_multi.(k_vals);
     label = "MPK",
     xlabel = "k",
     title="Marginal Product of Capital",
     size=(600, 500), ylim=(0.0, 2.0))

Malthusian Model

Population Growth and Fixed Factors

  • With population growth (\(g_N > 0\)), investment leads to more capital accumulation through savings
  • Wages and consumption increase in the Solow model
    • The key is that capital can expand
  • What if resources are limited (and no substitutes)?

Malthusian Model

  • Malthusian model is pretty accurate for most of human history
    • Population growth expands when food/shrinks with scarcity
    • Productivity can grow, but so can population
    • Land is in fixed supply
  • Assume there is a subsistence consumption per capita

Population Growth

  • Consumption per capital is \(c_t \equiv Y_t / N_t\)

    • i.e., no savings, all production to consumption
  • Subsistence consumption per capita is \(c^*\)

  • Population growth rate for some \(\gamma \in (0,1)\)

    \[ g_N(Y_t, N_t) \equiv \left(\frac{c_t}{c^*}\right)^{\gamma} - 1 \]

  • Note: \(c_t > c^* \implies g_N > 0\) and \(c_t < c^* \implies g_N < 0\)

Production

  • Production is \(Y_t = z_t F(L, N_t)\) where \(L\) is land

    • Same assumptions as before for \(F(L, N_t) = L^{\alpha}N_t^{1-\alpha}\)
    • Let \(\ell_t \equiv L/N_t\) be land per capita
  • Then following CRS logic, we see that consumption per capital is

    \[ y_t = c_t = z_t f(\ell_t) = z_t \ell_t^{\alpha} \]

Substitute into Population Growth

\[ \begin{aligned} \frac{N_{t+1}}{N_t} &= 1 + g_N(N_t) = \left(\frac{c_t}{c^*}\right)^{\gamma} \\ &= \left(\frac{z_t \ell_t^{\alpha}}{c^*}\right)^{\gamma} = \left(\frac{z_t}{c^*}\right)^{\gamma} \ell_t^{\alpha \gamma} \\ &= \left(\frac{z_t}{c^*}\right)^{\gamma} L^{\alpha \gamma} N_t^{- \alpha \gamma}\\ N_{t+1} &= \left(\frac{z_t}{c^*}\right)^{\gamma} L^{\alpha \gamma} N_t^{1 - \alpha \gamma} \end{aligned} \]

Steady State

  • For a fixed \(z = \bar{Z}\), assume \(\bar{N}\) and substitute \[ \begin{aligned} \bar{N} &= \left(\frac{\bar{z}}{c^*}\right)^{\gamma} L^{\alpha \gamma} \bar{N}^{1 - \alpha \gamma}\\ \bar{N}^{\alpha \gamma} &= \left(\frac{\bar{z}}{c^*}\right)^{\gamma} L^{\alpha \gamma}\\ \bar{N} &= \left(\frac{\bar{z}}{c^*}\right)^{\frac{\gamma}{\alpha \gamma}} L^{\frac{\alpha \gamma}{\alpha \gamma}}= \left(\frac{\bar{z}}{c^*}\right)^{\frac{1}{\alpha}} L\\ \bar{c} &= \bar{z} \bar{\ell}^{\alpha} = \bar{z} \left(\frac{L}{\bar{N}}\right)^{\alpha} = \bar{z} \left(\left(\frac{c^*}{\bar{z}}\right)^{\frac{1}{\alpha}}\frac{L}{L}\right)^{\alpha} = c^* \end{aligned} \]

Implementation

h(N; p) = (p.z_bar / p.c_star)^p.gamma * p.L^(p.alpha * p.gamma) * N^(1 - p.alpha * p.gamma)
N_bar(p) = (p.z_bar / p.c_star)^(1/p.alpha) * p.L
c(N; p) = p.z_bar * (p.L / N)^p.alpha
p = (;z_bar = 1.0, c_star = 0.1, alpha = 0.6,
     gamma = 0.3, L = 1.0)
@show N_bar(p);
N_bar(p) = 46.4158883361278

Population Growth

N_0 = 10.0
T = 20
N_vals = iterate_map(N -> h(N; p), N_0, T)
plot(0:T, N_vals; label =[L"N_t" nothing],
     title=L"Dynamics from $N_0 = %$N_0$",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400))   

Consumption per Capita

c_vals = c.(N_vals; p)
plot(0:T, c_vals; label =[L"c_t" nothing],
     title="Consumption-per-capita",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400)) 
hline!([p.c_star];linestyle=:dash,
       label=L"c^*", alpha=0.5)

Technological Growth!

  • Start at \(\bar{N}\) then double \(\bar{z}\)
N_0 = N_bar(p) # old steady state
p = merge(p, (; z_bar = 2.0)) # changes a field
N_vals = iterate_map(N -> h(N; p), N_0, T)
c_vals = c.(N_vals; p)
plot(0:T, c_vals; label =[L"c_t" nothing],
     title="Consumption-per-capita",
     seriestype = [:scatter, :line],
     xlabel = "t", size=(600, 400)) 
hline!([p.c_star];linestyle=:dash,
       label=L"c^*", alpha=0.5)

Pessimistic Perspective on Technology

  • Population will expand until subsistence consumption is reached
  • Technology growth only leads to a higher population, not to material welfare gains
  • The key assumption here: Fixed factors and population growth
  • Are there fixed factors with modern production technologies?