Special Functions


  1. Usage:

  2. GSL::Sf::Result class

  3. Modes

  4. Airy functions

  5. Bessel functins

  6. Clausen functins

  7. Coulomb functins

  8. Coupling coefficients

  9. Dawson coefficients

  10. Debye coefficients

  11. Dilogarithm

  12. Elementary operations

  13. Elliptic integrals

  14. Elliptic functions

  15. Error functions

  16. Exponential functions

  17. Exponential integrals

  18. Fermi-Dirac function

  19. Gamma function

  20. Gegenbauer functions

  21. Hypergeometric functions

  22. Laguerre functions

  23. Lambert W functions

  24. Legendre functions and spherical harmonics

  25. Logarithm and related functions

  26. Mathieu functions

  27. Power function

  28. Psi (digamma) function

  29. Synchrotron functions

  30. Transport functions

  31. Trigonometric functions

  32. Zeta functions


Ruby/GSL provides all the (documented) GSL special functions as module functions under the GSL::Sf module. The prefix gsl_sf_ in C functions is replaced by the module identifier GSL::Sf::. For example, the regular Bessel function of 0-th order is evaluated as

y = GSL::Sf::bessel_J0(x)


include GSL::Sf
y = bessel_J0(x)

where the argument x can be a Numeric, GSL::Vector, GSL::Matrix, or an NArray object.


>> require("gsl")
=> true
>> x = 1.0
=> 1.0
>> Sf::bessel_J0(x)
=> 0.765197686557967
>> x = Vector[1, 2, 3, 4]
=> GSL::Vector
[ 1.000e+00 2.000e+00 3.000e+00 4.000e+00 ]
>> Sf::bessel_J0(x)
=> GSL::Vector
[ 7.652e-01 2.239e-01 -2.601e-01 -3.971e-01 ]
>> x = Matrix[1..4, 2, 2]
=> GSL::Matrix
[  1.000e+00  2.000e+00
   3.000e+00  4.000e+00 ]
>> Sf::bessel_J0(x)
=> GSL::Matrix
[  7.652e-01  2.239e-01
  -2.601e-01 -3.971e-01 ]
>> x = NArray[1.0, 2, 3, 4]
=> NArray.float(4):
[ 1.0, 2.0, 3.0, 4.0 ]
>> Sf::bessel_J0(x)
=> NArray.float(4):
[ 0.765198, 0.223891, -0.260052, -0.39715 ]

Result class

The Ruby methods as wrappers of GSL functions with the suffix “_e” return GSL::Sf::Result objects which contain the function values as well as error information.

Result instance methods


The goal of the library is to achieve double precision accuracy wherever possible. However the cost of evaluating some special functions to double precision can be significant, particularly where very high order terms are required. In these cases a mode argument allows the accuracy of the function to be reduced in order to improve performance. The following precision levels are available for the mode argument, given by Fixnum constants under the GSL module,

The approximate mode provides the fastest evaluation at the lowest accuracy.

Airy Functions and Derivatives

Derivatives of Airy Functions

Zeros of Airy Functions

Zeros of Derivatives of Airy Functions

Bessel Functions

Regular Cylindrical Bessel Functions

Irregular Cylindrical Bessel Functions

Regular Modified Cylindrical Bessel Functions

Irregular Modified Cylindrical Bessel Functions

Regular Spherical Bessel Functions

Irregular Spherical Bessel Functions

Regular Modified Spherical Bessel Functions

Irregular Modified Spherical Bessel Functions

Regular Bessel Function - Fractional Order

Irregular Bessel Functions - Fractional Order

Regular Modified Bessel Functions - Fractional Order

Irregular Modified Bessel Functions - Fractional Order

Zeros of Regular Bessel Functions

Clausen Functions

Coulomb Functions

Coulomb Wave Functions

Coulomb Wave Function Normalization Constant

Coupling Coefficients

The Wigner 3-j, 6-j and 9-j symbols give the coupling coefficients for combined angular momentum vectors. Since the arguments of the standard coupling coefficient functions are integer or half-integer, the arguments of the following functions are, by convention, integers equal to twice the actual spin value. For information on the 3-j coefficients see Abramowitz & Stegun, Section 27.9.

Dawson Function

The Dawson integral is defined by exp(-x^2) int_0^x dt exp(t^2). A table of Dawson's integral can be found in Abramowitz & Stegun, Table 7.5.

Debye Functions

The Debye functions are defined by the integral D_n(x) = n/x^n int_0^x dt (t^n/(e^t - 1)). For further information see Abramowitz & Stegun, Section 27.1.


Real Argument

Complex Argument

Elementary Operations

The following methods allow for the propagation of errors when combining quantities by multiplication.

Elliptic Integrals

Legendre Form of Complete Elliptic Integrals

Legendre Form of Incomplete Elliptic Integrals

