Skip to content
Snippets Groups Projects
Verified Commit 5f403e9f authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Merge branch 'solve1' of git.dynare.org:JohannesPfeifer/dynare

Ref. !2035
parents efcb567f c9fd266c
Branches
Tags
1 merge request!2035Trap pathological cases in solvers
Pipeline #7091 passed
......@@ -121,7 +121,20 @@ for its = 1:maxit
end
if rcond_fjac < sqrt(eps)
fjac2=fjac'*fjac;
p=-(fjac2+sqrt(nn*eps)*max(sum(abs(fjac2)))*eye(nn))\(fjac'*fvec);
temp=max(sum(abs(fjac2)));
if temp>0
p=-(fjac2+sqrt(nn*eps)*temp*eye(nn))\(fjac'*fvec);
else
errorflag = true;
errorcode = 5;
if nargout<3
skipline()
dprintf('SOLVE: Iteration %s', num2str(its))
disp('Zero Jacobian.')
skipline()
end
return
end
else
p = -fjac\fvec ;
end
......
......@@ -327,5 +327,9 @@ else
end
% Form the appropriate convex combination of the Gauss-Newton direction and the
% scaled gradient direction.
x = alpha*x + (1.0-alpha)*min(sgnorm, delta)*s;
if alpha>0
x = alpha*x + (1.0-alpha)*min(sgnorm, delta)*s;
else %prevent zero weight on Inf evaluating to NaN
x = min(sgnorm, delta)*s;
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment