From effcd3d12a1e6e49081dccd6d5844ce545324d0d Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Tue, 21 Mar 2017 09:48:55 +0100 Subject: [PATCH 01/59] Fix typo in manual ts does not exist --- doc/dynare.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index e5bff3928..67e7d9030 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -12095,7 +12095,7 @@ plot(ts2.data,'--r'); % Plot of the filtered y. hold off axis tight id = get(gca,'XTick'); -set(gca,'XTickLabel',strings(ts.dates(id))); +set(gca,'XTickLabel',strings(ts1.dates(id))); @end example @iftex From ee2c30fd97c76b64cfa1f6c3fbef3d2add7e1fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 22 Mar 2017 14:04:35 +0100 Subject: [PATCH 02/59] Partialm cherry-pick of 28e95d817a181f758dab595d6a14de0ff348bed5 Give more informations in case of NaN, Inf or non real variables. Closes PR #1385. --- matlab/perfect-foresight-models/sim1.m | 28 +++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/matlab/perfect-foresight-models/sim1.m b/matlab/perfect-foresight-models/sim1.m index 05ef5b186..bb93691ed 100644 --- a/matlab/perfect-foresight-models/sim1.m +++ b/matlab/perfect-foresight-models/sim1.m @@ -184,7 +184,33 @@ if stop if verbose skipline() disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1)))) - disp('Simulation terminated with NaN or Inf in the residuals or endogenous variables.') + dyy=reshape(dy,[size(endogenousvariables,1) periods])'; + if ~isreal(res) || ~isreal(Y) + disp('Simulation terminated with imaginary parts in the residuals or endogenous variables.') + if any(~isreal(dy)) + indx = find(any(~isreal(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Newton algorithm provided complex number for variables:') + fprintf('%s, ', endo_names{:}); + skipline() + end + else + disp('Simulation terminated with NaN or Inf in the residuals or endogenous variables.') + if any(isnan(dy)) + indx = find(any(isnan(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Newton algorithm provided NaN for variables:') + fprintf('%s, ',endo_names{:}); + skipline() + end + if any(isinf(dy)) + indx = find(any(isinf(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Newton algorithm diverged (Inf) for variables:') + fprintf('%s, ',endo_names{:}); + skipline() + end + end disp('There is most likely something wrong with your model. Try model_diagnostics or another simulation method.') printline(105) end From 76097a799f40c3cb9f3441bbe069ca2891bcda3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 22 Mar 2017 15:20:13 +0100 Subject: [PATCH 03/59] Added missing struct2array routine. --- matlab/dynare_config.m | 5 ++++ matlab/missing/struct2array/struct2array.m | 29 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 matlab/missing/struct2array/struct2array.m diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index e5812af90..6463a7506 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -118,6 +118,11 @@ if (isoctave && ~user_has_octave_forge_package('statistics')) ... p{end+1} = '/missing/nanmean'; end +% Check if struct2array is available. +if ~exist('struct2array') + p{end+1} = '/missing/struct2array'; +end + P = cellfun(@(c)[dynareroot(1:end-1) c], p, 'uni',false); % Get mex files folder(s) diff --git a/matlab/missing/struct2array/struct2array.m b/matlab/missing/struct2array/struct2array.m new file mode 100644 index 000000000..b1c1370dd --- /dev/null +++ b/matlab/missing/struct2array/struct2array.m @@ -0,0 +1,29 @@ +function a = struct2array(s) + +% INPUTS +% - s [struct] with N fields, field i contains a n_i*m_i array of doubles. +% +% OUPUTS +% - a [double] column vector with sum(n_i*m_i, i=1,...,N) elements. + +% Copyright (C) 2017 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +assert(isstruct(s), 'struct2array:: Argument has to be a structure!') + +c = cellfun(@vec, struct2cell(s), 'UniformOutput', false); +a = vertcat(c{:}); \ No newline at end of file From a9dd046db7fc75571916e029275c775da9fc2bbb Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 22:30:14 +0100 Subject: [PATCH 04/59] fill in end of sample conditional shock decompositions. --- matlab/annualized_shock_decomposition.m | 11 +++++++++++ matlab/realtime_shock_decomposition.m | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/matlab/annualized_shock_decomposition.m b/matlab/annualized_shock_decomposition.m index 8552b9d4f..e9f2633e5 100644 --- a/matlab/annualized_shock_decomposition.m +++ b/matlab/annualized_shock_decomposition.m @@ -271,6 +271,17 @@ end % fix total oo_.annualized_realtime_conditional_shock_decomposition.(['yr_' int2str(yr-nfrcst)])(:,end,:) = ... oo_.annualized_realtime_shock_decomposition.pool(:,end,yr-nfrcst:end); + if i==t1 + for my_forecast_=(nfrcst-1):-1:1, + oo_.annualized_realtime_conditional_shock_decomposition.(['yr_' int2str(yr-my_forecast_)]) = ... + oo_.annualized_realtime_shock_decomposition.pool(:,:,yr-my_forecast_:yr) - ... + oo_.annualized_realtime_forecast_shock_decomposition.(['yr_' int2str(yr-my_forecast_)])(:,:,1:my_forecast_+1); + oo_.annualized_realtime_conditional_shock_decomposition.(['yr_' int2str(yr-my_forecast_)])(:,end-1,:) = ... + oo_.annualized_realtime_forecast_shock_decomposition.(['yr_' int2str(yr-my_forecast_)])(:,end,1:my_forecast_+1); + oo_.annualized_realtime_conditional_shock_decomposition.(['yr_' int2str(yr-my_forecast_)])(:,end,:) = ... + oo_.annualized_realtime_shock_decomposition.pool(:,end,yr-my_forecast_:yr); + end + end end end % ztmp=oo_.realtime_shock_decomposition.pool(:,:,21:29)-oo_.realtime_forecast_shock_decomposition.time_21; diff --git a/matlab/realtime_shock_decomposition.m b/matlab/realtime_shock_decomposition.m index 96d72bf18..4f2f645b7 100644 --- a/matlab/realtime_shock_decomposition.m +++ b/matlab/realtime_shock_decomposition.m @@ -229,6 +229,18 @@ for j=presample+1:nobs, oo_.realtime_conditional_shock_decomposition.(['time_' int2str(j-forecast_)])(:,end,:) = ... zreal(:,end,j-forecast_:j); + if j==nobs + for my_forecast_=(forecast_-1):-1:1, + oo_.realtime_conditional_shock_decomposition.(['time_' int2str(j-my_forecast_)]) = ... + zreal(:,:,j-my_forecast_:j) - ... + oo_.realtime_forecast_shock_decomposition.(['time_' int2str(j-my_forecast_)])(:,:,1:my_forecast_+1); + oo_.realtime_conditional_shock_decomposition.(['time_' int2str(j-my_forecast_)])(:,end-1,:) = ... + oo_.realtime_forecast_shock_decomposition.(['time_' int2str(j-my_forecast_)])(:,end,1:my_forecast_+1); + oo_.realtime_conditional_shock_decomposition.(['time_' int2str(j-my_forecast_)])(:,end,:) = ... + zreal(:,end,j-my_forecast_:j); + end + end + end end From 780c1f5216f777a3aeb6608040bc164c96e112ac Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 22:37:59 +0100 Subject: [PATCH 05/59] provide userdata with info on actual varlist used --- matlab/graph_decomp.m | 2 +- matlab/graph_decomp_detail.m | 2 +- matlab/plot_shock_decomposition.m | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index 7740a07a9..b4d0ba9a3 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -198,7 +198,7 @@ for j=1:nvar c = uicontextmenu; hl.UIContextMenu=c; browse_menu = uimenu(c,'Label','Browse group'); - expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.use_shock_groups ''',''' deblank(endo_names(i_var(j),:)) ''',' int2str(i) ')']); + expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.use_shock_groups ''',''' deblank(mydata.shock_decomp.orig_varlist(j,:)) ''',' int2str(i) ')']); set(expand_menu,'UserData',mydata,'Tag',['group' int2str(i)]); for jmember = mydata.shock_group.shocks uimenu('parent',browse_menu,'Label',char(jmember)) diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 931cb64a2..95272dfc5 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -187,7 +187,7 @@ for j=1:nvar c = uicontextmenu; hax.UIContextMenu=c; browse_menu = uimenu(c,'Label','Browse group'); - expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.use_shock_groups ''',''' deblank(endo_names(i_var(j),:)) ''',' int2str(ic) ')']); + expand_menu = uimenu(c,'Label','Expand group','Callback',['expand_group(''' mydata.use_shock_groups ''',''' deblank(mydata.shock_decomp.orig_varlist(j,:)) ''',' int2str(ic) ')']); set(expand_menu,'UserData',mydata,'Tag',['group' int2str(ic)]); for jmember = mydata.shock_group.shocks uimenu('parent',browse_menu,'Label',char(jmember)) diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m index bc9534e21..5d6c9bf10 100644 --- a/matlab/plot_shock_decomposition.m +++ b/matlab/plot_shock_decomposition.m @@ -66,6 +66,10 @@ forecast_ = options_.shock_decomp.forecast; steadystate = options_.shock_decomp.steadystate; write_xls = options_.shock_decomp.write_xls; +if vintage_, + forecast_ = min(forecast_,options_.nobs-vintage_); +end + initial_date = options_.initial_date; if isfield(options_.shock_decomp,'q2a'), % private trap for aoa calls @@ -330,6 +334,8 @@ z = z(:,:,a:b); % end crop data options_.shock_decomp.fig_names=fig_names; +options_.shock_decomp.orig_varlist = varlist; + if detail_plot, graph_decomp_detail(z,shock_names,M_.endo_names,i_var,my_initial_date,M_,options_) else From b77791c5413fdfa14221c21d8dbd7f2282e421ea Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 23:06:19 +0100 Subject: [PATCH 06/59] ensure invhess is empty with slice for proper prior initialization of chains --- matlab/check_posterior_sampler_options.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/matlab/check_posterior_sampler_options.m b/matlab/check_posterior_sampler_options.m index 299b4b3f6..1980c0a79 100644 --- a/matlab/check_posterior_sampler_options.m +++ b/matlab/check_posterior_sampler_options.m @@ -418,6 +418,10 @@ if strcmp(posterior_sampler_options.posterior_sampling_method,'slice') posterior_sampler_options.V1=V1; posterior_sampler_options.WR=sqrt(diag(D))*3; end + else + if ~options_.load_mh_file && ~posterior_sampler_options.slice_initialize_with_mode, + posterior_sampler_options.invhess=[]; + end end % needs to be re-set to zero otherwise posterior analysis is filtered From 99dbc8c74d0ecf4c7a610c4a394fd85028cf2741 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 23:08:18 +0100 Subject: [PATCH 07/59] bug fix with redundant call to prior_bounds --- matlab/dynare_estimation_1.m | 1 - 1 file changed, 1 deletion(-) diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index 6693768ce..3435316fc 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -414,7 +414,6 @@ end if (any(bayestopt_.pshape >0 ) && options_.mh_replic) || ... (any(bayestopt_.pshape >0 ) && options_.load_mh_file) %% not ML estimation - bounds = prior_bounds(bayestopt_, options_.prior_trunc); outside_bound_pars=find(xparam1 < bounds.lb | xparam1 > bounds.ub); if ~isempty(outside_bound_pars) for ii=1:length(outside_bound_pars) From 1db86865f70db73cb5db841ec8678e7c0fb57bd3 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 23:24:41 +0100 Subject: [PATCH 08/59] better trap missing input arguments --- matlab/gsa/scatter_plots.m | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/matlab/gsa/scatter_plots.m b/matlab/gsa/scatter_plots.m index a2c71eeaf..9dbd363a0 100644 --- a/matlab/gsa/scatter_plots.m +++ b/matlab/gsa/scatter_plots.m @@ -1,5 +1,4 @@ function scatter_plots(X,xp,vnames,plotsymbol, fnam, dirname, figtitle, xparam1, DynareOptions) - % % Written by Marco Ratto % Joint Research Centre, The European Commission, @@ -53,16 +52,17 @@ if nargin<4 || isempty(plotsymbol) end end -if nargin<5 - fnam=''; +if nargin<5 || isempty(fnam) + fnam='scatter_plot'; end -if nargin<6, +if nargin<6 || isempty(dirname), dirname=''; nograph=1; + DynareOptions.nodisplay=0; else nograph=0; end -if nargin<7, +if nargin<7 || isempty(figtitle), figtitle=fnam; end if nargin<8, @@ -72,10 +72,8 @@ end figtitle_tex=strrep(figtitle,'_','\_'); fig_nam_=[fnam]; -if ~nograph, hh=dyn_figure(DynareOptions,'name',figtitle); set(hh,'userdata',{X,xp}) -end bf = 0.1; ffs = 0.05/(p-1); From c60379ae96fc59a998ad61a2b84afac7f86bf1b7 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Wed, 22 Mar 2017 23:32:19 +0100 Subject: [PATCH 09/59] upgrade call to evaluate_smoother --- matlab/gsa/scatter_callback.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matlab/gsa/scatter_callback.m b/matlab/gsa/scatter_callback.m index 8260cdf65..84b7d9ec0 100644 --- a/matlab/gsa/scatter_callback.m +++ b/matlab/gsa/scatter_callback.m @@ -23,7 +23,7 @@ function scatter_callback(K, type) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -global oo_ M_ +global oo_ M_ options_ bayestopt_ estim_params_ x=get(gcf,'userdata'); r2=x{1}; @@ -37,6 +37,6 @@ switch type case 'eval' disp('Evaluating smoother ...') - oo_=evaluate_smoother(xparam1,M_.endo_names); + [oo_, M_]=evaluate_smoother(xparam1,M_.endo_names,M_,oo_,options_,bayestopt_,estim_params_); % [rmse, lnam, r2,vv] = plot_fit(obsname{:}); end From 234aaacf92d204ed0cb26e482d875eca93c700a9 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Thu, 23 Mar 2017 00:01:11 +0100 Subject: [PATCH 10/59] factorized display of critical values. --- matlab/perfect-foresight-models/sim1.m | 56 +++++++++++++++----------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/matlab/perfect-foresight-models/sim1.m b/matlab/perfect-foresight-models/sim1.m index bb93691ed..3d86e4923 100644 --- a/matlab/perfect-foresight-models/sim1.m +++ b/matlab/perfect-foresight-models/sim1.m @@ -165,6 +165,11 @@ for iter = 1:options.simul.maxit dy = -lin_solve( A, res, verbose ); end end + if (any(~isreal(dy)) || any(isnan(dy)) || any(isinf(dy)) , + if verbose + display_critical_variables(reshape(dy,[ny periods])', M); + end + end Y(i_upd) = Y(i_upd) + dy; end @@ -184,33 +189,12 @@ if stop if verbose skipline() disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1)))) - dyy=reshape(dy,[size(endogenousvariables,1) periods])'; if ~isreal(res) || ~isreal(Y) disp('Simulation terminated with imaginary parts in the residuals or endogenous variables.') - if any(~isreal(dy)) - indx = find(any(~isreal(dyy))); - endo_names=cellstr(M.endo_names(indx,:)); - disp('Newton algorithm provided complex number for variables:') - fprintf('%s, ', endo_names{:}); - skipline() - end else disp('Simulation terminated with NaN or Inf in the residuals or endogenous variables.') - if any(isnan(dy)) - indx = find(any(isnan(dyy))); - endo_names=cellstr(M.endo_names(indx,:)); - disp('Newton algorithm provided NaN for variables:') - fprintf('%s, ',endo_names{:}); - skipline() - end - if any(isinf(dy)) - indx = find(any(isinf(dyy))); - endo_names=cellstr(M.endo_names(indx,:)); - disp('Newton algorithm diverged (Inf) for variables:') - fprintf('%s, ',endo_names{:}); - skipline() - end end + display_critical_variables(reshape(dy,[ny periods])', M); disp('There is most likely something wrong with your model. Try model_diagnostics or another simulation method.') printline(105) end @@ -322,4 +306,30 @@ function [ x, flag, relres ] = lin_solve_robust( A, b , verbose) flag = relres > 1e-6; if flag ~= 0 && verbose fprintf( 'WARNING : Failed to find a solution to the linear system\n' ); - end \ No newline at end of file + end + +function display_critical_variables(dyy, M) + + if any(isnan(dyy)) + indx = find(any(isnan(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Last iteration provided NaN for the following variables:') + fprintf('%s, ',endo_names{:}), + fprintf('\n'), + end + if any(isinf(dyy)) + indx = find(any(isinf(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Last iteration diverged (Inf) for the following variables:') + fprintf('%s, ',endo_names{:}), + fprintf('\n'), + end + if any(~isreal(dyy)) + indx = find(any(~isreal(dyy))); + endo_names=cellstr(M.endo_names(indx,:)); + disp('Last iteration provided complex number for the following variables:') + fprintf('%s, ',endo_names{:}), + fprintf('\n'), + end + + \ No newline at end of file From afcb8eab35380684542d244790b183d4ebf7a762 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Thu, 23 Mar 2017 08:25:14 +0100 Subject: [PATCH 11/59] catch M_ output argument from evaluate_smoother; remove unused variable lead_lag_incidence --- matlab/realtime_shock_decomposition.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/matlab/realtime_shock_decomposition.m b/matlab/realtime_shock_decomposition.m index 4f2f645b7..ac6273268 100644 --- a/matlab/realtime_shock_decomposition.m +++ b/matlab/realtime_shock_decomposition.m @@ -106,7 +106,7 @@ for j=presample+1:nobs, % evalin('base',['options_.nobs=' int2str(j) ';']) options_.nobs=j; clear('evaluate_smoother'); - [oo, junk1, junk2, junk3, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); + [oo, M_, junk2, junk3, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); % reduced form dr = oo.dr; @@ -143,7 +143,6 @@ for j=presample+1:nobs, z(:,end,1:gend) = Smoothed_Variables_deviation_from_mean; maximum_lag = M_.maximum_lag; - lead_lag_incidence = M_.lead_lag_incidence; k2 = dr.kstate(find(dr.kstate(:,2) <= maximum_lag+1),[1 2]); i_state = order_var(k2(:,1))+(min(i,maximum_lag)+1-k2(:,2))*M_.endo_nbr; From 2aa85f978a422f6563ef248744b2cc555cad03f5 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 22 Mar 2017 16:54:11 +0100 Subject: [PATCH 12/59] change dyn_figure to take a nodisplay argument as opposed to options_. #1415 --- matlab/PlotPosteriorDistributions.m | 4 +-- matlab/PosteriorIRF_core2.m | 6 ++-- matlab/UnivariateSpectralDensity.m | 4 +-- .../convergence_diagnostics/McMCDiagnostics.m | 8 ++--- matlab/dyn_figure.m | 10 +++---- matlab/dynare_estimation.m | 4 +-- matlab/dynare_estimation_1.m | 8 ++--- matlab/dynare_graph_init.m | 4 +-- matlab/forecast_graphs.m | 10 +++---- matlab/graph_decomp.m | 4 +-- matlab/graph_decomp_detail.m | 4 +-- matlab/gsa/filt_mc_.m | 12 ++++---- matlab/gsa/map_calibration.m | 6 ++-- matlab/gsa/map_ident_.m | 16 +++++----- matlab/gsa/redform_map.m | 20 ++++++------- matlab/gsa/redform_screen.m | 8 ++--- matlab/gsa/scatter_mcf.m | 4 +-- matlab/gsa/scatter_plots.m | 2 +- matlab/gsa/stab_map_1.m | 4 +-- matlab/gsa/stab_map_2.m | 4 +-- matlab/mh_autocorrelation_function.m | 4 +-- matlab/mode_check.m | 4 +-- matlab/particles | 2 +- matlab/plot_icforecast.m | 4 +-- matlab/plot_identification.m | 30 +++++++++---------- matlab/plot_priors.m | 4 +-- matlab/pm3_core.m | 6 ++-- matlab/rplot.m | 8 ++--- matlab/stoch_simul.m | 12 ++++---- matlab/trace_plot.m | 4 +-- 30 files changed, 110 insertions(+), 110 deletions(-) diff --git a/matlab/PlotPosteriorDistributions.m b/matlab/PlotPosteriorDistributions.m index 2ae183793..234b18038 100644 --- a/matlab/PlotPosteriorDistributions.m +++ b/matlab/PlotPosteriorDistributions.m @@ -16,7 +16,7 @@ function oo_ = PlotPosteriorDistributions(estim_params_, M_, options_, bayestopt % SPECIAL REQUIREMENTS % none -% Copyright (C) 2005-2016 Dynare Team +% Copyright (C) 2005-2017 Dynare Team % % This file is part of Dynare. % @@ -63,7 +63,7 @@ for i=1:npar subplotnum = subplotnum+1; if subplotnum == 1 figunumber = figunumber+1; - hfig=dyn_figure(options_,'Name',figurename); + hfig=dyn_figure(options_.nodisplay,'Name',figurename); end [nam,texnam] = get_the_name(i,TeX,M_,estim_params_,options_); if subplotnum == 1 diff --git a/matlab/PosteriorIRF_core2.m b/matlab/PosteriorIRF_core2.m index 295f6d5eb..c4491f631 100644 --- a/matlab/PosteriorIRF_core2.m +++ b/matlab/PosteriorIRF_core2.m @@ -30,7 +30,7 @@ function myoutput=PosteriorIRF_core2(myinputs,fpar,npar,whoiam,ThisMatlab) % SPECIAL REQUIREMENTS. % None. % -% Copyright (C) 2006-2016 Dynare Team +% Copyright (C) 2006-2017 Dynare Team % % This file is part of Dynare. % @@ -103,9 +103,9 @@ for i=fpar:npar, if max(abs(MeanIRF(:,j,i))) >= options_.impulse_responses.plot_threshold subplotnum = subplotnum+1; if subplotnum == 1 && options_.relative_irf - hh = dyn_figure(options_,'Name',['Relative response to orthogonalized shock to ' tit(i,:)]); + hh = dyn_figure(options_.nodisplay,'Name',['Relative response to orthogonalized shock to ' tit(i,:)]); elseif subplotnum == 1 && ~options_.relative_irf - hh = dyn_figure(options_,'Name',['Orthogonalized shock to ' tit(i,:)]); + hh = dyn_figure(options_.nodisplay,'Name',['Orthogonalized shock to ' tit(i,:)]); end set(0,'CurrentFigure',hh) diff --git a/matlab/UnivariateSpectralDensity.m b/matlab/UnivariateSpectralDensity.m index fa0a9e22c..7152151b6 100644 --- a/matlab/UnivariateSpectralDensity.m +++ b/matlab/UnivariateSpectralDensity.m @@ -19,7 +19,7 @@ function [oo_] = UnivariateSpectralDensity(M_,oo_,options_,var_list) % Adapted from th_autocovariances.m. -% Copyright (C) 2006-2015 Dynare Team +% Copyright (C) 2006-2017 Dynare Team % % This file is part of Dynare. % @@ -159,7 +159,7 @@ if options_.nograph == 0 end for i= 1:nvar - hh = dyn_figure(options_,'Name',['Spectral Density of ' deblank(M_.endo_names(ivar(i),:)) '.']); + hh = dyn_figure(options_.nodisplay,'Name',['Spectral Density of ' deblank(M_.endo_names(ivar(i),:)) '.']); plot(freqs,f(i,:),'-k','linewidth',2) xlabel('0 \leq \omega \leq \pi') ylabel('f(\omega)') diff --git a/matlab/convergence_diagnostics/McMCDiagnostics.m b/matlab/convergence_diagnostics/McMCDiagnostics.m index fb4f41262..4e0b669d1 100644 --- a/matlab/convergence_diagnostics/McMCDiagnostics.m +++ b/matlab/convergence_diagnostics/McMCDiagnostics.m @@ -16,7 +16,7 @@ function oo_ = McMCDiagnostics(options_, estim_params_, M_, oo_) % PARALLEL CONTEXT % See the comment in posterior_sampler.m funtion. -% Copyright (C) 2005-2016 Dynare Team +% Copyright (C) 2005-2017 Dynare Team % % This file is part of Dynare. % @@ -287,7 +287,7 @@ clear pmet temp moyenne CSUP CINF csup cinf n linea iter tmp; pages = floor(npar/3); k = 0; for i = 1:pages - h=dyn_figure(options_,'Name','MCMC univariate convergence diagnostic (Brooks and Gelman,1998)'); + h=dyn_figure(options_.nodisplay,'Name','MCMC univariate convergence diagnostic (Brooks and Gelman,1998)'); boxplot = 1; for j = 1:3 % Loop over parameters k = k+1; @@ -350,7 +350,7 @@ if reste nr = 2; nc = 3; end - h = dyn_figure(options_,'Name','MCMC univariate convergence diagnostic (Brooks and Gelman, 1998)'); + h = dyn_figure(options_.nodisplay,'Name','MCMC univariate convergence diagnostic (Brooks and Gelman, 1998)'); boxplot = 1; for j = 1:reste k = k+1; @@ -461,7 +461,7 @@ for iter = Origin:StepSize:NumberOfDraws end MDIAG(:,[2 4 6],:) = MDIAG(:,[2 4 6],:)/nblck; -h = dyn_figure(options_,'Name','Multivariate convergence diagnostic'); +h = dyn_figure(options_.nodisplay,'Name','Multivariate convergence diagnostic'); boxplot = 1; for crit = 1:3 if crit == 1 diff --git a/matlab/dyn_figure.m b/matlab/dyn_figure.m index f26a39345..62182a291 100644 --- a/matlab/dyn_figure.m +++ b/matlab/dyn_figure.m @@ -1,9 +1,9 @@ -function h=dyn_figure(DynareOptions,varargin) -%function h=dyn_figure(DynareOptions,varargin) +function h = dyn_figure(nodisplay, varargin) +%function h = dyn_figure(nodisplay, varargin) % initializes figures for DYNARE % % INPUTS -% DynareOptions: dynare options +% nodisplay: the value of the command-specific nodisplay argument or options_.nodisplay % varargin: the same list of possible inputs of the MATLAB function figure % % OUTPUTS @@ -12,7 +12,7 @@ function h=dyn_figure(DynareOptions,varargin) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2012 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -29,7 +29,7 @@ function h=dyn_figure(DynareOptions,varargin) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -if DynareOptions.nodisplay, +if nodisplay h = figure(varargin{:},'visible','off'); else h = figure(varargin{:}); diff --git a/matlab/dynare_estimation.m b/matlab/dynare_estimation.m index 56221affe..94e6774fc 100644 --- a/matlab/dynare_estimation.m +++ b/matlab/dynare_estimation.m @@ -12,7 +12,7 @@ function oo_recursive_=dynare_estimation(var_list,dname) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2015 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -151,7 +151,7 @@ if nnobs > 1 && horizon > 0 for i = 1:size(var_list,1) if mod(i,nstar) == 1 plot_index=plot_index+1; - hfig = dyn_figure(options_,'Name',['Out of sample forecasts (',num2str(plot_index),')']); + hfig = dyn_figure(options_.nodisplay,'Name',['Out of sample forecasts (',num2str(plot_index),')']); m = 1; end subplot(nr,nc,m) diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index 6693768ce..b74ce4559 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -12,7 +12,7 @@ function dynare_estimation_1(var_list_,dname) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2016 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -542,7 +542,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha fprintf(fidTeX,' \n'); end for plt = 1:nbplt, - fh = dyn_figure(options_,'Name','Smoothed shocks'); + fh = dyn_figure(options_.nodisplay,'Name','Smoothed shocks'); NAMES = []; if options_.TeX, TeXNAMES = []; end nstar0=min(nstar,M_.exo_nbr-(plt-1)*nstar); @@ -621,7 +621,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha fprintf(fidTeX,' \n'); end for plt = 1:nbplt - fh = dyn_figure(options_,'Name','Smoothed observation errors'); + fh = dyn_figure(options_.nodisplay,'Name','Smoothed observation errors'); NAMES = []; if options_.TeX, TeXNAMES = []; end nstar0=min(nstar,number_of_plots_to_draw-(nbplt-1)*nstar); @@ -696,7 +696,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha fprintf(fidTeX,' \n'); end for plt = 1:nbplt, - fh = dyn_figure(options_,'Name','Historical and smoothed variables'); + fh = dyn_figure(options_.nodisplay,'Name','Historical and smoothed variables'); NAMES = []; if options_.TeX, TeXNAMES = []; end nstar0=min(nstar,n_varobs-(plt-1)*nstar); diff --git a/matlab/dynare_graph_init.m b/matlab/dynare_graph_init.m index 4e0af5b8c..0783a4029 100644 --- a/matlab/dynare_graph_init.m +++ b/matlab/dynare_graph_init.m @@ -12,7 +12,7 @@ function dyn_graph=dynare_graph_init(figure_name,nplot,line_types,line_width) % SPECIAL REQUIREMENT % none -% Copyright (C) 2006-2013 Dynare Team +% Copyright (C) 2006-2017 Dynare Team % % This file is part of Dynare. % @@ -31,7 +31,7 @@ function dyn_graph=dynare_graph_init(figure_name,nplot,line_types,line_width) global options_ -dyn_graph.fh = dyn_figure(options_,'Name',figure_name); +dyn_graph.fh = dyn_figure(options_.nodisplay,'Name',figure_name); dyn_graph.figure_name = figure_name; if nargin > 2 dyn_graph.line_types = line_types; diff --git a/matlab/forecast_graphs.m b/matlab/forecast_graphs.m index be6f49399..8c444d887 100644 --- a/matlab/forecast_graphs.m +++ b/matlab/forecast_graphs.m @@ -8,7 +8,7 @@ function forecast_graphs(var_list,M_, oo_,options_) % o oo_ outputs structure % o options_ options structure -% Copyright (C) 2008-2016 Dynare Team +% Copyright (C) 2008-2017 Dynare Team % % This file is part of Dynare. % @@ -61,7 +61,7 @@ end m = 1; n_fig = 1; -hh=dyn_figure(options_,'Name','Forecasts (I)'); +hh=dyn_figure(options_.nodisplay,'Name','Forecasts (I)'); for j= 1:nvar if m > nc*nr; dyn_saveas(hh,[ dname '/graphs/forcst' int2str(n_fig)],options_); @@ -75,7 +75,7 @@ for j= 1:nvar fprintf(fidTeX,' \n'); end n_fig =n_fig+1; - eval(['hh=dyn_figure(options_,''Name'',''Forecasts (' int2str(n_fig) ')'');']); + eval(['hh=dyn_figure(options_.nodisplay,''Name'',''Forecasts (' int2str(n_fig) ')'');']); m = 1; end subplot(nr,nc,m); @@ -125,7 +125,7 @@ if isfield(oo_.forecast,'HPDinf_ME') m = 1; n_fig = 1; - hh=dyn_figure(options_,'Name','Forecasts including ME (I)'); + hh=dyn_figure(options_.nodisplay,'Name','Forecasts including ME (I)'); for j= 1:length(var_names) if m > nc*nr; dyn_saveas(hh,[ dname '/graphs/forcst_ME' int2str(n_fig)],options_); @@ -139,7 +139,7 @@ if isfield(oo_.forecast,'HPDinf_ME') fprintf(fidTeX,' \n'); end n_fig =n_fig+1; - eval(['hh=dyn_figure(options_,''Name'',''Forecasts (' int2str(n_fig) ')'');']); + eval(['hh=dyn_figure(options_.nodisplay,''Name'',''Forecasts (' int2str(n_fig) ')'');']); m = 1; end subplot(nr,nc,m); diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index 7740a07a9..2e3c8000c 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -11,7 +11,7 @@ function []=graph_decomp(z,shock_names,endo_names,i_var,initial_date,DynareModel % DynareModel [structure] Dynare model structure % DynareOptions [structure] Dynare options structure -% Copyright (C) 2010-2016 Dynare Team +% Copyright (C) 2010-2017 Dynare Team % % This file is part of Dynare. % @@ -128,7 +128,7 @@ for j=1:nvar if ymax-ymin < 1e-6 continue end - fhandle = dyn_figure(DynareOptions,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); set(fhandle,'position' ,[50 50 1500 750]) ax=axes('Position',[0.1 0.1 0.6 0.8],'box','on'); % plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2) diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 931cb64a2..759f7e72b 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -11,7 +11,7 @@ function []=graph_decomp_detail(z,shock_names,endo_names,i_var,initial_date,Dyna % DynareModel [structure] Dynare model structure % DynareOptions [structure] Dynare options structure -% Copyright (C) 2010-2016 Dynare Team +% Copyright (C) 2010-2017 Dynare Team % % This file is part of Dynare. % @@ -151,7 +151,7 @@ for j=1:nvar continue end for jf = 1:nfigs - fhandle = dyn_figure(DynareOptions,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); a0=zeros(1,4); a0(3)=inf; a0(4)=-inf; diff --git a/matlab/gsa/filt_mc_.m b/matlab/gsa/filt_mc_.m index 06f717e0e..9fdde4e9b 100644 --- a/matlab/gsa/filt_mc_.m +++ b/matlab/gsa/filt_mc_.m @@ -14,7 +14,7 @@ function [rmse_MC, ixx] = filt_mc_(OutDir,options_gsa_,dataset_,dataset_info) % marco.ratto@ec.europa.eu % Copyright (C) 2012-2016 European Commission -% Copyright (C) 2012-2016 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -407,7 +407,7 @@ else end if mod(i,9)==1, ifig=ifig+1; - hh=dyn_figure(options_,'name',[temp_name,' ',int2str(ifig)]); + hh=dyn_figure(options_.nodisplay,'name',[temp_name,' ',int2str(ifig)]); end subplot(3,3,i-9*(ifig-1)) h=cumplot(lnprior(ixx(1:nfilt0(i),i))); @@ -455,7 +455,7 @@ else end if mod(i,9)==1, ifig=ifig+1; - hh = dyn_figure(options_,'Name',[temp_name,' ',int2str(ifig)]); + hh = dyn_figure(options_.nodisplay,'Name',[temp_name,' ',int2str(ifig)]); end subplot(3,3,i-9*(ifig-1)) h=cumplot(likelihood(ixx(1:nfilt0(i),i))); @@ -506,7 +506,7 @@ else end if mod(i,9)==1, ifig=ifig+1; - hh = dyn_figure(options_,'Name',[temp_name,' ',int2str(ifig)]); + hh = dyn_figure(options_.nodisplay,'Name',[temp_name,' ',int2str(ifig)]); end subplot(3,3,i-9*(ifig-1)) h=cumplot(logpo2(ixx(1:nfilt0(i),i))); @@ -794,7 +794,7 @@ else for iy=1:size(vvarvecm,1), ipar = find(any(squeeze(PPV(iy,:,:))nbr_irf_couples, @@ -405,7 +405,7 @@ if ~isempty(indx_moment) indx_moment = indx_moment(irestrictions,:); if ~DynareOptions.nograph, - h2=dyn_figure(DynareOptions,'name',[type ' evaluation of moment restrictions']); + h2=dyn_figure(DynareOptions.nodisplay,'name',[type ' evaluation of moment restrictions']); nrow=ceil(sqrt(nbr_moment_couples)); ncol=nrow; if nrow*(nrow-1)>nbr_moment_couples, diff --git a/matlab/gsa/map_ident_.m b/matlab/gsa/map_ident_.m index 7dc3873db..af7c53f7c 100644 --- a/matlab/gsa/map_ident_.m +++ b/matlab/gsa/map_ident_.m @@ -5,7 +5,7 @@ function map_ident_(OutputDirectoryName,opt_gsa) % marco.ratto@ec.europa.eu % Copyright (C) 2012-2016 European Commission -% Copyright (C) 2012-2016 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -90,7 +90,7 @@ if opt_gsa.load_ident_files==0, ifig=0; for j=1:M_.exo_nbr, if mod(j,6)==1 - hh=dyn_figure(options_,'name',['Variance decomposition shocks']); + hh=dyn_figure(options_.nodisplay,'name',['Variance decomposition shocks']); ifig=ifig+1; iplo=0; end @@ -219,7 +219,7 @@ if opt_gsa.morris==1, load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAvdec','vdec','ir_vdec','ic_vdec') end - hh = dyn_figure(options_,'name','Screening identification: variance decomposition'); + hh = dyn_figure(options_.nodisplay,'name','Screening identification: variance decomposition'); % boxplot(SAvdec,'whis',10,'symbol','r.') myboxplot(SAvdec,[],'.',[],10) set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) @@ -325,7 +325,7 @@ if opt_gsa.morris==1, load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'ac','ir_ac','ic_ac') end - hh=dyn_figure(options_,'name','Screening identification: theoretical moments'); + hh=dyn_figure(options_.nodisplay,'name','Screening identification: theoretical moments'); % boxplot(SAcc,'whis',10,'symbol','r.') myboxplot(SAcc,[],'.',[],10) set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) @@ -722,7 +722,7 @@ if opt_gsa.morris==1, else load([OutputDirectoryName,'/',fname_,'_morris_IDE'],'SAnorm','SAmunorm','SAsignorm') end - hh=dyn_figure(options_,'name','Screening identification: model'); %bar(SAnorm(:,irel)) + hh=dyn_figure(options_.nodisplay,'name','Screening identification: model'); %bar(SAnorm(:,irel)) % boxplot(SAnorm','whis',10,'symbol','r.') myboxplot(SAnorm',[],'.',[],10) set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) @@ -739,7 +739,7 @@ if opt_gsa.morris==1, dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_par'],options_); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_morris_par'],1,'Screening identification: model','morris_par',1) -% hh=dyn_figure(options_); %bar(SAmunorm(:,irel)) +% hh=dyn_figure(options_.nodisplay); %bar(SAmunorm(:,irel)) % % boxplot(SAmunorm','whis',10,'symbol','r.') % myboxplot(SAmunorm',[],'.',[],10) % set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) @@ -754,7 +754,7 @@ if opt_gsa.morris==1, % title('\mu in the model') % dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morrismu_par'],options_); % -% hh=dyn_figure(options_); %bar(SAsignorm(:,irel)) +% hh=dyn_figure(options_.nodisplay); %bar(SAsignorm(:,irel)) % % boxplot(SAsignorm','whis',10,'symbol','r.') % myboxplot(SAsignorm',[],'.',[],10) % set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) @@ -1522,7 +1522,7 @@ else, % main effects analysis % SAmeanexo=mean(SAmomN(:,1:nshock)); % figure, bar(latent'*SAcc), - hh=dyn_figure(options_,'Name',['Identifiability indices in the ',fsuffix,' moments.']); + hh=dyn_figure(options_.nodisplay,'Name',['Identifiability indices in the ',fsuffix,' moments.']); bar(sum(SAcc)), set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:npT]) set(gca,'xlim',[0.5 npT+0.5]) diff --git a/matlab/gsa/redform_map.m b/matlab/gsa/redform_map.m index 4b1ceeb55..3b4534a5b 100644 --- a/matlab/gsa/redform_map.m +++ b/matlab/gsa/redform_map.m @@ -16,7 +16,7 @@ function redform_map(dirname,options_gsa_) % marco.ratto@ec.europa.eu % Copyright (C) 2012-2016 European Commission -% Copyright (C) 2012-2016 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -165,7 +165,7 @@ for j=1:size(anamendo,1) if (max(y0)-min(y0))>1.e-10, if mod(iplo,9)==0 && isempty(threshold) && ~options_.nograph, ifig=ifig+1; - hfig = dyn_figure(options_,'name',['Reduced Form Mapping: ', namendo,' vs shocks ',int2str(ifig)]); + hfig = dyn_figure(options_.nodisplay,'name',['Reduced Form Mapping: ', namendo,' vs shocks ',int2str(ifig)]); iplo=0; end iplo=iplo+1; @@ -193,7 +193,7 @@ for j=1:size(anamendo,1) mkdir(xdir) end if ~options_.nograph, - hf=dyn_figure(options_,'name',['Reduced Form Mapping (Monte Carlo Filtering): ',namendo,' vs ', namexo]); + hf=dyn_figure(options_.nodisplay,'name',['Reduced Form Mapping (Monte Carlo Filtering): ',namendo,' vs ', namexo]); hc = cumplot(y0); a=axis; delete(hc); % hist(mat_moment{ij}), @@ -301,7 +301,7 @@ for j=1:size(anamendo,1) if (max(y0)-min(y0))>1.e-10, if mod(iplo,9)==0 && isempty(threshold) && ~options_.nograph, ifig=ifig+1; - hfig = dyn_figure(options_,'name',['Reduced Form Mapping: ' namendo,' vs lags ',int2str(ifig)]); + hfig = dyn_figure(options_.nodisplay,'name',['Reduced Form Mapping: ' namendo,' vs lags ',int2str(ifig)]); iplo=0; end iplo=iplo+1; @@ -329,7 +329,7 @@ for j=1:size(anamendo,1) mkdir(xdir) end if ~options_.nograph, - hf=dyn_figure(options_,'name',['Reduced Form Mapping (Monte Carlo Filtering): ',namendo,' vs lagged ', namlagendo]); + hf=dyn_figure(options_.nodisplay,'name',['Reduced Form Mapping (Monte Carlo Filtering): ',namendo,' vs lagged ', namlagendo]); hc = cumplot(y0); a=axis; delete(hc); % hist(mat_moment{ij}), @@ -428,7 +428,7 @@ end if isempty(threshold) && ~options_.nograph, if ilog==0, - hfig=dyn_figure(options_,'name','Reduced Form GSA'); %bar(si) + hfig=dyn_figure(options_.nodisplay,'name','Reduced Form GSA'); %bar(si) % boxplot(si','whis',10,'symbol','r.') myboxplot(si',[],'.',[],10) xlabel(' ') @@ -444,7 +444,7 @@ if isempty(threshold) && ~options_.nograph, create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_gsa'],'Reduced Form GSA','redform_gsa') else - hfig=dyn_figure(options_,'name','Reduced Form GSA'); %bar(silog) + hfig=dyn_figure(options_.nodisplay,'name','Reduced Form GSA'); %bar(silog) % boxplot(silog','whis',10,'symbol','r.') myboxplot(silog',[],'.',[],10) set(gca,'xticklabel',' ','fontsize',10,'xtick',[1:np]) @@ -522,7 +522,7 @@ if iload==0, y1 = log(y0*isig+lam); end if ~options_.nograph, - hfig=dyn_figure(options_,'name',options_map.figtitle); + hfig=dyn_figure(options_.nodisplay,'name',options_map.figtitle); subplot(221) if ilog, hist(y1,30), @@ -647,7 +647,7 @@ else load([fname,'_map.mat'],'gsa_') if ~options_.nograph, yf = ss_anova_fcast(x0, gsa_); - hfig=dyn_figure(options_,'name',options_map.title); + hfig=dyn_figure(options_.nodisplay,'name',options_map.title); plot(y0,[yf y0],'.'), title([namy,' vs ', namx,' pred'],'interpreter','none') dyn_saveas(hfig,[fname '_pred'],options_); @@ -724,7 +724,7 @@ return function indmcf = redform_mcf(y0, x0, options_mcf, options_) -hfig=dyn_figure(options_,'name',options_mcf.amcf_title); +hfig=dyn_figure(options_.nodisplay,'name',options_mcf.amcf_title); [post_mean, post_median, post_var, hpd_interval, post_deciles, ... density] = posterior_moments(y0,1,0.9); diff --git a/matlab/gsa/redform_screen.m b/matlab/gsa/redform_screen.m index ae1d8df74..96773cdff 100644 --- a/matlab/gsa/redform_screen.m +++ b/matlab/gsa/redform_screen.m @@ -11,7 +11,7 @@ function redform_screen(dirname, options_gsa_) % marco.ratto@ec.europa.eu % Copyright (C) 2012-2016 European Commission -% Copyright (C) 2012-2016 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -68,7 +68,7 @@ for j=1:size(anamendo,1), if ~isempty(y0), if mod(iplo,9)==0, ifig=ifig+1; - hh=dyn_figure(options_,'name',[namendo,' vs. shocks ',int2str(ifig)]); + hh=dyn_figure(options_.nodisplay,'name',[namendo,' vs. shocks ',int2str(ifig)]); iplo=0; end iplo=iplo+1; @@ -110,7 +110,7 @@ for j=1:size(anamendo,1), if ~isempty(y0), if mod(iplo,9)==0, ifig=ifig+1; - hh=dyn_figure(options_,'name',[namendo,' vs. lagged endogenous ',int2str(ifig)]); + hh=dyn_figure(options_.nodisplay,'name',[namendo,' vs. lagged endogenous ',int2str(ifig)]); iplo=0; end iplo=iplo+1; @@ -142,7 +142,7 @@ for j=1:size(anamendo,1), end end -hh=dyn_figure(options_,'Name','Reduced form screening'); +hh=dyn_figure(options_.nodisplay,'Name','Reduced form screening'); %bar(SA) % boxplot(SA','whis',10,'symbol','r.') myboxplot(SA',[],'.',[],10) diff --git a/matlab/gsa/scatter_mcf.m b/matlab/gsa/scatter_mcf.m index f6f134a5c..c6fccfdb6 100644 --- a/matlab/gsa/scatter_mcf.m +++ b/matlab/gsa/scatter_mcf.m @@ -5,7 +5,7 @@ function scatter_mcf(X,Y,vnames,plotsymbol, fnam, dirname, figtitle, xparam1, D % marco.ratto@ec.europa.eu % Copyright (C) 2014-2016 European Commission -% Copyright (C) 2014-2016 Dynare Team +% Copyright (C) 2014-2017 Dynare Team % % This file is part of Dynare. % @@ -84,7 +84,7 @@ figtitle_tex=strrep(figtitle,'_','\_'); fig_nam_=[fnam]; if ~nograph, - hh=dyn_figure(DynareOptions,'name',figtitle); + hh=dyn_figure(DynareOptions.nodisplay,'name',figtitle); end bf = 0.1; diff --git a/matlab/gsa/scatter_plots.m b/matlab/gsa/scatter_plots.m index a2c71eeaf..b3a3b498f 100644 --- a/matlab/gsa/scatter_plots.m +++ b/matlab/gsa/scatter_plots.m @@ -73,7 +73,7 @@ figtitle_tex=strrep(figtitle,'_','\_'); fig_nam_=[fnam]; if ~nograph, - hh=dyn_figure(DynareOptions,'name',figtitle); + hh=dyn_figure(DynareOptions.nodisplay,'name',figtitle); set(hh,'userdata',{X,xp}) end diff --git a/matlab/gsa/stab_map_1.m b/matlab/gsa/stab_map_1.m index 5295d0e30..a4f30821a 100644 --- a/matlab/gsa/stab_map_1.m +++ b/matlab/gsa/stab_map_1.m @@ -21,7 +21,7 @@ function [proba, dproba] = stab_map_1(lpmat, ibehaviour, inonbehaviour, aname, i % marco.ratto@ec.europa.eu % Copyright (C) 2012-2016 European Commission -% Copyright (C) 2012-2016 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -82,7 +82,7 @@ if iplot && ~options_.nograph ftit=bayestopt_.name(ipar+nshock*(1-ishock)); for i=1:ceil(nparplot/12), - hh=dyn_figure(options_,'name',atitle); + hh=dyn_figure(options_.nodisplay,'name',atitle); for j=1+12*(i-1):min(nparplot,12*i), subplot(3,4,j-12*(i-1)) if ~isempty(ibehaviour), diff --git a/matlab/gsa/stab_map_2.m b/matlab/gsa/stab_map_2.m index 35c3df82c..561d883c4 100644 --- a/matlab/gsa/stab_map_2.m +++ b/matlab/gsa/stab_map_2.m @@ -6,7 +6,7 @@ function indcorr = stab_map_2(x,alpha2, pvalue_crit, fnam, dirname,xparam1,figti % marco.ratto@ec.europa.eu % Copyright (C) 2011-2016 European Commission -% Copyright (C) 2011-2016 Dynare Team +% Copyright (C) 2011-2017 Dynare Team % This file is part of Dynare. % % Dynare is free software: you can redistribute it and/or modify @@ -119,7 +119,7 @@ for j=1:npar, if ~nograph, if mod(j2,12)==1, ifig=ifig+1; - hh=dyn_figure(options_,'name',[figtitle,' sample bivariate projection ', num2str(ifig)]); + hh=dyn_figure(options_.nodisplay,'name',[figtitle,' sample bivariate projection ', num2str(ifig)]); end subplot(3,4,j2-(ifig-1)*12) % bar(c0(i2,j)), diff --git a/matlab/mh_autocorrelation_function.m b/matlab/mh_autocorrelation_function.m index 96b4c5875..ceffbbd76 100644 --- a/matlab/mh_autocorrelation_function.m +++ b/matlab/mh_autocorrelation_function.m @@ -18,7 +18,7 @@ function mh_autocorrelation_function(options_,M_,estim_params_,type,blck,name1,n % % SPECIAL REQUIREMENTS -% Copyright (C) 2003-2013 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -91,7 +91,7 @@ if options_.mh_nblck>1 FigureName = [ FigureName , ' (block number' int2str(blck) ').']; end -hh=dyn_figure(options_,'Name',FigureName); +hh=dyn_figure(options_.nodisplay,'Name',FigureName); bar(0:options_.mh_autocorrelation_function_size,autocor,'k'); axis tight diff --git a/matlab/mode_check.m b/matlab/mode_check.m index 8d216bcbf..e16c9c1a9 100644 --- a/matlab/mode_check.m +++ b/matlab/mode_check.m @@ -40,7 +40,7 @@ function mode_check(fun,x,hessian_mat,DynareDataset,DatasetInfo,DynareOptions,Mo %! @end deftypefn %@eod: -% Copyright (C) 2003-2016 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -96,7 +96,7 @@ for plt = 1:nbplt, NAMES = []; TeXNAMES = []; end - hh = dyn_figure(DynareOptions,'Name','Mode check plots'); + hh = dyn_figure(DynareOptions.nodisplay,'Name','Mode check plots'); for k=1:min(nstar,length(x)-(plt-1)*nstar) subplot(nr,nc,k) kk = (plt-1)*nstar+k; diff --git a/matlab/particles b/matlab/particles index 79b42ec94..20978ce11 160000 --- a/matlab/particles +++ b/matlab/particles @@ -1 +1 @@ -Subproject commit 79b42ec947aa1dbe009778f3874f074f0d14eb7a +Subproject commit 20978ce117597f2ce83afb2fbcd92347ee1642d1 diff --git a/matlab/plot_icforecast.m b/matlab/plot_icforecast.m index 62d788414..9752d5376 100644 --- a/matlab/plot_icforecast.m +++ b/matlab/plot_icforecast.m @@ -10,7 +10,7 @@ function plot_icforecast(Variables,periods,options_) % SPECIAL REQUIREMENTS % This routine has to be called after imcforecast.m. -% Copyright (C) 2006-2016 Dynare Team +% Copyright (C) 2006-2017 Dynare Team % % This file is part of Dynare. % @@ -57,7 +57,7 @@ for i=1:size(Variables,1) end function build_figure(name,cci1,cci2,mm1,mm2,options_,graphoptions) -hh = dyn_figure(options_,'Name',['Conditional forecast (' graphoptions.title ,'): ' name '.']); +hh = dyn_figure(options_.nodisplay,'Name',['Conditional forecast (' graphoptions.title ,'): ' name '.']); H = length(mm1); h1 = area(1:H,cci1(2,1:H),'BaseValue',min([min(cci1(1,:)),min(cci2(1,:))]),'FaceColor',[.9 .9 .9]); hold on diff --git a/matlab/plot_identification.m b/matlab/plot_identification.m index e24695025..78ac328a5 100644 --- a/matlab/plot_identification.m +++ b/matlab/plot_identification.m @@ -19,7 +19,7 @@ function plot_identification(params,idemoments,idehess,idemodel, idelre, advance % SPECIAL REQUIREMENTS % None -% Copyright (C) 2008-2016 Dynare Team +% Copyright (C) 2008-2017 Dynare Team % % This file is part of Dynare. % @@ -60,7 +60,7 @@ tittxt1=regexprep(tittxt, ' ', '_'); tittxt1=strrep(tittxt1, '.', ''); if SampleSize == 1, siJ = idemoments.siJ; - hh = dyn_figure(options_,'Name',[tittxt, ' - Identification using info from observables']); + hh = dyn_figure(options_.nodisplay,'Name',[tittxt, ' - Identification using info from observables']); subplot(211) mmm = (idehess.ide_strength_J); [ss, is] = sort(mmm); @@ -132,7 +132,7 @@ if SampleSize == 1, if all(isnan([siJnorm';siHnorm';siLREnorm'])) fprintf('\nIDENTIFICATION: Skipping sensitivity plot, because standard deviation of parameters is NaN, possibly due to the use of ML.\n') else - hh = dyn_figure(options_,'Name',[tittxt, ' - Sensitivity plot']); + hh = dyn_figure(options_.nodisplay,'Name',[tittxt, ' - Sensitivity plot']); subplot(211) mmm = (siJnorm)'./max(siJnorm); mmm1 = (siHnorm)'./max(siHnorm); @@ -185,7 +185,7 @@ if SampleSize == 1, end % fprintf('%-15s [%s] %10.3f\n',name{i},namx,idemoments.cosnJ(i,j)) end - hh = dyn_figure(options_,'Name',[tittxt,' - Collinearity patterns with ', int2str(j) ,' parameter(s)']); + hh = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Collinearity patterns with ', int2str(j) ,' parameter(s)']); imagesc(pax,[0 1]); set(gca,'xticklabel','') set(gca,'yticklabel','') @@ -225,24 +225,24 @@ if SampleSize == 1, S=diag(S); if idehess.flag_score, if nparam<5, - f1 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (Information matrix)']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (Information matrix)']); tex_tit_1=[tittxt,' - Identification patterns (Information matrix)']; else - f1 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (Information matrix): SMALLEST SV']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (Information matrix): SMALLEST SV']); tex_tit_1=[tittxt,' - Identification patterns (Information matrix): SMALLEST SV']; - f2 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (Information matrix): HIGHEST SV']); + f2 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (Information matrix): HIGHEST SV']); tex_tit_2=[tittxt,' - Identification patterns (Information matrix): HIGHEST SV']; end else % S = idemoments.S; % V = idemoments.V; if nparam<5, - f1 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (moments Information matrix)']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (moments Information matrix)']); tex_tit_1=[tittxt,' - Identification patterns (moments Information matrix)']; else - f1 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (moments Information matrix): SMALLEST SV']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (moments Information matrix): SMALLEST SV']); tex_tit_1=[tittxt,' - Identification patterns (moments Information matrix): SMALLEST SV']; - f2 = dyn_figure(options_,'Name',[tittxt,' - Identification patterns (moments Information matrix): HIGHEST SV']); + f2 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - Identification patterns (moments Information matrix): HIGHEST SV']); tex_tit_2=[tittxt,' - Identification patterns (moments Information matrix): HIGHEST SV']; end end @@ -303,7 +303,7 @@ if SampleSize == 1, end else - hh = dyn_figure(options_,'Name',['MC sensitivities']); + hh = dyn_figure(options_.nodisplay,'Name',['MC sensitivities']); subplot(211) mmm = (idehess.ide_strength_J); [ss, is] = sort(mmm); @@ -350,7 +350,7 @@ else disp('Press ENTER to display advanced diagnostics'), pause(5), end % options_.nograph=1; - hh = dyn_figure(options_,'Name','MC Condition Number'); + hh = dyn_figure(options_.nodisplay,'Name','MC Condition Number'); subplot(221) hist(log10(idemodel.cond)) title('log10 of Condition number in the model') @@ -398,12 +398,12 @@ else % end if nparam<5, - f1 = dyn_figure(options_,'Name',[tittxt,' - MC Identification patterns (moments): HIGHEST SV']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - MC Identification patterns (moments): HIGHEST SV']); tex_tit_1=[tittxt,' - MC Identification patterns (moments): HIGHEST SV']; else - f1 = dyn_figure(options_,'Name',[tittxt,' - MC Identification patterns (moments): SMALLEST SV']); + f1 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - MC Identification patterns (moments): SMALLEST SV']); tex_tit_1=[tittxt,' - MC Identification patterns (moments): SMALLEST SV']; - f2 = dyn_figure(options_,'Name',[tittxt,' - MC Identification patterns (moments): HIGHEST SV']); + f2 = dyn_figure(options_.nodisplay,'Name',[tittxt,' - MC Identification patterns (moments): HIGHEST SV']); tex_tit_2=[tittxt,' - MC Identification patterns (moments): HIGHEST SV']; end nplots=min(nparam,8); diff --git a/matlab/plot_priors.m b/matlab/plot_priors.m index 15842b8e9..f8a77fe04 100644 --- a/matlab/plot_priors.m +++ b/matlab/plot_priors.m @@ -13,7 +13,7 @@ function plot_priors(bayestopt_,M_,estim_params_,options_) % SPECIAL REQUIREMENTS % None -% Copyright (C) 2004-2016 Dynare Team +% Copyright (C) 2004-2017 Dynare Team % % This file is part of Dynare. % @@ -43,7 +43,7 @@ if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,' \n'); end for plt = 1:nbplt, - hplt = dyn_figure(options_,'Name',figurename); + hplt = dyn_figure(options_.nodisplay,'Name',figurename); if TeX TeXNAMES = []; NAMES = []; diff --git a/matlab/pm3_core.m b/matlab/pm3_core.m index c2d248f76..9443f9e9f 100644 --- a/matlab/pm3_core.m +++ b/matlab/pm3_core.m @@ -13,7 +13,7 @@ function myoutput=pm3_core(myinputs,fpar,nvar,whoiam, ThisMatlab) % SPECIAL REQUIREMENTS. % None. -% Copyright (C) 2007-2016 Dynare Team +% Copyright (C) 2007-2017 Dynare Team % % This file is part of Dynare. % @@ -64,7 +64,7 @@ end figunumber = 0; subplotnum = 0; -hh = dyn_figure(options_,'Name',[tit1 ' ' int2str(figunumber+1)]); +hh = dyn_figure(options_.nodisplay,'Name',[tit1 ' ' int2str(figunumber+1)]); RemoteFlag = 0; if whoiam, if Parallel(ThisMatlab).Local ==0 @@ -115,7 +115,7 @@ for i=fpar:nvar subplotnum = 0; figunumber = figunumber+1; if (i ~= nvar) - hh = dyn_figure(options_,'Name',[name3 ' ' int2str(figunumber+1)]); + hh = dyn_figure(options_.nodisplay,'Name',[name3 ' ' int2str(figunumber+1)]); end end diff --git a/matlab/rplot.m b/matlab/rplot.m index 5705abdc1..ba2d3b1df 100644 --- a/matlab/rplot.m +++ b/matlab/rplot.m @@ -14,7 +14,7 @@ function rplot(s1) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2001-2016 Dynare Team +% Copyright (C) 2001-2017 Dynare Team % % This file is part of Dynare. % @@ -81,7 +81,7 @@ if rplottype == 0 for j = 1:size(y,1) t = [t s1(j,:) ' '] ; end - hh=dyn_figure(options_,'Name',['Simulated Trajectory']); + hh=dyn_figure(options_.nodisplay,'Name',['Simulated Trajectory']); plot(ix(i),y(:,i)) ; title (t,'Interpreter','none') ; xlabel('Periods') ; @@ -100,7 +100,7 @@ if rplottype == 0 end elseif rplottype == 1 for j = 1:size(y,1) - hh=dyn_figure(options_,'Name',['Simulated Trajectory']); + hh=dyn_figure(options_.nodisplay,'Name',['Simulated Trajectory']); plot(ix(i),y(j,i)) ; xlim([min(ix(i)) max(ix(i))]) title(['Plot of ' s1(j,:)],'Interpreter','none') ; @@ -111,7 +111,7 @@ elseif rplottype == 1 end end elseif rplottype == 2 - hh=dyn_figure(options_,'Name',['Simulated Trajectory']); + hh=dyn_figure(options_.nodisplay,'Name',['Simulated Trajectory']); nl = max(1,fix(size(y,1)/4)) ; nc = ceil(size(y,1)/nl) ; for j = 1:size(y,1) diff --git a/matlab/stoch_simul.m b/matlab/stoch_simul.m index 1314c3a63..81f53c90e 100644 --- a/matlab/stoch_simul.m +++ b/matlab/stoch_simul.m @@ -1,6 +1,6 @@ function info=stoch_simul(var_list) -% Copyright (C) 2001-2016 Dynare Team +% Copyright (C) 2001-2017 Dynare Team % % This file is part of Dynare. % @@ -253,10 +253,10 @@ if options_.irf if nbplt == 0 elseif nbplt == 1 if options_.relative_irf - hh = dyn_figure(options_,'Name',['Relative response to' ... + hh = dyn_figure(options_.nodisplay,'Name',['Relative response to' ... ' orthogonalized shock to ' tit(i,:)]); else - hh = dyn_figure(options_,'Name',['Orthogonalized shock to' ... + hh = dyn_figure(options_.nodisplay,'Name',['Orthogonalized shock to' ... ' ' tit(i,:)]); end for j = 1:number_of_plots_to_draw @@ -285,10 +285,10 @@ if options_.irf else for fig = 1:nbplt-1 if options_.relative_irf - hh = dyn_figure(options_,'Name',['Relative response to orthogonalized shock' ... + hh = dyn_figure(options_.nodisplay,'Name',['Relative response to orthogonalized shock' ... ' to ' tit(i,:) ' figure ' int2str(fig)]); else - hh = dyn_figure(options_,'Name',['Orthogonalized shock to ' tit(i,:) ... + hh = dyn_figure(options_.nodisplay,'Name',['Orthogonalized shock to ' tit(i,:) ... ' figure ' int2str(fig)]); end for plt = 1:nstar @@ -321,7 +321,7 @@ if options_.irf fprintf(fidTeX,' \n'); end end - hh = dyn_figure(options_,'Name',['Orthogonalized shock to ' tit(i,:) ' figure ' int2str(nbplt) '.']); + hh = dyn_figure(options_.nodisplay,'Name',['Orthogonalized shock to ' tit(i,:) ' figure ' int2str(nbplt) '.']); m = 0; for plt = 1:number_of_plots_to_draw-(nbplt-1)*nstar; m = m+1; diff --git a/matlab/trace_plot.m b/matlab/trace_plot.m index 1073480d6..72f8f7ab3 100644 --- a/matlab/trace_plot.m +++ b/matlab/trace_plot.m @@ -18,7 +18,7 @@ function trace_plot(options_,M_,estim_params_,type,blck,name1,name2) % % SPECIAL REQUIREMENTS -% Copyright (C) 2003-2016 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -95,7 +95,7 @@ if options_.mh_nblck>1 FigureName = [ FigureName , ' (block number ' int2str(blck) ').']; end -hh=dyn_figure(options_,'Name',FigureName); +hh=dyn_figure(options_.nodisplay,'Name',FigureName); plot(1:TotalNumberOfMhDraws,PosteriorDraws,'Color',[.7 .7 .7]); From e5f1d20221e64dff843d707bf9396ca12111eda7 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Thu, 23 Mar 2017 17:59:05 +0100 Subject: [PATCH 13/59] change dyn_figure to take a nodisplay and graph_format arguments as opposed to options_. closes #1415 --- matlab/PlotPosteriorDistributions.m | 2 +- matlab/PosteriorIRF_core2.m | 2 +- matlab/UnivariateSpectralDensity.m | 2 +- matlab/bvar_forecast.m | 4 +-- .../convergence_diagnostics/McMCDiagnostics.m | 6 ++-- matlab/dyn_saveas.m | 23 +++++++------- matlab/dynare_estimation.m | 2 +- matlab/dynare_estimation_1.m | 6 ++-- matlab/forecast_graphs.m | 8 ++--- matlab/graph_decomp.m | 2 +- matlab/graph_decomp_detail.m | 2 +- matlab/gsa/filt_mc_.m | 30 +++++++++---------- matlab/gsa/map_calibration.m | 4 +-- matlab/gsa/map_ident_.m | 14 ++++----- matlab/gsa/redform_map.m | 22 +++++++------- matlab/gsa/redform_screen.m | 10 +++---- matlab/gsa/scatter_mcf.m | 2 +- matlab/gsa/scatter_plots.m | 2 +- matlab/gsa/stab_map_1.m | 4 +-- matlab/gsa/stab_map_2.m | 4 +-- matlab/mh_autocorrelation_function.m | 2 +- matlab/mode_check.m | 2 +- matlab/particles | 2 +- matlab/plot_icforecast.m | 2 +- matlab/plot_identification.m | 18 +++++------ matlab/plot_priors.m | 2 +- matlab/pm3_core.m | 2 +- matlab/rplot.m | 6 ++-- matlab/stoch_simul.m | 6 ++-- matlab/trace_plot.m | 2 +- 30 files changed, 98 insertions(+), 97 deletions(-) diff --git a/matlab/PlotPosteriorDistributions.m b/matlab/PlotPosteriorDistributions.m index 234b18038..d2e89ea00 100644 --- a/matlab/PlotPosteriorDistributions.m +++ b/matlab/PlotPosteriorDistributions.m @@ -152,7 +152,7 @@ for i=1:npar hold off; drawnow if subplotnum == MaxNumberOfPlotPerFigure || i == npar; - dyn_saveas(hfig,[OutputDirectoryName '/' M_.fname '_PriorsAndPosteriors' int2str(figunumber)],options_); + dyn_saveas(hfig,[OutputDirectoryName '/' M_.fname '_PriorsAndPosteriors' int2str(figunumber)],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for j = 1:size(NAMES,1) diff --git a/matlab/PosteriorIRF_core2.m b/matlab/PosteriorIRF_core2.m index c4491f631..abf1c3cbd 100644 --- a/matlab/PosteriorIRF_core2.m +++ b/matlab/PosteriorIRF_core2.m @@ -152,7 +152,7 @@ for i=fpar:npar, if subplotnum == MaxNumberOfPlotPerFigure || (j == nvar && subplotnum> 0) figunumber = figunumber+1; - dyn_saveas(hh,[DirectoryName '/' M_.fname '_Bayesian_IRF_' deblank(tit(i,:)) '_' int2str(figunumber)],options_); + dyn_saveas(hh,[DirectoryName '/' M_.fname '_Bayesian_IRF_' deblank(tit(i,:)) '_' int2str(figunumber)],options_.nodisplay,options_.graph_format); if RemoteFlag==1, OutputFileName = [OutputFileName; {[DirectoryName,filesep], [M_.fname '_Bayesian_IRF_' deblank(tit(i,:)) '_' int2str(figunumber) '.*']}]; end diff --git a/matlab/UnivariateSpectralDensity.m b/matlab/UnivariateSpectralDensity.m index 7152151b6..ab00d1856 100644 --- a/matlab/UnivariateSpectralDensity.m +++ b/matlab/UnivariateSpectralDensity.m @@ -165,6 +165,6 @@ if options_.nograph == 0 ylabel('f(\omega)') box on axis tight - dyn_saveas(hh,[M_.fname ,filesep,'graphs', filesep, 'SpectralDensity_' deblank(M_.endo_names(ivar(i),:))],options_) + dyn_saveas(hh,[M_.fname ,filesep,'graphs', filesep, 'SpectralDensity_' deblank(M_.endo_names(ivar(i),:))],options_.nodisplay,options_.graph_format) end end diff --git a/matlab/bvar_forecast.m b/matlab/bvar_forecast.m index 9b22ff679..d070884b4 100644 --- a/matlab/bvar_forecast.m +++ b/matlab/bvar_forecast.m @@ -11,7 +11,7 @@ function bvar_forecast(nlags) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2007-2013 Dynare Team +% Copyright (C) 2007-2017 Dynare Team % % This file is part of Dynare. % @@ -125,7 +125,7 @@ for i = 1:ny options_.varobs{i}); end -dyn_saveas(dyn_graph.fh,[OutputDirectoryName '/' M_.fname '_BVAR_forecast_',num2str(nlags)],options_) +dyn_saveas(dyn_graph.fh,[OutputDirectoryName '/' M_.fname '_BVAR_forecast_',num2str(nlags)],options_.nodisplay,options_.graph_format) % Compute RMSE diff --git a/matlab/convergence_diagnostics/McMCDiagnostics.m b/matlab/convergence_diagnostics/McMCDiagnostics.m index 4e0b669d1..c42467d31 100644 --- a/matlab/convergence_diagnostics/McMCDiagnostics.m +++ b/matlab/convergence_diagnostics/McMCDiagnostics.m @@ -325,7 +325,7 @@ for i = 1:pages boxplot = boxplot + 1; end end - dyn_saveas(h,[OutputFolder '/' ModelName '_udiag' int2str(i)],options_); + dyn_saveas(h,[OutputFolder '/' ModelName '_udiag' int2str(i)],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:size(NAMES,1) @@ -388,7 +388,7 @@ if reste boxplot = boxplot + 1; end end - dyn_saveas(h,[ OutputFolder '/' ModelName '_udiag' int2str(pages+1)],options_); + dyn_saveas(h,[ OutputFolder '/' ModelName '_udiag' int2str(pages+1)],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:size(NAMES,1); @@ -493,7 +493,7 @@ for crit = 1:3 title(namnam,'Interpreter','none'); boxplot = boxplot + 1; end -dyn_saveas(h,[ OutputFolder '/' ModelName '_mdiag'],options_); +dyn_saveas(h,[ OutputFolder '/' ModelName '_mdiag'],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); diff --git a/matlab/dyn_saveas.m b/matlab/dyn_saveas.m index 4c897a620..a31c724b2 100644 --- a/matlab/dyn_saveas.m +++ b/matlab/dyn_saveas.m @@ -1,11 +1,12 @@ -function dyn_saveas(h,fname,DynareOptions) -%function dyn_saveas(h,fname,DynareOptions) +function dyn_saveas(h, fname, nodisplay, graph_format) +%function dyn_saveas(h, fname, nodisplay, graph_format) % save figures for DYNARE % % INPUTS % h : figure handle % fname : name of the saved figure -% DynareOptions: dynare options +% nodisplay: the value of the command-specific nodisplay argument or options_.nodisplay +% graph_format: the value of the command-specific graph_format argument or options_.graph_format % % OUTPUTS % none @@ -13,7 +14,7 @@ function dyn_saveas(h,fname,DynareOptions) % SPECIAL REQUIREMENTS % none -% Copyright (C) 2012-2013 Dynare Team +% Copyright (C) 2012-2017 Dynare Team % % This file is part of Dynare. % @@ -30,28 +31,28 @@ function dyn_saveas(h,fname,DynareOptions) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -if any(strcmp('eps',cellstr(DynareOptions.graph_format))) +if any(strcmp('eps',cellstr(graph_format))) if isoctave fname = strrep(fname,'/',filesep); fname = strrep(fname,'\',filesep); - if DynareOptions.nodisplay && ispc, + if nodisplay && ispc set(h, 'Visible','on'); end end print(h,'-depsc2',[fname,'.eps']) end -if any(strcmp('pdf',cellstr(DynareOptions.graph_format))) +if any(strcmp('pdf',cellstr(graph_format))) if isoctave error('Octave cannot create pdf files!') else print(h,'-dpdf',[fname,'.pdf']) end end -if any(strcmp('fig',cellstr(DynareOptions.graph_format))) +if any(strcmp('fig',cellstr(graph_format))) if isoctave error('Octave cannot create fig files!') else - if DynareOptions.nodisplay + if nodisplay % THE FOLLOWING LINES COULD BE USED IF BUGS/PROBLEMS ARE REPORTED USING LINE 60 % set(h,'Units','Normalized') % mypos=get(h,'Position'); @@ -62,10 +63,10 @@ if any(strcmp('fig',cellstr(DynareOptions.graph_format))) saveas(h,[fname '.fig']); end end -if any(strcmp('none',cellstr(DynareOptions.graph_format))) +if any(strcmp('none',cellstr(graph_format))) % don't save % check here as a reminder that none is an option to graph_format end -if DynareOptions.nodisplay +if nodisplay close(h); end diff --git a/matlab/dynare_estimation.m b/matlab/dynare_estimation.m index 94e6774fc..5d140bd18 100644 --- a/matlab/dynare_estimation.m +++ b/matlab/dynare_estimation.m @@ -208,7 +208,7 @@ if nnobs > 1 && horizon > 0 xlim([nobs(1)-offsetx nobs(end)+horizon]) m = m + 1; if mod(i+1,nstar) == 1 || i ==size(var_list,1) - dyn_saveas(hfig,[M_.fname,filesep,'graphs',filesep M_.fname '_RecursiveForecasts_' int2str(plot_index)],options_); + dyn_saveas(hfig,[M_.fname,filesep,'graphs',filesep M_.fname '_RecursiveForecasts_' int2str(plot_index)],options_.nodisplay,options_.graph_format); end end end diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index b74ce4559..e45817385 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -583,7 +583,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha end title(name,'Interpreter','none') end - dyn_saveas(fh,[M_.fname '_SmoothedShocks' int2str(plt)],options_); + dyn_saveas(fh,[M_.fname '_SmoothedShocks' int2str(plt)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:nstar0 @@ -663,7 +663,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha end title(name,'Interpreter','none') end - dyn_saveas(fh,[M_.fname '_SmoothedObservationErrors' int2str(plt)],options_); + dyn_saveas(fh,[M_.fname '_SmoothedObservationErrors' int2str(plt)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:nstar0 @@ -738,7 +738,7 @@ if (~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.psha end title(name,'Interpreter','none') end - dyn_saveas(fh,[M_.fname '_HistoricalAndSmoothedVariables' int2str(plt)],options_); + dyn_saveas(fh,[M_.fname '_HistoricalAndSmoothedVariables' int2str(plt)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:nstar0, diff --git a/matlab/forecast_graphs.m b/matlab/forecast_graphs.m index 8c444d887..50e682c3a 100644 --- a/matlab/forecast_graphs.m +++ b/matlab/forecast_graphs.m @@ -64,7 +64,7 @@ n_fig = 1; hh=dyn_figure(options_.nodisplay,'Name','Forecasts (I)'); for j= 1:nvar if m > nc*nr; - dyn_saveas(hh,[ dname '/graphs/forcst' int2str(n_fig)],options_); + dyn_saveas(hh,[ dname '/graphs/forcst' int2str(n_fig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); @@ -100,7 +100,7 @@ for j= 1:nvar end if m > 1 - dyn_saveas(hh,[dname '/graphs/forcst' int2str(n_fig)],options_); + dyn_saveas(hh,[dname '/graphs/forcst' int2str(n_fig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); @@ -128,7 +128,7 @@ if isfield(oo_.forecast,'HPDinf_ME') hh=dyn_figure(options_.nodisplay,'Name','Forecasts including ME (I)'); for j= 1:length(var_names) if m > nc*nr; - dyn_saveas(hh,[ dname '/graphs/forcst_ME' int2str(n_fig)],options_); + dyn_saveas(hh,[ dname '/graphs/forcst_ME' int2str(n_fig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); @@ -158,7 +158,7 @@ if isfield(oo_.forecast,'HPDinf_ME') end if m > 1 - dyn_saveas(hh,[dname '/graphs/forcst_ME' int2str(n_fig)],options_); + dyn_saveas(hh,[dname '/graphs/forcst_ME' int2str(n_fig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index 2e3c8000c..f85df1588 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -213,7 +213,7 @@ for j=1:nvar colormap(new_colormap) end hold off - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names],DynareOptions); + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 759f7e72b..5407e385a 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -224,7 +224,7 @@ for j=1:nvar else suffix = ['_detail']; end - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names suffix],DynareOptions); + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names suffix],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); diff --git a/matlab/gsa/filt_mc_.m b/matlab/gsa/filt_mc_.m index 9fdde4e9b..b6c4994d8 100644 --- a/matlab/gsa/filt_mc_.m +++ b/matlab/gsa/filt_mc_.m @@ -423,18 +423,18 @@ else annotation('textbox', [0.55,0,0.35,0.05],'String', 'Log-prior for WORSE R2', 'Color','Red','horizontalalignment','center'); end if options_.opt_gsa.ppost - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnprior',int2str(ifig)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnprior',int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir '/' fname_ '_rmse_post_lnprior',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_post_lnprior',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)) end else if options_.opt_gsa.pprior - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnprior',int2str(ifig) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnprior',int2str(ifig) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir '/' fname_ '_rmse_prior_lnprior',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_prior_lnprior',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)) end else - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnprior',int2str(ifig) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnprior',int2str(ifig) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir '/' fname_ '_rmse_mc_lnprior',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_mc_lnprior',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)) end @@ -474,18 +474,18 @@ else annotation('textbox', [0.55,0,0.35,0.05],'String', 'Log-likelihood for WORSE R2', 'Color','Red','horizontalalignment','center'); end if options_.opt_gsa.ppost - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnlik',int2str(ifig) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnlik',int2str(ifig) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_post_lnprior',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_post_lnprior',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end else if options_.opt_gsa.pprior - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnlik',int2str(ifig)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnlik',int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_prior_lnlik',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_prior_lnlik',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end else - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnlik',int2str(ifig) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnlik',int2str(ifig) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_mc_lnlik',int2str(ifig) ],ifig,[temp_name,' ',int2str(ifig)],'rmse_mc_lnlik',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end @@ -525,18 +525,18 @@ else annotation('textbox', [0.55,0,0.35,0.05],'String', 'Log-posterior for WORSE R2', 'Color','Red','horizontalalignment','center'); end if options_.opt_gsa.ppost - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnpost',int2str(ifig) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_post_lnpost',int2str(ifig) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_post_lnpost',int2str(ifig) ],ifig,[temp_name,' ',int2str(ifig)],'rmse_post_lnpost',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end else if options_.opt_gsa.pprior - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnpost',int2str(ifig)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_lnpost',int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_prior_lnpost',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_prior_lnpost',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end else - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnpost',int2str(ifig)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_lnpost',int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_mc_lnpost',int2str(ifig)],ifig,[temp_name,' ',int2str(ifig)],'rmse_mc_lnpost',options_.figures.textwidth*min((i-9*(ifig-1))/3,1)); end @@ -837,18 +837,18 @@ else %h0=legend({'base',vnam{np}}',0); %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') if options_.opt_gsa.ppost - dyn_saveas(hh,[ OutDir filesep fname_ '_rmse_post_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],options_); + dyn_saveas(hh,[ OutDir filesep fname_ '_rmse_post_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[ OutDir filesep fname_ '_rmse_post_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],ix,[temp_name,' observed variable $',deblank(vvarvecm_tex(iy,:)) '$'],['rmse_post_' deblank(vvarvecm(iy,:))],1) end else if options_.opt_gsa.pprior - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_' deblank(vvarvecm(iy,:)) '_' int2str(ix) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_' deblank(vvarvecm(iy,:)) '_' int2str(ix) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_prior_' deblank(vvarvecm(iy,:)) '_' int2str(ix) ],ix,[temp_name,' observed variable $',deblank(vvarvecm_tex(iy,:)) '$'],['rmse_prior_' deblank(vvarvecm(iy,:))],1) end else - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_mc_' deblank(vvarvecm(iy,:)) '_' int2str(ix)],ix,[temp_name,' observed variable $',deblank(vvarvecm_tex(iy,:)) '$'],['rmse_mc_' deblank(vvarvecm(iy,:))],1) end @@ -904,18 +904,18 @@ else %h0=legend({'base',vnam{np}}',0); %set(findobj(get(h0,'children'),'type','text'),'interpreter','none') if options_.opt_gsa.ppost - dyn_saveas(hh,[ OutDir filesep fname_ '_rmse_post_params_' int2str(ix)],options_); + dyn_saveas(hh,[ OutDir filesep fname_ '_rmse_post_params_' int2str(ix)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[ OutDir filesep fname_ '_rmse_post_params_' int2str(ix)],ix,[temp_name,' estimated params and shocks ',int2str(ix)],'rmse_post_params',1) end else if options_.opt_gsa.pprior - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_params_' int2str(ix) ],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_prior_params_' int2str(ix) ],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_prior_params_' int2str(ix) ],ix,[temp_name,' estimated params and shocks ',int2str(ix)],'rmse_prior_params',1) end else - dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_params_' int2str(ix)],options_); + dyn_saveas(hh,[OutDir filesep fname_ '_rmse_mc_params_' int2str(ix)],options_.nodisplay,options_.graph_format); if options_.TeX create_TeX_loader(options_,[OutDir filesep fname_ '_rmse_mc_params_' int2str(ix)],ix,[temp_name,' estimated params and shocks ',int2str(ix)],'rmse_mc_params',1) end diff --git a/matlab/gsa/map_calibration.m b/matlab/gsa/map_calibration.m index 26bc50591..712d4572f 100644 --- a/matlab/gsa/map_calibration.m +++ b/matlab/gsa/map_calibration.m @@ -325,7 +325,7 @@ if ~isempty(indx_irf), end end if ~DynareOptions.nograph, - dyn_saveas(h1,[OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions'],DynareOptions); + dyn_saveas(h1,[OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions'],DynareOptions.nodisplay,DynareOptions.graph_format); create_TeX_loader(DynareOptions,[OutputDirectoryName,filesep,fname_,'_',type,'_irf_restrictions'],[type ' evaluation of irf restrictions'],'irf_restrictions',type,DynareOptions.figures.textwidth*min(ij/ncol,1)) end skipline() @@ -535,7 +535,7 @@ if ~isempty(indx_moment) end end if ~DynareOptions.nograph, - dyn_saveas(h2,[OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions'],DynareOptions); + dyn_saveas(h2,[OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions'],DynareOptions.nodisplay,DynareOptions.graph_format); create_TeX_loader(DynareOptions,[OutputDirectoryName,filesep,fname_,'_',type,'_moment_restrictions'],[type ' evaluation of moment restrictions'],'moment_restrictions',type,DynareOptions.figures.textwidth*min(ij/ncol,1)) end diff --git a/matlab/gsa/map_ident_.m b/matlab/gsa/map_ident_.m index af7c53f7c..94e69f7fd 100644 --- a/matlab/gsa/map_ident_.m +++ b/matlab/gsa/map_ident_.m @@ -108,7 +108,7 @@ if opt_gsa.load_ident_files==0, ylabel(' ') title(M_.exo_names(j,:),'interpreter','none') if mod(j,6)==0 | j==M_.exo_nbr, - dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_vdec_exo_',int2str(ifig)],options_); + dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_vdec_exo_',int2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_vdec_exo_',int2str(ifig)],ifig,['Variance decomposition shocks'],'vdec_exo',options_.figures.textwidth*min(iplo/3,1)) end end @@ -232,7 +232,7 @@ if opt_gsa.morris==1, end xlabel(' ') title('Elementary effects variance decomposition') - dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_vdec'],options_); + dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_vdec'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_morris_vdec'],1,'Screening identification: variance decomposition','morris_vdec',1) else save([OutputDirectoryName,'/',fname_,'_morris_IDE.mat'],'vdec') @@ -338,7 +338,7 @@ if opt_gsa.morris==1, end xlabel(' ') title('Elementary effects in the moments') - dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_moments'],options_); + dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_moments'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_morris_moments'],1,'Screening identification: theoretical moments','morris_moments',1) % close(gcf), @@ -736,7 +736,7 @@ if opt_gsa.morris==1, end xlabel(' ') title('Elementary effects in the model') - dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_par'],options_); + dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morris_par'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_morris_par'],1,'Screening identification: model','morris_par',1) % hh=dyn_figure(options_.nodisplay); %bar(SAmunorm(:,irel)) @@ -752,7 +752,7 @@ if opt_gsa.morris==1, % end % xlabel(' ') % title('\mu in the model') -% dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morrismu_par'],options_); +% dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morrismu_par'],options_.nodisplay,options_.graph_format); % % hh=dyn_figure(options_.nodisplay); %bar(SAsignorm(:,irel)) % % boxplot(SAsignorm','whis',10,'symbol','r.') @@ -767,7 +767,7 @@ if opt_gsa.morris==1, % end % xlabel(' ') % title('\sigma in the model') -% dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morrissig_par'],options_); +% dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_morrissig_par'],options_.nodisplay,options_.graph_format); % figure, bar(SAnorm(:,irel)') % set(gca,'xtick',[1:j0]) @@ -1535,7 +1535,7 @@ else, % main effects analysis end xlabel(' ') title(['Identifiability indices in the ',fsuffix,' moments.'],'interpreter','none') - dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_ident_ALL',fsuffix],options_); + dyn_saveas(hh,[OutputDirectoryName,'/',fname_,'_ident_ALL',fsuffix],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[OutputDirectoryName,'/',fname_,'_ident_ALL',fsuffix],1,['Identifiability indices in the ',fsuffix,' moments.'],['ident_ALL',fsuffix]',1) % figure, bar(SAmeanexo), diff --git a/matlab/gsa/redform_map.m b/matlab/gsa/redform_map.m index 3b4534a5b..c7b257325 100644 --- a/matlab/gsa/redform_map.m +++ b/matlab/gsa/redform_map.m @@ -206,7 +206,7 @@ for j=1:size(anamendo,1) set(hc,'color','k','linewidth',2) hold off, title([namendo,' vs ', namexo ' - threshold [' num2str(threshold(1)) ' ' num2str(threshold(2)) ']'],'interpreter','none') - dyn_saveas(hf,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namexo],options_); + dyn_saveas(hf,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namexo],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namexo],['Reduced Form Mapping (Monte Carlo Filtering): ',strrep(namendo,'_','\_'),' vs ', strrep(namexo,'_','\_')],[type '_' namendo,'_vs_', namexo]) end si(:,js) = NaN(np,1); @@ -275,7 +275,7 @@ for j=1:size(anamendo,1) end title([logflag,' ',namendo,' vs ',namexo],'interpreter','none') if iplo==9 - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],[logflag,' ',strrep(namendo,'_','\_'),' vs ',strrep(namexo,'_','\_')],['redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],1) end end @@ -284,7 +284,7 @@ for j=1:size(anamendo,1) end end if iplo<9 && iplo>0 && ifig && ~options_.nograph, - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],[logflag,' ',strrep(namendo,'_','\_'),' vs ',strrep(namexo,'_','\_')],['redform_', namendo,'_vs_shocks_',logflag,num2str(ifig)],options_.figures.textwidth*min(iplo/3,1)) end ifig=0; @@ -342,7 +342,7 @@ for j=1:size(anamendo,1) set(hc,'color','k','linewidth',2) hold off, title([namendo,' vs lagged ', namlagendo ' - threshold [' num2str(threshold(1)) ' ' num2str(threshold(2)) ']'],'interpreter','none') - dyn_saveas(hf,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namlagendo],options_); + dyn_saveas(hf,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namlagendo],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[xdir,filesep, fname_ '_' type '_' namendo,'_vs_', namlagendo],['Reduced Form Mapping (Monte Carlo Filtering): ',strrep(namendo,'_','\_'),' vs lagged ', strrep(namlagendo,'_','\_')],[type '_' namendo,'_vs_', namlagendo],1) end @@ -412,7 +412,7 @@ for j=1:size(anamendo,1) end title([logflag,' ',namendo,' vs ',namlagendo,'(-1)'],'interpreter','none') if iplo==9, - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],[logflag,' ',strrep(namendo,'_','\_'),' vs ',strrep(namlagendo,'_','\_'),'(-1)'],['redform_', namendo,'_vs_lags_',logflag,':',num2str(ifig)],1) end end @@ -421,7 +421,7 @@ for j=1:size(anamendo,1) end end if iplo<9 && iplo>0 && ifig && ~options_.nograph, - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_', namendo,'_vs_lags_',logflag,num2str(ifig)],[logflag,' ',strrep(namendo,'_','\_'),' vs ',strrep(namlagendo,'_','\_'),'(-1)'],['redform_', namendo,'_vs_lags_',logflag,':',num2str(ifig)],options_.figures.textwidth*min(iplo/3,1)); end end @@ -440,7 +440,7 @@ if isempty(threshold) && ~options_.nograph, text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') end title('Reduced form GSA') - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_gsa'],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_gsa'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_gsa'],'Reduced Form GSA','redform_gsa') else @@ -456,7 +456,7 @@ if isempty(threshold) && ~options_.nograph, text(ip,-0.02,deblank(pnames(ip,:)),'rotation',90,'HorizontalAlignment','right','interpreter','none') end title('Reduced form GSA - Log-transformed elements') - dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_gsa_log'],options_); + dyn_saveas(hfig,[dirname,filesep,M_.fname,'_redform_gsa_log'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,filesep,M_.fname,'_redform_gsa_log'],'Reduced form GSA - Log-transformed elements','redform_gsa_log') end @@ -634,7 +634,7 @@ end plot(yn,[yf yn],'.'), title(['Out-of-sample prediction - R2=' num2str(r2,2)],'interpreter','none') end - dyn_saveas(hfig,fname,options_); + dyn_saveas(hfig,fname,options_.nodisplay,options_.graph_format); create_TeX_loader(options_,fname,['Out-of-sample prediction - R2=' num2str(r2,2)],'redform_gsa_log') if options_.nodisplay @@ -650,7 +650,7 @@ else hfig=dyn_figure(options_.nodisplay,'name',options_map.title); plot(y0,[yf y0],'.'), title([namy,' vs ', namx,' pred'],'interpreter','none') - dyn_saveas(hfig,[fname '_pred'],options_); + dyn_saveas(hfig,[fname '_pred'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[fname '_pred'],options_map.title,[namy,' vs ', namx,' pred']) end @@ -770,7 +770,7 @@ if ~isoctave 'horizontalalignment','center'); end -dyn_saveas(hfig,[options_mcf.OutputDirectoryName filesep options_mcf.fname_,'_',options_mcf.amcf_name],options_); +dyn_saveas(hfig,[options_mcf.OutputDirectoryName filesep options_mcf.fname_,'_',options_mcf.amcf_name],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[options_mcf.OutputDirectoryName filesep options_mcf.fname_,'_',options_mcf.amcf_name],strrep(options_mcf.amcf_title,'_','\_'),[options_mcf.fname_,'_',options_mcf.amcf_name]) return diff --git a/matlab/gsa/redform_screen.m b/matlab/gsa/redform_screen.m index 96773cdff..311c6b520 100644 --- a/matlab/gsa/redform_screen.m +++ b/matlab/gsa/redform_screen.m @@ -87,7 +87,7 @@ for j=1:size(anamendo,1), end title([namendo,' vs. ',namexo],'interpreter','none') if iplo==9, - dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_shock_',num2str(ifig)],options_); + dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_shock_',num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,'/',M_.fname,'_', namendo,'_vs_shock_',num2str(ifig)],ifig,[namendo,' vs. shocks ',int2str(ifig)],[namendo,'_vs_shock'],1) end @@ -95,7 +95,7 @@ for j=1:size(anamendo,1), end end if iplo<9 && iplo>0 && ifig, - dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)],options_); + dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_shocks_',num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,'/',M_.fname,'_', namendo,'_vs_shock_',num2str(ifig)],ifig,[namendo,' vs. shocks ',int2str(ifig)],[namendo,'_vs_shock'],options_.figures.textwidth*min(iplo/3)) end @@ -130,14 +130,14 @@ for j=1:size(anamendo,1), title([namendo,' vs. ',namlagendo,'(-1)'],'interpreter','none') if iplo==9, - dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],options_); + dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],ifig,[namendo,' vs. lagged endogenous ',int2str(ifig)],[namendo,'_vs_lags'],1) end end end end if iplo<9 && iplo>0 && ifig, - dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],options_); + dyn_saveas(hh,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,'/',M_.fname,'_', namendo,'_vs_lags_',num2str(ifig)],ifig,[namendo,' vs. lagged endogenous ',int2str(ifig)],[namendo,'_vs_lags'],options_.figures.textwidth*min(iplo/3)) end end @@ -156,7 +156,7 @@ end xlabel(' ') ylabel('Elementary Effects') title('Reduced form screening') -dyn_saveas(hh,[dirname,'/',M_.fname,'_redform_screen'],options_); +dyn_saveas(hh,[dirname,'/',M_.fname,'_redform_screen'],options_.nodisplay,options_.graph_format); create_TeX_loader(options_,[dirname,'/',M_.fname,'_redform_screen'],1,'Reduced form screening','redform_screen',1) diff --git a/matlab/gsa/scatter_mcf.m b/matlab/gsa/scatter_mcf.m index c6fccfdb6..fa4229375 100644 --- a/matlab/gsa/scatter_mcf.m +++ b/matlab/gsa/scatter_mcf.m @@ -166,7 +166,7 @@ if ~isoctave end if ~nograph, - dyn_saveas(hh,[dirname,filesep,fig_nam_],DynareOptions); + dyn_saveas(hh,[dirname,filesep,fig_nam_],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fidTeX = fopen([dirname,'/',fig_nam_ '.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by scatter_mcf.m (Dynare).\n'); diff --git a/matlab/gsa/scatter_plots.m b/matlab/gsa/scatter_plots.m index b3a3b498f..b2d59368b 100644 --- a/matlab/gsa/scatter_plots.m +++ b/matlab/gsa/scatter_plots.m @@ -173,7 +173,7 @@ end % end if ~nograph, - dyn_saveas(hh,[dirname,filesep,fig_nam_],DynareOptions); + dyn_saveas(hh,[dirname,filesep,fig_nam_],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fidTeX = fopen([dirname,'/',fig_nam_ '.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by scatter_plots.m (Dynare).\n'); diff --git a/matlab/gsa/stab_map_1.m b/matlab/gsa/stab_map_1.m index a4f30821a..8535a78ec 100644 --- a/matlab/gsa/stab_map_1.m +++ b/matlab/gsa/stab_map_1.m @@ -98,7 +98,7 @@ if iplot && ~options_.nograph title([ftit{j},'. p-value ', num2str(proba(ipar(j)),2)],'interpreter','none') end if nparplot>12, - dyn_saveas(hh,[dirname,filesep,fname_,'_',aname,'_SA_',int2str(i)],options_); + dyn_saveas(hh,[dirname,filesep,fname_,'_',aname,'_SA_',int2str(i)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([dirname,filesep,fname_,'_',aname,'_SA_',int2str(i) '.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stab_map_1.m (Dynare).\n'); @@ -113,7 +113,7 @@ if iplot && ~options_.nograph fclose(fidTeX); end else - dyn_saveas(hh,[dirname,filesep,fname_,'_',aname,'_SA'],options_); + dyn_saveas(hh,[dirname,filesep,fname_,'_',aname,'_SA'],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([dirname,filesep,fname_,'_',aname,'_SA.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stab_map_1.m (Dynare).\n'); diff --git a/matlab/gsa/stab_map_2.m b/matlab/gsa/stab_map_2.m index 561d883c4..beed786dc 100644 --- a/matlab/gsa/stab_map_2.m +++ b/matlab/gsa/stab_map_2.m @@ -142,7 +142,7 @@ for j=1:npar, end title(['cc = ',num2str(c0(i2(jx),j))]) if (mod(j2,12)==0) && j2>0, - dyn_saveas(hh,[dirname,filesep,fig_nam_,int2str(ifig)],options_); + dyn_saveas(hh,[dirname,filesep,fig_nam_,int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([dirname,filesep,fig_nam_,int2str(ifig),'.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stab_map_2.m (Dynare).\n'); @@ -163,7 +163,7 @@ for j=1:npar, end end if ~nograph && (j==(npar)) && j2>0 && (mod(j2,12)~=0), - dyn_saveas(hh,[dirname,filesep,fig_nam_,int2str(ifig)],options_); + dyn_saveas(hh,[dirname,filesep,fig_nam_,int2str(ifig)],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([dirname,filesep,fig_nam_,int2str(ifig),'.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by stab_map_2.m (Dynare).\n'); diff --git a/matlab/mh_autocorrelation_function.m b/matlab/mh_autocorrelation_function.m index ceffbbd76..b14178def 100644 --- a/matlab/mh_autocorrelation_function.m +++ b/matlab/mh_autocorrelation_function.m @@ -104,4 +104,4 @@ if ~exist([M_.fname filesep 'graphs']) end plot_name=get_the_name(column,0,M_,estim_params_,options_); -dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'MH_Autocorrelation_' plot_name],options_) +dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'MH_Autocorrelation_' plot_name],options_.nodisplay,options_.graph_format) diff --git a/matlab/mode_check.m b/matlab/mode_check.m index e16c9c1a9..3217dbd12 100644 --- a/matlab/mode_check.m +++ b/matlab/mode_check.m @@ -187,7 +187,7 @@ for plt = 1:nbplt, text(0.25,0.5,'log-post') text(0.69,0.5,'log-lik kernel') end - dyn_saveas(hh,[ Model.fname '_CheckPlots' int2str(plt) ],DynareOptions); + dyn_saveas(hh,[ Model.fname '_CheckPlots' int2str(plt) ],DynareOptions.nodisplay,DynareOptions.graph_format); if TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) % TeX eps loader file fprintf(fidTeX,'\\begin{figure}[H]\n'); diff --git a/matlab/particles b/matlab/particles index 20978ce11..823d94748 160000 --- a/matlab/particles +++ b/matlab/particles @@ -1 +1 @@ -Subproject commit 20978ce117597f2ce83afb2fbcd92347ee1642d1 +Subproject commit 823d947484675c8d409a4eb2377a57dc59bdf713 diff --git a/matlab/plot_icforecast.m b/matlab/plot_icforecast.m index 9752d5376..1d4b61eb7 100644 --- a/matlab/plot_icforecast.m +++ b/matlab/plot_icforecast.m @@ -68,4 +68,4 @@ plot(1:H,cci2(1,:),'--k','linewidth',1) plot(1:H,cci2(2,:),'--k','linewidth',1) axis tight hold off -dyn_saveas(hh,[graphoptions.OutputDirectoryName '/Conditional_forecast_',strrep(deblank(graphoptions.title),' ','_'),'_',deblank(name)],options_) \ No newline at end of file +dyn_saveas(hh,[graphoptions.OutputDirectoryName '/Conditional_forecast_',strrep(deblank(graphoptions.title),' ','_'),'_',deblank(name)],options_.nodisplay,options_.graph_format) \ No newline at end of file diff --git a/matlab/plot_identification.m b/matlab/plot_identification.m index 78ac328a5..f699d2e42 100644 --- a/matlab/plot_identification.m +++ b/matlab/plot_identification.m @@ -122,7 +122,7 @@ if SampleSize == 1, fprintf(fidTeX,'%% End Of TeX file. \n'); fclose(fidTeX); end - dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_ident_strength_' tittxt1],options_); + dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_ident_strength_' tittxt1],options_.nodisplay,options_.graph_format); if advanced, if ~options_.nodisplay, @@ -151,7 +151,7 @@ if SampleSize == 1, end legend('Moments','Model','LRE model','Location','Best') title('Sensitivity bars using derivatives (log-scale)') - dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_sensitivity_' tittxt1 ],options_); + dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_sensitivity_' tittxt1 ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([IdentifDirectoryName '/' M_.fname '_sensitivity_' tittxt1,'.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -205,7 +205,7 @@ if SampleSize == 1, set(gca,'xgrid','on') set(gca,'ygrid','on') xlabel([tittxt,' - Collinearity patterns with ', int2str(j) ,' parameter(s)'],'interpreter','none') - dyn_saveas(hh,[ IdentifDirectoryName '/' M_.fname '_ident_collinearity_' tittxt1 '_' int2str(j) ],options_); + dyn_saveas(hh,[ IdentifDirectoryName '/' M_.fname '_ident_collinearity_' tittxt1 '_' int2str(j) ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([ IdentifDirectoryName '/' M_.fname '_ident_collinearity_' tittxt1 '_' int2str(j),'.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -270,7 +270,7 @@ if SampleSize == 1, end title(['Singular value ',num2str(Stit)]) end - dyn_saveas(f1,[ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_1' ],options_); + dyn_saveas(f1,[ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_1' ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_1','.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -285,7 +285,7 @@ if SampleSize == 1, fclose(fidTeX); end if nparam>4, - dyn_saveas(f2,[ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_2' ],options_); + dyn_saveas(f2,[ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_2' ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([ IdentifDirectoryName '/' M_.fname '_ident_pattern_' tittxt1 '_2.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -329,7 +329,7 @@ else legend('Moments','Model','LRE model','Location','Best') end title('MC mean of sensitivity measures') - dyn_saveas(hh,[ IdentifDirectoryName '/' M_.fname '_MC_sensitivity' ],options_); + dyn_saveas(hh,[ IdentifDirectoryName '/' M_.fname '_MC_sensitivity' ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([ IdentifDirectoryName '/' M_.fname '_MC_sensitivity.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -360,7 +360,7 @@ else subplot(223) hist(log10(idelre.cond)) title('log10 of Condition number in the LRE model') - dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_ident_COND' ],options_); + dyn_saveas(hh,[IdentifDirectoryName '/' M_.fname '_ident_COND' ],options_.nodisplay,options_.graph_format); options_mcf.pvalue_ks = 0.1; options_mcf.pvalue_corr = 0.001; options_mcf.alpha2 = 0; @@ -440,7 +440,7 @@ else end title(['MEAN Singular value ',num2str(Stit)]) end - dyn_saveas(f1,[IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_1' ],options_); + dyn_saveas(f1,[IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_1' ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_1.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); @@ -455,7 +455,7 @@ else fclose(fidTeX); end if nparam>4, - dyn_saveas(f2,[ IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_2' ],options_); + dyn_saveas(f2,[ IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_2' ],options_.nodisplay,options_.graph_format); if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) fidTeX = fopen([ IdentifDirectoryName '/' M_.fname '_MC_ident_pattern_2.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by plot_identification.m (Dynare).\n'); diff --git a/matlab/plot_priors.m b/matlab/plot_priors.m index f8a77fe04..04f371566 100644 --- a/matlab/plot_priors.m +++ b/matlab/plot_priors.m @@ -70,7 +70,7 @@ for plt = 1:nbplt, title(nam,'Interpreter','none') drawnow end - dyn_saveas(hplt,[M_.fname '_Priors' int2str(plt)],options_); + dyn_saveas(hplt,[M_.fname '_Priors' int2str(plt)],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for jj = 1:nstar0, diff --git a/matlab/pm3_core.m b/matlab/pm3_core.m index 9443f9e9f..32052f83c 100644 --- a/matlab/pm3_core.m +++ b/matlab/pm3_core.m @@ -108,7 +108,7 @@ for i=fpar:nvar end if subplotnum == MaxNumberOfPlotsPerFigure || i == nvar - dyn_saveas(hh,[M_.dname '/Output/' M_.fname '_' name3 '_' deblank(tit3(i,:))],options_); + dyn_saveas(hh,[M_.dname '/Output/' M_.fname '_' name3 '_' deblank(tit3(i,:))],options_.nodisplay,options_.graph_format); if RemoteFlag==1, OutputFileName = [OutputFileName; {[M_.dname, filesep, 'Output',filesep], [M_.fname '_' name3 '_' deblank(tit3(i,:)) '.*']}]; end diff --git a/matlab/rplot.m b/matlab/rplot.m index ba2d3b1df..5f1901894 100644 --- a/matlab/rplot.m +++ b/matlab/rplot.m @@ -94,7 +94,7 @@ if rplottype == 0 set(h, 'Interpreter', 'none'); end end - dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(1,:))],options_) + dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(1,:))],options_.nodisplay,options_.graph_format) if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) create_TeX_loader(fidTeX,options_,[M_.fname, '/graphs/', 'SimulatedTrajectory_' deblank(s1(1,:))],'Simulated trajectories','SimulatedTrajectory_',deblank(s1(1,:)),1) end @@ -105,7 +105,7 @@ elseif rplottype == 1 xlim([min(ix(i)) max(ix(i))]) title(['Plot of ' s1(j,:)],'Interpreter','none') ; xlabel('Periods') ; - dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(j,:))],options_) + dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(j,:))],options_.nodisplay,options_.graph_format) if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) create_TeX_loader(fidTeX,options_,[M_.fname, '/graphs/', 'SimulatedTrajectory_' deblank(s1(j,:))],'Simulated trajectories','SimulatedTrajectory_',deblank(s1(j,:)),1); end @@ -128,7 +128,7 @@ elseif rplottype == 2 title(['Plot of ' s1(j,:)],'Interpreter','none') ; axis tight; end - dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(1,:))],options_) + dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'SimulatedTrajectory_' deblank(s1(1,:))],options_.nodisplay,options_.graph_format) if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format))) create_TeX_loader(fidTeX,options_,[M_.fname, '/graphs/', 'SimulatedTrajectory_' deblank(s1(1,:))],'Simulated trajectories','SimulatedTrajectory_',deblank(s1(1,:)),min(j/nc,1)); end diff --git a/matlab/stoch_simul.m b/matlab/stoch_simul.m index 81f53c90e..d187a45a5 100644 --- a/matlab/stoch_simul.m +++ b/matlab/stoch_simul.m @@ -269,7 +269,7 @@ if options_.irf remove_fractional_xticks; title(deblank(mylist(j,:)),'Interpreter','none'); end - dyn_saveas(hh,[M_.fname '_IRF_' deblank(tit(i,:))],options_); + dyn_saveas(hh,[M_.fname '_IRF_' deblank(tit(i,:))],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for j = 1:number_of_plots_to_draw @@ -301,7 +301,7 @@ if options_.irf remove_fractional_xticks title(deblank(mylist((fig-1)*nstar+plt,:)),'Interpreter','none'); end - dyn_saveas(hh,[ M_.fname '_IRF_' deblank(tit(i,:)) int2str(fig)],options_); + dyn_saveas(hh,[ M_.fname '_IRF_' deblank(tit(i,:)) int2str(fig)],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for j = 1:nstar @@ -334,7 +334,7 @@ if options_.irf remove_fractional_xticks title(deblank(mylist((nbplt-1)*nstar+plt,:)),'Interpreter','none'); end - dyn_saveas(hh,[ M_.fname '_IRF_' deblank(tit(i,:)) int2str(nbplt) ],options_); + dyn_saveas(hh,[ M_.fname '_IRF_' deblank(tit(i,:)) int2str(nbplt) ],options_.nodisplay,options_.graph_format); if TeX && any(strcmp('eps',cellstr(options_.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); for j = 1:m diff --git a/matlab/trace_plot.m b/matlab/trace_plot.m index 72f8f7ab3..c07e4707b 100644 --- a/matlab/trace_plot.m +++ b/matlab/trace_plot.m @@ -131,7 +131,7 @@ else end plot_name=[plot_name,'_blck_',num2str(blck)]; -dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'TracePlot_' plot_name],options_) +dyn_saveas(hh,[M_.fname, filesep, 'graphs', filesep, 'TracePlot_' plot_name],options_.nodisplay,options_.graph_format) if options_.TeX fid=fopen([M_.fname,'/graphs/',M_.fname,'_TracePlot_' plot_name,'.tex'],'w+'); From c467c92d298d8ca96db089c20192320edb6b3293 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 21 Mar 2017 17:17:31 +0100 Subject: [PATCH 14/59] shock_decomposition: move fig_names to fig_name (fixing typo) --- matlab/WriteShockDecomp2Excel.m | 20 +++++++-------- matlab/expand_group.m | 2 +- matlab/global_initialization.m | 4 +-- matlab/graph_decomp.m | 34 ++++++++++++------------- matlab/graph_decomp_detail.m | 42 +++++++++++++++---------------- matlab/plot_shock_decomposition.m | 26 +++++++++---------- 6 files changed, 64 insertions(+), 64 deletions(-) diff --git a/matlab/WriteShockDecomp2Excel.m b/matlab/WriteShockDecomp2Excel.m index f6259dff6..a91ac8160 100644 --- a/matlab/WriteShockDecomp2Excel.m +++ b/matlab/WriteShockDecomp2Excel.m @@ -31,7 +31,7 @@ function WriteShockDecomp2Excel(z,shock_names,endo_names,i_var,initial_date,Dyna SteadyState=[]; fig_mode=''; fig_mode1=''; -fig_names=''; +fig_name=''; screen_shocks=0; use_shock_groups = DynareOptions.use_shock_groups; if use_shock_groups @@ -58,15 +58,15 @@ if nargin==8 , screen_shocks = opts_decomp.screen_shocks; end end - if isfield(opts_decomp,'fig_names') - fig_names = opts_decomp.fig_names; -% fig_names = ['_' fig_names]; - fig_names1 = [fig_names]; - fig_names = [fig_names '_']; + if isfield(opts_decomp,'fig_name') + fig_name = opts_decomp.fig_name; +% fig_name = ['_' fig_name]; + fig_name1 = [fig_name]; + fig_name = [fig_name '_']; end if screen_shocks - fig_names1 = [fig_names1 '_screen']; - fig_names = [fig_names 'screen_']; + fig_name1 = [fig_name1 '_screen']; + fig_name = [fig_name 'screen_']; end end @@ -115,9 +115,9 @@ for j=1:nvar warning off if ~ismac - [STATUS,MESSAGE] = xlswrite([DynareModel.fname,'_shock_decomposition',fig_mode,fig_names1],d0,deblank(endo_names(i_var(j),:))); + [STATUS,MESSAGE] = xlswrite([DynareModel.fname,'_shock_decomposition',fig_mode,fig_name1],d0,deblank(endo_names(i_var(j),:))); else - [STATUS] = xlwrite([DynareModel.fname,'_shock_decomposition',fig_mode,fig_names1],d0,deblank(endo_names(i_var(j),:))); + [STATUS] = xlwrite([DynareModel.fname,'_shock_decomposition',fig_mode,fig_name1],d0,deblank(endo_names(i_var(j),:))); end warning on diff --git a/matlab/expand_group.m b/matlab/expand_group.m index 145208660..7681ffeea 100644 --- a/matlab/expand_group.m +++ b/matlab/expand_group.m @@ -37,7 +37,7 @@ end % define expanded group label = mydata.shock_group.label; shocks = mydata.shock_group.shocks; -options.shock_decomp.fig_names = [mydata.fig_names '. Expand']; +options.shock_decomp.fig_name = [mydata.fig_name '. Expand']; options.use_shock_groups = strrep(label,' ','_'); %[use_shock_groups_old int2str(ic)]; for j=1:length(shocks) M.shock_groups.(options.use_shock_groups).(['group' int2str(j)]).label=shocks{j}; diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 9af259811..2f44a0524 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -11,7 +11,7 @@ function global_initialization() % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2016 Dynare Team +% Copyright (C) 2003-2017 Dynare Team % % This file is part of Dynare. % @@ -724,7 +724,7 @@ options_.parameter_set = []; options_.use_shock_groups = ''; options_.colormap = ''; options_.shock_decomp.detail_plot=0; -options_.shock_decomp.fig_names=''; +options_.shock_decomp.fig_name=''; options_.shock_decomp.init_state = 0; options_.shock_decomp.interactive = 0; options_.shock_decomp.plot_end_date=[]; diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index f85df1588..7a3f9e415 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -37,7 +37,7 @@ comp_nbr = size(z,2)-1; SteadyState=[]; fig_mode=''; fig_mode1=''; -% fig_names=''; +% fig_name=''; % screen_shocks=0; opts_decomp = DynareOptions.shock_decomp; if isfield(opts_decomp,'steady_state') @@ -48,7 +48,7 @@ if ~isempty(opts_decomp.type) fig_mode1 = ['_' fig_mode]; fig_mode = [fig_mode '_']; end -fig_names_long = opts_decomp.fig_names; +fig_name_long = opts_decomp.fig_name; use_shock_groups = DynareOptions.use_shock_groups; screen_shocks = opts_decomp.screen_shocks; @@ -60,16 +60,16 @@ if use_shock_groups shock_ind = fieldnames(shock_groups); end if screen_shocks - fig_names_long = [fig_names_long ' SCREEN']; + fig_name_long = [fig_name_long ' SCREEN']; end -fig_names=strrep(fig_names_long, '(given ', ''); -fig_names=strrep(fig_names, '(vintage ', ''); -fig_names=regexprep(fig_names, ' ', '_'); -fig_names=strrep(fig_names, '.', ''); -fig_names=strrep(fig_names, '-', ''); -fig_names=strrep(fig_names, ')', ''); -fig_names=strrep(fig_names, '(', ''); +fig_name=strrep(fig_name_long, '(given ', ''); +fig_name=strrep(fig_name, '(vintage ', ''); +fig_name=regexprep(fig_name, ' ', '_'); +fig_name=strrep(fig_name, '.', ''); +fig_name=strrep(fig_name, '-', ''); +fig_name=strrep(fig_name, ')', ''); +fig_name=strrep(fig_name, '(', ''); interactive = opts_decomp.interactive; @@ -88,7 +88,7 @@ nvar = length(i_var); %% write LaTeX-Header if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) - fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_names '.tex'],'w'); + fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_name '.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by Dynare''s graph_decomp.m.\n'); fprintf(fidTeX,['%% ' datestr(now,0) '\n']); fprintf(fidTeX,' \n'); @@ -128,7 +128,7 @@ for j=1:nvar if ymax-ymin < 1e-6 continue end - fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); set(fhandle,'position' ,[50 50 1500 750]) ax=axes('Position',[0.1 0.1 0.6 0.8],'box','on'); % plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2) @@ -190,7 +190,7 @@ for j=1:nvar ht = text(0.3,y1+0.3*height,labels(i,:),'Interpreter','none'); hold on if interactive & (~isoctave & use_shock_groups) - mydata.fig_names = DynareOptions.shock_decomp.fig_names(2:end); + mydata.fig_name = DynareOptions.shock_decomp.fig_name(2:end); mydata.use_shock_groups = DynareOptions.use_shock_groups; mydata.shock_group = shock_groups.(shock_ind{i}); mydata.shock_decomp = DynareOptions.shock_decomp; @@ -213,13 +213,13 @@ for j=1:nvar colormap(new_colormap) end hold off - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names],DynareOptions.nodisplay,DynareOptions.graph_format); + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); - fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_names]); - fprintf(fidTeX,'\\label{Fig:shock_decomp:%s}\n',[fig_mode deblank(endo_names(i_var(j),:)) fig_names]); - fprintf(fidTeX,['\\caption{' preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': $ %s $.}\n'],deblank(DynareModel.endo_names_tex(i_var(j),:))); + fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_name]); + fprintf(fidTeX,'\\label{Fig:shock_decomp:%s}\n',[fig_mode deblank(endo_names(i_var(j),:)) fig_name]); + fprintf(fidTeX,['\\caption{' preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': $ %s $.}\n'],deblank(DynareModel.endo_names_tex(i_var(j),:))); fprintf(fidTeX,'\\end{figure}\n'); fprintf(fidTeX,' \n'); end diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 5407e385a..f5bbe5da6 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -32,7 +32,7 @@ GraphDirectoryName = CheckPath('graphs',DynareModel.dname); % interactive = 0; fig_mode=''; fig_mode1=''; -% fig_names=''; +% fig_name=''; % screen_shocks=0; use_shock_groups = DynareOptions.use_shock_groups; if use_shock_groups @@ -55,23 +55,23 @@ screen_shocks = opts_decomp.screen_shocks; if DynareOptions.use_shock_groups | comp_nbr<=18, screen_shocks=0; end -fig_names_long = opts_decomp.fig_names; -% fig_names = ['_' fig_names]; +fig_name_long = opts_decomp.fig_name; +% fig_name = ['_' fig_name]; if screen_shocks -% fig_names1 = [fig_names1 '_screen']; - fig_names_long = [fig_names_long ' SCREEN']; +% fig_name1 = [fig_name1 '_screen']; + fig_name_long = [fig_name_long ' SCREEN']; end -fig_names=strrep(fig_names_long, '(given ', ''); -fig_names=strrep(fig_names, '(vintage ', ''); -fig_names=regexprep(fig_names, ' ', '_'); -fig_names=strrep(fig_names, '.', ''); -fig_names=strrep(fig_names, '-', ''); -fig_names=strrep(fig_names, ')', ''); -fig_names=strrep(fig_names, '(', ''); -% fig_names1 = [fig_names]; -% fig_names = [fig_names '_']; +fig_name=strrep(fig_name_long, '(given ', ''); +fig_name=strrep(fig_name, '(vintage ', ''); +fig_name=regexprep(fig_name, ' ', '_'); +fig_name=strrep(fig_name, '.', ''); +fig_name=strrep(fig_name, '-', ''); +fig_name=strrep(fig_name, ')', ''); +fig_name=strrep(fig_name, '(', ''); +% fig_name1 = [fig_name]; +% fig_name = [fig_name '_']; gend = size(z,3); if isempty(initial_date) @@ -106,7 +106,7 @@ nvar = length(i_var); %% write LaTeX-Header if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) - fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_names '_detail.tex'],'w'); + fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_name '_detail.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by Dynare''s graph_decomp_detail.m.\n'); fprintf(fidTeX,['%% ' datestr(now,0) '\n']); fprintf(fidTeX,' \n'); @@ -151,7 +151,7 @@ for j=1:nvar continue end for jf = 1:nfigs - fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); a0=zeros(1,4); a0(3)=inf; a0(4)=-inf; @@ -179,7 +179,7 @@ for j=1:nvar set(gca,'ylim',a0(3:4)) hold on, h1=plot(x(2:end),z1(end,:),'k-','LineWidth',2); if interactive & (~isoctave & use_shock_groups) - mydata.fig_names = DynareOptions.shock_decomp.fig_names(2:end); + mydata.fig_name = DynareOptions.shock_decomp.fig_name(2:end); mydata.use_shock_groups = DynareOptions.use_shock_groups; mydata.shock_group = shock_groups.(shock_ind{ic}); mydata.shock_decomp = DynareOptions.shock_decomp; @@ -224,13 +224,13 @@ for j=1:nvar else suffix = ['_detail']; end - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_names suffix],DynareOptions.nodisplay,DynareOptions.graph_format); + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name suffix],DynareOptions.nodisplay,DynareOptions.graph_format); if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); - fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_names suffix]); - fprintf(fidTeX,'\\label{Fig:shock_decomp_detail:%s}\n',[fig_mode deblank(endo_names(i_var(j),:)) fig_names suffix]); - fprintf(fidTeX,['\\caption{' preamble_txt fig_names_long strrep(fig_mode1, '_', ' ') ': $ %s $ (detail).}\n'],deblank(DynareModel.endo_names_tex(i_var(j),:))); + fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_name suffix]); + fprintf(fidTeX,'\\label{Fig:shock_decomp_detail:%s}\n',[fig_mode deblank(endo_names(i_var(j),:)) fig_name suffix]); + fprintf(fidTeX,['\\caption{' preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': $ %s $ (detail).}\n'],deblank(DynareModel.endo_names_tex(i_var(j),:))); fprintf(fidTeX,'\\end{figure}\n'); fprintf(fidTeX,' \n'); end diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m index bc9534e21..9ff2bb676 100644 --- a/matlab/plot_shock_decomposition.m +++ b/matlab/plot_shock_decomposition.m @@ -41,7 +41,7 @@ endo_nbr = M_.endo_nbr; % number of shocks nshocks = M_.exo_nbr; % type = ''; -fig_names=''; +fig_name=''; % detail_plot=0; % realtime_=0; % 0 is standard; 1 is realtime (pool/vintage); 2 is conditional (pool/vintage); 3 is forecast (pool/vintage) % vintage_=0; % 0 pool realtime/conditional; int: forecast/conditional shock decompositions @@ -55,8 +55,8 @@ else expand=0; end -if ~isempty(options_.shock_decomp.fig_names) - fig_names=[' ' options_.shock_decomp.fig_names]; +if ~isempty(options_.shock_decomp.fig_name) + fig_name=[' ' options_.shock_decomp.fig_name]; end type=options_.shock_decomp.type; detail_plot=options_.shock_decomp.detail_plot; @@ -81,35 +81,35 @@ switch realtime_ case 0 z = oo_.shock_decomposition; - fig_names1=fig_names; + fig_name1=fig_name; case 1 % realtime if vintage_ z = oo_.realtime_shock_decomposition.(['time_' int2str(vintage_)]); - fig_names1=[fig_names ' realtime (vintage ' char(initial_date+vintage_-1) ')']; + fig_name1=[fig_name ' realtime (vintage ' char(initial_date+vintage_-1) ')']; else z = oo_.realtime_shock_decomposition.pool; - fig_names1=[fig_names ' realtime (rolling)']; + fig_name1=[fig_name ' realtime (rolling)']; end case 2 % conditional if vintage_ z = oo_.realtime_conditional_shock_decomposition.(['time_' int2str(vintage_)]); initial_date = options_.initial_date+vintage_-1; - fig_names1=[fig_names ' ' int2str(forecast_) '-step ahead conditional forecast (given ' char(initial_date) ')']; + fig_name1=[fig_name ' ' int2str(forecast_) '-step ahead conditional forecast (given ' char(initial_date) ')']; else z = oo_.conditional_shock_decomposition.pool; - fig_names1=[fig_names ' 1-step ahead conditional forecast (rolling)']; + fig_name1=[fig_name ' 1-step ahead conditional forecast (rolling)']; end case 3 % forecast if vintage_ z = oo_.realtime_forecast_shock_decomposition.(['time_' int2str(vintage_)]); initial_date = options_.initial_date+vintage_-1; - fig_names1=[fig_names ' ' int2str(forecast_) '-step ahead forecast (given ' char(initial_date) ')']; + fig_name1=[fig_name ' ' int2str(forecast_) '-step ahead forecast (given ' char(initial_date) ')']; else z = oo_.realtime_forecast_shock_decomposition.pool; - fig_names1=[fig_names ' 1-step ahead forecast (rolling)']; + fig_name1=[fig_name ' 1-step ahead forecast (rolling)']; end end @@ -170,14 +170,14 @@ end if ~expand - fig_names = fig_names1; + fig_name = fig_name1; end gend = size(z,3); if options_.use_shock_groups shock_groups = M_.shock_groups.(options_.use_shock_groups); shock_ind = fieldnames(shock_groups); ngroups = length(shock_ind); - fig_names=[fig_names ' group ' options_.use_shock_groups]; + fig_name=[fig_name ' group ' options_.use_shock_groups]; shock_names = shock_ind; for i=1:ngroups, shock_names{i} = (shock_groups.(shock_ind{i}).label); @@ -329,7 +329,7 @@ end z = z(:,:,a:b); % end crop data -options_.shock_decomp.fig_names=fig_names; +options_.shock_decomp.fig_name=fig_name; if detail_plot, graph_decomp_detail(z,shock_names,M_.endo_names,i_var,my_initial_date,M_,options_) else From 4f432b7e581163de4f1be9f35e7e4b8d52655b84 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 21 Mar 2017 17:19:16 +0100 Subject: [PATCH 15/59] doc: update plot_shock_decomposition option names --- doc/dynare.texi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 9aec072be..5fa8513fc 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -7311,14 +7311,14 @@ graphs. See @code{colormap} in Matlab/Octave manual. @item graph_format = (@var{GRAPH_FORMAT_LIST}) @xref{graph_format}. -@item detailed -@anchor{detailed} Plots shock contributions using subplots, one per shock (or group of shocks). +@item detail_plot +@anchor{detail_plot} Plots shock contributions using subplots, one per shock (or group of shocks). @item interactive @anchor{interactive} Under MATLAB, add uimenu's for detailed group plots. -@item screen -@anchor{screen} For large models (@i{i.e.} for models with more than @math{16} +@item screen_shocks +@anchor{screen_shcoks} For large models (@i{i.e.} for models with more than @math{16} shocks), plots only the shocks that have the largest historical contribution for chosen selected @code{variable_names}. Historical contribution is ranked by the mean absolute value of all historical contributions. From 2be17e1ebdf17707e00e61ac9fc5e604137ef64e Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 22 Mar 2017 10:52:14 +0100 Subject: [PATCH 16/59] doc: more fixes to documentation --- doc/dynare.texi | 75 +++++++++++++++++++------------------------------ 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 5fa8513fc..b6f649014 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -7066,19 +7066,14 @@ model). @table @code -@item parameter_set = @var{PARAMETER_SET} -Specify the parameter set to use for running the smoother. The -@var{PARAMETER_SET} can take one of the following seven values: -@code{calibration}, @code{prior_mode}, @code{prior_mean}, -@code{posterior_mode}, @code{posterior_mean}, -@code{posterior_median}, @code{mle_mode}. Note that the parameter -set used in subsequent commands like @code{stoch_simul} will be set to -the specified @code{parameter_set}. -Default value: @code{posterior_mean} if +@item parameter_set = @code{calibration} | @code{prior_mode} | @code{prior_mean} | @code{posterior_mode} | @code{posterior_mean} | @code{posterior_median} | @code{mle_mode} +@anchor{parameter_set} Specify the parameter set to use for running the smoother. Note that the +parameter set used in subsequent commands like @code{stoch_simul} will be set +to the specified @code{parameter_set}. Default value: @code{posterior_mean} if Metropolis has been run, @code{mle_mode} if MLE has been run. @item datafile = @var{FILENAME} -@xref{datafile}. Useful when computing the shock decomposition on a +@anchor{datafile_shock_decomp} @xref{datafile}. Useful when computing the shock decomposition on a calibrated model. @item first_obs = @var{INTEGER} @@ -7087,16 +7082,16 @@ calibrated model. @item nobs = @var{INTEGER} @xref{nobs}. -@item use_shock_groups [= @var{SHOCK_GROUPS_NAME}] +@item use_shock_groups [= @var{STRING}] @anchor{use_shock_groups} Uses groups of shocks instead of individual shocks in the decomposition. Groups of shocks are defined in the @ref{shock_groups} block. -@item colormap = @var{COLORMAP_NAME} +@item colormap = @var{STRING} @anchor{colormap} Controls the colormap used for the shocks decomposition -graphs. See @code{colormap} in Matlab/Octave manual. +graphs. See @code{colormap} in Matlab/Octave manual for valid arguments. @item nograph -@xref{nograph} Suppresses the display and creation only within the +@xref{nograph}. Suppresses the display and creation only within the @code{shock_decomposition}-command but does not affect other commands. @xref{plot_shock_decomposition} for plotting graphs. @@ -7201,17 +7196,11 @@ model). @table @code -@item parameter_set = @var{PARAMETER_SET} -Specify the parameter set to use for running the smoother. -@var{PARAMETER_SET} can take one of the following seven values: -@code{calibration}, @code{prior_mode}, @code{prior_mean}, -@code{posterior_mode}, @code{posterior_mean}, -@code{posterior_median}, @code{mle_mode}. Default value: @code{posterior_mean} if -Metropolis has been run, @code{mle_mode} if MLE has been run. +@item parameter_set = @code{calibration} | @code{prior_mode} | @code{prior_mean} | @code{posterior_mode} | @code{posterior_mean} | @code{posterior_median} | @code{mle_mode} +@xref{parameter_set}. @item datafile = @var{FILENAME} -@xref{datafile}. Useful when computing the shock decomposition on a -calibrated model. +@xref{datafile_shock_decomp}. @item first_obs = @var{INTEGER} @xref{first_obs}. @@ -7219,14 +7208,11 @@ calibrated model. @item nobs = @var{INTEGER} @xref{nobs}. -@item use_shock_groups [= @var{SHOCK_GROUPS_NAME}] -@anchor{use_shock_groups_realtime} Uses groups of shocks instead of individual -shocks in the decomposition. Groups of shocks are defined in the -@ref{shock_groups} block. +@item use_shock_groups [= @var{STRING}] +@xref{use_shock_groups}. -@item colormap = @var{COLORMAP_NAME} -@anchor{colormap_realtime} Controls the colormap used for the shocks -decomposition graphs. See @code{colormap} in Matlab/Octave manual. +@item colormap = @var{STRING} +@xref{colormap}. @item nograph @xref{nograph}. Only shock decompositions are computed and stored in @code{oo_.realtime_shock_decomposition}, @@ -7296,19 +7282,17 @@ Note that this command must come after @code{shock_decomposition} or @code{realt @table @code -@item use_shock_groups [= @var{SHOCK_GROUPS_NAME}] -@anchor{use_shock_groups_plot} Uses groups of shocks instead of individual -shocks in the decomposition. Groups of shocks are defined in the -@ref{shock_groups} block. +@item use_shock_groups [= @var{STRING}] +@xref{use_shock_groups}. -@item colormap = @var{COLORMAP_NAME} -@anchor{colormap_plot} Controls the colormap used for the shocks decomposition -graphs. See @code{colormap} in Matlab/Octave manual. +@item colormap = @var{STRING} +@xref{colormap}. @item nodisplay @xref{nodisplay}. -@item graph_format = (@var{GRAPH_FORMAT_LIST}) +@item graph_format = @var{FORMAT} +@itemx graph_format = ( @var{FORMAT}, @var{FORMAT}@dots{} ) @xref{graph_format}. @item detail_plot @@ -7328,15 +7312,14 @@ by the mean absolute value of all historical contributions. zero line in the shock decomposition plot is translated to the steady state level. Default: @math{0} -@item type = @var{TYPE_NAME} -@anchor{type} For quarterly data, @var{TYPE_NAME} can take one of the -following values: @code{qoq} for quarter-on-quarter plots, @code{yoy} for -year-on-year plots of growth rates, @code{aoa} for annualized variables, -@i{i.e.} the value in the last quarter for each year is plotted. Default -value: @code{empty}, @i{i.e.} standard period-on-period plots (@code{qoq} for -quarterly data). +@item type = @code{qoq} | @code{yoy} | @code{aoa} +@anchor{type} For quarterly data, valid arguments are: @code{qoq} for +quarter-on-quarter plots, @code{yoy} for year-on-year plots of growth rates, +@code{aoa} for annualized variables, @i{i.e.} the value in the last quarter for +each year is plotted. Default value: @code{empty}, @i{i.e.} standard +period-on-period plots (@code{qoq} for quarterly data). -@item fig_name = @var{FIG_NAME} +@item fig_name = @var{STRING} @anchor{fig_name} Specifies a user-defined keyword to be appended to the default figure name set by @code{plot_shock_decomposition}. This can avoid to overwrite plots in case of sequential calls to @code{plot_shock_decomposition}. From 93130ee922afbcf32ec7d6f707fed7a76ab316e1 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 22 Mar 2017 14:01:34 +0100 Subject: [PATCH 17/59] fix bug in WriteShockDecomp2Excel --- matlab/WriteShockDecomp2Excel.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/WriteShockDecomp2Excel.m b/matlab/WriteShockDecomp2Excel.m index a91ac8160..538d21aa0 100644 --- a/matlab/WriteShockDecomp2Excel.m +++ b/matlab/WriteShockDecomp2Excel.m @@ -52,7 +52,7 @@ if nargin==8 , fig_mode = [fig_mode '_']; end if isfield(opts_decomp,'screen_shocks') - if DynareOptions.use_shock_groups, + if use_shock_groups screen_shocks=0; elseif comp_nbr>18 screen_shocks = opts_decomp.screen_shocks; From b8b6228d67b89bb38da79db96fdb7d04eecdef21 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 24 Mar 2017 11:23:45 +0100 Subject: [PATCH 18/59] graph_decomp_detail: fix bug, extra argument not referenced --- matlab/graph_decomp_detail.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index f5bbe5da6..420889503 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -1,4 +1,4 @@ -function []=graph_decomp_detail(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions,opts_decomp) +function []=graph_decomp_detail(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions) %function []=graph_decomp_detail(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions) % Plots the results from the shock_decomposition command % From b3ecc8c00324044d2e0818059d2182ce1a2313a7 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 22 Mar 2017 11:30:35 +0100 Subject: [PATCH 19/59] preprocessor: add plot_shock_decomposition command. closes #1406 --- doc/dynare.texi | 24 ++++-- matlab/WriteShockDecomp2Excel.m | 2 +- matlab/annualized_shock_decomposition.m | 16 ++-- matlab/global_initialization.m | 20 ++--- matlab/graph_decomp.m | 22 +++--- matlab/graph_decomp_detail.m | 22 +++--- matlab/plot_shock_decomposition.m | 73 +++++++++-------- ...default_plot_shock_decomposition_options.m | 51 ++++++++++++ preprocessor/ComputingTasks.cc | 15 ++++ preprocessor/ComputingTasks.hh | 14 +++- preprocessor/DynareBison.yy | 68 ++++++++++++++-- preprocessor/DynareFlex.ll | 13 ++++ preprocessor/ParsingDriver.cc | 15 ++++ preprocessor/ParsingDriver.hh | 4 + tests/shock_decomposition/ls2003_plot.mod | 78 +++++-------------- 15 files changed, 282 insertions(+), 155 deletions(-) create mode 100644 matlab/set_default_plot_shock_decomposition_options.m diff --git a/doc/dynare.texi b/doc/dynare.texi index b6f649014..5fd0cc9cf 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -7271,13 +7271,18 @@ decompositions, @i{i.e.} @math{Y(t|T)}, for @math{t=[T@dots{}T+k]}. @xref{vintag @descriptionhead -This command plots the historical shock decomposition already computed by command -@code{shock_decomposition}. -The @code{variable_names} provided govern for which -variables the decomposition is plotted. +This command plots the historical shock decomposition already computed by +@code{shock_decomposition}. The @code{variable_names} provided govern which +variables the decomposition is plotted for. Note that this command must come after @code{shock_decomposition} or @code{realtime_shock_decomposition}. +Further note that, unlike the majority of dynare commands, the options +specified below are overwritten with their defaults before every call to +@code{plot_shock_decomposition}. Hence, if you want to reuse an option in a +subsequent call to @code{plot_shock_decomposition}, you must pass it to the +command again. + @optionshead @table @code @@ -7295,11 +7300,14 @@ Note that this command must come after @code{shock_decomposition} or @code{realt @itemx graph_format = ( @var{FORMAT}, @var{FORMAT}@dots{} ) @xref{graph_format}. -@item detail_plot -@anchor{detail_plot} Plots shock contributions using subplots, one per shock (or group of shocks). +@item detail_plot = @var{INT_NUMBER} +Plots shock contributions using subplots, one per shock (or group of +shocks). Pass @math{1} to turn it on and @math{0} to turn it off. Default: +@math{0} -@item interactive -@anchor{interactive} Under MATLAB, add uimenu's for detailed group plots. +@item interactive = @var{INT_NUMBER} +Under MATLAB, add uimenu's for detailed group plots. Pass @math{1} to turn it +on and @math{0} to turn it off. Default: @math{0} @item screen_shocks @anchor{screen_shcoks} For large models (@i{i.e.} for models with more than @math{16} diff --git a/matlab/WriteShockDecomp2Excel.m b/matlab/WriteShockDecomp2Excel.m index 538d21aa0..dff5c79bb 100644 --- a/matlab/WriteShockDecomp2Excel.m +++ b/matlab/WriteShockDecomp2Excel.m @@ -33,7 +33,7 @@ fig_mode=''; fig_mode1=''; fig_name=''; screen_shocks=0; -use_shock_groups = DynareOptions.use_shock_groups; +use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; if use_shock_groups shock_groups = DynareModel.shock_groups.(use_shock_groups); shock_ind = fieldnames(shock_groups); diff --git a/matlab/annualized_shock_decomposition.m b/matlab/annualized_shock_decomposition.m index 8552b9d4f..30cd81241 100644 --- a/matlab/annualized_shock_decomposition.m +++ b/matlab/annualized_shock_decomposition.m @@ -49,7 +49,7 @@ function [z, endo_names, endo_names_tex, steady_state, i_var, oo_] = annualized_ % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -opts = options_.shock_decomp; +opts = options_.plot_shock_decomp; nvar = length(i_var); GYTREND0 = q2a.GYTREND0; var_type = q2a.type; @@ -61,8 +61,8 @@ cumfix = q2a.cumfix; if isstruct(oo_) % z = oo_.shock_decomposition; myopts=options_; - myopts.shock_decomp.type='qoq'; - myopts.shock_decomp.realtime=0; + myopts.plot_shock_decomp.type='qoq'; + myopts.plot_shock_decomp.realtime=0; [z, junk] = plot_shock_decomposition(M_,oo_,myopts,[]); else z = oo_; @@ -93,8 +93,8 @@ end if isstruct(aux) if ischar(aux.y) myopts=options_; - myopts.shock_decomp.type='qoq'; - myopts.shock_decomp.realtime=0; + myopts.plot_shock_decomp.type='qoq'; + myopts.plot_shock_decomp.realtime=0; [y_aux, steady_state_aux] = plot_shock_decomposition(M_,oo_,myopts,aux.y); aux.y=y_aux; aux.yss=steady_state_aux; @@ -183,9 +183,9 @@ for i=t0:4:t1, za=[]; gza=[]; myopts=options_; - myopts.shock_decomp.type='qoq'; - myopts.shock_decomp.realtime=1; - myopts.shock_decomp.vintage=i; + myopts.plot_shock_decomp.type='qoq'; + myopts.plot_shock_decomp.realtime=1; + myopts.plot_shock_decomp.vintage=i; [z, steady_state_aux] = plot_shock_decomposition(M_,oo_,myopts,[]); z = z(i_var,:,:); if isstruct(aux) diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 2f44a0524..1df3ea3a0 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -723,23 +723,13 @@ options_.discretionary_tol = 1e-7; options_.parameter_set = []; options_.use_shock_groups = ''; options_.colormap = ''; -options_.shock_decomp.detail_plot=0; -options_.shock_decomp.fig_name=''; options_.shock_decomp.init_state = 0; -options_.shock_decomp.interactive = 0; -options_.shock_decomp.plot_end_date=[]; -options_.shock_decomp.plot_init_date=[]; -options_.shock_decomp.screen_shocks=0; -options_.shock_decomp.steadystate=0; -options_.shock_decomp.type = ''; -options_.shock_decomp.write_xls=0; -% Shock decomposition realtime -options_.shock_decomp.realtime=0; % 0 is standard; 1 is realtime (pool/vintage); 2 is conditional (pool/vintage); 3 is forecast (pool/vintage) -options_.shock_decomp.vintage=0; % 0 pool realtime/conditional; int: forecast/conditional shock decompositions -options_.shock_decomp.forecast=0; -options_.shock_decomp.presample=NaN; -options_.shock_decomp.save_realtime=0; % saves memory +% Shock decomposition realtime +options_.shock_decomp.forecast = 0; +options_.shock_decomp.presample = NaN; +options_.shock_decomp.save_realtime = 0; % saves memory +options_ = set_default_plot_shock_decomposition_options(options_); % Nonlinearfilters options_.nonlinear_filter = []; diff --git a/matlab/graph_decomp.m b/matlab/graph_decomp.m index 7a3f9e415..b26078dc4 100644 --- a/matlab/graph_decomp.m +++ b/matlab/graph_decomp.m @@ -29,7 +29,7 @@ function []=graph_decomp(z,shock_names,endo_names,i_var,initial_date,DynareModel % along with Dynare. If not, see . GraphDirectoryName = CheckPath('graphs',DynareModel.dname); -new_colormap = DynareOptions.colormap; +new_colormap = DynareOptions.plot_shock_decomp.colormap; % number of components equals number of shocks + 1 (initial conditions) comp_nbr = size(z,2)-1; @@ -39,7 +39,7 @@ fig_mode=''; fig_mode1=''; % fig_name=''; % screen_shocks=0; -opts_decomp = DynareOptions.shock_decomp; +opts_decomp = DynareOptions.plot_shock_decomp; if isfield(opts_decomp,'steady_state') SteadyState = opts_decomp.steady_state; end @@ -50,7 +50,7 @@ if ~isempty(opts_decomp.type) end fig_name_long = opts_decomp.fig_name; -use_shock_groups = DynareOptions.use_shock_groups; +use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; screen_shocks = opts_decomp.screen_shocks; if use_shock_groups | comp_nbr<=18, screen_shocks=0; @@ -87,7 +87,7 @@ end nvar = length(i_var); %% write LaTeX-Header -if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) +if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_name '.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by Dynare''s graph_decomp.m.\n'); fprintf(fidTeX,['%% ' datestr(now,0) '\n']); @@ -128,7 +128,7 @@ for j=1:nvar if ymax-ymin < 1e-6 continue end - fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.plot_shock_decomp.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) '.'], 'PaperPositionMode', 'auto','PaperOrientation','landscape','renderermode','auto'); set(fhandle,'position' ,[50 50 1500 750]) ax=axes('Position',[0.1 0.1 0.6 0.8],'box','on'); % plot(ax,x(2:end),z1(end,:),'k-','LineWidth',2) @@ -190,10 +190,10 @@ for j=1:nvar ht = text(0.3,y1+0.3*height,labels(i,:),'Interpreter','none'); hold on if interactive & (~isoctave & use_shock_groups) - mydata.fig_name = DynareOptions.shock_decomp.fig_name(2:end); - mydata.use_shock_groups = DynareOptions.use_shock_groups; + mydata.fig_name = DynareOptions.plot_shock_decomp.fig_name(2:end); + mydata.use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; mydata.shock_group = shock_groups.(shock_ind{i}); - mydata.shock_decomp = DynareOptions.shock_decomp; + mydata.shock_decomp = DynareOptions.plot_shock_decomp; if ~isempty(mydata.shock_group.shocks{1}) c = uicontextmenu; hl.UIContextMenu=c; @@ -213,8 +213,8 @@ for j=1:nvar colormap(new_colormap) end hold off - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name],DynareOptions.nodisplay,DynareOptions.graph_format); - if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_name]); @@ -226,7 +226,7 @@ for j=1:nvar end %% write LaTeX-Footer -if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) +if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,' \n'); fprintf(fidTeX,'%% End of TeX file.\n'); fclose(fidTeX); diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m index 420889503..c78fe6d40 100644 --- a/matlab/graph_decomp_detail.m +++ b/matlab/graph_decomp_detail.m @@ -34,7 +34,7 @@ fig_mode=''; fig_mode1=''; % fig_name=''; % screen_shocks=0; -use_shock_groups = DynareOptions.use_shock_groups; +use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; if use_shock_groups shock_groups = DynareModel.shock_groups.(use_shock_groups); shock_ind = fieldnames(shock_groups); @@ -43,7 +43,7 @@ end % number of components equals number of shocks + 1 (initial conditions) comp_nbr = size(z,2)-1; -opts_decomp = DynareOptions.shock_decomp; +opts_decomp = DynareOptions.plot_shock_decomp; interactive = opts_decomp.interactive; if ~isempty(opts_decomp.type) @@ -52,7 +52,7 @@ if ~isempty(opts_decomp.type) fig_mode = [fig_mode '_']; end screen_shocks = opts_decomp.screen_shocks; -if DynareOptions.use_shock_groups | comp_nbr<=18, +if DynareOptions.plot_shock_decomp.use_shock_groups | comp_nbr<=18, screen_shocks=0; end fig_name_long = opts_decomp.fig_name; @@ -105,7 +105,7 @@ end nvar = length(i_var); %% write LaTeX-Header -if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) +if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fidTeX = fopen([GraphDirectoryName, filesep, DynareModel.fname '_shock_decomp' fig_mode1 fig_name '_detail.tex'],'w'); fprintf(fidTeX,'%% TeX eps-loader file generated by Dynare''s graph_decomp_detail.m.\n'); fprintf(fidTeX,['%% ' datestr(now,0) '\n']); @@ -151,7 +151,7 @@ for j=1:nvar continue end for jf = 1:nfigs - fhandle = dyn_figure(DynareOptions.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); + fhandle = dyn_figure(DynareOptions.plot_shock_decomp.nodisplay,'Name',[preamble_txt fig_name_long strrep(fig_mode1, '_', ' ') ': ' deblank(endo_names(i_var(j),:)) ' (detail).'],'position',[200 100 650 850], 'PaperPositionMode', 'auto','PaperOrientation','portrait','renderermode','auto'); a0=zeros(1,4); a0(3)=inf; a0(4)=-inf; @@ -179,10 +179,10 @@ for j=1:nvar set(gca,'ylim',a0(3:4)) hold on, h1=plot(x(2:end),z1(end,:),'k-','LineWidth',2); if interactive & (~isoctave & use_shock_groups) - mydata.fig_name = DynareOptions.shock_decomp.fig_name(2:end); - mydata.use_shock_groups = DynareOptions.use_shock_groups; + mydata.fig_name = DynareOptions.plot_shock_decomp.fig_name(2:end); + mydata.use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups; mydata.shock_group = shock_groups.(shock_ind{ic}); - mydata.shock_decomp = DynareOptions.shock_decomp; + mydata.shock_decomp = DynareOptions.plot_shock_decomp; if ~isempty(mydata.shock_group.shocks{1}) c = uicontextmenu; hax.UIContextMenu=c; @@ -224,8 +224,8 @@ for j=1:nvar else suffix = ['_detail']; end - dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name suffix],DynareOptions.nodisplay,DynareOptions.graph_format); - if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) + dyn_saveas(fhandle,[GraphDirectoryName, filesep, DynareModel.fname,'_shock_decomposition_',deblank(endo_names(i_var(j),:)),fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format); + if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,'\\begin{figure}[H]\n'); fprintf(fidTeX,'\\centering \n'); fprintf(fidTeX,'\\includegraphics[width=0.8\\textwidth]{%s/graphs/%s_shock_decomposition_%s}\n',DynareModel.fname,DynareModel.fname,[deblank(endo_names(i_var(j),:)) fig_mode1 fig_name suffix]); @@ -238,7 +238,7 @@ for j=1:nvar end %% write LaTeX-Footer -if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.graph_format))) +if DynareOptions.TeX && any(strcmp('eps',cellstr(DynareOptions.plot_shock_decomp.graph_format))) fprintf(fidTeX,' \n'); fprintf(fidTeX,'%% End of TeX file.\n'); fclose(fidTeX); diff --git a/matlab/plot_shock_decomposition.m b/matlab/plot_shock_decomposition.m index 9ff2bb676..368e233a7 100644 --- a/matlab/plot_shock_decomposition.m +++ b/matlab/plot_shock_decomposition.m @@ -28,6 +28,11 @@ function [z, steady_state] = plot_shock_decomposition(M_,oo_,options_,varlist) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . +options_.nodisplay = options_.plot_shock_decomp.nodisplay; +options_.graph_format = options_.plot_shock_decomp.graph_format; +options_.use_shock_groups = options_.plot_shock_decomp.use_shock_groups; +options_.colormap = options_.plot_shock_decomp.colormap; + % indices of endogenous variables if size(varlist,1) == 0 varlist = M_.endo_names(1:M_.orig_endo_nbr,:); @@ -49,27 +54,27 @@ fig_name=''; % steadystate=0; % write_xls=0; -if isfield(options_.shock_decomp,'expand'), % private trap for uimenu calls - expand=options_.shock_decomp.expand; +if isfield(options_.plot_shock_decomp,'expand'), % private trap for uimenu calls + expand=options_.plot_shock_decomp.expand; else expand=0; end -if ~isempty(options_.shock_decomp.fig_name) - fig_name=[' ' options_.shock_decomp.fig_name]; +if ~isempty(options_.plot_shock_decomp.fig_name) + fig_name=[' ' options_.plot_shock_decomp.fig_name]; end -type=options_.shock_decomp.type; -detail_plot=options_.shock_decomp.detail_plot; -realtime_= options_.shock_decomp.realtime; -vintage_ = options_.shock_decomp.vintage; +type=options_.plot_shock_decomp.type; +detail_plot=options_.plot_shock_decomp.detail_plot; +realtime_= options_.plot_shock_decomp.realtime; +vintage_ = options_.plot_shock_decomp.vintage; forecast_ = options_.shock_decomp.forecast; -steadystate = options_.shock_decomp.steadystate; -write_xls = options_.shock_decomp.write_xls; +steadystate = options_.plot_shock_decomp.steadystate; +write_xls = options_.plot_shock_decomp.write_xls; initial_date = options_.initial_date; -if isfield(options_.shock_decomp,'q2a'), % private trap for aoa calls - q2a=options_.shock_decomp.q2a; +if isfield(options_.plot_shock_decomp,'q2a'), % private trap for aoa calls + q2a=options_.plot_shock_decomp.q2a; if isstruct(q2a) && isempty(fieldnames(q2a)), q2a=0; end @@ -129,7 +134,7 @@ if isequal(type,'aoa') && isstruct(q2a) && realtime_ initial_date1=initial_date0+1; end end - t0=min(options_.shock_decomp.save_realtime); + t0=min(options_.plot_shock_decomp.save_realtime); ini1 = initial_date+t0-1; t0=t0+(4-ini1.time(2)); if ~isfield(q2a,'var_type'), % private trap for aoa calls @@ -153,7 +158,7 @@ if isequal(type,'aoa') && isstruct(q2a) && realtime_ % if isstruct(q2a.aux) && ischar(q2a.aux.y) % opts=options_; -% opts.shock_decomp.type='qoq'; +% opts.plot_shock_decomp.type='qoq'; % [y_aux, steady_state_aux] = plot_shock_decomposition(M_,oo_,opts,q2a.aux.y); % q2a.aux.y=y_aux; % q2a.aux.yss=steady_state_aux; @@ -173,11 +178,11 @@ if ~expand fig_name = fig_name1; end gend = size(z,3); -if options_.use_shock_groups - shock_groups = M_.shock_groups.(options_.use_shock_groups); +if options_.plot_shock_decomp.use_shock_groups + shock_groups = M_.shock_groups.(options_.plot_shock_decomp.use_shock_groups); shock_ind = fieldnames(shock_groups); ngroups = length(shock_ind); - fig_name=[fig_name ' group ' options_.use_shock_groups]; + fig_name=[fig_name ' group ' options_.plot_shock_decomp.use_shock_groups]; shock_names = shock_ind; for i=1:ngroups, shock_names{i} = (shock_groups.(shock_ind{i}).label); @@ -195,7 +200,7 @@ if options_.use_shock_groups zothers = sum(z(:,1:nshocks,:),2); shock_groups.(['group' int2str(ngroups+1)]).label = 'Others'; shock_groups.(['group' int2str(ngroups+1)]).shocks = cellstr(M_.exo_names(find(~ismember([1:M_.exo_nbr],kcum)),:))'; - M_.shock_groups.(options_.use_shock_groups)=shock_groups; + M_.shock_groups.(options_.plot_shock_decomp.use_shock_groups)=shock_groups; if any(any(zothers)), shock_names = [shock_names; {'Others + Initial Values'}]; end @@ -212,8 +217,8 @@ end MAP(end,:) = [0.7 0.7 0.7]; % MAP = [MAP; [0.7 0.7 0.7]; [0.3 0.3 0.3]]; -if isempty(options_.colormap), - options_.colormap = MAP; +if isempty(options_.plot_shock_decomp.colormap), + options_.plot_shock_decomp.colormap = MAP; end switch type @@ -269,7 +274,7 @@ switch type if isstruct(q2a.aux) && ischar(q2a.aux.y) opts=options_; - opts.shock_decomp.type='qoq'; + opts.plot_shock_decomp.type='qoq'; [y_aux, steady_state_aux] = plot_shock_decomposition(M_,oo_,opts,q2a.aux.y); q2a.aux.y=y_aux; q2a.aux.yss=steady_state_aux; @@ -292,11 +297,11 @@ switch type z=z(:,:,t0:4:end); end - if ~isempty(options_.shock_decomp.plot_init_date) - options_.shock_decomp.plot_init_date = dates([int2str(options_.shock_decomp.plot_init_date.time(1)) 'Y']); + if ~isempty(options_.plot_shock_decomp.plot_init_date) + options_.plot_shock_decomp.plot_init_date = dates([int2str(options_.plot_shock_decomp.plot_init_date.time(1)) 'Y']); end - if ~isempty(options_.shock_decomp.plot_end_date) - options_.shock_decomp.plot_end_date = dates([int2str(options_.shock_decomp.plot_end_date.time(1)) 'Y']); + if ~isempty(options_.plot_shock_decomp.plot_end_date) + options_.plot_shock_decomp.plot_end_date = dates([int2str(options_.plot_shock_decomp.plot_end_date.time(1)) 'Y']); end @@ -306,7 +311,7 @@ switch type end if steadystate - options_.shock_decomp.steady_state=steady_state; + options_.plot_shock_decomp.steady_state=steady_state; end if nargout @@ -319,17 +324,17 @@ end my_initial_date = initial_date; a = 1; b = size(z,3); -if ~isempty(options_.shock_decomp.plot_init_date) - my_initial_date = max(initial_date,options_.shock_decomp.plot_init_date); - a = find((initial_date:initial_date+b-1)==options_.shock_decomp.plot_init_date); +if ~isempty(options_.plot_shock_decomp.plot_init_date) + my_initial_date = max(initial_date,options_.plot_shock_decomp.plot_init_date); + a = find((initial_date:initial_date+b-1)==options_.plot_shock_decomp.plot_init_date); end -if ~isempty(options_.shock_decomp.plot_end_date) - b = find((initial_date:initial_date+b-1)==options_.shock_decomp.plot_end_date); +if ~isempty(options_.plot_shock_decomp.plot_end_date) + b = find((initial_date:initial_date+b-1)==options_.plot_shock_decomp.plot_end_date); end z = z(:,:,a:b); % end crop data -options_.shock_decomp.fig_name=fig_name; +options_.plot_shock_decomp.fig_name=fig_name; if detail_plot, graph_decomp_detail(z,shock_names,M_.endo_names,i_var,my_initial_date,M_,options_) else @@ -337,5 +342,5 @@ else end if write_xls - WriteShockDecomp2Excel(z,shock_names,M_.endo_names,i_var,initial_date,M_,options_,options_.shock_decomp); -end \ No newline at end of file + WriteShockDecomp2Excel(z,shock_names,M_.endo_names,i_var,initial_date,M_,options_,options_.plot_shock_decomp); +end diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m new file mode 100644 index 000000000..327c047cb --- /dev/null +++ b/matlab/set_default_plot_shock_decomposition_options.m @@ -0,0 +1,51 @@ +function options = set_default_plot_shock_decomposition_options(options) +%function options = set_default_plot_shock_decomposition_options(options) +% sets the default options for prior_shock_decomposition +% +% INPUTS +% options +% +% OUTPUTS +% options +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2017 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +options.plot_shock_decomp.use_shock_groups = ''; +options.plot_shock_decomp.colormap = ''; +options.plot_shock_decomp.nodisplay = 0; +options.plot_shock_decomp.graph_format = 'eps'; +options.plot_shock_decomp.detail_plot = 0; +options.plot_shock_decomp.interactive = 0; +options.plot_shock_decomp.screen_shocks = 0; +options.plot_shock_decomp.steadystate = 0; +options.plot_shock_decomp.type = ''; +options.plot_shock_decomp.fig_name = ''; +options.plot_shock_decomp.write_xls = 0; +options.plot_shock_decomp.realtime = 0; % 0 is standard; 1 is realtime + % (pool/vintage); 2 is conditional + % (pool/vintage); 3 is forecast + % (pool/vintage) +options.plot_shock_decomp.vintage = 0; % 0 pool realtime/conditional; int: + % forecast/conditional shock + % decompositions +options.plot_shock_decomp.plot_init_date = []; +options.plot_shock_decomp.plot_end_date = []; +end diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index cfc3b59b5..d91d04c10 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -1680,6 +1680,21 @@ RealtimeShockDecompositionStatement::writeOutput(ostream &output, const string & output << "oo_ = realtime_shock_decomposition(M_,oo_,options_,var_list_,bayestopt_,estim_params_);" << endl; } +PlotShockDecompositionStatement::PlotShockDecompositionStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg) : + symbol_list(symbol_list_arg), + options_list(options_list_arg) +{ +} + +void +PlotShockDecompositionStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +{ + output << "options_ = set_default_plot_shock_decomposition_options(options_);" << endl; + options_list.writeOutput(output); + symbol_list.writeOutput("var_list_", output); + output << "plot_shock_decomposition(M_, oo_, options_, var_list_);" << endl; +} ConditionalForecastStatement::ConditionalForecastStatement(const OptionsList &options_list_arg) : options_list(options_list_arg) diff --git a/preprocessor/ComputingTasks.hh b/preprocessor/ComputingTasks.hh index e74211f78..41da60982 100644 --- a/preprocessor/ComputingTasks.hh +++ b/preprocessor/ComputingTasks.hh @@ -593,9 +593,21 @@ private: const OptionsList options_list; public: RealtimeShockDecompositionStatement(const SymbolList &symbol_list_arg, - const OptionsList &options_list_arg); + const OptionsList &options_list_arg); virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; }; + +class PlotShockDecompositionStatement : public Statement +{ +private: + const SymbolList symbol_list; + const OptionsList options_list; +public: + PlotShockDecompositionStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg); + virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; +}; + class ConditionalForecastStatement : public Statement { private: diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 246c8ddac..8c2b91066 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -86,10 +86,10 @@ class ParsingDriver; %token AIM_SOLVER ANALYTIC_DERIVATION ANALYTIC_DERIVATION_MODE AR AUTOCORR POSTERIOR_SAMPLING_METHOD %token BAYESIAN_IRF BETA_PDF BLOCK USE_CALIBRATION SILENT_OPTIMIZER -%token BVAR_DENSITY BVAR_FORECAST NODECOMPOSITION DR_DISPLAY_TOL HUGE_NUMBER -%token BVAR_PRIOR_DECAY BVAR_PRIOR_FLAT BVAR_PRIOR_LAMBDA -%token BVAR_PRIOR_MU BVAR_PRIOR_OMEGA BVAR_PRIOR_TAU BVAR_PRIOR_TRAIN -%token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED PROPOSAL_DISTRIBUTION +%token BVAR_DENSITY BVAR_FORECAST NODECOMPOSITION DR_DISPLAY_TOL HUGE_NUMBER FIG_NAME WRITE_XLS +%token BVAR_PRIOR_DECAY BVAR_PRIOR_FLAT BVAR_PRIOR_LAMBDA INTERACTIVE SCREEN_SHOCKS STEADYSTATE +%token BVAR_PRIOR_MU BVAR_PRIOR_OMEGA BVAR_PRIOR_TAU BVAR_PRIOR_TRAIN DETAIL_PLOT TYPE +%token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED PROPOSAL_DISTRIBUTION REALTIME VINTAGE %token CALIB_SMOOTHER CHANGE_TYPE CHECK CONDITIONAL_FORECAST CONDITIONAL_FORECAST_PATHS CONF_SIG CONSTANT CONTROLLED_VAREXO CORR COVAR CUTOFF CYCLE_REDUCTION LOGARITHMIC_REDUCTION %token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED %token DATAFILE FILE SERIES DOUBLING DR_CYCLE_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_MAXITER DR_ALGO DROP DSAMPLE DYNASAVE DYNATYPE CALIBRATION DIFFERENTIATE_FORWARD_VARS @@ -129,9 +129,9 @@ class ParsingDriver; %token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL %token TEX_NAME %token UNIFORM_PDF UNIT_ROOT_VARS USE_DLL USEAUTOCORR GSA_SAMPLE_FILE USE_UNIVARIATE_FILTERS_IF_SINGULARITY_IS_DETECTED -%token VALUES VAR VAREXO VAREXO_DET VAROBS PREDETERMINED_VARIABLES +%token VALUES VAR VAREXO VAREXO_DET VAROBS PREDETERMINED_VARIABLES PLOT_SHOCK_DECOMPOSITION %token WRITE_LATEX_DYNAMIC_MODEL WRITE_LATEX_STATIC_MODEL WRITE_LATEX_ORIGINAL_MODEL -%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP +%token XLS_SHEET XLS_RANGE LMMCP OCCBIN BANDPASS_FILTER COLORMAP QOQ YOY AOA %left COMMA %left EQUAL_EQUAL EXCLAMATION_EQUAL %left LESS GREATER LESS_EQUAL GREATER_EQUAL @@ -262,6 +262,7 @@ statement : parameters | write_latex_original_model | shock_decomposition | realtime_shock_decomposition + | plot_shock_decomposition | conditional_forecast | conditional_forecast_paths | plot_conditional_forecast @@ -2139,6 +2140,16 @@ realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';' { driver.realtime_shock_decomposition(); } ; +plot_shock_decomposition : PLOT_SHOCK_DECOMPOSITION ';' + {driver.plot_shock_decomposition(); } + | PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' ';' + { driver.plot_shock_decomposition(); } + | PLOT_SHOCK_DECOMPOSITION symbol_list ';' + { driver.plot_shock_decomposition(); } + | PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' symbol_list ';' + { driver.plot_shock_decomposition(); } + ; + bvar_prior_option : o_bvar_prior_tau | o_bvar_prior_decay | o_bvar_prior_lambda @@ -2524,6 +2535,25 @@ realtime_shock_decomposition_option : o_parameter_set | o_save_realtime ; +plot_shock_decomposition_options_list : plot_shock_decomposition_option COMMA plot_shock_decomposition_options_list + | plot_shock_decomposition_option + ; + +plot_shock_decomposition_option : o_psd_use_shock_groups + | o_psd_colormap + | o_psd_nodisplay + | o_psd_graph_format + | o_psd_detail_plot + | o_psd_interactive + | o_psd_screen_shocks + | o_psd_steadystate + | o_psd_type + | o_psd_fig_name + | o_psd_write_xls + | o_psd_realtime + | o_psd_vintage + ; + homotopy_setup: HOMOTOPY_SETUP ';' homotopy_list END ';' { driver.end_homotopy();}; @@ -2865,11 +2895,17 @@ o_shock_decomposition_presample : PRESAMPLE EQUAL INT_NUMBER { driver.option_num o_shock_decomposition_forecast : FORECAST EQUAL INT_NUMBER { driver.option_num("shock_decomp.forecast", $3); }; o_save_realtime : SAVE_REALTIME EQUAL vec_int { driver.option_vec_int("shock_decomp.save_realtime", $3); }; o_nodisplay : NODISPLAY { driver.option_num("nodisplay","1"); }; +o_psd_nodisplay : NODISPLAY { driver.option_num("plot_shock_decomp.nodisplay","1"); }; o_graph_format : GRAPH_FORMAT EQUAL allowed_graph_formats { driver.process_graph_format_option(); } | GRAPH_FORMAT EQUAL '(' list_allowed_graph_formats ')' { driver.process_graph_format_option(); } ; +o_psd_graph_format : GRAPH_FORMAT EQUAL allowed_graph_formats + { driver.plot_shock_decomp_process_graph_format_option(); } + | GRAPH_FORMAT EQUAL '(' list_allowed_graph_formats ')' + { driver.plot_shock_decomp_process_graph_format_option(); } + ; allowed_graph_formats : EPS { driver.add_graph_format("eps"); } | FIG @@ -2975,7 +3011,21 @@ o_dr : DR EQUAL CYCLE_REDUCTION {driver.option_num("dr_cycle_reduction", "1"); } o_dr_cycle_reduction_tol : DR_CYCLE_REDUCTION_TOL EQUAL non_negative_number {driver.option_num("dr_cycle_reduction_tol",$3);}; o_dr_logarithmic_reduction_tol : DR_LOGARITHMIC_REDUCTION_TOL EQUAL non_negative_number {driver.option_num("dr_logarithmic_reduction_tol",$3);}; o_dr_logarithmic_reduction_maxiter : DR_LOGARITHMIC_REDUCTION_MAXITER EQUAL INT_NUMBER {driver.option_num("dr_logarithmic_reduction_maxiter",$3);}; - +o_psd_detail_plot : DETAIL_PLOT { driver.option_num("plot_shock_decomp.detail_plot", "1"); }; +o_psd_interactive : INTERACTIVE { driver.option_num("plot_shock_decomp.interactive", "1"); }; +o_psd_screen_shocks : SCREEN_SHOCKS { driver.option_num("plot_shock_decomp.screen_shocks", "1"); }; +o_psd_steadystate : STEADYSTATE EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.steadystate", $3); }; +o_psd_fig_name : FIG_NAME EQUAL filename { driver.option_str("plot_shock_decomp.fig_name", $3); }; +o_psd_type : TYPE EQUAL QOQ + { driver.option_str("plot_shock_decomp.type", "qoq"); } + | TYPE EQUAL YOY + { driver.option_str("plot_shock_decomp.type", "qoq"); } + | TYPE EQUAL AOA + { driver.option_str("plot_shock_decomp.type", "qoq"); } + ; +o_psd_write_xls : WRITE_XLS { driver.option_num("plot_shock_decomp.write_xls", "1"); }; +o_psd_realtime : REALTIME EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.realtime", $3); }; +o_psd_vintage : VINTAGE EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.vintage", $3); }; o_bvar_prior_tau : BVAR_PRIOR_TAU EQUAL signed_number { driver.option_num("bvar_prior_tau", $3); }; o_bvar_prior_decay : BVAR_PRIOR_DECAY EQUAL non_negative_number { driver.option_num("bvar_prior_decay", $3); }; o_bvar_prior_lambda : BVAR_PRIOR_LAMBDA EQUAL signed_number { driver.option_num("bvar_prior_lambda", $3); }; @@ -3285,7 +3335,11 @@ o_sampling_draws : SAMPLING_DRAWS EQUAL INT_NUMBER { driver.option_num("sampling o_use_shock_groups : USE_SHOCK_GROUPS { driver.option_str("use_shock_groups","default"); } | USE_SHOCK_GROUPS EQUAL symbol { driver.option_str("use_shock_groups", $3); } ; +o_psd_use_shock_groups : USE_SHOCK_GROUPS { driver.option_str("plot_shock_decomp.use_shock_groups","default"); } + | USE_SHOCK_GROUPS EQUAL symbol { driver.option_str("plot_shock_decomp.use_shock_groups", $3); } + ; o_colormap : COLORMAP EQUAL symbol { driver.option_num("colormap",$3); }; +o_psd_colormap : COLORMAP EQUAL symbol { driver.option_num("plot_shock_decomp.colormap",$3); }; range : symbol ':' symbol { diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index c8d1accdd..59eac989a 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -151,6 +151,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;} shock_decomposition {BEGIN DYNARE_STATEMENT; return token::SHOCK_DECOMPOSITION;} realtime_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::REALTIME_SHOCK_DECOMPOSITION;} +plot_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::PLOT_SHOCK_DECOMPOSITION;} sbvar {BEGIN DYNARE_STATEMENT; return token::SBVAR;} ms_estimation {BEGIN DYNARE_STATEMENT; return token::MS_ESTIMATION;} ms_simulation {BEGIN DYNARE_STATEMENT; return token::MS_SIMULATION;} @@ -573,6 +574,18 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 parameter_set {return token::PARAMETER_SET; } init_state {return token::INIT_STATE; } save_realtime {return token::SAVE_REALTIME;} +detail_plot {return token::DETAIL_PLOT;} +interactive {return token::INTERACTIVE;} +screen_shocks {return token::SCREEN_SHOCKS;} +steadystate {return token::STEADYSTATE;} +type {return token::TYPE;} +qoq {return token::QOQ; } +yoy {return token::YOY; } +aoa {return token::AOA; } +fig_name {return token::FIG_NAME;} +write_xls {return token::WRITE_XLS;} +realtime {return token::REALTIME;} +vintage {return token::VINTAGE;} prior_mode {return token::PRIOR_MODE; } prior_mean {return token::PRIOR_MEAN; } posterior_mode {return token::POSTERIOR_MODE; } diff --git a/preprocessor/ParsingDriver.cc b/preprocessor/ParsingDriver.cc index dc7953ce9..e0df61286 100644 --- a/preprocessor/ParsingDriver.cc +++ b/preprocessor/ParsingDriver.cc @@ -2133,6 +2133,14 @@ ParsingDriver::realtime_shock_decomposition() options_list.clear(); } +void +ParsingDriver::plot_shock_decomposition() +{ + mod_file->addStatement(new PlotShockDecompositionStatement(symbol_list, options_list)); + symbol_list.clear(); + options_list.clear(); +} + void ParsingDriver::conditional_forecast() { @@ -2815,6 +2823,13 @@ ParsingDriver::process_graph_format_option() graph_formats.clear(); } +void +ParsingDriver::plot_shock_decomp_process_graph_format_option() +{ + options_list.symbol_list_options["plot_shock_decomp.graph_format"] = graph_formats; + graph_formats.clear(); +} + void ParsingDriver::model_diagnostics() { diff --git a/preprocessor/ParsingDriver.hh b/preprocessor/ParsingDriver.hh index 28385563c..29b9c3210 100644 --- a/preprocessor/ParsingDriver.hh +++ b/preprocessor/ParsingDriver.hh @@ -592,6 +592,8 @@ public: void shock_decomposition(); //! Realtime Shock decomposition void realtime_shock_decomposition(); + //! Plot Shock decomposition + void plot_shock_decomposition(); //! Conditional forecast statement void conditional_forecast(); //! Conditional forecast paths block @@ -722,6 +724,8 @@ public: void add_graph_format(const string &name); //! Add the graph_format option to the OptionsList structure void process_graph_format_option(); + //! Add the graph_format option to the plot_shock_decomp substructure of the OptionsList structure + void plot_shock_decomp_process_graph_format_option(); //! Model diagnostics void model_diagnostics(); //! Processing the parallel_local_files option diff --git a/tests/shock_decomposition/ls2003_plot.mod b/tests/shock_decomposition/ls2003_plot.mod index d3c4c3c85..7faa00d0c 100644 --- a/tests/shock_decomposition/ls2003_plot.mod +++ b/tests/shock_decomposition/ls2003_plot.mod @@ -81,13 +81,11 @@ shock_decomposition(use_shock_groups=trade) y_obs R_obs pie_obs dq de; // various tests for plot_shock_decompositions // standard plot [using trade group defined before] -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition; // test datailed, custom name and yoy plots -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.fig_names = 'MR'; -options_.shock_decomp.type='yoy'; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(detail_plot, fig_name = MR, type = yoy); + close all, @@ -96,80 +94,42 @@ close all, // first compute realtime decompositions [pre-processor not yet available] realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]); -options_.shock_decomp.detail_plot = 0; -options_.shock_decomp.type=''; -options_.use_shock_groups=''; -options_.shock_decomp.fig_names = ''; - - //realtime pooled -options_.shock_decomp.realtime=1; -options_.shock_decomp.vintage=0; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(realtime = 1); //conditional pooled -options_.shock_decomp.realtime=2; -plot_shock_decomposition(M_,oo_,options_,var_list_); -options_.shock_decomp.realtime=2; +plot_shock_decomposition(realtime = 2); + // conditional 8-step ahead decomposition, given 1989q4 -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.vintage=29; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(detail_plot, realtime = 2, vintage = 29); close all, //forecast pooled -options_.shock_decomp.detail_plot = 0; -options_.shock_decomp.realtime=3; -options_.shock_decomp.vintage=0; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(realtime = 3); // forecast 8-step ahead decomposition, given 1989q4 -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.realtime=3; -options_.shock_decomp.vintage=29; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(detail_plot, realtime = 3, vintage = 29); close all, // now I test annualized variables -options_.shock_decomp.realtime=0; -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.interactive=0; -options_.use_shock_groups=''; -options_.shock_decomp.type='aoa'; -options_.shock_decomp.q2a=1; -options_.shock_decomp.islog=1; -plot_shock_decomposition(M_,oo_,options_,'y'); +options_.plot_shock_decomp.q2a=1; +options_.plot_shock_decomp.islog=1; +plot_shock_decomposition(detail_plot, type = aoa) y; -options_.shock_decomp.realtime=1; -options_.shock_decomp.vintage=0; -plot_shock_decomposition(M_,oo_,options_,'y'); - -options_.shock_decomp.vintage=29; -options_.shock_decomp.realtime=1; -plot_shock_decomposition(M_,oo_,options_,'y'); -options_.shock_decomp.realtime=2; -plot_shock_decomposition(M_,oo_,options_,'y'); -options_.shock_decomp.realtime=3; -plot_shock_decomposition(M_,oo_,options_,'y'); +plot_shock_decomposition(realtime = 1) y; +plot_shock_decomposition(realtime = 1, vintage = 29) y; +plot_shock_decomposition(realtime = 2, vintage = 29) y; +plot_shock_decomposition(realtime = 3, vintage = 29) y; close all //test uimenu for groups -options_.shock_decomp.realtime=0; -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.interactive=1; -options_.use_shock_groups='row'; -options_.shock_decomp.type='qoq'; -plot_shock_decomposition(M_,oo_,options_,var_list_); - -options_.shock_decomp.detail_plot = 1; -options_.shock_decomp.realtime=3; -options_.shock_decomp.vintage=29; -plot_shock_decomposition(M_,oo_,options_,var_list_); +plot_shock_decomposition(detail_plot, interactive, use_shock_groups = row, type = qoq); +plot_shock_decomposition(detail_plot, interactive, realtime = 3, vintage = 29); collect_latex_files; if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex']) error('TeX-File did not compile.') -end +end From 598422931bd5b0757af46e121d6e3228d86ce033 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 24 Mar 2017 16:16:48 +0100 Subject: [PATCH 20/59] reporting: submodule update --- matlab/modules/reporting | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/modules/reporting b/matlab/modules/reporting index ac6a420a2..af39a2c97 160000 --- a/matlab/modules/reporting +++ b/matlab/modules/reporting @@ -1 +1 @@ -Subproject commit ac6a420a28feeb68b43a8fdb7a6ea9e0bec0b7ae +Subproject commit af39a2c97ea01de6a1451071e58d4fce8f4b9d03 From b3fa6697177ad23ef12fa34f6b07f313b6b2b212 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 24 Mar 2017 17:13:03 +0100 Subject: [PATCH 21/59] bug fix introduced in 234aaacf92d204ed0cb26e482d875eca93c700a9 --- matlab/perfect-foresight-models/sim1.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matlab/perfect-foresight-models/sim1.m b/matlab/perfect-foresight-models/sim1.m index 3d86e4923..1a173b211 100644 --- a/matlab/perfect-foresight-models/sim1.m +++ b/matlab/perfect-foresight-models/sim1.m @@ -17,7 +17,7 @@ function [endogenousvariables, info] = sim1(endogenousvariables, exogenousvariab % SPECIAL REQUIREMENTS % None. -% Copyright (C) 1996-2016 Dynare Team +% Copyright (C) 1996-2017 Dynare Team % % This file is part of Dynare. % @@ -165,7 +165,7 @@ for iter = 1:options.simul.maxit dy = -lin_solve( A, res, verbose ); end end - if (any(~isreal(dy)) || any(isnan(dy)) || any(isinf(dy)) , + if any(~isreal(dy)) || any(isnan(dy)) || any(isinf(dy)) if verbose display_critical_variables(reshape(dy,[ny periods])', M); end From 7315b5ae7378d7229409692fbf13f197be6ecd24 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 24 Mar 2017 18:07:41 +0100 Subject: [PATCH 22/59] fix bug in merge commit e1034620500ac5baae0e926f7b797d66d3c43009 --- matlab/gsa/scatter_plots.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/gsa/scatter_plots.m b/matlab/gsa/scatter_plots.m index 0dcc14648..e64195464 100644 --- a/matlab/gsa/scatter_plots.m +++ b/matlab/gsa/scatter_plots.m @@ -72,7 +72,7 @@ end figtitle_tex=strrep(figtitle,'_','\_'); fig_nam_=[fnam]; -if ~nograph, + hh=dyn_figure(DynareOptions.nodisplay,'name',figtitle); set(hh,'userdata',{X,xp}) From bab401ebbc0560b865b33a00735515af8a601197 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Sat, 25 Mar 2017 08:16:33 +0100 Subject: [PATCH 23/59] utility to decompose initial condition effect --- matlab/initial_condition_decomposition.m | 124 +++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 matlab/initial_condition_decomposition.m diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m new file mode 100644 index 000000000..ab91af8ea --- /dev/null +++ b/matlab/initial_condition_decomposition.m @@ -0,0 +1,124 @@ +function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) +% function z = initial_condition_decomposition(M_,oo_,options_,varlist) +% Computes shocks contribution to a simulated trajectory. The field set is +% oo_.shock_decomposition. It is a n_var by nshock+2 by nperiods array. The +% first nshock columns store the respective shock contributions, column n+1 +% stores the role of the initial conditions, while column n+2 stores the +% value of the smoothed variables. Both the variables and shocks are stored +% in the order of declaration, i.e. M_.endo_names and M_.exo_names, respectively. +% +% INPUTS +% M_: [structure] Definition of the model +% oo_: [structure] Storage of results +% options_: [structure] Options +% varlist: [char] List of variables +% bayestopt_: [structure] describing the priors +% estim_params_: [structure] characterizing parameters to be estimated +% +% OUTPUTS +% oo_: [structure] Storage of results +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2009-2016 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +% indices of endogenous variables +if size(varlist,1) == 0 + varlist = M_.endo_names(1:M_.orig_endo_nbr,:); +end + +[i_var,nvar] = varlist_indices(varlist,M_.endo_names); + +% number of variables +endo_nbr = M_.endo_nbr; + +% parameter set +parameter_set = options_.parameter_set; +if isempty(parameter_set) + if isfield(oo_,'posterior_mean') + parameter_set = 'posterior_mean'; + elseif isfield(oo_,'mle_mode') + parameter_set = 'mle_mode'; + elseif isfield(oo_,'posterior') + parameter_set = 'posterior_mode'; + else + error(['shock_decomposition: option parameter_set is not specified ' ... + 'and posterior mode is not available']) + end +end + +if ~isfield(oo_,'initval_decomposition') +options_.selected_variables_only = 0; %make sure all variables are stored +options_.plot_priors=0; +[oo,junk1,junk2,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); + +% reduced form +dr = oo.dr; + +% data reordering +order_var = dr.order_var; +inv_order_var = dr.inv_order_var; + + +% coefficients +A = dr.ghx; +B = dr.ghu; + +% initialization +gend = size(oo.SmoothedShocks.(deblank(M_.exo_names(1,:))),1); %+options_.forecast; +z = zeros(endo_nbr,endo_nbr+2,gend); +z(:,end,:) = Smoothed_Variables_deviation_from_mean; + +for i=1:endo_nbr, + z(i,i,1) = Smoothed_Variables_deviation_from_mean(i,1); +end + +maximum_lag = M_.maximum_lag; + +k2 = dr.kstate(find(dr.kstate(:,2) <= maximum_lag+1),[1 2]); +i_state = order_var(k2(:,1))+(min(i,maximum_lag)+1-k2(:,2))*M_.endo_nbr; +for i=1:gend + if i > 1 && i <= maximum_lag+1 + lags = min(i-1,maximum_lag):-1:1; + end + + if i > 1 + tempx = permute(z(:,1:endo_nbr,lags),[1 3 2]); + m = min(i-1,maximum_lag); + tempx = [reshape(tempx,endo_nbr*m,endo_nbr); zeros(endo_nbr*(maximum_lag-i+1),endo_nbr)]; + z(:,1:endo_nbr,i) = A(inv_order_var,:)*tempx(i_state,:); + lags = lags+1; + end + z(:,endo_nbr+1,i) = z(:,endo_nbr+2,i) - sum(z(:,1:endo_nbr,i),2); + +end + + +oo_.initval_decomposition = z; +end +% if ~options_.no_graph.shock_decomposition + oo=oo_; + oo.shock_decomposition = oo_.initval_decomposition; + M_.exo_names = M_.endo_names; + M_.exo_nbr = M_.endo_nbr; + options_.shock_decomp.screen_shocks=1; + options_.use_shock_groups = ''; + options_.shock_decomp.fig_names='initval'; + plot_shock_decomposition(M_,oo,options_,varlist); +% end \ No newline at end of file From 4380b4a9730f0f9498d2084b5d36806c6cd6c99f Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Sat, 25 Mar 2017 12:21:47 +0100 Subject: [PATCH 24/59] realtime_shock_decomposition.m: Delete variable that produced unwanted output --- matlab/realtime_shock_decomposition.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/realtime_shock_decomposition.m b/matlab/realtime_shock_decomposition.m index ac6273268..4e6941d09 100644 --- a/matlab/realtime_shock_decomposition.m +++ b/matlab/realtime_shock_decomposition.m @@ -139,7 +139,7 @@ for j=presample+1:nobs, epsilon=[epsilon zeros(nshocks,forecast_)]; z = zeros(endo_nbr,nshocks+2,gend+forecast_); - Smoothed_Variables_deviation_from_mean + z(:,end,1:gend) = Smoothed_Variables_deviation_from_mean; maximum_lag = M_.maximum_lag; From e24b1ea76e8fed7211d9003eea32b144de20c501 Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Mon, 27 Mar 2017 08:29:52 +0200 Subject: [PATCH 25/59] fixes in preamble and plot_shock_decomp structure of options. --- matlab/initial_condition_decomposition.m | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index ab91af8ea..e24eb92f7 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -1,11 +1,11 @@ function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) -% function z = initial_condition_decomposition(M_,oo_,options_,varlist) -% Computes shocks contribution to a simulated trajectory. The field set is -% oo_.shock_decomposition. It is a n_var by nshock+2 by nperiods array. The -% first nshock columns store the respective shock contributions, column n+1 -% stores the role of the initial conditions, while column n+2 stores the -% value of the smoothed variables. Both the variables and shocks are stored -% in the order of declaration, i.e. M_.endo_names and M_.exo_names, respectively. +% function z = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) +% Computes initial condition contribution to a simulated trajectory. The field set is +% oo_.initval_decomposition. It is a n_var by n_var+2 by nperiods array. The +% first n_var columns store the respective endogenous initval contribution, column n+1 +% stores the role of the shocks, while column n+2 stores the +% value of the smoothed variables. Variables are stored +% in the order of declaration, i.e. M_.endo_names. % % INPUTS % M_: [structure] Definition of the model @@ -21,7 +21,7 @@ function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt % SPECIAL REQUIREMENTS % none -% Copyright (C) 2009-2016 Dynare Team +% Copyright (C) 2017 Dynare Team % % This file is part of Dynare. % @@ -117,8 +117,8 @@ end oo.shock_decomposition = oo_.initval_decomposition; M_.exo_names = M_.endo_names; M_.exo_nbr = M_.endo_nbr; - options_.shock_decomp.screen_shocks=1; + options_.plot_shock_decomp.screen_shocks=1; options_.use_shock_groups = ''; - options_.shock_decomp.fig_names='initval'; + options_.plot_shock_decomp.fig_names='initval'; plot_shock_decomposition(M_,oo,options_,varlist); % end \ No newline at end of file From 2240b064872ca9d0166a8c7de5e3da09abe21b58 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Mon, 27 Mar 2017 11:20:34 +0200 Subject: [PATCH 26/59] fix typo --- matlab/initial_condition_decomposition.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index e24eb92f7..9b26070f4 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -1,5 +1,5 @@ function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) -% function z = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) +% function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt_,estim_params_) % Computes initial condition contribution to a simulated trajectory. The field set is % oo_.initval_decomposition. It is a n_var by n_var+2 by nperiods array. The % first n_var columns store the respective endogenous initval contribution, column n+1 From 94f09402a272d718f1b21c29028d792fe22fee00 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Fri, 24 Mar 2017 16:49:18 +0100 Subject: [PATCH 27/59] Manual: Add new subsections for commands not belonging to estimation --- doc/dynare.texi | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 5fd0cc9cf..78ce7e33e 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -206,6 +206,9 @@ The Model file * Deterministic simulation:: * Stochastic solution and simulation:: * Estimation:: +* Model Comparison:: +* Shock Decomposition:: +* Calibrated Smoother:: * Forecasting:: * Optimal policy:: * Sensitivity and identification analysis:: @@ -1065,6 +1068,9 @@ end of line one and the parser would continue processing. * Deterministic simulation:: * Stochastic solution and simulation:: * Estimation:: +* Model Comparison:: +* Shock Decomposition:: +* Calibrated Smoother:: * Forecasting:: * Optimal policy:: * Sensitivity and identification analysis:: @@ -6970,6 +6976,24 @@ estimates using a higher tapering are usually more reliable. @end table @end defvr +@deffn Command unit_root_vars @var{VARIABLE_NAME}@dots{}; + +This command is deprecated. Use @code{estimation} option @code{diffuse_filter} instead for estimating a model with non-stationary observed variables or @code{steady} option @code{nocheck} to prevent @code{steady} to check the steady state returned by your steady state file. +@end deffn + +Dynare also has the ability to estimate Bayesian VARs: + +@deffn Command bvar_density ; +Computes the marginal density of an estimated BVAR model, using +Minnesota priors. + +See @file{bvar-a-la-sims.pdf}, which comes with Dynare distribution, +for more information on this command. +@end deffn + +@node Model Comparison +@section Model Comparison + @deffn Command model_comparison @var{FILENAME}[(@var{DOUBLE})]@dots{}; @deffnx Command model_comparison (marginal_density = laplace | modifiedharmonicmean) @var{FILENAME}[(@var{DOUBLE})]@dots{}; @anchor{model_comparison} @@ -7045,6 +7069,8 @@ Posterior probability of the respective model @end defvr +@node Shock Decomposition +@section Shock Decomposition @deffn Command shock_decomposition [@var{VARIABLE_NAME}]@dots{}; @deffnx Command shock_decomposition (@var{OPTIONS}@dots{}) [@var{VARIABLE_NAME}]@dots{}; @@ -7395,20 +7421,8 @@ Default: @math{0} @end deffn -@deffn Command unit_root_vars @var{VARIABLE_NAME}@dots{}; - -This command is deprecated. Use @code{estimation} option @code{diffuse_filter} instead for estimating a model with non-stationary observed variables or @code{steady} option @code{nocheck} to prevent @code{steady} to check the steady state returned by your steady state file. -@end deffn - -Dynare also has the ability to estimate Bayesian VARs: - -@deffn Command bvar_density ; -Computes the marginal density of an estimated BVAR model, using -Minnesota priors. - -See @file{bvar-a-la-sims.pdf}, which comes with Dynare distribution, -for more information on this command. -@end deffn +@node Calibrated Smoother +@section Calibrated Smoother Dynare can also run the smoother on a calibrated model: From 14b8604de51256547425f96130a734b695259530 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 27 Mar 2017 12:34:35 +0200 Subject: [PATCH 28/59] Restructure manual on shock_decomposition - Introduces proper definition of output variables - Clarifies various options --- doc/dynare.texi | 150 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 99 insertions(+), 51 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 78ce7e33e..9de4a581e 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2,6 +2,7 @@ @c %**start of header @setfilename dynare.info @documentencoding UTF-8 + @settitle Dynare Reference Manual @afourwide @dircategory Math @@ -7109,8 +7110,8 @@ calibrated model. @xref{nobs}. @item use_shock_groups [= @var{STRING}] -@anchor{use_shock_groups} Uses groups of shocks instead of individual shocks in -the decomposition. Groups of shocks are defined in the @ref{shock_groups} block. +@anchor{use_shock_groups} Uses shock grouping defined by the string instead of individual shocks in +the decomposition. The groups of shocks are defined in the @ref{shock_groups} block. @item colormap = @var{STRING} @anchor{colormap} Controls the colormap used for the shocks decomposition @@ -7118,12 +7119,11 @@ graphs. See @code{colormap} in Matlab/Octave manual for valid arguments. @item nograph @xref{nograph}. Suppresses the display and creation only within the -@code{shock_decomposition}-command but does not affect other commands. +@code{shock_decomposition}-command, but does not affect other commands. @xref{plot_shock_decomposition} for plotting graphs. -@item init_state = @var{INTEGER} -@anchor{init_state} It can take values of @math{0} or @math{1}. If equal to -@math{0}, the shock decomposition is computed conditional on the smoothed state +@item init_state = @var{BOOLEAN} +@anchor{init_state} If equal to @math{0}, the shock decomposition is computed conditional on the smoothed state variables in period @math{0}, @i{i.e.} the smoothed shocks starting in period @math{1} are used. If equal to @math{1}, the shock decomposition is computed conditional on the smoothed state variables in period @math{1}. Default: @@ -7132,10 +7132,12 @@ conditional on the smoothed state variables in period @math{1}. Default: @outputhead +@defvr {MATLAB/Octave variable} oo_.shock_decomposition @vindex oo_.shock_decomposition +@anchor{oo_.shock_decomposition} The results are stored in the field @code{oo_.shock_decomposition}, which is a three dimensional array. The first dimension contains the @code{M_.endo_nbr} endogenous variables. -The second dimension stores +The second dimension stores in the first @code{M_.exo_nbr} columns the contribution of the respective shocks. Column @code{M_.exo_nbr+1} stores the contribution of the initial conditions, while column @code{M_.exo_nbr+2} stores the smoothed value of the respective @@ -7143,6 +7145,7 @@ endogenous variable in deviations from their steady state, @i{i.e.} the mean and subtracted. The third dimension stores the time periods. Both the variables and shocks are stored in the order of declaration, @i{i.e.} @code{M_.endo_names} and @code{M_.exo_names}, respectively. +@end defvr @end deffn @@ -7153,11 +7156,11 @@ and shocks are stored in the order of declaration, @i{i.e.} @code{M_.endo_names} of the shock groups is written in a block delimited by @code{shock_groups} and @code{end}. -Each line defines a group of shock as a list of exogenous variables: +Each line defines a group of shocks as a list of exogenous variables: @example SHOCK_GROUP_NAME = VARIABLE_1 [[,] VARIABLE_2 [,]@dots{}]; -`SHOCK GROUP NAME' = VARIABLE_1 [[,] VARIABLE_2 [,]@dots{}]; +'SHOCK GROUP NAME' = VARIABLE_1 [[,] VARIABLE_2 [,]@dots{}]; @end example @optionshead @@ -7181,12 +7184,13 @@ varexo e_a, e_b, e_c, e_d; shock_groups(name=group1); supply = e_a, e_b; -`aggregate demand' = e_c, e_d; +'aggregate demand' = e_c, e_d; end; shocks_decomposition(use_shock_groups=group1); @end example - +This example defines a shock grouping with the name @code{group1}, containing a set of supply and demand shocks +and conducts the shock decomposition for these two groups. @end deffn @deffn Command realtime_shock_decomposition [@var{VARIABLE_NAME}]@dots{}; @@ -7197,14 +7201,19 @@ shocks_decomposition(use_shock_groups=group1); This command computes the realtime historical shock decomposition for a given sample based on the Kalman smoother. For each period -@math{T=[@code{presample}@dots{}@code{nobs}]}, it computes the: +@math{T=[@code{presample},@dots{},@code{nobs}]}, it recursively computes the: @itemize @bullet @item -realtime historical shock decomposition @math{Y(t|T)} for @math{t=[1@dots{}T]}, +realtime historical shock decomposition @math{Y(t|T)} for @math{t=[1,@dots{},T]}, @i{i.e.} without observing data in @math{[T+1@dots{}@code{nobs}]}; @item conditional shock decomposition @math{Y(T|T)} conditional on @math{Y(T|T-1)}, -@i{i.e.} @math{Y(t|T)} for @math{t=[T-1@dots{}T]}; +@i{i.e.} @math{Y(t|T)} for @math{t=[T-1,@dots{},T]}. The conditional shock +decomposition sets the initial condition in @math{T-1}, so only computes the +effect of shocks in period @math{T}, @i{i.e.} it is just a @math{1}-period +shock decomposition from @math{T-1} to @math{T}. In practice it decomposes the +update step of the Kalman filter. + @item forecast shock decomposition @math{Y(T|T-1)}. @end itemize @@ -7261,33 +7270,70 @@ shock decomposition. Default: @math{0}. @outputhead +@defvr {MATLAB/Octave variable} oo_.realtime_shock_decomposition @vindex oo_.realtime_shock_decomposition -The results of realtime historical decompositions are stored in the field -@code{oo_.realtime_shock_decomposition}, which is a structure. Field -@code{pool} stores the pooled decomposition (@xref{plot_shock_decomposition}). -Fields @code{time_*} store the vintages of realtime historical shock -decompositions. +Structure storing the results of realtime historical decompositions. Fields are three-dimensional arrays with +the first two dimension equal to the ones of @ref{oo_.shock_decomposition}. The third dimension stores the time +periods and is therefore of size @code{T+forecast}. Fields are of the form: +@example +@code{oo_.realtime_shock_decomposition.@var{OBJECT}} +@end example +where @var{OBJECT} is one of the following: +@table @code + +@item pool +Stores the pooled decomposition (see @ref{plot_shock_decomposition}). The third dimension of the array will have size +@code{nobs+forecast}. + +@item time_* +Stores the vintages of realtime historical shock decompositions if @code{save_realtime} is used. For example, if +@code{save_realtime=[5]} and @code{forecast=8}, the third dimension will be of size 13. + +@end table +@end defvr + +@defvr {MATLAB/Octave variable} oo_.conditional_shock_decomposition @vindex oo_.conditional_shock_decomposition -The results of realtime conditional decompositions are stored in the field -@code{oo_.conditional_shock_decomposition}, which is a structure. Field -@code{pool} stores the pooled decomposition @math{Y(t|T)} for -@math{t=T-1@dots{}T} @xref{plot_shock_decomposition}. Conditional shock -decomposition sets the initial condition in @math{T-1}, so only computes the -effect of shocks in period @math{T}, @i{i.e.} it is just a @math{1}-period -shock decomposition from @math{T-1} to @math{T}. In practice it decomposes the -update step of the Kalman filter. Fields @code{time_*} store the vintages of -@math{k}-step conditional forecast shock decompositions @math{Y(t|T+k)}, for -@math{t=[T@dots{}T+k}. @xref{vintage}. +Structure storing the results of realtime conditional decompositions. Fields are of the form: +@example +@code{oo_.conditional_shock_decomposition.@var{OBJECT}} +@end example +where @var{OBJECT} is one of the following: +@table @code + +@item pool +Stores the pooled decomposition @math{Y(t|T)} for +@math{t=T-1@dots{}T} (see @ref{plot_shock_decomposition}). The third dimension is of size @code{nobs}. + +@item time_* +Store the vintages of @math{k}-step conditional forecast shock decompositions @math{Y(t|T+k)}, for +@math{t=[T@dots{}T+k]}. @xref{vintage}. The third dimension is of size @code{1+forecast}. + +@end table +@end defvr + +@defvr {MATLAB/Octave variable} oo_.realtime_forecast_shock_decomposition @vindex oo_.realtime_forecast_shock_decomposition -The results of realtime forecast decompositions are stored in the field -@code{oo_.realtime_forecast_shock_decomposition}, which is a structure. Field -@code{pool} stores the pooled decomposition @xref{plot_shock_decomposition}. +Structure storing the results of realtime forecast decompositions. Fields are of the form: +@example +@code{oo_.realtime_forecast_shock_decomposition.@var{OBJECT}} +@end example +where @var{OBJECT} is one of the following: + +@table @code + +@item pool +Stores the pooled decomposition (see @ref{plot_shock_decomposition}). Forecast shock decomposition computes the @math{1}-step ahead effect of shocks -on the @math{1}-step ahead prediction, @i{i.e.} @math{Y(T|T-1)}. Fields -@code{time_*} store the vintages of @math{k}-step out-of-sample forecast shock +on the @math{1}-step ahead prediction, @i{i.e.} @math{Y(T|T-1)}. + +@item time_* +Stores the vintages of @math{k}-step out-of-sample forecast shock decompositions, @i{i.e.} @math{Y(t|T)}, for @math{t=[T@dots{}T+k]}. @xref{vintage}. +@end table +@end defvr @end deffn @@ -7298,12 +7344,11 @@ decompositions, @i{i.e.} @math{Y(t|T)}, for @math{t=[T@dots{}T+k]}. @xref{vintag @descriptionhead This command plots the historical shock decomposition already computed by -@code{shock_decomposition}. The @code{variable_names} provided govern which +@code{shock_decomposition} or @code{realtime_shock_decomposition}. For that reason, +it must come after one of these commands. The @code{variable_names} provided govern which variables the decomposition is plotted for. -Note that this command must come after @code{shock_decomposition} or @code{realtime_shock_decomposition}. - -Further note that, unlike the majority of dynare commands, the options +Further note that, unlike the majority of Dynare commands, the options specified below are overwritten with their defaults before every call to @code{plot_shock_decomposition}. Hence, if you want to reuse an option in a subsequent call to @code{plot_shock_decomposition}, you must pass it to the @@ -7326,13 +7371,13 @@ command again. @itemx graph_format = ( @var{FORMAT}, @var{FORMAT}@dots{} ) @xref{graph_format}. -@item detail_plot = @var{INT_NUMBER} +@item detail_plot = @var{BOOLEAN} Plots shock contributions using subplots, one per shock (or group of shocks). Pass @math{1} to turn it on and @math{0} to turn it off. Default: @math{0} -@item interactive = @var{INT_NUMBER} -Under MATLAB, add uimenu's for detailed group plots. Pass @math{1} to turn it +@item interactive = @var{BOOLEAN} +Under MATLAB, add uimenus for detailed group plots. Pass @math{1} to turn it on and @math{0} to turn it off. Default: @math{0} @item screen_shocks @@ -7341,7 +7386,7 @@ shocks), plots only the shocks that have the largest historical contribution for chosen selected @code{variable_names}. Historical contribution is ranked by the mean absolute value of all historical contributions. -@item steadystate = @var{INTEGER} +@item steadystate = @var{BOOLEAN} @anchor{steadystate} If equal to @math{1}, the the @math{y}-axis value of the zero line in the shock decomposition plot is translated to the steady state level. Default: @math{0} @@ -7359,18 +7404,21 @@ default figure name set by @code{plot_shock_decomposition}. This can avoid to overwrite plots in case of sequential calls to @code{plot_shock_decomposition}. @item write_xls -@anchor{write_xls} Saves shock decompositions to excel. +@anchor{write_xls} Saves shock decompositions to Excel-file in the main directory, named +@code{FILENAME_shock_decomposition_TYPE_FIG_NAME.xls}. This option requires your system to be +configured to be able to write Excel files.@footnote{In case of Excel not being installed, +@url{https://mathworks.com/matlabcentral/fileexchange/38591-xlwrite--generate-xls-x--files-without-excel-on-mac-linux-win} may be helpful.} @item realtime = @var{INTEGER} @anchor{realtime} Which kind of shock decomposition to plot. @var{INTEGER} can take following values: @itemize @bullet @item @code{0}: historical shock decomposition: @math{Y(t|T)} for -@math{t=[1@dots{}T]}, @math{T=} @code{nobs} full sample +@math{t=[1,@dots{},T]}, where @math{T=} @code{nobs} is the full sample @item @code{1}: realtime historical shock decomposition: for -@math{T=[1@dots{}@code{nobs}]}, realtime shock decomposition @math{Y(t|T)} for -@math{t=[1@dots{}T]} +@math{T=[1,@dots{},@code{nobs}]}, realtime shock decomposition @math{Y(t|T)} for +@math{t=[1,@dots{},T]} @item @code{2}: conditional shock decomposition: for @code{T=1:nobs}, realtime shock decomposition of @math{Y(T|T)} conditional on @math{Y(T|T-1)}, @i{i.e.} @@ -7387,16 +7435,16 @@ Default: @math{0} @item @code{0}: plots @math{1}-step pooled shock decompositions @item -@code{1}: pooled realtime shock decomposition. For @math{T=[1@dots{}@code{nobs}]}, plots last +@code{1}: pooled realtime shock decomposition. For @math{T=[1,@dots{},@code{nobs}]}, plots last time point @math{Y(T|T)} of each vintage shock decomposition @math{Y(1:T|T)} @item @code{2}: pooled conditional shock decomposition. For -@math{T=[1@dots{}@code{nobs}]}, realtime @math{1}-step shock decomposition of +@math{T=[1,@dots{},@code{nobs}]}, realtime @math{1}-step shock decomposition of @math{Y(T|T)} conditional on @math{Y(T|T-1)} (@i{i.e.} decomposition of @math{1}-step filter updates of each vintage @math{T}) @item @code{3}: pooled forecast shock decomposition. For -@math{T=[1@dots{}@code{nobs}]}, realtime @math{1}-step ahead shock +@math{T=[1,@dots{},@code{nobs}]}, realtime @math{1}-step ahead shock decomposition of @math{Y(T|T-1)} (@i{i.e.} decomposition of shock contributions to @math{1}-step ahead forecasts of each vintage @math{T}) @end itemize @@ -7405,7 +7453,7 @@ decompositions for vintage @math{T=@code{vintage}} under the following scenarios @itemize @bullet @item @code{realtime=1}: the full vintage shock decomposition @math{Y(t|T)} for -@math{t=[1@dots{}T]} +@math{t=[1,@dots{},T]} @item @code{realtime=2}: the conditional forecast shock decomposition from @math{T}, @i{i.e.} plots @math{Y(T+j|T+j)} and the shock contributions needed to get to @@ -7414,7 +7462,7 @@ the data @math{Y(T+j)} conditional on @math{T=}@code{vintage}, with @item @code{realtime=3}: plots unconditional forecast shock decomposition from @math{T}, @i{i.e.} @math{Y(T+j|T)}, where @math{T=@code{vintage}} and -@math{j=[0@dots{}@code{forecast}]}. +@math{j=[0,@dots{},@code{forecast}]}. @end itemize Default: @math{0} @end table From b5c353f5a3eebb073f428132f8b71a1ca87d71b1 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 27 Mar 2017 12:36:18 +0200 Subject: [PATCH 29/59] Prevent Texinfo from replacing straight quotation marks in codes by italic ones --- doc/dynare.texi | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/dynare.texi b/doc/dynare.texi index 9de4a581e..affcaa941 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2,6 +2,7 @@ @c %**start of header @setfilename dynare.info @documentencoding UTF-8 +@codequoteundirected on @settitle Dynare Reference Manual @afourwide From 368262d5f1abba2af88790682abb31cff8d0e3ff Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Tue, 28 Mar 2017 11:05:55 +0200 Subject: [PATCH 30/59] Update manual on realtime_shock_decomposition following Marco's description --- doc/dynare.texi | 92 ++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 54 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index affcaa941..fcbae8a3e 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -7202,21 +7202,22 @@ and conducts the shock decomposition for these two groups. This command computes the realtime historical shock decomposition for a given sample based on the Kalman smoother. For each period -@math{T=[@code{presample},@dots{},@code{nobs}]}, it recursively computes the: +@math{T=[@code{presample},@dots{},@code{nobs}]}, it recursively computes three objects: @itemize @bullet @item realtime historical shock decomposition @math{Y(t|T)} for @math{t=[1,@dots{},T]}, -@i{i.e.} without observing data in @math{[T+1@dots{}@code{nobs}]}; +@i{i.e.} without observing data in @math{[T+1,@dots{},@code{nobs}]}. This results in a standard +shock decomposition being computed for each additional datapoint becoming available after @code{presample}. @item -conditional shock decomposition @math{Y(T|T)} conditional on @math{Y(T|T-1)}, -@i{i.e.} @math{Y(t|T)} for @math{t=[T-1,@dots{},T]}. The conditional shock -decomposition sets the initial condition in @math{T-1}, so only computes the -effect of shocks in period @math{T}, @i{i.e.} it is just a @math{1}-period -shock decomposition from @math{T-1} to @math{T}. In practice it decomposes the -update step of the Kalman filter. +forecast shock decomposition @math{Y(T+k|T)} for @math{k=[1,@dots{},forecast]}, @i{i.e.} the @math{k}-step +ahead forecast made for every @math{T} is decomposed in its shock contributions. +@item +realtime conditional shock decomposition of the difference between the realtime historical shock decomposition and the +forecast shock decomposition. If @ref{vintage} is equal to @math{0}, it computes the effect of shocks realizing in period +@math{T}, @i{i.e.} decomposes @math{Y(T|T)-Y(T|T-1)}. Put differently it conducts a @math{1}-period ahead shock decomposition from +@math{T-1} to @math{T}, by decomposing the update step of the Kalman filter. If @code{vintage>0} and smaller than @code{nobs}, +the decomposition is conducted of the forecast revision @math{Y(T+k|T+k)-Y(T+k|T)}. -@item -forecast shock decomposition @math{Y(T|T-1)}. @end itemize Like @ref{shock_decomposition} it decomposes the historical deviations of the endogenous @@ -7284,7 +7285,9 @@ where @var{OBJECT} is one of the following: @table @code @item pool -Stores the pooled decomposition (see @ref{plot_shock_decomposition}). The third dimension of the array will have size +Stores the pooled decomposition, @i{i.e.} for every realtime shock decomposition terminal period +@math{T=[@code{presample},@dots{},@code{nobs}]} it collects the last period's decomposition @math{Y(T|T)} +(see also @ref{plot_shock_decomposition}). The third dimension of the array will have size @code{nobs+forecast}. @item time_* @@ -7294,19 +7297,20 @@ Stores the vintages of realtime historical shock decompositions if @code{save_re @end table @end defvr -@defvr {MATLAB/Octave variable} oo_.conditional_shock_decomposition -@vindex oo_.conditional_shock_decomposition +@defvr {MATLAB/Octave variable} oo_.realtime_conditional_shock_decomposition +@vindex oo_.realtime_conditional_shock_decomposition Structure storing the results of realtime conditional decompositions. Fields are of the form: @example -@code{oo_.conditional_shock_decomposition.@var{OBJECT}} +@code{oo_.realtime_conditional_shock_decomposition.@var{OBJECT}} @end example where @var{OBJECT} is one of the following: @table @code @item pool -Stores the pooled decomposition @math{Y(t|T)} for -@math{t=T-1@dots{}T} (see @ref{plot_shock_decomposition}). The third dimension is of size @code{nobs}. +Stores the pooled realtime conditional shock decomposition, @i{i.e.} collects the decompositions of +@math{Y(T|T)-Y(T|T-1)} for the terminal periods @math{T=[@code{presample},@dots{},@code{nobs}]}. +The third dimension is of size @code{nobs}. @item time_* Store the vintages of @math{k}-step conditional forecast shock decompositions @math{Y(t|T+k)}, for @@ -7326,8 +7330,7 @@ where @var{OBJECT} is one of the following: @table @code @item pool -Stores the pooled decomposition (see @ref{plot_shock_decomposition}). -Forecast shock decomposition computes the @math{1}-step ahead effect of shocks +Stores the pooled realtime forecast decomposition of the @math{1}-step ahead effect of shocks on the @math{1}-step ahead prediction, @i{i.e.} @math{Y(T|T-1)}. @item time_* @@ -7372,14 +7375,14 @@ command again. @itemx graph_format = ( @var{FORMAT}, @var{FORMAT}@dots{} ) @xref{graph_format}. -@item detail_plot = @var{BOOLEAN} +@item detail_plot Plots shock contributions using subplots, one per shock (or group of shocks). Pass @math{1} to turn it on and @math{0} to turn it off. Default: -@math{0} +not activated -@item interactive = @var{BOOLEAN} +@item interactive Under MATLAB, add uimenus for detailed group plots. Pass @math{1} to turn it -on and @math{0} to turn it off. Default: @math{0} +on and @math{0} to turn it off. Default: not activated @item screen_shocks @anchor{screen_shcoks} For large models (@i{i.e.} for models with more than @math{16} @@ -7387,10 +7390,10 @@ shocks), plots only the shocks that have the largest historical contribution for chosen selected @code{variable_names}. Historical contribution is ranked by the mean absolute value of all historical contributions. -@item steadystate = @var{BOOLEAN} +@item steadystate @anchor{steadystate} If equal to @math{1}, the the @math{y}-axis value of the zero line in the shock decomposition plot is translated to the steady state -level. Default: @math{0} +level. Default: not activated @item type = @code{qoq} | @code{yoy} | @code{aoa} @anchor{type} For quarterly data, valid arguments are: @code{qoq} for @@ -7414,42 +7417,23 @@ configured to be able to write Excel files.@footnote{In case of Excel not being @anchor{realtime} Which kind of shock decomposition to plot. @var{INTEGER} can take following values: @itemize @bullet @item -@code{0}: historical shock decomposition: @math{Y(t|T)} for -@math{t=[1,@dots{},T]}, where @math{T=} @code{nobs} is the full sample +@code{0}: standard historical shock decomposition. @xref{shock_decomposition}. @item -@code{1}: realtime historical shock decomposition: for -@math{T=[1,@dots{},@code{nobs}]}, realtime shock decomposition @math{Y(t|T)} for -@math{t=[1,@dots{},T]} +@code{1}: realtime historical shock decomposition. @xref{realtime_shock_decomposition}. @item -@code{2}: conditional shock decomposition: for @code{T=1:nobs}, realtime shock -decomposition of @math{Y(T|T)} conditional on @math{Y(T|T-1)}, @i{i.e.} -@math{Y(t|T)} for @math{t=[T-1@dots{}T]} +@code{2}: conditional realtime shock decomposition. @xref{realtime_shock_decomposition}. @item -@code{3}: forecast shock decomposition: for @math{T=[1@dots{}@code{nobs}]}, -realtime shock decomposition of @math{Y(T|T-1)} +@code{3}: realtime forecast shock decomposition. @xref{realtime_shock_decomposition}. @end itemize +If no @ref{vintage} is requested, @i{i.e.} @code{vintage=0} then the pooled objects from @ref{realtime_shock_decomposition} +will be plotted and the respective vintage otherwise. Default: @math{0} @item vintage = @var{INTEGER} -@anchor{vintage} Applies if @code{realtime}@math{>0}. Can take following values: -@itemize @bullet -@item -@code{0}: plots @math{1}-step pooled shock decompositions -@item -@code{1}: pooled realtime shock decomposition. For @math{T=[1,@dots{},@code{nobs}]}, plots last -time point @math{Y(T|T)} of each vintage shock decomposition @math{Y(1:T|T)} -@item -@code{2}: pooled conditional shock decomposition. For -@math{T=[1,@dots{},@code{nobs}]}, realtime @math{1}-step shock decomposition of -@math{Y(T|T)} conditional on @math{Y(T|T-1)} (@i{i.e.} decomposition of -@math{1}-step filter updates of each vintage @math{T}) -@item -@code{3}: pooled forecast shock decomposition. For -@math{T=[1,@dots{},@code{nobs}]}, realtime @math{1}-step ahead shock -decomposition of @math{Y(T|T-1)} (@i{i.e.} decomposition of shock -contributions to @math{1}-step ahead forecasts of each vintage @math{T}) -@end itemize -When the value passed is greater than @math{0}, it plots the shock +@anchor{vintage} Selects a particular data vintage in @math{[presample,@dots{},nobs]} for which to plot the results from +@ref{realtime_shock_decomposition} selected via the @ref{realtime} option. If the standard +historical shock decomposition is selected (@code{realtime=0}), @code{vintage} will have no effect. If @code{vintage=0} +the pooled objects from @ref{realtime_shock_decomposition} will be plotted. If @code{vintage>0}, it plots the shock decompositions for vintage @math{T=@code{vintage}} under the following scenarios: @itemize @bullet @item @@ -7459,7 +7443,7 @@ decompositions for vintage @math{T=@code{vintage}} under the following scenarios @code{realtime=2}: the conditional forecast shock decomposition from @math{T}, @i{i.e.} plots @math{Y(T+j|T+j)} and the shock contributions needed to get to the data @math{Y(T+j)} conditional on @math{T=}@code{vintage}, with -@math{j=[0@dots{}@code{forecast}]}. +@math{j=[0,@dots{},@code{forecast}]}. @item @code{realtime=3}: plots unconditional forecast shock decomposition from @math{T}, @i{i.e.} @math{Y(T+j|T)}, where @math{T=@code{vintage}} and From b5f989ccb1375206841919fa8b0004f7bdf0eb99 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Tue, 28 Mar 2017 11:39:44 +0200 Subject: [PATCH 31/59] Manual: Define integer_vector --- doc/dynare.texi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index fcbae8a3e..1f4c1a2ba 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -1112,6 +1112,9 @@ mutually exclusive arguments are separated by vertical bars: @samp{|}; @item @var{INTEGER} indicates an integer number; +@item +@var{INTEGER_VECTOR} indicates a vector of integer numbers [@var{INTEGER_1} ... @var{INTEGER_N}] + @item @var{DOUBLE} indicates a double precision number. The following syntaxes are valid: @code{1.1e3}, @code{1.1E3}, @code{1.1d3}, @code{1.1D3}. In @@ -7265,7 +7268,7 @@ realtime shock decompositions are computed, @i{i.e.} for @anchor{forecast_shock_decomposition} Compute shock decompositions up to @math{T+k} periods, @i{i.e.} get shock contributions to k-step ahead forecasts. -@item save_realtime = [@var{integer1} ... @var{integern}] +@item save_realtime = [@var{INTEGER_VECTOR}] @anchor{save_realtime} Choose for which vintages to save the full realtime shock decomposition. Default: @math{0}. @end table From 6571f7ea686221556a36331a1a7da85406b619bc Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 28 Mar 2017 11:56:38 +0200 Subject: [PATCH 32/59] doc: fix changes merged in ad2e1ffc8dd37d5cffe01811112a2da2e4a0e85e --- doc/dynare.texi | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 1f4c1a2ba..fc946890c 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -1113,7 +1113,8 @@ mutually exclusive arguments are separated by vertical bars: @samp{|}; @var{INTEGER} indicates an integer number; @item -@var{INTEGER_VECTOR} indicates a vector of integer numbers [@var{INTEGER_1} ... @var{INTEGER_N}] +@var{INTEGER_VECTOR} indicates a vector of integer numbers separated by spaces, +enclosed by square brackets; @item @var{DOUBLE} indicates a double precision number. The following syntaxes @@ -7268,7 +7269,7 @@ realtime shock decompositions are computed, @i{i.e.} for @anchor{forecast_shock_decomposition} Compute shock decompositions up to @math{T+k} periods, @i{i.e.} get shock contributions to k-step ahead forecasts. -@item save_realtime = [@var{INTEGER_VECTOR}] +@item save_realtime = @var{INTEGER_VECTOR} @anchor{save_realtime} Choose for which vintages to save the full realtime shock decomposition. Default: @math{0}. @end table @@ -7380,12 +7381,10 @@ command again. @item detail_plot Plots shock contributions using subplots, one per shock (or group of -shocks). Pass @math{1} to turn it on and @math{0} to turn it off. Default: -not activated +shocks). Default: not activated @item interactive -Under MATLAB, add uimenus for detailed group plots. Pass @math{1} to turn it -on and @math{0} to turn it off. Default: not activated +Under MATLAB, add uimenus for detailed group plots. Default: not activated @item screen_shocks @anchor{screen_shcoks} For large models (@i{i.e.} for models with more than @math{16} @@ -7394,9 +7393,9 @@ for chosen selected @code{variable_names}. Historical contribution is ranked by the mean absolute value of all historical contributions. @item steadystate -@anchor{steadystate} If equal to @math{1}, the the @math{y}-axis value of the -zero line in the shock decomposition plot is translated to the steady state -level. Default: not activated +@anchor{steadystate} If passed, the the @math{y}-axis value of the zero line in +the shock decomposition plot is translated to the steady state level. Default: +not activated @item type = @code{qoq} | @code{yoy} | @code{aoa} @anchor{type} For quarterly data, valid arguments are: @code{qoq} for From 12f8e5f512553d3c326a6ec8dbad42848032284d Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 28 Mar 2017 12:15:00 +0200 Subject: [PATCH 33/59] plot_shock_decomposition: remove argument to steadystate option --- preprocessor/DynareBison.yy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 8c2b91066..10361cdb9 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -3014,7 +3014,7 @@ o_dr_logarithmic_reduction_maxiter : DR_LOGARITHMIC_REDUCTION_MAXITER EQUAL INT_ o_psd_detail_plot : DETAIL_PLOT { driver.option_num("plot_shock_decomp.detail_plot", "1"); }; o_psd_interactive : INTERACTIVE { driver.option_num("plot_shock_decomp.interactive", "1"); }; o_psd_screen_shocks : SCREEN_SHOCKS { driver.option_num("plot_shock_decomp.screen_shocks", "1"); }; -o_psd_steadystate : STEADYSTATE EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.steadystate", $3); }; +o_psd_steadystate : STEADYSTATE { driver.option_num("plot_shock_decomp.steadystate", "1"); }; o_psd_fig_name : FIG_NAME EQUAL filename { driver.option_str("plot_shock_decomp.fig_name", $3); }; o_psd_type : TYPE EQUAL QOQ { driver.option_str("plot_shock_decomp.type", "qoq"); } From 8d2dcc422f78303e251b9f6dca2984535009ad38 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Tue, 28 Mar 2017 23:06:03 +0200 Subject: [PATCH 34/59] Clarify error message if model-local variable was already used on RHS --- preprocessor/ParsingDriver.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/preprocessor/ParsingDriver.cc b/preprocessor/ParsingDriver.cc index e0df61286..d370979e9 100644 --- a/preprocessor/ParsingDriver.cc +++ b/preprocessor/ParsingDriver.cc @@ -2233,7 +2233,7 @@ ParsingDriver::declare_and_init_model_local_variable(string *name, expr_t rhs) // It can have already been declared in a steady_state_model block, check that it is indeed a ModelLocalVariable symb_id = mod_file->symbol_table.getID(*name); if (mod_file->symbol_table.getType(symb_id) != eModelLocalVariable) - error(*name + " has wrong type, you cannot use it within as left-hand side of a pound ('#') expression"); + error(*name + " has wrong type or was already used on the right-hand side. You cannot use it on the left-hand side of a pound ('#') expression"); } try From 839e7075f6971fd6015d929ee4b5fd1344a62e23 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Sat, 25 Mar 2017 17:44:12 +0100 Subject: [PATCH 35/59] dsge_simulated_theoretical_covariance.m: fix bug that led to last _2ndOrderMoments*.mat file not being saved, instead overwriting the prior one Produced wrong posterior covariance estimates in large models, because the moments matrix contained zeros that were not overwritten by loaded draws due to missing file --- matlab/dsge_simulated_theoretical_covariance.m | 1 - 1 file changed, 1 deletion(-) diff --git a/matlab/dsge_simulated_theoretical_covariance.m b/matlab/dsge_simulated_theoretical_covariance.m index 38ef7c3b6..8296b90da 100644 --- a/matlab/dsge_simulated_theoretical_covariance.m +++ b/matlab/dsge_simulated_theoretical_covariance.m @@ -126,7 +126,6 @@ for file = 1:NumberOfDrawsFiles if ~test% Prepare the last round... Covariance_matrix = zeros(NumberOfLinesInTheLastCovarFile,nvar*(nvar+1)/2); NumberOfCovarLines = NumberOfLinesInTheLastCovarFile; - CovarFileNumber = CovarFileNumber - 1; elseif test<0 Covariance_matrix = zeros(MaXNumberOfCovarLines,nvar*(nvar+1)/2); else From bf607ce6303b0a5dcdf24caba8b1a401a6c5ed9b Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Sat, 25 Mar 2017 17:47:01 +0100 Subject: [PATCH 36/59] Make sure no stale _posterior_draws.mat files are present May crash compute_moments_varendo.m due to more files being present than generated in the current run --- matlab/selec_posterior_draws.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/matlab/selec_posterior_draws.m b/matlab/selec_posterior_draws.m index d89baf6cf..b0a7cac4c 100644 --- a/matlab/selec_posterior_draws.m +++ b/matlab/selec_posterior_draws.m @@ -100,6 +100,8 @@ SampleAddress = sortrows(SampleAddress,[3 2]); % Selected draws in the posterior distribution, and if drsize>0 % reduced form solutions, are saved on disk. if info + %delete old stale files before creating new ones + delete_stale_file([BaseName '_posterior_draws*.mat']) if SampleSize*drawsize <= MAX_mega_bytes% The posterior draws are saved in one file. pdraws = cell(SampleSize,info); old_mhfile = 0; From 792924a3b75e31e90c03c5d16c32d48b19f2bcbe Mon Sep 17 00:00:00 2001 From: Marco Ratto Date: Thu, 30 Mar 2017 11:21:54 +0200 Subject: [PATCH 37/59] - test the rank of Pinf in univariate smoother for the subset of observables, in order to trap cases where this is not already trapped in compute_Pinf_Pstar.m - issue warning when diffuse steps never end [maybe we should issue an error?] --- matlab/missing_DiffuseKalmanSmootherH3_Z.m | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/matlab/missing_DiffuseKalmanSmootherH3_Z.m b/matlab/missing_DiffuseKalmanSmootherH3_Z.m index c5beeedc7..24e6841cf 100644 --- a/matlab/missing_DiffuseKalmanSmootherH3_Z.m +++ b/matlab/missing_DiffuseKalmanSmootherH3_Z.m @@ -122,7 +122,7 @@ end t = 0; icc=0; -newRank = rank(Pinf(:,:,1),diffuse_kalman_tol); +newRank = rank(Z*Pinf(:,:,1)*Z',diffuse_kalman_tol); while newRank && t < smpl t = t+1; a(:,t) = a1(:,t); @@ -156,7 +156,7 @@ while newRank && t < smpl end end if newRank - oldRank = rank(Pinf(:,:,t),diffuse_kalman_tol); + oldRank = rank(Z*Pinf(:,:,t)*Z',diffuse_kalman_tol); else oldRank = 0; end @@ -168,7 +168,7 @@ while newRank && t < smpl Pstar(:,:,t+1) = T*Pstar(:,:,t)*T'+ QQ; Pinf(:,:,t+1) = T*Pinf(:,:,t)*T'; if newRank - newRank = rank(Pinf(:,:,t+1),diffuse_kalman_tol); + newRank = rank(Z*Pinf(:,:,t+1)*Z',diffuse_kalman_tol); end if oldRank ~= newRank disp('univariate_diffuse_kalman_filter:: T does influence the rank of Pinf!') @@ -367,3 +367,9 @@ if decomp_flag end epsilonhat = Y - Z*alphahat; + + +if (d==smpl) + warning(['missing_DiffuseKalmanSmootherH3_Z:: There isn''t enough information to estimate the initial conditions of the nonstationary variables']); + return +end From 3e779ebfee3cb9675ef13ba6966b2f6dab7936be Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 31 Mar 2017 13:09:08 +0200 Subject: [PATCH 38/59] initial_condition_decomposition: fix options_ substructure --- matlab/initial_condition_decomposition.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index 9b26070f4..df9e4e93a 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -118,7 +118,7 @@ end M_.exo_names = M_.endo_names; M_.exo_nbr = M_.endo_nbr; options_.plot_shock_decomp.screen_shocks=1; - options_.use_shock_groups = ''; + options_.plot_shock_decomp.use_shock_groups = ''; options_.plot_shock_decomp.fig_names='initval'; plot_shock_decomposition(M_,oo,options_,varlist); % end \ No newline at end of file From ac851b0bace5b28493fe9163d1a24bf3080dd06b Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 31 Mar 2017 12:50:17 +0200 Subject: [PATCH 39/59] preprocessor: initial_condition_decomposition front end. closes #1425 --- matlab/initial_condition_decomposition.m | 7 ++++ ..._initial_condition_decomposition_options.m | 37 ++++++++++++++++++ preprocessor/ComputingTasks.cc | 16 ++++++++ preprocessor/ComputingTasks.hh | 11 ++++++ preprocessor/DynareBison.yy | 39 ++++++++++++++++++- preprocessor/DynareFlex.ll | 3 ++ preprocessor/ParsingDriver.cc | 8 ++++ preprocessor/ParsingDriver.hh | 2 + 8 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 matlab/set_default_initial_condition_decomposition_options.m diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m index df9e4e93a..1eb2b7959 100644 --- a/matlab/initial_condition_decomposition.m +++ b/matlab/initial_condition_decomposition.m @@ -38,6 +38,13 @@ function oo_ = initial_condition_decomposition(M_,oo_,options_,varlist,bayestopt % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . +options_.plot_shock_decomp.detail_plot = options_.initial_condition_decomp.detail_plot; +options_.plot_shock_decomp.steadystate = options_.initial_condition_decomp.steadystate; +options_.plot_shock_decomp.write_xls = options_.initial_condition_decomp.write_xls; +options_.plot_shock_decomp.type = options_.initial_condition_decomp.type; +options_.plot_shock_decomp.plot_init_date = options_.initial_condition_decomp.plot_init_date; +options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plot_end_date; + % indices of endogenous variables if size(varlist,1) == 0 varlist = M_.endo_names(1:M_.orig_endo_nbr,:); diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m new file mode 100644 index 000000000..07c84d3e6 --- /dev/null +++ b/matlab/set_default_initial_condition_decomposition_options.m @@ -0,0 +1,37 @@ +function options = set_default_initial_condition_decomposition_options(options) +%function options = set_default_initial_condition_decomposition_options(options) +% sets the default options for prior_shock_decomposition +% +% INPUTS +% options +% +% OUTPUTS +% options +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2017 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +options.initial_condition_decomp.detail_plot = 0; +options.initial_condition_decomp.steadystate = 0; +options.initial_condition_decomp.write_xls = 0; +options.initial_condition_decomp.type = ''; +options.initial_condition_decomp.plot_init_date = []; +options.initial_condition_decomp.plot_end_date = []; +end diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index d91d04c10..21b2dd755 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -1696,6 +1696,22 @@ PlotShockDecompositionStatement::writeOutput(ostream &output, const string &base output << "plot_shock_decomposition(M_, oo_, options_, var_list_);" << endl; } +InitialConditionDecompositionStatement::InitialConditionDecompositionStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg) : + symbol_list(symbol_list_arg), + options_list(options_list_arg) +{ +} + +void +InitialConditionDecompositionStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +{ + output << "options_ = set_default_initial_condition_decomposition_options(options_);" << endl; + options_list.writeOutput(output); + symbol_list.writeOutput("var_list_", output); + output << "initial_condition_decomposition(M_, oo_, options_, var_list_, bayestopt_, estim_params_);" << endl; +} + ConditionalForecastStatement::ConditionalForecastStatement(const OptionsList &options_list_arg) : options_list(options_list_arg) { diff --git a/preprocessor/ComputingTasks.hh b/preprocessor/ComputingTasks.hh index 41da60982..596738c27 100644 --- a/preprocessor/ComputingTasks.hh +++ b/preprocessor/ComputingTasks.hh @@ -608,6 +608,17 @@ public: virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; }; +class InitialConditionDecompositionStatement : public Statement +{ +private: + const SymbolList symbol_list; + const OptionsList options_list; +public: + InitialConditionDecompositionStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg); + virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; +}; + class ConditionalForecastStatement : public Statement { private: diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 10361cdb9..6eea69bc8 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -91,7 +91,7 @@ class ParsingDriver; %token BVAR_PRIOR_MU BVAR_PRIOR_OMEGA BVAR_PRIOR_TAU BVAR_PRIOR_TRAIN DETAIL_PLOT TYPE %token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED PROPOSAL_DISTRIBUTION REALTIME VINTAGE %token CALIB_SMOOTHER CHANGE_TYPE CHECK CONDITIONAL_FORECAST CONDITIONAL_FORECAST_PATHS CONF_SIG CONSTANT CONTROLLED_VAREXO CORR COVAR CUTOFF CYCLE_REDUCTION LOGARITHMIC_REDUCTION -%token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED +%token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED INITIAL_CONDITION_DECOMPOSITION %token DATAFILE FILE SERIES DOUBLING DR_CYCLE_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_MAXITER DR_ALGO DROP DSAMPLE DYNASAVE DYNATYPE CALIBRATION DIFFERENTIATE_FORWARD_VARS %token END ENDVAL EQUAL ESTIMATION ESTIMATED_PARAMS ESTIMATED_PARAMS_BOUNDS ESTIMATED_PARAMS_INIT EXTENDED_PATH ENDOGENOUS_PRIOR %token FILENAME DIRNAME FILTER_STEP_AHEAD FILTERED_VARS FIRST_OBS LAST_OBS SET_TIME OSR_PARAMS_BOUNDS KEEP_KALMAN_ALGO_IF_SINGULARITY_IS_DETECTED @@ -103,7 +103,7 @@ class ParsingDriver; %token IDENTIFICATION INF_CONSTANT INITVAL INITVAL_FILE BOUNDS JSCALE INIT INFILE INVARS %token INT_NUMBER %token INV_GAMMA_PDF INV_GAMMA1_PDF INV_GAMMA2_PDF IRF IRF_SHOCKS IRF_PLOT_THRESHOLD IRF_CALIBRATION -%token FAST_KALMAN_FILTER KALMAN_ALGO KALMAN_TOL DIFFUSE_KALMAN_TOL SUBSAMPLES OPTIONS TOLF TOLX +%token FAST_KALMAN_FILTER KALMAN_ALGO KALMAN_TOL DIFFUSE_KALMAN_TOL SUBSAMPLES OPTIONS TOLF TOLX PLOT_INIT_DATE PLOT_END_DATE %token LAPLACE LIK_ALGO LIK_INIT LINEAR LOAD_IDENT_FILES LOAD_MH_FILE LOAD_RESULTS_AFTER_LOAD_MH LOAD_PARAMS_AND_STEADY_STATE LOGLINEAR LOGDATA LYAPUNOV LINEAR_APPROXIMATION %token LYAPUNOV_FIXED_POINT_TOL LYAPUNOV_DOUBLING_TOL LYAPUNOV_SQUARE_ROOT_SOLVER_TOL LOG_DEFLATOR LOG_TREND_VAR LOG_GROWTH_FACTOR MARKOWITZ MARGINAL_DENSITY MAX MAXIT %token MFS MH_CONF_SIG MH_DROP MH_INIT_SCALE MH_JSCALE MH_MODE MH_NBLOCKS MH_REPLIC MH_RECOVER POSTERIOR_MAX_SUBSAMPLE_DRAWS MIN MINIMAL_SOLVING_PERIODS @@ -263,6 +263,7 @@ statement : parameters | shock_decomposition | realtime_shock_decomposition | plot_shock_decomposition + | initial_condition_decomposition | conditional_forecast | conditional_forecast_paths | plot_conditional_forecast @@ -2150,6 +2151,16 @@ plot_shock_decomposition : PLOT_SHOCK_DECOMPOSITION ';' { driver.plot_shock_decomposition(); } ; +initial_condition_decomposition : INITIAL_CONDITION_DECOMPOSITION ';' + {driver.initial_condition_decomposition(); } + | INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' ';' + { driver.initial_condition_decomposition(); } + | INITIAL_CONDITION_DECOMPOSITION symbol_list ';' + { driver.initial_condition_decomposition(); } + | INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' symbol_list ';' + { driver.initial_condition_decomposition(); } + ; + bvar_prior_option : o_bvar_prior_tau | o_bvar_prior_decay | o_bvar_prior_lambda @@ -2554,6 +2565,18 @@ plot_shock_decomposition_option : o_psd_use_shock_groups | o_psd_vintage ; +initial_condition_decomposition_options_list : initial_condition_decomposition_option COMMA initial_condition_decomposition_options_list + | initial_condition_decomposition_option + ; + +initial_condition_decomposition_option : o_icd_type + | o_icd_detail_plot + | o_icd_steadystate + | o_icd_write_xls + | o_icd_plot_init_date + | o_icd_plot_end_date + ; + homotopy_setup: HOMOTOPY_SETUP ';' homotopy_list END ';' { driver.end_homotopy();}; @@ -3012,9 +3035,11 @@ o_dr_cycle_reduction_tol : DR_CYCLE_REDUCTION_TOL EQUAL non_negative_number {dri o_dr_logarithmic_reduction_tol : DR_LOGARITHMIC_REDUCTION_TOL EQUAL non_negative_number {driver.option_num("dr_logarithmic_reduction_tol",$3);}; o_dr_logarithmic_reduction_maxiter : DR_LOGARITHMIC_REDUCTION_MAXITER EQUAL INT_NUMBER {driver.option_num("dr_logarithmic_reduction_maxiter",$3);}; o_psd_detail_plot : DETAIL_PLOT { driver.option_num("plot_shock_decomp.detail_plot", "1"); }; +o_icd_detail_plot : DETAIL_PLOT { driver.option_num("initial_condition_decomp.detail_plot", "1"); }; o_psd_interactive : INTERACTIVE { driver.option_num("plot_shock_decomp.interactive", "1"); }; o_psd_screen_shocks : SCREEN_SHOCKS { driver.option_num("plot_shock_decomp.screen_shocks", "1"); }; o_psd_steadystate : STEADYSTATE { driver.option_num("plot_shock_decomp.steadystate", "1"); }; +o_icd_steadystate : STEADYSTATE { driver.option_num("initial_condition_decomp.steadystate", "1"); }; o_psd_fig_name : FIG_NAME EQUAL filename { driver.option_str("plot_shock_decomp.fig_name", $3); }; o_psd_type : TYPE EQUAL QOQ { driver.option_str("plot_shock_decomp.type", "qoq"); } @@ -3023,6 +3048,16 @@ o_psd_type : TYPE EQUAL QOQ | TYPE EQUAL AOA { driver.option_str("plot_shock_decomp.type", "qoq"); } ; +o_icd_type : TYPE EQUAL QOQ + { driver.option_str("initial_condition_decomp.type", "qoq"); } + | TYPE EQUAL YOY + { driver.option_str("initial_condition_decomp.type", "qoq"); } + | TYPE EQUAL AOA + { driver.option_str("initial_condition_decomp.type", "qoq"); } + ; +o_icd_plot_init_date : PLOT_INIT_DATE EQUAL date_expr { driver.option_date("initial_condition_decomp.plot_init_date", $3); } ; +o_icd_plot_end_date : PLOT_END_DATE EQUAL date_expr { driver.option_date("initial_condition_decomp.plot_end_date", $3); } ; +o_icd_write_xls : WRITE_XLS { driver.option_num("initial_condition_decomp.write_xls", "1"); }; o_psd_write_xls : WRITE_XLS { driver.option_num("plot_shock_decomp.write_xls", "1"); }; o_psd_realtime : REALTIME EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.realtime", $3); }; o_psd_vintage : VINTAGE EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.vintage", $3); }; diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index 59eac989a..299d31edd 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -152,6 +152,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 shock_decomposition {BEGIN DYNARE_STATEMENT; return token::SHOCK_DECOMPOSITION;} realtime_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::REALTIME_SHOCK_DECOMPOSITION;} plot_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::PLOT_SHOCK_DECOMPOSITION;} +initial_condition_decomposition {BEGIN DYNARE_STATEMENT; return token::INITIAL_CONDITION_DECOMPOSITION;} sbvar {BEGIN DYNARE_STATEMENT; return token::SBVAR;} ms_estimation {BEGIN DYNARE_STATEMENT; return token::MS_ESTIMATION;} ms_simulation {BEGIN DYNARE_STATEMENT; return token::MS_SIMULATION;} @@ -375,6 +376,8 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 indxscalesstates {return token::INDXSCALESSTATES;} fixed_point {return token::FIXED_POINT;} doubling {return token::DOUBLING;} +plot_init_date {return token::PLOT_INIT_DATE;} +plot_end_date {return token::PLOT_END_DATE;} square_root_solver {return token::SQUARE_ROOT_SOLVER;} cycle_reduction {return token::CYCLE_REDUCTION;} logarithmic_reduction {return token::LOGARITHMIC_REDUCTION;} diff --git a/preprocessor/ParsingDriver.cc b/preprocessor/ParsingDriver.cc index d370979e9..c0f472916 100644 --- a/preprocessor/ParsingDriver.cc +++ b/preprocessor/ParsingDriver.cc @@ -2141,6 +2141,14 @@ ParsingDriver::plot_shock_decomposition() options_list.clear(); } +void +ParsingDriver::initial_condition_decomposition() +{ + mod_file->addStatement(new InitialConditionDecompositionStatement(symbol_list, options_list)); + symbol_list.clear(); + options_list.clear(); +} + void ParsingDriver::conditional_forecast() { diff --git a/preprocessor/ParsingDriver.hh b/preprocessor/ParsingDriver.hh index 29b9c3210..bc9729fff 100644 --- a/preprocessor/ParsingDriver.hh +++ b/preprocessor/ParsingDriver.hh @@ -594,6 +594,8 @@ public: void realtime_shock_decomposition(); //! Plot Shock decomposition void plot_shock_decomposition(); + //! Initial Condition decomposition + void initial_condition_decomposition(); //! Conditional forecast statement void conditional_forecast(); //! Conditional forecast paths block From 1891ab70f87561ce5597c9c5202606324d331685 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 31 Mar 2017 14:38:44 +0200 Subject: [PATCH 40/59] preprocessor: add options plot_init_date and plot_end_date to plot_shock_decomposition --- preprocessor/DynareBison.yy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 6eea69bc8..e5f71d663 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -2563,6 +2563,8 @@ plot_shock_decomposition_option : o_psd_use_shock_groups | o_psd_write_xls | o_psd_realtime | o_psd_vintage + | o_psd_plot_init_date + | o_psd_plot_end_date ; initial_condition_decomposition_options_list : initial_condition_decomposition_option COMMA initial_condition_decomposition_options_list @@ -3057,6 +3059,8 @@ o_icd_type : TYPE EQUAL QOQ ; o_icd_plot_init_date : PLOT_INIT_DATE EQUAL date_expr { driver.option_date("initial_condition_decomp.plot_init_date", $3); } ; o_icd_plot_end_date : PLOT_END_DATE EQUAL date_expr { driver.option_date("initial_condition_decomp.plot_end_date", $3); } ; +o_psd_plot_init_date : PLOT_INIT_DATE EQUAL date_expr { driver.option_date("plot_shock_decomp.plot_init_date", $3); } ; +o_psd_plot_end_date : PLOT_END_DATE EQUAL date_expr { driver.option_date("plot_shock_decomp.plot_end_date", $3); } ; o_icd_write_xls : WRITE_XLS { driver.option_num("initial_condition_decomp.write_xls", "1"); }; o_psd_write_xls : WRITE_XLS { driver.option_num("plot_shock_decomp.write_xls", "1"); }; o_psd_realtime : REALTIME EQUAL INT_NUMBER { driver.option_num("plot_shock_decomp.realtime", $3); }; From 1755192e639cae39ecfa35645dbe5c02024c219c Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Fri, 31 Mar 2017 16:08:16 +0200 Subject: [PATCH 41/59] Make 792924 consistent with cases where Pinf is an empty matrix Fixes the crash in `analytic_derivatives/fs2000_analytic_derivation.mod` --- matlab/DsgeSmoother.m | 4 +++- matlab/missing_DiffuseKalmanSmootherH3_Z.m | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m index f9e459e00..08b7011e9 100644 --- a/matlab/DsgeSmoother.m +++ b/matlab/DsgeSmoother.m @@ -255,7 +255,9 @@ if kalman_algo == 2 || kalman_algo == 4 [Pstar,Pinf] = compute_Pinf_Pstar(mf,ST,R1,Q,options_.qz_criterium); else Pstar = blkdiag(Pstar,H); - Pinf = blkdiag(Pinf,zeros(vobs)); + if ~isempty(Pinf) + Pinf = blkdiag(Pinf,zeros(vobs)); + end end %now reset H to 0 H = zeros(vobs,vobs); diff --git a/matlab/missing_DiffuseKalmanSmootherH3_Z.m b/matlab/missing_DiffuseKalmanSmootherH3_Z.m index 24e6841cf..b03b13ee0 100644 --- a/matlab/missing_DiffuseKalmanSmootherH3_Z.m +++ b/matlab/missing_DiffuseKalmanSmootherH3_Z.m @@ -122,7 +122,11 @@ end t = 0; icc=0; -newRank = rank(Z*Pinf(:,:,1)*Z',diffuse_kalman_tol); +if ~isempty(Pinf(:,:,1)) + newRank = rank(Z*Pinf(:,:,1)*Z',diffuse_kalman_tol); +else + newRank = rank(Pinf(:,:,1),diffuse_kalman_tol); +end while newRank && t < smpl t = t+1; a(:,t) = a1(:,t); @@ -156,7 +160,11 @@ while newRank && t < smpl end end if newRank - oldRank = rank(Z*Pinf(:,:,t)*Z',diffuse_kalman_tol); + if ~isempty(Pinf(:,:,t)) + oldRank = rank(Z*Pinf(:,:,t)*Z',diffuse_kalman_tol); + else + oldRank = rank(Pinf(:,:,t),diffuse_kalman_tol); + end else oldRank = 0; end @@ -168,7 +176,11 @@ while newRank && t < smpl Pstar(:,:,t+1) = T*Pstar(:,:,t)*T'+ QQ; Pinf(:,:,t+1) = T*Pinf(:,:,t)*T'; if newRank - newRank = rank(Z*Pinf(:,:,t+1)*Z',diffuse_kalman_tol); + if ~isempty(Pinf(:,:,t+1)) + newRank = rank(Z*Pinf(:,:,t+1)*Z',diffuse_kalman_tol); + else + newRank = rank(Pinf(:,:,t+1),diffuse_kalman_tol); + end end if oldRank ~= newRank disp('univariate_diffuse_kalman_filter:: T does influence the rank of Pinf!') From b64aa57bc37c37045ae2febe793a89d8fbfb7e14 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Sat, 1 Apr 2017 19:59:29 +0200 Subject: [PATCH 42/59] Update affiliation of Johannes --- doc/bvar-a-la-sims.tex | 2 +- doc/dynare.texi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/bvar-a-la-sims.tex b/doc/bvar-a-la-sims.tex index 07af9fb77..6caf4d8b2 100644 --- a/doc/bvar-a-la-sims.tex +++ b/doc/bvar-a-la-sims.tex @@ -26,7 +26,7 @@ }} \author{S\'ebastien Villemot\thanks{Paris School of Economics and - CEPREMAP.} \and Johannes Pfeifer\thanks{University of Mannheim. E-mail: \href{mailto:pfeifer@uni-mannheim.de}{\texttt{pfeifer@uni-mannheim.de}}.}} + CEPREMAP.} \and Johannes Pfeifer\thanks{University of Cologne. E-mail: \href{mailto:jpfeifer@uni-koeln.de}{\texttt{jpfeifer@uni-koeln.de}}.}} \date{First version: September 2007 \hspace{1cm} This version: October 2016} \maketitle diff --git a/doc/dynare.texi b/doc/dynare.texi index fc946890c..0337f52a2 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -376,7 +376,7 @@ Adjemian (Université du Maine, Gains and Cepremap), Houtan Bastani (Cepremap), Michel Juillard (Banque de France), Frédéric Karamé (Université du Maine, Gains and Cepremap), Junior Maih (Norges Bank), Ferhat Mihoubi (Université Paris-Est Créteil, Epee and Cepremap), George -Perendia, Johannes Pfeifer (University of Mannheim), Marco Ratto (European Commission, Joint Research Centre - JRC) +Perendia, Johannes Pfeifer (University of Cologne), Marco Ratto (European Commission, Joint Research Centre - JRC) and Sébastien Villemot (OFCE – Sciences Po). Increasingly, the developer base is expanding, as tools developed by researchers outside of Cepremap are integrated into Dynare. Financial From 8eefb6a74700cdfd41d86ffe1b93569a69fa41de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sun, 2 Apr 2017 18:35:47 +0200 Subject: [PATCH 43/59] Fixed warning introduced in b5c353f5a3eebb073f428132f8b71a1ca87d71b1. --- doc/dynare.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 0337f52a2..3449c209c 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2,7 +2,7 @@ @c %**start of header @setfilename dynare.info @documentencoding UTF-8 -@codequoteundirected on +@set txicodequoteundirected @settitle Dynare Reference Manual @afourwide From 97e185bc6eb17c4bb042abf97bd0428e4d0db6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sun, 2 Apr 2017 18:36:56 +0200 Subject: [PATCH 44/59] Cosmetic changes in doc header. --- matlab/datatomfile.m | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/matlab/datatomfile.m b/matlab/datatomfile.m index 4c7abec23..4f6a5ff49 100644 --- a/matlab/datatomfile.m +++ b/matlab/datatomfile.m @@ -1,20 +1,23 @@ -function datatomfile (s,var_list, names) -% function datatomfile (s,var_list) -% This optional command saves the simulation results in a text file. The name of each -% variable preceeds the corresponding results. This command must follow SIMUL. -% -% INPUTS -% s: data file name -% var_list: vector of selected endogenous variables -% names: vector of strings (alternative names for the endogenous variables in the data file) -% -% OUTPUTS -% none -% -% SPECIAL REQUIREMENTS -% none +function datatomfile (s, var_list, names) -% Copyright (C) 2001-2016 Dynare Team +% This command saves the simulation results in a text file. The name of each +% variable preceeds the corresponding results. This command must follow SIMUL +% or STOCH_SIMUL commands. +% +% INPUTS +% - s: data file name +% - var_list: vector of selected endogenous variables +% - names: vector of strings (alternative names for the endogenous variables in the data file) +% +% OUTPUTS +% none +% +% REMARKS +% Only the first argument is mandatory. If only one input argument is +% provided, all the variables as defined in M_.endo_names will be saved in +% the generated m file. + +% Copyright (C) 2001-2017 Dynare Team % % This file is part of Dynare. % From f9a462bf07225f3ca018c6f3bdb97cb0f65d48db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sun, 2 Apr 2017 18:37:45 +0200 Subject: [PATCH 45/59] Added option nonlinear_filter_initialization. Default value is 1 (initialization with the ergodic variance of the reduced form solution of the model approximated at order one). If the model has unit roots, the user must use `nonlinear_filter_initialization=3`, which select an identity matrix for the initial covariance matrix of the state variables. A side effect of this option is to temporarily change the value of options_.qz_criterium to a value above one (ie 1+1e-6) so that the unit roots are not rejected. If the model has unit roots and if the and if the option nonlinear_filter_initialization has a value less than 3, the evaluation of the likelihood will fail, because by default the unit root is counted as an unstable root. --- doc/dynare.texi | 17 +++++++++++ matlab/non_linear_dsge_likelihood.m | 3 +- matlab/select_qz_criterium_value.m | 45 +++++++++++++++++++---------- preprocessor/DynareBison.yy | 4 ++- preprocessor/DynareFlex.ll | 1 + 5 files changed, 53 insertions(+), 17 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 3449c209c..9e980d681 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -3480,6 +3480,7 @@ end; @deffn Command check ; @deffnx Command check (solve_algo = @var{INTEGER}) ; +@anchor{check} @descriptionhead @@ -6345,6 +6346,22 @@ Sets the method for approximating the particle distribution. Possible values for @item cpf_weights = @var{OPTION} @anchor{cpf_weights} Controls the method used to update the weights in conditional particle filter, possible values are @code{amisanotristani} (@cite{Amisano et al (2010)}) or @code{murrayjonesparslow} (@cite{Murray et al. (2013)}). Default value is @code{amisanotristani}. +@item nonlinear_filter_initialization = @var{INTEGER} +@anchor{nonlinear_filter_initialization} Sets the initial condition of the +nonlinear filters. By default the nonlinear filters are initialized with the +unconditional covariance matrix of the state variables, computed with the +reduced form solution of the first order approximation of the model. If +@code{nonlinear_filter_initialization=2}, the nonlinear filter is instead +initialized with a covariance matrix estimated with a stochastic simulation of +the reduced form solution of the second order approximation of the model. Both +these initializations assume that the model is stationary, and cannot be used +if the model has unit roots (which can be seen with the @ref{check} command +prior to estimation). If the model has stochastic trends, user must use +@code{nonlinear_filter_initialization=3}, the filters are then initialized with +an identity matrix for the covariance matrix of the state variables. Default +value is @code{nonlinear_filter_initialization=1} (initialization based on the +first order approximation of the model). + @end table diff --git a/matlab/non_linear_dsge_likelihood.m b/matlab/non_linear_dsge_likelihood.m index 3debf8b7f..57e02a0b7 100644 --- a/matlab/non_linear_dsge_likelihood.m +++ b/matlab/non_linear_dsge_likelihood.m @@ -316,7 +316,8 @@ switch DynareOptions.particle.initialization StateVectorVariance = cov(y_'); DynareOptions.periods = old_DynareOptionsperiods; clear('old_DynareOptionsperiods','y_'); - case 3% Initial state vector covariance is a diagonal matrix. + case 3% Initial state vector covariance is a diagonal matrix (to be used + % if model has stochastic trends). StateVectorMean = ReducedForm.constant(mf0); StateVectorVariance = DynareOptions.particle.initial_state_prior_std*eye(number_of_state_variables); otherwise diff --git a/matlab/select_qz_criterium_value.m b/matlab/select_qz_criterium_value.m index 09282747e..b2e4225ea 100644 --- a/matlab/select_qz_criterium_value.m +++ b/matlab/select_qz_criterium_value.m @@ -36,21 +36,36 @@ function options_=select_qz_criterium_value(options_) % set by default options_.qz_criterium to 1+1e-6 stack = dbstack; -if isequal(options_.lik_init,1) - if isempty(options_.qz_criterium) - options_.qz_criterium = 1-1e-6; - elseif options_.qz_criterium > 1-eps - error([stack(2).file ': option qz_criterium is too large for estimating/smoothing ' ... - 'a stationary model. If your model contains unit roots, use ' ... - 'option diffuse_filter']) - end -else - if isempty(options_.qz_criterium) - options_.qz_criterium = 1+1e-6; - else - if options_.qz_criterium <= 1 - fprintf('\n%s:: diffuse filter is incompatible with a qz_criterium<=1. Resetting it to 1+1e-6.\n',stack(2).file) +if options_.particle.status + % Non linear filter + if isequal(options_.particle.initialization, 3) + if isempty(options_.qz_criterium) options_.qz_criterium = 1+1e-6; + else + if options_.qz_criterium <= 1 + fprintf('\n%s:: You set nonlinear_filter_initialization equal to 3, it is assumed that you try to estimate a non stationary model. Resetting it to 1+1e-6.\n', stack(2).file) + options_.qz_criterium = 1+1e-6; + end end end -end +else + % Linear filter + if isequal(options_.lik_init,1) + if isempty(options_.qz_criterium) + options_.qz_criterium = 1-1e-6; + elseif options_.qz_criterium > 1-eps + error([stack(2).file ': option qz_criterium is too large for estimating/smoothing ' ... + 'a stationary model. If your model contains unit roots, use ' ... + 'option diffuse_filter']) + end + else + if isempty(options_.qz_criterium) + options_.qz_criterium = 1+1e-6; + else + if options_.qz_criterium <= 1 + fprintf('\n%s:: diffuse filter is incompatible with a qz_criterium<=1. Resetting it to 1+1e-6.\n',stack(2).file) + options_.qz_criterium = 1+1e-6; + end + end + end +end \ No newline at end of file diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index e5f71d663..c495801a0 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -111,7 +111,7 @@ class ParsingDriver; %token MODEL_DIAGNOSTICS MODIFIEDHARMONICMEAN MOMENTS_VARENDO CONTEMPORANEOUS_CORRELATION DIFFUSE_FILTER SUB_DRAWS TAPER_STEPS GEWEKE_INTERVAL RAFTERY_LEWIS_QRS RAFTERY_LEWIS_DIAGNOSTICS MCMC_JUMPING_COVARIANCE MOMENT_CALIBRATION %token NUMBER_OF_PARTICLES RESAMPLING SYSTEMATIC GENERIC RESAMPLING_THRESHOLD RESAMPLING_METHOD KITAGAWA STRATIFIED SMOOTH %token CPF_WEIGHTS AMISANOTRISTANI MURRAYJONESPARSLOW -%token FILTER_ALGORITHM PROPOSAL_APPROXIMATION CUBATURE UNSCENTED MONTECARLO DISTRIBUTION_APPROXIMATION +%token NONLINEAR_FILTER_INITIALIZATION FILTER_ALGORITHM PROPOSAL_APPROXIMATION CUBATURE UNSCENTED MONTECARLO DISTRIBUTION_APPROXIMATION %token NAME %token USE_PENALIZED_OBJECTIVE_FOR_HESSIAN INIT_STATE %token NAN_CONSTANT NO_STATIC NOBS NOCONSTANT NODISPLAY NOCORR NODIAGNOSTIC NOFUNCTIONS NO_HOMOTOPY @@ -1818,6 +1818,7 @@ estimation_options : o_datafile | o_resampling_threshold | o_resampling_method | o_filter_algorithm + | o_nonlinear_filter_initialization | o_cpf_weights | o_proposal_approximation | o_distribution_approximation @@ -3085,6 +3086,7 @@ o_resampling_method : RESAMPLING_METHOD EQUAL KITAGAWA {driver.option_num("parti o_cpf_weights : CPF_WEIGHTS EQUAL AMISANOTRISTANI {driver.option_num("particle.cpf_weights_method.amisanotristani", "1"); driver.option_num("particle.cpf_weights_method.murrayjonesparslow", "0"); } | CPF_WEIGHTS EQUAL MURRAYJONESPARSLOW {driver.option_num("particle.cpf_weights_method.amisanotristani", "0"); driver.option_num("particle.cpf_weights_method.murrayjonesparslow", "1"); }; o_filter_algorithm : FILTER_ALGORITHM EQUAL symbol { driver.option_str("particle.filter_algorithm", $3); }; +o_nonlinear_filter_initialization : NONLINEAR_FILTER_INITIALIZATION EQUAL INT_NUMBER { driver.option_num("particle.initialization", $3); }; o_proposal_approximation : PROPOSAL_APPROXIMATION EQUAL CUBATURE {driver.option_num("particle.proposal_approximation.cubature", "1"); driver.option_num("particle.proposal_approximation.unscented", "0"); driver.option_num("particle.proposal_approximation.montecarlo", "0");} | PROPOSAL_APPROXIMATION EQUAL UNSCENTED {driver.option_num("particle.proposal_approximation.cubature", "0"); driver.option_num("particle.proposal_approximation.unscented", "1"); driver.option_num("particle.proposal_approximation.montecarlo", "0");} | PROPOSAL_APPROXIMATION EQUAL MONTECARLO {driver.option_num("particle.proposal_approximation.cubature", "0"); driver.option_num("particle.proposal_approximation.unscented", "0"); driver.option_num("particle.proposal_approximation.montecarlo", "1");} ; diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index 299d31edd..0a1588c5a 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -398,6 +398,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 amisanotristani {return token::AMISANOTRISTANI;} murrayjonesparslow {return token::MURRAYJONESPARSLOW;} filter_algorithm {return token::FILTER_ALGORITHM;} +nonlinear_filter_initialization {return token::NONLINEAR_FILTER_INITIALIZATION;} proposal_approximation {return token::PROPOSAL_APPROXIMATION;} cubature {return token::CUBATURE;} unscented {return token::UNSCENTED;} From 76c4bd04feb4ee4c5e7ddd98740c95ac2b39a20c Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 20 Mar 2017 17:30:41 +0100 Subject: [PATCH 46/59] Provide informative error message if non-stationary model is estimated using particle filter Closes #1377 (cherry picked from commit efaa7e54136ffd48fb69e075ecacf9708a553d3b) --- matlab/initial_estimation_checks.m | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/matlab/initial_estimation_checks.m b/matlab/initial_estimation_checks.m index 03f0eac05..98bb6672d 100644 --- a/matlab/initial_estimation_checks.m +++ b/matlab/initial_estimation_checks.m @@ -165,8 +165,15 @@ elseif imag(fval) end if info(1) > 0 + if DynareOptions.order>1 + [eigenvalues_] = check(Model,DynareOptions, DynareResults); + if any(abs(1-abs(eigenvalues_))<1e-10) + error('Your model has a unit root, but estimation at order>1 currently only supports stationary models') + end + else disp('Error in computing likelihood for initial parameter values') print_info(info, DynareOptions.noprint, DynareOptions) + end end if DynareOptions.prefilter==1 From ade89a9ec17e0c5e9675b0d3c691eab5e0728cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sun, 2 Apr 2017 20:32:15 +0200 Subject: [PATCH 47/59] Fixed missing initialization of qz_criterium with nonlinear filters. --- matlab/select_qz_criterium_value.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/matlab/select_qz_criterium_value.m b/matlab/select_qz_criterium_value.m index b2e4225ea..26fc47572 100644 --- a/matlab/select_qz_criterium_value.m +++ b/matlab/select_qz_criterium_value.m @@ -47,6 +47,10 @@ if options_.particle.status options_.qz_criterium = 1+1e-6; end end + else + if isempty(options_.qz_criterium) + options_.qz_criterium = 1-1e-6; + end end else % Linear filter From 4dcdb81a31ef2413c5a1e34fbfd5e643fcb66d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sun, 2 Apr 2017 20:49:41 +0200 Subject: [PATCH 48/59] Changed error message introduced in 30c9b3721564d89d1b85abcdc75d493075e6ca77. --- matlab/initial_estimation_checks.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matlab/initial_estimation_checks.m b/matlab/initial_estimation_checks.m index 98bb6672d..588a014cd 100644 --- a/matlab/initial_estimation_checks.m +++ b/matlab/initial_estimation_checks.m @@ -167,8 +167,8 @@ end if info(1) > 0 if DynareOptions.order>1 [eigenvalues_] = check(Model,DynareOptions, DynareResults); - if any(abs(1-abs(eigenvalues_))<1e-10) - error('Your model has a unit root, but estimation at order>1 currently only supports stationary models') + if any(abs(eigenvalues_)>DynareOptions.qz_criterium) + error('Your model has at least one unit root and you are using a nonlinear filter. Please set nonlinear_filter_initialization=3.') end else disp('Error in computing likelihood for initial parameter values') From c1434118bd39dde3fedfee7bfb0e42204219dd8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Mon, 3 Apr 2017 11:23:47 +0200 Subject: [PATCH 49/59] Added integration test for nonlinear filters with unit roots. --- tests/Makefile.am | 10 +- tests/particle/dsge_base2.mod | 52 +++++-- tests/particle/dsge_unit_root.mod | 221 ++++++++++++++++++++++++++++++ 3 files changed, 268 insertions(+), 15 deletions(-) create mode 100644 tests/particle/dsge_unit_root.mod diff --git a/tests/Makefile.am b/tests/Makefile.am index e3487d8d2..53bd9e9a3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -338,6 +338,10 @@ MODFILES = \ observation_trends_and_prefiltering/calib_smoother/Tr_prefil_f_obs_loglin_cal_smoother.mod \ observation_trends_and_prefiltering/ML/Trend_no_prefilter_selected_var.mod +PARTICLEFILES = \ + particle/dsge_base2.mod \ + particle/dsge_unit_root.mod + XFAIL_MODFILES = ramst_xfail.mod \ estim_param_in_shock_value_xfail.mod \ @@ -694,6 +698,10 @@ gradient: m/gradient o/gradient m/gradient: $(patsubst %.mod, %.m.trs, $(filter gradient/%.mod, $(MODFILES))) o/gradient: $(patsubst %.mod, %.o.trs, $(filter gradient/%.mod, $(MODFILES))) +particle: m/particle o/particle +m/particle: $(patsubst %.mod, %.m.trs, $(PARTICLEFILES)) +o/particle: $(patsubst %.mod, %.o.trs, $(PARTICLEFILES)) + # Matlab TRS Files M_TRS_FILES = $(patsubst %.mod, %.m.trs, $(MODFILES)) M_TRS_FILES += run_block_byte_tests_matlab.m.trs run_reporting_test_matlab.m.trs run_all_unitary_tests.m.trs @@ -710,8 +718,6 @@ M_TLS_FILES = $(patsubst %.m, %.m.tls, $(MFILES)) # Octave TLS Files O_TLS_FILES = $(patsubst %.m, %.o.tls, $(MFILES)) - - EXTRA_DIST = \ read_trs_files.sh \ run_test_matlab.m \ diff --git a/tests/particle/dsge_base2.mod b/tests/particle/dsge_base2.mod index 2b1f26410..b7d4cb1b5 100644 --- a/tests/particle/dsge_base2.mod +++ b/tests/particle/dsge_base2.mod @@ -1,27 +1,51 @@ -// This file deals with the resolution and estimation of a basic DSGE model with -//employment for comparison with the benchmark in Gauss which solves with -//the same particular filter but global methodology. -// -// Juin 2015 - // DGP +@#ifndef RISKY_CALIBRATION @#define RISKY_CALIBRATION = 0 +@#endif +@#ifndef EXTREME_CALIBRATION @#define EXTREME_CALIBRATION = 1 +@#endif +@#ifndef BENCHMARK_CALIBRATION @#define BENCHMARK_CALIBRATION = 0 +@#endif // ALGORITHM -@#define LINEAR_KALMAN = 1 +@#ifndef LINEAR_KALMAN +@#define LINEAR_KALMAN = 0 +@#endif +@#ifndef ALGO_SIR @#define ALGO_SIR = 0 +@#endif +@#ifndef ALGO_SISmoothR @#define ALGO_SISmoothR = 0 +@#endif +@#ifndef ALGO_APF @#define ALGO_APF = 0 +@#endif +@#ifndef ALGO_GPF @#define ALGO_GPF = 0 +@#endif +@#ifndef ALGO_GCF @#define ALGO_GCF = 0 -@#define ALGO_GUF = 0 +@#endif +@#ifndef ALGO_GUF +@#define ALGO_GUF = 1 +@#endif +@#ifndef ALGO_GMPF @#define ALGO_GMPF = 0 +@#endif +@#ifndef ALGO_GMCF @#define ALGO_GMCF = 0 +@#endif +@#ifndef ALGO_ONLINE_1 @#define ALGO_ONLINE_1 = 0 +@#endif +@#ifndef ALGO_ONLINE_2 @#define ALGO_ONLINE_2 = 0 - +@#endif +@#ifndef MCMC +@#define MCMC = 0 +@#endif var k A c l i y; varexo e_a; @@ -164,7 +188,9 @@ options_.mode_check.number_of_points = 250; estimation(order=1,number_of_particles=1000,mode_compute=11); @#endif -options_.mh_nblck = 10 ; -options_.posterior_sampling_method = 'RWGMH'; -options_.rwgmh_scale_shock = (1e-5)*[10 10 1 1 10 10 10 1000 10 10] ; -estimation(order=1,mh_replic=5000,mode_compute=0,mode_file=dsge_base2_mode); +@#if MCMC + options_.mh_nblck = 10 ; + options_.posterior_sampling_method = 'RWGMH'; + options_.rwgmh_scale_shock = (1e-5)*[10 10 1 1 10 10 10 1000 10 10] ; + estimation(order=1,mh_replic=5000,mode_compute=0,mode_file=dsge_base2_mode); +@#endif \ No newline at end of file diff --git a/tests/particle/dsge_unit_root.mod b/tests/particle/dsge_unit_root.mod new file mode 100644 index 000000000..a0f1a4f85 --- /dev/null +++ b/tests/particle/dsge_unit_root.mod @@ -0,0 +1,221 @@ +// DGP +@#ifndef RISKY_CALIBRATION +@#define RISKY_CALIBRATION = 0 +@#endif +@#ifndef EXTREME_CALIBRATION +@#define EXTREME_CALIBRATION = 1 +@#endif +@#ifndef BENCHMARK_CALIBRATION +@#define BENCHMARK_CALIBRATION = 0 +@#endif + +// ALGORITHM +@#ifndef LINEAR_KALMAN +@#define LINEAR_KALMAN = 0 +@#endif +@#ifndef ALGO_SIR +@#define ALGO_SIR = 0 +@#endif +@#ifndef ALGO_SISmoothR +@#define ALGO_SISmoothR = 0 +@#endif +@#ifndef ALGO_APF +@#define ALGO_APF = 0 +@#endif +@#ifndef ALGO_GPF +@#define ALGO_GPF = 0 +@#endif +@#ifndef ALGO_GCF +@#define ALGO_GCF = 0 +@#endif +@#ifndef ALGO_GUF +@#define ALGO_GUF = 1 +@#endif +@#ifndef ALGO_GMPF +@#define ALGO_GMPF = 0 +@#endif +@#ifndef ALGO_GMCF +@#define ALGO_GMCF = 0 +@#endif +@#ifndef ALGO_ONLINE_1 +@#define ALGO_ONLINE_1 = 0 +@#endif +@#ifndef ALGO_ONLINE_2 +@#define ALGO_ONLINE_2 = 0 +@#endif +@#ifndef MCMC +@#define MCMC = 0 +@#endif + +var k A c l i y; +varexo e_a; + +parameters alp bet tet tau delt rho ; +alp = 0.4; +bet = 0.99; +tet = 0.357 ; +tau = 50 ; +delt = 0.02; +rho = 1.0; + +model; +c = ((1 - alp)*tet/(1-tet))*A*(1-l)*((k(-1)/l)^alp) ; +y = A*(k(-1)^alp)*(l^(1-alp)) ; +i = y-c ; +k = (1-delt)*k(-1) + i ; +log(A) = rho*log(A(-1)) + e_a ; +(((c^(tet))*((1-l)^(1-tet)))^(1-tau))/c - bet*((((c(+1)^(tet))*((1-l(+1))^(1-tet)))^(1-tau))/c(+1))*(1 -delt+alp*(A(1)*(k^alp)*(l(1)^(1-alp)))/k)=0 ; +end; + +shocks; +var e_a; stderr 0.035; +end; + +steady(nocheck); + + +stoch_simul(periods=5000, irf=0, noprint); + +@#if EXTREME_CALIBRATION + verbatim; + y = y + randn(size(y))*.0175; + l = l + randn(size(l))*.00312; + i = i + randn(size(i))*.00465; + end; + ds = dseries([y, l, i, c, A], 1900Q1, {'y'; 'l'; 'i'; 'c'; 'A'}); +@#endif + +@#if RISKY_CALIBRATION + verbatim; + y = y + randn(size(y))*.00158; + l = l + randn(size(l))*.0011; + i = i + randn(size(i))*.000866; + end; + ds = dseries([y, l, i, c, A], 1900Q1, {'y'; 'l'; 'i'; 'c'; 'A'}); +@#endif + +@#if BENCHMARK_CALIBRATION + // TODO: This section is to be completed (measurement are missing) + ds = dseries([y, l, i, c, A], 1900Q1, {'y'; 'l'; 'i'; 'c'; 'A'}); +@#endif + +estimated_params; +alp, uniform_pdf,,, 0.0001, 0.99; +bet, uniform_pdf,,, 0.0001, 0.99999; +tet, uniform_pdf,,, 0.0001, .999; +tau, uniform_pdf,,, 0.0001, 100; +delt, uniform_pdf,,, 0.0001, 0.05; +stderr e_a, uniform_pdf,,, 0.00001, 0.1; +stderr y, uniform_pdf,,, 0.00001, 0.1; +stderr l, uniform_pdf,,, 0.00001, 0.1; +stderr i, uniform_pdf,,, 0.00001, 0.1; +end; + +@#if RISKY_CALIBRATION + estimated_params_init; + alp, 0.4; + bet, 0.99; + tet, 0.357; + tau, 50; + delt, 0.02; + stderr e_a, .035; + stderr y, .00158; + stderr l, .0011; + stderr i, .000866; + end; +@#endif + +@#if EXTREME_CALIBRATION + estimated_params_init; + alp, 0.4; + bet, 0.99; + tet, 0.357; + tau, 50; + delt, 0.02; + stderr e_a, .035; + stderr y, .0175; + stderr l, .00312; + stderr i, .00465; + end; +@#endif + +varobs y l i ; + +options_.mode_check.neighbourhood_size = .01 ; +options_.mode_check.number_of_points = 250; + +//options_.particle.initialization = 3; + +@#if EXTREME_CALIBRATION + data(series=ds, nobs=200, first_obs=1973Q1); +@#endif + +@#if RISKY_CALIBRATION + data(series=ds, nobs=200, first_obs=1973Q1); +@#endif + +@#if BENCHMARK_CALIBRATION + data(series=ds, nobs = 200, first_obs=1973Q1); +@#endif + + +@#if LINEAR_KALMAN +% estimation(nograph,order=1,mode_compute=8,mh_replic=0,mode_check); +@#endif + +@#if ALGO_SIR + estimation(order=2,nonlinear_filter_initialization=3,nograph,number_of_particles=1000,mh_replic=0,mode_compute=8,mode_check); +@#endif + +@#if ALGO_SISmoothR + estimation(order=2,nonlinear_filter_initialization=3,nograph,number_of_particles=1000,resampling_method=smooth,mode_compute=8,mh_replic=0); + estimation(order=2,nonlinear_filter_initialization=3,nograph,number_of_particles=1000,resampling_method=smooth,mode_compute=8,mode_file=dsge_unit_root_mode,mh_replic=0); + estimation(order=2,nonlinear_filter_initialization=3,nograph,number_of_particles=1000,resampling_method=smooth,mode_compute=4,mode_file=dsge_unit_root_mode,mh_replic=0,mode_check); +@#endif + +@#if ALGO_APF + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=apf,number_of_particles=1000,mh_replic=0,mode_compute=8,mode_check); +@#endif + +@#if ALGO_GPF + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,distribution_approximation=montecarlo,number_of_particles=1000,mh_replic=0,mode_compute=8); + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,distribution_approximation=montecarlo,number_of_particles=1000,mode_file=dsge_unit_root_mode,mh_replic=0,mode_compute=4,mode_check); +@#endif + +@#if ALGO_GCF + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,mh_replic=0,mode_compute=8); + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,mh_replic=0,mode_compute=4,mode_file=dsge_unit_root_mode,mode_check); +@#endif + +@#if ALGO_GUF + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,proposal_approximation=unscented,distribution_approximation=unscented,mh_replic=0,mode_compute=4); + estimation(order=2,nonlinear_filter_initialization=3,nograph,filter_algorithm=gf,proposal_approximation=unscented,distribution_approximation=unscented,mode_file=dsge_unit_root_mode,mh_replic=0,mode_compute=8,mode_check); +@#endif + +@#if ALGO_GMPF + estimation(nograph,order=2,nonlinear_filter_initialization=3,filter_algorithm=gmf,distribution_approximation=montecarlo,number_of_particles=1000,mh_replic=0,mode_compute=8); + estimation(nograph,order=2,nonlinear_filter_initialization=3,filter_algorithm=gmf,distribution_approximation=montecarlo,number_of_particles=1000,mh_replic=0,mode_file=dsge_unit_root_mode,mode_compute=8); + estimation(nograph,order=2,nonlinear_filter_initialization=3,filter_algorithm=gmf,distribution_approximation=montecarlo,number_of_particles=1000,mh_replic=0,mode_file=dsge_unit_root_mode,mode_compute=4,mode_check); +@#endif + +@#if ALGO_GMCF + estimation(nograph,order=2,nonlinear_filter_initialization=3,filter_algorithm=gmf,mh_replic=0,mode_compute=8); + estimation(nograph,order=2,nonlinear_filter_initialization=3,filter_algorithm=gmf,mh_replic=0,mode_compute=4,mode_file=dsge_unit_root_mode,mode_check); +@#endif + +@#if ALGO_ONLINE_2 + options_.particle.liu_west_delta = 0.9 ; + estimation(order=2,number_of_particles=1000,mode_compute=11); +@#endif + +@#if ALGO_ONLINE_1 + options_.particle.liu_west_delta = 0.9 ; + estimation(order=1,number_of_particles=1000,mode_compute=11); +@#endif + +@#if MCMC + options_.mh_nblck = 10 ; + options_.posterior_sampling_method = 'RWGMH'; + options_.rwgmh_scale_shock = (1e-5)*[10 10 1 1 10 10 10 1000 10 10] ; + estimation(order=1,mh_replic=5000,mode_compute=0,mode_file=dsge_base2_mode); +@#endif \ No newline at end of file From 052d62e150711c35e16c4cb292270c0eee702a93 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Mon, 3 Apr 2017 15:23:01 +0200 Subject: [PATCH 50/59] preprocessor: remove unused filed histval_present from mod_file_struct --- preprocessor/NumericalInitialization.cc | 4 +--- preprocessor/Statement.cc | 3 +-- preprocessor/Statement.hh | 5 +---- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/preprocessor/NumericalInitialization.cc b/preprocessor/NumericalInitialization.cc index 3bbd803eb..aa7a25021 100644 --- a/preprocessor/NumericalInitialization.cc +++ b/preprocessor/NumericalInitialization.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2016 Dynare Team + * Copyright (C) 2003-2017 Dynare Team * * This file is part of Dynare. * @@ -279,8 +279,6 @@ HistValStatement::HistValStatement(const hist_values_t &hist_values_arg, void HistValStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { - mod_file_struct.histval_present = true; - if (all_values_required) { set unused_endo = symbol_table.getEndogenous(); diff --git a/preprocessor/Statement.cc b/preprocessor/Statement.cc index 887603b6d..d43d11444 100644 --- a/preprocessor/Statement.cc +++ b/preprocessor/Statement.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2015 Dynare Team + * Copyright (C) 2006-2017 Dynare Team * * This file is part of Dynare. * @@ -40,7 +40,6 @@ ModFileStructure::ModFileStructure() : identification_present(false), estimation_analytic_derivation(false), partial_information(false), - histval_present(false), k_order_solver(false), calibrated_measurement_errors(false), dsge_prior_weight_in_estimated_params(false), diff --git a/preprocessor/Statement.hh b/preprocessor/Statement.hh index 311260b0e..adfbdd6aa 100644 --- a/preprocessor/Statement.hh +++ b/preprocessor/Statement.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2015 Dynare Team + * Copyright (C) 2006-2017 Dynare Team * * This file is part of Dynare. * @@ -72,9 +72,6 @@ public: bool estimation_analytic_derivation; //! Whether the option partial_information is given to stoch_simul/estimation/osr/ramsey_policy bool partial_information; - //! Whether a histval bloc is present - /*! Used for the workaround for trac ticket #157 */ - bool histval_present; //! Whether the "k_order_solver" option is used (explictly, or implicitly if order >= 3) bool k_order_solver; //! Whether there is a calibrated measurement error From 14f4544a29eac182ff1f5840e5f9cc78b9efa7e0 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Tue, 4 Apr 2017 15:28:27 +0200 Subject: [PATCH 51/59] preprocessor: add option to write equation tags in latex output. closes #477 --- doc/dynare.texi | 10 ++++++++++ preprocessor/ComputingTasks.cc | 7 ++++--- preprocessor/ComputingTasks.hh | 3 ++- preprocessor/DynamicModel.cc | 4 ++-- preprocessor/DynamicModel.hh | 4 ++-- preprocessor/DynareBison.yy | 6 ++++-- preprocessor/DynareFlex.ll | 1 + preprocessor/ModelTree.cc | 13 ++++++++++++- preprocessor/ModelTree.hh | 2 +- preprocessor/ParsingDriver.cc | 4 ++-- preprocessor/ParsingDriver.hh | 2 +- 11 files changed, 41 insertions(+), 15 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 9e980d681..d355a7688 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2097,6 +2097,7 @@ Compiling the @TeX{} file requires the following @LaTeX{} packages: @anchor{write_latex_dynamic_model} @deffn Command write_latex_dynamic_model ; +@deffnx Command write_latex_dynamic_model (@var{OPTIONS}) ; @descriptionhead @@ -2143,6 +2144,15 @@ also have been replaced by new auxiliary variables and equations. For the required @LaTeX{} packages, @pxref{write_latex_original_model}. +@optionshead + +@table @code + +@item write_equation_tags +Write the equation tags in the latex output + +@end table + @end deffn @deffn Command write_latex_static_model ; diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index 21b2dd755..d441eca18 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -1617,15 +1617,16 @@ IdentificationStatement::writeOutput(ostream &output, const string &basename, bo output << "dynare_identification(options_ident);" << endl; } -WriteLatexDynamicModelStatement::WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg) : - dynamic_model(dynamic_model_arg) +WriteLatexDynamicModelStatement::WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg, bool write_equation_tags_arg) : + dynamic_model(dynamic_model_arg), + write_equation_tags(write_equation_tags_arg) { } void WriteLatexDynamicModelStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const { - dynamic_model.writeLatexFile(basename); + dynamic_model.writeLatexFile(basename, write_equation_tags); } WriteLatexStaticModelStatement::WriteLatexStaticModelStatement(const StaticModel &static_model_arg) : diff --git a/preprocessor/ComputingTasks.hh b/preprocessor/ComputingTasks.hh index 596738c27..8319bd893 100644 --- a/preprocessor/ComputingTasks.hh +++ b/preprocessor/ComputingTasks.hh @@ -552,8 +552,9 @@ class WriteLatexDynamicModelStatement : public Statement { private: const DynamicModel &dynamic_model; + const bool write_equation_tags; public: - WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg); + WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg, bool write_equation_tags_arg); virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; }; diff --git a/preprocessor/DynamicModel.cc b/preprocessor/DynamicModel.cc index cc3dcf1c9..212cec562 100644 --- a/preprocessor/DynamicModel.cc +++ b/preprocessor/DynamicModel.cc @@ -4378,9 +4378,9 @@ DynamicModel::writeChainRuleDerivative(ostream &output, int eqr, int varr, int l } void -DynamicModel::writeLatexFile(const string &basename) const +DynamicModel::writeLatexFile(const string &basename, const bool write_equation_tags) const { - writeLatexModelFile(basename + "_dynamic", oLatexDynamicModel); + writeLatexModelFile(basename + "_dynamic", oLatexDynamicModel, write_equation_tags); } void diff --git a/preprocessor/DynamicModel.hh b/preprocessor/DynamicModel.hh index 7f0177fbd..7988a3658 100644 --- a/preprocessor/DynamicModel.hh +++ b/preprocessor/DynamicModel.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2016 Dynare Team + * Copyright (C) 2003-2017 Dynare Team * * This file is part of Dynare. * @@ -278,7 +278,7 @@ public: size_t dynamicOnlyEquationsNbr() const; //! Writes LaTeX file with the equations of the dynamic model - void writeLatexFile(const string &basename) const; + void writeLatexFile(const string &basename, const bool write_equation_tags) const; //! Writes LaTeX file with the equations of the dynamic model (for the original model) void writeLatexOriginalFile(const string &basename) const; diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index c495801a0..7c918a1df 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -110,7 +110,7 @@ class ParsingDriver; %token MODE_CHECK MODE_CHECK_NEIGHBOURHOOD_SIZE MODE_CHECK_SYMMETRIC_PLOTS MODE_CHECK_NUMBER_OF_POINTS MODE_COMPUTE MODE_FILE MODEL MODEL_COMPARISON MODEL_INFO MSHOCKS ABS SIGN %token MODEL_DIAGNOSTICS MODIFIEDHARMONICMEAN MOMENTS_VARENDO CONTEMPORANEOUS_CORRELATION DIFFUSE_FILTER SUB_DRAWS TAPER_STEPS GEWEKE_INTERVAL RAFTERY_LEWIS_QRS RAFTERY_LEWIS_DIAGNOSTICS MCMC_JUMPING_COVARIANCE MOMENT_CALIBRATION %token NUMBER_OF_PARTICLES RESAMPLING SYSTEMATIC GENERIC RESAMPLING_THRESHOLD RESAMPLING_METHOD KITAGAWA STRATIFIED SMOOTH -%token CPF_WEIGHTS AMISANOTRISTANI MURRAYJONESPARSLOW +%token CPF_WEIGHTS AMISANOTRISTANI MURRAYJONESPARSLOW WRITE_EQUATION_TAGS %token NONLINEAR_FILTER_INITIALIZATION FILTER_ALGORITHM PROPOSAL_APPROXIMATION CUBATURE UNSCENTED MONTECARLO DISTRIBUTION_APPROXIMATION %token NAME %token USE_PENALIZED_OBJECTIVE_FOR_HESSIAN INIT_STATE @@ -2111,7 +2111,9 @@ ramsey_policy_options : stoch_simul_primary_options ; write_latex_dynamic_model : WRITE_LATEX_DYNAMIC_MODEL ';' - { driver.write_latex_dynamic_model(); } + { driver.write_latex_dynamic_model(false); } + | WRITE_LATEX_DYNAMIC_MODEL '(' WRITE_EQUATION_TAGS ')' ';' + { driver.write_latex_dynamic_model(true); } ; write_latex_static_model : WRITE_LATEX_STATIC_MODEL ';' diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index 0a1588c5a..262d7a354 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -465,6 +465,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 yylval->string_val = new string(yytext); return token::ABAND; } +write_equation_tags {return token::WRITE_EQUATION_TAGS;} indxap {return token::INDXAP;} apband {return token::APBAND;} indximf {return token::INDXIMF;} diff --git a/preprocessor/ModelTree.cc b/preprocessor/ModelTree.cc index 0b88c298f..deec8b723 100644 --- a/preprocessor/ModelTree.cc +++ b/preprocessor/ModelTree.cc @@ -1529,7 +1529,7 @@ ModelTree::Write_Inf_To_Bin_File(const string &basename, } void -ModelTree::writeLatexModelFile(const string &basename, ExprNodeOutputType output_type) const +ModelTree::writeLatexModelFile(const string &basename, ExprNodeOutputType output_type, const bool write_equation_tags) const { ofstream output, content_output; string filename = basename + ".tex"; @@ -1575,6 +1575,17 @@ ModelTree::writeLatexModelFile(const string &basename, ExprNodeOutputType output { content_output << "\\begin{dmath}" << endl << "% Equation " << eq+1 << endl; + if (write_equation_tags) + for (vector > >::const_iterator iteqt = equation_tags.begin(); + iteqt != equation_tags.end(); iteqt++) + if (iteqt->first == eq) + { + content_output << "[\\textrm{" << iteqt->second.first << "}"; + if (!empty(iteqt->second.second)) + content_output << " = \\textrm{``" << iteqt->second.second << "''}"; + content_output << "]"; + } + // Here it is necessary to cast to superclass ExprNode, otherwise the overloaded writeOutput() method is not found dynamic_cast(equations[eq])->writeOutput(content_output, output_type); content_output << endl << "\\end{dmath}" << endl; diff --git a/preprocessor/ModelTree.hh b/preprocessor/ModelTree.hh index b87debf19..1de07d4b3 100644 --- a/preprocessor/ModelTree.hh +++ b/preprocessor/ModelTree.hh @@ -196,7 +196,7 @@ protected: void compileModelEquations(ostream &code_file, unsigned int &instruction_number, const temporary_terms_t &tt, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic) const; //! Writes LaTeX model file - void writeLatexModelFile(const string &basename, ExprNodeOutputType output_type) const; + void writeLatexModelFile(const string &basename, ExprNodeOutputType output_type, const bool write_equation_tags = false) const; //! Sparse matrix of double to store the values of the Jacobian /*! First index is equation number, second index is endogenous type specific ID */ diff --git a/preprocessor/ParsingDriver.cc b/preprocessor/ParsingDriver.cc index c0f472916..bce540851 100644 --- a/preprocessor/ParsingDriver.cc +++ b/preprocessor/ParsingDriver.cc @@ -1963,9 +1963,9 @@ ParsingDriver::discretionary_policy() } void -ParsingDriver::write_latex_dynamic_model() +ParsingDriver::write_latex_dynamic_model(bool write_equation_tags) { - mod_file->addStatement(new WriteLatexDynamicModelStatement(mod_file->dynamic_model)); + mod_file->addStatement(new WriteLatexDynamicModelStatement(mod_file->dynamic_model, write_equation_tags)); } void diff --git a/preprocessor/ParsingDriver.hh b/preprocessor/ParsingDriver.hh index bc9729fff..b25105f43 100644 --- a/preprocessor/ParsingDriver.hh +++ b/preprocessor/ParsingDriver.hh @@ -559,7 +559,7 @@ public: //! Discretionary policy statement void discretionary_policy(); //! Adds a write_latex_dynamic_model statement - void write_latex_dynamic_model(); + void write_latex_dynamic_model(bool write_equation_tags); //! Adds a write_latex_static_model statement void write_latex_static_model(); //! Adds a write_latex_original_model statement From 59bafbf2943386002d6ec48eb65315fb201b3df6 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Tue, 4 Apr 2017 23:52:39 +0200 Subject: [PATCH 52/59] Add write_equation_tags option to integration test --- tests/TeX/fs2000_corr_ME.mod | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/TeX/fs2000_corr_ME.mod b/tests/TeX/fs2000_corr_ME.mod index dfb933ee1..4e67e98fe 100644 --- a/tests/TeX/fs2000_corr_ME.mod +++ b/tests/TeX/fs2000_corr_ME.mod @@ -71,7 +71,9 @@ del = 0.02; options_.TeX=1; model; +[name='technology growth'] dA = exp(gam+e_a); +[name='money supply rule'] log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; -P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; W = l/n; @@ -82,8 +84,11 @@ c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); P*c = m; m-1+d = l; e = exp(e_a); +[name='Production function'] y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +[name='observed output growth'] gy_obs = dA*y/y(-1); +[name='observed inflation'] gp_obs = (P/P(-1))*m(-1)/dA; end; @@ -134,7 +139,7 @@ stoch_simul(order=1,irf=20,graph_format=eps,periods=0,contemporaneous_correlatio write_latex_original_model; write_latex_static_model; -write_latex_dynamic_model; +write_latex_dynamic_model(write_equation_tags); write_latex_parameter_table; write_latex_definitions; From 753d8a17f0f84aca5f98fc4cde69a2496e159ac1 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 5 Apr 2017 10:28:37 +0200 Subject: [PATCH 53/59] preprocessor: move equation tags out of dmath mode, include all equation tags in one set of brackets, allow equation tags to be interpreted as latex, modify manual and test accordingly. #477 --- doc/dynare.texi | 3 ++- preprocessor/ModelTree.cc | 34 +++++++++++++++++++++++----------- tests/TeX/fs2000_corr_ME.mod | 2 +- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index d355a7688..13ac2279a 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -2149,7 +2149,8 @@ For the required @LaTeX{} packages, @pxref{write_latex_original_model}. @table @code @item write_equation_tags -Write the equation tags in the latex output +Write the equation tags in the @LaTeX{} output. NB: the equation tags will be +interpreted with @LaTeX{} markups. @end table diff --git a/preprocessor/ModelTree.cc b/preprocessor/ModelTree.cc index deec8b723..ed5ecdbeb 100644 --- a/preprocessor/ModelTree.cc +++ b/preprocessor/ModelTree.cc @@ -1573,19 +1573,31 @@ ModelTree::writeLatexModelFile(const string &basename, ExprNodeOutputType output for (int eq = 0; eq < (int) equations.size(); eq++) { - content_output << "\\begin{dmath}" << endl - << "% Equation " << eq+1 << endl; + content_output << "% Equation " << eq + 1 << endl; + bool wrote_eq_tag = false; if (write_equation_tags) - for (vector > >::const_iterator iteqt = equation_tags.begin(); - iteqt != equation_tags.end(); iteqt++) - if (iteqt->first == eq) - { - content_output << "[\\textrm{" << iteqt->second.first << "}"; - if (!empty(iteqt->second.second)) - content_output << " = \\textrm{``" << iteqt->second.second << "''}"; - content_output << "]"; - } + { + for (vector > >::const_iterator iteqt = equation_tags.begin(); + iteqt != equation_tags.end(); iteqt++) + if (iteqt->first == eq) + { + if (!wrote_eq_tag) + content_output << "\\noindent["; + else + content_output << ", "; + content_output << iteqt->second.first; + + if (!empty(iteqt->second.second)) + content_output << "= `" << iteqt->second.second << "'"; + + wrote_eq_tag = true; + } + } + if (wrote_eq_tag) + content_output << "]"; + + content_output << "\\begin{dmath}" << endl; // Here it is necessary to cast to superclass ExprNode, otherwise the overloaded writeOutput() method is not found dynamic_cast(equations[eq])->writeOutput(content_output, output_type); content_output << endl << "\\end{dmath}" << endl; diff --git a/tests/TeX/fs2000_corr_ME.mod b/tests/TeX/fs2000_corr_ME.mod index 4e67e98fe..c226ef835 100644 --- a/tests/TeX/fs2000_corr_ME.mod +++ b/tests/TeX/fs2000_corr_ME.mod @@ -71,7 +71,7 @@ del = 0.02; options_.TeX=1; model; -[name='technology growth'] +[name='technology growth: $\Delta A_{t}$', eq='\#1'] dA = exp(gam+e_a); [name='money supply rule'] log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; From 636b959a0279d7c3e03c83e440c9ff9882a8db47 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 5 Apr 2017 11:07:34 +0200 Subject: [PATCH 54/59] preprocessor: add warning for potential non-linearities in model declared linear. #1404 --- preprocessor/ModFile.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index 5719d0197..6d993d118 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -277,6 +277,19 @@ ModFile::checkPass(bool nostrict) || dynamic_model.isBinaryOpUsed(oDifferent))) warnings << "WARNING: you are using a function (max, min, abs, sign) or an operator (<, >, <=, >=, ==, !=) which is unsuitable for a stochastic context; see the reference manual, section about \"Expressions\", for more details." << endl; + if (linear && + (dynamic_model.isUnaryOpUsed(oSign) + || dynamic_model.isUnaryOpUsed(oAbs) + || dynamic_model.isBinaryOpUsed(oMax) + || dynamic_model.isBinaryOpUsed(oMin) + || dynamic_model.isBinaryOpUsed(oGreater) + || dynamic_model.isBinaryOpUsed(oLess) + || dynamic_model.isBinaryOpUsed(oGreaterEqual) + || dynamic_model.isBinaryOpUsed(oLessEqual) + || dynamic_model.isBinaryOpUsed(oEqualEqual) + || dynamic_model.isBinaryOpUsed(oDifferent))) + warnings << "WARNING: you have declared your model 'linear' but you are using a function (max, min, abs, sign) or an operator (<, >, <=, >=, ==, !=) which potentially makes it non-linear." << endl; + // Test if some estimated parameters are used within the values of shocks // statements (see issue #469) set parameters_intersect; From 00299a92c1f85d661e883d7ed8fcab3661672fc6 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 20 Mar 2017 20:29:19 +0100 Subject: [PATCH 55/59] Make sure options_.first_obs is properly set --- matlab/dynare_estimation_1.m | 8 +++++ matlab/dynare_estimation_init.m | 5 ++- tests/Makefile.am | 1 + tests/dates/dseries_interact.mod | 57 ++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 tests/dates/dseries_interact.mod diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index 6eb4361f8..0a27271de 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -44,6 +44,11 @@ end %store qz_criterium qz_criterium_old=options_.qz_criterium; +if isnan(options_.first_obs) + first_obs_nan_indicator=true; +else + first_obs_nan_indicator=false; +end % Set particle filter flag. if options_.order > 1 @@ -775,3 +780,6 @@ if reset_options_related_to_estimation options_.mode_compute = mode_compute_o; options_.mh_replic = mh_replic_o; end +if first_obs_nan_indicator + options_.first_obs=NaN; +end \ No newline at end of file diff --git a/matlab/dynare_estimation_init.m b/matlab/dynare_estimation_init.m index 7532f1432..b8e8b4ff6 100644 --- a/matlab/dynare_estimation_init.m +++ b/matlab/dynare_estimation_init.m @@ -527,13 +527,16 @@ if ~isempty(options_.datafile) end end +if isnan(options_.first_obs) + options_.first_obs=1; +end [dataset_, dataset_info, newdatainterfaceflag] = makedataset(options_, options_.dsge_var*options_.dsge_varlag, gsa_flag); %set options for old interface from the ones for new interface if ~isempty(dataset_) options_.nobs = dataset_.nobs; - options_.first_obs=double(dataset_.init); end + % setting steadystate_check_flag option if options_.diffuse_filter || options_.steadystate.nocheck steadystate_check_flag = 0; diff --git a/tests/Makefile.am b/tests/Makefile.am index 53bd9e9a3..3ff31697a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -12,6 +12,7 @@ MODFILES = \ observation_trends_and_prefiltering/MCMC/Trend_loglin_prefilt_first_obs_MC.mod \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_MC.mod \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_first_obs_MC.mod \ + dates/dseries_interact.mod \ estimation/slice/fs2000_slice.mod \ optimizers/fs2000_9.mod \ optimizers/fs2000_10.mod \ diff --git a/tests/dates/dseries_interact.mod b/tests/dates/dseries_interact.mod new file mode 100644 index 000000000..068d070b2 --- /dev/null +++ b/tests/dates/dseries_interact.mod @@ -0,0 +1,57 @@ +%% Mod-file tests interaction between estimation and shock_decomposition when dseries is used or not +var hh nn log_nn; +varexo eps_a; +parameters alfa nbar lambda betta rho_a std_a nn_init; + +nn_init = -0.1; +alfa = 0.05; +lambda = 0.054; +betta = 0.99; +nbar = 1; +rho_a = 0; +std_a = 1; + + +model(linear); + +hh = - alfa * nn + betta * ( hh(+1) + 0 * eps_a(+1) ) + eps_a; + +log_nn = log_nn(-1) + hh * lambda / (1-lambda); + +log_nn = ln(nbar) + nn; + +end; + +steady_state_model; +log_nn = log(nbar); +nn = 0; +hh = 0; +end; + +shocks; +var eps_a; stderr 1; +end; + +estimated_params; +alfa, beta_pdf, 0.1, 0.05; +std_a, inv_gamma_pdf, 0.05, 1; +end; + +varobs log_nn; + +if ~isoctave() && ~matlab_ver_less_than('8.4') + websave('data_uav.xlsx','http://www.dynare.org/Datasets/data_uav.xlsx', weboptions('Timeout', 30)) +else + urlwrite('http://www.dynare.org/Datasets/data_uav.xlsx','data_uav.xlsx') +end + +%reading Excel sheet from column A on creates quarterly dseries starting in +%1950 +estimation(first_obs=2,datafile=data_uav, xls_sheet=Tabelle1, xls_range=a1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; +shock_decomposition( parameter_set=posterior_median ) nn hh; + +%reading Excel sheet from column B on creates annual dseries starting with 1 +estimation(first_obs=2,datafile=data_uav, xls_sheet=Tabelle1, xls_range=b1:b54, mh_replic=2, mh_nblocks=1, mh_jscale=1.1, mh_drop=0.8, plot_priors=0, smoother) log_nn nn hh ; +shock_decomposition( parameter_set=posterior_median ) nn hh; + +delete('data_uav.xlsx') From d43af0e4d7e8a7b9704a92d31c822d8be78cb3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 5 Apr 2017 09:59:08 +0200 Subject: [PATCH 56/59] Fixed wrong spaces/tab in tests/Makefile.am. --- tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 3ff31697a..9c5f65daf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -12,7 +12,7 @@ MODFILES = \ observation_trends_and_prefiltering/MCMC/Trend_loglin_prefilt_first_obs_MC.mod \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_MC.mod \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_first_obs_MC.mod \ - dates/dseries_interact.mod \ + dates/dseries_interact.mod \ estimation/slice/fs2000_slice.mod \ optimizers/fs2000_9.mod \ optimizers/fs2000_10.mod \ From 19b206338d5b2a0a4662d1f12eddbb06ca0447c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 5 Apr 2017 10:22:07 +0200 Subject: [PATCH 57/59] Fixed tests/dates/fs2000.mod and added in testsuite. Provides an example showing how to directly pass a dseries object to the data command for estimation. --- tests/Makefile.am | 2 ++ tests/dates/fs2000.mod | 25 ++++++++++--------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9c5f65daf..7babdc8a3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -13,6 +13,7 @@ MODFILES = \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_MC.mod \ observation_trends_and_prefiltering/MCMC/Trend_prefilter_first_obs_MC.mod \ dates/dseries_interact.mod \ + dates/fs2000.mod \ estimation/slice/fs2000_slice.mod \ optimizers/fs2000_9.mod \ optimizers/fs2000_10.mod \ @@ -751,6 +752,7 @@ EXTRA_DIST = \ AIM/fsdat.m \ block_bytecode/run_ls2003.m \ bvar_a_la_sims/bvar_sample.m \ + dates/fsdat_simul.m \ external_function/extFunDeriv.m \ external_function/extFunNoDerivs.m \ external_function/extFunWithFirstAndSecondDerivs.m \ diff --git a/tests/dates/fs2000.mod b/tests/dates/fs2000.mod index 897f78b5f..957b4b745 100644 --- a/tests/dates/fs2000.mod +++ b/tests/dates/fs2000.mod @@ -1,12 +1,8 @@ -// See fs2000.mod in the examples/ directory for details on the model - var m P c e W R k d n l gy_obs gp_obs y dA; varexo e_a e_m; parameters alp bet gam mst rho psi del; -set_time(1950Q1); - alp = 0.33; bet = 0.99; gam = 0.003; @@ -79,19 +75,18 @@ stderr e_a, inv_gamma_pdf, 0.035449, inf; stderr e_m, inv_gamma_pdf, 0.008862, inf; end; +// List the observed variables. varobs gp_obs gy_obs; -options_.solve_tolf = 1e-12; - -//data(file=fsdat_simul, first_obs=1950Q3, last_obs=1998Q1); - +// Instantiate a dseries object from an m file. Note that the dseries object has more than two variables. ts = dseries('fsdat_simul.m'); -rr = 1950Q3:(1950Q1+ts.nobs); -nn = length(rr); -ds = ts(rr); -ds.save('fsdat_simul2','m'); -estimation(order=1,datafile=fsdat_simul2,loglinear,mh_replic=0); +// Load directly the dseries object as data for the estimation. The declared observed variables must be in the dseries object ts. +data(series=ts, first_obs=1950Q3, last_obs=2000Q3); + +// Print the first date of the sample. +disp('First date is $1950Q3') // disp('First date is 1950Q3'), without the $ symbol, would trigger an error because of the substitution of 1950Q3 by dates('1950Q3') + +// Run the estimation. Note that we do not have a datafile option, because of the data command used above. +estimation(order=1, loglinear, mh_replic=0); -disp('First date is $1950Q3') -// disp('Last date is 2000Q1') // This line would trigger an error because of the substitution of 2000Q1 by dates('2000Q1') From 8a18e87d986b3d2e0c16a7d1be4313a31725e2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 5 Apr 2017 11:01:43 +0200 Subject: [PATCH 58/59] Removed persistent variables in evaluate_smoother routine. Closes #1412. --- matlab/evaluate_smoother.m | 14 +++++--------- matlab/list_of_functions_to_be_cleared.m | 2 +- matlab/realtime_shock_decomposition.m | 2 -- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/matlab/evaluate_smoother.m b/matlab/evaluate_smoother.m index 35ed0ea3d..fb3eaad7a 100644 --- a/matlab/evaluate_smoother.m +++ b/matlab/evaluate_smoother.m @@ -37,7 +37,7 @@ function [oo_,M_,options_,bayestopt_,Smoothed_variables_declaration_order_deviat % [1] This function use persistent variables for the dataset and the description of the missing observations. Consequently, if this function % is called more than once (by changing the value of parameters) the sample *must not* change. -% Copyright (C) 2010-2016 Dynare Team +% Copyright (C) 2010-2017 Dynare Team % % This file is part of Dynare. % @@ -54,21 +54,17 @@ function [oo_,M_,options_,bayestopt_,Smoothed_variables_declaration_order_deviat % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -persistent dataset_ dataset_info - -%store qz_criterium +% store qz_criterium qz_criterium_old=options_.qz_criterium; if ischar(parameters) && strcmp(parameters,'calibration') options_.smoother=1; end -if isempty(dataset_) || isempty(bayestopt_) || (options_.nobs ~= dataset_.nobs) - [dataset_,dataset_info,xparam1, hh, M_, options_, oo_, estim_params_,bayestopt_] = dynare_estimation_init(var_list, M_.fname, [], M_, options_, oo_, estim_params_, bayestopt_); -else +[dataset_,dataset_info,xparam1, hh, M_, options_, oo_, estim_params_,bayestopt_] = dynare_estimation_init(var_list, M_.fname, [], M_, options_, oo_, estim_params_, bayestopt_); + % set the qz_criterium - options_=select_qz_criterium_value(options_); -end +options_=select_qz_criterium_value(options_); if nargin==0 parameters = 'posterior_mode'; diff --git a/matlab/list_of_functions_to_be_cleared.m b/matlab/list_of_functions_to_be_cleared.m index e482add52..a9d182dae 100644 --- a/matlab/list_of_functions_to_be_cleared.m +++ b/matlab/list_of_functions_to_be_cleared.m @@ -1 +1 @@ -list_of_functions = {'discretionary_policy_1', 'dsge_var_likelihood', 'dyn_first_order_solver', 'dyn_waitbar', 'ep_residuals', 'evaluate_likelihood', 'evaluate_smoother', 'prior_draw_gsa', 'identification_analysis', 'computeDLIK', 'univariate_computeDLIK', 'metropolis_draw', 'flag_implicit_skip_nan', 'moment_function', 'non_linear_dsge_likelihood', 'mr_hessian', 'masterParallel', 'auxiliary_initialization', 'auxiliary_particle_filter', 'conditional_filter_proposal', 'conditional_particle_filter', 'gaussian_filter', 'gaussian_filter_bank', 'gaussian_mixture_filter', 'gaussian_mixture_filter_bank', 'Kalman_filter', 'online_auxiliary_filter', 'sequential_importance_particle_filter', 'solve_model_for_online_filter', 'perfect_foresight_simulation', 'prior_draw', 'priordens', 'smm_objective'}; \ No newline at end of file +list_of_functions = {'discretionary_policy_1', 'dsge_var_likelihood', 'dyn_first_order_solver', 'dyn_waitbar', 'ep_residuals', 'evaluate_likelihood', 'prior_draw_gsa', 'identification_analysis', 'computeDLIK', 'univariate_computeDLIK', 'metropolis_draw', 'flag_implicit_skip_nan', 'moment_function', 'non_linear_dsge_likelihood', 'mr_hessian', 'masterParallel', 'auxiliary_initialization', 'auxiliary_particle_filter', 'conditional_filter_proposal', 'conditional_particle_filter', 'gaussian_filter', 'gaussian_filter_bank', 'gaussian_mixture_filter', 'gaussian_mixture_filter_bank', 'Kalman_filter', 'online_auxiliary_filter', 'sequential_importance_particle_filter', 'solve_model_for_online_filter', 'perfect_foresight_simulation', 'prior_draw', 'priordens', 'smm_objective'}; \ No newline at end of file diff --git a/matlab/realtime_shock_decomposition.m b/matlab/realtime_shock_decomposition.m index 4e6941d09..2e47066e1 100644 --- a/matlab/realtime_shock_decomposition.m +++ b/matlab/realtime_shock_decomposition.m @@ -105,7 +105,6 @@ end for j=presample+1:nobs, % evalin('base',['options_.nobs=' int2str(j) ';']) options_.nobs=j; - clear('evaluate_smoother'); [oo, M_, junk2, junk3, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); % reduced form @@ -259,5 +258,4 @@ if forecast_ oo_.realtime_forecast_shock_decomposition.pool = zfrcst; end -clear('evaluate_smoother'); skipline() From 857fc3c4f4e3c1bc820b46ffbd0c3303abc1d143 Mon Sep 17 00:00:00 2001 From: Ferhat Mihoubi Date: Fri, 24 Mar 2017 23:15:25 +0100 Subject: [PATCH 59/59] Corrects several bugs related to bytecode: - Memory allocation is checked - The amount of memory allocated for conditional forecast is corrected --- mex/sources/bytecode/ErrorHandling.hh | 34 ++-- mex/sources/bytecode/Evaluate.cc | 11 +- mex/sources/bytecode/Evaluate.hh | 4 +- mex/sources/bytecode/Interpreter.cc | 127 ++++++++------ mex/sources/bytecode/Interpreter.hh | 2 +- mex/sources/bytecode/Mem_Mngr.cc | 37 ++-- mex/sources/bytecode/Mem_Mngr.hh | 14 +- mex/sources/bytecode/SparseMatrix.cc | 238 +++++++++++++++++++------- mex/sources/bytecode/SparseMatrix.hh | 4 +- mex/sources/bytecode/bytecode.cc | 33 ++-- 10 files changed, 342 insertions(+), 162 deletions(-) diff --git a/mex/sources/bytecode/ErrorHandling.hh b/mex/sources/bytecode/ErrorHandling.hh index 760d0ec7c..39fc01ec3 100644 --- a/mex/sources/bytecode/ErrorHandling.hh +++ b/mex/sources/bytecode/ErrorHandling.hh @@ -24,8 +24,20 @@ #include #include #include +#include #define BYTE_CODE #include "CodeInterpreter.hh" + +#define _USE_MATH_DEFINES +#include +#ifndef M_PI +#define M_PI (3.14159265358979323846) +#endif + +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880 +#endif + #ifdef DEBUG_EX # include # include "mex_interface.hh" @@ -37,15 +49,6 @@ # define CHAR_LENGTH 2 #endif -//Work around for: https://sourceware.org/bugzilla/show_bug.cgi?id=19439 -#ifndef __builtin_isnan -# define isnan(x) std::isnan(x) -#endif - -#ifndef __builtin_isinf -# define isinf(x) std::isinf(x) -#endif - #ifdef _MSC_VER #include #define M_E 2.71828182845904523536 @@ -250,7 +253,7 @@ public: value2(value2_arg) { ostringstream tmp; - if (abs(value1) > 1e-10 ) + if (fabs(value1) > 1e-10 ) tmp << " with X=" << value1 << "\n"; else tmp << " with X=" << value1 << " and a=" << value2 << "\n"; @@ -2231,6 +2234,17 @@ public: it_code_ret = it_code; return (tmp_out.str()); } + void + +inline test_mxMalloc(void* z, int line, string file, string func, int amount) +{ + if (!z && (amount > 0)) + { + ostringstream tmp; + tmp << " mxMalloc: out of memory " << amount << " bytes required at line " << line << " in function " << func << " (file " << file; + throw FatalExceptionHandling(tmp.str()); + } +} }; diff --git a/mex/sources/bytecode/Evaluate.cc b/mex/sources/bytecode/Evaluate.cc index b0208bc0e..0c7e242a4 100644 --- a/mex/sources/bytecode/Evaluate.cc +++ b/mex/sources/bytecode/Evaluate.cc @@ -140,7 +140,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int if ( utIsInterruptPending() ) throw UserExceptionHandling(); #endif - + while (go_on) { #ifdef DEBUG @@ -1172,6 +1172,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int case ExternalFunctionWithFirstandSecondDerivative: { input_arguments = (mxArray **) mxMalloc(nb_input_arguments * sizeof(mxArray *)); + test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *)); #ifdef DEBUG mexPrintf("Stack.size()=%d\n", Stack.size()); mexEvalString("drawnow;"); @@ -1188,7 +1189,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int tmp << " external function: " << function_name << " not found"; throw FatalExceptionHandling(tmp.str()); } - + double *rr = mxGetPr(output_arguments[0]); Stack.push(*rr); if (function_type == ExternalFunctionWithFirstDerivative || function_type == ExternalFunctionWithFirstandSecondDerivative) @@ -1215,6 +1216,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int case ExternalFunctionNumericalFirstDerivative: { input_arguments = (mxArray **) mxMalloc((nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)); + test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, (nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)); mxArray *vv = mxCreateString(arg_func_name.c_str()); input_arguments[0] = vv; vv = mxCreateDoubleScalar(fc->get_row()); @@ -1254,6 +1256,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int case ExternalFunctionFirstDerivative: { input_arguments = (mxArray **) mxMalloc(nb_input_arguments * sizeof(mxArray *)); + test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *)); for (unsigned int i = 0; i < nb_input_arguments; i++) { mxArray *vv = mxCreateDoubleScalar(Stack.top()); @@ -1277,6 +1280,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int case ExternalFunctionNumericalSecondDerivative: { input_arguments = (mxArray **) mxMalloc((nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)); + test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, (nb_input_arguments+1+nb_add_input_arguments) * sizeof(mxArray *)); mxArray *vv = mxCreateString(arg_func_name.c_str()); input_arguments[0] = vv; vv = mxCreateDoubleScalar(fc->get_row()); @@ -1315,6 +1319,7 @@ Evaluate::compute_block_time(const int Per_u_, const bool evaluate, /*const int case ExternalFunctionSecondDerivative: { input_arguments = (mxArray **) mxMalloc(nb_input_arguments * sizeof(mxArray *)); + test_mxMalloc(input_arguments, __LINE__, __FILE__, __func__, nb_input_arguments * sizeof(mxArray *)); for (unsigned int i = 0; i < nb_input_arguments; i++) { mxArray *vv = mxCreateDoubleScalar(Stack.top()); @@ -1583,7 +1588,9 @@ void Evaluate::solve_simple_over_periods(const bool forward) { g1 = (double *) mxMalloc(sizeof(double)); + test_mxMalloc(g1, __LINE__, __FILE__, __func__, sizeof(double)); r = (double *) mxMalloc(sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, sizeof(double)); start_code = it_code; if (steady_state) { diff --git a/mex/sources/bytecode/Evaluate.hh b/mex/sources/bytecode/Evaluate.hh index 33621b7a4..e5fa778e3 100644 --- a/mex/sources/bytecode/Evaluate.hh +++ b/mex/sources/bytecode/Evaluate.hh @@ -63,13 +63,13 @@ protected: double solve_tolf; bool GaussSeidel; map, int>, int> IM_i; - int equation, derivative_equation, derivative_variable; + int equation, derivative_equation, derivative_variable; string filename; int stack_solve_algo, solve_algo; bool global_temporary_terms; bool print, print_error; double res1, res2, max_res; - int max_res_idx; + int max_res_idx; vector Block_Contain; int size; diff --git a/mex/sources/bytecode/Interpreter.cc b/mex/sources/bytecode/Interpreter.cc index f85c9e709..48c600190 100644 --- a/mex/sources/bytecode/Interpreter.cc +++ b/mex/sources/bytecode/Interpreter.cc @@ -77,7 +77,7 @@ Interpreter::Interpreter(double *params_arg, double *y_arg, double *ya_arg, doub GlobalTemporaryTerms = GlobalTemporaryTerms_arg; print_error = print_error_arg; //steady_state = steady_state_arg; - print_it = print_it_arg; + print_it = print_it_arg; } @@ -117,8 +117,10 @@ Interpreter::evaluate_a_block(bool initialization) } break; case SOLVE_FORWARD_SIMPLE: - g1 = (double *) mxMalloc(size*size*sizeof(double)); - r = (double *) mxMalloc(size*sizeof(double)); + g1 = (double *) mxMalloc(size*size*sizeof(double)); + test_mxMalloc(g1, __LINE__, __FILE__, __func__, size*size*sizeof(double)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); if (steady_state) { compute_block_time(0, true, /*block_num, size, steady_state,*/ false); @@ -144,8 +146,8 @@ Interpreter::evaluate_a_block(bool initialization) for (int j = 0; j < size; j++) residual[it_*size+j] = r[j]; } - } - mxFree(g1); + } + mxFree(g1); mxFree(r); break; case SOLVE_FORWARD_COMPLETE: @@ -157,7 +159,8 @@ Interpreter::evaluate_a_block(bool initialization) #ifdef DEBUG mexPrintf("in SOLVE_FORWARD_COMPLETE r = mxMalloc(%d*sizeof(double))\n", size); #endif - r = (double *) mxMalloc(size*sizeof(double)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); if (steady_state) { compute_block_time(0, true, /*block_num, size, steady_state,*/ false); @@ -215,8 +218,10 @@ Interpreter::evaluate_a_block(bool initialization) } break; case SOLVE_BACKWARD_SIMPLE: - g1 = (double *) mxMalloc(size*size*sizeof(double)); - r = (double *) mxMalloc(size*sizeof(double)); + g1 = (double *) mxMalloc(size*size*sizeof(double)); + test_mxMalloc(g1, __LINE__, __FILE__, __func__, size*size*sizeof(double)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); if (steady_state) { compute_block_time(0, true, /*block_num, size, steady_state,*/ false); @@ -252,7 +257,8 @@ Interpreter::evaluate_a_block(bool initialization) fixe_u(&u, u_count_int, u_count_int); Read_SparseMatrix(bin_base_name, size, 1, 0, 0, false, stack_solve_algo, solve_algo); } - r = (double *) mxMalloc(size*sizeof(double)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); if (steady_state) { compute_block_time(0, true, /*block_num, size, steady_state,*/ false); @@ -289,7 +295,8 @@ Interpreter::evaluate_a_block(bool initialization) Read_SparseMatrix(bin_base_name, size, periods, y_kmin, y_kmax, true, stack_solve_algo, solve_algo); } u_count = u_count_int*(periods+y_kmax+y_kmin); - r = (double *) mxMalloc(size*sizeof(double)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); begining = it_code; for (it_ = y_kmin; it_ < periods+y_kmin; it_++) { @@ -430,9 +437,12 @@ Interpreter::simulate_a_block(vector_table_conditional_local_type vector_table_c Read_SparseMatrix(bin_base_name, size, periods, y_kmin, y_kmax, true, stack_solve_algo, solve_algo); } u_count = u_count_int*(periods+y_kmax+y_kmin); - r = (double *) mxMalloc(size*sizeof(double)); - res = (double *) mxMalloc(size*periods*sizeof(double)); - y_save = (double *) mxMalloc(y_size*sizeof(double)*(periods+y_kmax+y_kmin)); + r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); + res = (double *) mxMalloc(size*periods*sizeof(double)); + test_mxMalloc(res, __LINE__, __FILE__, __func__, size*periods*sizeof(double)); + y_save = (double *) mxMalloc(y_size*sizeof(double)*(periods+y_kmax+y_kmin)); + test_mxMalloc(y_save, __LINE__, __FILE__, __func__, y_size*sizeof(double)*(periods+y_kmax+y_kmin)); start_code = it_code; iter = 0; if (!is_linear) @@ -457,7 +467,7 @@ Interpreter::simulate_a_block(vector_table_conditional_local_type vector_table_c //mexPrintf("y[%d] = %f\n", it1->var_endo + y_kmin * size, y[it1->var_endo + y_kmin * size]); y[it1->var_endo + y_kmin * size] = it1->constrained_value; } - + } } compute_complete_2b(false, &res1, &res2, &max_res, &max_res_idx); @@ -498,13 +508,19 @@ Interpreter::simulate_a_block(vector_table_conditional_local_type vector_table_c Simulate_Newton_Two_Boundaries(block_num, symbol_table_endo_nbr, y_kmin, y_kmax, size, periods, cvg, minimal_solving_periods, stack_solve_algo, endo_name_length, P_endo_names, vector_table_conditional_local); max_res = 0; max_res_idx = 0; } - it_code = end_code; - mxFree(r); - mxFree(y_save); - mxFree(u); - mxFree(index_vara); - mxFree(index_equa); - mxFree(res); + it_code = end_code; + if (r) + mxFree(r); + if (y_save) + mxFree(y_save); + if (u) + mxFree(u); + if (index_vara) + mxFree(index_vara); + if (index_equa) + mxFree(index_equa); + if (res) + mxFree(res); memset(direction, 0, size_of_direction); End_Solver(); break; @@ -558,14 +574,14 @@ Interpreter::print_a_block() } } -void +void Interpreter::ReadCodeFile(string file_name, CodeLoad &code) { if (steady_state) file_name += "_static"; else file_name += "_dynamic"; - + //First read and store in memory the code code_liste = code.get_op_code(file_name); EQN_block_number = code.get_block_number(); @@ -653,9 +669,7 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo Block_Contain = fb->get_Block_Contain(); it_code++; if (constrained) - { - check_for_controlled_exo_validity(fb,sconstrained_extended_path); - } + check_for_controlled_exo_validity(fb,sconstrained_extended_path); set_block(fb->get_size(), fb->get_type(), file_name, bin_basename, Block_Count, fb->get_is_linear(), fb->get_endo_nbr(), fb->get_Max_Lag(), fb->get_Max_Lead(), fb->get_u_count_int(), block); if (print) print_a_block(); @@ -690,7 +704,7 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo #ifdef DEBUG mexPrintf("endo in Block_Count=%d, block=%d, type=%d, steady_state=%d, print_it=%d, Block_Count=%d, fb->get_is_linear()=%d, fb->get_endo_nbr()=%d, fb->get_Max_Lag()=%d, fb->get_Max_Lead()=%d, fb->get_u_count_int()=%d\n", Block_Count, fb->get_size(), fb->get_type(), steady_state, print_it, Block_Count, fb->get_is_linear(), fb->get_endo_nbr(), fb->get_Max_Lag(), fb->get_Max_Lead(), fb->get_u_count_int()); -#endif +#endif bool result; if (sconstrained_extended_path.size()) { @@ -702,7 +716,7 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo jacobian_other_endo_block.push_back(mxCreateDoubleMatrix(fb->get_size(), fb->get_nb_col_other_endo_jacob(), mxREAL)); residual = vector(fb->get_size()*(periods+y_kmin)); result = simulate_a_block(vector_table_conditional_local); - + mxDestroyArray(jacobian_block.back()); jacobian_block.pop_back(); mxDestroyArray(jacobian_exo_block.back()); @@ -713,10 +727,7 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo jacobian_other_endo_block.pop_back(); } else - { - result = simulate_a_block(vector_table_conditional_local); - } - + result = simulate_a_block(vector_table_conditional_local); //mexPrintf("OKe\n"); if (max_res > max_res_local) { @@ -749,8 +760,9 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo #endif var = ((FDIMT_ *) it_code->second)->get_size(); if (T) - mxFree(T); - T = (double *) mxMalloc(var*(periods+y_kmin+y_kmax)*sizeof(double)); + mxFree(T); + T = (double *) mxMalloc(var*(periods+y_kmin+y_kmax)*sizeof(double)); + test_mxMalloc(T, __LINE__, __FILE__, __func__, var*(periods+y_kmin+y_kmax)*sizeof(double)); if (block >= 0) { it_code = code_liste.begin() + code.get_begin_block(block); @@ -775,8 +787,12 @@ Interpreter::MainLoop(string bin_basename, CodeLoad code, bool evaluate, int blo GlobalTemporaryTerms = mxCreateDoubleMatrix(var, 1, mxREAL); T = mxGetPr(GlobalTemporaryTerms); } - else - T = (double *) mxMalloc(var*sizeof(double)); + else + { + T = (double *) mxMalloc(var*sizeof(double)); + test_mxMalloc(T, __LINE__, __FILE__, __func__, var*sizeof(double)); + } + if (block >= 0) it_code = code_liste.begin() + code.get_begin_block(block); @@ -842,9 +858,18 @@ Interpreter::extended_path(string file_name, string bin_basename, bool evaluate, ReadCodeFile(file_name, code); it_code = code_liste.begin(); it_code_type Init_Code = code_liste.begin(); - size_t size_of_direction = y_size*(periods + y_kmax + y_kmin)*sizeof(double); + /*size_t size_of_direction = y_size*(periods + y_kmax + y_kmin)*sizeof(double); double *y_save = (double *) mxMalloc(size_of_direction); - double *x_save = (double *) mxMalloc((periods + y_kmax + y_kmin) * col_x *sizeof(double)); + double *x_save = (double *) mxMalloc((periods + y_kmax + y_kmin) * col_x *sizeof(double));*/ + int max_periods = max(periods, nb_periods); + size_t size_of_direction = y_size*(max_periods + y_kmax + y_kmin)*sizeof(double); + double *y_save = (double *) mxMalloc(size_of_direction); + test_mxMalloc(y_save, __LINE__, __FILE__, __func__, size_of_direction); + + + double *x_save = (double *) mxMalloc((max_periods + y_kmax + y_kmin) * col_x *sizeof(double)); + test_mxMalloc(x_save, __LINE__, __FILE__, __func__, (max_periods + y_kmax + y_kmin) * col_x *sizeof(double)); + vector_table_conditional_local_type vector_table_conditional_local; vector_table_conditional_local.clear(); @@ -896,7 +921,7 @@ Interpreter::extended_path(string file_name, string bin_basename, bool evaluate, vector_table_conditional_local = table_conditional_global[t]; if (t < nb_periods) MainLoop(bin_basename, code, evaluate, block, false, true, sconstrained_extended_path, vector_table_conditional_local); - else + else MainLoop(bin_basename, code, evaluate, block, true, true, sconstrained_extended_path, vector_table_conditional_local); for (int j = 0; j < y_size; j++) { @@ -909,7 +934,7 @@ Interpreter::extended_path(string file_name, string bin_basename, bool evaluate, x_save[t + y_kmin + j * nb_row_x] = x[y_kmin + j * nb_row_x]; x[y_kmin + j * nb_row_x] = x_save[t + 1 + y_kmin + j * nb_row_x]; } - + if (old_print_it) { ostringstream res, res1; @@ -921,21 +946,23 @@ Interpreter::extended_path(string file_name, string bin_basename, bool evaluate, mexPrintf(line.c_str()); mexEvalString("drawnow;"); } - } + } print_it = old_print_it; for (int j = 0; j < y_size; j++) { for(int k = nb_periods; k < periods; k++) y_save[j + (k + y_kmin) * y_size] = y[ j + ( k - (nb_periods-1) + y_kmin) * y_size]; - } + } for (int i = 0; i < (y_size*(periods + y_kmax + y_kmin)); i++) - y[i] = y_save[i]; + y[i] = y_save[i]; for (int j = 0; j < col_x* nb_row_x; j++) x[j] = x_save[j]; - - mxFree(Init_Code->second); - mxFree(y_save); - mxFree(x_save); + if (Init_Code->second) + mxFree(Init_Code->second); + if (y_save) + mxFree(y_save); + if (x_save) + mxFree(x_save); nb_blocks = Block_Count+1; if (T && !global_temporary_terms) mxFree(T); @@ -947,7 +974,7 @@ Interpreter::compute_blocks(string file_name, string bin_basename, bool evaluate { CodeLoad code; ReadCodeFile(file_name, code); - + //The big loop on intructions it_code = code_liste.begin(); it_code_type Init_Code = it_code; @@ -955,8 +982,8 @@ Interpreter::compute_blocks(string file_name, string bin_basename, bool evaluate vector_table_conditional_local_type vector_table_conditional_local_junk; MainLoop(bin_basename, code, evaluate, block, true, false, s_plan_junk, vector_table_conditional_local_junk); - - + + mxFree(Init_Code->second); nb_blocks = Block_Count+1; if (T && !global_temporary_terms) diff --git a/mex/sources/bytecode/Interpreter.hh b/mex/sources/bytecode/Interpreter.hh index a3d9973ef..8e8a00e0a 100644 --- a/mex/sources/bytecode/Interpreter.hh +++ b/mex/sources/bytecode/Interpreter.hh @@ -27,7 +27,7 @@ #define BYTE_CODE #include "CodeInterpreter.hh" #include "SparseMatrix.hh" -#include "Evaluate.hh" +#include "Evaluate.hh" #ifdef LINBCG # include "linbcg.hh" #endif diff --git a/mex/sources/bytecode/Mem_Mngr.cc b/mex/sources/bytecode/Mem_Mngr.cc index b239b60df..d9d20f7a8 100644 --- a/mex/sources/bytecode/Mem_Mngr.cc +++ b/mex/sources/bytecode/Mem_Mngr.cc @@ -24,7 +24,7 @@ Mem_Mngr::Mem_Mngr() swp_f = false; swp_f_b = 0; } -void +/*void Mem_Mngr::Print_heap() { unsigned int i; @@ -32,7 +32,8 @@ Mem_Mngr::Print_heap() for (i = 0; i < CHUNK_SIZE; i++) mexPrintf("%3d ", i); mexPrintf("\n"); -} +} +*/ void Mem_Mngr::init_Mem() @@ -49,7 +50,7 @@ Mem_Mngr::init_Mem() void Mem_Mngr::fixe_file_name(string filename_arg) { - filename = filename_arg; + filename_mem = filename_arg; } void @@ -77,26 +78,26 @@ Mem_Mngr::mxMalloc_NZE() { CHUNK_SIZE += CHUNK_BLCK_SIZE; Nb_CHUNK++; - NZE_Mem = (NonZeroElem *) mxMalloc(CHUNK_BLCK_SIZE*sizeof(NonZeroElem)); /*The block of memory allocated*/ + NZE_Mem = (NonZeroElem *) mxMalloc(CHUNK_BLCK_SIZE*sizeof(NonZeroElem)); /*The block of memory allocated*/ + error_msg.test_mxMalloc(NZE_Mem, __LINE__, __FILE__, __func__, CHUNK_BLCK_SIZE*sizeof(NonZeroElem)); NZE_Mem_Allocated.push_back(NZE_Mem); if (!NZE_Mem) - { - mexPrintf("Not enough memory available\n"); - mexEvalString("drawnow;"); + mexPrintf("Not enough memory available\n"); + if (NZE_Mem_add) + { + NZE_Mem_add = (NonZeroElem **) mxRealloc(NZE_Mem_add, CHUNK_SIZE*sizeof(NonZeroElem *)); /*We have to redefine the size of pointer on the memory*/ + error_msg.test_mxMalloc(NZE_Mem_add , __LINE__, __FILE__, __func__, CHUNK_SIZE*sizeof(NonZeroElem *)); } - if (NZE_Mem_add) - NZE_Mem_add = (NonZeroElem **) mxRealloc(NZE_Mem_add, CHUNK_SIZE*sizeof(NonZeroElem *)); /*We have to redefine the size of pointer on the memory*/ - else - NZE_Mem_add = (NonZeroElem **) mxMalloc(CHUNK_SIZE*sizeof(NonZeroElem *)); /*We have to define the size of pointer on the memory*/ + else + { + NZE_Mem_add = (NonZeroElem **) mxMalloc(CHUNK_SIZE*sizeof(NonZeroElem *)); /*We have to define the size of pointer on the memory*/ + error_msg.test_mxMalloc(NZE_Mem_add , __LINE__, __FILE__, __func__, CHUNK_SIZE*sizeof(NonZeroElem *)); + } + if (!NZE_Mem_add) - { - mexPrintf("Not enough memory available\n"); - mexEvalString("drawnow;"); - } + mexPrintf("Not enough memory available\n"); for (i = CHUNK_heap_pos; i < CHUNK_SIZE; i++) - { - NZE_Mem_add[i] = (NonZeroElem *) (NZE_Mem+(i-CHUNK_heap_pos)); - } + NZE_Mem_add[i] = (NonZeroElem *) (NZE_Mem+(i-CHUNK_heap_pos)); i = CHUNK_heap_pos++; return (NZE_Mem_add[i]); } diff --git a/mex/sources/bytecode/Mem_Mngr.hh b/mex/sources/bytecode/Mem_Mngr.hh index be3c3c404..f57a4d312 100644 --- a/mex/sources/bytecode/Mem_Mngr.hh +++ b/mex/sources/bytecode/Mem_Mngr.hh @@ -19,15 +19,16 @@ #ifndef MEM_MNGR_HH_INCLUDED #define MEM_MNGR_HH_INCLUDED - + +#include "ErrorHandling.hh" #include #include #ifndef DEBUG_EX # include #else # include "mex_interface.hh" -#endif -using namespace std; +#endif +//using namespace std; struct NonZeroElem { @@ -41,7 +42,7 @@ typedef vector v_NonZeroElem; class Mem_Mngr { public: - void Print_heap(); + //void Print_heap(); void init_Mem(); void mxFree_NZE(void *pos); NonZeroElem *mxMalloc_NZE(); @@ -49,7 +50,8 @@ public: void Free_All(); Mem_Mngr(); void fixe_file_name(string filename_arg); - bool swp_f; + bool swp_f; + ErrorMsg error_msg; private: v_NonZeroElem Chunk_Stack; unsigned int CHUNK_SIZE, CHUNK_BLCK_SIZE, Nb_CHUNK; @@ -59,7 +61,7 @@ private: vector NZE_Mem_Allocated; int swp_f_b; fstream SaveCode_swp; - string filename; + string filename_mem; }; #endif diff --git a/mex/sources/bytecode/SparseMatrix.cc b/mex/sources/bytecode/SparseMatrix.cc index 840f302a6..8cd42ca09 100644 --- a/mex/sources/bytecode/SparseMatrix.cc +++ b/mex/sources/bytecode/SparseMatrix.cc @@ -183,7 +183,7 @@ dynSparseMatrix::dynSparseMatrix() } dynSparseMatrix::dynSparseMatrix(const int y_size_arg, const int y_kmin_arg, const int y_kmax_arg, const bool print_it_arg, const bool steady_state_arg, const int periods_arg, - const int minimal_solving_periods_arg, const double slowc_arg + const int minimal_solving_periods_arg, const double slowc_arg #ifdef CUDA , const int CUDA_device_arg, cublasHandle_t cublas_handle_arg, cusparseHandle_t cusparse_handle_arg, cusparseMatDescr_t descr_arg #endif @@ -206,7 +206,7 @@ dynSparseMatrix::dynSparseMatrix(const int y_size_arg, const int y_kmin_arg, con IM_i.clear(); lu_inc_tol = 1e-10; Symbolic = NULL; - Numeric = NULL; + Numeric = NULL; #ifdef CUDA CUDA_device = CUDA_device_arg; cublas_handle = cublas_handle_arg; @@ -621,7 +621,8 @@ dynSparseMatrix::Read_SparseMatrix(string file_name, const int Size, int periods } } } - index_vara = (int *) mxMalloc(Size*(periods+y_kmin+y_kmax)*sizeof(int)); + index_vara = (int *) mxMalloc(Size*(periods+y_kmin+y_kmax)*sizeof(int)); + test_mxMalloc(index_vara, __LINE__, __FILE__, __func__, Size*(periods+y_kmin+y_kmax)*sizeof(int)); for (int j = 0; j < Size; j++) SaveCode.read(reinterpret_cast(&index_vara[j]), sizeof(*index_vara)); if (periods+y_kmin+y_kmax > 1) @@ -630,7 +631,8 @@ dynSparseMatrix::Read_SparseMatrix(string file_name, const int Size, int periods for (int j = 0; j < Size; j++) index_vara[j+Size*i] = index_vara[j+Size*(i-1)] + y_size; } - index_equa = (int *) mxMalloc(Size*sizeof(int)); + index_equa = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(index_equa, __LINE__, __FILE__, __func__, Size*sizeof(int)); for (int j = 0; j < Size; j++) SaveCode.read(reinterpret_cast(&index_equa[j]), sizeof(*index_equa)); } @@ -641,25 +643,38 @@ dynSparseMatrix::Simple_Init(int Size, map, int>, int> &IM, int i, eq, var, lag; map, int>, int>::iterator it4; NonZeroElem *first; - pivot = (int *) mxMalloc(Size*sizeof(int)); - pivot_save = (int *) mxMalloc(Size*sizeof(int)); - pivotk = (int *) mxMalloc(Size*sizeof(int)); - pivotv = (double *) mxMalloc(Size*sizeof(double)); - pivotva = (double *) mxMalloc(Size*sizeof(double)); - b = (int *) mxMalloc(Size*sizeof(int)); + pivot = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivot, __LINE__, __FILE__, __func__, Size*sizeof(int)); + pivot_save = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivot_save, __LINE__, __FILE__, __func__, Size*sizeof(int)); + pivotk = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivotk, __LINE__, __FILE__, __func__, Size*sizeof(int)); + pivotv = (double *) mxMalloc(Size*sizeof(double)); + test_mxMalloc(pivotv, __LINE__, __FILE__, __func__, Size*sizeof(double)); + pivotva = (double *) mxMalloc(Size*sizeof(double)); + test_mxMalloc(pivotva, __LINE__, __FILE__, __func__, Size*sizeof(double)); + b = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(b, __LINE__, __FILE__, __func__, Size*sizeof(int)); line_done = (bool *) mxMalloc(Size*sizeof(bool)); + test_mxMalloc(line_done, __LINE__, __FILE__, __func__, Size*sizeof(bool)); mem_mngr.init_CHUNK_BLCK_SIZE(u_count); g_save_op = NULL; g_nop_all = 0; i = Size*sizeof(NonZeroElem *); - FNZE_R = (NonZeroElem **) mxMalloc(i); - FNZE_C = (NonZeroElem **) mxMalloc(i); - NonZeroElem **temp_NZE_R = (NonZeroElem **) mxMalloc(i); - NonZeroElem **temp_NZE_C = (NonZeroElem **) mxMalloc(i); + FNZE_R = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(FNZE_R, __LINE__, __FILE__, __func__, i); + FNZE_C = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(FNZE_C, __LINE__, __FILE__, __func__, i); + NonZeroElem **temp_NZE_R = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(*temp_NZE_R, __LINE__, __FILE__, __func__, i); + NonZeroElem **temp_NZE_C = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(*temp_NZE_C, __LINE__, __FILE__, __func__, i); i = Size*sizeof(int); - NbNZRow = (int *) mxMalloc(i); - NbNZCol = (int *) mxMalloc(i); + NbNZRow = (int *) mxMalloc(i); + test_mxMalloc(NbNZRow, __LINE__, __FILE__, __func__, i); + NbNZCol = (int *) mxMalloc(i); + test_mxMalloc(NbNZCol, __LINE__, __FILE__, __func__, i); it4 = IM.begin(); eq = -1; for (i = 0; i < Size; i++) @@ -838,7 +853,8 @@ void dynSparseMatrix::Init_UMFPACK_Sparse_Simple(int Size, map, int>, int> &IM, SuiteSparse_long **Ap, SuiteSparse_long **Ai, double **Ax, double **b, bool &zero_solution, mxArray *x0_m) { int eq, var; - *b = (double*)mxMalloc(Size * sizeof(double)); + *b = (double*)mxMalloc(Size * sizeof(double)); + test_mxMalloc(*b, __LINE__, __FILE__, __func__, Size * sizeof(double)); if (!(*b)) { ostringstream tmp; @@ -852,7 +868,8 @@ dynSparseMatrix::Init_UMFPACK_Sparse_Simple(int Size, map, i tmp << " in Init_UMFPACK_Sparse_Simple, can't retrieve x0 vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ap = (SuiteSparse_long*)mxMalloc((Size+1) * sizeof(SuiteSparse_long)); + *Ap = (SuiteSparse_long*)mxMalloc((Size+1) * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ap, __LINE__, __FILE__, __func__, (Size+1) * sizeof(SuiteSparse_long)); if (!(*Ap)) { ostringstream tmp; @@ -860,14 +877,16 @@ dynSparseMatrix::Init_UMFPACK_Sparse_Simple(int Size, map, i throw FatalExceptionHandling(tmp.str()); } size_t prior_nz = IM.size(); - *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ai, __LINE__, __FILE__, __func__, prior_nz * sizeof(SuiteSparse_long)); if (!(*Ai)) { ostringstream tmp; tmp << " in Init_UMFPACK_Sparse, can't allocate Ai index vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + test_mxMalloc(*Ax, __LINE__, __FILE__, __func__, prior_nz * sizeof(double)); if (!(*Ax)) { ostringstream tmp; @@ -985,12 +1004,12 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si { int t, eq, var, lag, ti_y_kmin, ti_y_kmax; double* jacob_exo ; - int row_x; + int row_x = 0; #ifdef DEBUG int col_x; -#endif +#endif int n = periods * Size; - *b = (double*)mxMalloc(n * sizeof(double)); + *b = (double*)mxMalloc(n * sizeof(double)); if (!(*b)) { ostringstream tmp; @@ -1004,22 +1023,25 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si tmp << " in Init_UMFPACK_Sparse_Simple, can't retrieve x0 vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ap = (SuiteSparse_long*)mxMalloc((n+1) * sizeof(SuiteSparse_long)); + *Ap = (SuiteSparse_long*)mxMalloc((n+1) * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ap, __LINE__, __FILE__, __func__, (n+1) * sizeof(SuiteSparse_long)); if (!(*Ap)) { ostringstream tmp; tmp << " in Init_UMFPACK_Sparse, can't allocate Ap index vector\n"; throw FatalExceptionHandling(tmp.str()); - } + } size_t prior_nz = IM.size() * periods; - *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ai, __LINE__, __FILE__, __func__, prior_nz * sizeof(SuiteSparse_long)); if (!(*Ai)) { ostringstream tmp; tmp << " in Init_UMFPACK_Sparse, can't allocate Ai index vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + test_mxMalloc(*Ax, __LINE__, __FILE__, __func__, prior_nz * sizeof(double)); if (!(*Ax)) { ostringstream tmp; @@ -1046,11 +1068,15 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si #ifdef DEBUG col_x = mxGetN(jacobian_exo_block[block_num]); #endif + } + else + { + jacob_exo = NULL; } #ifdef DEBUG int local_index; #endif - + bool fliped = false; bool fliped_exogenous_derivatives_updated = false; int flip_exo; @@ -1060,8 +1086,8 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si last_var = -1; it4 = IM.begin(); var = 0; - while (it4 != IM.end()) - { + while (it4 != IM.end()) + { var = it4->first.first.first; #ifdef DEBUG if (var < 0 || var >= Size) @@ -1070,7 +1096,7 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si tmp << " in Init_UMFPACK_Sparse, var (" << var << ") out of range\n"; throw FatalExceptionHandling(tmp.str()); } -#endif +#endif eq = it4->first.second+Size*t; #ifdef DEBUG if (eq < 0 || eq >= Size) @@ -1117,7 +1143,7 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si (*Ax)[NZE] = jacob_exo[k + row_x*flip_exo]; (*Ai)[NZE] = k; NZE++; - + #ifdef DEBUG if (local_index < 0 || local_index >= Size * periods) { @@ -1137,7 +1163,7 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si tmp << " in Init_UMFPACK_Sparse, index (" << index_vara[var+Size*(y_kmin+t+lag)] << ") out of range for x vector max=" << nb_row_x * this->col_x << "\n"; throw FatalExceptionHandling(tmp.str()); } -#endif +#endif u[k] -= jacob_exo[k + row_x*flip_exo] * x[t+y_kmin+flip_exo*nb_row_x]; } } @@ -1151,7 +1177,7 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si if (max_lag < lag) max_lag = lag; }*/ - + if (var < (periods+y_kmax)*Size) { ti_y_kmin = -min(t, y_kmin); @@ -1204,7 +1230,7 @@ dynSparseMatrix::Init_UMFPACK_Sparse(int periods, int y_kmin, int y_kmax, int Si #endif (*b)[eq - lag * Size] += u[index] * y[index_vara[var+Size*(y_kmin+t/*+lag*/)]]; } - + } if (lag > ti_y_kmax || lag < ti_y_kmin) { @@ -1276,7 +1302,8 @@ dynSparseMatrix::Init_CUDA_Sparse_Simple(int Size, map, int> { int eq, var; - *b = (double*)mxMalloc(Size * sizeof(double)); + *b = (double*)mxMalloc(Size * sizeof(double)); + test_mxMalloc(*b, __LINE__, __FILE__, __func__, Size * sizeof(double)); if (!(*b)) { ostringstream tmp; @@ -1290,7 +1317,8 @@ dynSparseMatrix::Init_CUDA_Sparse_Simple(int Size, map, int> tmp << " in Init_CUDA_Sparse_Simple, can't retrieve x0 vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ap = (SuiteSparse_long*)mxMalloc((Size+1) * sizeof(SuiteSparse_long)); + *Ap = (SuiteSparse_long*)mxMalloc((Size+1) * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ap, __LINE__, __FILE__, __func__, (Size+1) * sizeof(SuiteSparse_long)); if (!(*Ap)) { ostringstream tmp; @@ -1298,14 +1326,16 @@ dynSparseMatrix::Init_CUDA_Sparse_Simple(int Size, map, int> throw FatalExceptionHandling(tmp.str()); } size_t prior_nz = IM.size(); - *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + *Ai = (SuiteSparse_long*)mxMalloc(prior_nz * sizeof(SuiteSparse_long)); + test_mxMalloc(*Ai, __LINE__, __FILE__, __func__, prior_nz * sizeof(SuiteSparse_long)); if (!(*Ai)) { ostringstream tmp; tmp << " in Init_CUDA_Sparse, can't allocate Ai index vector\n"; throw FatalExceptionHandling(tmp.str()); } - *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + *Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + test_mxMalloc(*Ax, __LINE__, __FILE__, __func__, prior_nz * sizeof(double)); if (!(*Ax)) { ostringstream tmp; @@ -1411,6 +1441,7 @@ dynSparseMatrix::Init_CUDA_Sparse(int periods, int y_kmin, int y_kmax, int Size, double *Host_b = (double*)mxMalloc(n * sizeof(double)); + test_mxMalloc(Host_b, __LINE__, __FILE__, __func__, n * sizeof(double)); cudaChk(cudaMalloc((void**)b, n * sizeof(double)), " in Init_Cuda_Sparse, not enought memory to allocate b vector on the graphic card\n"); double *Host_x0 = mxGetPr(x0_m); @@ -1423,18 +1454,23 @@ dynSparseMatrix::Init_CUDA_Sparse(int periods, int y_kmin, int y_kmax, int Size, cudaChk(cudaMalloc((void**)x0, n * sizeof(double)), " in Init_Cuda_Sparse, not enought memory to allocate x0 vector on the graphic card\n"); int* Host_Ap = (int*)mxMalloc((n+1) * sizeof(int)); + test_mxMalloc(Host_Ap, __LINE__, __FILE__, __func__, (n+1) * sizeof(int)); int* Host_Ai = (int*)mxMalloc(prior_nz * sizeof(int)); + test_mxMalloc(Host_Ai, __LINE__, __FILE__, __func__, prior_nz * sizeof(int)); double* Host_Ax = (double*)mxMalloc(prior_nz * sizeof(double)); + test_mxMalloc(Host_Ax, __LINE__, __FILE__, __func__, prior_nz * sizeof(double)); int* Host_Ai_tild, * Host_Ap_tild; if (preconditioner == 3) { Host_Ap_tild = (int*) mxMalloc((n+1)*sizeof(int)); + test_mxMalloc(Host_Ap_tild, __LINE__, __FILE__, __func__, (n+1)*sizeof(int)); Host_Ai_tild = (int*) mxMalloc(prior_nz*sizeof(int)); + test_mxMalloc(Host_Ai_tild, __LINE__, __FILE__, __func__, prior_nz*sizeof(int)); Host_Ap_tild[0] = 0; } @@ -1445,6 +1481,7 @@ dynSparseMatrix::Init_CUDA_Sparse(int periods, int y_kmin, int y_kmax, int Size, preconditioner_size = prior_nz; double *Host_A_tild = (double*)mxMalloc(preconditioner_size * sizeof(double)); + test_mxMalloc(Host_A_tild, __LINE__, __FILE__, __func__, preconditioner_size * sizeof(double)); map, int>, int>::iterator it4; @@ -1595,8 +1632,11 @@ dynSparseMatrix::Init_CUDA_Sparse(int periods, int y_kmin, int y_kmax, int Size, if (preconditioner == 3) { int* tmp_Ap_tild = (int*) mxMalloc((Size + 1) * sizeof(int) ); + test_mxMalloc(tmp_Ap_tild, __LINE__, __FILE__, __func__, (Size + 1) * sizeof(int)) ; int* tmp_Ai_tild = (int*) mxMalloc(NZE_tild * sizeof(int) ); - double* tmp_A_tild = (double*) mxMalloc(NZE_tild * sizeof(double) ); + test_mxMalloc(tmp_Ai_tild, __LINE__, __FILE__, __func__, NZE_tild * sizeof(int)); + double* tmp_A_tild = (double*) mxMalloc(NZE_tild * sizeof(double)); + test_mxMalloc(tmp_A_tild, __LINE__, __FILE__, __func__, NZE_tild * sizeof(double)); memcpy(tmp_Ap_tild, Host_Ap_tild, (Size + 1) * sizeof(int)); memcpy(tmp_Ai_tild, Host_Ai_tild, NZE_tild * sizeof(int)); memcpy(tmp_A_tild, Host_A_tild, NZE_tild * sizeof(double)); @@ -1668,10 +1708,11 @@ dynSparseMatrix::Init_CUDA_Sparse(int periods, int y_kmin, int y_kmax, int Size, void -PrintM(int n, double* Ax, mwIndex *Ap, mwIndex *Ai) +dynSparseMatrix::PrintM(int n, double* Ax, mwIndex *Ap, mwIndex *Ai) { int nnz = Ap[n]; double *A = (double*)mxMalloc(n * n * sizeof(double)); + test_mxMalloc(A, __LINE__, __FILE__, __func__, n * n * sizeof(double)); memset(A,0,n * n * sizeof(double)); int k = 0; for (int i = 0; i< n; i++) @@ -1849,23 +1890,36 @@ dynSparseMatrix::Init_GE(int periods, int y_kmin, int y_kmax, int Size, map, int>, int>::iterator it4; NonZeroElem *first; pivot = (int *) mxMalloc(Size*periods*sizeof(int)); - pivot_save = (int *) mxMalloc(Size*periods*sizeof(int)); - pivotk = (int *) mxMalloc(Size*periods*sizeof(int)); - pivotv = (double *) mxMalloc(Size*periods*sizeof(double)); - pivotva = (double *) mxMalloc(Size*periods*sizeof(double)); - b = (int *) mxMalloc(Size*periods*sizeof(int)); - line_done = (bool *) mxMalloc(Size*periods*sizeof(bool)); + test_mxMalloc(pivot, __LINE__, __FILE__, __func__, Size*periods*sizeof(int)); + pivot_save = (int *) mxMalloc(Size*periods*sizeof(int)); + test_mxMalloc(pivot_save, __LINE__, __FILE__, __func__, Size*periods*sizeof(int)); + pivotk = (int *) mxMalloc(Size*periods*sizeof(int)); + test_mxMalloc(pivotk, __LINE__, __FILE__, __func__, Size*periods*sizeof(int)); + pivotv = (double *) mxMalloc(Size*periods*sizeof(double)); + test_mxMalloc(pivotv, __LINE__, __FILE__, __func__, Size*periods*sizeof(double)); + pivotva = (double *) mxMalloc(Size*periods*sizeof(double)); + test_mxMalloc(pivotva, __LINE__, __FILE__, __func__, Size*periods*sizeof(double)); + b = (int *) mxMalloc(Size*periods*sizeof(int)); + test_mxMalloc(b, __LINE__, __FILE__, __func__, Size*periods*sizeof(int)); + line_done = (bool *) mxMalloc(Size*periods*sizeof(bool)); + test_mxMalloc(line_done, __LINE__, __FILE__, __func__, Size*periods*sizeof(bool)); mem_mngr.init_CHUNK_BLCK_SIZE(u_count); g_save_op = NULL; g_nop_all = 0; i = (periods+y_kmax+1)*Size*sizeof(NonZeroElem *); - FNZE_R = (NonZeroElem **) mxMalloc(i); - FNZE_C = (NonZeroElem **) mxMalloc(i); - NonZeroElem **temp_NZE_R = (NonZeroElem **) mxMalloc(i); - NonZeroElem **temp_NZE_C = (NonZeroElem **) mxMalloc(i); + FNZE_R = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(FNZE_R, __LINE__, __FILE__, __func__, i); + FNZE_C = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(FNZE_C, __LINE__, __FILE__, __func__, i); + NonZeroElem **temp_NZE_R = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(*temp_NZE_R, __LINE__, __FILE__, __func__, i); + NonZeroElem **temp_NZE_C = (NonZeroElem **) mxMalloc(i); + test_mxMalloc(*temp_NZE_C, __LINE__, __FILE__, __func__, i); i = (periods+y_kmax+1)*Size*sizeof(int); - NbNZRow = (int *) mxMalloc(i); - NbNZCol = (int *) mxMalloc(i); + NbNZRow = (int *) mxMalloc(i); + test_mxMalloc(NbNZRow, __LINE__, __FILE__, __func__, i); + NbNZCol = (int *) mxMalloc(i); + test_mxMalloc(NbNZCol, __LINE__, __FILE__, __func__, i); for (int i = 0; i < periods*Size; i++) { @@ -2029,7 +2083,9 @@ dynSparseMatrix::compare(int *save_op, int *save_opa, int *save_opaa, int beg_t, t_save_op_s *save_op_s, *save_opa_s, *save_opaa_s; int *diff1, *diff2; diff1 = (int *) mxMalloc(nop*sizeof(int)); + test_mxMalloc(diff1, __LINE__, __FILE__, __func__, nop*sizeof(int)); diff2 = (int *) mxMalloc(nop*sizeof(int)); + test_mxMalloc(diff2, __LINE__, __FILE__, __func__, nop*sizeof(int)); int max_save_ops_first = -1; j = i = 0; while (i < nop4 && OK) @@ -2180,8 +2236,10 @@ dynSparseMatrix::complete(int beg_t, int Size, int periods, int *b) int size_of_save_code = (1+y_kmax)*Size*(Size+1+4)/2*4; save_code = (int *) mxMalloc(size_of_save_code*sizeof(int)); + test_mxMalloc(save_code, __LINE__, __FILE__, __func__, size_of_save_code*sizeof(int)); int size_of_diff = (1+y_kmax)*Size*(Size+1+4); diff = (int *) mxMalloc(size_of_diff*sizeof(int)); + test_mxMalloc(diff, __LINE__, __FILE__, __func__, size_of_diff*sizeof(int)); cal_y = y_size*y_kmin; i = (beg_t+1)*Size-1; @@ -2439,6 +2497,7 @@ dynSparseMatrix::CheckIt(int y_size, int y_kmin, int y_kmax, int Size, int perio mexPrintf("row(2)=%d\n", row); double *B; B = (double *) mxMalloc(row*sizeof(double)); + test_mxMalloc(B, __LINE__, __FILE__, __func__, row*sizeof(double)); for (int i = 0; i < row; i++) SaveResult >> B[i]; SaveResult.close(); @@ -3293,8 +3352,11 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do #else double *Control, *Info, *res; Control = (double*)mxMalloc(UMFPACK_CONTROL * sizeof(double)); + test_mxMalloc(Control, __LINE__, __FILE__, __func__, UMFPACK_CONTROL * sizeof(double)); Info = (double*)mxMalloc(UMFPACK_INFO * sizeof(double)); + test_mxMalloc(Info, __LINE__, __FILE__, __func__, UMFPACK_INFO * sizeof(double)); res = (double*)mxMalloc(n * sizeof(double)); + test_mxMalloc(res, __LINE__, __FILE__, __func__, n * sizeof(double)); #endif umfpack_dl_defaults(Control); @@ -3397,7 +3459,7 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do y[eq+it_*y_size] += slowc_l * yy; } } - + mxFree(Ap); mxFree(Ai); mxFree(Ax); @@ -3419,8 +3481,11 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do #else double *Control, *Info, *res; Control = (double*)mxMalloc(UMFPACK_CONTROL * sizeof(double)); + test_mxMalloc(Control, __LINE__, __FILE__, __func__, UMFPACK_CONTROL * sizeof(double)); Info = (double*)mxMalloc(UMFPACK_INFO * sizeof(double)); + test_mxMalloc(Info, __LINE__, __FILE__, __func__, UMFPACK_INFO * sizeof(double)); res = (double*)mxMalloc(n * sizeof(double)); + test_mxMalloc(res, __LINE__, __FILE__, __func__, n * sizeof(double)); #endif umfpack_dl_defaults(Control); @@ -3503,8 +3568,11 @@ dynSparseMatrix::Solve_LU_UMFPack(mxArray *A_m, mxArray *b_m, int Size, double s #else double *Control, *Info, *res; Control = (double*)mxMalloc(UMFPACK_CONTROL * sizeof(double)); + test_mxMalloc(Control, __LINE__, __FILE__, __func__, UMFPACK_CONTROL * sizeof(double)); Info = (double*)mxMalloc(UMFPACK_INFO * sizeof(double)); + test_mxMalloc(Info, __LINE__, __FILE__, __func__, UMFPACK_INFO * sizeof(double)); res = (double*)mxMalloc(n * sizeof(double)); + test_mxMalloc(res, __LINE__, __FILE__, __func__, n * sizeof(double)); #endif void *Symbolic, *Numeric ; umfpack_dl_defaults (Control) ; @@ -3561,6 +3629,7 @@ printM(int n,double *Ax, int* Ap, int* Ai, cusparseMatDescr_t descrA, cusparseH cusparseChk(cusparseDcsr2dense(cusparse_handle, n, n, descrA, Ax, Ap,Ai, A_dense, n), "cusparseDcsr2dense has failed\n"); double *A_dense_hoste = (double*)mxMalloc(n * n * sizeof(double)); + test_mxMalloc(A_dense_hoste, __LINE__, __FILE__, __func__, n * n * sizeof(double)); cudaChk(cudaMemcpy(A_dense_hoste, A_dense, n * n * sizeof(double),cudaMemcpyDeviceToHost), " cudaMemcpy(A_dense_hoste, A_dense) has failed\n"); mexPrintf("----------------------\n"); mexPrintf("FillMode=%d, IndexBase=%d, MatType=%d, DiagType=%d\n",cusparseGetMatFillMode(descrA), cusparseGetMatIndexBase(descrA), cusparseGetMatType(descrA), cusparseGetMatDiagType(descrA)); @@ -3731,6 +3800,7 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, int periods = n / Size; double * tmp_vect_host = (double*)mxMalloc(n * sizeof(double)); + test_mxMalloc(tmp_vect_host, __LINE__, __FILE__, __func__, n * sizeof(double)); cublasChk(cublasDnrm2(cublas_handle, n,b, 1, &bnorm), " in Solve_Cuda_BiCGStab, cublasDnrm2(b) has failed\n"); @@ -3856,10 +3926,15 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, // we have to transpose it to get a CSR format used by CUDA mwIndex* Awi, *Awp; double* A_tild_host = (double*)mxMalloc(nnz*sizeof(double)); + test_mxMalloc(A_tild_host, __LINE__, __FILE__, __func__, nnz*sizeof(double)); Awi = (mwIndex*)mxMalloc(nnz * sizeof(mwIndex)); + test_mxMalloc(Awi, __LINE__, __FILE__, __func__, nnz * sizeof(mwIndex)); Awp = (mwIndex*)mxMalloc((n + 1) * sizeof(mwIndex)); + test_mxMalloc(Awp, __LINE__, __FILE__, __func__, (n + 1) * sizeof(mwIndex)); int* Aii = (int*)mxMalloc(nnz * sizeof(int)); + test_mxMalloc(Aii, __LINE__, __FILE__, __func__, nnz * sizeof(int)); int* Aip = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Aip, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); cudaChk(cudaMemcpy(A_tild_host, A_tild, nnz*sizeof(double), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy A_tild_host = A_tild has failed\n"); cudaChk(cudaMemcpy(Aii, Ai, nnz*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aii = Ai has failed\n"); cudaChk(cudaMemcpy(Aip, Ap, (n+1)*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aip = Ai has failed\n"); @@ -3941,7 +4016,9 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, mwIndex* Wi = mxGetIr(W); mwIndex* Wp = mxGetJc(W); int *Wii = (int*)mxMalloc(nnz * sizeof(int)); + test_mxMalloc(Wii, __LINE__, __FILE__, __func__, nnz * sizeof(int)); int *Wip = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Wip, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); for (int i = 0; i < nnz; i++) Wii[i] = Wi[i]; for (int i = 0; i < n + 1; i++) @@ -3968,10 +4045,15 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, { mwIndex* Aowi, *Aowp; double* A_host = (double*)mxMalloc(nnz*sizeof(double)); + test_mxMalloc(A_host, __LINE__, __FILE__, __func__, nnz*sizeof(double)); Aowi = (mwIndex*)mxMalloc(nnz * sizeof(mwIndex)); + test_mxMalloc(Aowi, __LINE__, __FILE__, __func__, nnz * sizeof(mwIndex)); Aowp = (mwIndex*)mxMalloc((n + 1) * sizeof(mwIndex)); + test_mxMalloc(Aowp, __LINE__, __FILE__, __func__, (n + 1) * sizeof(mwIndex)); int* Aoii = (int*)mxMalloc(nnz * sizeof(int)); + test_mxMalloc(Aoii, __LINE__, __FILE__, __func__, nnz * sizeof(int)); int* Aoip = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Aoip, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); cudaChk(cudaMemcpy(A_host, Ax, nnz*sizeof(double), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy A_tild_host = A_tild has failed\n"); cudaChk(cudaMemcpy(Aoii, Ai, nnz*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aii = Ai_tild has failed\n"); cudaChk(cudaMemcpy(Aoip, Ap, (n+1)*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aip = Ap_tild has failed\n"); @@ -3996,10 +4078,15 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, // we have to transpose it to get a CSR format used by CUDA mwIndex* Awi, *Awp; double* A_tild_host = (double*)mxMalloc(nnz_tild*sizeof(double)); + test_mxMalloc(A_tild_host, __LINE__, __FILE__, __func__, nnz_tild*sizeof(double)); Awi = (mwIndex*)mxMalloc(nnz_tild * sizeof(mwIndex)); + test_mxMalloc(Awi, __LINE__, __FILE__, __func__, nnz_tild * sizeof(mwIndex)); Awp = (mwIndex*)mxMalloc((Size + 1) * sizeof(mwIndex)); + test_mxMalloc(Awp, __LINE__, __FILE__, __func__, (Size + 1) * sizeof(mwIndex)); int* Aii = (int*)mxMalloc(nnz_tild * sizeof(int)); + test_mxMalloc(Aii, __LINE__, __FILE__, __func__, nnz_tild * sizeof(int)); int* Aip = (int*)mxMalloc((Size + 1) * sizeof(int)); + test_mxMalloc(Aip, __LINE__, __FILE__, __func__, (Size + 1) * sizeof(int)); cudaChk(cudaMemcpy(A_tild_host, A_tild, nnz_tild*sizeof(double), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy A_tild_host = A_tild has failed\n"); cudaChk(cudaMemcpy(Aii, Ai_tild, nnz_tild*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aii = Ai_tild has failed\n"); cudaChk(cudaMemcpy(Aip, Ap_tild, (Size+1)*sizeof(int), cudaMemcpyDeviceToHost), " in Solve_Cuda_BiCGStab, cudaMemcpy Aip = Ap_tild has failed\n"); @@ -4060,8 +4147,11 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, Q_nnz = Qjw_host[Size]; mexPrintf("Q_nnz=%d\n",Q_nnz); int *Qi_host = (int*)mxMalloc(Q_nnz * periods * sizeof(int)); + test_mxMalloc(Qi_host, __LINE__, __FILE__, __func__, Q_nnz * periods * sizeof(int)); double *Q_x_host = (double*)mxMalloc(Q_nnz * periods * sizeof(double)); + test_mxMalloc(Q_x_host, __LINE__, __FILE__, __func__, Q_nnz * periods * sizeof(double)); int *Qj_host = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Qj_host, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); for (int t = 0; t < periods; t++) { for (int i = 0; i < Q_nnz; i++) @@ -4120,8 +4210,11 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, double* Px_host = mxGetPr(P); P_nnz = Pjw_host[Size]; int *Pi_host = (int*)mxMalloc(P_nnz * periods * sizeof(int)); + test_mxMalloc(Pi_host, __LINE__, __FILE__, __func__, P_nnz * periods * sizeof(int)); double *P_x_host = (double*)mxMalloc(P_nnz * periods * sizeof(double)); + test_mxMalloc(P_x_host, __LINE__, __FILE__, __func__, P_nnz * periods * sizeof(double)); int *Pj_host = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Pj_host, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); for (int t = 0; t < periods; t++) { for (int i = 0; i < P_nnz; i++) @@ -4202,8 +4295,11 @@ dynSparseMatrix::Solve_CUDA_BiCGStab(int *Ap, int *Ai, double *Ax, int *Ap_tild, int U_nnz = Ujw_host[Size]; double *pW = (double*)mxMalloc((L_nnz + U_nnz - Size) * periods * sizeof(double)); + test_mxMalloc(pW, __LINE__, __FILE__, __func__, (L_nnz + U_nnz - Size) * periods * sizeof(double)); int *Wi = (int*)mxMalloc((L_nnz + U_nnz - Size) * periods * sizeof(int)); + test_mxMalloc(Wi, __LINE__, __FILE__, __func__, (L_nnz + U_nnz - Size) * periods * sizeof(int)); int *Wj = (int*)mxMalloc((n + 1) * sizeof(int)); + test_mxMalloc(Wj, __LINE__, __FILE__, __func__, (n + 1) * sizeof(int)); Wj[0] = 0; W_nnz = 0; for (int t = 0; t < periods; t++) @@ -4865,7 +4961,10 @@ dynSparseMatrix::Solve_Matlab_BiCGStab(mxArray *A_m, mxArray *b_m, int Size, dou /* precond = 0 => Jacobi precond = 1 => Incomplet LU decomposition*/ size_t n = mxGetM(A_m); - mxArray *L1, *U1, *Diag; + mxArray *L1, *U1, *Diag; + L1 = NULL; + U1 = NULL; + Diag = NULL; mxArray *rhs0[4]; if (preconditioner == 0) @@ -4919,7 +5018,8 @@ dynSparseMatrix::Solve_Matlab_BiCGStab(mxArray *A_m, mxArray *b_m, int Size, dou mxDestroyArray(Setup); } double flags = 2; - mxArray *z; + mxArray *z; + z = NULL; if (steady_state) /*Octave BicStab algorihtm involves a 0 division in case of a preconditionner equal to the LU decomposition of A matrix*/ { mxArray *res = mult_SAT_B(Sparse_transpose(A_m), x0_m); @@ -5151,10 +5251,15 @@ dynSparseMatrix::Solve_ByteCode_Sparse_GaussianElimination(int Size, int blck, i double piv_abs; NonZeroElem **bc; bc = (NonZeroElem **) mxMalloc(Size*sizeof(*bc)); + test_mxMalloc(bc, __LINE__, __FILE__, __func__, Size*sizeof(*bc)); piv_v = (double *) mxMalloc(Size*sizeof(double)); + test_mxMalloc(piv_v, __LINE__, __FILE__, __func__, Size*sizeof(double)); pivj_v = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivj_v, __LINE__, __FILE__, __func__, Size*sizeof(int)); pivk_v = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivk_v, __LINE__, __FILE__, __func__, Size*sizeof(int)); NR = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(NR, __LINE__, __FILE__, __func__, Size*sizeof(int)); for (int i = 0; i < Size; i++) { @@ -5419,12 +5524,17 @@ dynSparseMatrix::Solve_ByteCode_Symbolic_Sparse_GaussianElimination(int Size, bo int tbreak = 0, last_period = periods; piv_v = (double *) mxMalloc(Size*sizeof(double)); + test_mxMalloc(piv_v, __LINE__, __FILE__, __func__, Size*sizeof(double)); pivj_v = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivj_v, __LINE__, __FILE__, __func__, Size*sizeof(int)); pivk_v = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(pivk_v, __LINE__, __FILE__, __func__, Size*sizeof(int)); NR = (int *) mxMalloc(Size*sizeof(int)); + test_mxMalloc(NR, __LINE__, __FILE__, __func__, Size*sizeof(int)); //clock_t time00 = clock(); NonZeroElem **bc; bc = (NonZeroElem **) mxMalloc(Size*sizeof(first)); + test_mxMalloc(bc, __LINE__, __FILE__, __func__, Size*sizeof(first)); for (int t = 0; t < periods; t++) { @@ -5443,6 +5553,7 @@ dynSparseMatrix::Solve_ByteCode_Symbolic_Sparse_GaussianElimination(int Size, bo save_op = NULL; }*/ save_op = (int *) mxMalloc(nop*sizeof(int)); + test_mxMalloc(save_op, __LINE__, __FILE__, __func__, nop*sizeof(int)); nopa = nop; } nop = 0; @@ -6111,6 +6222,7 @@ dynSparseMatrix::Check_and_Correct_Previous_Iteration(int block_num, int y_size, { double *p = (double*)mxMalloc(size * sizeof(double)); + test_mxMalloc(p, __LINE__, __FILE__, __func__, size * sizeof(double)); Grad_f_product(size, b_m_save, p, A_m_save, Ap_save, Ai_save, Ax_save, b_save); double slope=0.0; for (int i = 1; i < size; i++) @@ -6337,7 +6449,9 @@ dynSparseMatrix::Simulate_One_Boundary(int block_num, int y_size, int y_kmin, in mxFree(Ai_save); mxFree(Ax_save); Ai_save = (SuiteSparse_long*)mxMalloc(Ap[size] * sizeof(SuiteSparse_long)); + test_mxMalloc(Ai_save, __LINE__, __FILE__, __func__, Ap[size] * sizeof(SuiteSparse_long)); Ax_save = (double*)mxMalloc(Ap[size] * sizeof(double)); + test_mxMalloc(Ax_save, __LINE__, __FILE__, __func__, Ap[size] * sizeof(double)); } memcpy(Ap_save, Ap, (size + 1) * sizeof(SuiteSparse_long)); memcpy(Ai_save, Ai, Ap[size] * sizeof(SuiteSparse_long)); @@ -6420,15 +6534,21 @@ void dynSparseMatrix::Simulate_Newton_One_Boundary(const bool forward) { g1 = (double *) mxMalloc(size*size*sizeof(double)); + test_mxMalloc(g1, __LINE__, __FILE__, __func__, size*size*sizeof(double)); r = (double *) mxMalloc(size*sizeof(double)); + test_mxMalloc(r, __LINE__, __FILE__, __func__, size*sizeof(double)); iter = 0; if ((solve_algo == 6 && steady_state) || ((stack_solve_algo == 0 || stack_solve_algo == 1 || stack_solve_algo == 4) && !steady_state)) { Ap_save = (SuiteSparse_long*)mxMalloc((size + 1) * sizeof(SuiteSparse_long)); + test_mxMalloc(Ap_save, __LINE__, __FILE__, __func__, (size + 1) * sizeof(SuiteSparse_long)); Ap_save[size] = 0; Ai_save = (SuiteSparse_long*)mxMalloc(1 * sizeof(SuiteSparse_long)); + test_mxMalloc(Ai_save, __LINE__, __FILE__, __func__, 1 * sizeof(SuiteSparse_long)); Ax_save = (double*)mxMalloc(1 * sizeof(double)); + test_mxMalloc(Ax_save, __LINE__, __FILE__, __func__, 1 * sizeof(double)); b_save = (double*)mxMalloc((size) * sizeof(SuiteSparse_long)); + test_mxMalloc(b_save, __LINE__, __FILE__, __func__, (size) * sizeof(SuiteSparse_long)); } if (steady_state) { @@ -6491,7 +6611,7 @@ dynSparseMatrix::preconditioner_print_out(string s, int preconditioner, bool ss) case 1: if (ss) tmp.append("incomplet lutp on static jacobian"); - else + else tmp.append("incomplet lu0 on dynamic jacobian"); break; case 2: @@ -6540,7 +6660,8 @@ dynSparseMatrix::Simulate_Newton_Two_Boundaries(int blck, int y_size, int y_kmin if (isnan(res1) || isinf(res1) || (res2 > 12*g0 && iter > 0)) { if (iter == 0 || fabs(slowc_save) < 1e-8) - { + { + mexPrintf("res1 = %f, res2 = %f g0 = %f iter = %d\n", res1, res2, g0, iter); for (int j = 0; j < y_size; j++) { ostringstream res; @@ -6781,6 +6902,7 @@ dynSparseMatrix::fixe_u(double **u, int u_count_int, int max_lag_plus_max_lead_p mexPrintf("fixe_u : alloc(%d double)\n", u_count_alloc); #endif (*u) = (double *) mxMalloc(u_count_alloc*sizeof(double)); + test_mxMalloc(*u, __LINE__, __FILE__, __func__, u_count_alloc*sizeof(double)); #ifdef DEBUG mexPrintf("*u=%d\n", *u); #endif diff --git a/mex/sources/bytecode/SparseMatrix.hh b/mex/sources/bytecode/SparseMatrix.hh index 82fd5a3ab..23090797a 100644 --- a/mex/sources/bytecode/SparseMatrix.hh +++ b/mex/sources/bytecode/SparseMatrix.hh @@ -146,7 +146,7 @@ private: void Solve_Matlab_LU_UMFPack(mxArray *A_m, mxArray *b_m, int Size, double slowc_l, bool is_two_boundaries, int it_); void Print_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, double *Ax, int n); void Printfull_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, double *Ax, double *b, int n); - + void PrintM(int n, double* Ax, mwIndex *Ap, mwIndex *Ai); void Solve_LU_UMFPack(mxArray *A_m, mxArray *b_m, int Size, double slowc_l, bool is_two_boundaries, int it_); void Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, double *Ax, double *b, int n, int Size, double slowc_l, bool is_two_boundaries, int it_, vector_table_conditional_local_type vector_table_conditional_local); void Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, double *Ax, double *b, int n, int Size, double slowc_l, bool is_two_boundaries, int it_); @@ -245,7 +245,7 @@ protected: int u_count_alloc, u_count_alloc_save; vector jac; double *jcb; - double slowc_save, prev_slowc_save, markowitz_c; + double slowc_save, prev_slowc_save, markowitz_c; int y_decal; int *index_equa; int u_count, tbreak_g; diff --git a/mex/sources/bytecode/bytecode.cc b/mex/sources/bytecode/bytecode.cc index 25260c82b..eee79bf45 100644 --- a/mex/sources/bytecode/bytecode.cc +++ b/mex/sources/bytecode/bytecode.cc @@ -91,9 +91,9 @@ Get_Argument(const mxArray *prhs) #endif -//#include -#include - +//#include +#include + #ifdef CUDA int @@ -449,7 +449,8 @@ main(int nrhs, const char *prhs[]) char *plhs[1]; load_global((char *) prhs[1]); #endif - mxArray *pfplan_struct = NULL; + mxArray *pfplan_struct = NULL; + ErrorMsg error_msg; size_t i, row_y = 0, col_y = 0, row_x = 0, col_x = 0, nb_row_xd = 0; size_t steady_row_y, steady_col_y; int y_kmin = 0, y_kmax = 0, y_decal = 0; @@ -527,7 +528,7 @@ main(int nrhs, const char *prhs[]) DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str()); } int nb_periods = mxGetM(date_str) * mxGetN(date_str); - + mxArray* constrained_vars_ = mxGetField(extended_path_struct, 0, "constrained_vars_"); if (constrained_vars_ == NULL) { @@ -556,7 +557,7 @@ main(int nrhs, const char *prhs[]) tmp.insert(0,"The extended_path description structure does not contain the member: "); DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str()); } - + mxArray* shock_var_ = mxGetField(extended_path_struct, 0, "shock_vars_"); if (shock_var_ == NULL) { @@ -621,7 +622,7 @@ main(int nrhs, const char *prhs[]) table_conditional_global[i] = vector_conditional_local; } } - + vector_table_conditional_local_type vv3 = table_conditional_global[0]; for (int i = 0; i < nb_constrained; i++) { @@ -632,6 +633,7 @@ main(int nrhs, const char *prhs[]) double *specific_constrained_int_date_ = mxGetPr(mxGetCell(constrained_int_date_, i)); int nb_local_periods = mxGetM(Array_constrained_paths_) * mxGetN(Array_constrained_paths_); int* constrained_int_date = (int*)mxMalloc(nb_local_periods * sizeof(int)); + error_msg.test_mxMalloc(constrained_int_date, __LINE__, __FILE__, __func__, nb_local_periods * sizeof(int)); if (nb_periods < nb_local_periods) { ostringstream oss; @@ -642,7 +644,7 @@ main(int nrhs, const char *prhs[]) oss << nb_local_periods; string tmp1 = oss.str(); tmp.append(tmp1); - tmp.append(")"); + tmp.append(")"); DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str()); } (sconditional_extended_path[i]).per_value.resize(nb_local_periods); @@ -685,7 +687,7 @@ main(int nrhs, const char *prhs[]) oss << nb_local_periods; string tmp1 = oss.str(); tmp.append(tmp1); - tmp.append(")"); + tmp.append(")"); DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str()); } (sextended_path[i]).per_value.resize(nb_local_periods); @@ -713,7 +715,7 @@ main(int nrhs, const char *prhs[]) dates.push_back(string(buf));//string(Dates[i]); mxFree(buf); } - } + } if (plan.length()>0) { mxArray* plan_struct = mexGetVariable("base", plan.c_str()); @@ -1057,14 +1059,19 @@ main(int nrhs, const char *prhs[]) #else if (stack_solve_algo == 7 && !steady_state) DYN_MEX_FUNC_ERR_MSG_TXT("bytecode has not been compiled with CUDA option. Bytecode Can't use options_.stack_solve_algo=7\n"); -#endif +#endif size_t size_of_direction = col_y*row_y*sizeof(double); double *y = (double *) mxMalloc(size_of_direction); + error_msg.test_mxMalloc(y, __LINE__, __FILE__, __func__, size_of_direction); double *ya = (double *) mxMalloc(size_of_direction); + error_msg.test_mxMalloc(ya, __LINE__, __FILE__, __func__, size_of_direction); direction = (double *) mxMalloc(size_of_direction); - memset(direction, 0, size_of_direction); + error_msg.test_mxMalloc(direction, __LINE__, __FILE__, __func__, size_of_direction); + memset(direction, 0, size_of_direction); + /*mexPrintf("col_x : %d, row_x : %d\n",col_x, row_x);*/ double *x = (double *) mxMalloc(col_x*row_x*sizeof(double)); + error_msg.test_mxMalloc(x, __LINE__, __FILE__, __func__, col_x*row_x*sizeof(double)); for (i = 0; i < row_x*col_x; i++) { x[i] = double (xd[i]); @@ -1075,7 +1082,7 @@ main(int nrhs, const char *prhs[]) ya[i] = double (yd[i]); } size_t y_size = row_y; - size_t nb_row_x = row_x; + size_t nb_row_x = row_x; clock_t t0 = clock(); Interpreter interprete(params, y, ya, x, steady_yd, steady_xd, direction, y_size, nb_row_x, nb_row_xd, periods, y_kmin, y_kmax, maxit_, solve_tolf, size_of_direction, slowc, y_decal, markowitz_c, file_name, minimal_solving_periods, stack_solve_algo, solve_algo, global_temporary_terms, print, print_error, GlobalTemporaryTerms, steady_state,