Elliptic integrals and functions. More...
#include <EllipticFunction.hpp>
| Public Member Functions | |
| Constructor | |
| EllipticFunction (real k2=0, real alpha2=0) | |
| EllipticFunction (real k2, real alpha2, real kp2, real alphap2) | |
| void | Reset (real k2=0, real alpha2=0) | 
| void | Reset (real k2, real alpha2, real kp2, real alphap2) | 
| Inspector functions. | |
| Math::real | k2 () const | 
| Math::real | kp2 () const | 
| Math::real | alpha2 () const | 
| Math::real | alphap2 () const | 
| Complete elliptic integrals. | |
| Math::real | K () const | 
| Math::real | E () const | 
| Math::real | D () const | 
| Math::real | KE () const | 
| Math::real | Pi () const | 
| Math::real | G () const | 
| Math::real | H () const | 
| Incomplete elliptic integrals. | |
| Math::real | F (real phi) const | 
| Math::real | E (real phi) const | 
| Math::real | Ed (real ang) const | 
| Math::real | Einv (real x) const | 
| Math::real | Pi (real phi) const | 
| Math::real | D (real phi) const | 
| Math::real | G (real phi) const | 
| Math::real | H (real phi) const | 
| Incomplete integrals in terms of Jacobi elliptic functions. | |
| Math::real | F (real sn, real cn, real dn) const | 
| Math::real | E (real sn, real cn, real dn) const | 
| Math::real | Pi (real sn, real cn, real dn) const | 
| Math::real | D (real sn, real cn, real dn) const | 
| Math::real | G (real sn, real cn, real dn) const | 
| Math::real | H (real sn, real cn, real dn) const | 
| Periodic versions of incomplete elliptic integrals. | |
| Math::real | deltaF (real sn, real cn, real dn) const | 
| Math::real | deltaE (real sn, real cn, real dn) const | 
| Math::real | deltaEinv (real stau, real ctau) const | 
| Math::real | deltaPi (real sn, real cn, real dn) const | 
| Math::real | deltaD (real sn, real cn, real dn) const | 
| Math::real | deltaG (real sn, real cn, real dn) const | 
| Math::real | deltaH (real sn, real cn, real dn) const | 
| Elliptic functions. | |
| void | sncndn (real x, real &sn, real &cn, real &dn) const | 
| Math::real | Delta (real sn, real cn) const | 
| Static Public Member Functions | |
| Symmetric elliptic integrals. | |
| static real | RF (real x, real y, real z) | 
| static real | RF (real x, real y) | 
| static real | RC (real x, real y) | 
| static real | RG (real x, real y, real z) | 
| static real | RG (real x, real y) | 
| static real | RJ (real x, real y, real z, real p) | 
| static real | RD (real x, real y, real z) | 
| Private Types | |
| enum | { num_ = 13 } | 
| typedef Math::real | real | 
| Private Attributes | |
| real | _alpha2 | 
| real | _alphap2 | 
| real | _Dc | 
| real | _Ec | 
| real | _eps | 
| real | _Gc | 
| real | _Hc | 
| real | _k2 | 
| real | _Kc | 
| real | _kp2 | 
| real | _Pic | 
Elliptic integrals and functions.
This provides the elliptic functions and integrals needed for Ellipsoid, GeodesicExact, and TransverseMercatorExact. Two categories of function are provided:
In the latter case, an object is constructed giving the modulus k (and optionally the parameter α2). The modulus is always passed as its square k2 which allows k to be pure imaginary (k2 < 0). (Confusingly, Abramowitz and Stegun call m = k2 the "parameter" and n = α2 the "characteristic".)
In geodesic applications, it is convenient to separate the incomplete integrals into secular and periodic components, e.g.,
![\[ E(\phi, k) = (2 E(k) / \pi) [ \phi + \delta E(\phi, k) ] \]](form_300.png) 
where δE(φ, k) is an odd periodic function with period π.
The computation of the elliptic integrals uses the algorithms given in
with the additional optimizations given in http://dlmf.nist.gov/19.36.i. The computation of the Jacobi elliptic functions uses the algorithm given in
The notation follows http://dlmf.nist.gov/19 and http://dlmf.nist.gov/22
Example of use:
Definition at line 62 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 64 of file EllipticFunction.hpp.
| 
 | private | 
