scipy.special.elliprg — SciPy v1.15.2 Manual (original) (raw)

scipy.special.elliprg(x, y, z, out=None) = <ufunc 'elliprg'>#

Completely-symmetric elliptic integral of the second kind.

The function RG is defined as [1]

\[R_{\mathrm{G}}(x, y, z) = \frac{1}{4} \int_0^{+\infty} [(t + x) (t + y) (t + z)]^{-1/2} \left(\frac{x}{t + x} + \frac{y}{t + y} + \frac{z}{t + z}\right) t dt\]

Parameters:

x, y, zarray_like

Real or complex input parameters. x, y, or z can be any number in the complex plane cut along the negative real axis.

outndarray, optional

Optional output array for the function values

Returns:

Rscalar or ndarray

Value of the integral. If all of x, y, and z are real, the return value is real. Otherwise, the return value is complex.

See also

elliprc

Degenerate symmetric integral.

elliprd

Symmetric elliptic integral of the second kind.

elliprf

Completely-symmetric elliptic integral of the first kind.

elliprj

Symmetric elliptic integral of the third kind.

Notes

The implementation uses the relation [1]

\[2 R_{\mathrm{G}}(x, y, z) = z R_{\mathrm{F}}(x, y, z) - \frac{1}{3} (x - z) (y - z) R_{\mathrm{D}}(x, y, z) + \sqrt{\frac{x y}{z}}\]

and the symmetry of x, y, z when at least one non-zero parameter can be chosen as the pivot. When one of the arguments is close to zero, the AGM method is applied instead. Other special cases are computed following Ref.[2]

Added in version 1.8.0.

References

Examples

Basic homogeneity property:

import numpy as np from scipy.special import elliprg

x = 1.2 + 3.4j y = 5. z = 6. scale = 0.3 + 0.4j elliprg(scalex, scaley, scale*z) (1.195936862005246+0.8470988320464167j)

elliprg(x, y, z)*np.sqrt(scale) (1.195936862005246+0.8470988320464165j)

Simplifications:

elliprg(0, y, y) 1.756203682760182

0.25np.pinp.sqrt(y) 1.7562036827601817

elliprg(0, 0, z) 1.224744871391589

0.5*np.sqrt(z) 1.224744871391589

The surface area of a triaxial ellipsoid with semiaxes a, b, andc is given by

\[S = 4 \pi a b c R_{\mathrm{G}}(1 / a^2, 1 / b^2, 1 / c^2).\]

def ellipsoid_area(a, b, c): ... r = 4.0 * np.pi * a * b * c ... return r * elliprg(1.0 / (a * a), 1.0 / (b * b), 1.0 / (c * c)) print(ellipsoid_area(1, 3, 5)) 108.62688289491807