denseLM.cpp File Reference
#include <iostream>
#include <fstream>
#include <iomanip>
#include "main.h"
#include <Eigen/LevenbergMarquardt>

Classes

struct  DenseLM< Scalar >
 

Functions

template<typename FunctorType , typename VectorType >
int test_minimizeLM (FunctorType &functor, VectorType &uv)
 
template<typename FunctorType , typename VectorType >
int test_lmder (FunctorType &functor, VectorType &uv)
 
template<typename FunctorType , typename VectorType >
int test_minimizeSteps (FunctorType &functor, VectorType &uv)
 
template<typename T >
void test_denseLM_T ()
 
 EIGEN_DECLARE_TEST (denseLM)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( denseLM  )
168  {
169  CALL_SUBTEST_2(test_denseLM_T<double>());
170 
171  // CALL_SUBTEST_2(test_sparseLM_T<std::complex<double>());
172 }
#define CALL_SUBTEST_2(FUNC)
Definition: split_test_helper.h:10

References CALL_SUBTEST_2.

◆ test_denseLM_T()

template<typename T >
void test_denseLM_T ( )
128  {
130 
131  int inputs = 10;
132  int values = 1000;
133  DenseLM<T> dense_gaussian(inputs, values);
134  VectorType uv(inputs), uv_ref(inputs);
135  VectorType x(values);
136 
137  // Generate the reference solution
138  uv_ref << -2, 1, 4, 8, 6, 1.8, 1.2, 1.1, 1.9, 3;
139 
140  // Generate the reference data points
141  x.setRandom();
142  x = 10 * x;
143  x.array() += 10;
144  dense_gaussian.initPoints(uv_ref, x);
145 
146  // Generate the initial parameters
147  VectorBlock<VectorType> u(uv, 0, inputs / 2);
148  VectorBlock<VectorType> v(uv, inputs / 2, inputs / 2);
149 
150  // Solve the optimization problem
151 
152  // Solve in one go
153  u.setOnes();
154  v.setOnes();
155  test_minimizeLM(dense_gaussian, uv);
156 
157  // Solve until the machine precision
158  u.setOnes();
159  v.setOnes();
160  test_lmder(dense_gaussian, uv);
161 
162  // Solve step by step
163  v.setOnes();
164  u.setOnes();
165  test_minimizeSteps(dense_gaussian, uv);
166 }
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Expression of a fixed-size or dynamic-size sub-vector.
Definition: VectorBlock.h:58
int test_lmder(FunctorType &functor, VectorType &uv)
Definition: denseLM.cpp:101
int test_minimizeSteps(FunctorType &functor, VectorType &uv)
Definition: denseLM.cpp:113
int test_minimizeLM(FunctorType &functor, VectorType &uv)
Definition: denseLM.cpp:89
list x
Definition: plotDoE.py:28
Definition: denseLM.cpp:21
Definition: fft_test_shared.h:66

References DenseLM< Scalar >::initPoints(), test_lmder(), test_minimizeLM(), test_minimizeSteps(), v, and plotDoE::x.

◆ test_lmder()

template<typename FunctorType , typename VectorType >
int test_lmder ( FunctorType &  functor,
VectorType uv 
)
101  {
102  typedef typename VectorType::Scalar Scalar;
105  info = lm.lmder1(uv);
106 
107  VERIFY_IS_EQUAL(info, 1);
108  // FIXME Check other parameters
109  return info;
110 }
SCALAR Scalar
Definition: bench_gemm.cpp:45
Performs non linear optimization over a non-linear function, using a variant of the Levenberg Marquar...
Definition: LevenbergMarquardt/LevenbergMarquardt.h:102
int info
Definition: level2_cplx_impl.h:39
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
Status
Definition: LevenbergMarquardt/LevenbergMarquardt.h:27

References info, Eigen::LevenbergMarquardt< FunctorType_ >::lmder1(), and VERIFY_IS_EQUAL.

Referenced by test_denseLM_T().

◆ test_minimizeLM()

template<typename FunctorType , typename VectorType >
int test_minimizeLM ( FunctorType &  functor,
VectorType uv 
)
89  {
92 
93  info = lm.minimize(uv);
94 
96  // FIXME Check other parameters
97  return info;
98 }

References info, Eigen::LevenbergMarquardt< FunctorType_ >::minimize(), and VERIFY_IS_EQUAL.

Referenced by test_denseLM_T().

◆ test_minimizeSteps()

template<typename FunctorType , typename VectorType >
int test_minimizeSteps ( FunctorType &  functor,
VectorType uv 
)
113  {
116  info = lm.minimizeInit(uv);
118  do {
119  info = lm.minimizeOneStep(uv);
121 
122  VERIFY_IS_EQUAL(info, 1);
123  // FIXME Check other parameters
124  return info;
125 }
@ Running
Definition: LevenbergMarquardt/LevenbergMarquardt.h:29
@ ImproperInputParameters
Definition: LevenbergMarquardt/LevenbergMarquardt.h:30

References Eigen::LevenbergMarquardtSpace::ImproperInputParameters, info, Eigen::LevenbergMarquardt< FunctorType_ >::minimizeInit(), Eigen::LevenbergMarquardt< FunctorType_ >::minimizeOneStep(), Eigen::LevenbergMarquardtSpace::Running, and VERIFY_IS_EQUAL.

Referenced by test_denseLM_T().