Uses Math387,
MtxVecTools,
Optimization, MtxVecEdit;
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 TForm1.FormCreate(Sender: TObject);
begin
// function with two variables
// initial values for variables => Pars[0] := 2, Pars[1] := -1;
MtxOptim.VariableParameters.SetIt(false,[2,-1]);
MtxOptim.RealFunction := Banana;
MtxOptim.OptimizationMethod := optMarquardt;
// numeric approximation
MtxOptim.GradProcedure :=
nil;
MtxOptim.GradHessProcedure :=
nil;
MtxOptim.Recalculate;
// now VariableParameters holds minimum position
ViewValues(MtxOptim.VariableParameters,'Minimum position');
end;