18 #include "tnt_array1d.h" 
   19 #include "tnt_array1d_utils.h" 
   20 #include "tnt_array2d.h" 
   21 #include "tnt_array2d_utils.h" 
   23 #include <gsl/gsl_vector.h> 
   24 #include <gsl/gsl_matrix.h> 
   25 #include <gsl/gsl_blas.h> 
   26 #include <gsl/gsl_multifit_nlin.h> 
   28 #include "IException.h" 
   44       typedef TNT::Array1D<double> NLVector;
 
   45       typedef TNT::Array2D<double> NLMatrix;
 
   48       NonLinearLSQ() : _fitParms(), _uncert(), _nIters(0), _maxIters(50),
 
   49                        _status(0), _userTerminated(
false), _userMessage() {}
 
   54       virtual int nSize() 
const = 0;
 
   55       virtual int nParms() 
const = 0;
 
   72       virtual NLVector guess()  = 0;
 
   73       virtual NLVector f_x(
const NLVector &x) = 0;
 
   74       virtual NLMatrix df_x(
const NLVector &x) = 0;
 
   76       virtual double absErr()
 const { 
return (1.0
E-4); }
 
   77       virtual double relErr()
 const { 
return (1.0
E-4); }
 
   81       inline int status()
 const { 
return (_status); }
 
   83       inline bool success()
 const { 
return (_status == GSL_SUCCESS); }
 
   88         return (std::string(gsl_strerror(_status)));
 
   92         return (std::string(gsl_strerror(
status)));
 
   97                                  const NLVector &uncerts, 
double cplxconj,
 
  103       inline NLVector 
coefs()
 const { 
return (_fitParms); }
 
  105       inline NLVector 
uncert()
 const { 
return (_uncert); }
 
  110       void Terminate(
const std::string &message = 
"");
 
  111       void Abort(
const std::string &reason = 
"");
 
  113       bool doContinue()
 const { 
return (!_userTerminated); }
 
  122       bool        _userTerminated;
 
  123       std::string _userMessage;
 
  128       static int f(
const gsl_vector *x, 
void *params, gsl_vector *fx);
 
  129       static int df(
const gsl_vector *x, 
void *params, gsl_matrix *J);
 
  130       static int fdf(
const gsl_vector *x, 
void *params, gsl_vector *fx,
 
  133       NLVector gslToNlsq(
const gsl_vector *v) 
const;
 
  134       NLMatrix gslToNlsq(
const gsl_matrix *m) 
const;
 
  135       gsl_vector *NlsqTogsl(
const NLVector &v, gsl_vector *gv = 0) 
const;
 
  136       gsl_matrix *NlsqTogsl(
const NLMatrix &m, gsl_matrix *gm = 0) 
const;
 
  137       NLVector getUncertainty(
const gsl_matrix *m) 
const;