From e576dc8c81878978a410a9dec0416cfcc8422db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Tue, 6 Oct 2020 18:31:13 +0200 Subject: [PATCH] Block decomposition: fix evaluation of recursive variables in solved blocks Ref. #1726 --- matlab/solve_one_boundary.m | 5 +++-- matlab/solve_two_boundaries.m | 3 ++- preprocessor | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/matlab/solve_one_boundary.m b/matlab/solve_one_boundary.m index af9b655925..f4009b077f 100644 --- a/matlab/solve_one_boundary.m +++ b/matlab/solve_one_boundary.m @@ -92,9 +92,10 @@ for it_=start:incr:finish g1=spalloc( Blck_size, Blck_size, nze); while ~(cvg==1 || iter>maxit_) if is_dynamic - [r, ~, T(:, it_), g1] = feval(fname, Block_Num, dynvars_from_endo_simul(y, it_, M), x, params, steady_state, T(:, it_), it_, false); + [r, yy, T(:, it_), g1] = feval(fname, Block_Num, dynvars_from_endo_simul(y, it_, M), x, params, steady_state, T(:, it_), it_, false); + y(:, it_) = yy(M.lead_lag_incidence(M.maximum_endo_lag+1,:)); else - [r, ~, T, g1] = feval(fname, Block_Num, y, x, params, T); + [r, y, T, g1] = feval(fname, Block_Num, y, x, params, T); end if ~isreal(r) max_res=(-(max(max(abs(r))))^2)^0.5; diff --git a/matlab/solve_two_boundaries.m b/matlab/solve_two_boundaries.m index d1c595f6b6..25524a0173 100644 --- a/matlab/solve_two_boundaries.m +++ b/matlab/solve_two_boundaries.m @@ -83,7 +83,8 @@ while ~(cvg==1 || iter>maxit_) r = NaN(Blck_size, periods); g1a = spalloc(Blck_size*periods, Blck_size*periods, nze*periods); for it_ = y_kmin+(1:periods) - [r(:, it_-y_kmin), ~, T(:, it_), g1]=feval(fname, Block_Num, dynvars_from_endo_simul(y, it_, M), x, params, steady_state, T(:, it_), it_, false); + [r(:, it_-y_kmin), yy, T(:, it_), g1]=feval(fname, Block_Num, dynvars_from_endo_simul(y, it_, M), x, params, steady_state, T(:, it_), it_, false); + y(:, it_) = yy(M.lead_lag_incidence(M.maximum_endo_lag+1,:)); if periods == 1 g1a = g1(:, Blck_size+(1:Blck_size)); elseif it_ == y_kmin+1 diff --git a/preprocessor b/preprocessor index e4687bb976..4560639eb4 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit e4687bb97616a19432e1b46565b6b6065276b657 +Subproject commit 4560639eb4035448cc8adc4535a1957fa82924ab -- GitLab