commit
1f44c78170
|
@ -43,7 +43,7 @@ options_.steadystate.nocheck = 1; %locally disable checking because Lagrange mul
|
||||||
nl_func = @(x) dyn_ramsey_static_1(x,M,options_,oo);
|
nl_func = @(x) dyn_ramsey_static_1(x,M,options_,oo);
|
||||||
|
|
||||||
% check_static_model is a subfunction
|
% check_static_model is a subfunction
|
||||||
if check_static_model(ys_init,M,options_,oo) && ~options_.steadystate_flag
|
if ~options_.steadystate_flag && check_static_model(ys_init,M,options_,oo)
|
||||||
steady_state = ys_init;
|
steady_state = ys_init;
|
||||||
return
|
return
|
||||||
elseif options_.steadystate_flag
|
elseif options_.steadystate_flag
|
||||||
|
|
|
@ -20,7 +20,7 @@ function [residuals,check1,jacob] = evaluate_static_model(ys,exo_ss,params,M,opt
|
||||||
% SPECIAL REQUIREMENTS
|
% SPECIAL REQUIREMENTS
|
||||||
% none
|
% none
|
||||||
|
|
||||||
% Copyright (C) 2001-2020 Dynare Team
|
% Copyright (C) 2001-2021 Dynare Team
|
||||||
%
|
%
|
||||||
% This file is part of Dynare.
|
% This file is part of Dynare.
|
||||||
%
|
%
|
||||||
|
@ -39,8 +39,14 @@ function [residuals,check1,jacob] = evaluate_static_model(ys,exo_ss,params,M,opt
|
||||||
|
|
||||||
check1 = 0;
|
check1 = 0;
|
||||||
if options.bytecode
|
if options.bytecode
|
||||||
residuals = bytecode('evaluate','static',ys,...
|
if nargout<3
|
||||||
|
[residuals]= bytecode('evaluate','static',ys,...
|
||||||
exo_ss, params, ys, 1);
|
exo_ss, params, ys, 1);
|
||||||
|
else
|
||||||
|
[residuals, junk]= bytecode('evaluate','static',ys,...
|
||||||
|
exo_ss, params, ys, 1);
|
||||||
|
jacob = junk.g1;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
fh_static = str2func([M.fname '.static']);
|
fh_static = str2func([M.fname '.static']);
|
||||||
if options.block
|
if options.block
|
||||||
|
@ -60,7 +66,14 @@ else
|
||||||
[~, ~, T] = feval(fh_static,b,ys,exo_ss,params,T);
|
[~, ~, T] = feval(fh_static,b,ys,exo_ss,params,T);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if nargout==3
|
||||||
|
jacob=NaN(length(ys));
|
||||||
|
end
|
||||||
else
|
else
|
||||||
residuals = feval(fh_static,ys,exo_ss,params);
|
if nargout<3
|
||||||
|
residuals = feval(fh_static,ys,exo_ss,params);
|
||||||
|
else
|
||||||
|
[residuals, jacob] = feval(fh_static,ys,exo_ss,params);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -57,7 +57,11 @@ if options.ramsey_policy
|
||||||
[ys,params,info] = evaluate_steady_state_file(ys_init,exo_ss,M, ...
|
[ys,params,info] = evaluate_steady_state_file(ys_init,exo_ss,M, ...
|
||||||
options,steadystate_check_flag);
|
options,steadystate_check_flag);
|
||||||
%test whether it solves model conditional on the instruments
|
%test whether it solves model conditional on the instruments
|
||||||
resids = evaluate_static_model(ys,exo_ss,params,M,options);
|
if ~options.debug
|
||||||
|
resids = evaluate_static_model(ys,exo_ss,params,M,options);
|
||||||
|
else
|
||||||
|
[resids, ~ , jacob]= evaluate_static_model(ys,exo_ss,params,M,options);
|
||||||
|
end
|
||||||
n_multipliers=M.ramsey_eq_nbr;
|
n_multipliers=M.ramsey_eq_nbr;
|
||||||
nan_indices=find(isnan(resids(n_multipliers+1:end)));
|
nan_indices=find(isnan(resids(n_multipliers+1:end)));
|
||||||
|
|
||||||
|
@ -132,6 +136,30 @@ if options.ramsey_policy
|
||||||
fprintf('%s\n',M.endo_names{nanrow(iter)});
|
fprintf('%s\n',M.endo_names{nanrow(iter)});
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
nan_indices_mult=find(isnan(resids(1:n_multipliers)));
|
||||||
|
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');
|
||||||
|
end
|
||||||
|
[infrow,infcol]=find(isinf(jacob));
|
||||||
|
|
||||||
|
if ~isempty(infrow)
|
||||||
|
fprintf('\nevaluate_steady_state: The Jacobian of the dynamic model contains Inf. The problem is associated with:\n\n')
|
||||||
|
display_problematic_vars_Jacobian(infrow,infcol,M,ys,'static','evaluate_steady_state: ')
|
||||||
|
end
|
||||||
|
|
||||||
|
if ~isreal(jacob)
|
||||||
|
[imagrow,imagcol]=find(abs(imag(jacob))>1e-15);
|
||||||
|
fprintf('\nevaluate_steady_state: The Jacobian of the dynamic model contains imaginary parts. The problem arises from: \n\n')
|
||||||
|
display_problematic_vars_Jacobian(imagrow,imagcol,M,ys,'static','evaluate_steady_state: ')
|
||||||
|
end
|
||||||
|
|
||||||
|
[nanrow,nancol]=find(isnan(jacob));
|
||||||
|
if ~isempty(nanrow)
|
||||||
|
fprintf('\nevaluate_steady_state: The Jacobian of the dynamic model contains NaN. The problem is associated with:\n\n')
|
||||||
|
display_problematic_vars_Jacobian(nanrow,nancol,M,ys,'static','evaluate_steady_state: ')
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
%either if no steady state file or steady state file without problems
|
%either if no steady state file or steady state file without problems
|
||||||
[ys,params,info] = dyn_ramsey_static(ys_init,M,options,oo);
|
[ys,params,info] = dyn_ramsey_static(ys_init,M,options,oo);
|
||||||
|
|
Loading…
Reference in New Issue