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