Preprocessor: overhaul of M_ fields counting Ramsey/discretionary orig endos/eqs
– new fields: M_.ramsey_orig_{eq,endo}_nbr – drop M_.ramsey_eq_nbr and M_.orig_eq_nbr – new field: M_.discretionary_orig_eq_nbrsilicon
parent
674ebce84b
commit
ffe6eb4d40
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 70192aec718e5f1e13f1513a7a23e48c31f30714
|
||||
Subproject commit 4282c98527817ed587d6df58b96a5d4432aa0072
|
Loading…
Reference in New Issue