[Lemon-commits] Alpar Juttner: Merge
Lemon HG
hg at lemon.cs.elte.hu
Mon Mar 17 20:22:52 CET 2008
details: http://lemon.cs.elte.hu/hg/lemon/rev/f857981306ea
changeset: 93:f857981306ea
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Mon Mar 17 19:21:27 2008 +0000
description:
Merge
diffstat:
2 files changed, 24 insertions(+)
lemon/random.h | 23 +++++++++++++++++++++++
test/random_test.cc | 1 +
diffs (42 lines):
diff -r e28fc773f3c0 -r f857981306ea lemon/random.h
--- a/lemon/random.h Mon Mar 17 18:31:52 2008 +0000
+++ b/lemon/random.h Mon Mar 17 19:21:27 2008 +0000
@@ -803,6 +803,29 @@ namespace lemon {
return exponential(gamma(k,1.0/x_min));
}
+ /// Poisson distribution
+
+ /// This function generates a Poisson distribution random number with
+ /// parameter \c lambda.
+ ///
+ /// The probability mass function of this distribusion is
+ /// \f[ \frac{e^{-\lambda}\lambda^k}{k!} \f]
+ /// \note The algorithm is taken from the book of Donald E. Knuth titled
+ /// ''Seminumerical Algorithms'' (1969). Its running time is linear in the
+ /// return value.
+
+ int poisson(double lambda)
+ {
+ const double l = std::exp(-lambda);
+ int k=0;
+ double p = 1.0;
+ do {
+ k++;
+ p*=real<double>();
+ } while (p>=l);
+ return k-1;
+ }
+
///@}
///\name Two dimensional distributions
diff -r e28fc773f3c0 -r f857981306ea test/random_test.cc
--- a/test/random_test.cc Mon Mar 17 18:31:52 2008 +0000
+++ b/test/random_test.cc Mon Mar 17 19:21:27 2008 +0000
@@ -33,4 +33,5 @@ int main()
a=lemon::rnd.gamma(4);
//Does gamma work with integer k?
a=lemon::rnd.gamma(4.0,0);
+ a=lemon::rnd.poisson(.5);
}
More information about the Lemon-commits
mailing list