From 268225ade7420059b3a67658a664cd66b2730614 Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Wed, 28 May 2025 14:04:03 +1000 Subject: [PATCH 1/2] minor bug fixes --- lectures/cagan_ree.md | 27 ++++++++++++++------------- lectures/cons_smooth.md | 6 +++--- lectures/tax_smooth.md | 8 ++++---- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lectures/cagan_ree.md b/lectures/cagan_ree.md index f0274b56..7398e2bc 100644 --- a/lectures/cagan_ree.md +++ b/lectures/cagan_ree.md @@ -4,7 +4,7 @@ jupytext: extension: .md format_name: myst format_version: 0.13 - jupytext_version: 1.16.1 + jupytext_version: 1.17.1 kernelspec: display_name: Python 3 (ipykernel) language: python @@ -267,6 +267,7 @@ def solve(model, T): A1 = np.eye(T+1, T+1) - δ * np.eye(T+1, T+1, k=1) A2 = np.eye(T+1, T+1) - np.eye(T+1, T+1, k=-1) + # Assume γ* = 1 b1 = (1-δ) * μ_seq + np.concatenate([np.zeros(T), [δ * π_end]]) b2 = μ_seq + np.concatenate([[m0], np.zeros(T)]) @@ -326,7 +327,7 @@ T1 = 60 μ_star = 0 T = 80 -μ_seq_1 = np.append(μ0*np.ones(T1+1), μ_star*np.ones(T-T1)) +μ_seq_1 = np.append(μ0*np.ones(T1), μ_star*np.ones(T-T1+1)) cm = create_cagan_model(μ_seq=μ_seq_1) @@ -493,32 +494,32 @@ cm1 = create_cagan_model(μ_seq=μ_seq_2_path1) π_seq_2_path1, m_seq_2_path1, p_seq_2_path1 = solve(cm1, T) # continuation path -μ_seq_2_cont = μ_star * np.ones(T-T1) +μ_seq_2_cont = μ_star * np.ones(T-T1+1) -cm2 = create_cagan_model(m0=m_seq_2_path1[T1+1], +cm2 = create_cagan_model(m0=m_seq_2_path1[T1], μ_seq=μ_seq_2_cont) -π_seq_2_cont, m_seq_2_cont1, p_seq_2_cont1 = solve(cm2, T-1-T1) +π_seq_2_cont, m_seq_2_cont1, p_seq_2_cont1 = solve(cm2, T-T1) # regime 1 - simply glue π_seq, μ_seq -μ_seq_2 = np.concatenate((μ_seq_2_path1[:T1+1], +μ_seq_2 = np.concatenate((μ_seq_2_path1[:T1], μ_seq_2_cont)) -π_seq_2 = np.concatenate((π_seq_2_path1[:T1+1], +π_seq_2 = np.concatenate((π_seq_2_path1[:T1], π_seq_2_cont)) -m_seq_2_regime1 = np.concatenate((m_seq_2_path1[:T1+1], +m_seq_2_regime1 = np.concatenate((m_seq_2_path1[:T1], m_seq_2_cont1)) -p_seq_2_regime1 = np.concatenate((p_seq_2_path1[:T1+1], +p_seq_2_regime1 = np.concatenate((p_seq_2_path1[:T1], p_seq_2_cont1)) # regime 2 - reset m_T1 -m_T1 = (m_seq_2_path1[T1] + μ0) + cm2.α*(μ0 - μ_star) +m_T1 = (m_seq_2_path1[T1-1] + μ0) + cm2.α*(μ0 - μ_star) cm3 = create_cagan_model(m0=m_T1, μ_seq=μ_seq_2_cont) -π_seq_2_cont2, m_seq_2_cont2, p_seq_2_cont2 = solve(cm3, T-1-T1) +π_seq_2_cont2, m_seq_2_cont2, p_seq_2_cont2 = solve(cm3, T-T1) -m_seq_2_regime2 = np.concatenate((m_seq_2_path1[:T1+1], +m_seq_2_regime2 = np.concatenate((m_seq_2_path1[:T1], m_seq_2_cont2)) -p_seq_2_regime2 = np.concatenate((p_seq_2_path1[:T1+1], +p_seq_2_regime2 = np.concatenate((p_seq_2_path1[:T1], p_seq_2_cont2)) ``` diff --git a/lectures/cons_smooth.md b/lectures/cons_smooth.md index 626f5956..e5cf79d6 100644 --- a/lectures/cons_smooth.md +++ b/lectures/cons_smooth.md @@ -4,7 +4,7 @@ jupytext: extension: .md format_name: myst format_version: 0.13 - jupytext_version: 1.16.4 + jupytext_version: 1.17.1 kernelspec: display_name: Python 3 (ipykernel) language: python @@ -279,7 +279,7 @@ def compute_optimal(model, a0, y_seq): b = y_seq - c_seq b[0] = b[0] + a0 - a_seq = np.linalg.inv(A) @ b + a_seq = np.linalg.inv(A) @ (R * b) a_seq = np.concatenate([[a0], a_seq]) return c_seq, a_seq, h0 @@ -361,7 +361,7 @@ def plot_cs(model, # consumption-smoothing model c_seq, a_seq, h0 = compute_optimal(model, a0, y_seq) # Sequence length - T = cs_model.T + T = model.T fig, axes = plt.subplots(1, 2, figsize=(12,5)) diff --git a/lectures/tax_smooth.md b/lectures/tax_smooth.md index 0ba1095f..eeafe14e 100644 --- a/lectures/tax_smooth.md +++ b/lectures/tax_smooth.md @@ -4,7 +4,7 @@ jupytext: extension: .md format_name: myst format_version: 0.13 - jupytext_version: 1.16.4 + jupytext_version: 1.17.1 kernelspec: display_name: Python 3 (ipykernel) language: python @@ -283,7 +283,7 @@ def compute_optimal(model, B0, G_seq): A = np.diag(-R*np.ones(S), k=-1) + np.eye(S+1) b = G_seq - T_seq b[0] = b[0] + B0 - B_seq = np.linalg.inv(A) @ b + B_seq = np.linalg.inv(A) @ (R * b) B_seq = np.concatenate([[B0], B_seq]) return T_seq, B_seq, h0 @@ -368,7 +368,7 @@ def plot_ts(model, # tax-smoothing model T_seq, B_seq, h0 = compute_optimal(model, B0, G_seq) # Sequence length - S = tax_model.S + S = model.S fig, axes = plt.subplots(1, 2, figsize=(12,5)) @@ -656,4 +656,4 @@ plt.plot(ξ1_arr, cost_grad) plt.ylabel('derivative of cost') plt.xlabel(r'$\phi$') plt.show() -``` \ No newline at end of file +``` From 263f52e27233bf7f9e667c02c6854ac39e33924c Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Wed, 28 May 2025 22:05:30 +1000 Subject: [PATCH 2/2] minor update --- lectures/cagan_ree.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lectures/cagan_ree.md b/lectures/cagan_ree.md index 7398e2bc..fdedff0d 100644 --- a/lectures/cagan_ree.md +++ b/lectures/cagan_ree.md @@ -511,6 +511,8 @@ m_seq_2_regime1 = np.concatenate((m_seq_2_path1[:T1], p_seq_2_regime1 = np.concatenate((p_seq_2_path1[:T1], p_seq_2_cont1)) +π_seq_2[T1-1] = p_seq_2_regime1[T1] - p_seq_2_regime1[T1-1] + # regime 2 - reset m_T1 m_T1 = (m_seq_2_path1[T1-1] + μ0) + cm2.α*(μ0 - μ_star) @@ -540,8 +542,8 @@ plot_configs = [ {'data': [(T_seq, m_seq_2_regime1, 'Smooth $m_{T_1}$'), (T_seq, m_seq_2_regime2, 'Jumpy $m_{T_1}$')], 'ylabel': r'$m$'}, - {'data': [(T_seq, p_seq_2_regime1, 'Smooth $p_{T_1}$'), - (T_seq, p_seq_2_regime2, 'Jumpy $p_{T_1}$')], + {'data': [(T_seq, p_seq_2_regime1, 'Jumpy $m_{T_1}$'), + (T_seq, p_seq_2_regime2, 'Smooth $m_{T_1}$')], 'ylabel': r'$p$'} ] @@ -592,7 +594,7 @@ fig, ax = plt.subplots(5, figsize=(5, 12), dpi=200) plot_configs = [ {'data': [(T_seq[:-1], μ_seq_2)], 'ylabel': r'$\mu$'}, {'data': [(T_seq, π_seq_2, 'Unforeseen'), - (T_seq, π_seq_1, 'Foreseen')], 'ylabel': r'$p$'}, + (T_seq, π_seq_1, 'Foreseen')], 'ylabel': r'$\pi$'}, {'data': [(T_seq, m_seq_2_regime1 - p_seq_2_regime1, 'Unforeseen'), (T_seq, m_seq_1 - p_seq_1, 'Foreseen')], 'ylabel': r'$m - p$'}, {'data': [(T_seq, m_seq_2_regime1, 'Unforeseen (Smooth $m_{T_1}$)'),