diff --git a/matlab/discretionary_policy_1.m b/matlab/discretionary_policy_1.m index 4f18ec737..16143e44e 100644 --- a/matlab/discretionary_policy_1.m +++ b/matlab/discretionary_policy_1.m @@ -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 . -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') diff --git a/matlab/stoch_simul.m b/matlab/stoch_simul.m index 9d6d798b5..4740e7032 100644 --- a/matlab/stoch_simul.m +++ b/matlab/stoch_simul.m @@ -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);