From 21004adf031f72449a13d4fe3c98fd9aaa46e1b7 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer <jpfeifer@gmx.de> Date: Thu, 28 Apr 2022 21:49:05 +0200 Subject: [PATCH] evaluate_steady_state.m: correctly account for presence of auxiliary variables potentially depending on Lagrange multipliers Otherwise error message due to NaN may be thrown out due to them non having been set. Closes https://git.dynare.org/Dynare/preprocessor/-/issues/94 --- matlab/evaluate_steady_state.m | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/matlab/evaluate_steady_state.m b/matlab/evaluate_steady_state.m index 0f83e14c0e..3379704ac2 100644 --- a/matlab/evaluate_steady_state.m +++ b/matlab/evaluate_steady_state.m @@ -67,8 +67,8 @@ if options.ramsey_policy else [resids, ~ , jacob]= evaluate_static_model(ys,exo_ss,params,M,options); end - n_multipliers=M.ramsey_eq_nbr; - nan_indices=find(isnan(resids(n_multipliers+1:end))); + n_ramsey_equations=M.ramsey_eq_nbr; + nan_indices=find(isnan(resids(n_ramsey_equations+1:n_ramsey_equations+M.orig_eq_nbr))); % if ~isempty(nan_indices) if options.debug @@ -91,7 +91,7 @@ if options.ramsey_policy return end - if any(imag(ys(n_multipliers+1:end))) + if any(imag(ys(n_ramsey_equations+1:n_ramsey_equations+M.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') @@ -106,7 +106,7 @@ if options.ramsey_policy return end - if max(abs(resids(n_multipliers+1:end))) > options.solve_tolf %does it solve for all variables except for the Lagrange multipliers + 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 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') @@ -114,9 +114,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_multipliers+1:M.endo_nbr + for ii=n_ramsey_equations+1:M.endo_nbr if abs(resids(ii)) > options.solve_tolf - fprintf('\t Equation number %d: %f\n',ii-n_multipliers, resids(ii)) + fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii)) end end skipline(2) @@ -150,7 +150,7 @@ if options.ramsey_policy end end if steadystate_flag - nan_indices_mult=find(isnan(resids(1:n_multipliers))); + nan_indices_mult=find(isnan(resids(1:n_ramsey_equations))); 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'); @@ -185,9 +185,9 @@ if options.ramsey_policy %check whether steady state really solves the model resids = evaluate_static_model(ys,exo_ss,params,M,options); - n_multipliers=M.ramsey_eq_nbr; - nan_indices_multiplier=find(isnan(resids(1:n_multipliers))); - nan_indices=find(isnan(resids(n_multipliers+1:end))); + 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))); if ~isempty(nan_indices) if options.debug @@ -233,14 +233,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_multipliers + for ii=1:n_ramsey_equations 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_multipliers+1:M.endo_nbr + for ii=n_ramsey_equations+1:M.endo_nbr if abs(resids(ii)) > options.solve_tolf/100 - fprintf('\t Equation number %d: %f\n',ii-n_multipliers, resids(ii)) + fprintf('\t Equation number %d: %f\n',ii-n_ramsey_equations, resids(ii)) end end skipline(2) -- GitLab