Merge branch 'master' of https://github.com/DynareTeam/dynare
commit
77b53b75b0
|
@ -42,6 +42,24 @@ nn = size(x,1);
|
|||
% checking initial values
|
||||
if jacobian_flag
|
||||
[fvec,fjac] = feval(func,x,varargin{:});
|
||||
if any(any(isinf(fjac) | isnan(fjac)))
|
||||
[infrow,infcol]=find(isinf(fjac) | isnan(fjac));
|
||||
M=evalin('base','M_'); %get variable names from workspace
|
||||
fprintf('\nSTEADY: The Jacobian contains Inf or NaN. The problem arises from: \n\n')
|
||||
for ii=1:length(infrow)
|
||||
if infcol(ii)<=M.orig_endo_nbr
|
||||
fprintf('STEADY: Derivative of Equation %d with respect to Variable %s (initial value of %s: %g) \n',infrow(ii),M.endo_names(infcol(ii),:),M.endo_names(infcol(ii),:),x(infcol(ii)))
|
||||
else %auxiliary vars
|
||||
orig_var_index=M.aux_vars(1,infcol(ii)-M.orig_endo_nbr).orig_index;
|
||||
fprintf('STEADY: Derivative of Equation %d with respect to Variable %s (initial value of %s: %g) \n',infrow(ii),M.endo_names(orig_var_index,:),M.endo_names(orig_var_index,:),x(infcol(ii)))
|
||||
end
|
||||
end
|
||||
fprintf('\nSTEADY: The problem most often occurs, because a variable with\n')
|
||||
fprintf('STEADY: exponent smaller than 1 has been initialized to 0. Taking the derivative\n')
|
||||
fprintf('STEADY: and evaluating it at the steady state then results in a division by 0.\n')
|
||||
error('An element of the Jacobian is not finite or NaN')
|
||||
end
|
||||
|
||||
else
|
||||
fvec = feval(func,x,varargin{:});
|
||||
fjac = zeros(nn,nn) ;
|
||||
|
|
Loading…
Reference in New Issue