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;