MathPHP\Functions\Special::confluentHypergeometric PHP Метод

confluentHypergeometric() публичный статический Метод

https://en.wikipedia.org/wiki/Confluent_hypergeometric_function ∞ ____ \ a⁽ⁿ⁾ * zⁿ ₁F₁ = > --------- b⁽ⁿ⁾ * n! ‾‾‾‾ n=0
public static confluentHypergeometric ( number $a, number $b, number $z ) : number
$a number the numerator value
$b number the denominator value
$z number
Результат number
    public static function confluentHypergeometric($a, $b, $z)
    {
        return self::generalizedHypergeometric(1, 1, $a, $b, $z);
    }

Usage Example

Пример #1
0
 /**
  * Probability density function
  *
  *   /v\                /   μ²\
  *  | - |              |-1*--- |                        / ν    3     μ²x²   \            / ν + 1    1     μ²x²   \   \
  *   \2/                \   2 /           /         ₁F₁|  - ;  - ; --------- |       ₁F₁|  ----- ;  - ; --------- |   |
  *  ν    * Γ(ν + 1) * e                  |              \ 2    2   2(ν + x²)/            \   2      2   2(ν + x²)/    |
  * ---------------------------------  *  | √2*μ*x * ---------------------------  +  --------------------------------  |
  *  ν           (ν / 2)                  |                        / ν + 1 \                         / ν    \          |
  * 2  * (ν + x²)         * Γ(ν / 2)      |           (ν + x²) * Γ|  ------ |          √(ν + x²) * Γ|  - + 1 |         |
  *                                        \                       \   2   /                         \ 2    /         /
  *
  * @param number $x percentile
  * @param int    $ν degrees of freedom > 0
  *
  * @return number
  */
 public static function PDF($x, int $ν, $μ)
 {
     Support::checkLimits(self::LIMITS, ['x' => $x, 'ν' => $ν, 'μ' => $μ]);
     $part1 = $ν ** ($ν / 2) * Special::gamma($ν + 1) * exp(-1 * $μ ** 2 / 2) / 2 ** $ν / ($ν + $x ** 2) ** ($ν / 2) / Special::gamma($ν / 2);
     $F1 = $ν / 2 + 1;
     $F2 = 3 / 2;
     $F3 = $μ ** 2 * $x ** 2 / 2 / ($ν + $x ** 2);
     $inner_part1 = sqrt(2) * $μ * $x * Special::confluentHypergeometric($F1, $F2, $F3) / ($ν + $x ** 2) / Special::gamma(($ν + 1) / 2);
     $F1 = ($ν + 1) / 2;
     $F2 = 1 / 2;
     $inner_part2 = Special::confluentHypergeometric($F1, $F2, $F3) / sqrt($ν + $x ** 2) / Special::gamma($ν / 2 + 1);
     return $part1 * ($inner_part1 + $inner_part2);
 }