2009-06-29 10 views
2

kの値が720までのポアソン分布を計算するには、C関数が必要です。効率の良いソリューションが必要です。/K - (ラムダ)gsl_ran_poisson_pdfCのポアソン分布の計算

+8

これはRentACoderではなく、お客様の計画の欠如が当社の緊急事態を構成するものではありません。あなたはちょうど最小限の努力をして(そして、それが何であったかを教えて)、ちょうど要求をするのではないと考えています。 – paxdiablo

答えて

6

GSLしようとする与えます!
あなたは私はかなり遅れてあなたの緊急用思うよログ(N!)のログ(N)+ログ=(N-1を!)と動的計画

1

をライブラリ を使用するのではなく、それを自分で計算したい場合は、式を使用して、それを計算することができます。.. E^k個の*電子^:

3

ポアソン乱数生成器

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; 
} 

を使用することができますデマンド。

+0

これについては他の人たちとも話し合いました:https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables – plasmacel

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; 
} 
関連する問題