casacore
|
#include <LSQaips.h>
Public Member Functions | |
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. More... | |
LSQaips (uInt nUnknowns, const LSQReal &, uInt nConstraints=0) | |
Allow explicit complex/real specification. More... | |
LSQaips (uInt nUnknowns, const LSQComplex &, uInt nConstraints=0) | |
LSQaips () | |
Default constructor (empty, real, only usable after a set(nUnknowns)) More... | |
LSQaips (const LSQaips &other) | |
Copy constructor (deep copy) More... | |
LSQaips & | operator= (const LSQaips &other) |
Assignment (deep copy) More... | |
~LSQaips () | |
template<class U > | |
void | solve (U *sol) |
Solve normal equations. More... | |
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. More... | |
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. More... | |
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 ) More... | |
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. More... | |
LSQFit (uInt nUnknowns, const LSQReal &, uInt nConstraints=0) | |
Allow explicit Real specification. More... | |
LSQFit (uInt nUnknowns, const LSQComplex &, uInt nConstraints=0) | |
Allow explicit Complex specification. More... | |
LSQFit () | |
Default constructor (empty, only usable after a set(nUnknowns) ) More... | |
LSQFit (const LSQFit &other) | |
Copy constructor (deep copy) More... | |
LSQFit & | operator= (const LSQFit &other) |
Assignment (deep copy) More... | |
~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. More... | |
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. More... | |
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. More... | |
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. More... | |
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 . More... | |
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. More... | |
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). More... | |
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. More... | |
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. More... | |
void | set (uInt nUnknowns, uInt nConstraints=0) |
Set new sizes (default is for Real) More... | |
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 ) More... | |
void | setEpsValue (Double epsval=1e-8) |
Set new value solution test. More... | |
void | setEpsDerivative (Double epsder=1e-8) |
Set new derivative test. More... | |
void | setMaxIter (uInt maxiter=0) |
Set maximum number of iterations. More... | |
uInt | nIterations () const |
Get number of iterations done. More... | |
void | setBalanced (Bool balanced=False) |
Set the expected form of the normal equations. More... | |
LSQFit::ReadyCode | isReady () const |
Ask the state of the non-linear solutions. More... | |
const std::string & | readyText () const |
template<class U > | |
Bool | getCovariance (U *covar) |
Get the covariance matrix (of size nUnknowns * nUnknowns ) More... | |
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 ) More... | |
template<class U > | |
Bool | getErrors (std::complex< U > *errors) |
template<class U > | |
Bool | getErrors (U &errors) |
uInt | nUnknowns () const |
Get the number of unknowns. More... | |
uInt | nConstraints () const |
Get the number of constraints. More... | |
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 More... | |
Double | getChi () const |
Get chi^2 (both are identical); the standard deviation (per observation) and the standard deviation per weight unit. More... | |
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: More... | |
Bool | fromRecord (String &error, const RecordInterface &in) |
Create an LSQFit object from a record. More... | |
Bool | toRecord (String &error, RecordInterface &out) const |
Create a record from an LSQFit object. More... | |
const String & | ident () const |
Get identification of record. More... | |
void | toAipsIO (AipsIO &) const |
Save or restore using AipsIO. More... | |
void | fromAipsIO (AipsIO &) |
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... | |
Static Public Attributes inherited from casacore::LSQFit | |
static Real | REAL |
And values to use. More... | |
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... | |
Protected Member Functions inherited from casacore::LSQFit | |
Double * | rowrt (uInt i) const |
Get pointer in rectangular array. More... | |
Double * | rowru (uInt i) const |
void | init () |
Initialise areas. More... | |
void | clear () |
Clear areas. More... | |
void | deinit () |
De-initialise area. More... | |
void | solveIt () |
Solve normal equations. More... | |
Bool | solveItLoop (Double &fit, uInt &nRank, Bool doSVD=False) |
One non-linear LM loop. More... | |
void | solveMR (uInt nin) |
Solve missing rank part. More... | |
Bool | invertRect () |
Invert rectangular matrix (i.e. More... | |
Double | normSolution (const Double *sol) const |
Get the norm of the current solution vector. More... | |
Double | normInfKnown (const Double *known) const |
Get the infinite norm of the known vector. More... | |
Bool | mergeIt (const LSQFit &other, uInt nIndex, const uInt *nEqIndex) |
Merge sparse normal equations. More... | |
void | save (Bool all=True) |
Save current status (or part) More... | |
void | restore (Bool all=True) |
Restore current status. More... | |
void | copy (const LSQFit &other, Bool all=True) |
Copy data. More... | |
void | extendConstraints (uInt n) |
Extend the constraint equation area to the specify number of equations. More... | |
void | createNCEQ () |
Create the solution equation area nceq_p and fill it. More... | |
void | getWorkSOL () |
Get work areas for solutions, covariance. More... | |
void | getWorkCOV () |
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) More... | |
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::LSQFit | |
uInt | state_p |
Bits set to indicate state. More... | |
uInt | nun_p |
Number of unknowns. More... | |
uInt | ncon_p |
Number of constraints. More... | |
uInt | n_p |
Matrix size (will be n_p = nun_p + ncon_p) More... | |
uInt | r_p |
Rank of normal equations (normally n_p) More... | |
Double | prec_p |
Collinearity precision. More... | |
Double | startnon_p |
Levenberg start factor. More... | |
Double | nonlin_p |
Levenberg current factor. More... | |
Double | stepfactor_p |
Levenberg step factor. More... | |
Double | epsval_p |
Test value for [incremental] solution in non-linear loop. More... | |
Double | epsder_p |
Test value for known vector in non-linear loop. More... | |
Bool | balanced_p |
Indicator for a well balanced normal equation. More... | |
uInt | maxiter_p |
Maximum number of iterations for non-linear solution. More... | |
uInt | niter_p |
Iteration count for non-linear solution. More... | |
ReadyCode | ready_p |
Indicate the non-linear state. More... | |
uInt * | piv_p |
Pivot table (n_p) More... | |
LSQMatrix * | norm_p |
Normal equations (triangular nun_p * nun_p) More... | |
uInt | nnc_p |
Current length nceq_p. More... | |
LSQMatrix * | nceq_p |
Normal combined with constraint equations for solutions (triangular nnc_p*nnc_p) More... | |
Double * | known_p |
Known part equations (n_p) More... | |
Double * | error_p |
Counts for errors (N_ErrorField) More... | |
Double * | constr_p |
Constraint equation area (nun_p*ncon_p)) More... | |
Double * | sol_p |
Solution area (n_p) More... | |
LSQFit * | nar_p |
Save area for non-linear case (size determined internally) More... | |
Double * | lar_p |
Save area for non-symmetric (i.e. More... | |
Double * | wsol_p |
Work areas for interim solutions and covariance. More... | |
Double * | wcov_p |
Static Protected Attributes inherited from casacore::LSQFit | |
static const String | recid |
Record field names. More... | |
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 |
Interface for Casacore Vectors in least squares fitting
From Least SQuares and aips++ (now Casacore)
The interface used in the LSQaips
class is in terms of Casacore Vectors directly, rather than an STL iterator (like VectorSTLIterator) based on it.
Its functionality is identical to that of the LSQFit class, although it will be faster to use the iterator interface directly, since constructing of temporary iterators can be avoided
See the tLSQaips.cc
program for extensive examples. Note: this class is in an interim state.
The class was written to enable easy tranistion from the current Vector to the Vector::iterator interface.
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 172 of file LSQaips.h.
References casacore::LSQFit::getCovariance().
|
inline |
Get the covariance matrix.
False if an error occurred (of size nUnknowns * nUnknowns
)
Definition at line 169 of file LSQaips.h.
References casacore::LSQFit::getCovariance().
|
inline |
Definition at line 183 of file LSQaips.h.
References casacore::LSQFit::errors, and casacore::LSQFit::getErrors().
|
inline |
Definition at line 186 of file LSQaips.h.
References casacore::LSQFit::errors, and casacore::LSQFit::getErrors().
|
inline |
Get main diagonal of covariance function (of size nUnknowns
)
Definition at line 180 of file LSQaips.h.
References casacore::LSQFit::errors, and casacore::LSQFit::getErrors().
Definition at line 189 of file LSQaips.h.
References casacore::String::data(), casacore::LSQFit::errors, casacore::LSQFit::getErrors(), casacore::LSQFit::nUnknowns(), and casacore::String::resize().
Assignment (deep copy)
Definition at line 107 of file LSQaips.h.
References casacore::LSQFit::operator=().
|
inline |
Definition at line 123 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solve().
|
inline |
Definition at line 125 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solve().
|
inline |
Solve normal equations.
The solution will be given in sol
.
Definition at line 121 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solve().
|
inline |
Definition at line 127 of file LSQaips.h.
References casacore::String::data(), casacore::LSQFit::nUnknowns(), casacore::String::resize(), casacore::LSQFit::sol, and casacore::LSQFit::solve().
|
inline |
Definition at line 154 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
|
inline |
Definition at line 158 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
|
inline |
Definition at line 150 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
Bool casacore::LSQaips::solveLoop | ( | Double & | fit, |
uInt & | nRank, | ||
Vector< U > & | sol, | ||
Bool | doSVD = False |
||
) |
|
inline |
Definition at line 139 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
|
inline |
Definition at line 143 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
|
inline |
Solve a Levenberg-Marquardt loop.
Note that the solution sol
is used both and input and output. No check on the size is done.
Definition at line 135 of file LSQaips.h.
References casacore::LSQFit::sol, and casacore::LSQFit::solveLoop().
Bool casacore::LSQaips::solveLoop | ( | uInt & | nRank, |
Vector< U > & | sol, | ||
Bool | doSVD = False |
||
) |