Если вы не уверены в том, что означает «Пуассоновское определение с использованием нормального приближения», перейдите по этой ссылке и проверьте тексты внутри желтой ячейки. https://onlinecourses.science.psu.edu/stat414/node/180Пуассоновская информация с использованием нормального приближения в Java
Вот простой снимок математики по ссылке.
Р (Y≥9) = P (Y> 8,5) = Р (Z> (8.5-6.5) /√6.5) = Р (Z> 0,78) = 0,218
Таким образом, чтобы получить значение в .218, мы используем правило интеграции Simpson, которое объединяет функцию (Реализовано в методе с именем «f» из кода ниже) от «минус бесконечность» до значения, равного этому >> »((8.5-6.5)/√6.5)) "
R успешно дает правильный выход. Но в Java, когда я реализовал код ниже, скопированный из «http://introcs.cs.princeton.edu/java/93integration/SimpsonsRule.java.html» я получаю «+0,28360853976343986», который должен был «0,218» Является ли это какой-либо, как из-за отрицательного значения бесконечности, я использую, который is "Double.MIN_VALUE"
Это код на Java. См. В самом конце моих ВХОДОВ в основном методе.
* Standard normal distribution density function.
* Replace with any sufficiently smooth function.
**********************************************************************/
public static double f(double x) {
return Math.exp(- x * x/2)/Math.sqrt(2 * Math.PI);
}
/**********************************************************************
* Integrate f from a to b using Simpson's rule.
* Increase N for more precision.
**********************************************************************/
public static double integrate(double a, double b) {
int N = 10000; // precision parameter
double h = (b - a)/(N - 1); // step size
// 1/3 terms
double sum = 1.0/3.0 * (f(a) + f(b));
// 4/3 terms
for (int i = 1; i < N - 1; i += 2) {
double x = a + h * i;
sum += 4.0/3.0 * f(x);
}
// 2/3 terms
for (int i = 2; i < N - 1; i += 2) {
double x = a + h * i;
sum += 2.0/3.0 * f(x);
}
return sum * h;
}
// sample client program
public static void main(String[] args) {
double z = (8.5-6.5)/Math.sqrt(6.5);
double a = Double.MIN_VALUE;
double b = z;
System.out.println(integrate(a, b));
}
У кого-нибудь есть идеи? Я попытался использовать метод класса «Пуассонраспределения» Apache «normalApproximateProbability (int x)». Но проблема в том, что этот метод принимает «int».
У кого-нибудь есть лучшие идеи о том, как получить правильный вывод или какой-либо другой код. Я тоже использовал другую библиотеку для simpson, но получаю тот же результат.
Мне нужно, чтобы это было сделано в Java.
Взгляните на [этот вопрос] (http://stackoverflow.com/questions/3884793/minimum-values-and-double-min-value-in-java). 'Double.MIN_VALUE' может быть не так, как вы думаете ... – lrnzcig
Пробовал все. «-Double.MIN_VALUE», «-Double.MAX_VALUE», «Double.NEGATIVE_INFINITY», нет надежды. – Adnan
Бег вне времени сегодня. Я думаю, вы должны использовать '-Double.MAX_VALUE'. У меня было время немного отладить ваш код, и я думаю, что вы можете столкнуться с «типичными» ошибками округления с плавающей запятой (см. [This] (http://docs.oracle.com/cd/E19957-01/806-3568/ ncg_goldberg.html)). Возможно, вы можете попробовать переписать свою функцию, чтобы вместо перехода от 'a' к' b' с шагом 'h', вы переходите от' b' к 'a'. Я так думаю, что вы могли избежать ошибок, но, пожалуйста, учтите, что это дикая догадка. – lrnzcig