Access the VariableParameters vector to set/read the variables in minimized function.
Access the VariableParameters vector to set/read the variables in minimized function. To define number of variables and their initial values, set the VariableParameters vector Length and Values properties. Read the VariableParameters Values property to get the function minimum position.
Example 1
Uses Math387, MtxVecTools, Optimization, MtxVecEdit;
function Banana(Pars: TVec; const Consts: Array of TSample;const PConsts: Array of Pointer): TSample;
begin
Result := 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;
#include "MtxVecCpp.h" //MtxVecCPP.cpp must be included in the project
#include "Math387.hpp"
#include "Optimization.hpp"
#include "MtxIntDiff.hpp"
#include "MtxVecTools.hpp"
// Objective function
double __fastcall Banana(TVec * Parameters, const double * Constants, const int Constants_Size,
System::TObject* const * ObjConst, const int ObjConst_Size)
{
double* Pars = Parameters->PValues1D(0);
return 100.0*IntPower(Pars[1]-IntPower(Pars[0],2),2)+IntPower(1.0-Pars[0],2);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MtxOptim->VariableParameters->SetIt(false,OPENARRAY(TSample,(2,-1)));
MtxOptim->RealFunction = Banana;
MtxOptim->OptimizationMethod = optMarquardt;
// numeric approximation
MtxOptim->GradProcedure = NULL;
MtxOptim->GradHessProcedure = NULL;
MtxOptim->Recalculate();
}