在java中实现gamma不完整

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

我在 Java 中实现 MATLAB 的 gammainc 时遇到问题。

我试着一部分一部分地做。我使用了这些函数,该函数使用我在网上获得的 Lanczos 近似来求解 Γ(a):

private static double logGamma(double x) {
          double tmp = (x - 0.5) * Math.log(x + 4.5) - (x + 4.5);
          double ser = 1.0 + 76.18009173    / (x + 0)   - 86.50532033    / (x + 1)
                           + 24.01409822    / (x + 2)   -  1.231739516   / (x + 3)
                           +  0.00120858003 / (x + 4)   -  0.00000536382 / (x + 5);
          return tmp + Math.log(ser * Math.sqrt(2 * Math.PI));
       }

private static  double gamma(double x) { return Math.exp(logGamma(x)); }

然后我使用辛普森法则来求解积分部分,然后我将它们组合起来进行 gammainc,但我得到的输出是不合理的。

积分部分也可以看作是下不完全伽马函数

我正在寻求更好的解决方案的建议。

java matlab numerical-integration integral gamma
1个回答
3
投票

尝试使用 Apache Commons Math,其中包括

logGamma()
regularizedGammaP()
regularizedGammaQ()

我不太确定您正在寻找哪个数量(您能更具体一些吗?),但是对其中一两个进行一些代数运算应该可以满足您的需求。

如果您无法处理 Apache Commons 的 .jar 导入,只需将其中的 Gamma.java 源文件包含在您的项目中(但确保许可问题不会给您带来任何问题)。

© www.soinside.com 2019 - 2024. All rights reserved.