2

Wikipedia has listed множество численных методов вычисления кумулятивной вероятности нормального распределения. Однако, с помощью Apache Commons Math вам не нужно знать ни об одном из них, как библиотека просто делает работу для вас:Apache Commons Math Нормальная кумулятивная вероятность

NormalDistribution normal = new NormalDistribution(mu, sigma); 
normal.cumulativeProbability(x); 

Для некоторых научно-исследовательского проекта, мне интересно знать, какой метод они используют. Кто-нибудь знает, какой метод использует Apache Commons Math, чтобы приблизиться к нормальному кумулятивному значению? Это из методов, перечисленных в Википедии, или они внедрили что-то другое?

ответ

4

Красота программного обеспечения с открытым исходным кодом заключается в том, что вы всегда можете check the source code. Реализация cumulativeProbability довольно прост, он просто возвращает

0.5 * (1 + Erf.erf(dev/(standardDeviation * SQRT2))); 

Erf.erf где вычисляет error function. Определено here.

И нет, он не использует какие-либо специальные методы в упомянутой статье Википедии. Это просто прямолинейная реализация формулы

enter image description here

+0

Спасибо. Для полноты я хотел бы упомянуть, что функция ошибки не имеет замкнутой формулы и аппроксимируется некоторым числовым методом. –

+1

Правильно, вы можете точно видеть, что делает Commons Math, глядя на реализацию 'Erf' в пакете' special'. Он использует методы, упомянутые в статье Wikipedia Erf [1]. [1]: HTTP: //en.wikipedia.org/wiki/Error_function#Approximation_with_elementary_functions –

1

Возможно, вы можете увидеть исходный код или javadoc. Смотрите там http://commons.apache.org/proper/commons-math/source-repository.html

и

http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/distribution/NormalDistribution.html

Кроме того, есть много информации в руководстве пользователя. Раздел о распространении кажется интересным: http://commons.apache.org/proper/commons-math/userguide/distribution.html

+0

Спасибо, но мой вопрос не ответил в Javadoc. И я обычно спрашиваю своих сверстников, прежде чем исследовать исходный код. –

+1

@ Pro.Hessam Это своего рода грубо. Вы можете просто взглянуть на исходный код за считанные секунды, в то время как вы решили не делать этого, но полагайтесь на время и терпение других, чтобы выполнять свою работу. – Carsten

+0

@ Карстен Я надеялся найти кого-то знакомого с библиотекой в ​​сообществе, чтобы ответить на мой вопрос. Не тратить никого на время. –