gpt4 book ai didi

java - Java 中的泊松分布(正确性?)

转载 作者:太空宇宙 更新时间:2023-11-04 14:31:53 27 4
gpt4 key购买 nike

我必须生成泊松分布的数据。我的范围是 n = 1000 到 100K。其中n是数据元素的数量; k 从 1 到 n 变化。它说使用 lambda 作为 n/2

我从未进行过统计,也不知道如何在这里获得正确的曲线。我可以将 lambda 输入为 n/2,但我是否可以在 0-n 范围内改变 K?我尝试了这个(将 k 作为参数传递),当我绘制数据图表时,它增加了,而不是鱼尾。我做错了什么,或者我做得正确吗?

谢谢

我有 Knuth 的 Java 代码。

static double poissonRandomNumber(int lambda) {
double L = Math.exp(-lambda);
int k = 0;
double p = 1;
do {
k = k + 1;
double u = Math.random();
p = p * u;
} while (p > L);
return k - 1;
}

最佳答案

您遇到的问题之一是计算机如何用 floating point numbers 表示和执行计算的基本限制。 .

实数在计算机上以类似于科学记数法的形式表示:

Significant digits × base^exponent

对于 double ,有 11 位用于指数,52 位用于“有效数字”部分。由于 float 已标准化,因此第一个 > 0.0 的正 float 的值约为 10^-320(定义为 Double.MIN_VALUE 在 Java 中)。请参阅IEEE Standard 754 Floating Point Numbers对此有一篇很好的文章。

考虑代码行:

double L = Math.exp(-lambda);

当 lambda 为 1000 时,e^-1000(大约为 10^-435)小于 Double.MIN_VALUE,并且计算机对 e^-1000 的表示方式与它对 e^-100000

的表示方式没有任何不同。

您可以通过注意到 lambda 是“到达率”来解决这个问题,并且您可以计算较短间隔的随机样本并对它们求和。那就是

x = p(L);

可以计算为

x = p(L/2) + p(L/2);

可以近似计算更大的数字:

x = 100 * p(L/100);

Wikipedia article has on the Poisson distribution有一些很好的指导来计算大 lambda 值的泊松分布。

关于java - Java 中的泊松分布(正确性?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com