2012-01-02 71 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