Perfect Foresight_Loop over parameters

Dear all,

I know this topic has already been discussed but I still cannot find a solution.

I am solving a simple 4 equations model with perfect foresight and I am trying to loop over three possible values of two deterministic shocks hitting the economy in periods 1 and 2 (totally 3^4=81 iterations). Within the loop I try to update the values by overriding oo_.exo_simul and I am trying to save the path of output taking it from oo_.endo_simul. However, I see that I get the same results for each iterations meaning that the values of the shocks are not updated.

Could you please help me with this?

Thanks

RBC_perfect_foresight.mod (1.1 KB)

USe


var y c k h;
varexo e u;

parameters beta rho alpha delta theta psi tau;

alpha = 0.36;
rho   = 0.95;
tau   = 0.025;
beta  = 0.99;
delta = 0.025;
psi   = 0;
theta = 2.95;

model;
c*theta*h^(1+psi)=(1-alpha)*y;
k = beta*(((exp(u)*c)/(exp(u(+1))*c(+1)))
    *(exp(u(+1))*alpha*y(+1)+(1-delta)*k));
y = exp(e)*(k(-1)^alpha)*(h^(1-alpha));
k = exp(u)*(y-c)+(1-delta)*k(-1);
end;

initval;
y = 1.08068253095672;
c = 0.80359242014163;
h = 0.29175631001732;
k = 11.08360443260358;
e = 0;
u = 0;
end;

steady;
check;

shocks;
var e;
periods 1 2;
values 0.5 0.25;
var u;
periods 1 2;
values 0.5 0.25;
end;

ee1g = 0.1:0.1:0.3;
ee2g = 0.1:0.1:0.3;
uu1g = 0.1:0.1:0.3;
uu2g = 0.1:0.1:0.3;
iterations = length(ee1g)*length(ee2g)*length(uu1g)*length(uu2g);
results = zeros(iterations,152);
numit = 0;

perfect_foresight_setup(periods=150);
perfect_foresight_solver;

for i=1:length(ee1g)
    for j=1:length(ee2g)
        for q=1:length(uu1g)
            for z=1:length(uu2g)
                numit = numit + 1;                
                oo_.exo_simul(2,1) = ee1g(i);
                oo_.exo_simul(3,1) = ee2g(j);
                oo_.exo_simul(2,2) = uu1g(q);
                oo_.exo_simul(3,2) = uu2g(z);
                oo_ = perfect_foresight_solver_core(M_,options_,oo_);
                if oo_.deterministic_simulation.status
                    results(numit,:) = oo_.endo_simul(1,:);
                end
            end
        end
    end
end

Thanks a lot for your help. If I run this code, though, the matrix containing the results is populated by zeros only. Does this not happen if you run the code?

Sorry, my mistake. The ~ was wrong. I fixed the code above.

Thanks a lot!

Can I ask you what these two lines of code are supposed to do?

if oo_.deterministic_simulation.status
   results(numit,:) = oo_.endo_simul(1,:);
end

Because if I try to apply the same code to a slightly more complicated model this prevents Matlab to populate the matrix results (all zeros).

Thanks

This is a check whether the solver was successful. If the status evaluates to 0, the solver failed and you would be populating the matrix based on the solution of the last successful run.

I understand, thanks. Therefore I was getting all zeros because the solver was failing every time. Now it seems that by using the original values of the shocks as first iteration the loop seems to work.