Реализация гаммы неполной в Java - PullRequest
1 голос
/ 02 января 2012

У меня проблемы с реализацией gammainc MATLAB в Java.

Я пытался делать это по частям. Я использовал эту функцию, которая использует приближение Ланцоша, которое я получил в Интернете для решения Γ (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)); }

Затем я использовал правило Симпсона для решения неотъемлемой части, затем я объединил их, чтобы получить гамму, но результат, который я получил, не является разумным.

Составная часть также может рассматриваться как нижняя неполная гамма-функция .

Я прошу совета для лучшего решения.

1 Ответ

3 голосов
/ 02 января 2012

Попробуйте использовать Apache Commons Math, который включает в себя logGamma() и regularizedGammaP() и regularizedGammaQ().

I'mЯ не совсем уверен, какое именно количество вы ищете (не могли бы вы быть более точным?), но некоторые алгебраические манипуляции с одним или двумя из них должны дать вам то, что вы хотите..jar импорт Apache Commons, просто включите исходный файл Gamma.java из него в свой проект (но убедитесь, что проблемы с лицензированием не вызывают у вас никаких проблем).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...