2012-01-02 2 views
1

Java에서 MATLAB gammainc을 구현하는 데 문제가 있습니다.Java에서 감마 불완전 구현

부분적으로 해 보았습니다. 나는 Γ (a)는를 해결하기위한 웹에있어에는 Lanczos 근사 사용이 기능을 사용 :

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

logGamma()regularizedGammaP()regularizedGammaQ()을 포함하는 Apache Commons Math를 사용해보십시오.

정확히 어떤 수량을 찾고 있습니까? (더 구체적 일 수 있습니까?) 하나 또는 두 가지 대수 조작으로 원하는 것을 얻을 수 있습니다.

Apache Commons의 .jar 가져 오기를 처리 할 수없는 경우에는 프로젝트에서 Gamma.java의 소스 파일을 포함하기 만하면됩니다 (라이센스 문제로 인해 문제가 발생하지 않는지 확인하십시오).

+0

감사합니다. 어쩌면 필수적인 부분에 대한 내 근사가 문제가 될 수 있습니다. 내가 그것을 확인하는 응용 프로그램이 없기 때문에 내가 그것에 대한 좋은 근사치를 얻고 있는지 나는 모른다. 다시 감사합니다 –