Isis 3 Programmer Reference
LeastSquares.h
1#ifndef LeastSquares_h
2#define LeastSquares_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include <vector>
10
11#include "tnt/tnt_array2d.h"
12
13#include <armadillo>
14
15#include "BasisFunction.h"
16
17namespace Isis {
100 public:
101
102 LeastSquares(Isis::BasisFunction &basis, bool sparse = false,
103 int sparseRows = 0, int sparseCols = 0, bool jigsaw = false);
105 void AddKnown(const std::vector<double> &input, double expected,
106 double weight = 1.0);
107
108 std::vector<double> GetInput(int row) const;
109 double GetExpected(int row) const;
110 int Rows() const;
111
116
118 double Evaluate(const std::vector<double> &input);
119 std::vector<double> Residuals() const;
120 double Residual(int i) const;
121 void Weight(int index, double weight);
122
129 int Knowns() const {
130 return p_expected.size();
131 };
132
133 double GetSigma0() { return p_sigma0; }
134 int GetDegreesOfFreedom() { return p_degreesOfFreedom; }
135 void Reset ();
136
137 void ResetSparse() { Reset(); }
138 std::vector<double> GetEpsilons () const { return p_epsilonsSparse; }
139 void SetParameterWeights(const std::vector<double> weights) { p_parameterWeights = weights; }
140 void SetNumberOfConstrainedParameters(int n) { p_constrainedParameters = n; }
141
142 private:
143 void SolveSVD();
144 void SolveQRD();
145 void SolveCholesky () {}
146
147 int SolveSparse();
148 void FillSparseA(const std::vector<double> &data);
149 bool ApplyParameterWeights();
150
151 arma::mat p_xSparse;
152 std::vector<double> p_epsilonsSparse;
153 std::vector<double> p_parameterWeights;
155 arma::SpMat<double> p_sparseA;
156 arma::SpMat<double> p_normals;
157 arma::mat p_ATb;
158 arma::mat p_SLU_Factor;
160 bool p_jigsaw;
161 bool p_sparse;
162 bool p_solved;
164 int p_currentFillRow;
165 int p_sparseRows;
166 int p_sparseCols;
170 double p_sigma0;
172 std::vector<std::vector<double> > p_input;
174 std::vector<double> p_expected;
176 std::vector<double> p_sqrtWeight;
179 std::vector<double> p_residuals;
184
185
186
187 };
188};
189
190
191#endif
Generic linear equation class.
Generic least square fitting class.
arma::mat p_xSparse
sparse solution matrix
arma::SpMat< double > p_normals
normal equations matrix 'N'
double GetExpected(int row) const
This method returns the expected value at the given row.
void Weight(int index, double weight)
Reset the weight for the ith known.
double p_sigma0
sigma nought - reference variance
int SolveSparse()
Solve using sparse class.
arma::SpMat< double > p_sparseA
design matrix 'A'
std::vector< double > p_parameterWeights
vector of parameter weights
double Residual(int i) const
Returns the ith residual.
bool p_solved
Boolean value indicating solution is complete.
int Rows() const
This methods returns the number of rows in the matrix.
Isis::BasisFunction * p_basis
Pointer to the BasisFunction object.
~LeastSquares()
Destroys the LeastSquares object.
@ QRD
QR Decomposition.
@ SVD
Singular Value Decomposition.
int Knowns() const
The number of knowns (or times AddKnown was invoked) linear combination of the variables.
double Evaluate(const std::vector< double > &input)
Invokes the BasisFunction Evaluate method.
std::vector< std::vector< double > > p_input
A vector of the input variables to evaluate.
int p_constrainedParameters
constrained parameters
arma::mat p_ATb
right-hand side vector
int Solve(Isis::LeastSquares::SolveMethod method=SVD)
After all the data has been registered through AddKnown, invoke this method to solve the system of eq...
void SolveQRD()
After all the data has been registered through AddKnown, invoke this method to solve the system of eq...
std::vector< double > p_epsilonsSparse
sparse vector of total parameter corrections
void SolveSVD()
After all the data has been registered through AddKnown, invoke this method to solve the system of eq...
LeastSquares(Isis::BasisFunction &basis, bool sparse=false, int sparseRows=0, int sparseCols=0, bool jigsaw=false)
Creates a LeastSquares Object.
std::vector< double > Residuals() const
Returns a vector of residuals (errors).
void FillSparseA(const std::vector< double > &data)
Invoke this method for each set of knowns for sparse solutions.
std::vector< double > p_sqrtWeight
A vector of the square roots of the weights for each known value.
std::vector< double > p_residuals
A vector of the residuals (or difference between expected and solved values).
void AddKnown(const std::vector< double > &input, double expected, double weight=1.0)
Invoke this method for each set of knowns.
std::vector< double > p_expected
A vector of the expected values when solved.
std::vector< double > GetInput(int row) const
This method returns the data at the given row.
arma::mat p_SLU_Factor
decomposed normal equations matrix
int p_degreesOfFreedom
degrees of freedom (redundancy)
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16