Stability  Experimental 

Maintainer  Roel van Dijk <vandijk.roel@gmail.com> Bas van Dijk <v.dijk.bas@gmail.com> 
This module provides the LevenbergMarquardt algorithm specialised for curvefitting.
For additional documentation see the documentation of the levmar C library which this library is based on: http://www.ics.forth.gr/~lourakis/levmar/
 type Model r a = [r] > a > r
 type SimpleModel r = Model r r
 type Jacobian r a = [r] > a > [r]
 type SimpleJacobian r = Jacobian r r
 class LevMarable r
 levmar :: LevMarable r => Model r a > Maybe (Jacobian r a) > [r] > [(a, r)] > Integer > Options r > Constraints r > Either LevMarError ([r], Info r, CovarMatrix r)
 type LinearConstraints r = ([[r]], [r])
 data Options r = Opts {
 optScaleInitMu :: r
 optStopNormInfJacTe :: r
 optStopNorm2Dp :: r
 optStopNorm2E :: r
 optDelta :: r
 defaultOpts :: Fractional r => Options r
 data Info r = Info {
 infNorm2initE :: r
 infNorm2E :: r
 infNormInfJacTe :: r
 infNorm2Dp :: r
 infMuDivMax :: r
 infNumIter :: Integer
 infStopReason :: StopReason
 infNumFuncEvals :: Integer
 infNumJacobEvals :: Integer
 infNumLinSysSolved :: Integer
 data StopReason
 type CovarMatrix r = [[r]]
 data LevMarError
Model & Jacobian.
type Model r a = [r] > a > rSource
A functional relation describing measurements represented as a function from a list of parameters and an xvalue to an expected measurement.
 Ensure that the length of the parameters list equals the lenght of the initial
parameters list in
levmar
.
For example, the quadratic function f(x) = a*x^2 + b*x + c
can be
written as:
quad ::Num
r =>Model
r r quad [a, b, c] x = a*x^2 + b*x + c
type SimpleModel r = Model r rSource
This type synonym expresses that usually the a
in
equals the type of the parameters.
Model
r a
type Jacobian r a = [r] > a > [r]Source
The jacobian of the Model
function. Expressed as a function from a list
of parameters and an xvalue to the partial derivatives of the parameters.
See: http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant
 Ensure that the length of the parameters list equals the lenght of the initial
parameters list in
levmar
.  Ensure that the length of the output parameter derivatives list equals the length of the input parameters list.
For example, the jacobian of the above quad
model can be written as:
quadJacob ::Num
r =>Jacobian
N3 r r quadJacob [_, _, _] x = [ x^2  with respect to a , x  with respect to b , 1  with respect to c ]
(Notice you don't have to differentiate for x
.)
type SimpleJacobian r = Jacobian r rSource
This type synonym expresses that usually the a
in
equals the type of the parameters.
Jacobian
r a
LevenbergMarquardt algorithm.
class LevMarable r Source
:: LevMarable r  
=> Model r a  Model 
> Maybe (Jacobian r a)  Optional jacobian 
> [r]  Initial parameters 
> [(a, r)]  Samples 
> Integer  Maximum iterations 
> Options r  Minimization options 
> Constraints r  Constraints 
> Either LevMarError ([r], Info r, CovarMatrix r) 
The LevenbergMarquardt algorithm specialised for curvefitting.
type LinearConstraints r = ([[r]], [r])Source
Linear constraints consisting of a constraints matrix, kxm and a right hand constraints vector, kx1 where m is the number of parameters and k is the number of constraints.
Minimization options.
Minimization options
Opts  

defaultOpts :: Fractional r => Options rSource
Default minimization options
Output
Information regarding the minimization.
Info  

data StopReason Source
Reason for terminating.
SmallGradient  Stopped because of small gradient 
SmallDp  Stopped because of small Dp. 
MaxIterations  Stopped because maximum iterations was reached. 
SingularMatrix  Stopped because of singular matrix. Restart from current
estimated parameters with increased 
SmallestError  Stopped because no further error reduction is
possible. Restart with increased 
SmallNorm2E  Stopped because of small 
InvalidValues  Stopped because model function returned invalid values (i.e. NaN or Inf). This is a user error. 
type CovarMatrix r = [[r]]Source
Covariance matrix corresponding to LS solution.
data LevMarError Source
LevMarError  Generic error (not one of the others) 
LapackError  A call to a lapack subroutine failed in the underlying C levmar library. 
FailedBoxCheck  At least one lower bound exceeds the upper one. 
MemoryAllocationFailure  A call to 
ConstraintMatrixRowsGtCols  The matrix of constraints cannot have more rows than columns. 
ConstraintMatrixNotFullRowRank  Constraints matrix is not of full row rank. 
TooFewMeasurements  Cannot solve a problem with fewer measurements than unknowns. In case linear constraints are provided, this error is also returned when the number of measurements is smaller than the number of unknowns minus the number of equality constraints. 