ERC CISST - cisst software

nmrLSNonLinSolver Class Reference
[Numerical Methods]

#include <nmrLSNonLinSolver.h>

Collaboration diagram for nmrLSNonLinSolver:

Collaboration graph
[legend]
List of all members.

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 jacobian is then calculated by a forward-difference approximation.

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:

info = 0 improper input parameters.

info = 1 algorithm estimates that the relative error in the sum of squares is at most tol.

info = 2 algorithm estimates that the relative error between x and the solution is at most tol.

info = 3 conditions for info = 1 and info = 2 both hold.

info = 4 fvec is orthogonal to the columns of the jacobian to machine precision.

info = 5 number of calls to fcn has reached or exceeded 200*(n+1).

info = 6 tol is too small. no further reduction in the sum of squares is possible.

info = 7 tol is too small. no further improvement in the approximate solution x is possible

The input/output from this class is:

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.

Definition at line 124 of file nmrLSNonLinSolver.h.

Public Member Functions

Protected Attributes


Constructor & Destructor Documentation

nmrLSNonLinSolver::nmrLSNonLinSolver ( 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.

Definition at line 143 of file nmrLSNonLinSolver.h.

References Allocate().

nmrLSNonLinSolver::nmrLSNonLinSolver ( 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:
m Number of nonlinear functions.
n Number of variables This order will be used for the output as well.

Definition at line 158 of file nmrLSNonLinSolver.h.

References Allocate().

nmrLSNonLinSolver::nmrLSNonLinSolver ( 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.

Definition at line 170 of file nmrLSNonLinSolver.h.

References Allocate().

nmrLSNonLinSolver::nmrLSNonLinSolver ( 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.

Definition at line 170 of file nmrLSNonLinSolver.h.

References Allocate().


Member Function Documentation

void nmrLSNonLinSolver::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:
m Number of nonlinear functions
n Number of variables

Definition at line 183 of file nmrLSNonLinSolver.h.

References IWork, Lwork, M, N, vctDynamicVector< _elementType >::SetSize(), Tolerance, and Work.

Referenced by Allocate(), and nmrLSNonLinSolver().

void nmrLSNonLinSolver::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.

Definition at line 198 of file nmrLSNonLinSolver.h.

References Allocate(), and vctDynamicConstVectorBase< vctDynamicVectorOwner< _elementType >, _elementType >::size().

template<int __instanceLine, class __elementType>
void nmrLSNonLinSolver::Solve ( nmrCallBackFunctionF< __instanceLine, __elementType > &  callBack,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  X,
vctDynamicVector< CISSTNETLIB_DOUBLE > &  F,
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

Definition at line 212 of file nmrLSNonLinSolver.h.

References cmnThrow(), Info, IWork, Lwork, M, N, vctDynamicVectorBase< _vectorOwnerType, _elementType >::Pointer(), Tolerance, and Work.


The documentation for this class was generated from the following file:
erc-cisst-devel<at>lists.johnshopkins.edu