Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

fl::LevenbergMarquardt< T > Class Template Reference

#include <search.h>

Inheritance diagram for fl::LevenbergMarquardt< T >:

fl::Search< T > List of all members.

Public Methods

 LevenbergMarquardt (T toleranceF=-1, T toleranceX=-1, int maxIterations=200)
 toleranceF/X == -1 means use sqrt (machine precision)

virtual void search (Searchable< T > &searchable, Vector< T > &point)
void qrfac (Matrix< T > &a, Vector< int > &ipvt, Vector< T > &rdiag, Vector< T > &acnorm)
void qrsolv (Matrix< T > &r, const Vector< int > &ipvt, const Vector< T > &diag, const Vector< T > &qtb, Vector< T > &x, Vector< T > &sdiag)
void lmpar (Matrix< T > &r, const Vector< int > &ipvt, const Vector< T > &diag, const Vector< T > &qtb, T delta, T &par, Vector< T > &x)

Public Attributes

toleranceF
toleranceX
int maxIterations

Static Public Attributes

const T epsilon = DBL_EPSILON
 FLT_EPSILON or DBL_EPSILON.

const T minimum = DBL_MIN
 FLT_MIN or DBL_MIN.


Detailed Description

template<class T>
class fl::LevenbergMarquardt< T >

LM based on QR decomposition. Adapted from MINPACK.


Constructor & Destructor Documentation

template<class T>
fl::LevenbergMarquardt< T >::LevenbergMarquardt   toleranceF = -1,
  toleranceX = -1,
int    maxIterations = 200
 

toleranceF/X == -1 means use sqrt (machine precision)


Member Function Documentation

template<class T>
void fl::LevenbergMarquardt< T >::lmpar Matrix< T > &    r,
const Vector< int > &    ipvt,
const Vector< T > &    diag,
const Vector< T > &    qtb,
  delta,
T &    par,
Vector< T > &    x
 

lmpar algorithm:

A constrained lls problem: solve (~JJ + pDD)x = ~Jf such that |Dx| is pretty close to delta

Start with p = 0 and determine x Solve for x in ~JJx = ~Jf Early out if |Dx| is close to delta Determine min and max values for p J = QR (so ~JJ = ~RR) solve for b in ~Rb = DDx / |Dx| min = (|Dx| - delta) / (delta * |b|^2) max = |!D~Jf| / delta Initialize p make sure it is in bounds if p is zero, p = |!D~Jf| / |Dx| Iterate solve for x in (~JJ + pDD)x = ~Jf end if |Dx| is close to delta or too many iterations or |Dx| is becoming smaller than delta when min == 0 (~JJ + pDD) = QR solve for b in ~Rb = DDx / |Dx| p += (|Dx| - delta) / (delta * |b|^2)

template<class T>
void fl::LevenbergMarquardt< T >::qrfac Matrix< T > &    a,
Vector< int > &    ipvt,
Vector< T > &    rdiag,
Vector< T > &    acnorm
 

template<class T>
void fl::LevenbergMarquardt< T >::qrsolv Matrix< T > &    r,
const Vector< int > &    ipvt,
const Vector< T > &    diag,
const Vector< T > &    qtb,
Vector< T > &    x,
Vector< T > &    sdiag
 

template<class T>
void fl::LevenbergMarquardt< T >::search Searchable< T > &    searchable,
Vector< T > &    point
[virtual]
 

A loose paraphrase the MINPACK function lmdif.

Implements fl::Search< T >.


Member Data Documentation

template<class T>
const float LevenbergMarquardt::epsilon = DBL_EPSILON [static]
 

FLT_EPSILON or DBL_EPSILON.

template<class T>
int fl::LevenbergMarquardt< T >::maxIterations
 

template<class T>
const float LevenbergMarquardt::minimum = DBL_MIN [static]
 

FLT_MIN or DBL_MIN.

template<class T>
T fl::LevenbergMarquardt< T >::toleranceF
 

template<class T>
T fl::LevenbergMarquardt< T >::toleranceX
 


The documentation for this class was generated from the following files:
Generated on Thu Dec 9 17:13:25 2004 for fl by doxygen1.2.18