... | ... |
@@ -800,12 +800,35 @@ |
800 | 800 |
/// |
801 | 801 |
double pareto(double k,double x_min) |
802 | 802 |
{ |
803 | 803 |
return exponential(gamma(k,1.0/x_min)); |
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 |
|
808 | 831 |
///\name Two dimensional distributions |
809 | 832 |
/// |
810 | 833 |
|
811 | 834 |
///@{ |
0 comments (0 inline)