类 Gamma
这是一个实用类,提供与Γ(Gamma)函数族相关的计算方法。
invGamma1pm1(double)和logGamma1p(double)的实现基于以下算法描述:
- Didonato and Morris (1986),计算不完全Gamma函数比率及其逆,TOMS 12(4),377-393,
- Didonato and Morris (1992),算法708:不完全Beta函数比率的有效数字计算,TOMS 18(3),360-373,
并在NSWC数学函数库中实现,可在此处获取。该库已经“获得公开发布批准”,版权指南表明,除非代码中另有说明,否则该库中的所有FORTRAN函数均免费许可。由于代码中没有出现此类通知,因此这些函数可以安全地移植到Hipparchus中。
-
字段概要
-
方法概要
修饰符和类型方法说明static double
digamma
(double x) 计算x的digamma函数。static <T extends CalculusFieldElement<T>>
Tdigamma
(T x) 计算x的digamma函数。static double
gamma
(double x) 返回Γ(x)的值。static <T extends CalculusFieldElement<T>>
Tgamma
(T x) 返回Γ(x)的值。static double
invGamma1pm1
(double x) 返回-0.5 ≤ x ≤ 1.5时的1 / Γ(1 + x) - 1的值。static <T extends CalculusFieldElement<T>>
TinvGamma1pm1
(T x) 返回-0.5 ≤ x ≤ 1.5时的1 / Γ(1 + x) - 1的值。static double
lanczos
(double x) 返回用于计算gamma函数的Lanczos逼近。static <T extends CalculusFieldElement<T>>
Tlanczos
(T x) 返回用于计算gamma函数的Lanczos逼近。static double
logGamma
(double x) 返回x > 0时的log Γ(x)的值。static <T extends CalculusFieldElement<T>>
TlogGamma
(T x) 返回x > 0时的log Γ(x)的值。static double
logGamma1p
(double x) 返回-0.5 ≤ x ≤ 1.5时的log Γ(1 + x)的值。static <T extends CalculusFieldElement<T>>
TlogGamma1p
(T x) 返回-0.5 ≤ x ≤ 1.5时的log Γ(1 + x)的值。static double
regularizedGammaP
(double a, double x) 返回正则化gamma函数P(a, x)的值。static double
regularizedGammaP
(double a, double x, double epsilon, int maxIterations) 返回正则化gamma函数P(a, x)的值。static <T extends CalculusFieldElement<T>>
TregularizedGammaP
(T a, T x) 返回正则化gamma函数P(a, x)的值。static <T extends CalculusFieldElement<T>>
TregularizedGammaP
(T a, T x, double epsilon, int maxIterations) 返回正则化gamma函数P(a, x)的值。static double
regularizedGammaQ
(double a, double x) 返回正则化gamma函数Q(a, x) = 1 - P(a, x)的值。static double
regularizedGammaQ
(double a, double x, double epsilon, int maxIterations) 返回正则化gamma函数Q(a, x) = 1 - P(a, x)的值。static <T extends CalculusFieldElement<T>>
TregularizedGammaQ
(T a, T x) 返回正则化gamma函数Q(a, x) = 1 - P(a, x)的值。static <T extends CalculusFieldElement<T>>
TregularizedGammaQ
(T a, T x, double epsilon, int maxIterations) 返回正则化gamma函数Q(a, x) = 1 - P(a, x)的值。static double
trigamma
(double x) 计算x的三次digamma函数。static <T extends CalculusFieldElement<T>>
Ttrigamma
(T x) 计算x的三次digamma函数。
-
字段详细资料
-
GAMMA
public static final double GAMMA- 另请参阅:
-
LANCZOS_G
public static final double LANCZOS_GLanczos逼近中常数g
的值,请参阅lanczos(double)
。- 另请参阅:
-
-
方法详细资料
-
logGamma
public static double logGamma(double x) 返回x > 0时的log Γ(x)的值。
对于x ≤ 8,实现基于NSWC数学子程序库中的双精度实现
DGAMLN
。对于x > 8,实现基于以下内容:- Gamma函数,方程(28)。
- Lanczos逼近,方程(1)至(5)。
- Paul Godfrey,关于收敛Lanczos复Gamma逼近计算的注释
- 参数:
-
x
- 参数。 - 返回:
-
log(Gamma(x))
的值,如果x <= 0.0
则返回Double.NaN
。
-
logGamma
返回x > 0时的log Γ(x)的值。
对于x ≤ 8,实现基于NSWC数学子程序库中的双精度实现
DGAMLN
。对于x > 8,实现基于以下内容:- Gamma函数,方程(28)。
- Lanczos逼近,方程(1)至(5)。
- Paul Godfrey,关于收敛Lanczos复Gamma逼近计算的注释
- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
-
log(Gamma(x))
的值,如果x <= 0.0
则返回Double.NaN
。
-
regularizedGammaP
public static double regularizedGammaP(double a, double x) 返回正则化gamma函数P(a, x)的值。- 参数:
-
a
- 参数。 -
x
- 值。 - 返回:
- 正则化gamma函数P(a, x)的值。
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaP
返回正则化gamma函数P(a, x)的值。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
a
- 参数。 -
x
- 值。 - 返回:
- 正则化gamma函数P(a, x)的值。
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaP
public static double regularizedGammaP(double a, double x, double epsilon, int maxIterations) 返回正则化gamma函数P(a, x)的值。此方法的实现基于以下内容:
- 正则化Gamma函数,方程(1)
- 不完全Gamma函数,方程(4)
- 第一类合流超几何函数,方程(1)
- 参数:
-
a
- a参数。 -
x
- 值。 -
epsilon
- 当级数中第n项的绝对值小于epsilon时,近似计算停止计算级数中的更多元素。 -
maxIterations
- 完成的最大“迭代”次数。 - 返回:
- 正则化gamma函数P(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaP
public static <T extends CalculusFieldElement<T>> T regularizedGammaP(T a, T x, double epsilon, int maxIterations) 返回正则化gamma函数P(a, x)的值。此方法的实现基于以下内容:
- 正则化Gamma函数,方程(1)
- 不完全Gamma函数,方程(4)
- 第一类合流超几何函数,方程(1)
- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
a
- a参数。 -
x
- 值。 -
epsilon
- 当级数中第n项的绝对值小于epsilon时,近似计算停止计算级数中的更多元素。 -
maxIterations
- 完成的最大“迭代”次数。 - 返回:
- 正则化gamma函数P(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaQ
public static double regularizedGammaQ(double a, double x) 返回正则化伽玛函数 Q(a, x) = 1 - P(a, x)。- 参数:
-
a
- 参数 a。 -
x
- 值。 - 返回:
- 正则化伽玛函数 Q(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaQ
返回正则化伽玛函数 Q(a, x) = 1 - P(a, x)。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
a
- 参数 a。 -
x
- 值。 - 返回:
- 正则化伽玛函数 Q(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaQ
public static double regularizedGammaQ(double a, double x, double epsilon, int maxIterations) 返回正则化伽玛函数 Q(a, x) = 1 - P(a, x)。此方法的实现基于:
- 参数:
-
a
- 参数 a。 -
x
- 值。 -
epsilon
- 当级数中第 n 项的绝对值小于 epsilon 时,近似计算停止计算级数中的更多元素。 -
maxIterations
- 完成的最大“迭代”次数。 - 返回:
- 正则化伽玛函数 P(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
regularizedGammaQ
public static <T extends CalculusFieldElement<T>> T regularizedGammaQ(T a, T x, double epsilon, int maxIterations) 返回正则化伽玛函数 Q(a, x) = 1 - P(a, x)。此方法的实现基于:
- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
a
- 参数 a。 -
x
- 值。 -
epsilon
- 当级数中第 n 项的绝对值小于 epsilon 时,近似计算停止计算级数中的更多元素。 -
maxIterations
- 完成的最大“迭代”次数。 - 返回:
- 正则化伽玛函数 P(a, x)
- 抛出:
-
MathIllegalStateException
- 如果算法无法收敛。
-
digamma
public static double digamma(double x) 计算 x 的 digamma 函数。
这是根据 Jose Bernardo 在 1976 年的文章《算法 AS 103: Psi (Digamma) 函数》中描述的算法独立编写的实现。
一些常数已更改以提高中等运行时的精度。对于 x >= 10^-5,结果应在绝对公差为 10^-8 的范围内准确,并且对于 x > 0,结果应在相对公差为 10^-8 的范围内准确。
对于较大负值的 x,性能将非常昂贵(与 |x| 成比例)。对于负值的 x,精度应该在结果小于 10^5 时为约 10^-8 绝对值,对于大于该值的结果为约 10^-8 相对值。
- 参数:
-
x
- 参数。 - 返回:
- digamma(x),精确到 10^-8 的相对或绝对误差中较小的值。
- 另请参阅:
-
digamma
计算 x 的 digamma 函数。
这是根据 Jose Bernardo 在 1976 年的文章《算法 AS 103: Psi (Digamma) 函数》中描述的算法独立编写的实现。
一些常数已更改以提高中等运行时的精度。对于 x >= 10^-5,结果应在绝对公差为 10^-8 的范围内准确,并且对于 x > 0,结果应在相对公差为 10^-8 的范围内准确。
对于较大负值的 x,性能将非常昂贵(与 |x| 成比例)。对于负值的 x,精度应该在结果小于 10^5 时为约 10^-8 绝对值,对于大于该值的结果为约 10^-8 相对值。
- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
- digamma(x),精确到 10^-8 的相对或绝对误差中较小的值。
- 另请参阅:
-
trigamma
public static double trigamma(double x) 计算 x 的三次 digamma 函数。此函数是通过对 digamma 实现的导数进行推导得到的。- 参数:
-
x
- 参数。 - 返回:
- 三次 digamma(x),精确到 10^-8 的相对或绝对误差中较小的值
- 另请参阅:
-
trigamma
计算 x 的三次 digamma 函数。此函数是通过对 digamma 实现的导数进行推导得到的。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
- 三次 digamma(x),精确到 10^-8 的相对或绝对误差中较小的值
- 另请参阅:
-
lanczos
public static double lanczos(double x) 返回用于计算伽玛函数的 Lanczos 近似。Lanczos 近似与伽玛函数之间的关系由以下方程式确定 \[ \Gamma(x) = \frac{\sqrt{2\pi}}{x} \times (x + g + \frac{1}{2}) ^ (x + \frac{1}{2}) \times e^{-x - g - 0.5} \times \mathrm{lanczos}(x) \] 其中
g
是 Lanczos 常数。- 参数:
-
x
- 参数。 - 返回:
- Lanczos 近似。
- 另请参阅:
-
lanczos
返回用于计算伽玛函数的 Lanczos 近似。Lanczos 近似与伽玛函数之间的关系由以下方程式确定 \[ \Gamma(x) = \frac{\sqrt{2\pi}}{x} \times (x + g + \frac{1}{2}) ^ (x + \frac{1}{2}) \times e^{-x - g - 0.5} \times \mathrm{lanczos}(x) \] 其中
g
是 Lanczos 常数。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
- Lanczos 近似。
- 另请参阅:
-
invGamma1pm1
public static double invGamma1pm1(double x) 返回 -0.5 ≤ x ≤ 1.5 时 1 / Γ(1 + x) - 1 的值。此实现基于 NSWC 数学子程序库 中的双精度实现,DGAM1
。- 参数:
-
x
- 参数。 - 返回:
-
1.0 / Gamma(1.0 + x) - 1.0
的值。 - 抛出:
-
MathIllegalArgumentException
- 如果x < -0.5
-
MathIllegalArgumentException
- 如果x > 1.5
-
invGamma1pm1
返回 -0.5 ≤ x ≤ 1.5 时 1 / Γ(1 + x) - 1 的值。此实现基于 NSWC 数学子程序库 中的双精度实现,DGAM1
。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
-
1.0 / Gamma(1.0 + x) - 1.0
的值。 - 抛出:
-
MathIllegalArgumentException
- 如果x < -0.5
-
MathIllegalArgumentException
- 如果x > 1.5
-
logGamma1p
返回 -0.5 ≤ x ≤ 1.5 时 log Γ(1 + x) 的值。此实现基于 NSWC 数学子程序库 中的双精度实现,DGMLN1
。- 参数:
-
x
- 参数。 - 返回:
-
log(Gamma(1 + x))
的值。 - 抛出:
-
MathIllegalArgumentException
- 如果x < -0.5
。 -
MathIllegalArgumentException
- 如果x > 1.5
。
-
logGamma1p
public static <T extends CalculusFieldElement<T>> T logGamma1p(T x) throws MathIllegalArgumentException 返回 -0.5 ≤ x ≤ 1.5 时 log Γ(1 + x) 的值。此实现基于 NSWC 数学子程序库 中的双精度实现,D
- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
-
log(Gamma(1 + x))
的值。 - 抛出:
-
MathIllegalArgumentException
- 如果x < -0.5
。 -
MathIllegalArgumentException
- 如果x > 1.5
。
-
gamma
public static double gamma(double x) 返回Γ(x)的值。基于NSWC数学子程序库的双精度实现,DGAMMA
。- 参数:
-
x
- 参数。 - 返回:
-
Gamma(x)
的值。
-
gamma
返回Γ(x)的值。基于NSWC数学子程序库的双精度实现,DGAMMA
。- 类型参数:
-
T
- 字段元素的类型。 - 参数:
-
x
- 参数。 - 返回:
-
Gamma(x)
的值。
-