Crate rgsl[][src]

Expand description


A Rust binding for the GSL library (the GNU Scientific Library).

The minimum support Rust version is 1.54.


This binding requires the GSL library library (version >= 2) to be installed:


sudo apt-get install libgsl0-dev


brew install gsl

Apple silicon

Homebrew installs libraries under /opt/homebrew/include on Apple silicon to maintain backward compatibility with Rosetta 2.

After gsl has been installed in the usual way, use the environment variable:

RUSTFLAGS='-L /opt/homebrew/include'

before cargo run, cargo build, etc., to tell the compiler where gsl is located.


Instructions are available there:


This crate works with Cargo and is on Just add the following to your Cargo.toml file:

GSL = "4.0"

You can see examples in the examples folder.


To build rgsl, just run cargo build. However, if you want to use a specific version, you’ll need to use the cargo features. For example:

cargo build --features v2_1

If a project depends on this version, don’t forget to add in your Cargo.toml:

version = "2"
features = ["v2_1"]


You can access the rgsl documentation locally, just build it:

> cargo doc --open

Then open this file with an internet browser: file:///{rgsl_location}/target/doc/rgsl/index.html

You can also access the latest build of the documentation via the internet here.


rust-GSL is a wrapper for GSL, therefore inherits the GPL license.


pub use types::*;
pub use elementary::Elementary;
pub use pow::Pow;
pub use trigonometric::Trigonometric;
pub use types::rng;


The Clausen function is defined by the following integral,

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.

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.

The Debye functions D_n(x) are defined by the following integral,

References and Further Reading

Further information about the elliptic integrals can be found in Abramowitz & Stegun, Chapter 17.

The error function is described in Abramowitz & Stegun, Chapter 7.

Fast Fourier Transforms (FFTs)


Linear Regression

This following routines compute the gamma and beta functions in their full and incomplete forms, as well as various kinds of factorials.

The Gegenbauer polynomials are defined in Abramowitz & Stegun, Chapter 22, where they are known as Ultraspherical polynomials.

Hypergeometric functions are described in Abramowitz & Stegun, Chapters 13 and 15.


The Jacobian Elliptic functions are defined in Abramowitz & Stegun, Chapter 16.

The generalized Laguerre polynomials are defined in terms of confluent hypergeometric functions as L^a_n(x) = ((a+1)n / n!) 1F1(-n,a+1,x), and are sometimes referred to as the associated Laguerre polynomials. They are related to the plain Laguerre polynomials L_n(x) by L^0_n(x) = L_n(x) and L^k_n(x) = (-1)^k (d^k/dx^k) L(n+k)(x). For more information see Abramowitz & Stegun, Chapter 22.

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.

The Legendre Functions and Legendre Polynomials are described in Abramowitz & Stegun, Chapter 8.

Linear Algebra

Information on the properties of the Logarithm function can be found in Abramowitz & Stegun, Chapter 4.

Multiroot test algorithms, See rgsl::types::multiroot for solvers.

Numerical Differentiation

Physical Constants


The following functions are equivalent to the function gsl_pow_int (see Small integer powers) with an error estimate.

The polygamma functions of order n are defined by

Random Number Distributions



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.

Transform Functions

The Riemann zeta function is defined in Abramowitz & Stegun, Section 23.2.


A wrapper to handle I/O operations between GSL and rust


This gives the sign in the formula:

The low-level integration rules in QUADPACK are identified by small integers (1-6). We’ll use symbolic constants to refer to them.

Used by workspace for QAWO integrator

Possible return values for an hadjust() evolution method for ordinary differential equations

Used by VegasMonteCarlo struct