| Enumerator | |
|---|---|
| num_ | |
Definition at line 66 of file EllipticFunction.hpp.
Constructor specifying the modulus and parameter.
| [in] | k2 | the square of the modulus k2. k2 must lie in (−∞, 1]. | 
| [in] | alpha2 | the parameter α2. α2 must lie in (−∞, 1]. | 
| GeographicErr | if k2 or alpha2 is out of its legal range. | 
If only elliptic integrals of the first and second kinds are needed, then set α2 = 0 (the default value); in this case, we have Π(φ, 0, k) = F(φ, k), G(φ, 0, k) = E(φ, k), and H(φ, 0, k) = F(φ, k) - D(φ, k).
Definition at line 89 of file EllipticFunction.hpp.
| 
 | inline | 
Constructor specifying the modulus and parameter and their complements.
| [in] | k2 | the square of the modulus k2. k2 must lie in (−∞, 1]. | 
| [in] | alpha2 | the parameter α2. α2 must lie in (−∞, 1]. | 
| [in] | kp2 | the complementary modulus squared k'2 = 1 − k2. This must lie in [0, ∞). | 
| [in] | alphap2 | the complementary parameter α'2 = 1 − α2. This must lie in [0, ∞). | 
| GeographicErr | if k2, alpha2, kp2, or alphap2 is out of its legal range. | 
The arguments must satisfy k2 + kp2 = 1 and alpha2 + alphap2 = 1. (No checking is done that these conditions are met.) This constructor is provided to enable accuracy to be maintained, e.g., when k is very close to unity.
Definition at line 111 of file EllipticFunction.hpp.
| 
 | inline | 
Definition at line 168 of file EllipticFunction.hpp.
| 
 | inline | 
Definition at line 174 of file EllipticFunction.hpp.
| 
 | inline | 
Jahnke's complete integral.
D(k) is defined in http://dlmf.nist.gov/19.2.E6
![\[ D(k) = \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi. \]](form_279.png) 
Definition at line 215 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::D | ( | real | phi | ) | const | 
Jahnke's incomplete elliptic integral.
| [in] | phi | 
D(φ, k) is defined in http://dlmf.nist.gov/19.2.E4
![\[ D(\phi, k) = \int_0^\phi \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta. \]](form_286.png) 
Definition at line 520 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::D | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
Jahnke's incomplete elliptic integral in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 404 of file src/EllipticFunction.cpp.
| 
 | inline | 
The Δ amplitude function.
| [in] | sn | sinφ. | 
| [in] | cn | cosφ. | 
Definition at line 584 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::deltaD | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The periodic Jahnke's incomplete elliptic integral.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 476 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaE | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The periodic incomplete integral of the second kind.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 464 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaEinv | ( | real | stau, | 
| real | ctau | ||
| ) | const | 
The periodic inverse of the incomplete integral of the second kind.
| [in] | stau | = sinτ. | 
| [in] | ctau | = sinτ. | 
Definition at line 563 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaF | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The periodic incomplete integral of the first kind.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 458 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaG | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
Legendre's periodic geodesic longitude integral.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 482 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaH | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
Cayley's periodic geodesic longitude difference integral.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 488 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::deltaPi | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The periodic incomplete integral of the third kind.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 470 of file src/EllipticFunction.cpp.
| 
 | inline | 
The complete integral of the second kind.
E(k) is defined in http://dlmf.nist.gov/19.2.E5
![\[ E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi. \]](form_278.png) 
Definition at line 202 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::E | ( | real | phi | ) | const | 
The incomplete integral of the second kind.
| [in] | phi | 
E(φ, k) is defined in http://dlmf.nist.gov/19.2.E5
![\[ E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta. \]](form_284.png) 
Definition at line 500 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::E | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The incomplete integral of the second kind in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 381 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::Ed | ( | real | ang | ) | const | 
The incomplete integral of the second kind with the argument given in degrees.
| [in] | ang | in degrees. | 
Definition at line 506 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::Einv | ( | real | x | ) | const | 
The inverse of the incomplete integral of the second kind.
| [in] | x | 
Definition at line 538 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::F | ( | real | phi | ) | const | 
The incomplete integral of the first kind.
| [in] | phi | 
F(φ, k) is defined in http://dlmf.nist.gov/19.2.E4
![\[ F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta. \]](form_283.png) 
Definition at line 494 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::F | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The incomplete integral of the first kind in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 370 of file src/EllipticFunction.cpp.
| 
 | inline | 
