Commit 0391dbbe authored by MichelJuillard's avatar MichelJuillard Committed by Sébastien Villemot
Browse files

fix bug with lag on exogenous variables on more than one period

(cherry picked from commit 492124ce9886e6aef4f4cefef302241d7edfe024)
parent fa87c296
......@@ -120,9 +120,13 @@ if max(abs(d1))>options.solve_tolf
error('Jacobian is not evaluated at the steady state!')
end
% current variables
[r0,c0,v0] = find(jacobian(:,jc));
% current and predetermined
[rT,cT,vT] = find(jacobian(:,jpc));
% current and jump variables
[r1,c1,v1] = find(jacobian(:,jcn));
% all endogenous variables
[rr,cc,vv] = find(jacobian(:,jendo));
iv0 = 1:length(v0);
......@@ -155,9 +159,16 @@ for it = (maximum_lag+1):(maximum_lag+periods)
nv = length(vv);
iA(iv+m,:) = [i_rows(rr),i_cols_A(cc),vv];
end
z(jendo) = Y(i_cols);
z(jexog) = transpose(exogenousvariables(it,:));
res(i_rows) = jacobian*z;
if M.maximum_exo_lag > 0
% needed as jacobian for lagged exogenous variables is wrong
% in current version of Dynare
zz = Y(i_cols);
res(i_rows) = dynamicmodel(zz, exogenousvariables, params, steadystate_y, it);
else
z(jendo) = Y(i_cols);
z(jexog) = transpose(exogenousvariables(it,:));
res(i_rows) = jacobian*z;
end
m = m + nv;
i_rows = i_rows + ny;
i_cols = i_cols + ny;
......
......@@ -38,13 +38,13 @@ dynamicmodel = str2func([M.fname,'.dynamic']);
info.status = 1;
for it = 2:options.periods+1
for it = M.maximum_lag + (1:options.periods)
yb = endogenousvariables(:,it-1); % Values at previous period, also used as guess value for current period
yb1 = yb(iyb);
[tmp, check] = solve1(dynamicmodel, [yb1; yb], 1:M.endo_nbr, nyb+1:nyb+M.endo_nbr, ...
1, options.gstep, options.dynatol.f, options.dynatol.x, ...
options.simul.maxit, options.debug, exogenousvariables, ...
M.params, steadystate, it+M.maximum_lag-1);
M.params, steadystate, it);
if check
info.status = 0;
end
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment