マクロ経済理論で連続時間モデルを分析するときの常套手段は位相図と呼ばれる図を使ったものである。しかし,微分方程式を数値的に分析しないと解析が困難な場合があるので,基本的な方法だけは覚えておくほうがよい。

次の微分方程式が何らかの経済変数 \(x\) の時間発展を決めているとしよう。

近似公式

\[ \dot x = f(t, x) \]

時間微分の定義より \[ \lim_{h \to 0} \frac{x(t + h) - x(t)}{h} = f(t, x(t)) \] が成り立つ。ここで, \(h > 0\) を十分小さくとれば次の近似が成立する。

\[ \frac{x(t + h) - x(t)}{h} \approx f(t, x(t)) \]

微分方程式を数値的に分析する基本的な戦略は次の式で表すことができる。 \[ x(t+h) \approx x(t) + h\cdot f(t, x(t)) \] この式において,右辺は(時刻 \(t\) において)既知の量のみで表されていることに注意してほしい。

離散化

初期値 \(x_0 = x(0)\) を所与のものとする。微小な量 \(h\) を1つ適当に固定する。時間軸 \([0, \infty)\)\(t = 0, h, 2h, 3h, \dots, nh, \dots\) (\(n = 0, 1, 2, \dots\)) と離散化して,\(x_n\) によって \(x(nh)\) の数値解を表すものとしよう。このように,連続時間の微分方程式の問題を離散時間の数列の問題に変換することを「離散化」という。コンピュータで解ける問題に落とし込むには,どこかのタイミングで離散化をする必要がある。(そもそもモデルを離散時間でセットアップするというのも1つの方法)

シミュレーションのためには数列の更新ルール \(x_n \mapsto x_{n+1}\) を決める必要があるが,これは上で見た近似公式を使えばよい。

\[ x_{n+1} = x_n + h\cdot f(nh, x_n), \quad n = 0, 1, \dots \]

解析解がわかっている問題について上の方法を使ってみよう。

\[ \dot x = 0.2 x, \quad x(0) = 1 \] \(f(t, x) = 0.2 x\) であり,解析解は \(x(t) = e^{0.2 t}\) である。

t0 <- 0
te <- 30
grid_size = 1000
h <- (te - t0) / grid_size

t <- seq(t0, te, length.out = grid_size)
x <- numeric(grid_size)

g <- 0.2
x[1] <- 1

for (i in 1:(length(x) - 1)) {
  x[i + 1] <- x[i] + h * g * x[i]
}

plot(t, exp(g * t), type = "l")
lines(t, x, col = "blue")
legend(0, 390, legend = c("Analytical solution", "Numerical solution"),
       col = c("black", "blue"), lty = c(1, 1))

練習問題

  1. 上の例で grid_size を変更して近似の精度がどう変わるかを観察せよ。
  2. 次の微分方程式を数値的に解きなさい
    • \(\dot x = -0.3 x\), \(x(0) = 10\)
    • \(\dot x = -2 tx\)