casacore
Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
casacore::NonLinearFit< T > Class Template Referenceabstract

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...
 
NonLinearFitoperator= (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...
 
- Public Member Functions inherited from casacore::GenericL2Fit< T >
 GenericL2Fit ()
 Create a fitter: the normal way to generate a fitter object. More...
 
 GenericL2Fit (const GenericL2Fit &other)
 Copy constructor (deep copy) More...
 
GenericL2Fitoperator= (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< DoublecompuCovariance ()
 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...
 
- Protected Member Functions inherited from casacore::GenericL2Fit< T >
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...
 
- Protected Attributes inherited from casacore::GenericL2Fit< T >
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

- Public Attributes inherited from casacore::GenericL2Fit< T >
const Double COLLINEARITY
 Default collinearity test for SVD. More...
 

Detailed Description

template<class T>
class casacore::NonLinearFit< T >

Class for non-linear least-squares fit.

Review Status

Reviewed By:
wbrouw
Date Reviewed:
2006/06/15
Test programs:
tNonLinearFitLM

Prerequisite

Etymology

A nonlinear function is used to fit a set of data points.

Synopsis

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

chi-square = [(y(0)-f(x(0);a)/sigma(0)]^2 + [(y(1)-f(x(1);a)/sigma(1)]^2 +
... + [(y(N-1)-f(x(N-1);a))/sigma(N-1)]^2.

by adjusting {a(j)} in the equation.

For multidimensional functions, x(i) is a vector, and

f(x(i);a) = f(x(i,0), x(i,1), x(i,2),...;a)


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

sigma^2 = {(y(0)-z(0))^2 + (y(1)-z(1))^2 +..\.
+ (y(N-1)-z(N-1))^2}/(N-M) = chi-square/(N-M).


A statistic weight can be also be assigned to each measurement if the standard deviation is not available. sigma can be calculated from

sigma = 1/ sqrt(weight)

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.

Template Type Argument Requirements (T)

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.

Motivation

The creation of the class module was driven by the need to write code to fit Gaussian functions to data points.

Example

Definition at line 153 of file NonLinearFit.h.

Constructor & Destructor Documentation

◆ NonLinearFit() [1/2]

template<class T >
casacore::NonLinearFit< T >::NonLinearFit ( Bool  svd = False)
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.

◆ NonLinearFit() [2/2]

template<class T >
casacore::NonLinearFit< T >::NonLinearFit ( const NonLinearFit< T > &  other)

Copy constructor (deep copy)

◆ ~NonLinearFit()

template<class T >
virtual casacore::NonLinearFit< T >::~NonLinearFit ( )
virtual

Destructor.

Member Function Documentation

◆ converged()

template<class T >
Bool casacore::NonLinearFit< T >::converged ( ) const
inline

Check to see if the fit has converged.

Definition at line 195 of file NonLinearFit.h.

◆ currentIteration()

template<class T >
uInt casacore::NonLinearFit< T >::currentIteration ( ) const
inline

currentIteration() queries what the current iteration is

Definition at line 184 of file NonLinearFit.h.

◆ fitIt()

template<class T >
virtual Bool casacore::NonLinearFit< T >::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 
)
protectedpure virtual

◆ getCriteria()

template<class T >
Double casacore::NonLinearFit< T >::getCriteria ( ) const
inline

getCriteria() queries the current criteria

Definition at line 192 of file NonLinearFit.h.

◆ getMaxIter()

template<class T >
uInt casacore::NonLinearFit< T >::getMaxIter ( ) const
inline

getMaxIter() queries what the maximum number of iterations currently is

Definition at line 181 of file NonLinearFit.h.

◆ operator=()

template<class T >
NonLinearFit& casacore::NonLinearFit< T >::operator= ( const NonLinearFit< T > &  other)

Assignment (deep copy)

◆ setCriteria()

template<class T >
void casacore::NonLinearFit< T >::setCriteria ( const Double  criteria = CRITERIUM)
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.

◆ setMaxIter()

template<class T >
void casacore::NonLinearFit< T >::setMaxIter ( uInt  maxIter = MAXITER)

setMaxIter() sets the maximum number of iterations to do before stopping.

Default value is 30.

Member Data Documentation

◆ converge_p

template<class T >
Bool casacore::NonLinearFit< T >::converge_p
protected

Has fit converged.

Definition at line 206 of file NonLinearFit.h.

◆ CRITERIUM

template<class T >
const Double casacore::NonLinearFit< T >::CRITERIUM
static

Default convergence criterium (0.001)

Definition at line 160 of file NonLinearFit.h.

◆ criterium_p

template<class T >
Double casacore::NonLinearFit< T >::criterium_p
protected

Convergence criteria.

Definition at line 204 of file NonLinearFit.h.

Referenced by casacore::NonLinearFit< Double >::getCriteria(), and casacore::NonLinearFit< Double >::setCriteria().

◆ curiter_p

template<class T >
uInt casacore::NonLinearFit< T >::curiter_p
protected

Current iteration number.

Definition at line 202 of file NonLinearFit.h.

Referenced by casacore::NonLinearFit< Double >::currentIteration().

◆ MAXITER

template<class T >
const uInt casacore::NonLinearFit< T >::MAXITER
static

Default maximum number of iterations (30)

Definition at line 158 of file NonLinearFit.h.

◆ maxiter_p

template<class T >
uInt casacore::NonLinearFit< T >::maxiter_p
protected

Maximum number of iterations.

Definition at line 195 of file NonLinearFit.h.

Referenced by casacore::NonLinearFit< Double >::currentIteration(), and casacore::NonLinearFit< Double >::getMaxIter().


The documentation for this class was generated from the following file:
casacore::sqrt
LatticeExprNode sqrt(const LatticeExprNode &expr)
casacore::square
TableExprNode square(const TableExprNode &node)
Definition: ExprNode.h:1303
N
uInt N
Axis number.
Definition: ArrayAccessor.h:60