
LevMar.Intermediate.Fitting.AD  Stability  Experimental  Maintainer  vandijk.roel@gmail.com, v.dijk.bas@gmail.com 





Description 
A levmar variant specialised for curvefitting that uses Automatic
Differentiation to automatically compute the Jacobian.
For additional documentation see the documentation of the levmar C
library which this library is based on:
http://www.ics.forth.gr/~lourakis/levmar/


Synopsis 




Model.


type Model r a = [r] > a > r  Source 

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



This type synonym expresses that usually the a in Model r a
equals the type of the parameters.


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.



This type synonym expresses that usually the a in Jacobian r a
equals the type of the parameters.



Compute the Jacobian of the Model using Automatic
Differentiation.


LevenbergMarquardt algorithm.



The LevenbergMarquardt algorithm is overloaded to work on Double and Float.
  Instances  



:: forall r a . (HasBasis r, Basis r ~ (), VectorSpace (Scalar r), LevMarable r)   => Model (r :~> r) a  Model. Note that
':~>' is overloaded
for all the numeric
classes.
 > [r]  Initial parameters
 > [(a, r)]  Samples
 > Integer  Maximum iterations
 > Options r  Minimization options
 > Maybe [r]  Optional lower bounds
 > Maybe [r]  Optional upper bounds
 > Maybe (LinearConstraints r)  Optional linear constraints
 > Maybe [r]  Optional weights
 > Either LevMarError ([r], Info r, CovarMatrix r)   The LevenbergMarquardt algorithm specialised for curvefitting
that automatically computes the Jacobian using automatic
differentiation of the model function.
Warning: Don't apply levmar to Models that apply methods of
the Eq and Ord classes to the parameters. These methods are
undefined for ':~>'!!!



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
 Constructors  Opts   optScaleInitMu :: r  Scale factor for initial mu.
 optStopNormInfJacTe :: r  Stopping thresholds for J^T e_inf.
 optStopNorm2Dp :: r  Stopping thresholds for Dp_2.
 optStopNorm2E :: r  Stopping thresholds for e_2.
 optDelta :: r  Step used in the difference approximation to the Jacobian.
If optDelta<0, the Jacobian is approximated
with central differences which are more accurate
(but slower!) compared to the forward differences
employed by default.


 Instances  



Default minimization options


Output



Information regarding the minimization.
 Constructors  Info   infNorm2initE :: r  e_2 at initial parameters.
 infNorm2E :: r  e_2 at estimated parameters.
 infNormInfJacTe :: r  J^T e_inf at estimated parameters.
 infNorm2Dp :: r  Dp_2 at estimated parameters.
 infMuDivMax :: r  mu/max[J^T J]_ii ] at estimated parameters.
 infNumIter :: Integer  Number of iterations.
 infStopReason :: StopReason  Reason for terminating.
 infNumFuncEvals :: Integer  Number of function evaluations.
 infNumJacobEvals :: Integer  Number of jacobian evaluations.
 infNumLinSysSolved :: Integer  Number of linear systems solved, i.e. attempts for reducing error.


 Instances  



Reason for terminating.
 Constructors  SmallGradient  Stopped because of small gradient J^T e.
 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 optScaleInitMu.
 SmallestError  Stopped because no further error reduction is possible. Restart with increased optScaleInitMu.
 SmallNorm2E  Stopped because of small e_2.
 InvalidValues  Stopped because model function returned invalid values (i.e. NaN or Inf). This is a user error.

 Instances  


type CovarMatrix r = [[r]]  Source 

Covariance matrix corresponding to LS solution.



Constructors  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 malloc failed in the underlying C levmar library.
 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.

 Instances  


Produced by Haddock version 2.4.2 