Вы можете использовать функцию ошибки , доступную в org.apache.commons.math.special.Erf
, как обсуждено здесь и здесь .
Приложение: Методы, предложенные в @ 1012 * answer Брента Уордена , значительно упрощают решение таких задач.В качестве конкретного примера приведенный ниже код показывает, как решить примеры , на которые вы ссылаетесь.Кроме того, я нашел полезным сравнить определение здесь с реализацией cumulativeProbability()
с использованием Erf.erf
.Также обратите внимание, как реализация inverseCumulativeProbability()
обобщает требуемый итеративный подход.
import org.apache.commons.math.MathException;
import org.apache.commons.math.distribution.NormalDistribution;
import org.apache.commons.math.distribution.NormalDistributionImpl;
/**
* @see http://stattrek.com/Tables/Normal.aspx#examples
* @see https://stackoverflow.com/questions/6353678
*/
public class CumulativeProbability {
private static NormalDistribution d;
public static void main(String[] args) throws MathException {
// Problem 1; µ = 1000; σ = 100
d = new NormalDistributionImpl(1000, 100);
System.out.println(d.cumulativeProbability(1200));
// Problem 2; µ = 50; σ = 10
d = new NormalDistributionImpl(50, 10);
System.out.println(d.inverseCumulativeProbability(0.9));
}
}
Консоль:
0.9772498680518208
62.81551565546365
Обсуждение:
Проблема1. Среди устройств с нормально распределенным сроком службы, который длится в среднем 1000 часов со стандартным отклонением 100 часов, ~ 97,7% выйдет из строя в течение 1200 часов.
Проблема 2. Среди людей с нормально распределенными навыками, которыепозволяет в среднем 50 повторений со стандартным отклонением 10 повторений, человек может превзойти 90% населения с 63 повторениями.