Abstract
Nonlinear parameter fitting using the Levenberg-Marquardt-algorithm (sort of a genetic algorithm).
The mk_lmdif
module is the entry point, which must
be given a representation of scalars (which also doubles as the
type of parameters) and a way to produce random numbers.
Synopsis
module type lmdif = {
| |||||||||||||||||||||||
module mk_lmdif | : | (real: real) -> (rand: rng_engine) -> lmdif with real = real.t |
Description
- ↑module type lmdif
The type of an instantiated
mk_lmdif
module.- ↑type real
The representation of real numbers.
- ↑type range = {initial_value: real, lower_bound: real, upper_bound: real}
A range for an optimizable varible. Inclusive lower and upper bounds, as well as an initial value.
- ↑type calibration_result [num_vars] = {error: real, num_feval: i32, parameters: [num_vars]real}
The result of calibration, which includes the best observed parameter assignment, its error, and the number of evaluations of the objective function that was carried out before finding this result. The error is simply the value returned by the objective function for the parameters, and produced here only for convenience.
- ↑type optimization_variable
An input variable to the objective function. It can be either fixed or subject to optimization.
- ↑val fixed_value: real -> optimization_variable
- ↑val optimize_value: range -> optimization_variable
- ↑val lmdif [num_vars]: [num_vars]optimization_variable -> (objective: ([num_vars]real -> real)) -> (max_global: i32) -> (np: i32) -> calibration_result [num_vars]
Perform parameter fitting.
objective
is the objective function,max_global
is the maximum number of calls to the objective function before termination.np
is the number of mutations to attempt per iteration.