Real Derivatives from Imaginary Increments

The solution of many problems requires us to compute derivatives. Complex step differentiation is a method of computing the first derivative of a real function, which circumvents the problem of roundoff error found with typical finite difference approximations.

Rounding error and formula error as functions of step size {h} [Image from Wikimedia Commons].

For finite difference approximations, the choice of step size {h} is crucial: if {h} is too large, the estimate of the derivative is poor, due to truncation error; if {h} is too small, subtraction will cause large rounding errors. The finite difference formulae are ill-conditioned and, if {h} is very small, they produce zero values.

Where it can be applied, complex step differentiation provides a stable and accurate method for computing {f^\prime(x)}.

Finite differences and derivatives

We define the derivative of a function {f(x)} as the limit

\displaystyle f^\prime(x) = \lim_{h\rightarrow 0}\left[\frac{f(x+h)-f(x)}{h}\right]

For finite {h}, we can use Taylor’s theorem to estimate the accuracy:

\displaystyle f(x+h) = f(x) + h f^\prime(x) + O(h^2)

which means that

\displaystyle f^\prime(x) = \left[\frac{f(x+h)-f(x)}{h}\right] + O(h) \,. \ \ \ \ \ \ \ \ \ \ \ (1)

By making {h} small, we can get a precise estimate of the derivative. But there is a problem: the limit on the precision of numbers in the computer means that, as {h} becomes smaller, the difference {f(x+h)-f(x)} looses precision and, ultimately, {f(x+h)} becomes indistinguishable from {f(x)}, giving a zero value for the approximation.

We may allow the step to be complex: taking a pure imaginary increment, we have

\displaystyle f(x+ih) = f(x) + ih f^\prime(x) - \textstyle{\frac{1}{2}}h^2 f^{\prime\prime}(x) + O(h^3)

Taking the imaginary part and dividing by {h} gives us

\displaystyle f^\prime(x) = \Im\left\{\frac{f(x+ih)}{h}\right\} + O(h^2) \ \ \ \ \ \ \ \ (2)

This yields a second order accuracy. Moreover, since no difference between function values is required, it is free from the roundoff errors that contaminate (1) for small {h}.

A Numerical Example

Log error of approximations to the derivative at {x=1} of {f(x)=x^3}. Dashed line: finite difference (1); Solid line: Complex step approximation (2).

In the figure, we show the logarithm of the error of approximations to the derivative, at {x=1}, of {f(x)=x^3}. The dashed red line is for the first-order finite difference approximation (1). For {h>10^{-8}} the error decreases linearly with {h} consistent with the first-order accuracy of (1). For {h<10^{-8}} the error actually gets larger as {h} decreases. This is due to roundoff errors in computing the difference {(f(x+h)-f(x))}.

The solid blue line in the figure is for the second-order complex step approximation (2). The error has a slope of 2, consistent with the second-order accuracy of (2). It decreases rapidly as the step size {h} is decreased. Since there is no difference calculation in (2), roundoff error is not a problem. For {h<10^{-8}}, the error is obliterated by rounding and the value of {f^\prime(x)} is exact. Rounding actually leads to an improvement in this case! For double precision floating point computing, with about 16 digits accuracy, we may choose {h=10^{-8}}, so that error is at the level of machine precision.

Cauchy-Riemann Equations

The magical formula (2) can be understood in terms of the theory of holomorphic functions. We can regard {f(x)} as the real part of a function {F(z)} of a complex variable {z = x+iy}:

\displaystyle F(z) = f(x+iy) + i g(x+iy)

We will be concerned with functions that are real for real {x}:

\displaystyle F(z) = f(x) \quad \mbox{for} \quad z=x\in\mathbb{R} \,.

If {F(z)} is holomorphic, the real and imaginary parts are related by the Cauchy-Riemann equations

\displaystyle \frac{\partial f}{\partial x} = \frac{\partial g}{\partial y} \,, \qquad \frac{\partial f}{\partial y} = -\frac{\partial g}{\partial x} \,.

Since {F(z)} is real-valued on the real line, {g(x)=0} and {\partial g/\partial x = 0}. Therefore, {\partial f/\partial y = 0} on the real line, and also {F(z)=f(x)} so that {\partial F/\partial x=\partial f/\partial x} for real {z}. Thus,

\displaystyle \frac{\partial f}{\partial x} = \frac{\partial g}{\partial y} = \Im\left\{\frac{\partial F}{\partial y}\right\} \quad\mbox{on the real line.}

We approximate {\partial F/\partial y} by taking a finite step {ih}, noting that {\Im\{F(x)\}=0}, whence

\displaystyle \frac{\partial F}{\partial x} \approx \Im\left\{\frac{F(x+ih)}{h}\right\} \,,

which is consistent with (2).


In cases where we can easily calculate {F(z)} but have no simple expression for {F^\prime(z)}, the complex step approximation gives us an accurate and numerically robust means of computing the derivative. It has been applied with great effect in a wide variety of circumstances.


{\bullet} Higham, N. J., 2018: Differentiation With(out) a Difference. SIAM News, 51 (5), p. 2. URL.

{\bullet} Squire, William and George Trapp, 1998: Using complex variables to estimate derivatives of real functions, SIAM Review 40, 110–112.

{\bullet} Wikipedia article: Numerical differentiation.

* * * * *

That’s Maths II: A Ton of Wonders

by Peter Lynch now available.
Full details and links to suppliers at

>>  Review in The Irish Times  <<

* * * * *

Last 50 Posts