Skip to content
Snippets Groups Projects
Verified Commit b55e8934 authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Drop M_.exo_det_length, rather use a field in dr structure

This will facilitate the introduction of dates in shock sequences.
parent af0aedce
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ function run(json) ...@@ -13,7 +13,7 @@ function run(json)
% SPECIAL REQUIREMENTS % SPECIAL REQUIREMENTS
% none % none
% Copyright © 2019-2023 Dynare Team % Copyright © 2019-2024 Dynare Team
% %
% This file is part of Dynare. % This file is part of Dynare.
% %
...@@ -103,7 +103,6 @@ if ~isempty(jm.anticipated_transitory_shocks) ...@@ -103,7 +103,6 @@ if ~isempty(jm.anticipated_transitory_shocks)
'periods', s.start_date:s.end_date, ... 'periods', s.start_date:s.end_date, ...
'value', s.value)]; 'value', s.value)];
end end
M_.exo_det_length = 0;
end end
%% Make unanticipated shock map %% Make unanticipated shock map
......
...@@ -13,7 +13,7 @@ function read(json) ...@@ -13,7 +13,7 @@ function read(json)
% SPECIAL REQUIREMENTS % SPECIAL REQUIREMENTS
% none % none
% Copyright © 2019-2020 Dynare Team % Copyright © 2019-2024 Dynare Team
% %
% This file is part of Dynare. % This file is part of Dynare.
% %
...@@ -36,7 +36,6 @@ global M_ options_ oo_ ...@@ -36,7 +36,6 @@ global M_ options_ oo_
jm = loadjson_(json, 'SimplifyCell', 1); jm = loadjson_(json, 'SimplifyCell', 1);
data2json=struct(); data2json=struct();
M_.exo_det_length = 0;
for nshocks = 1:length(jm.stochasticshocksdescription) for nshocks = 1:length(jm.stochasticshocksdescription)
covartype=jm.stochasticshocksdescription{nshocks}.shockattributevalue; covartype=jm.stochasticshocksdescription{nshocks}.shockattributevalue;
thisshock=(jm.stochasticshocksdescription{nshocks}.shockindex)+1; thisshock=(jm.stochasticshocksdescription{nshocks}.shockindex)+1;
......
...@@ -87,7 +87,7 @@ if iorder == 1 ...@@ -87,7 +87,7 @@ if iorder == 1
tempx2 = tempx1-repmat(dr.ys(dr.order_var),1,ykmin); tempx2 = tempx1-repmat(dr.ys(dr.order_var),1,ykmin);
tempx = tempx2(k2); tempx = tempx2(k2);
y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghx*tempx+dr.ghu*ex(i-ykmin,:)'; y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghx*tempx+dr.ghu*ex(i-ykmin,:)';
for j=1:min(ykmin+M_.exo_det_length+1-i,M_.exo_det_length) for j=1:min(ykmin+dr.exo_det_length+1-i,dr.exo_det_length)
y_(dr.order_var,i) = y_(dr.order_var,i) + dr.ghud{j}*(ex_det(i+j-1,:)'-exo_det_steady_state); y_(dr.order_var,i) = y_(dr.order_var,i) + dr.ghud{j}*(ex_det(i+j-1,:)'-exo_det_steady_state);
end end
...@@ -105,7 +105,7 @@ elseif iorder == 2 ...@@ -105,7 +105,7 @@ elseif iorder == 2
y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghs2/2+dr.ghx*tempx+ ... y_(dr.order_var,i) = dr.ys(dr.order_var)+dr.ghs2/2+dr.ghx*tempx+ ...
dr.ghu*tempu+0.5*(dr.ghxx*tempxx+dr.ghuu*tempuu)+dr.ghxu* ... dr.ghu*tempu+0.5*(dr.ghxx*tempxx+dr.ghuu*tempuu)+dr.ghxu* ...
tempxu; tempxu;
for j=1:min(ykmin+M_.exo_det_length+1-i,M_.exo_det_length) for j=1:min(ykmin+dr.exo_det_length+1-i,dr.exo_det_length)
tempud = ex_det(i+j-1,:)'-exo_det_steady_state; tempud = ex_det(i+j-1,:)'-exo_det_steady_state;
tempudud = kron(tempud,tempud); tempudud = kron(tempud,tempud);
tempxud = kron(tempx,tempud); tempxud = kron(tempx,tempud);
......
...@@ -263,9 +263,17 @@ if M_.exo_det_nbr > 0 ...@@ -263,9 +263,17 @@ if M_.exo_det_nbr > 0
fudet = g1(:,3*M_.endo_nbr+M_.exo_nbr+1:end); fudet = g1(:,3*M_.endo_nbr+M_.exo_nbr+1:end);
M1 = inv(f0+[zeros(M_.endo_nbr,nstatic) f1*gx zeros(M_.endo_nbr,nsfwrd-nboth)]); M1 = inv(f0+[zeros(M_.endo_nbr,nstatic) f1*gx zeros(M_.endo_nbr,nsfwrd-nboth)]);
M2 = M1*f1; M2 = M1*f1;
dr.ghud = cell(M_.exo_det_length,1);
dr.exo_det_length = 0;
for i = 1:length(M_.det_shocks)
if M_.det_shocks(i).exo_id
dr.exo_det_length = max(dr.exo_det_length, max(M_.det_shocks(i).periods));
end
end
dr.ghud = cell(dr.exo_det_length,1);
dr.ghud{1} = -M1*fudet; dr.ghud{1} = -M1*fudet;
for i = 2:M_.exo_det_length for i = 2:dr.exo_det_length
dr.ghud{i} = -M2*dr.ghud{i-1}(end-nsfwrd+1:end,:); dr.ghud{i} = -M2*dr.ghud{i-1}(end-nsfwrd+1:end,:);
end end
...@@ -290,31 +298,31 @@ if M_.exo_det_nbr > 0 ...@@ -290,31 +298,31 @@ if M_.exo_det_nbr > 0
M_.exo_nbr)]; M_.exo_nbr)];
zud=[zeros(nspred,M_.exo_det_nbr);dr.ghud{1};gx(:,1:nspred)*hud;zeros(M_.exo_nbr,M_.exo_det_nbr);eye(M_.exo_det_nbr)]; zud=[zeros(nspred,M_.exo_det_nbr);dr.ghud{1};gx(:,1:nspred)*hud;zeros(M_.exo_nbr,M_.exo_det_nbr);eye(M_.exo_det_nbr)];
R1 = g2_reordered*kron(zx,zud); R1 = g2_reordered*kron(zx,zud);
dr.ghxud = cell(M_.exo_det_length,1); dr.ghxud = cell(dr.exo_det_length,1);
kf = M_.endo_nbr-nfwrd-nboth+1:M_.endo_nbr; kf = M_.endo_nbr-nfwrd-nboth+1:M_.endo_nbr;
kp = nstatic+[1:nspred]; kp = nstatic+[1:nspred];
dr.ghxud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{1}(kp,:))); dr.ghxud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{1}(kp,:)));
Eud = eye(M_.exo_det_nbr); Eud = eye(M_.exo_det_nbr);
for i = 2:M_.exo_det_length for i = 2:dr.exo_det_length
hudi = dr.ghud{i}(kp,:); hudi = dr.ghud{i}(kp,:);
zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)]; zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
R2 = g2_reordered*kron(zx,zudi); R2 = g2_reordered*kron(zx,zudi);
dr.ghxud{i} = -M2*(dr.ghxud{i-1}(kf,:)*kron(dr.Gy,Eud)+dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{i}(kp,:)))-M1*R2; dr.ghxud{i} = -M2*(dr.ghxud{i-1}(kf,:)*kron(dr.Gy,Eud)+dr.ghxx(kf,:)*kron(dr.ghx(kp,:),dr.ghud{i}(kp,:)))-M1*R2;
end end
R1 = g2_reordered*kron(zu,zud); R1 = g2_reordered*kron(zu,zud);
dr.ghudud = cell(M_.exo_det_length,1); dr.ghudud = cell(dr.exo_det_length,1);
dr.ghuud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghu(kp,:),dr.ghud{1}(kp,:))); dr.ghuud{1} = -M1*(R1+f1*dr.ghxx(kf,:)*kron(dr.ghu(kp,:),dr.ghud{1}(kp,:)));
Eud = eye(M_.exo_det_nbr); Eud = eye(M_.exo_det_nbr);
for i = 2:M_.exo_det_length for i = 2:dr.exo_det_length
hudi = dr.ghud{i}(kp,:); hudi = dr.ghud{i}(kp,:);
zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)]; zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi;zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
R2 = g2_reordered*kron(zu,zudi); R2 = g2_reordered*kron(zu,zudi);
dr.ghuud{i} = -M2*dr.ghxud{i-1}(kf,:)*kron(hu,Eud)-M1*R2; dr.ghuud{i} = -M2*dr.ghxud{i-1}(kf,:)*kron(hu,Eud)-M1*R2;
end end
R1 = g2_reordered*kron(zud,zud); R1 = g2_reordered*kron(zud,zud);
dr.ghudud = cell(M_.exo_det_length,M_.exo_det_length); dr.ghudud = cell(dr.exo_det_length,dr.exo_det_length);
dr.ghudud{1,1} = -M1*R1-M2*dr.ghxx(kf,:)*kron(hud,hud); dr.ghudud{1,1} = -M1*R1-M2*dr.ghxx(kf,:)*kron(hud,hud);
for i = 2:M_.exo_det_length for i = 2:dr.exo_det_length
hudi = dr.ghud{i}(nstatic+1:nstatic+nspred,:); hudi = dr.ghud{i}(nstatic+1:nstatic+nspred,:);
zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi+dr.ghud{i-1}(kf,:);zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)]; zudi=[zeros(nspred,M_.exo_det_nbr);dr.ghud{i};gx(:,1:nspred)*hudi+dr.ghud{i-1}(kf,:);zeros(M_.exo_nbr+M_.exo_det_nbr,M_.exo_det_nbr)];
R2 = g2_reordered*kron(zudi,zudi); R2 = g2_reordered*kron(zudi,zudi);
......
Subproject commit b2b2801bcf063111214220a982c51b2c3eafe1f0 Subproject commit a091c26ced0fba215851485e824502230fccb73f
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment