TMtxOptimization.GradProcedureEvent Event

event TGrad GradProcedureEvent

Defines the gradient vector calculation routine.

Remarks:

Defines the gradient vector calculation routine. Set Dew.Math.TMtxOptimization.GradProcedure to nil if you want to use internal numeric gradient vector calculation.

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    // Objective function
    double Banana(TVec pars, TVec consts, params object[] obj)
    {
        return 100.0*Math387.IntPower(pars[1]- Math387.IntPower(pars[0],2),2)
            + Math387.IntPower(1.0-pars[0],2);
    }

    // Analytical gradient of the objective function
    void GradBanana(TRealFunction Fun, TVec pars, TVec consts, object[] obj, TVec grad)
    {
        grad.Values[0] = -400*(pars[1]-Math387.IntPower(pars[0],2))*pars[0] - 2*(1-pars[0]);
        grad.Values[1] = 200*(pars[1]-Math387.IntPower(pars[0],2));
    }

    private void Example(TMtxOptimization opt)
    {
        opt.VariableParameters.SetIt(new double[] {2,-1});
        opt.RealFunction = Banana;
        opt.OptimizationMethod = TOptimizationMethod.optBFGS;
        // use exact gradient vector calculation
        // NOTE : set opt.GradProcedure to null if you
            //        want to use internal numeric gradient calculation
        opt.GradProcedure = GradBanana;
        opt.Recalculate();
    }
}
See Also: TMtxOptimization.GradHessProcedure, TMtxOptimization.GradTolerance