Commit b79f7e55 authored by Houtan Bastani's avatar Houtan Bastani
Browse files

Merge pull request #513 from JohannesPfeifer/improved_messages

Add more explicit information in case of singularity problem
parents 07137e80 8282e76d
...@@ -646,7 +646,7 @@ if ~options_.mh_posterior_mode_estimation && options_.cova_compute ...@@ -646,7 +646,7 @@ if ~options_.mh_posterior_mode_estimation && options_.cova_compute
disp('POSTERIOR KERNEL OPTIMIZATION PROBLEM!') disp('POSTERIOR KERNEL OPTIMIZATION PROBLEM!')
disp(' (minus) the hessian matrix at the "mode" is not positive definite!') disp(' (minus) the hessian matrix at the "mode" is not positive definite!')
disp('=> posterior variance of the estimated parameters are not positive.') disp('=> posterior variance of the estimated parameters are not positive.')
disp('You should try to change the initial values of the parameters using') disp('You should try to change the initial values of the parameters using')
disp('the estimated_params_init block, or use another optimization routine.') disp('the estimated_params_init block, or use another optimization routine.')
params_at_bound=find(xparam1==ub | xparam1==lb); params_at_bound=find(xparam1==ub | xparam1==lb);
if ~isempty(params_at_bound) if ~isempty(params_at_bound)
......
...@@ -85,6 +85,7 @@ end ...@@ -85,6 +85,7 @@ end
% %
% singular Jacobian of static model % singular Jacobian of static model
% %
singularity_problem = 0;
if ~isfield(M,'block_structure_stat') if ~isfield(M,'block_structure_stat')
nb = 1; nb = 1;
else else
...@@ -107,6 +108,7 @@ for b=1:nb ...@@ -107,6 +108,7 @@ for b=1:nb
end end
rank_jacob = rank(jacob); rank_jacob = rank(jacob);
if rank_jacob < size(jacob,1) if rank_jacob < size(jacob,1)
singularity_problem = 1;
disp(['model_diagnostic: the Jacobian of the static model is ' ... disp(['model_diagnostic: the Jacobian of the static model is ' ...
'singular']) 'singular'])
disp(['there is ' num2str(endo_nbr-rank_jacob) ... disp(['there is ' num2str(endo_nbr-rank_jacob) ...
...@@ -143,4 +145,9 @@ for b=1:nb ...@@ -143,4 +145,9 @@ for b=1:nb
end end
end end
end end
if singularity_problem
fprint('The presence of a singularity problem typically indicates that there is one\n')
fprint('redundant equation entered in the model block, while another non-redundant equation\n')
fprint('is missing. The problem often derives from Walras Law.\n')
end
...@@ -36,7 +36,8 @@ if ~noprint ...@@ -36,7 +36,8 @@ if ~noprint
case 2 case 2
error(['The generalized Schur (QZ) decomposition failed. ' ... error(['The generalized Schur (QZ) decomposition failed. ' ...
'For more information, see the documentation for Lapack function dgges: info=' ... 'For more information, see the documentation for Lapack function dgges: info=' ...
int2str(info(2)) ', n=' int2str(info(3))]) int2str(info(2)) ', n=' int2str(info(3)) ...
'. You can also run model_diagnostics to get more information on what may cause this problem.'])
case 3 case 3
error(['Blanchard Kahn conditions are not satisfied: no stable' ... error(['Blanchard Kahn conditions are not satisfied: no stable' ...
' equilibrium']) ' equilibrium'])
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment