**26.3**** ****Minimizing Derivable Functions** (.NET, C#, CSharp, VB, Visual Basic, F#)

Class **DBrentMinimizer**
implements the **IOneVariableDMinimizer**
interface and minimizes a univariate function using *Brent's
Method* in combination with evaluations of the first derivative.
As described in Section 26.2, *Brent's
Method* uses parabolic interpolation to fit a parabola through
the current bracketing triplet, then uses the parabola to estimate the
function's minimum. Class **DBrentMinimizer**
uses the sign of the derivative at the central point of the bracketing
triplet to decide which region should be used for the next test point.

Like **GoldenMinimizer**
and **BrentMinimizer** (Section 26.2), instances of **DBrentMinimizer**
are constructed by specifying an error tolerance and a maximum number
of iterations, or by accepting the defaults for these values. This code
constructs a **DBrentMinimizer** using
the default error tolerance and maximum number of iterations:

Code Example – C# minimization

var minimizer = new DBrentMinimizer();

Code Example – VB minimization

Dim Minimizer As New DBrentMinimizer()

This code uses an error tolerance of 10^{-4} and a maximum of 50
iterations:

Code Example – C# minimization

double tol = 1e-4

int maxIter = 50;

var minimizer = new DBrentMinimizer( tol, maxIter );

Code Example – VB minimization

Dim Tol As Double = 0.0001

Dim MaxIter As Integer = 50

Dim Minimizer As New DBrentMinimizer(Tol, MaxIter)

Once you have constructed a **DBrentMinimizer**
instance, you can use the Minimize() method
to minimize a given function within a given interval. Overloads of Minimize() accept a bounding **Interval**,
a **Bracket**,
or a triplet of points satisfying the bracketing conditions (Section 26.1). Because **DBrentMinimizer**
uses evaluations of the first derivative of the function, you must also
supply a **OneVariableFunction** encapsulating
the derivative. For example, the function:

has a minimum at 5.0. To compute the minimum, first encapsulate the function and its derivative:

Code Example – C# minimization

public static double MyFunction( double x )

{

return ( ( x - 5 ) * ( x - 5 ) );

}

public static double MyFunctionPrime( double x )

{

return ( 2 * x ) - 10;

}

var f = new OneVariableFunction(

new Func<double, double>( MyFunction ) );

var df = new OneVariableFunction(

new Func<double, double>( MyFunctionPrime ) );

Code Example – VB minimization

Public Shared Function MyFunction(X As Double) As Double

Return ((x - 5) * (x - 5))

End Function

Public Shared Function MyFunctionPrime(X As Double) As Double

Return (2 * X) - 10

End Function

Dim F As New OneVariableFunction(

New Func(Of Double, Double)(AddressOf MyFunction))

Dim DF As New OneVariableFunction(

New Func(Of Double, Double)(AddressOf MyFunctionPrime))

This code then constructs a **Bracket**
starting from (1,2), and computes the minimum:

Code Example – C# minimization

var minimizer = new DBrentMinimizer();

var bracket = new Bracket( f, 1, 2 );

double min = minimizer.Minimize( bracket, df );

Code Example – VB minimization

Dim Minimizer As New DBrentMinimizer()

Dim Bracket As New Bracket(F, 1, 2)

Dim Min As Double = Minimizer.Minimize(Bracket, DF)