From 6613d1d41e8d80e15e5a104ba0ba2e12af3432c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 30 Oct 2024 14:19:21 +0100 Subject: [PATCH] get_ar_ec_matrices.m: use sparse representation for the model Ref. #1859 --- matlab/get_ar_ec_matrices.m | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/matlab/get_ar_ec_matrices.m b/matlab/get_ar_ec_matrices.m index 38ddaa049..cddf260ff 100644 --- a/matlab/get_ar_ec_matrices.m +++ b/matlab/get_ar_ec_matrices.m @@ -68,12 +68,10 @@ else end %% Call Dynamic Function -[~, g1] = feval([M_.fname '.dynamic'], ... - ones(max(max(M_.lead_lag_incidence)), 1), ... - ones(1, M_.exo_nbr), ... - M_.params, ... - zeros(M_.endo_nbr, 1), ... - 1); +g1 = feval([M_.fname '.sparse.dynamic_g1'], ones(3*M_.endo_nbr, 1), ones(1, M_.exo_nbr), ... + M_.params, zeros(M_.endo_nbr, 1), ... + M_.dynamic_g1_sparse_rowval, M_.dynamic_g1_sparse_colval, ... + M_.dynamic_g1_sparse_colptr); % Choose rows of Jacobian based on equation tags ntags = length(M_.(model_type).(model_name).eqtags); @@ -88,8 +86,7 @@ g1 = -1 * g1(g1rows, :); % Check for leads if rows(M_.lead_lag_incidence) == 3 - idxs = M_.lead_lag_incidence(3, M_.lead_lag_incidence(3, :) ~= 0); - assert(~any(any(g1(g1rows, idxs))), ... + assert(~any(any(g1(g1rows, 2*M_.endo_nbr+(1:M_.endo_nbr)))), ... ['You cannot have leads in the equations specified by ' strjoin(M_.(model_type).(model_name).eqtags, ',')]); end @@ -152,11 +149,11 @@ for i = 1:length(lhs) for j = 1:length(rhsvars{i}.vars) var = rhsvars{i}.vars(j); if rhsvars{i}.lags(j) == -1 - g1col = M_.lead_lag_incidence(1, var); + g1col = var; else - g1col = M_.lead_lag_incidence(2, var); + g1col = var + M_.endo_nbr; end - if g1col ~= 0 && any(g1(:, g1col)) + if any(g1(:, g1col)) if rhsvars{i}.arRhsIdxs(j) > 0 % Fill AR lag = findLagForVar(var, -rhsvars{i}.lags(j), 0, lhs); -- GitLab