bug-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-gsl] [bug #26871] inconsistent error detection in non-linear fittin


From: Mateus Araújo Santos
Subject: [Bug-gsl] [bug #26871] inconsistent error detection in non-linear fitting
Date: Mon, 22 Jun 2009 21:09:28 +0000
User-agent: Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.7) Gecko/2009030814 Iceweasel/3.0.9 (Debian-3.0.9-1)

URL:
  <http://savannah.gnu.org/bugs/?26871>

                 Summary: inconsistent error detection in non-linear fitting
                 Project: GNU Scientific Library
            Submitted by: masantos
            Submitted on: Mon Jun 22 21:09:26 2009
                Category: Runtime error
                Severity: 3 - Normal
        Operating System: debian squeeze
                  Status: None
             Assigned to: None
             Open/Closed: Open
                 Release: 1.12
         Discussion Lock: Any

    _______________________________________________________

Details:

Hi,

In fixing a bug with QtiPlot, I found myself in the need of asking gsl to
abort the fitting process if an error occurred. Unfortunately, the error
detection is not uniformly handled, and could be made to work satisfactorily
in only one case, in the iterations of the Levenberg-Masquardt algorithm. 

To be specific, the function set() in lmset.c does not check for error status
in the evaluation of the points.

the line

GSL_MULTIFIT_FN_EVAL_F_DF (fdf, x, f, J);

should be 

{
  int status = GSL_MULTIFIT_FN_EVAL_F_DF (fdf, x_trial, J);
  if (status)
    return status;
}

as it's done correctly in the function iterate in lmiterate.c

as for the Nelder-Mead simplex, there's no way (that I could find ;) of
passing an error status from the iterator to GSL. the function call is
something like

val = GSL_MULTIMIN_FN_EVAL (f, x);
...
if (!gsl_finite(val))
... error ... 

in both nmsimplex_iterate() and nmsimplex_set(), so the only way I figured to
signalize an error is to pass an inf to val, so that the process will abort.
Unfortunately, this crashes QtiPlot. There should be a way to pass a gsl
status (in my case, GSL_ESING), as it's done in the Levenberg-Marquardt case.

Best regards,

Mateus




    _______________________________________________________

Reply to this item at:

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

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]