Quant Memo
Core

The Secant and Brent Methods

Two ways to find a function's root faster than bisection but without needing its derivative like Newton's method does — the secant method estimates the slope from two recent points, and Brent's method combines several tricks to get speed with a safety net.

Prerequisites: The Bisection Method, The Newton-Raphson Method

Newton's method finds roots fast by using a function's derivative to jump toward the crossing point, but many real pricing functions — an option's price as a function of implied volatility, computed through a numerical library — don't hand you a clean derivative formula. Bisection needs no derivative and never fails, but it's slow, cutting the search space only in half each step. The secant and Brent's methods sit between these two: they estimate the useful information a derivative would give, from data already available, without ever needing calculus.

An analogy: guessing a hidden slope from two shots

Imagine sighting an air rifle at a target you can't see, based only on where two previous shots landed relative to the bullseye line. If shot 1 landed too far left and shot 2 landed too far right, you can estimate — by drawing a straight line through where those two shots landed and seeing where that line crosses the target line — where a well-aimed shot number 3 should go. That's the secant method: instead of using true instantaneous slope (Newton), it uses the observed slope between the two most recent guesses to estimate where to aim next.

The math, one piece at a time

The secant method replaces Newton's derivative f(xn)f'(x_n) with a finite-difference approximation built from the two most recent iterates, xnx_n and xn1x_{n-1}:

xn+1=xnf(xn)xnxn1f(xn)f(xn1).x_{n+1} = x_n - f(x_n)\,\frac{x_n - x_{n-1}}{f(x_n) - f(x_{n-1})} .

In words: draw a straight line (a secant line) through the two most recent points (xn1,f(xn1))(x_{n-1}, f(x_{n-1})) and (xn,f(xn))(x_n, f(x_n)), and use where that line crosses zero as the next guess — exactly Newton's update, but with the true tangent slope f(xn)f'(x_n) swapped for the slope of the line connecting the last two points. It needs two starting points instead of one, and it converges slightly slower than Newton's method (superlinear, roughly 1.6 correct digits per step, versus Newton's doubling), but requires no derivative formula at all — only function evaluations.

The secant method shares Newton's weakness: it can overshoot, oscillate, or diverge on badly-behaved functions, because nothing forces it to stay inside a bracket known to contain the root. Brent's method fixes this by combining three strategies and automatically choosing among them each step: it tries fast interpolation (secant, or an even faster quadratic fit through three points called inverse quadratic interpolation) when it looks safe, but falls back to a guaranteed bisection step whenever the fast step would leave the current bracketing interval or fails to make sufficient progress. In plain English: Brent's method gets the speed of secant-like interpolation most of the time, while inheriting bisection's ironclad guarantee as a backstop, by checking after every step whether the fast method is behaving and demoting to the safe method the instant it isn't.

try interpolation step check: in bracket & converging? yes: take it (fast) no: bisect instead (safe) repeat until bracket shrinks below tolerance
Every iteration, Brent's method proposes a fast interpolated step and only accepts it if it stays inside the bracket and makes progress — otherwise it falls back to a guaranteed bisection step.

Worked example 1: secant method by hand

Solving for implied volatility with f(σ)=model pricemarket pricef(\sigma) = \text{model price} - \text{market price}, starting from σ0=0.10\sigma_0 = 0.10 giving f(σ0)=2.10f(\sigma_0) = -2.10 and σ1=0.50\sigma_1 = 0.50 giving f(σ1)=3.40f(\sigma_1) = 3.40. Secant step:

σ2=0.503.40×0.500.103.40(2.10)=0.503.40×0.405.500.500.247=0.253.\sigma_2 = 0.50 - 3.40 \times \frac{0.50 - 0.10}{3.40 - (-2.10)} = 0.50 - 3.40 \times \frac{0.40}{5.50} \approx 0.50 - 0.247 = 0.253 .

Compare this to bisection's first midpoint of exactly 0.30 — the secant estimate of 0.253 lands closer to the true root near 0.22-0.23 because it uses the shape of the two data points rather than blindly splitting the interval, typically saving several iterations once it settles in.

Worked example 2: when Brent's method saves a bad step

Suppose during a Brent's method run, the current bracket is [0.20,0.30][0.20, 0.30] and the fast interpolation step proposes σnext=0.65\sigma_{\text{next}} = 0.65 — outside the bracket, which can happen if the two interpolation points have nearly equal function values (a near-flat secant line, dividing by a tiny number). Brent's method detects 0.65[0.20,0.30]0.65 \notin [0.20, 0.30], discards the guess, and takes a bisection step to 0.250.25 instead, guaranteeing the bracket shrinks and the iteration cannot diverge — exactly the safety net a bare secant method lacks.

bisection ~16 iters secant ~7 iters Brent ~6 iters, safe
Illustrative iteration counts to reach the same precision: secant is faster than bisection when it behaves well, and Brent's method matches or beats secant's speed while adding bisection's guarantee against divergence.

What this means in practice

Brent's method is the default root-finder in most scientific computing libraries (scipy.optimize.brentq, for instance) precisely because it needs no derivative, converges fast on well-behaved functions, and cannot diverge — making it the standard choice for implied volatility solvers, yield curve bootstrapping, and any calibration routine where a pricing function is a black box you can only evaluate, not differentiate analytically.

The secant method approximates Newton's derivative using the slope between the two most recent points, trading a small amount of convergence speed for not needing a derivative formula at all; Brent's method wraps this idea in a safety net, automatically falling back to a guaranteed bisection step whenever the fast interpolation would leave the bracketing interval, giving both speed and reliability.

The classic mistake is using the plain secant method (or Newton's method) on a pricing function without any bracket or safety check, trusting it to always land closer to the root — but like Newton's method, an unguarded secant method can be thrown badly off course if the two starting points give a nearly-flat line (a tiny denominator in the update formula), producing a huge, meaningless jump. Brent's method exists specifically to fix this failure mode; if you use bare secant iteration in production code, add your own bracket check and fallback, or just use Brent's method instead.

Related concepts

Practice in interviews

Further reading

  • Press et al., Numerical Recipes, ch. 9
  • Brent, Algorithms for Minimization Without Derivatives, ch. 4
ShareTwitterLinkedIn