Trait special::Gamma

source ·
pub trait Gamma
where Self: Sized,
{ // Required methods fn digamma(self) -> Self; fn gamma(self) -> Self; fn inc_gamma(self, p: Self) -> Self; fn ln_gamma(self) -> (Self, i32); fn trigamma(&self) -> Self; }
Expand description

Gamma functions.

Required Methods§

source

fn digamma(self) -> Self

Compute the real-valued digamma function.

The formula is as follows:

       d ln(Γ(p))
ψ(p) = ----------
           dp

where Γ is the gamma function. The computation is based on an approximation as described in the reference below.

Examples
use special::Gamma;

const EULER_MASCHERONI: f64 = 0.57721566490153286060651209008240243104215933593992;
assert!((1.0.digamma() + EULER_MASCHERONI).abs() < 1e-15);
References
  1. M. J. Beal, Variational algorithms for approximate Bayesian inference. University of London, 2003, pp. 265–266.
source

fn gamma(self) -> Self

Compute the gamma function.

source

fn inc_gamma(self, p: Self) -> Self

Compute the regularized lower incomplete gamma function.

The formula is as follows:

          γ(x, p)    1   x
P(x, p) = ------- = ---- ∫ t^(p - 1) e^(-t) dt
           Γ(p)     Γ(p) 0

where γ is the incomplete lower gamma function, and Γ is the complete gamma function.

The code is based on a C implementation by John Burkardt. The original algorithm was published in Applied Statistics and is known as Algorithm AS 239.

source

fn ln_gamma(self) -> (Self, i32)

Compute the natural logarithm of the gamma function.

source

fn trigamma(&self) -> Self

Compute the trigamma function.

The code is based on a Julia implementation.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl Gamma for f32

source§

fn digamma(self) -> Self

source§

fn gamma(self) -> Self

source§

fn inc_gamma(self, p: Self) -> Self

source§

fn ln_gamma(self) -> (Self, i32)

source§

fn trigamma(&self) -> Self

source§

impl Gamma for f64

source§

fn digamma(self) -> Self

source§

fn gamma(self) -> Self

source§

fn inc_gamma(self, p: Self) -> Self

source§

fn ln_gamma(self) -> (Self, i32)

source§

fn trigamma(&self) -> Self

Implementors§