diff --git a/matlab/det_cond_forecast.m b/matlab/det_cond_forecast.m index 4decb95e653d9463146b1ca6915feaa020204cae..18ebb53f3006fe6aa875cc147be9e152f9062a4d 100644 --- a/matlab/det_cond_forecast.m +++ b/matlab/det_cond_forecast.m @@ -48,7 +48,7 @@ function det_cond_forecast(constrained_paths, constrained_vars, options_cond_fcs global options_ oo_ M_ if ~isfield(options_cond_fcst,'periods') || isempty(options_cond_fcst.periods) - options_cond_fcst.periods = 60; + options_cond_fcst.periods = 100; end maximum_lag = M_.maximum_lag; @@ -73,12 +73,14 @@ exo_names = M_.exo_names; controlled_varexo = zeros(1,n_control_exo); for i = 1:nx for j=1:n_control_exo - if strcmp(exo_names(i,:), options_cond_fcst.controlled_varexo(j,:)) + if strcmp(deblank(exo_names(i,:)), deblank(options_cond_fcst.controlled_varexo(j,:))) controlled_varexo(j) = i; end end end +%todo check if zero => error message + save_options_initval_file = options_.initval_file; options_.initval_file = '__'; @@ -272,22 +274,23 @@ else disp('computation of derivatives w.r. to exogenous shocks'); col_count = 1; - for j = controlled_varexo + for j = 1:length(controlled_varexo) + j_pos = controlled_varexo(j); if constrained_perfect_foresight(j) for time = time_index_constraint - saved = oo_.exo_simul(time,j); - oo_.exo_simul(time,j) = oo_.exo_simul(time,j) + eps1; + saved = oo_.exo_simul(time,j_pos); + oo_.exo_simul(time,j_pos) = oo_.exo_simul(time,j_pos) + eps1; simul(); J(:,col_count) = (oo_.endo_simul(indx_endo) - ys) / eps1; - oo_.exo_simul(time,j) = saved; + oo_.exo_simul(time,j_pos) = saved; col_count = col_count + 1; end; else - saved = oo_.exo_simul(maximum_lag+1,j); - oo_.exo_simul(maximum_lag+1,j) = oo_.exo_simul(maximum_lag+1,j) + eps1; + saved = oo_.exo_simul(maximum_lag+1,j_pos); + oo_.exo_simul(maximum_lag+1,j_pos) = oo_.exo_simul(maximum_lag+1,j_pos) + eps1; simul(); J(:,col_count) = (oo_.endo_simul(indx_endo) - ys) / eps1; - oo_.exo_simul(maximum_lag+1,j) = saved; + oo_.exo_simul(maximum_lag+1,j_pos) = saved; col_count = col_count + 1; end; end; @@ -304,12 +307,13 @@ else D_exo = - J \ r; old_exo = oo_.exo_simul; col_count = 1; - for j = controlled_varexo + for j = 1:length(controlled_varexo) + j_pos=controlled_varexo(j); if constrained_perfect_foresight(j) - oo_.exo_simul(time_index_constraint,j) = (oo_.exo_simul(time_index_constraint,j) + D_exo(col_count: col_count + constrained_periods - t)); + oo_.exo_simul(time_index_constraint,j_pos) = (oo_.exo_simul(time_index_constraint,j_pos) + D_exo(col_count: col_count + constrained_periods - t)); col_count = col_count + constrained_periods - t + 1; else - oo_.exo_simul(maximum_lag + 1,j) = oo_.exo_simul(maximum_lag + 1,j) + D_exo(col_count); + oo_.exo_simul(maximum_lag + 1,j_pos) = oo_.exo_simul(maximum_lag + 1,j_pos) + D_exo(col_count); col_count = col_count + 1; end; end; @@ -319,16 +323,17 @@ else if ~convg error(['convergence not achived at time ' int2str(t) ' after ' int2str(it) ' iterations']); end; - for j = controlled_varexo + for j = 1:length(controlled_varexo) + j_pos=controlled_varexo(j); if constrained_perfect_foresight(j) % in case of mixed surprise and perfect foresight % endogenous path at each date all the exogenous paths have to be % stored. The paths are stacked in exo. for time = time_index_constraint; - exo(past_val + time,j) = oo_.exo_simul(time,j); + exo(past_val + time,j_pos) = oo_.exo_simul(time,j_pos); end else - exo(maximum_lag + t,j) = oo_.exo_simul(maximum_lag + 1,j); + exo(maximum_lag + t,j_pos) = oo_.exo_simul(maximum_lag + 1,j_pos); end; end; past_val = past_val + length(time_index_constraint);