1

JavaでMATLABのgammaincを実装するのに問題があります。

少しずつやってみました。Γ(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)); }

次に、シンプソンの法則を使用して積分部分を解き、それらを組み合わせてガンマインクを実行しましたが、得られる出力は妥当ではありません。

積分部分は、不完全ガンマ関数として見ることもできます。

より良い解決策についてアドバイスを求めています。

4

1 に答える 1

3

logGamma()andregularizedGammaP()とを含むApacheCommonsMathを使用してみてくださいregularizedGammaQ()

どの量を探しているのか正確にはわかりませんが(具体的に教えていただけますか?)、これらの1つまたは2つを代数的に操作することで、必要な量を得ることができます。

Apache Commonsの.jarインポートを処理できない場合は、そこからGamma.javaのソースファイルをプロジェクトに含めるだけです(ただし、ライセンスの問題によって問題が発生しないことを確認してください)。

于 2012-01-02T16:26:10.480 に答える