Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
LevenbergMarquardtHelper.cpp
1 #include "LevenbergMarquardtHelper.hh"
2 #include <cstring>
3 
4 using namespace BIAS;
5 
7 {
8  vars_ = NULL;
10  sumOfSquares_ = -1.0;
11 }
12 
14 LevenbergMarquardtHelper(int numVars, int numResiduals)
15 {
16  vars_ = NULL;
17  Init(numVars, numResiduals);
18 }
19 
21 {
22  if (vars_ != NULL)
23  delete[] vars_;
24 }
25 
26 void LevenbergMarquardtHelper::Init(int numVars, int numResiduals)
27 {
28  if (vars_ != NULL)
29  delete[] vars_;
30  numVars_ = numVars;
31  numResiduals_ = numResiduals;
32  sumOfSquares_ = -1.0;
33  vars_ = new double[numVars];
34  memset(vars_, 0, numVars_*sizeof(double));
35 }
36 
37 bool LevenbergMarquardtHelper::Update(const double *x, const double *fvec)
38 {
39  double sumsq = 0.0;
40  for (register int i = 0; i < numResiduals_; i++)
41  sumsq += fvec[i] * fvec[i];
42  if (sumOfSquares_ < 0 || sumsq < sumOfSquares_) {
43  sumOfSquares_ = sumsq;
44  memcpy(vars_, x, numVars_*sizeof(double));
45  return true;
46  }
47  return false;
48 }
~LevenbergMarquardtHelper()
Releases the internally stored best variables.
void Init(int numVars, int numResiduals)
Relocates internal array of best variables and resets the best solution.
bool Update(const double *x, const double *fvec)
Add variables and results, and computes the sum of squares.
LevenbergMarquardtHelper()
Create empty instance.