Main MRPT website > C++ reference
MRPT logo
List of all members | Classes | Public Types | Static Public Member Functions
mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM > Class Template Reference

Detailed Description

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
class mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >

An implementation of the Levenberg-Marquardt algorithm for least-square minimization.

Refer to this page for more details on the algorithm and its usage.

Template Parameters
NUMTYPEThe numeric type for all the operations (float, double, or long double)
USERPARAMThe type of the "y" input to the user supplied evaluation functor. Default type is a vector of NUMTYPE.

Definition at line 51 of file CLevenbergMarquardt.h.

#include <mrpt/math/CLevenbergMarquardt.h>

Inheritance diagram for mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >:
Inheritance graph
[legend]

Classes

struct  TResultInfo
 

Public Types

typedef VECTORTYPE::value_type NUMTYPE
 
typedef
mrpt::math::CMatrixTemplateNumeric
< NUMTYPE
matrix_t
 
typedef VECTORTYPE vector_t
 
typedef void(* TFunctorEval )(const VECTORTYPE &x, const USERPARAM &y, VECTORTYPE &out)
 The type of the function passed to execute.
 
typedef void(* TFunctorIncrement )(VECTORTYPE &x_new, const VECTORTYPE &x_old, const VECTORTYPE &x_incr, const USERPARAM &user_param)
 The type of an optional functor passed to execute to replace the Euclidean addition "x_new = x_old + x_incr" by any other operation.
 

Static Public Member Functions

static void execute (VECTORTYPE &out_optimal_x, const VECTORTYPE &x0, TFunctorEval functor, const VECTORTYPE &increments, const USERPARAM &userParam, TResultInfo &out_info, bool verbose=false, const size_t maxIter=200, const NUMTYPE tau=1e-3, const NUMTYPE e1=1e-8, const NUMTYPE e2=1e-8, bool returnPath=true, TFunctorIncrement x_increment_adder=NULL)
 Executes the LM-method, with derivatives estimated from functor is a user-provided function which takes as input two vectors, in this order:
 
static void printf_debug (const char *frmt,...)
 Sends a formated text to "debugOut" if not NULL, or to cout otherwise.
 

Member Typedef Documentation

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
typedef mrpt::math::CMatrixTemplateNumeric<NUMTYPE> mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::matrix_t

Definition at line 55 of file CLevenbergMarquardt.h.

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
typedef VECTORTYPE::value_type mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::NUMTYPE

Definition at line 54 of file CLevenbergMarquardt.h.

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
typedef void(* mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TFunctorEval)(const VECTORTYPE &x, const USERPARAM &y, VECTORTYPE &out)

The type of the function passed to execute.

The user must supply a function which evaluates the error of a given point in the solution space.

Parameters
xThe state point under examination.
yThe same object passed to "execute" as the parameter "userParam".
outThe vector of (non-squared) errors, of the average square root error, for the given "x". The functor code must set the size of this vector.

Definition at line 64 of file CLevenbergMarquardt.h.

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
typedef void(* mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TFunctorIncrement)(VECTORTYPE &x_new, const VECTORTYPE &x_old, const VECTORTYPE &x_incr, const USERPARAM &user_param)

The type of an optional functor passed to execute to replace the Euclidean addition "x_new = x_old + x_incr" by any other operation.

Definition at line 71 of file CLevenbergMarquardt.h.

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
typedef VECTORTYPE mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::vector_t

Definition at line 56 of file CLevenbergMarquardt.h.

Member Function Documentation

template<typename VECTORTYPE = mrpt::vector_double, class USERPARAM = VECTORTYPE>
static void mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::execute ( VECTORTYPE &  out_optimal_x,
const VECTORTYPE &  x0,
TFunctorEval  functor,
const VECTORTYPE &  increments,
const USERPARAM &  userParam,
TResultInfo out_info,
bool  verbose = false,
const size_t  maxIter = 200,
const NUMTYPE  tau = 1e-3,
const NUMTYPE  e1 = 1e-8,
const NUMTYPE  e2 = 1e-8,
bool  returnPath = true,
TFunctorIncrement  x_increment_adder = NULL 
)
inlinestatic

Executes the LM-method, with derivatives estimated from functor is a user-provided function which takes as input two vectors, in this order:

    - x: The parameters to be optimized.
    - userParam: The vector passed to the LM algorithm, unmodified.
  and must return the "error vector", or the error (not squared) in each measured dimension, so the sum of the square of that output is the overall square error.

x_increment_adder Is an optional functor which may replace the Euclidean "x_new = x + x_increment" at the core of the incremental optimizer by any other operation. It can be used for example, in on-manifold optimizations.

Definition at line 100 of file CLevenbergMarquardt.h.

References ASSERT_, mrpt::math::estimateJacobian(), mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TResultInfo::final_sqr_err, mrpt::format(), mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TResultInfo::H, mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TResultInfo::iterations_executed, mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TResultInfo::last_err_vector, MRPT_END, MRPT_START, mrpt::math::norm(), mrpt::math::norm_inf(), mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::TResultInfo::path, mrpt::utils::CDebugOutputCapable::printf_debug(), and mrpt::utils::sprintf_vector().

static void mrpt::utils::CDebugOutputCapable::printf_debug ( const char *  frmt,
  ... 
)
staticinherited

Sends a formated text to "debugOut" if not NULL, or to cout otherwise.

Referenced by mrpt::math::CLevenbergMarquardtTempl< VECTORTYPE, USERPARAM >::execute().




Page generated by Doxygen 1.8.3 for MRPT 0.9.6 SVN: at Fri Feb 15 22:05:02 EST 2013