Merge pull request #816 from JohannesPfeifer/loglinear_steady_error

Integrate error from negative steady state with loglinear model into pri...
time-shift
Stéphane Adjemian 2015-03-01 16:30:29 +01:00
commit ba2c4db88c
3 changed files with 25 additions and 17 deletions

View File

@ -70,6 +70,8 @@ function [fval,DLIK,Hess,exit_flag,SteadyState,trend_coeff,info,Model,DynareOpti
%! M_.params has been updated in the steadystate routine and has complex valued scalars.
%! @item info==24
%! M_.params has been updated in the steadystate routine and has some NaNs.
%! @item info==26
%! M_.params has been updated in the steadystate routine and has negative/0 values in loglinear model.
%! @item info==30
%! Ergodic variance can't be computed.
%! @item info==41
@ -266,7 +268,7 @@ if info(1) == 1 || info(1) == 2 || info(1) == 5 || info(1) == 7 || info(1) == 8
DLIK=ones(length(xparam1),1);
end
return
elseif info(1) == 3 || info(1) == 4 || info(1)==6 || info(1) == 20 || info(1) == 21 || info(1) == 23
elseif info(1) == 3 || info(1) == 4 || info(1)==6 || info(1) == 20 || info(1) == 21 || info(1) == 23 || info(1)==26
fval = objective_function_penalty_base+info(2);
info = info(1);
exit_flag = 0;

View File

@ -88,6 +88,8 @@ if ~noprint
error('Some updated params contain NaN or Inf')
case 25
error('The solution to the static equations is not a steady state of the dynamic model: verify that the equations tagged by [static] and [dynamic] are consistent')
case 26
error('The loglinearization of the model cannot be performed, because the steady state is not strictly positive.')
case 30
error('Variance can''t be computed')
case 41

View File

@ -111,6 +111,7 @@ if options.loglinear
% Find variables with non positive steady state.
idx = find(dr.ys<1e-9);
if length(idx)
if options.debug
variables_with_non_positive_steady_state = M.endo_names(idx,:);
skipline()
fprintf('You are attempting to simulate/estimate a loglinear approximation of a model, but\n')
@ -127,7 +128,10 @@ if options.loglinear
fprintf('steady state levels of all the variables are strictly positive, or consider\n')
fprintf('a linearization of the model instead of a log linearization.\n')
end
error('stoch_simul::resol: The loglinearization of the model cannot be performed, because the steady state is not strictly positive!')
end
info(1)=26;
info(2)=sum(dr.ys(dr.ys<1e-9).^2);
return
end
end