TMtxOptimization.GradHessProcedure Property

property GradHessProcedure: TGradHess;

Defines the gradient vector and Hessian matrix calculation routine.

Returns: TGradHess

Remarks:

Defines the gradient vector and Hessian matrix calculation routine. Set TMtxOptimization.GradHessProcedure to nil if you want to use internal numeric gradient and Hessian matrix calculation.

Examples
function Banana(const Pars: TVec; const Consts: TVec; const PConsts: Array of TObject): double;
begin
    Banana := 100*Sqr(Pars[1]-Sqr(Pars[0]))+Sqr(1-Pars[0]);
end;

procedure GradHessBanana(Fun: TRealFunction; const Pars: TVec; const Consts: TVec; const ObjConsts: Array of TObject; const Grad: TVec; const Hess: TMtx);
begin
    Grad.Values[0] := -400*(Pars[1]-Sqr(Pars[0]))*Pars[0]-2*(1-Pars[0]);
    Grad.Values[1] := 200*(Pars[1]-Sqr(Pars[0]));
    Hess.Values[0,0] := -400*Pars[1]+1200*Sqr(Pars[0])+2;
    Hess.Values[0,1] := -400*Pars[0];
    Hess.Values[1,0] := -400*Pars[0];
    Hess.Values[1,1] := 200;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    MtxOptim.VariableParameters.SetIt(false,[2,-1]);
    MtxOptim.RealFunction := Banana;
    MtxOptim.OptimizationMethod := optMarquardt;
    // use exact gradient and Hessian matrix calculation
    // NOTE : set MtxOptim.GradHessProcedure to nil if you want to use numeric gradient and Hessian matrix approximation
    MtxOptim.GradHessProcedure := GradHessBanana;
    MtxOptim.Recalculate;
end;
See Also: TMtxOptimization.GradProcedure, TMtxOptimization.GradTolerance