Discretionary policy: preparatory work for estimation

This removes global variables from discretionary_policy_1.m, and also adapts
the behaviour and interface of the function so that it is similar to
resol.m (in particular, it no longer returns an empty “dr” in case of failure,
and it sets “oo_.dr”).

Ref. #1173
time-shift
Sébastien Villemot 2020-02-03 18:02:55 +01:00
parent 929b34a168
commit 59e11615a0
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 11 additions and 12 deletions

View File

@ -1,6 +1,8 @@
function [dr,ys,info]=discretionary_policy_1(oo_,Instruments)
function [dr, info, M_, options_, oo_]=discretionary_policy_1(Instruments, M_, options_, oo_)
% Higher-level function for solving discretionary optimal policy
% Has the same interface as resol.m
% Copyright (C) 2007-2018 Dynare Team
% Copyright (C) 2007-2020 Dynare Team
%
% This file is part of Dynare.
%
@ -17,11 +19,8 @@ function [dr,ys,info]=discretionary_policy_1(oo_,Instruments)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
global M_ options_
persistent Hold
dr = [];
ys = [];
info = 0;
if isempty(options_.qz_criterium)
@ -150,15 +149,15 @@ else
[H,G,info]=discretionary_policy_engine(Alag,A0,Alead,B,W,instr_id,beta,solve_maxit,discretion_tol,qz_criterium);
end
% set the state
dr=oo_.dr;
if info
dr=[];
return
else
Hold=H; %save previous solution
% Hold=[]; use this line if persistent command is not used.
end
% set the state
dr=oo_.dr;
dr.ys =zeros(endo_nbr,1);
dr=set_state_space(dr,M_,options_);
order_var=dr.order_var;
@ -168,8 +167,8 @@ dr.ghu=G(order_var,:);
Selection=lead_lag_incidence(1,order_var)>0;%select state variables
dr.ghx=T(:,Selection);
ys=NondistortionarySteadyState(M_);
dr.ys=ys; % <--- dr.ys =zeros(NewEndo_nbr,1);
dr.ys=NondistortionarySteadyState(M_);
oo_.dr = dr;
function ys=NondistortionarySteadyState(M_)
if exist([M_.fname,'_steadystate.m'],'file')

View File

@ -1,6 +1,6 @@
function [info, oo_, options_] = stoch_simul(M_, options_, oo_, var_list)
% Copyright (C) 2001-2019 Dynare Team
% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@ -82,7 +82,7 @@ elseif options_.discretionary_policy
if ~options_.linear
error('discretionary_policy: only linear-quadratic problems can be solved');
end
[oo_.dr, ~, info] = discretionary_policy_1(oo_,options_.instruments);
[~,info,M_,options_,oo_] = discretionary_policy_1(options_.instruments,M_,options_,oo_);
else
if options_.logged_steady_state %if steady state was previously logged, undo this
oo_.dr.ys=exp(oo_.dr.ys);