Stability | Experimental |
---|---|
Maintainer | Roel van Dijk <vandijk.roel@gmail.com> Bas van Dijk <v.dijk.bas@gmail.com> |
Safe Haskell | None |
For additional documentation see the documentation of the levmar C library which this library is based on:
- type Params r = Vector r
- type Samples r = Vector r
- type Model r = Params r -> Samples r
- type Jacobian r = Params r -> Matrix r
- class LevMarable r where
- 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 (Params r))
- upperBounds :: !(Maybe (Params r))
- weights :: !(Maybe (Params r))
- linearConstraints :: !(Maybe (LinearConstraints r))
- type LinearConstraints r = (Matrix r, Vector r)
- data Info r = Info {
- infNorm2initE :: !r
- infNorm2E :: !r
- infNormInfJacTe :: !r
- infNorm2Dp :: !r
- infMuDivMax :: !r
- infNumIter :: !Int
- infStopReason :: !StopReason
- infNumFuncEvals :: !Int
- infNumJacobEvals :: !Int
- infNumLinSysSolved :: !Int
- data StopReason
- data LevMarError
Model & Jacobian.
type Params r = Vector rSource
Parameter vector of length m
.
Ensure that m <= n
where n
is the length of the Samples
vector.
type Samples r = Vector rSource
Sample vector of length n
.
Ensure that n >= m
where m
is the length of the Params
vector.
type Model r = Params r -> Samples rSource
A functional relation describing measurements represented as a function from a vector of parameters to a vector of expected samples.
- Ensure that the length
m
of the parameter vector equals the length of the initial parameter vector inlevmar
. - Ensure that the length
n
of the output sample vector equals the length of the sample vector inlevmar
. - Ensure that the length
n
of the output sample vector vector is bigger than or equal to the lengthm
of the parameter vector.
type Jacobian r = Params r -> Matrix rSource
The jacobian
of the Model
function. Expressed as a function from a vector of
parameters to a matrix which for each expected sample describes the
partial derivatives of the parameters.
- Ensure that the length
m
of the parameter vector equals the length of the initial parameter vector inlevmar
. - Ensure that the output matrix has the dimension
n><m
wheren
is the number of samples andm
is the number of parameters.
Levenberg-Marquardt algorithm.
class LevMarable r whereSource
:: Model r | Model |
-> Maybe (Jacobian r) | Optional jacobian |
-> Params r | Initial parameters of length |
-> Samples r | Sample vector of length |
-> Int | Maximum iterations |
-> Options r | Minimization options |
-> Constraints r | Constraints |
-> Either LevMarError (Params r, Info r, Matrix r) |
The Levenberg-Marquardt algorithm.
Returns a triple of the found parameters, a structure containing information about the minimization and the covariance matrix corresponding to LS solution.
Ensure that n >= m
.
Minimization options.
Minimization options
Opts | |
|
defaultOpts :: Fractional r => Options rSource
Default minimization options
Constraints
data Constraints r Source
Ensure that these vectors have the same length as the number of parameters.
Constraints | |
|
Typeable1 Constraints | |
(Eq r, Container Vector r) => Eq (Constraints r) | |
(Read r, Element r) => Read (Constraints r) | |
(Show r, Element r) => Show (Constraints r) | |
Monoid (Constraints r) |
|
type LinearConstraints r = (Matrix r, Vector r)Source
Linear constraints consisting of a constraints matrix, k><m
and
a right hand constraints vector, of length k
where m
is the number of
parameters and k
is the number of constraints.
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. |
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. |