在C#中实现高斯超几何函数2F1(a,b,c,z),具有处理负值和大z值的能力

问题描述 投票:0回答:1

如何在 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 的非整数值的实现。

c# math
1个回答
0
投票

感谢@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);
}
© www.soinside.com 2019 - 2024. All rights reserved.