In numerical analysis, Aitken's delta-squared process or Aitken extrapolation is a series acceleration method used for accelerating the rate of convergence of a sequence. It is named after Alexander Aitken, who introduced this method in 1926.[1] It is most useful for accelerating the convergence of a sequence that is converging linearly. A precursor form was known to Seki Kōwa (1642 – 1708) and applied to the rectification of the circle, i.e., to the calculation of π.
Given a sequence
X={(xn)}
n=0,1,2,3,\ldots,
which can also be written as
with and Both are the same sequence algebraically but the latter has improved numerical stability in computational implementation.
is ill-defined if the sequence contains a zero element, which occurs if the sequence of forward differences, has any repeated term. From a theoretical point of view, if that occurs only for a finite number of indices, one could apply the Aitken process to only the part of the sequence
X
n>n0
n0
Aitken's delta-squared process is an acceleration of convergence method and a particular case of a nonlinear sequence transformation.
A sequence that converges to a limiting value is said to converge linearly, or more technically Q-linearly, if there is some number for which
This means that asymptotically, the distance between the sequence and its limit shrinks by nearly the same proportion,
\mu,
\mun=\exp(nln\mu).
Aitken's method will accelerate the convergence of a sequence
X
A[X]=(an),
A
C
C=(c)
n.
A[X]
\Delta.
The new process does not in general converge quadratically, but for an iterated function sequence satisfying
xn+1=f(xn)
f
Empirically, the A-operation eliminates the "most important error term". One can check this by considering a sequence of the form
n+b | |
x | |
n=\ell+a |
n
0<b<a<1
A[X]
bn
Geometrically, the graph of an exponential function
f(t)
f(n)=xn
f(n+1)=xn+1
f(n+2)=xn+2
| |||||||||||||
xn-2xn+1+xn+2 |
xn-2xn+1+xn+2 ≠ 0
One can also show that if a sequence
X
\ell
A[X]
In practice,
A[X]
X
A[X]
X
Example 1: The value of
\sqrt{2} ≈ 1.4142136
x0
x0=1:
0 | 1 | 1.4285714 | |
1 | 1.5 | 1.4141414 | |
2 | 1.4166667 | 1.4142136 | |
3 | 1.4142157 | -- | |
4 | 1.4142136 | -- |
It is worth noting here that Aitken's method does not save the cost of calculating two iterations here; computation of the first three values required the first five values. Also, the second value is less accurate than the 4th value, which is not surprising due to the fact that Aitken's process is best suited for sequences that converge linearly, rather than quadratically, and Heron's method for calculating square roots converges quadratically.
Example 2: The value of
\pi | |
4 |
Series Terms | = Partial Sums | |||
---|---|---|---|---|
0 | 1 | 1 | 0.79166667 | |
1 | -0.33333333 | 0.66666667 | 0.78333333 | |
2 | 0.2 | 0.86666667 | 0.78630952 | |
3 | -0.14285714 | 0.72380952 | 0.78492063 | |
4 | 0.11111111 | 0.83492063 | 0.78567821 | |
5 | -9.0909091×10-2 | 0.74401154 | 0.78522034 | |
6 | 7.6923077×10-2 | 0.82093462 | 0.78551795 | |
7 | -6.6666667×10-2 | 0.75426795 | -- | |
8 | 5.8823529×10-2 | 0.81309148 | -- |
In this example, Aitken's method is applied to a sublinearly converging series and accelerates convergence considerably. The convergence is still sublinear, but much faster than the original convergence: the first value, whose computation required the first three values, is closer to the limit than the eighth value.
The following is an example of using the Aitken extrapolation to help find the limit of the sequence
xn+1=f(xn)
x0,
f
\alpha=f(\alpha)
x0=1,
\alpha:=\sqrt{2}
This pseudo code also computes the Aitken approximation to
f\prime(\alpha)
aitkenX
. During the computation of the extrapolate, it is important to check if the denominator becomes too small, which could happen if we already have a large amount of accuracy; without this check, a large amount of error could be introduced by the division. This small number will be denoted by epsilon
. Because the binary representation of the fixed point could be infinite (or at least too large to fit in the available memory), the calculation will stop once the approximation is within tolerance
of the true value.maxIterations = 20 %Do not allow the iterations to continue indefinitelyhaveWeFoundSolution = false %Were we able to find the solution to within the desired tolerance? not yet
for i = 1 : maxIterations x1 = f(x0) x2 = f(x1)
if (x1 ~= x0) lambda = absoluteValue((x2 - x1)/(x1 - x0)) %OPTIONAL: Computes an approximation of |f'(fixedPoint)|, which is denoted by lambda end
denominator = (x2 - x1) - (x1 - x0);
if (absoluteValue(denominator) < epsilon) %To avoid greatly increasing error, do not divide by too small of a number print('WARNING: denominator is too small') break %Leave the loop end
aitkenX = x2 - ((x2 - x1)^2)/denominator if (absoluteValue(aitkenX - x2) < tolerance) %If the value is within tolerance print("The fixed point is ", aitkenX)) %Display the result of the Aitken extrapolation haveWeFoundSolution = true break %Done, so leave the loop end
x0 = aitkenX %Update x0 to start again end
if (haveWeFoundSolution