dynare/tests/deterministic_simulations/purely_forward/nk.mod

82 lines
1.6 KiB
Modula-2

var y i pi ;
varexo e;
parameters a1 a2 a3 a4 a5;
a1 = -.5;
a2 = .1;
a3 = .9;
a4 = 1.5;
a5 = 0.5;
model;
y = y(1)+a1*(i-pi(1))+e;
pi = a2*y + a3*pi(1);
i = max(0, a4*pi+a5*y);
end;
steady_state_model;
y=0;
i=0;
pi=0;
end;
steady;
check;
shocks;
var e;
periods 1 2;
values .3 -0.1;
end;
perfect_foresight_setup(periods=5);
perfect_foresight_solver;
if ~oo_.deterministic_simulation.status
error('Perfect foresight simulation failed')
end
% Initialize the analytical solution for the endogenous variables.
expected_y = zeros(1, 6);
expected_pi = zeros(1, 6);
expected_i = zeros(1, 6);
% Set period 2.
tmp = inv(eye(3)-[0 0 a1; a2 0 0; a5 a4 0])*[oo_.exo_simul(2); 0; 0];
if tmp(3)>=0
expected_y(2) = tmp(1);
expected_pi(2) = tmp(2);
expected_i(2) = tmp(3);
else
expected_y(2) = oo_.exo_simul(2);
expected_pi(2) = expected_y(2)*a2;
expected_i(2) = 0;
end
% Set period 1.
tmp = inv(eye(3)-[0 0 a1; a2 0 0; a5 a4 0])*[oo_.exo_simul(1)+expected_y(2)-a1*expected_pi(2); a3*expected_pi(2); 0];
if tmp(3)>=0
expected_y(1) = tmp(1);
expected_pi(1) = tmp(2);
expected_i(1) = tmp(3);
else
expected_y(1) = oo_.exo_simul(1)+expected_y(2)-a1*expected_pi(2);
expected_pi(1) = expected_y(2)*a2+a3*expected_pi(2);
expected_i(1) = 0;
end
% Compare the paths returned by sim1_purely_forward routine and the analytical solution.
if max(abs(oo_.endo_simul(1,:)-expected_y))>options_.dynatol.x || ...
max(abs(oo_.endo_simul(2,:)-expected_i))>options_.dynatol.x || ...
max(abs(oo_.endo_simul(3,:)-expected_pi))>options_.dynatol.x
error('Wrong solution!')
end