WPILibC++ 2023.4.3-108-ge5452e3
incomplete_beta.hpp File Reference

Go to the source code of this file.

Namespaces

namespace  internal
 

Functions

template<typename T >
constexpr T internal::incomplete_beta_cf (const T a, const T b, const T z, const T c_j, const T d_j, const T f_j, const int depth) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_coef_even (const T a, const T b, const T z, const int k) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_coef_odd (const T a, const T b, const T z, const int k) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_coef (const T a, const T b, const T z, const int depth) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_c_update (const T a, const T b, const T z, const T c_j, const int depth) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_d_update (const T a, const T b, const T z, const T d_j, const int depth) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_decision (const T a, const T b, const T z, const T c_j, const T d_j, const T f_j, const int depth) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_begin (const T a, const T b, const T z) noexcept
 
template<typename T >
constexpr T internal::incomplete_beta_check (const T a, const T b, const T z) noexcept
 
template<typename T1 , typename T2 , typename T3 , typename TC = common_return_t<T1,T2,T3>>
constexpr TC internal::incomplete_beta_type_check (const T1 a, const T2 b, const T3 p) noexcept
 
template<typename T1 , typename T2 , typename T3 >
constexpr common_return_t< T1, T2, T3 > incomplete_beta (const T1 a, const T2 b, const T3 z) noexcept
 Compile-time regularized incomplete beta function. More...
 

Function Documentation

◆ incomplete_beta()

template<typename T1 , typename T2 , typename T3 >
constexpr common_return_t< T1, T2, T3 > incomplete_beta ( const T1  a,
const T2  b,
const T3  z 
)
constexprnoexcept

Compile-time regularized incomplete beta function.

Parameters
aa real-valued, non-negative input.
ba real-valued, non-negative input.
za real-valued, non-negative input.
Returns
computes the regularized incomplete beta function,

\[ \frac{\text{B}(z;\alpha,\beta)}{\text{B}(\alpha,\beta)} = \frac{1}{\text{B}(\alpha,\beta)}\int_0^z t^{a-1} (1-t)^{\beta-1} dt \]

using a continued fraction representation, found in the Handbook of Continued Fractions for Special Functions, and a modified Lentz method.

\[ \frac{\text{B}(z;\alpha,\beta)}{\text{B}(\alpha,\beta)} = \frac{z^{\alpha} (1-t)^{\beta}}{\alpha \text{B}(\alpha,\beta)} \dfrac{a_1}{1 + \dfrac{a_2}{1 + \dfrac{a_3}{1 + \dfrac{a_4}{1 + \ddots}}}} \]

where \( a_1 = 1 \) and

\[ a_{2m+2} = - \frac{(\alpha + m)(\alpha + \beta + m)}{(\alpha + 2m)(\alpha + 2m + 1)}, \ m \geq 0 \]

\[ a_{2m+1} = \frac{m(\beta - m)}{(\alpha + 2m - 1)(\alpha + 2m)}, \ m \geq 1 \]

The Lentz method works as follows: let \( f_j \) denote the value of the continued fraction up to the first \( j \) terms; \( f_j \) is updated as follows:

\[ c_j = 1 + a_j / c_{j-1}, \ \ d_j = 1 / (1 + a_j d_{j-1}) \]

\[ f_j = c_j d_j f_{j-1} \]