如果您不确定“使用正态近似的Poisson Distrubtion”是什么意思,请点击此链接并检查黄色框内的文本。 https://onlinecourses.science.psu.edu/stat414/node/180
这里是链接中数学的简单快照。
P(Y≥9)= P(Y> 8.5)= P(Z>(8.5-6.5)/√6.5)= P(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 ”应该是“ .218 ”因为我使用的负无穷大值是什么,这是“ Double.MIN_VALUE “
这是Java中的代码。 在主要方法中查看我的INPUTS的最后一部分。
* 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数学的“PoissonDistribution”类的方法“normalApproximateProbability(int x)”。但问题是这个方法需要一个“int”。
任何人对如何获得正确的输出或任何其他代码有任何更好的想法。我已经为simpson使用了另一个库,但我得到了相同的输出。
我需要在 Java。
中完成此操作答案 0 :(得分:0)
我尝试通过编写另一种实现Simpson 3/8规则而不是集成功能的方法来测试代码。它给出的结果与您第一次获得的结果相同。所以我认为差异很可能来自舍入错误。