diff --git a/matlab/perfect-foresight-models/perfect_foresight_solver.m b/matlab/perfect-foresight-models/perfect_foresight_solver.m index 5009efee1..580fb6a77 100644 --- a/matlab/perfect-foresight-models/perfect_foresight_solver.m +++ b/matlab/perfect-foresight-models/perfect_foresight_solver.m @@ -58,18 +58,21 @@ end initperiods = 1:M_.maximum_lag; lastperiods = (M_.maximum_endo_lag+options_.periods+1):(M_.maximum_endo_lag+options_.periods+M_.maximum_endo_lead); -% Disable warnings if homotopy -if ~options_.no_homotopy - warning off all -end oo_ = simulation_core(options_, M_, oo_); % If simulation failed try homotopy. if ~oo_.deterministic_simulation.status && ~options_.no_homotopy + skipline() disp('Simulation of the perfect foresight model failed!') skipline() + % Disable warnings if homotopy + warning off all + % Do not print anything + oldverbositylevel = options_.verbosity; + options_.verbosity = 0; + exosim = oo_.exo_simul; exoinit = repmat(oo_.exo_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1); @@ -141,10 +144,8 @@ if ~oo_.deterministic_simulation.status && ~options_.no_homotopy end fprintf('++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n') skipline() -end - -if ~options_.no_homotopy - warning off all + options_.verbosity = oldverbositylevel; + warning on all end if oo_.deterministic_simulation.status == 1 diff --git a/matlab/perfect-foresight-models/sim1.m b/matlab/perfect-foresight-models/sim1.m index 4ec3a8583..481cffb4e 100644 --- a/matlab/perfect-foresight-models/sim1.m +++ b/matlab/perfect-foresight-models/sim1.m @@ -30,7 +30,7 @@ function oo_ = sim1(options_, M_, oo_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -verbose = options_.no_homotopy; +verbose = options_.verbosity; endogenous_terminal_period = options_.endogenous_terminal_period; vperiods = options_.periods*ones(1,options_.simul.maxit); @@ -76,8 +76,9 @@ Y = endo_simul(:); if verbose skipline() - disp (['-----------------------------------------------------']) ; - fprintf('MODEL SIMULATION:\n'); + printline(56) + disp('MODEL SIMULATION:') + skipline() end model_dynamic = str2func([M_.fname,'_dynamic']); @@ -144,6 +145,12 @@ for iter = 1:options_.simul.maxit end skipline() end + + if verbose + str = sprintf('Iter: %s,\t err. = %s, \t time = %s',num2str(iter),num2str(err), num2str(etime(clock,h2))); + disp(str); + end + if err < options_.dynatol.f stop = 1 ; @@ -175,23 +182,21 @@ if stop oo_.deterministic_simulation.periods = vperiods(1:iter); oo_.endo_simul = reshape(Y,ny,periods+maximum_lag+M_.maximum_lead); if verbose - skipline(); - fprintf('\nSimulation terminated after %d iterations.\n',iter); - fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); + skipline() + disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1)))) if ~isreal(res) || ~isreal(Y) - fprintf('WARNING: Simulation terminated with imaginary parts in the residuals or endogenous variables.\n'); + disp('Simulation terminated with imaginary parts in the residuals or endogenous variables.') else - fprintf('WARNING: Simulation terminated with NaN or Inf in the residuals or endogenous variables.\n'); + disp('Simulation terminated with NaN or Inf in the residuals or endogenous variables.') end - fprintf('WARNING: There is most likely something wrong with your model. Try model_diagnostics.\n'); + disp('There is most likely something wrong with your model. Try model_diagnostics or another simulation method.') + printline(105) end else if verbose skipline(); - fprintf('\nSimulation concluded successfully after %d iterations.\n',iter); - fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); - fprintf('Max. Abs. Error : %16.13f\n',err); - fprintf('Convergency obtained!\n'); + disp(sprintf('Total time of simulation: %s', num2str(etime(clock,h1)))) + printline(56) end oo_.deterministic_simulation.status = true;% Convergency obtained. oo_.deterministic_simulation.error = err; @@ -202,10 +207,9 @@ if stop elseif ~stop if verbose skipline(); - fprintf('\nSimulation terminated after %d iterations.\n',iter); - fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); - fprintf('Max. Abs. Error : %16.13f\n',err); - fprintf('WARNING : maximum number of iterations is reached (modify option maxit).\n') ; + disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1)))) + disp('Maximum number of iterations is reached (modify option maxit).') + printline(62) end oo_.deterministic_simulation.status = false;% more iterations are needed. oo_.deterministic_simulation.error = err; @@ -214,6 +218,5 @@ elseif ~stop end if verbose - disp (['-----------------------------------------------------']) ; skipline(); end diff --git a/matlab/perfect-foresight-models/sim1_lbj.m b/matlab/perfect-foresight-models/sim1_lbj.m index 141dbf7a9..00f481a84 100644 --- a/matlab/perfect-foresight-models/sim1_lbj.m +++ b/matlab/perfect-foresight-models/sim1_lbj.m @@ -49,9 +49,13 @@ isf1 = [nyp+ny+1:nyf+nyp+ny+1] ; stop = 0 ; iz = [1:ny+nyp+nyf]; -disp (['-----------------------------------------------------']) ; -disp (['MODEL SIMULATION :']) ; -fprintf('\n') ; +verbose = options_.verbosity; + +if verbose + printline(56) + disp(['MODEL SIMULATION :']) + skipline() +end it_init = M_.maximum_lag+1 ; @@ -98,16 +102,18 @@ for iter = 1:options_.simul.maxit end err = max(max(abs(c./options_.scalv'))); - disp([num2str(iter) ' - err = ' num2str(err)]) ; - disp([' Time of iteration :' num2str(etime(clock,h2))]) ; + + if verbose + str = sprintf('Iter: %s,\t err. = %s, \t time = %s',num2str(iter),num2str(err), num2str(etime(clock,h2))); + disp(str); + end if err < options_.dynatol.f stop = 1 ; - fprintf('\n') ; - disp([' Total time of simulation :' num2str(etime(clock,h1))]) ; - fprintf('\n') ; - disp([' Convergency obtained.']) ; - fprintf('\n') ; + if verbose + skipline() + disp(sprintf('Total time of simulation: %s', num2str(etime(clock,h1)))) + end oo_.deterministic_simulation.status = 1;% Convergency obtained. oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.iterations = iter; @@ -116,15 +122,21 @@ for iter = 1:options_.simul.maxit end if ~stop - fprintf('\n') ; - disp([' Total time of simulation :' num2str(etime(clock,h1))]) ; - fprintf('\n') ; - disp(['WARNING : maximum number of iterations is reached (modify options_.simul.maxit).']) ; - fprintf('\n') ; + if verbose + disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1)))) + disp('Maximum number of iterations is reached (modify option maxit).') + end oo_.deterministic_simulation.status = 0;% more iterations are needed. oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.errors = c/abs(err); oo_.deterministic_simulation.iterations = options_.simul.maxit; end -disp (['-----------------------------------------------------']) ; +if verbose + if stop + printline(56) + else + printline(62) + end + skipline() +end