...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
The main reference for the elliptic integrals is:
M. Abramowitz and I. A. Stegun (Eds.) (1964) Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables, National Bureau of Standards Applied Mathematics Series, U.S. Government Printing Office, Washington, D.C.
Mathworld also contain a lot of useful background information:
As does Wikipedia Elliptic integral.
All variables are real numbers unless otherwise noted.
is called elliptic integral if R(t, s) is a rational function of t and s, and s2 is a cubic or quartic polynomial in t.
Elliptic integrals generally can not be expressed in terms of elementary functions. However, Legendre showed that all elliptic integrals can be reduced to the following three canonical forms:
Elliptic Integral of the First Kind (Legendre form)
Elliptic Integral of the Second Kind (Legendre form)
Elliptic Integral of the Third Kind (Legendre form)
φ is called the amplitude.
k is called the modulus.
α is called the modular angle.
n is called the characteristic.
Perhaps more than any other special functions the elliptic integrals are expressed in a variety of different ways. In particular, the final parameter k (the modulus) may be expressed using a modular angle α, or a parameter m. These are related by:
k = sinα
m = k2 = sin2α
So that the integral of the third kind (for example) may be expressed as either:
Π(n, φ, k)
Π(n, φ \ α)
Π(n, φ| m)
To further complicate matters, some texts refer to the complement of the parameter m, or 1 - m, where:
1 - m = 1 - k2 = cos2α
This implementation uses k throughout: this matches the requirements of the Technical Report on C++ Library Extensions. However, you should be extra careful when using these functions!
When φ = π / 2, the elliptic integrals are called complete.
Complete Elliptic Integral of the First Kind (Legendre form)
Complete Elliptic Integral of the Second Kind (Legendre form)
Complete Elliptic Integral of the Third Kind (Legendre form)
Legendre also defined a forth integral D(φ,k) which is a combination of the other three:
Like the other Legendre integrals this comes in both complete and incomplete forms.
Carlson [Carlson77] [Carlson78] gives an alternative definition of elliptic integral's canonical forms:
Carlson's Elliptic Integral of the First Kind
where x, y, z are nonnegative and at most one of them may be zero.
Carlson's Elliptic Integral of the Second Kind
where x, y are nonnegative, at most one of them may be zero, and z must be positive.
Carlson's Elliptic Integral of the Third Kind
where x, y, z are nonnegative, at most one of them may be zero, and p must be nonzero.
Carlson's Degenerate Elliptic Integral
where x is nonnegative and y is nonzero.
RC(x, y) = RF(x, y, y)
RD(x, y, z) = RJ(x, y, z, z)
Carlson's Symmetric Integral
Carlson proved in [Carlson78] that
The Legendre form and Carlson form of elliptic integrals are related by equations:
There are two functions related to the elliptic integrals which otherwise defy categorisation, these are the Jacobi Zeta function:
and the Heuman Lambda function:
Both of these functions are easily implemented in terms of Carlson's integrals, and are provided in this library as jacobi_zeta and heuman_lambda.
The conventional methods for computing elliptic integrals are Gauss and Landen transformations, which converge quadratically and work well for elliptic integrals of the first and second kinds. Unfortunately they suffer from loss of significant digits for the third kind. Carlson's algorithm [Carlson79] [Carlson78], by contrast, provides a unified method for all three kinds of elliptic integrals with satisfactory precisions.
Special mention goes to:
A. M. Legendre, Traitd des Fonctions Elliptiques et des Integrales Euleriennes, Vol. 1. Paris (1825).
However the main references are:
The following references, while not directly relevent to our implementation, may also be of interest: