diff --git a/matlab/solve1.m b/matlab/solve1.m index fa6a3262fdb72f7e77230ceee43f184117c3f6df..403323ab1d0aa91121465f055a4701cec994a48f 100644 --- a/matlab/solve1.m +++ b/matlab/solve1.m @@ -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); + fjac_norm=sum(abs(fjac2)); + if fjac_norm>0 + p=-(fjac2+sqrt(nn*eps)*max(fjac_norm)*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