Follow-up Comment #1, bug #42220 (project gsl):

Hi!

In fact lambda = p.v becomes zero if the last x vector matches the root of the
system too closely.

The problem can be solved by returning GSL_EZERODIV in function
broyden_iterate (file broden.c, line 368, gsl-1.15) instead of calling
GSL_ERROR ("approximation to Jacobian has collapsed", GSL_EZERODIV).

The iteration loop then hast to check if the last x vector is a root of the
system:

do {
  ++iter;
  status = gsl_multiroot_fsolver_iterate(solver);
  if (status != GSL_SUCCESS) {
    status = gsl_multiroot_test_residual(gsl_multiroot_fsolver_f(solver),
      EPSABS);
    break;
  }
  status = gsl_multiroot_test_residual(gsl_multiroot_fsolver_f(solver),
    EPSABS);
} while ((status == GSL_CONTINUE) && (iter < 1000));


Sorry for the bad formatting, but I'm new here. If you have any questinos,
please feel free to contact me.

Best regards

Oliver

    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?42220>

_______________________________________________
  Nachricht gesendet von/durch Savannah
  http://savannah.gnu.org/


Reply via email to