Stability | Experimental |
---|---|
Maintainer | Roel van Dijk <vandijk.roel@gmail.com> Bas van Dijk <v.dijk.bas@gmail.com> |
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 = [r] -> [r]
- type Jacobian r = [r] -> [[r]]
- class LevMarable r where
- levmar :: Model r -> Maybe (Jacobian r) -> [r] -> [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 Constraints r = Constraints {
- lowerBounds :: Maybe [r]
- upperBounds :: Maybe [r]
- weights :: Maybe [r]
- linearConstraints :: Maybe (LinearConstraints r)
- noConstraints :: Constraints 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 = [r] -> [r]Source
A functional relation describing measurements represented as a function from a list of parameters to a list of expected measurements.
- Ensure that the length of the parameters list equals the length of the
initial parameters list in
levmar
. - Ensure that the length of the ouput list equals the length of the samples
list in
levmar
.
For example:
hatfldc :: Model Double hatfldc [p0, p1, p2, p3] = [ p0 - 1.0 , p0 - sqrt p1 , p1 - sqrt p2 , p3 - 1.0 ]
type Jacobian r = [r] -> [[r]]Source
The jacobian of the Model
function. Expressed as a function from a list
of parameters to a list of lists which for each expected measurement describes
the partial derivatives of the parameters.
See: http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant
- Ensure that the length of the parameter list equals the length of the initial
parameter list in
levmar
. - Ensure that the output matrix has the dimension
n
xm
wheren
is the number of samples andm
is the number of parameters.
For example the jacobian of the above hatfldc
model is:
hatfldc_jac :: Jacobian Double hatfldc_jac _ p1 p2 _ = [ [1.0, 0.0, 0.0, 0.0] , [1.0, -0.5 / sqrt p1, 0.0, 0.0] , [0.0, 1.0, -0.5 / sqrt p2, 0.0] , [0.0, 0.0, 0.0, 1.0] ]
Levenberg-Marquardt algorithm.
class LevMarable r whereSource
:: Model r | Model |
-> Maybe (Jacobian r) | Optional jacobian |
-> [r] | Initial parameters |
-> [r] | Samples |
-> Integer | Maximum iterations |
-> Options r | Minimization options |
-> Constraints r | Constraints |
-> Either LevMarError ([r], Info r, CovarMatrix r) |
The Levenberg-Marquardt algorithm.
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
Constraints
data Constraints r Source
Constraints | |
|
noConstraints :: Constraints rSource
Constraints where all fields are Nothing
.
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. |