我需要一个 C 函数来计算 k 值高达 720 的泊松分布。我需要一个高效的解决方案。
user130375
问问题
13813 次
4 回答
7
于 2009-06-29T10:32:52.903 回答
4
泊松随机发生器
int poissonRandom(double expectedValue) {
int n = 0; //counter of iteration
double limit;
double x; //pseudo random number
limit = exp(-expectedValue);
x = rand() / INT_MAX;
while (x > limit) {
n++;
x *= rand() / INT_MAX;
}
return n;
}
我想我迟到了你的紧急要求。
于 2013-03-11T03:42:47.247 回答
1
如果您想自己计算而不是使用库您可以使用公式计算它.. e^k*e^(-lambda)/k!
你可以使用 log(n!) = log(n)+log(n-1!) 和动态规划
于 2009-06-29T12:27:45.277 回答
0
我想这对于最初的请求来说太晚了,但我认为有些答案没有抓住重点——我认为他不想从分布中生成随机数,而是想要分布本身。这是一个避免计算可能变大的阶乘的函数。
double poisson( int k, double mean ) {
double p = std::exp(-mean);
double f = 1;
for ( int i=0 ; i<k ; i++ ) f *= mean/(i+1);
return p*f;
}
于 2016-11-26T07:02:56.827 回答