如何在 C# 中实现高斯超几何函数 2F1(a, b, c, z),并且能够处理负值和大 z 值?
2F1 是某个方程积分的一部分,导致以下实现:
internal static double HCWR(double distance, double n)
{
double geometricResult = 2F1(1, 1 / n, 1 + 1 / n, -Math.Pow(distance, -n));
return (Math.Pow(distance, -n) * geometricResult);
}
n 可以是任何大于或等于 2 的数字,距离可以是区间 (0,1] 中的任何数字。
像 a = 1、b = 0.5、c = 1.5 和 z = -25.0 这样的值(应该是 0.27468)在每个实现中都没有得到很好的处理。 CenterSpace 拒绝每个 |z| > 1 和 MathNet.Numerics 返回 -infinity,而我更喜欢可以处理 z 的非整数值的实现。
感谢@Alander 的评论。
由于在我的示例中应用了域 n≥2 和距离 ε(0,1],因此 z≤−1。因此,0
internal static double HCWR(double distance, double n)
{
double z = -Math.Pow(distance, -n);
double c = 1 + 1 / n;
double b = 1 / n;
double a = 1;
double factorTransformed = Math.Pow(1 - z, -a);
double bTransformed = c - b;
double zTransformed = z / (z - 1);
double geometricResult = factorTransformed * CenterSpace.NMath.Core.SpecialFunctions.Hypergeometric2F1(a, bTransformed, c, zTransformed);
return (Math.Pow(distance, -n) * geometricResult);
}