diff --git a/matlab/display_problematic_vars_Jacobian.m b/matlab/display_problematic_vars_Jacobian.m index 07fe5ecf13d2bdb0e316b670a540ca6e1ce256bd..f204b421a877e4525e4305869b9fa3c0d425018e 100644 --- a/matlab/display_problematic_vars_Jacobian.m +++ b/matlab/display_problematic_vars_Jacobian.m @@ -16,7 +16,7 @@ function []=display_problematic_vars_Jacobian(problemrow,problemcol,M_,x,type,ca % none. % -% Copyright © 2014-2021 Dynare Team +% Copyright © 2014-2023 Dynare Team % % This file is part of Dynare. % @@ -37,7 +37,7 @@ skipline(); if nargin<6 caller_string=''; end -initial_aux_eq_nbr=M_.ramsey_eq_nbr; +initial_aux_eq_nbr=M_.ramsey_orig_endo_nbr; if strcmp(type,'dynamic') for ii=1:length(problemrow) if problemcol(ii)>max(M_.lead_lag_incidence) diff --git a/matlab/dyn_ramsey_static.m b/matlab/dyn_ramsey_static.m index f23db49d8234174b9647c0c8d0cb5d4702b83259..c9bb88479622eef383ccdc7546c7177f3d9dc8b4 100644 --- a/matlab/dyn_ramsey_static.m +++ b/matlab/dyn_ramsey_static.m @@ -100,10 +100,9 @@ params = M.params; endo_nbr = M.endo_nbr; endo_names = M.endo_names; orig_endo_nbr = M.orig_endo_nbr; -aux_vars_type = [M.aux_vars.type]; -orig_endo_aux_nbr = orig_endo_nbr + min(find(aux_vars_type == 6)) - 1; -orig_eq_nbr = M.orig_eq_nbr; -inst_nbr = orig_endo_aux_nbr - orig_eq_nbr; +ramsey_orig_endo_nbr = M.ramsey_orig_endo_nbr; +ramsey_orig_eq_nbr = M.ramsey_orig_eq_nbr; +inst_nbr = ramsey_orig_endo_nbr - ramsey_orig_eq_nbr; % indices of Lagrange multipliers fname = M.fname; @@ -161,7 +160,7 @@ end % the auxiliary variables before the Lagrange multipliers are treated % as ordinary endogenous variables A = feval([fname '.ramsey_multipliers_static_g1'], xx, exo_ss, params, M.ramsey_multipliers_static_g1_sparse_rowval, M.ramsey_multipliers_static_g1_sparse_colval, M.ramsey_multipliers_static_g1_sparse_colptr); -y = res(1:orig_endo_aux_nbr); +y = res(1:ramsey_orig_endo_nbr); mult = -A\y; resids1 = y+A*mult; @@ -175,13 +174,13 @@ end if options_.steadystate_flag resids = r1; else - resids = [res(orig_endo_aux_nbr+(1:orig_endo_nbr-inst_nbr)); r1]; + resids = [res(ramsey_orig_endo_nbr+(1:orig_endo_nbr-inst_nbr)); r1]; end rJ = []; if needs_set_auxiliary_variables - steady_state = s_a_v_func([xx(1:orig_endo_aux_nbr); mult]); + steady_state = s_a_v_func([xx(1:ramsey_orig_endo_nbr); mult]); else - steady_state = [xx(1:orig_endo_aux_nbr); mult]; + steady_state = [xx(1:ramsey_orig_endo_nbr); mult]; end function result = check_static_model(ys,M,options_,oo) diff --git a/matlab/evaluate_steady_state.m b/matlab/evaluate_steady_state.m index b2be3d0545f1dbf427a3a4d29c85bcf3d9e6fbf0..3ac5164e8334694e294e6fab6598a1c3be63c436 100644 --- a/matlab/evaluate_steady_state.m +++ b/matlab/evaluate_steady_state.m @@ -82,8 +82,7 @@ if options.ramsey_policy else [resids, ~ , jacob]= evaluate_static_model(ys,exo_ss,params,M,options); end - n_ramsey_equations=M.ramsey_eq_nbr; - nan_indices=find(isnan(resids(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))); % + nan_indices=find(isnan(resids(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr)))); if ~isempty(nan_indices) if options.debug @@ -106,7 +105,7 @@ if options.ramsey_policy return end - if any(imag(ys(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))) + if any(imag(ys(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr)))) if options.debug fprintf('\nevaluate_steady_state: The steady state file computation for the Ramsey problem resulted in complex numbers.\n') fprintf('evaluate_steady_state: The steady state was computed conditional on the following initial instrument values: \n') @@ -121,7 +120,7 @@ if options.ramsey_policy return end - if max(abs(resids(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))) > options.solve_tolf %does it solve for all variables except for the Lagrange multipliers + if max(abs(resids(M.ramsey_orig_endo_nbr+(1:M.ramsey_orig_eq_nbr)))) > options.solve_tolf %does it solve for all variables except for the Lagrange multipliers if options.debug fprintf('\nevaluate_steady_state: The steady state file does not solve the steady state for the Ramsey problem.\n') fprintf('evaluate_steady_state: Conditional on the following instrument values: \n') @@ -129,9 +128,9 @@ if options.ramsey_policy fprintf('\t %s \t %f \n',options.instruments{ii},ys_init(strmatch(options.instruments{ii},M.endo_names,'exact'))) end fprintf('evaluate_steady_state: the following equations have non-zero residuals: \n') - for ii=n_ramsey_equations+1:M.endo_nbr + for ii=M.ramsey_orig_endo_nbr+1:M.endo_nbr if abs(resids(ii)) > options.solve_tolf - fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii)) + fprintf('\t Equation number %d: %f\n',ii-M.ramsey_orig_endo_nbr, resids(ii)) end end skipline(2) @@ -165,7 +164,7 @@ if options.ramsey_policy end end if steadystate_flag - nan_indices_mult=find(isnan(resids(1:n_ramsey_equations))); + nan_indices_mult=find(isnan(resids(1:M.ramsey_orig_endo_nbr))); if any(nan_indices_mult) fprintf('evaluate_steady_state: The steady state results NaN for auxiliary equation %u.\n',nan_indices_mult); fprintf('evaluate_steady_state: This is often a sign of problems.\n'); @@ -200,9 +199,8 @@ if options.ramsey_policy %check whether steady state really solves the model resids = evaluate_static_model(ys,exo_ss,params,M,options); - n_ramsey_equations=M.ramsey_eq_nbr; - nan_indices_multiplier=find(isnan(resids(1:n_ramsey_equations))); - nan_indices=find(isnan(resids(n_ramsey_equations+1:end))); + nan_indices_multiplier=find(isnan(resids(1:M.ramsey_orig_endo_nbr))); + nan_indices=find(isnan(resids(M.ramsey_orig_endo_nbr+1:end))); if ~isempty(nan_indices) if options.debug @@ -248,14 +246,14 @@ if options.ramsey_policy fprintf('\t %s \t %f \n',options.instruments{i},ys(strmatch(options.instruments{i},M.endo_names,'exact'))) end fprintf('evaluate_steady_state: The following equations have non-zero residuals: \n') - for ii=1:n_ramsey_equations + for ii=1:M.ramsey_orig_endo_nbr if abs(resids(ii)) > options.solve_tolf/100 fprintf('\t Auxiliary Ramsey equation number %d: %f\n',ii, resids(ii)) end end - for ii=n_ramsey_equations+1:M.endo_nbr + for ii=M.ramsey_orig_endo_nbr+1:M.endo_nbr if abs(resids(ii)) > options.solve_tolf/100 - fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii)) + fprintf('\t Equation number %d: %f\n',ii-M.ramsey_orig_endo_nbr, resids(ii)) end end skipline(2) diff --git a/matlab/model_diagnostics.m b/matlab/model_diagnostics.m index 752d1416a8281100cc580512a68934ac0e4cc082..845bc85860e2733a621fde9c1c80f0151b06ce42 100644 --- a/matlab/model_diagnostics.m +++ b/matlab/model_diagnostics.m @@ -41,8 +41,7 @@ if options.ramsey_policy %test whether specification matches inst_nbr = size(options.instruments,1); if inst_nbr~=0 - orig_endo_aux_nbr = M.orig_endo_nbr + min(find([M.aux_vars.type] == 6)) - 1; - implied_inst_nbr = orig_endo_aux_nbr - M.orig_eq_nbr; + implied_inst_nbr = M.ramsey_orig_endo_nbr - M.ramsey_orig_eq_nbr; if inst_nbr>implied_inst_nbr warning('You have specified more steady state instruments than there are omitted equations. While there are use cases for this setup, it is rather unusual. Check whether this is desired.') elseif inst_nbr<implied_inst_nbr diff --git a/matlab/resid.m b/matlab/resid.m index b7586ccea1490c72468cc91716cdd9e1edbef726..620ace44886124287047d5f9d3a65317b0e26a8b 100644 --- a/matlab/resid.m +++ b/matlab/resid.m @@ -12,7 +12,7 @@ function z = resid(options_resid_) % SPECIAL REQUIREMENTS % none -% Copyright © 2001-2022 Dynare Team +% Copyright © 2001-2023 Dynare Team % % This file is part of Dynare. % @@ -93,15 +93,25 @@ if nargout == 0 fprintf('Residuals of the static equations%s:',disp_string) skipline() any_non_zero_residual = false; - for i=1:M_.orig_eq_nbr - if abs(z(i+M_.ramsey_eq_nbr)) < options_.solve_tolf/100 + if options_.ramsey_policy + first_eq = M_.ramsey_orig_endo_nbr+1; + last_eq = M_.ramsey_orig_endo_nbr+M_.ramsey_orig_eq_nbr; + elseif options_.discretionary_policy + first_eq = 1; + last_eq = M_.discretionary_orig_eq_nbr; + else + first_eq = 1; + last_eq = M_.orig_endo_nbr; + end + for i=first_eq:last_eq + if abs(z(i)) < options_.solve_tolf/100 tmp = 0; else - tmp = z(i+M_.ramsey_eq_nbr); + tmp = z(i); any_non_zero_residual = true; end if istag - tg = tags(cell2mat(tags(:,1)) == i+M_.ramsey_eq_nbr,2:3); % all tags for equation i + tg = tags(cell2mat(tags(:,1)) == i,2:3); % all tags for equation i ind = strmatch('name', cellstr( tg(:,1) ) ); end if ~(non_zero && tmp == 0) diff --git a/preprocessor b/preprocessor index 70192aec718e5f1e13f1513a7a23e48c31f30714..4282c98527817ed587d6df58b96a5d4432aa0072 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 70192aec718e5f1e13f1513a7a23e48c31f30714 +Subproject commit 4282c98527817ed587d6df58b96a5d4432aa0072