|
LevMar.Intermediate.Fitting | Stability | Experimental | Maintainer | vandijk.roel@gmail.com, v.dijk.bas@gmail.com |
|
|
|
|
|
Description |
This module provides the Levenberg-Marquardt algorithm specialised
for curve-fitting.
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 & Jacobian.
|
|
type Model r a = [r] -> a -> r | Source |
|
A functional relation describing measurements represented as a function
from a list of parameters and an x-value 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 x-value 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.
|
|
Levenberg-Marquardt algorithm.
|
|
|
The Levenberg-Marquardt algorithm is overloaded to work on Double and Float.
| | Instances | |
|
|
|
|
|
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 |