# Crate rgsl[−][src]

## Expand description

# rust-GSL

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

The minimum support Rust version is **1.54**.

## Installation

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

### Linux

`sudo apt-get install libgsl0-dev`

### macOS

`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.

### Windows

Instructions are available there: https://www.gnu.org/software/gsl/extras/native_win_builds.html.

## Usage

This crate works with Cargo and is on crates.io. Just add the following to your `Cargo.toml`

file:

```
[dependencies]
GSL = "4.0"
```

You can see examples in the `examples`

folder.

## Building

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`

:

```
[dependencies.GSL]
version = "2"
features = ["v2_1"]
```

## Documentation

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.

## License

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

## Re-exports

`pub use types::*;`

`pub use elementary::Elementary;`

`pub use pow::Pow;`

`pub use trigonometric::Trigonometric;`

`pub use types::rng;`

## Modules

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)

`v2_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.

`v2_1`

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.

## Structs

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

## Enums

This gives the sign in the formula:

`v2_5`

`v2_5`

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

## Statics

The maximum n such that gsl_sf_doublefact(n) does not give an overflow.

The maximum n such that gsl_sf_fact(n) does not give an overflow.

The maximum x such that gamma(x) is not considered an overflow.