C# 中有数学伽马函数吗?



我想用 C# 制作一个科学计算器,但我没有找到 gamma 函数来 计算分形阶乘。 该函数的说明如下: https://en.wikipedia.org/wiki/Gamma_function

如何在 C# 中达到伽马函数?

从 nuget 安装 Math.NET 包

关于伽玛函数的文档:https://numerics.mathdotnet.com/Functions.html

Math.NET包确实是获取伽马函数的简单方法。 请记住,gamma(x)等于(x-1)!。 所以,gamma(4.1) = 6.8134.1! = 27.932. 要从gamma(4.1)得到4.1!,你可以将gamma(4.1)乘以4.1,或者干脆取5.1的伽马。 (我认为没有必要在这里显示一堆精度数字。

在 C# 中:

using MathNet.Numerics; //at beginning of program
private double Factorial(double x)
{
double r = x;
r *= SpecialFunctions.Gamma(x);
return r;
//This could be simplified into: 
//return x * SpecialFunctions.Gamma(x);
}
private double Factorial2(double x)
{
double r;
r = SpecialFunctions.Gamma(x + 1);
return r;
}

如果由于某种原因您不想使用Math.Net,您可以编写自己的 gamma 函数,如下所示:

static int g = 7;
static double[] p = {0.99999999999980993, 676.5203681218851, -1259.1392167224028,
771.32342877765313, -176.61502916214059, 12.507343278686905,
-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7};
Complex MyGamma(Complex z)
{
// Reflection formula
if (z.Real < 0.5)
{
return Math.PI / (Complex.Sin(Math.PI * z) * MyGamma(1 - z));
}
else
{
z -= 1;
Complex x = p[0];
for (var i = 1; i < g + 2; i++)
{
x += p[i] / (z + i);
}
Complex t = z + g + 0.5;
return Complex.Sqrt(2 * Math.PI) * (Complex.Pow(t, z + 0.5)) * Complex.Exp(-t) * x;
}
}

请注意,如果您不需要复数,可以将数据类型Complex替换为double,将Complex.函数替换为Math.,如下所示:

double MyGammaDouble(double z)
{
if (z < 0.5)
return Math.PI / (Math.Sin(Math.PI * z) * MyGammaDouble(1 - z));
z -= 1;
double x = p[0];
for (var i = 1; i < g + 2; i++)
x += p[i] / (z + i);
double t = z + g + 0.5;
return Math.Sqrt(2 * Math.PI) * (Math.Pow(t, z + 0.5)) * Math.Exp(-t) * x;
}

这是来自一个旧的维基页面(已被替换(,但被复制到这里。

最新更新