Non-linear least-squares fitting class (GSL) More...
#include <fit_nonlin.h>
The GSL-based fitting class using a Levenberg-Marquardt type algorithm. The algorithm stops when
where is the last step and
is the current position. If test_gradient is true, then additionally fit() requires that
where is the
-th component of the gradient of the function
where
Default template arguments
func_t
- gen_fit_funct<>vec_t
- boost::numeric::ublas::vector <double >mat_t
- boost::numeric::ublas::matrix <double >
Allow the user to specify the derivatives
Fix so that the user can specify automatic scaling of the fitting parameters, where the initial guess are used for scaling so that the fitting parameters are near unity.
Definition at line 921 of file fit_nonlin.h.
Public Member Functions | |
virtual int | print_iter (size_t nv, vec_t &x, vec_t &dx, int iter2, double l_epsabs, double l_epsrel) |
Print the progress in the current iteration. | |
void | resize (size_t n, size_t p) |
Allocate memory with n data points and p parameters. | |
int | set (size_t npar, vec_t &parms, func_t &fitfun) |
Set the initial values of the parameters and the fitting function to use for the next call to iterate() | |
int | iterate () |
Perform an iteration. | |
virtual int | fit (size_t npar, vec_t &parms, mat_t &covar, double &chi2, func_t &fitfun) |
Fit the data specified in (xdat,ydat) to the function fitfun with the parameters in par . More... | |
virtual const char * | type () |
Return string denoting type ("fit_nonlin") | |
![]() | |
int | test_delta_f (size_t nparm, boost::numeric::ublas::vector< double > &dx, boost::numeric::ublas::vector< double > &x, double l_epsabs, double l_epsrel) |
Test if converged. | |
int | test_gradient_f (size_t nparm, boost::numeric::ublas::vector< double > &g, double l_epsabs) |
Test if converged. | |
![]() | |
virtual int | print_iter (size_t nv, boost::numeric::ublas::vector< double > &x, double y, int iter, double value=0.0, double limit=0.0) |
Print out iteration information. More... | |
virtual int | fit (size_t npar, boost::numeric::ublas::vector< double > &parms, boost::numeric::ublas::matrix< double > &covar, double &chi2, gen_fit_funct<> &fitfun)=0 |
Fit function fitfun using parameters in parms as initial guesses. More... | |
Public Attributes | |
bool | err_nonconv |
If true, call the error handler if fit() does not converge (default true) | |
vec_t | dx_ |
The last step taken in parameter space. | |
vec_t | f_ |
Desc. | |
bool | test_gradient |
If true, test the gradient also (default false) | |
bool | use_scaled |
Use the scaled routine if true (default true) | |
![]() | |
double | tol_rel_covar |
The relative tolerance for the computation of the covariance matrix (default 0) | |
![]() | |
size_t | ntrial |
Maximum number of iterations (default 500) | |
double | tol_abs |
Absolute tolerance (default 1.0e-4) | |
double | tol_rel |
(default 1.0e-4) | |
int | verbose |
An integer describing the verbosity of the output. | |
size_t | n_dat |
The number of data points. | |
size_t | n_par |
The number of parameters. | |
Protected Member Functions | |
void | free () |
Free allocated memory. | |
![]() | |
double | compute_actual_reduction (double fnorm0, double fnorm1) |
Desc. | |
size_t | count_nsing (const size_t ncols, const boost::numeric::ublas::matrix< double > &r2) |
Desc. | |
void | compute_newton_direction (size_t n, const boost::numeric::ublas::matrix< double > &r2, const permutation &perm2, const boost::numeric::ublas::vector< double > &qtf2, boost::numeric::ublas::vector< double > &x) |
Desc. | |
void | compute_newton_bound (size_t nd, size_t np, const boost::numeric::ublas::matrix< double > &r2, const boost::numeric::ublas::vector< double > &x, double dxnorm, const permutation &perm, const boost::numeric::ublas::vector< double > &diag, boost::numeric::ublas::vector< double > &w) |
Desc. | |
void | compute_gradient_direction (size_t n, const boost::numeric::ublas::matrix< double > &r, const permutation &p, const boost::numeric::ublas::vector< double > &qtf2, const boost::numeric::ublas::vector< double > &diag, boost::numeric::ublas::vector< double > &g) |
Desc. | |
void | update_diag (size_t n, const boost::numeric::ublas::matrix< double > &J, boost::numeric::ublas::vector< double > &diag2) |
Desc. | |
double | scaled_enorm (const boost::numeric::ublas::vector< double > &d, size_t n, const boost::numeric::ublas::vector< double > &f) |
Euclidean norm of vector f of length n , scaled by vector d . | |
double | compute_delta (boost::numeric::ublas::vector< double > &diag2, size_t n, const boost::numeric::ublas::vector< double > &x) |
Desc. | |
void | compute_rptdx (const boost::numeric::ublas::matrix< double > &r2, const permutation &p, size_t N, boost::numeric::ublas::vector< double > &dx, boost::numeric::ublas::vector< double > &rptdx2) |
Desc. | |
int | qrsolv (size_t n, boost::numeric::ublas::matrix< double > &r2, const permutation &p, const double lambda, const boost::numeric::ublas::vector< double > &diag2, const boost::numeric::ublas::vector< double > &qtb, boost::numeric::ublas::vector< double > &x, boost::numeric::ublas::vector< double > &sdiag2, boost::numeric::ublas::vector< double > &wa) |
Compute the solution to a least squares system. More... | |
void | compute_newton_correction (size_t n, const boost::numeric::ublas::matrix< double > &r2, const boost::numeric::ublas::vector< double > &sdiag2, const permutation &p, boost::numeric::ublas::vector< double > &x, double dxnorm, const boost::numeric::ublas::vector< double > &diag2, boost::numeric::ublas::vector< double > &w2) |
Desc. | |
void | lmpar (boost::numeric::ublas::matrix< double > &r2, const permutation &perm2, const boost::numeric::ublas::vector< double > &qtf2, const boost::numeric::ublas::vector< double > &diag2, double delta2, double *par_inout, boost::numeric::ublas::vector< double > &newton2, boost::numeric::ublas::vector< double > &gradient2, boost::numeric::ublas::vector< double > &sdiag2, boost::numeric::ublas::vector< double > &x, boost::numeric::ublas::vector< double > &w2, size_t nparm, size_t ndata) |
Determine Levenburg-Marquardt parameter. | |
void | compute_trial_step (size_t N, boost::numeric::ublas::vector< double > &x, boost::numeric::ublas::vector< double > &dx, boost::numeric::ublas::vector< double > &trial) |
Compute trial step, ![]() | |
int | compute_diag (size_t nparm, size_t ndata, const boost::numeric::ublas::matrix< double > &J, boost::numeric::ublas::vector< double > &diag_vec) |
Compute the root of the sum of the squares of the columns of J . More... | |
int | covariance (size_t m, size_t n, const boost::numeric::ublas::matrix< double > &J, boost::numeric::ublas::matrix< double > &covar, boost::numeric::ublas::vector< double > &norm, boost::numeric::ublas::matrix< double > &r, boost::numeric::ublas::vector< double > &tau, permutation &perm, double epsrel) |
Compute the covarance matrix covar given the Jacobian J . More... | |
Protected Attributes | |
func_t * | cff |
Function to fit. | |
vec_t | x_trial |
Trial step. | |
vec_t | f_trial |
Trial function value. | |
size_t | iter |
Number of iterations. | |
double | xnorm |
Desc. | |
double | fnorm |
Desc. | |
double | delta |
Desc. | |
double | par |
Desc. | |
mat_t | r |
Desc. | |
vec_t | tau |
Desc. | |
vec_t | diag |
Desc. | |
vec_t | qtf |
Desc. | |
vec_t | df |
Desc. | |
vec_t | rptdx |
Desc. | |
vec_t | newton |
Desc. | |
vec_t | gradient |
Desc. | |
vec_t | sdiag |
Desc. | |
vec_t | w |
Desc. | |
vec_t | work1 |
Desc. | |
permutation | perm |
Desc. | |
size_t | ndata |
Number of data points. | |
size_t | nparm |
Number of parameters. | |
vec_t | g_ |
Desc. | |
mat_t | J_ |
Desc. | |
vec_t * | x_ |
Desc. | |
|
inlinevirtual |
The covariance matrix for the parameters is returned in covar
and the value of is returned in
chi2
.
Definition at line 1388 of file fit_nonlin.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).