diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m index 647c17ecbe223e72faf153b267ab4ce486233d64..fc06ff0ddff59c24be3168830566ea02e9716410 100644 --- a/matlab/dsge_likelihood.m +++ b/matlab/dsge_likelihood.m @@ -614,7 +614,7 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter kalman_tol, DynareOptions.riccati_tol, ... DynareOptions.presample, ... T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods); - end; + end end if analytic_derivation, LIK1=LIK; @@ -623,10 +623,19 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter lik=lik1{1}; end if isinf(LIK) - if kalman_algo == 1 - kalman_algo = 2; + if DynareOptions.use_univariate_filters_if_singularity_is_detected + if kalman_algo == 1 + kalman_algo = 2; + else + kalman_algo = 4; + end else - kalman_algo = 4; + if isinf(LIK) + info = 66; + fval = objective_function_penalty_base+1; + exit_flag = 0; + return + end end else if DynareOptions.lik_init==3 diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 93857f2251c903959a594dabbe0eb2cdf87ef929..03f164eeba7cb0246b4e70610a2f2a4659405c5c 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -330,6 +330,7 @@ options_.filtered_vars = 0; options_.first_obs = 1; options_.kalman_algo = 0; options_.kalman_tol = 1e-10; +options_.use_univariate_filters_if_singularity_is_detected = 1; options_.riccati_tol = 1e-6; options_.lik_algo = 1; options_.lik_init = 1;