cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Attributes | List of all members
nmrLSNonLinJacobianSolver Class Reference

#include <nmrLSNonLinJacobianSolver.h>

Public Member Functions

 nmrLSNonLinJacobianSolver (void)
 
 nmrLSNonLinJacobianSolver (CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
 
void Allocate (CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
 
 nmrLSNonLinJacobianSolver (vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F)
 
void Allocate (vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F)
 
template<int __instanceLineF, class __elementTypeF , int __instanceLineJ, class __elementTypeJ >
void Solve (nmrCallBackFunctionF< __instanceLineF, __elementTypeF > &callBackF, nmrCallBackFunctionJ< __instanceLineJ, __elementTypeJ > &callBackJ, vctDynamicVector< CISSTNETLIB_DOUBLE > &X, vctDynamicVector< CISSTNETLIB_DOUBLE > &F, vctDynamicVector< CISSTNETLIB_DOUBLE > &J, CISSTNETLIB_DOUBLE tolerance) throw (std::runtime_error)
 

Protected Attributes

CISSTNETLIB_INTEGER M
 
CISSTNETLIB_INTEGER N
 
CISSTNETLIB_INTEGER Ldfjac
 
CISSTNETLIB_DOUBLE Tolerance
 
CISSTNETLIB_INTEGER Info
 
CISSTNETLIB_INTEGER Lwork
 
vctDynamicVector
< CISSTNETLIB_INTEGER > 
IWork
 
vctDynamicVector
< CISSTNETLIB_DOUBLE > 
Work
 

Detailed Description

Algorithm LSNonLin: Non Linear Least Squares by Levenberg Marquardt method The purpose of this is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the levenberg-marquardt algorithm. The user must provide a subroutine which calculates the functions. The user must provide a subroutine which calculates the functions and the jacobian

Rather than compute the value f(x) (the sum of squares), LSNonLin requires the user-defined function to compute the vector-valued function. $ \textbf{F}(x) = [f_1(x), f_2(x), f_3(x)]^{t} $ Then, in vector terms, you can restate this optimization problem as $ \mbox{min} \frac{1}{2} \| \textbf{F}(x) \|_2^2 = \frac{1}{2} sum_i f_i(x)^2 $ where $x$ is a vector and $\textbf{F}(x)$ is a function that returns a vector value.

The data members of this class are:

The input/output from this class is:

  The solver calls this method when needed to obtain values for F for
  a given variable values X.

  The following constructor can be used to contruct the nmrCallBackLSNonLinSolver object
  required to be passed to the Solve() method. This object needs to be created
  only once per given set of nonlinear functions to be minized.
      nmrCallBackLSNonLinSolver<nmrUNIQUE_IDENTIFIER_LINE, Cfoo> callBackObject(this, &Cfoo::Mbar);
Note
This code relies on the ERC CISST cnetlib library. Since cnetlib is optional, make sure that CISST_HAS_CNETLIB has been turned ON during the configuration with CMake.

Constructor & Destructor Documentation

nmrLSNonLinJacobianSolver::nmrLSNonLinJacobianSolver ( void  )
inline

Default constructor. This constructor doesn't allocate any memory. If you use this constructor, you will need to use one of the Allocate() methods before you can use the Solve method.

nmrLSNonLinJacobianSolver::nmrLSNonLinJacobianSolver ( CISSTNETLIB_INTEGER  m,
CISSTNETLIB_INTEGER  n 
)
inline

Constructor with memory allocation. This constructor allocates the memory based on M and N. It relies on the method Allocate(). The next call to the Solve() method will check that the parameters match the dimension.

Parameters
mNumber of nonlinear functions.
nNumber of variables This order will be used for the output as well.
nmrLSNonLinJacobianSolver::nmrLSNonLinJacobianSolver ( vctDynamicVector< CISSTNETLIB_DOUBLE > &  X,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  F 
)
inline

Constructor with memory allocation. This constructor allocates the memory based on the actual input of the Solve() method. It relies on the method Allocate(). The next call to the Solve() method will check that the parameters match the dimension and storage order.

Member Function Documentation

void nmrLSNonLinJacobianSolver::Allocate ( CISSTNETLIB_INTEGER  m,
CISSTNETLIB_INTEGER  n 
)
inline

This method allocates the memory based on M and N. The next call to the Solve() method will check that the parameters match the dimension.

Parameters
mNumber of nonlinear functions
nNumber of variables
void nmrLSNonLinJacobianSolver::Allocate ( vctDynamicVector< CISSTNETLIB_DOUBLE > &  X,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  F 
)
inline

Allocate memory to solve this problem. This method provides a convenient way to extract the required sizes from the input containers. The next call to the Solve() method will check that the parameters match the dimension.

template<int __instanceLineF, class __elementTypeF , int __instanceLineJ, class __elementTypeJ >
void nmrLSNonLinJacobianSolver::Solve ( nmrCallBackFunctionF< __instanceLineF, __elementTypeF > &  callBackF,
nmrCallBackFunctionJ< __instanceLineJ, __elementTypeJ > &  callBackJ,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  X,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  F,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  J,
CISSTNETLIB_DOUBLE  tolerance 
)
throw (std::runtime_error
)
inline

This computes the solves nonlinear least squares problem invloving M functions in N variables. On input, X contains the starting point, On output, X contains the final estimate, F contrains the final value

Member Data Documentation

CISSTNETLIB_INTEGER nmrLSNonLinJacobianSolver::Info
protected
vctDynamicVector<CISSTNETLIB_INTEGER> nmrLSNonLinJacobianSolver::IWork
protected
CISSTNETLIB_INTEGER nmrLSNonLinJacobianSolver::Ldfjac
protected
CISSTNETLIB_INTEGER nmrLSNonLinJacobianSolver::Lwork
protected
CISSTNETLIB_INTEGER nmrLSNonLinJacobianSolver::M
protected
CISSTNETLIB_INTEGER nmrLSNonLinJacobianSolver::N
protected
CISSTNETLIB_DOUBLE nmrLSNonLinJacobianSolver::Tolerance
protected
vctDynamicVector<CISSTNETLIB_DOUBLE> nmrLSNonLinJacobianSolver::Work
protected

The documentation for this class was generated from the following file: