I have forgotten
my Password

this unit 2.98
sub units 0.00


Calculates the zeros of a function using Brent's method.
Controller: CodeCogs




doublebrentdouble(*f)(double)[function pointer]
doublex1 = -1E+7
doublex2 = 1E+7
doubleeps = 1E-10
intmaxit = 1000 )
Brent's method is a root finding algorithm which combines root bracketing, interval bisection and inverse quadratic interpolation. It is sometimes known as the van Wijngaarden-Deker-Brent method.

The main algorithm uses a Lagrange interpolating polynomial of degree 2. Brent (1973) claims that this method will always converge as long as the values of the function are computable within a given region containing a root. Given three points \inline x_1, \inline x_2 and \inline x_3, Brent's method fits x as a quadratic function of y, then uses the interpolation formula

Subsequent root estimates are obtained by setting \inline y = 0, giving where with

This algorithm finds the roots of the user-defined function f starting with an initial interval [x1, x2] and iterating the sequence above until either the accuracy eps is achieved or the maximum number of iterations maxit is exceeded.


  • Jean-Pierre Moreau's Home Page, http://perso.wanadoo.fr/jean-pierre.moreau/
  • MathWorld, http://mathworld.wolfram.com/BrentsMethod.html

Example 1

#include <codecogs/maths/rootfinding/brent.h>
#include <iostream>
#include <iomanip>
// user-defined function
double f(double x) {
    return (x + 1) * (x + 1) * (x + 1);
int main()  
  double x = Maths::RootFinding::brent(f, -3, 0);
  std::cout << "The calculated zero is X = " << std::setprecision(12) << x << std::endl;
  std::cout << "The associated ordinate value is Y = " << f(x) << std::endl;
  return 0;
The calculated zero is X = -0.999999878599
The associated ordinate value is Y = 1.78923630993e-021


fthe user-defined function
x1Default value = -1E+7
x2Default value = 1E+7
epsDefault value = 1E-10
maxitDefault value = 1000


Lucian Bentea (August 2005)
Source Code

Source code is available when you buy a Commercial licence.

Not a member, then Register with CodeCogs. Already a Member, then Login.