... | ... |
@@ -804,4 +804,27 @@ |
804 | 804 |
} |
805 | 805 |
|
806 |
/// Poisson distribution |
|
807 |
|
|
808 |
/// This function generates a Poisson distribution random number with |
|
809 |
/// parameter \c lambda. |
|
810 |
/// |
|
811 |
/// The probability mass function of this distribusion is |
|
812 |
/// \f[ \frac{e^{-\lambda}\lambda^k}{k!} \f] |
|
813 |
/// \note The algorithm is taken from the book of Donald E. Knuth titled |
|
814 |
/// ''Seminumerical Algorithms'' (1969). Its running time is linear in the |
|
815 |
/// return value. |
|
816 |
|
|
817 |
int poisson(double lambda) |
|
818 |
{ |
|
819 |
const double l = std::exp(-lambda); |
|
820 |
int k=0; |
|
821 |
double p = 1.0; |
|
822 |
do { |
|
823 |
k++; |
|
824 |
p*=real<double>(); |
|
825 |
} while (p>=l); |
|
826 |
return k-1; |
|
827 |
} |
|
828 |
|
|
806 | 829 |
///@} |
807 | 830 |
|
0 comments (0 inline)