Optimization::Marquardt Function

Overload List

#SignatureDescription
1int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TMtx *IHess, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision, int MaxIter = 500, double Tol = 1.0E-8, double GradTol = 1.0E-8, double Lambda0 = 1e-2, tStrings *Verbose = null);Minimizes the function of several variables by using the Marquardt optimization algorithm.
2int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, const TMtxFloatPrecision FloatPrecision);Minimizes the function of several variables by using the Marquardt optimization method with no log.
3int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision);Minimizes the function of several variables by using the Marquardt optimization method with no log.
4int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TMtx *IHess, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision, int MaxIter, double Tol, double GradTol, double Lambda0);Minimizes the function of several variables by using the Marquardt optimization method with no log.

Overload 1: int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TMtx *IHess, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision, int MaxIter = 500, double Tol = 1.0E-8, double GradTol = 1.0E-8, double Lambda0 = 1e-2, tStrings *Verbose = null);

Minimizes the function of several variables by using the Marquardt optimization algorithm.

#NameTypeDescription
1FunTRealFunctionReal function (must be of TRealFunction type) to be minimized.
2GradHessTGradHessThe gradient and Hessian procedure (must be of TGradHess type), used for calculating the gradient and Hessian matrix.
3ParsDewArray<double> &Stores the initial estimates for parameters (minimum estimate). After the call to routine returns adjusted calculated values (minimum position).
4Constsconst DewArray<double> &Additional Fun constant parameteres (can be/is usually nil).
5ObjConstconst DewArray<tObject *> &Additional Fun constant parameteres (can be/is usually nil).
6FMindouble &Returns function value at minimum.
7IHessTMtx *Returns inverse Hessian matrix.
8StopReasonTOptStopReason &Returns reason why minimum search stopped (see TOptStopReason).
9FloatPrecisionconst TMtxFloatPrecisionSpecifies the floating point precision to be used by the routine.
10MaxIter = 500intMaximum allowed numer of minimum search iterations.
11Tol = 1.0E-8doubleDesired Pars - minimum position tolerance.
12GradTol = 1.0E-8doubleMinimum allowed gradient C-Norm.
13Lambda0 = 1e-2doubleInitial lambda step, used in Marquardt algorithm.
14Verbose = nulltStrings *If assigned, stores Fun, evaluated at each iteration step. Optionally, you can also pass TOptControl object to the Verbose parameter. This allows the optimization procedure to be interrupted from another thread and optionally also allows logging and iteration count monitoring.

Returns: the number of iterations required to reach the solution(minimum) within given tolerance.

Remarks:

What it computes. Minimizes a smooth real function of several
variables with the Levenberg-Marquardt method, solving a damped Newton step (H+lambda I) delta=-g and adapting the damping lambda (started from Lambda0) between gradient-descent and Newton behaviour. It needs both the gradient and the Hessian via GradHess. The standard test objective is

f(x_0,x_1) = 100 (x_1 - x_0^2)^2 + (1 - x_0)^2

with global minimum f=0 at (1,1)(1,1), gradient

(d f)/(d x_0) = -400 (x_1 - x_0^2) x_0 - 2 (1 - x_0), (d f)/(d x_1) = 200 (x_1 - x_0^2)

and Hessian

H(f) = [ 1200 x_0^2 - 400 x_1 + 2  -400 x_0 ]
       [ -400 x_0                  200      ]

Domain. Pars holds the n starting coordinates;
GradHess returns the gradient and (symmetric) Hessian; MaxIter > 0; Tol,GradTol ≥ 0; Lambda0 > 0.

Defined behaviour. Returns the iteration count; Pars
holds the minimizer, FMin the minimum and IHess the inverse Hessian. StopReason reports the cause - TOptStopReason::OptResConverged/TOptStopReason::OptResSmallGrad on success, TOptStopReason::optNANValue if the objective returned NaN, or TOptStopReason::OptResBigLambda/TOptStopReason::OptResSmallLambda/ TOptStopReason::OptResMaxIter otherwise.

See Also: TGradHess, TRealFunction, MtxIntDiff::NumericGradHess
Declared in Dew::Math::Units::Optimization · Dew.Math/Units.Optimization.h · Cross-compiler

Overload 2: int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, const TMtxFloatPrecision FloatPrecision);

Minimizes the function of several variables by using the Marquardt optimization method with no log.

#NameTypeDescription
1FunTRealFunction
2GradHessTGradHess
3ParsDewArray<double> &
4Constsconst DewArray<double> &
5ObjConstconst DewArray<tObject *> &
6FMindouble &
7FloatPrecisionconst TMtxFloatPrecision
Declared in Dew::Math::Units::Optimization · Dew.Math/Units.Optimization.h · Cross-compiler

Overload 3: int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision);

Minimizes the function of several variables by using the Marquardt optimization method with no log.

#NameTypeDescription
1FunTRealFunction
2GradHessTGradHess
3ParsDewArray<double> &
4Constsconst DewArray<double> &
5ObjConstconst DewArray<tObject *> &
6FMindouble &
7StopReasonTOptStopReason &
8FloatPrecisionconst TMtxFloatPrecision
Declared in Dew::Math::Units::Optimization · Dew.Math/Units.Optimization.h · Cross-compiler

Overload 4: int Marquardt(TRealFunction Fun, TGradHess GradHess, DewArray<double> &Pars, const DewArray<double> &Consts, const DewArray<tObject *> &ObjConst, double &FMin, TMtx *IHess, TOptStopReason &StopReason, const TMtxFloatPrecision FloatPrecision, int MaxIter, double Tol, double GradTol, double Lambda0);

Minimizes the function of several variables by using the Marquardt optimization method with no log.

#NameTypeDescription
1FunTRealFunction
2GradHessTGradHess
3ParsDewArray<double> &
4Constsconst DewArray<double> &
5ObjConstconst DewArray<tObject *> &
6FMindouble &
7IHessTMtx *
8StopReasonTOptStopReason &
9FloatPrecisionconst TMtxFloatPrecision
10MaxIterint
11Toldouble
12GradToldouble
13Lambda0double
Declared in Dew::Math::Units::Optimization · Dew.Math/Units.Optimization.h · Cross-compiler