@@ -252,7 +252,7 @@ m0 = 1
252252
253253+++ {"user_expressions": []}
254254
255- Now we can solve the model and plot $\pi_t$, $m_t$ and $p_t$ for $t =1, \ldots, T+1$
255+ Now we can solve the model to compute $\pi_t$, $m_t$ and $p_t$ for $t =1, \ldots, T+1$
256256
257257```{code-cell} ipython3
258258def solve(model):
@@ -410,48 +410,57 @@ The following code does the calculations and plots outcomes.
410410
411411```{code-cell} ipython3
412412# path 1
413- μ_seq_3_path1 = μ0 * np.ones(T+1)
413+ μ_seq_2_path1 = μ0 * np.ones(T+1)
414414
415- mc1 = create_cagan_model(m0=m0, α=α, T=T, μ_seq=μ_seq_3_path1)
416- π_seq_3_path1, m_seq_3_path1, p_seq_3_path1 = solve(mc1)
415+ mc1 = create_cagan_model(m0=m0, α=α,
416+ T=T, μ_seq=μ_seq_2_path1)
417+ π_seq_2_path1, m_seq_2_path1, p_seq_2_path1 = solve(mc1)
417418
418419# continuation path
419- μ_seq_3_cont = μ_star * np.ones(T-T1)
420+ μ_seq_2_cont = μ_star * np.ones(T-T1)
420421
421- mc2 = create_cagan_model(m0=m_seq_3_path1[T1+1], α=α, T=T-1-T1, μ_seq=μ_seq_3_cont)
422- π_seq_3_cont, m_seq_3_cont1, p_seq_3_cont1 = solve(mc2)
422+ mc2 = create_cagan_model(m0=m_seq_2_path1[T1+1],
423+ α=α, T=T-1-T1, μ_seq=μ_seq_2_cont)
424+ π_seq_2_cont, m_seq_2_cont1, p_seq_2_cont1 = solve(mc2)
423425
424426
425427# regime 1 - simply glue π_seq, μ_seq
426- μ_seq_3 = np.concatenate([μ_seq_3_path1[:T1+1], μ_seq_3_cont])
427- π_seq_3 = np.concatenate([π_seq_3_path1[:T1+1], π_seq_3_cont])
428- m_seq_3_regime1 = np.concatenate([m_seq_3_path1[:T1+1], m_seq_3_cont1])
429- p_seq_3_regime1 = np.concatenate([p_seq_3_path1[:T1+1], p_seq_3_cont1])
428+ μ_seq_2 = np.concatenate([μ_seq_2_path1[:T1+1],
429+ μ_seq_2_cont])
430+ π_seq_2 = np.concatenate([π_seq_2_path1[:T1+1],
431+ π_seq_2_cont])
432+ m_seq_2_regime1 = np.concatenate([m_seq_2_path1[:T1+1],
433+ m_seq_2_cont1])
434+ p_seq_2_regime1 = np.concatenate([p_seq_2_path1[:T1+1],
435+ p_seq_2_cont1])
430436
431437# regime 2 - reset m_T1
432- m_T1 = (m_seq_3_path1 [T1] + μ0) + α*(μ0 - μ_star)
438+ m_T1 = (m_seq_2_path1 [T1] + μ0) + α*(μ0 - μ_star)
433439
434- mc = create_cagan_model(m0=m_T1, α=α, T=T-1-T1, μ_seq=μ_seq_3_cont)
435- π_seq_3_cont2, m_seq_3_cont2, p_seq_3_cont2 = solve(mc)
440+ mc = create_cagan_model(m0=m_T1, α=α,
441+ T=T-1-T1, μ_seq=μ_seq_2_cont)
442+ π_seq_2_cont2, m_seq_2_cont2, p_seq_2_cont2 = solve(mc)
436443
437- m_seq_3_regime2 = np.concatenate([m_seq_3_path1[:T1+1], m_seq_3_cont2])
438- p_seq_3_regime2 = np.concatenate([p_seq_3_path1[:T1+1], p_seq_3_cont2])
444+ m_seq_2_regime2 = np.concatenate([m_seq_2_path1[:T1+1],
445+ m_seq_2_cont2])
446+ p_seq_2_regime2 = np.concatenate([p_seq_2_path1[:T1+1],
447+ p_seq_2_cont2])
439448
440449T_seq = range(T+2)
441450
442451# plot both regimes
443452fig, ax = plt.subplots(2, 3, figsize=[10,5], dpi=200)
444453
445- ax[0,0].plot(T_seq[:-1], μ_seq_3 )
446- ax[0,1].plot(T_seq, π_seq_3 )
447- ax[0,2].plot(T_seq, m_seq_3_regime1 - p_seq_3_regime1 )
448- ax[1,0].plot(T_seq, m_seq_3_regime1 ,
454+ ax[0,0].plot(T_seq[:-1], μ_seq_2 )
455+ ax[0,1].plot(T_seq, π_seq_2 )
456+ ax[0,2].plot(T_seq, m_seq_2_regime1 - p_seq_2_regime1 )
457+ ax[1,0].plot(T_seq, m_seq_2_regime1 ,
449458 label='Smooth $m_{T_1}$')
450- ax[1,0].plot(T_seq, m_seq_3_regime2 ,
459+ ax[1,0].plot(T_seq, m_seq_2_regime2 ,
451460 label='Jumpy $m_{T_1}$')
452- ax[1,1].plot(T_seq, p_seq_3_regime1 ,
461+ ax[1,1].plot(T_seq, p_seq_2_regime1 ,
453462 label='Smooth $m_{T_1}$')
454- ax[1,1].plot(T_seq, p_seq_3_regime2 ,
463+ ax[1,1].plot(T_seq, p_seq_2_regime2 ,
455464 label='Jumpy $m_{T_1}$')
456465
457466
@@ -502,33 +511,33 @@ unanticipated, as in experiment 2.
502511# compare foreseen vs unforeseen shock
503512fig, ax = plt.subplots(2, 3, figsize=[12,6], dpi=200)
504513
505- ax[0,0].plot(T_seq[:-1], μ_seq_3 )
514+ ax[0,0].plot(T_seq[:-1], μ_seq_2 )
506515ax[0,0].set_ylabel(r'$\mu$')
507516
508- ax[0,1].plot(T_seq, π_seq_3 ,
517+ ax[0,1].plot(T_seq, π_seq_2 ,
509518 label='Unforeseen')
510519ax[0,1].plot(T_seq, π_seq_1,
511520 label='Foreseen', color='tab:green')
512521ax[0,1].set_ylabel(r'$\pi$')
513522
514523ax[0,2].plot(T_seq,
515- m_seq_3_regime1 - p_seq_3_regime1 ,
524+ m_seq_2_regime1 - p_seq_2_regime1 ,
516525 label='Unforeseen')
517526ax[0,2].plot(T_seq, m_seq_1 - p_seq_1,
518527 label='Foreseen', color='tab:green')
519528ax[0,2].set_ylabel(r'$m - p$')
520529
521- ax[1,0].plot(T_seq, m_seq_3_regime1 ,
530+ ax[1,0].plot(T_seq, m_seq_2_regime1 ,
522531 label=r'Unforseen (Insist on $m_{T_1}$)')
523- ax[1,0].plot(T_seq, m_seq_3_regime2 ,
532+ ax[1,0].plot(T_seq, m_seq_2_regime2 ,
524533 label=r'Unforseen (Reset $m_{T_1}$)')
525534ax[1,0].plot(T_seq, m_seq_1,
526535 label='Foreseen shock')
527536ax[1,0].set_ylabel(r'$m$')
528537
529- ax[1,1].plot(T_seq, p_seq_3_regime1 ,
538+ ax[1,1].plot(T_seq, p_seq_2_regime1 ,
530539 label=r'Unforseen (Insist on $m_{T_1}$)')
531- ax[1,1].plot(T_seq, p_seq_3_regime2 ,
540+ ax[1,1].plot(T_seq, p_seq_2_regime2 ,
532541 label=r'Unforseen (Reset $m_{T_1}$)')
533542ax[1,1].plot(T_seq, p_seq_1,
534543 label='Foreseen')
@@ -641,10 +650,10 @@ The following code does the calculations and plots the results.
641650``` {code-cell} ipython3
642651# parameters
643652ϕ = 0.9
644- μ_seq_2 = np.array([ϕ**t * μ0 + (1-ϕ**t)*μ_star for t in range(T)])
645- μ_seq_2 = np.append(μ_seq_2 , μ_star)
653+ μ_seq = np.array([ϕ**t * μ0 + (1-ϕ**t)*μ_star for t in range(T)])
654+ μ_seq = np.append(μ_seq , μ_star)
646655
647656
648657# solve and plot
649- π_seq_2, m_seq_2, p_seq_2 = solve_and_plot(m0=m0, α=α, T=T, μ_seq=μ_seq_2 )
658+ π_seq, m_seq, p_seq = solve_and_plot(m0=m0, α=α, T=T, μ_seq=μ_seq )
650659```
0 commit comments