2

我需要一个 C 函数来计算 k 值高达 720 的泊松分布。我需要一个高效的解决方案。

4

4 回答 4

7

试一试GSLgsl_ran_poisson_pdf

于 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 回答