2012-01-02 75 views
1

我在Java中实现MATLAB的gammainc时遇到问题。在java中实现gamma不完整

我试过一部分一部分。我使用这些函数使用兰克泽斯逼近,我在网络上得到了解决Γ(一)

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但我得到的输出是不合理的。

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

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

回答

3

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

我不是很确定你正在寻找哪个数量(你能更具体吗?),但是对其中的一个或两个的一些代数控制应该可以得到你想要的。

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

+0

谢谢你的建议。也许我对整体部分的近似导致了我的麻烦。我不知道我是否得到了一个很好的近似值,因为我没有一个应用程序来检查它。再次感谢你 – 2012-01-02 23:22:36