Crate rgsl

source ·
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:


# on debian based systems:
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 = "7.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

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.



  • 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)
  • filterv2_5
  • 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.
  • Introduction
  • 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
  • Polynomials
  • 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
  • Sorting
  • Statistics
  • 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
  • A struct which binds a type to a lifetime and prevent mutable access.