1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::special::{Functions, Gamma};

pub struct Digamma;

impl Digamma {
    /// The Defintion of the Digamma function in Rust <br>
    /// Learn more at: <a href="https://en.wikipedia.org/wiki/Digamma_function" target="_blank">Wikipedia Digamma Function</a> <br>
    /// <hr/>
    ///
    ///
    /// # Example:
    /// ```
    /// use ferrate::special::Digamma;
    ///
    /// let z = 2_f64;
    /// let digamma = Digamma::digamma(z);
    ///
    /// assert_eq!(digamma, 0.42278438084235914);
    /// ```
    pub fn digamma(z: f64) -> f64 {
        let p1 = |t: f64| Gamma::lanczosln(t).exp();
        let dt = Functions::derivative(p1, z);
        dt / Gamma::lanczosln(z).exp()
    }
}