diff --git a/matlab/dsge_var_likelihood.m b/matlab/dsge_var_likelihood.m index 07b5d1b73..a8a9e8710 100644 --- a/matlab/dsge_var_likelihood.m +++ b/matlab/dsge_var_likelihood.m @@ -239,10 +239,38 @@ else% Evaluation of the likelihood of the dsge-var model when the dsge prior wei lik = .5*lik;% Minus likelihood end +if isnan(lik) + info = 45; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end + +if imag(lik)~=0 + info = 46; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end + % Add the (logged) prior density for the dsge-parameters. lnprior = priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4); fval = (lik-lnprior); +if isnan(fval) + info = 47; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end + +if imag(fval)~=0 + info = 48; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end + if (nargout == 8) if isinf(dsge_prior_weight) iXX = iGXX; diff --git a/matlab/non_linear_dsge_likelihood.m b/matlab/non_linear_dsge_likelihood.m index f3122ec73..5ccddc18b 100644 --- a/matlab/non_linear_dsge_likelihood.m +++ b/matlab/non_linear_dsge_likelihood.m @@ -319,9 +319,11 @@ DynareOptions.warning_for_steadystate = 0; LIK = feval(DynareOptions.particle.algorithm,ReducedForm,Y,start,DynareOptions); set_dynare_random_generator_state(s1,s2); if imag(LIK) + info = 46; likelihood = objective_function_penalty_base; exit_flag = 0; elseif isnan(LIK) + info = 45; likelihood = objective_function_penalty_base; exit_flag = 0; else @@ -332,4 +334,18 @@ DynareOptions.warning_for_steadystate = 1; % Adds prior if necessary % ------------------------------------------------------------------------------ lnprior = priordens(xparam1(:),BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4); -fval = (likelihood-lnprior); \ No newline at end of file +fval = (likelihood-lnprior); + +if isnan(fval) + info = 47; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end + +if imag(fval)~=0 + info = 48; + fval = objective_function_penalty_base + 100; + exit_flag = 0; + return +end