2012-01-02 10 views
1

JavaでMATLABのgammaincを実装する際に問題があります。Javaでのガンマ不完全の実装

部分的にやってみました。その後、私はその後、私はgammaincを行うには、それらを組み合わせて不可欠な部分を解決することにシンプソンのルールを使用

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)); } 

しかし:私はΓ(a)のを解決するためのウェブ上で得たランチョス近似を使用してこれらの機能を使用しました私が得る出力は妥当ではない。

一体部分は、lower incomplete gamma functionと見なすこともできます。

私はより良い解決策を提案しています。

答えて

3

logGamma()regularizedGammaP()regularizedGammaQ()を含むApache Commons Mathを試してみてください。

あなたが探している量は正確です(具体的にすることはできますか)。しかし、これらのうちの1つまたは2つの代数的操作によって、必要なものを得ることができます。

Apache Commonsの.jarインポートに対応できない場合は、プロジェクト内にGamma.javaのソースファイルを含めてください(ライセンスの問題で問題が発生しないことを確認してください)。

+0

アドバイスをいただきありがとうございます。たぶん私の近似の不可欠な部分は私のトラブルを引き起こします。私はそれをチェックするアプリケーションを持っていないので、私はそれの良い近似を取得しているかどうかわからない。ありがとうございました –