casacore
|
Class for non-linear least-squares fit. More...
#include <NonLinearFit.h>
Public Member Functions | |
NonLinearFit (Bool svd=False) | |
Create a fitter: the normal way to generate a fitter object. More... | |
NonLinearFit (const NonLinearFit &other) | |
Copy constructor (deep copy) More... | |
NonLinearFit & | operator= (const NonLinearFit &other) |
Assignment (deep copy) More... | |
virtual | ~NonLinearFit () |
Destructor. More... | |
void | setMaxIter (uInt maxIter=MAXITER) |
setMaxIter() sets the maximum number of iterations to do before stopping. More... | |
uInt | getMaxIter () const |
getMaxIter() queries what the maximum number of iterations currently is More... | |
uInt | currentIteration () const |
currentIteration() queries what the current iteration is More... | |
void | setCriteria (const Double criteria=CRITERIUM) |
setCriteria() sets the convergence criteria. More... | |
Double | getCriteria () const |
getCriteria() queries the current criteria More... | |
Bool | converged () const |
Check to see if the fit has converged. More... | |
![]() | |
GenericL2Fit () | |
Create a fitter: the normal way to generate a fitter object. More... | |
GenericL2Fit (const GenericL2Fit &other) | |
Copy constructor (deep copy) More... | |
GenericL2Fit & | operator= (const GenericL2Fit &other) |
Assignment (deep copy) More... | |
virtual | ~GenericL2Fit () |
Destructor. More... | |
template<class U > | |
void | setFunction (const Function< U, U > &function) |
Sets the function to be fitted. More... | |
template<class U > | |
Bool | setConstraint (const uInt n, const Function< U, U > &function, const Vector< typename FunctionTraits< T >::BaseType > &x, const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
Set the possible constraint functions. More... | |
Bool | setConstraint (const uInt n, const Vector< typename FunctionTraits< T >::BaseType > &x, const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
Bool | setConstraint (const uInt n, const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
Bool | addConstraint (const Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > &function, const Vector< typename FunctionTraits< T >::BaseType > &x, const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
Bool | addConstraint (const Vector< typename FunctionTraits< T >::BaseType > &x, const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
Bool | addConstraint (const typename FunctionTraits< T >::BaseType y=typename FunctionTraits< T >::BaseType(0)) |
void | setCollinearity (const Double cln) |
Set the collinearity factor as the square of the sine of the minimum angle allowed between input vectors (default zero for non-SVD, 1e-8 for SVD) More... | |
void | asWeight (const Bool aswgt) |
Set sigma values to be interpreted as weight (i.e. More... | |
void | asSVD (const Bool svd) |
Set the use of SVD or not (default). More... | |
Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | fittedFunction () |
Return a pointer to the function being fitted. More... | |
const Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | fittedFunction () const |
uInt | fittedNumber () const |
Return the number of fitted parameters. More... | |
uInt | NConstraints () |
Return the number of constraints, and pointers to constraint functions. More... | |
Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | getConstraint (const uInt n) |
Vector< typename LSQTraits< typename FunctionTraits< T >::BaseType >::base > | getSVDConstraint (uInt n) |
Return the nth constraint equation derived from SVD Note that the number present will be given by getDeficiency() More... | |
void | setParameterValues (const Vector< typename FunctionTraits< T >::BaseType > &parms) |
Set the parameter values. More... | |
void | setMaskedParameterValues (const Vector< typename FunctionTraits< T >::BaseType > &parms) |
Vector< typename FunctionTraits< T >::BaseType > | fit (const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
Fit the function to the data. More... | |
Vector< typename FunctionTraits< T >::BaseType > | fit (const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
Vector< typename FunctionTraits< T >::BaseType > | fit (const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< Bool > *const mask=0) |
Vector< typename FunctionTraits< T >::BaseType > | fit (const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< Bool > *const mask=0) |
Vector< typename FunctionTraits< T >::BaseType > | fit (const Vector< Bool > *const mask=0) |
Bool | fit (Vector< typename FunctionTraits< T >::BaseType > &sol, const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
Bool | fit (Vector< typename FunctionTraits< T >::BaseType > &sol, const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
Bool | fit (Vector< typename FunctionTraits< T >::BaseType > &sol, const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const typename FunctionTraits< T >::BaseType &sigma, const Vector< Bool > *const mask=0) |
Bool | fit (Vector< typename FunctionTraits< T >::BaseType > &sol, const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const typename FunctionTraits< T >::BaseType &sigma, const Vector< Bool > *const mask=0) |
Bool | fit (Vector< typename FunctionTraits< T >::BaseType > &sol, const Vector< Bool > *const mask=0) |
Double | chiSquare () const |
Obtain the chi squared. More... | |
const Vector< typename FunctionTraits< T >::BaseType > & | errors () const |
Get the errors on the solved values. More... | |
Bool | errors (Vector< typename FunctionTraits< T >::BaseType > &err) const |
Matrix< Double > | compuCovariance () |
Get covariance matrix. More... | |
void | compuCovariance (Matrix< Double > &cov) |
void | buildNormalMatrix (const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
Generate the normal equations by one or more calls to the buildNormalMatrix(), before calling a fit() without arguments. More... | |
void | buildNormalMatrix (const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > &sigma, const Vector< Bool > *const mask=0) |
void | buildNormalMatrix (const Vector< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< Bool > *const mask=0) |
void | buildNormalMatrix (const Matrix< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< Bool > *const mask=0) |
Bool | residual (Vector< typename FunctionTraits< T >::BaseType > &y, const Array< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &sol, const Bool model=False) |
Return the residual after a fit in y. More... | |
Bool | residual (Vector< typename FunctionTraits< T >::BaseType > &y, const Array< typename FunctionTraits< T >::BaseType > &x, const Bool model=False) |
uInt | getRank () const |
Get the rank of the solution (or zero of no fit() done yet). More... | |
Static Public Attributes | |
static const uInt | MAXITER |
Default maximum number of iterations (30) More... | |
static const Double | CRITERIUM |
Default convergence criterium (0.001) More... | |
Protected Member Functions | |
virtual Bool | fitIt (Vector< typename FunctionTraits< T >::BaseType > &sol, const Array< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > *const sigma, const Vector< Bool > *const mask=0)=0 |
Generalised fitter. More... | |
![]() | |
void | buildMatrix (const Array< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > *const sigma, const Vector< Bool > *const mask=0) |
Build the normal matrix. More... | |
void | buildConstraint () |
Build the constraint equations. More... | |
void | fillSVDConstraints () |
Get the SVD constraints. More... | |
Bool | buildResidual (Vector< typename FunctionTraits< T >::BaseType > &y, const Array< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > *const sol, const Bool model=False) |
Calculate residuals. More... | |
FunctionTraits< T >::BaseType | getVal_p (const Array< typename FunctionTraits< T >::BaseType > &x, uInt j, uInt i) const |
Function to get evaluated functional value. More... | |
void | initfit_p (uInt parcnt) |
Initialise the fitter with number of solvable parameters. More... | |
uInt | testInput_p (const Array< typename FunctionTraits< T >::BaseType > &x, const Vector< typename FunctionTraits< T >::BaseType > &y, const Vector< typename FunctionTraits< T >::BaseType > *const sigma) |
Return number of condition equations and check sizes x, y, sigma. More... | |
void | resetFunction () |
Reset all the input. More... | |
Protected Attributes | |
uInt | maxiter_p |
Maximum number of iterations. More... | |
uInt | curiter_p |
Current iteration number. More... | |
Double | criterium_p |
Convergence criteria. More... | |
Bool | converge_p |
Has fit converged. More... | |
![]() | |
uInt | aCount_ai |
Adjustable. More... | |
Bool | svd_p |
SVD indicator. More... | |
Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | ptr_derive_p |
Function to use in evaluating condition equation. More... | |
PtrBlock< Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * > | constrFun_p |
List of functions describing the possible constraint equations e.g. More... | |
PtrBlock< Vector< typename FunctionTraits< T >::BaseType > * > | constrArg_p |
List of vectors describing the constraint equations' arguments. More... | |
PtrBlock< typename FunctionTraits< T >::BaseType * > | constrVal_p |
List of values describing the constraint equations' value. More... | |
uInt | pCount_p |
Number of available parameters. More... | |
uInt | ndim_p |
Number of dimensions of input data. More... | |
Bool | needInit_p |
No normal equations yet. More... | |
Bool | solved_p |
Have solution. More... | |
Bool | errors_p |
Have errors. More... | |
Bool | ferrors_p |
Bool | asweight_p |
Interpret as weights rather than as sigma the given values. More... | |
uInt | nr_p |
The rank of the solution. More... | |
Vector< typename FunctionTraits< T >::BaseType > | condEq_p |
Condition equation parameters (for number of adjustable parameters) More... | |
Vector< typename FunctionTraits< T >::BaseType > | fullEq_p |
Equation for all available parameters. More... | |
Vector< typename FunctionTraits< T >::ArgType > | arg_p |
Contiguous argument areas. More... | |
Vector< typename FunctionTraits< T >::ArgType > | carg_p |
Vector< typename FunctionTraits< T >::BaseType > | sol_p |
Local solution area. More... | |
Vector< typename FunctionTraits< T >::BaseType > | fsol_p |
Vector< typename FunctionTraits< T >::BaseType > | err_p |
Local error area. More... | |
Vector< typename FunctionTraits< T >::BaseType > | ferr_p |
FunctionTraits< T >::DiffType | valder_p |
Local value and derivatives. More... | |
Vector< Vector< typename LSQTraits< typename FunctionTraits< T >::BaseType >::base > > | consvd_p |
Local SVD constraints. More... | |
Additional Inherited Members | |
![]() | |
const Double | COLLINEARITY |
Default collinearity test for SVD. More... | |
Class for non-linear least-squares fit.
A nonlinear function is used to fit a set of data points.
NOTE: Constraints added. Documentation out of date at moment, check the tLinearFitSVD and tNonLinearFirLM programs for examples.
The following is a brief summary of the non-linear least-squares fit problem. See module header, Fitting, for a more complete description.
Given a set of N data points (measurements), (x(i), y(i)) i = 0,...,N-1, along with a set of standard deviations, sigma(i), for the data points, and a specified non-linear function, f(x;a) where a = a(j) j = 0,...,M-1 are a set of parameters to be determined, the non-linear least-squares fit tries to minimize
by adjusting {a(j)} in the equation.
For multidimensional functions, x(i) is a vector, and
If the measurement errors (standard deviation sigma) are not known at all, they can all be set to one initially. In this case, we assume all measurements have the same standard deviation, after minimizing chi-square, we recompute
A statistic weight can be also be assigned to each measurement if the standard deviation is not available. sigma can be calculated from
Alternatively a 'weight' switch can be set with asWeight()
. For best arithmetic performance, weight should be normalized to a maximum value of one. Having a large weight value can sometimes lead to overflow problems.
The function to be fitted to the data can be given as an instance of the Function class. One can also form a sum of functions using the CompoundFunction.
For small datasets the usage of the calls is:
Note that the fitter is reusable. An example is given in the following.
The solution of a fit always produces the total number of parameters given to the fitter. I.e. including any parameters that were fixed. In the latter case the solution returned will be the fixed value.
If there are a large number of unknowns or a large number of data points machine memory limits (or timing reasons) may not allow a complete in-core fitting to be performed. In this case one can incrementally build the normal equation (see buildNormalMatrix()).
The normal operation of the class tests for real inversion problems only. If tests are needed for almost collinear columns in the solution matrix, the collinearity can be set as the square of the sine of the minimum angle allowed.
Singular Value Decomposition is supported by setting the 'svd' switch, which has a behaviour completely identical to, apart from a default collinearity check of 1e-8.
Other information (see a.o. LSQaips) can be set and obtained as well.
The creation of the class module was driven by the need to write code to fit Gaussian functions to data points.
Definition at line 153 of file NonLinearFit.h.
|
explicit |
Create a fitter: the normal way to generate a fitter object.
Necessary data will be deduced from the Functional provided with setFunction()
. Create optionally a fitter with SVD behaviour specified.
casacore::NonLinearFit< T >::NonLinearFit | ( | const NonLinearFit< T > & | other | ) |
Copy constructor (deep copy)
|
virtual |
Destructor.
|
inline |
Check to see if the fit has converged.
Definition at line 195 of file NonLinearFit.h.
|
inline |
currentIteration() queries what the current iteration is
Definition at line 184 of file NonLinearFit.h.
|
protectedpure virtual |
Generalised fitter.
Implements casacore::GenericL2Fit< T >.
Implemented in casacore::NonLinearFitLM< T >, and casacore::NonLinearFitLM< Double >.
|
inline |
getCriteria() queries the current criteria
Definition at line 192 of file NonLinearFit.h.
|
inline |
getMaxIter() queries what the maximum number of iterations currently is
Definition at line 181 of file NonLinearFit.h.
NonLinearFit& casacore::NonLinearFit< T >::operator= | ( | const NonLinearFit< T > & | other | ) |
Assignment (deep copy)
|
inline |
setCriteria() sets the convergence criteria.
The actual value and its interpretation depends on the derived class used to do the actual iteration. Default value is 0.001.
Definition at line 189 of file NonLinearFit.h.
void casacore::NonLinearFit< T >::setMaxIter | ( | uInt | maxIter = MAXITER | ) |
setMaxIter() sets the maximum number of iterations to do before stopping.
Default value is 30.
|
protected |
Has fit converged.
Definition at line 206 of file NonLinearFit.h.
|
static |
Default convergence criterium (0.001)
Definition at line 160 of file NonLinearFit.h.
|
protected |
Convergence criteria.
Definition at line 204 of file NonLinearFit.h.
Referenced by casacore::NonLinearFit< Double >::getCriteria(), and casacore::NonLinearFit< Double >::setCriteria().
|
protected |
Current iteration number.
Definition at line 202 of file NonLinearFit.h.
Referenced by casacore::NonLinearFit< Double >::currentIteration().
|
static |
Default maximum number of iterations (30)
Definition at line 158 of file NonLinearFit.h.
|
protected |
Maximum number of iterations.
Definition at line 195 of file NonLinearFit.h.
Referenced by casacore::NonLinearFit< Double >::currentIteration(), and casacore::NonLinearFit< Double >::getMaxIter().