From fc9197a9a160aa84f0482dd2c804cdb5cb6764e8 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Mon, 2 Sep 2019 18:47:46 +0200 Subject: [PATCH] imcforecast.m: Make code robust to 1 period When using 1 period, the second dimension was a singleton that was removed as well by squeeze, resulting in a column vector when a row vector/matrix was expected. Fixes https://forum.dynare.org/t/problem-with-the-conditional-forecast-in-dynare-4-5-7/14385/2 --- matlab/imcforecast.m | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/matlab/imcforecast.m b/matlab/imcforecast.m index 4b132c5dc..935c453a5 100644 --- a/matlab/imcforecast.m +++ b/matlab/imcforecast.m @@ -265,13 +265,21 @@ forecasts.instruments = options_cond_fcst.controlled_varexo; for i = 1:EndoSize forecasts.cond.Mean.(M_.endo_names{oo_.dr.order_var(i)}) = mFORCS1(i,:)'; - tmp = sort(squeeze(FORCS1(i,:,:))'); + if size(FORCS1,2)>1 + tmp = sort(squeeze(FORCS1(i,:,:))'); + else + tmp = sort(squeeze(FORCS1(i,:,:))); + end forecasts.cond.ci.(M_.endo_names{oo_.dr.order_var(i)}) = [tmp(t1,:)' ,tmp(t2,:)' ]'; end for i = 1:n1 forecasts.controlled_exo_variables.Mean.(options_cond_fcst.controlled_varexo{i}) = mFORCS1_shocks(i,:)'; - tmp = sort(squeeze(FORCS1_shocks(i,:,:))'); + if size(FORCS1_shocks,2)>1 + tmp = sort(squeeze(FORCS1_shocks(i,:,:))'); + else + tmp = sort(squeeze(FORCS1_shocks(i,:,:))); + end forecasts.controlled_exo_variables.ci.(options_cond_fcst.controlled_varexo{i}) = [tmp(t1,:)' ,tmp(t2,:)' ]'; end @@ -290,7 +298,11 @@ mFORCS2 = mean(FORCS2,3); for i = 1:EndoSize forecasts.uncond.Mean.(M_.endo_names{oo_.dr.order_var(i)})= mFORCS2(i,:)'; - tmp = sort(squeeze(FORCS2(i,:,:))'); + if size(FORCS2,2)>1 + tmp = sort(squeeze(FORCS2(i,:,:))'); + else + tmp = sort(squeeze(FORCS2(i,:,:))); + end forecasts.uncond.ci.(M_.endo_names{oo_.dr.order_var(i)}) = [tmp(t1,:)' ,tmp(t2,:)' ]'; end forecasts.graph.title = graph_title;