在java中实现gamma不完整

时间:2012-01-02 16:17:41

标签: java matlab integration gamma

我在使用Java实现gammainc MATLAB时遇到了麻烦。

我尝试了一部分。我使用了这些使用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)); }

然后我使用Simpson的规则来解决积分部分,然后我将它们组合起来做gammainc但是我得到的输出是不合理的。

整体部分也可以看作是lower incomplete gamma function

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

1 个答案:

答案 0 :(得分:3)

尝试使用Apache Commons Math,其中包括logGamma()regularizedGammaP()以及regularizedGammaQ()

我不太确定你正在寻找的数量(你可能更具体吗?),但是对这些中的一两个进行代数操作可以得到你想要的东西。

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