diff --git a/matlab/get_ar_ec_matrices.m b/matlab/get_ar_ec_matrices.m index 38ddaa049c579afa29582cbb45562c1e63dcb0ea..cddf260ff99ef0bfe48755308fee173e6d5a05ce 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);