Legendre's complete geodesic longitude integral.
G(α2, k) is given by
![\[ G(\alpha^2, k) = \int_0^{\pi/2} \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi. \]](form_281.png) 
Definition at line 250 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::G | ( | real | phi | ) | const | 
Legendre's geodesic longitude integral.
| [in] | phi | 
G(φ, α2, k) is defined by
![\[ \begin{align} G(\phi, \alpha^2, k) &= \frac{k^2}{\alpha^2} F(\phi, k) + \biggl(1 - \frac{k^2}{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ &= \int_0^\phi \frac{\sqrt{1-k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta. \end{align} \]](form_303.png) 
Legendre expresses the longitude of a point on the geodesic in terms of this combination of elliptic integrals in Exercices de Calcul Intégral, Vol. 1 (1811), p. 181, https://books.google.com/books?id=riIOAAAAQAAJ&pg=PA181.
See geodellip for the expression for the longitude in terms of this function.
Definition at line 526 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::G | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
Legendre's geodesic longitude integral in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 431 of file src/EllipticFunction.cpp.
| 
 | inline | 
Cayley's complete geodesic longitude difference integral.
H(α2, k) is given by
![\[ H(\alpha^2, k) = \int_0^{\pi/2} \frac{\cos^2\phi}{(1-\alpha^2\sin^2\phi)\sqrt{1-k^2\sin^2\phi}} \,d\phi. \]](form_282.png) 
Definition at line 264 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::H | ( | real | phi | ) | const | 
Cayley's geodesic longitude difference integral.
| [in] | phi | 
H(φ, α2, k) is defined by
![\[ \begin{align} H(\phi, \alpha^2, k) &= \frac1{\alpha^2} F(\phi, k) + \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ &= \int_0^\phi \frac{\cos^2\theta} {(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}} \,d\theta. \end{align} \]](form_304.png) 
Cayley expresses the longitude difference of a point on the geodesic in terms of this combination of elliptic integrals in Phil. Mag. 40 (1870), p. 333, https://books.google.com/books?id=Zk0wAAAAIAAJ&pg=PA333.
See geodellip for the expression for the longitude in terms of this function.
Definition at line 532 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::H | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
Cayley's geodesic longitude difference integral in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 444 of file src/EllipticFunction.cpp.
| 
 | inline | 
The complete integral of the first kind.
K(k) is defined in http://dlmf.nist.gov/19.2.E4
![\[ K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi. \]](form_277.png) 
Definition at line 190 of file EllipticFunction.hpp.
| 
 | inline | 
Definition at line 157 of file EllipticFunction.hpp.
| 
 | inline | 
The difference between the complete integrals of the first and second kinds.
Definition at line 223 of file EllipticFunction.hpp.
| 
 | inline | 
Definition at line 163 of file EllipticFunction.hpp.
| 
 | inline | 
The complete integral of the third kind.
Π(α2, k) is defined in http://dlmf.nist.gov/19.2.E7
![\[ \Pi(\alpha^2, k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi)}\,d\phi. \]](form_301.png) 
Definition at line 237 of file EllipticFunction.hpp.
| Math::real GeographicLib::EllipticFunction::Pi | ( | real | phi | ) | const | 
The incomplete integral of the third kind.
| [in] | phi | 
Π(φ, α2, k) is defined in http://dlmf.nist.gov/19.2.E7
![\[ \Pi(\phi, \alpha^2, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta)}\,d\theta. \]](form_302.png) 
Definition at line 514 of file src/EllipticFunction.cpp.
| Math::real GeographicLib::EllipticFunction::Pi | ( | real | sn, | 
| real | cn, | ||
| real | dn | ||
| ) | const | 
The incomplete integral of the third kind in terms of Jacobi elliptic functions.
| [in] | sn | = sinφ. | 
| [in] | cn | = cosφ. | 
| [in] | dn | = sqrt(1 − k2 sin2φ). | 
Definition at line 416 of file src/EllipticFunction.cpp.
| 
 | static | 
Degenerate symmetric integral of the first kind RC.
| [in] | x | |
| [in] | y | 
RC is defined in http://dlmf.nist.gov/19.2.E17
![\[ R_C(x, y) = \frac12 \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt \]](form_290.png) 
Definition at line 81 of file src/EllipticFunction.cpp.
| 
 | static | 
Degenerate symmetric integral of the third kind RD.
| [in] | x | |
| [in] | y | |
| [in] | z | 
RD is defined in http://dlmf.nist.gov/19.16.E5
![\[ R_D(x, y, z) = \frac32 \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt \]](form_293.png) 
Definition at line 180 of file src/EllipticFunction.cpp.
Reset the modulus and parameter supplying also their complements.
| [in] | k2 | the square of the modulus k2. k2 must lie in (−∞, 1]. | 
| [in] | alpha2 | the parameter α2. α2 must lie in (−∞, 1]. | 
| [in] | kp2 | the complementary modulus squared k'2 = 1 − k2. This must lie in [0, ∞). | 
| [in] | alphap2 | the complementary parameter α'2 = 1 − α2. This must lie in [0, ∞). | 
| GeographicErr | if k2, alpha2, kp2, or alphap2 is out of its legal range. | 
The arguments must satisfy k2 + kp2 = 1 and alpha2 + alphap2 = 1. (No checking is done that these conditions are met.) This constructor is provided to enable accuracy to be maintained, e.g., when is very small.
Definition at line 224 of file src/EllipticFunction.cpp.
Reset the modulus and parameter.
| [in] | k2 | the new value of square of the modulus k2 which must lie in (−∞, ]. done.) | 
| [in] | alpha2 | the new value of parameter α2. α2 must lie in (−∞, 1]. | 
| GeographicErr | if k2 or alpha2 is out of its legal range. | 
Definition at line 125 of file EllipticFunction.hpp.
| 
 | static | 
Complete symmetric integral of the first kind, RF with one argument zero.
| [in] | x | |
| [in] | y | 
Definition at line 66 of file src/EllipticFunction.cpp.
| 
 | static | 
Symmetric integral of the first kind RF.
| [in] | x | |
| [in] | y | |
| [in] | z | 
RF is defined in http://dlmf.nist.gov/19.16.E1
![\[ R_F(x, y, z) = \frac12 \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt \]](form_289.png) 
If one of the arguments is zero, it is more efficient to call the two-argument version of this function with the non-zero arguments.
Definition at line 29 of file src/EllipticFunction.cpp.
| 
 | static | 
Complete symmetric integral of the second kind, RG with one argument zero.
| [in] | x | |
| [in] | y | 
Definition at line 104 of file src/EllipticFunction.cpp.
| 
 | static | 
Symmetric integral of the second kind RG.
| [in] | x | |
| [in] | y | |
| [in] | z | 
RG is defined in Carlson, eq 1.5
![\[ R_G(x, y, z) = \frac14 \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} \biggl( \frac x{t + x} + \frac y{t + y} + \frac z{t + z} \biggr)t\,dt \]](form_291.png) 
See also http://dlmf.nist.gov/19.16.E3. If one of the arguments is zero, it is more efficient to call the two-argument version of this function with the non-zero arguments.
Definition at line 96 of file src/EllipticFunction.cpp.
| 
 | static | 
Symmetric integral of the third kind RJ.
| [in] | x | |
| [in] | y | |
| [in] | z | |
| [in] | p | 
RJ is defined in http://dlmf.nist.gov/19.16.E2
![\[ R_J(x, y, z, p) = \frac32 \int_0^\infty [(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt \]](form_305.png) 
Definition at line 127 of file src/EllipticFunction.cpp.
The Jacobi elliptic functions.
| [in] | x | the argument. | 
| [out] | sn | sn(x, k). | 
| [out] | cn | cn(x, k). | 
| [out] | dn | dn(x, k). | 
Definition at line 315 of file src/EllipticFunction.cpp.
| 
 | private | 
Definition at line 67 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 67 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 67 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 67 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 67 of file EllipticFunction.hpp.
| 
 | private | 
Definition at line 68 of file EllipticFunction.hpp.