Loading...
Searching...
No Matches
casacore::LinearFit< T > Class Template Reference
scimath package (libcasa_scimath) » Fitting_module

More...

`#include <LinearFit.h>`

## Public Member Functions

| LinearFit ()
| Create a fitter: the normal way to generate a fitter object.
| LinearFit (const LinearFit &other)
| Copy constructor (deep copy).
LinearFit & | operator= (const LinearFit &other)
| Assignment (deep copy).
virtual | ~LinearFit ()
| Destructor.
Public Member Functions inherited from casacore::GenericL2Fit< T >
| GenericL2Fit ()
| Create a fitter: the normal way to generate a fitter object.
| GenericL2Fit (const GenericL2Fit &other)
| Copy constructor (deep copy).
GenericL2Fit & | operator= (const GenericL2Fit &other)
| Assignment (deep copy).
virtual | ~GenericL2Fit ()
| Destructor.
template<class U>
void | setFunction (const Function< U, U > &function)
| Sets the function to be fitted.
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.
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).
void | asWeight (const Bool aswgt)
| Set sigma values to be interpreted as weight (i.e.
void | asSVD (const Bool svd)
| Set the use of SVD or not (default).
Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | fittedFunction ()
| Return a pointer to the function being fitted.
const Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | fittedFunction () const
uInt | fittedNumber () const
| Return the number of fitted parameters.
uInt | NConstraints ()
| Return the number of constraints, and pointers to constraint functions.
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().
void | setParameterValues (const Vector< typename FunctionTraits< T >::BaseType > &parms)
| Set the parameter values.
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.
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.
const Vector< typename FunctionTraits< T >::BaseType > & | errors () const
| Get the errors on the solved values.
Bool | errors (Vector< typename FunctionTraits< T >::BaseType > &err) const
Matrix< Double > | compuCovariance ()
| Get covariance matrix.
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.
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.
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).
Public Member Functions inherited from casacore::LSQaips
| LSQaips (uInt nUnknowns, uInt nConstraints=0)
| Construct an object with the number of unknown, knowns and constraints, and type, using the default collinearity factor and the default Levenberg-Marquardt adjustment factor.
| LSQaips (uInt nUnknowns, const LSQReal &, uInt nConstraints=0)
| Allow explicit complex/real specification.
| LSQaips (uInt nUnknowns, const LSQComplex &, uInt nConstraints=0)
| LSQaips ()
| Default constructor (empty, real, only usable after a set(nUnknowns)).
| LSQaips (const LSQaips &other)
| Copy constructor (deep copy).
LSQaips & | operator= (const LSQaips &other)
| Assignment (deep copy).
| ~LSQaips ()
template<class U>
void | solve (U *sol)
| Solve normal equations.
template<class U>
void | solve (std::complex< U > *sol)
template<class U>
void | solve (U &sol)
template<class U>
void | solve (Vector< U > &sol)
template<class U>
Bool | solveLoop (uInt &nRank, U *sol, Bool doSVD=False)
| Solve a Levenberg-Marquardt loop.
template<class U>
Bool | solveLoop (uInt &nRank, std::complex< U > *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (uInt &nRank, U &sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (uInt &nRank, Vector< U > &sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, U *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, std::complex< U > *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, U &sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, Vector< U > &sol, Bool doSVD=False)
template<class U>
Bool | getCovariance (U *covar)
| Get the covariance matrix.
template<class U>
Bool | getCovariance (std::complex< U > *covar)
template<class U>
Bool | getCovariance (Array< U > &covar)
template<class U>
Bool | getErrors (U *errors)
| Get main diagonal of covariance function (of size nUnknowns).
template<class U>
Bool | getErrors (std::complex< U > *errors)
template<class U>
Bool | getErrors (U &errors)
template<class U>
Bool | getErrors (Vector< U > &errors)
Public Member Functions inherited from casacore::LSQFit
| LSQFit (uInt nUnknowns, uInt nConstraints=0)
| Construct an object with the number of unknowns and constraints, using the default collinearity factor and the default Levenberg-Marquardt adjustment factor.
| LSQFit (uInt nUnknowns, const LSQReal &, uInt nConstraints=0)
| Allow explicit Real specification.
| LSQFit (uInt nUnknowns, const LSQComplex &, uInt nConstraints=0)
| Allow explicit Complex specification.
| LSQFit ()
| Default constructor (empty, only usable after a set(nUnknowns)).
| LSQFit (const LSQFit &other)
| Copy constructor (deep copy).
LSQFit & | operator= (const LSQFit &other)
| Assignment (deep copy).
| ~LSQFit ()
Bool | invert (uInt &nRank, Bool doSVD=False)
| Triangularize the normal equations and determine the rank nRank of the normal equations and, in the case of an SVD solution, the constraint equations.
template<class U>
void | copy (const Double *beg, const Double *end, U &sol, LSQReal)
| Copy date from beg to end; converting if necessary to complex data.
template<class U>
void | copy (const Double *beg, const Double *end, U &sol, LSQComplex)
template<class U>
void | copy (const Double *beg, const Double *end, U *sol, LSQReal)
template<class U>
void | copy (const Double *beg, const Double *end, U *sol, LSQComplex)
template<class U>
void | uncopy (Double *beg, const Double *end, U &sol, LSQReal)
template<class U>
void | uncopy (Double *beg, const Double *end, U &sol, LSQComplex)
template<class U>
void | uncopy (Double *beg, const Double *end, U *sol, LSQReal)
template<class U>
void | uncopy (Double *beg, const Double *end, U *sol, LSQComplex)
template<class U>
void | copyDiagonal (U &errors, LSQReal)
template<class U>
void | copyDiagonal (U &errors, LSQComplex)
template<class U>
void | solve (U *sol)
| Solve normal equations.
template<class U>
void | solve (std::complex< U > *sol)
template<class U>
void | solve (U &sol)
template<class U>
Bool | solveLoop (uInt &nRank, U *sol, Bool doSVD=False)
| Solve a loop in a non-linear set.
template<class U>
Bool | solveLoop (uInt &nRank, std::complex< U > *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (uInt &nRank, U &sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, U *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, std::complex< U > *sol, Bool doSVD=False)
template<class U>
Bool | solveLoop (Double &fit, uInt &nRank, U &sol, Bool doSVD=False)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const U &obs, Bool doNorm=True, Bool doKnown=True)
| Make normal equations using the cEq condition equation (cArray) (with nUnknowns elements) and a weight weight, given the known observed value obs.
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const U &obs, LSQFit::Real, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const std::complex< U > &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Complex, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Separable, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::AsReal, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Conjugate, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const U &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const V &cEq2, const U &weight, const U &obs, const U &obs2, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const U &obs, LSQFit::Real, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const std::complex< U > &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Complex, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Separable, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::AsReal, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNorm (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Conjugate, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const U &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const U &obs, LSQFit::Real, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const std::complex< U > &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Complex, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Separable, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const std::complex< U > &obs, LSQFit::AsReal, Bool doNorm=True, Bool doKnown=True)
template<class U, class V>
void | makeNorm (const std::vector< std::pair< uInt, V > > &cEq, const U &weight, const std::complex< U > &obs, LSQFit::Conjugate, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNormSorted (uInt nIndex, const W &cEqIndex, const V &cEq, const U &weight, const U &obs, Bool doNorm=True, Bool doKnown=True)
template<class U, class V, class W>
void | makeNormSorted (uInt nIndex, const W &cEqIndex, const V &cEq, const V &cEq2, const U &weight, const U &obs, const U &obs2, Bool doNorm=True, Bool doKnown=True)
template<class U>
Bool | getConstraint (uInt n, U *cEq) const
| Get the n-th (from 0 to the rank deficiency, or missing rank, see e.g.
template<class U>
Bool | getConstraint (uInt n, std::complex< U > *cEq) const
template<class U>
Bool | getConstraint (uInt n, U &cEq) const
template<class U, class V>
Bool | setConstraint (uInt n, const V &cEq, const U &obs)
| Add a new constraint equation (updating nConstraints); or set a numbered constraint equation (0..nConstraints-1).
template<class U, class V>
Bool | setConstraint (uInt n, const V &cEq, const std::complex< U > &obs)
template<class U, class V, class W>
Bool | setConstraint (uInt n, uInt nIndex, const W &cEqIndex, const V &cEq, const U &obs)
template<class U, class V, class W>
Bool | setConstraint (uInt n, uInt nIndex, const W &cEqIndex, const V &cEq, const std::complex< U > &obs)
template<class U, class V>
Bool | addConstraint (const V &cEq, const U &obs)
template<class U, class V>
Bool | addConstraint (const V &cEq, const std::complex< U > &obs)
template<class U, class V, class W>
Bool | addConstraint (uInt nIndex, const W &cEqIndex, const V &cEq, const U &obs)
template<class U, class V, class W>
Bool | addConstraint (uInt nIndex, const W &cEqIndex, const V &cEq, const std::complex< U > &obs)
Bool | merge (const LSQFit &other)
| Merge other LSQFit object (i.e.
Bool | merge (const LSQFit &other, uInt nIndex, const uInt *nEqIndex)
Bool | merge (const LSQFit &other, uInt nIndex, const std::vector< uInt > &nEqIndex)
template<class W>
Bool | merge (const LSQFit &other, uInt nIndex, const W &nEqIndex)
void | reset ()
| Reset status to empty.
void | set (uInt nUnknowns, uInt nConstraints=0)
| Set new sizes (default is for Real).
void | set (Int nUnknowns, Int nConstraints=0)
void | set (uInt nUnknowns, const LSQReal &, uInt nConstraints=0)
void | set (Int nUnknowns, const LSQReal &, Int nConstraints=0)
void | set (uInt nUnknowns, const LSQComplex &, uInt nConstraints=0)
void | set (Int nUnknowns, const LSQComplex &, Int nConstraints=0)
void | set (Double factor=1e-6, Double LMFactor=1e-3)
| Set new factors (collinearity factor, and Levenberg-Marquardt LMFactor).
void | setEpsValue (Double epsval=1e-8)
| Set new value solution test.
void | setEpsDerivative (Double epsder=1e-8)
| Set new derivative test.
void | setMaxIter (uInt maxiter=0)
| Set maximum number of iterations.
uInt | nIterations () const
| Get number of iterations done.
void | setBalanced (Bool balanced=False)
| Set the expected form of the normal equations.
LSQFit::ReadyCode | isReady () const
| Ask the state of the non-linear solutions.
const std::string & | readyText () const
template<class U>
Bool | getCovariance (U *covar)
| Get the covariance matrix (of size nUnknowns * nUnknowns).
template<class U>
Bool | getCovariance (std::complex< U > *covar)
template<class U>
Bool | getErrors (U *errors)
| Get main diagonal of covariance function (of size nUnknowns).
template<class U>
Bool | getErrors (std::complex< U > *errors)
template<class U>
Bool | getErrors (U &errors)
uInt | nUnknowns () const
| Get the number of unknowns.
uInt | nConstraints () const
| Get the number of constraints.
uInt | getDeficiency () const
| Get the rank deficiency Warning: Note that the number is returned assuming real values; For complex values it has to be halved .
Double | getChi () const
| Get chi^2 (both are identical); the standard deviation (per observation) and the standard deviation per weight unit.
Double | getChi2 () const
Double | getSD () const
Double | getWeightedSD () const
void | debugIt (uInt &nun, uInt &np, uInt &ncon, uInt &ner, uInt &rank, Double *&nEq, Double *&known, Double *&constr, Double *&er, uInt *&piv, Double *&sEq, Double *&sol, Double &prec, Double &nonlin) const
| Debug:
Bool | fromRecord (String &error, const RecordInterface &in)
| Create an LSQFit object from a record.
Bool | toRecord (String &error, RecordInterface &out) const
| Create a record from an LSQFit object.
const String & | ident () const
| Get identification of record.
void | toAipsIO (AipsIO &) const
| Save or restore using AipsIO.
void | fromAipsIO (AipsIO &)

## 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)
| Generalised fitter.
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.
void | buildConstraint ()
| Build the constraint equations.
void | fillSVDConstraints ()
| Get the SVD constraints.
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.
FunctionTraits< T >::BaseType | getVal_p (const Array< typename FunctionTraits< T >::BaseType > &x, uInt j, uInt i) const
| Function to get evaluated functional value.
void | initfit_p (uInt parcnt)
| Initialise the fitter with number of solvable parameters.
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.
void | resetFunction ()
| Reset all the input.
Protected Member Functions inherited from casacore::LSQFit
Double * | rowrt (uInt i) const
| Get pointer in rectangular array.
Double * | rowru (uInt i) const
void | init ()
| Initialise areas.
void | clear ()
| Clear areas.
void | deinit ()
| De-initialise area.
void | solveIt ()
| Solve normal equations.
Bool | solveItLoop (Double &fit, uInt &nRank, Bool doSVD=False)
| One non-linear LM loop.
void | solveMR (uInt nin)
| Solve missing rank part.
Bool | invertRect ()
| Invert rectangular matrix (i.e.
Double | normSolution (const Double *sol) const
| Get the norm of the current solution vector.
Double | normInfKnown (const Double *known) const
| Get the infinite norm of the known vector.
Bool | mergeIt (const LSQFit &other, uInt nIndex, const uInt *nEqIndex)
| Merge sparse normal equations.
void | save (Bool all=True)
| Save current status (or part).
void | restore (Bool all=True)
| Restore current status.
void | copy (const LSQFit &other, Bool all=True)
| Copy data.
void | extendConstraints (uInt n)
| Extend the constraint equation area to the specify number of equations.
void | createNCEQ ()
| Create the solution equation area nceq_p and fill it.
void | getWorkSOL ()
| Get work areas for solutions, covariance.
void | getWorkCOV ()

## Additional Inherited Members

Public Types inherited from casacore::LSQFit
enum | ReadyCode { NONREADY , SOLINCREMENT , DERIVLEVEL , MAXITER , NOREDUCTION , SINGULAR , N_ReadyCode }
| State of the non-linear solution. More...
enum | ErrorField { NC , SUMWEIGHT , SUMLL , CHI2 , N_ErrorField }
| Offset of fields in error_p data area. More...
Public Attributes inherited from casacore::GenericL2Fit< T >
const Double | COLLINEARITY
| Default collinearity test for SVD.
Static Public Attributes inherited from casacore::LSQFit
static Real | REAL
| And values to use.
static Complex | COMPLEX
static Separable | SEPARABLE
static AsReal | ASREAL
static Conjugate | CONJUGATE
Protected Types inherited from casacore::LSQFit
enum | StateBit { INVERTED , TRIANGLE , NONLIN , N_StateBit }
| Bits that can be set/referenced. More...
Static Protected Member Functions inherited from casacore::LSQFit
static Double | realMC (const std::complex< Double > &x, const std::complex< Double > &y)
| Calculate the real or imag part of x*conj(y).
static Double | imagMC (const std::complex< Double > &x, const std::complex< Double > &y)
static Float | realMC (const std::complex< Float > &x, const std::complex< Float > &y)
static Float | imagMC (const std::complex< Float > &x, const std::complex< Float > &y)
Protected Attributes inherited from casacore::GenericL2Fit< T >
uInt | aCount_ai
| Adjustable.
Bool | svd_p
| SVD indicator.
Function< typename FunctionTraits< T >::DiffType, typename FunctionTraits< T >::DiffType > * | ptr_derive_p
| Function to use in evaluating condition equation.
Block< Vector< typename FunctionTraits< T >::BaseType > * > | constrArg_p
| List of functions describing the possible constraint equations e.g.
Block< typename FunctionTraits< T >::BaseType * > | constrVal_p
| List of values describing the constraint equations' value.
uInt | pCount_p
| Number of available parameters.
uInt | ndim_p
| Number of dimensions of input data.
Bool | needInit_p
| No normal equations yet.
Bool | solved_p
| Have solution.
Bool | errors_p
| Have errors.
Bool | ferrors_p
Bool | asweight_p
| Interpret as weights rather than as sigma the given values.
uInt | nr_p
| The rank of the solution.
Vector< typename FunctionTraits< T >::BaseType > | condEq_p
| Condition equation parameters (for number of adjustable parameters).
Vector< typename FunctionTraits< T >::BaseType > | fullEq_p
| Equation for all available parameters.
Vector< typename FunctionTraits< T >::ArgType > | arg_p
| Contiguous argument areas.
Vector< typename FunctionTraits< T >::ArgType > | carg_p
Vector< typename FunctionTraits< T >::BaseType > | sol_p
| Local solution area.
Vector< typename FunctionTraits< T >::BaseType > | fsol_p
Vector< typename FunctionTraits< T >::BaseType > | err_p
| Local error area.
Vector< typename FunctionTraits< T >::BaseType > | ferr_p
FunctionTraits< T >::DiffType | valder_p
| Local value and derivatives.
Vector< Vector< typename LSQTraits< typename FunctionTraits< T >::BaseType >::base > > | consvd_p
| Local SVD constraints.
Protected Attributes inherited from casacore::LSQFit
uInt | state_p
| Bits set to indicate state.
uInt | nun_p
| Number of unknowns.
uInt | ncon_p
| Number of constraints.
uInt | n_p
| Matrix size (will be n_p = nun_p + ncon_p).
uInt | r_p
| Rank of normal equations (normally n_p).
Double | prec_p
| Collinearity precision.
Double | startnon_p
| Levenberg start factor.
Double | nonlin_p
| Levenberg current factor.
Double | stepfactor_p
| Levenberg step factor.
Double | epsval_p
| Test value for [incremental] solution in non-linear loop.
Double | epsder_p
| Test value for known vector in non-linear loop.
Bool | balanced_p
| Indicator for a well balanced normal equation.
uInt | maxiter_p
| Maximum number of iterations for non-linear solution.
uInt | niter_p
| Iteration count for non-linear solution.
ReadyCode | ready_p
| Indicate the non-linear state.
uInt * | piv_p
| Pivot table (n_p).
LSQMatrix * | norm_p
| Normal equations (triangular nun_p * nun_p).
uInt | nnc_p
| Current length nceq_p.
LSQMatrix * | nceq_p
| Normal combined with constraint equations for solutions (triangular nnc_p*nnc_p).
Double * | known_p
| Known part equations (n_p).
Double * | error_p
| Counts for errors (N_ErrorField).
Double * | constr_p
| Constraint equation area (nun_p*ncon_p)).
Double * | sol_p
| Solution area (n_p).
LSQFit * | nar_p
| Save area for non-linear case (size determined internally).
Double * | lar_p
| Save area for non-symmetric (i.e.
Double * | wsol_p
| Work areas for interim solutions and covariance.
Double * | wcov_p
Static Protected Attributes inherited from casacore::LSQFit
static const String | recid
| Record field names.
static const String | state
static const String | nun
static const String | ncon
static const String | prec
static const String | startnon
static const String | nonlin
static const String | rank
static const String | nnc
static const String | piv
static const String | constr
static const String | known
static const String | errors
static const String | sol
static const String | lar
static const String | wsol
static const String | wcov
static const String | nceq
static const String | nar

## Detailed Description

template<class T>
class casacore::LinearFit< T >

Class for linear least-squares fit.

### Review Status

Reviewed By:
  wbrouw
Date Reviewed:
  2004/06/15
Test programs:
  tLinearFitSVD

### Prerequisite

- Functional
- Function
- Fitting

### Etymology

A set of data point is fit with some functional equation. The equations solved are linear equations. The functions themselves however can be wildly nonlinear.

### 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 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 M specified functions, f(j)(x) j = 0,...,M-1, we form a linear combination of the functions:

z(i) = a(0)f(0)(x(i)) + a(1)f(1)(x(i)) +... + a(M-1)f(M-1)(x(i)),

where a(j) j = 0,...,M-1 are a set of parameters to be determined. The linear least-squares fit tries to minimize

chi-square = [(y(0)-z(0))/sigma(0)]^2 + [(y(1)-z(1))/sigma(1)]^2 +..\.
+ [(y(N-1)-z(N-1))/sigma(N-1)]^2.
casacore::square
TableExprNode square(const TableExprNode &node)
Definition ExprNode.h:1350

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

For complex numbers, `[(y(i)-z(i))/sigma(i)]^2` in chi-square is replaced by `[(y(i)-z(i))/sigma(i)]*conjugate([(y(i)-z(i))/sigma(i)])`

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

f(j)(x(i)) = f(j)(x(i,0), x(i,1), x(i,2),...)

Normally, it is necessary that N > M for the solutions to be valid, since there must be more data points than model parameters to be solved.

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 also be assigned to each measurement if the standard deviation is not available. sigma can be calculated from

sigma = 1/ sqrt(weight)
casacore::sqrt
LatticeExprNode sqrt(const LatticeExprNode &expr)

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:

- Create a functional description of the parameters
- Create a fitter: LinearFit<T> fitter();
- Set the functional representation: fitter.setFunction()
- Do the fit to the data: fitter.fit(x, data, sigma) (or do a number of calls to buildNormalMatrix(x, data, sigma) and finish of with fitter.fit() or fitter.sol())
- if needed the covariance; residuals; chiSquared, parameter errors can all be obtained

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)

- Float
- Double
- Complex
- DComplex

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 the LinearFitSVD class, which has a behaviour completely identical to this class (apart from a default collinearity of 1e-8).

Other information (see a.o. LSQFit) can be set and obtained as well.

### Motivation

The creation of this class was driven by the need to write code to perform baseline fitting or continuum subtraction.

### Example

In the following a polynomial is fitted through the first 20 prime numbers. The data is given in the x vector (1 to 20) and in the primesTable (2, 3,..., 71) (see tLinearFitSVD test program). In the following all four methods to calculate a polynomial through the data is used

// The list of coordinate x-values
Vector<Double> x(nPrimes);
indgen((Array<Double>&)x, 1.0); // 1, 2,..\.
Vector<Double> primesTable(nPrimes);
for (uInt i=1; i < nPrimes; i++) {
primesTable(i) =
Primes::nextLargerPrimeThan(Int(primesTable(i-1)+0.01));
};
Vector<Double> sigma(nPrimes);
sigma = 1.0;
// The fitter
LinearFit<Double> fitter;
Polynomial<AutoDiff<Double> > combination(2);
// Get the solution
fitter.setFunction(combination);
Vector<Double> solution = fitter.fit(x, primesTable, sigma);
// create a special function (should probably at beginning)
static void myfnc(Vector<Double> &y, const Double x) {
y(0) = 1; for (uInt i=1; i<y.nelements(); i++) y(i) = y(i-1)*x; };
fitter.setFunction(3, &myfnc);
solution = fitter.fit(x, primesTable, sigma);
// Create the direct coefficients table
fitter.setFunction(3);
Matrix<Double> xx(nPrimes, 3);
for (uInt i=0; i<nPrimes; i++) {
xx(i,0) = 1;
for (uInt j=1; j<3; j++) xx(i,j) = xx(i,j-1)*Double(i+1);
};
solution = fitter.fit(xx, primesTable, sigma);
casacore::ArrayBase::nelements
size_t nelements() const
How many elements does this array have?
Definition ArrayBase.h:101
casacore::Array
Definition Array.h:155
casacore::GenericL2Fit::setFunction
void setFunction(const Function< U, U > &function)
Sets the function to be fitted.
Definition GenericL2Fit.h:238
casacore::GenericL2Fit::fit
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.
casacore::LinearFit
Definition LinearFit.h:206
casacore::Primes::nextLargerPrimeThan
static uInt nextLargerPrimeThan(uInt number)
This function finds the next largest prime than number, returns that value and stores it in the table...
casacore::Vector
Definition Vector.h:82
casacore::Polynomial
Polynomial()
Definition Polynomial.h:94
casacore::indgen
void indgen(TableVector< T > &tv, T start, T inc)
Definition TabVecMath.h:398
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Int
int Int
Definition aipstype.h:48
casacore::Double
double Double
Definition aipstype.h:53

In the test program examples are given on how to get the other information, and other examples.

Definition at line 205 of file LinearFit.h.

## Constructor & Destructor Documentation

## LinearFit() [1/2]

template<class T>

casacore::LinearFit< T >::LinearFit | ( |  | ) |

Create a fitter: the normal way to generate a fitter object.

Necessary data will be deduced from the Functional provided with setFunction()

Referenced by LinearFit(), operator=(), and casacore::LinearFitSVD< T >::~LinearFitSVD().

## LinearFit() [2/2]

template<class T>

casacore::LinearFit< T >::LinearFit | ( | const LinearFit< T > & | other | ) |

Copy constructor (deep copy).

References LinearFit().

## ~LinearFit()

template<class T>

virtual casacore::LinearFit< T >::~LinearFit | ( |  | ) |

virtual

Destructor.

## Member Function Documentation

## fitIt()

template<class T>

virtual Bool casacore::LinearFit< 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 )

protected virtual

Generalised fitter.

Implements casacore::GenericL2Fit< T >.

References casacore::GenericL2Fit< T >::buildConstraint(), casacore::GenericL2Fit< T >::COLLINEARITY, casacore::GenericL2Fit< T >::condEq_p, casacore::GenericL2Fit< T >::err_p, casacore::GenericL2Fit< T >::errors_p, casacore::GenericL2Fit< T >::fillSVDConstraints(), casacore::GenericL2Fit< T >::GenericL2Fit(), casacore::mask(), casacore::GenericL2Fit< T >::nr_p, casacore::GenericL2Fit< T >::pCount_p, casacore::GenericL2Fit< T >::ptr_derive_p, casacore::LSQFit::sol, casacore::GenericL2Fit< T >::sol_p, casacore::GenericL2Fit< T >::solved_p, and casacore::GenericL2Fit< T >::svd_p.

## operator=()

template<class T>

LinearFit & casacore::LinearFit< T >::operator= | ( | const LinearFit< T > & | other | ) |

Assignment (deep copy).

References LinearFit().

The documentation for this class was generated from the following file:

- scimath/Fitting/LinearFit.h