Carlson Forms

Elliptic Functions (Jacobi)

Error Functions

Probability functions

Exponential Functions

Relative Exponential Functions

Exponentiation With Error Estimate

Exponential Integrals

Exponential Integral


Hyperbolic Integrals


Trigonometric Integrals

Arctangent Integral

Fermi-Dirac Functions

Complete Fermi-Dirac Integrals

The complete Fermi-Dirac integral F_j(x) is given by,

F_j(x)   := (1/r Gamma(j+1)) int_0^infty dt (t^j / (exp(t-x) + 1))

Incomplete Fermi-Dirac Integrals

Gamma Function

The Gamma function is defined by the following integral,

Gamma(x) = int_0^infty dt  t^{x-1} exp(-t)

Further information on the Gamma function can be found in Abramowitz & Stegun, Chapter 6.

Gegenbauer Functions

Hypergeometric Functions

Laguerre Functions

The Laguerre polynomials are defined in terms of confluent hypergeometric functions as L^a_n(x) = ((a+1)_n / n!) 1F1(-n,a+1,x).

Lambert W Functions

Lambert's W functions, W(x), are defined to be solutions of the equation W(x) exp(W(x)) = x. This function has multiple branches for x < 0; however, it has only two real-valued branches. We define W_0(x) to be the principal branch, where W > -1 for x < 0, and W_{-1}(x) to be the other real branch, where W < -1 for x < 0.

Legendre Functions and Spherical Harmonics

Legendre Polynomials

Associated Legendre Polynomials and Spherical Harmonics

The following functions compute the associated Legendre Polynomials P_l^m(x). Note that this function grows combinatorially with l and can overflow for l larger than about 150. There is no trouble for small m, but overflow occurs when m and l are both large. Rather than allow overflows, these functions refuse to calculate P_l^m(x) and return GSL::EOVRFLW when they can sense that l and m are too big. If you want to calculate a spherical harmonic, then do not use these functions. Instead use GSL::Sf::legendre_sphPlm() below, which uses a similar recursion, but with the normalized functions.

Conical Functions

The Conical Functions P^mu_{-(1/2)+i lambda}(x), Q^mu_{-(1/2)+i lambda} are described in Abramowitz & Stegun, Section 8.12.

Radial Functions for Hyperbolic Space

The following spherical functions are specializations of Legendre functions which give the regular eigenfunctions of the Laplacian on a 3-dimensional hyperbolic space H3d. Of particular interest is the flat limit, lambda to infty, eta to 0, lambda eta fixed.

Logarithm and Related Functions

Mathieu functions

The methods described in this section compute the angular and radial Mathieu functions, and their characteristic values. Mathieu functions are the solutions of the following two differential equations: The angular Mathieu functions ce_r(x,q), se_r(x,q) are the even and odd periodic solutions of the first equation, which is known as Mathieu's equation. These exist only for the discrete sequence of characteristic values a=a_r(q) (even-periodic) and a=b_r(q) (odd-periodic).

The radial Mathieu functions Mc^{(j)}_{r}(z,q), Ms^{(j)}_{r}(z,q) are the solutions of the second equation, which is referred to as Mathieu's modified equation. The radial Mathieu functions of the first, second, third and fourth kind are denoted by the parameter j, which takes the value 1, 2, 3 or 4.

For more information on the Mathieu functions, see Abramowitz and Stegun, Chapter 20.

Mathieu Function Workspace

The Mathieu functions can be computed for a single order or for multiple orders, using array-based routines.

Mathieu Function Characteristic Values

Angular Mathieu Functions

Radial Mathieu Functions

Power Functions

Psi (Digamma) Function

The polygamma functions of order m defined by psi^{(m)}(x) = (d/dx)^m psi(x) = (d/dx)^{m+1} log(Gamma(x)), where psi(x) = Gamma'(x)/Gamma(x) is known as the digamma function.

Digamma Function

Trigamma Function

Polygamma Function

Synchrotron Functions

Transport Functions

The transport functions J(n,x) are defined by the integral representations J(n,x) := int_0^x dt t^n e^t /(e^t - 1)^2.

Trigonometric Functions

Circular Trigonometric Functions

Trigonometric Functions for Complex Arguments

Hyperbolic Trigonometric Functions

Conversion Functions

Restriction Functions

Trigonometric Functions With Error Estimates

Zeta Functions

Riemann Zeta Function

The Riemann zeta function is defined by the infinite sum zeta(s) = sum_{k=1}^infty k^{-s}.

Riemann Zeta Function Minus One

Hurwitz Zeta Function

The Hurwitz zeta function is defined by zeta(s,q) = sum_0^infty (k+q)^{-s}.

Eta Function

The eta function is defined by eta(s) = (1-2^{1-s}) zeta(s).

prev next

Reference index top