random_poisson

   more...
Generates pseudorandom numbers from a Poisson distribution.
Synopsis
#include <imsl.h>
int *imsl_random_poisson (int n_random, float theta, , 0)
Required Arguments
int n_random (Input)
Number of random numbers to generate.
float theta (Input)
Mean of the Poisson distribution. The argument theta must be positive.
Return Value
If no optional arguments are used, imsl_random_poisson returns a pointer to a vector of length n_random containing the random Poisson deviates. To release this space, use imsl_free.
Synopsis with Optional Arguments
#include <imsl.h>
int *imsl_random_poisson (int n_random, float theta,
IMSL_RETURN_USER, int r[],
0)
Optional Arguments
IMSL_RETURN_USER, int r[] (Output)
If specified, the vector of length n_random of random Poisson deviates is returned in the user-provided array r.
Description
The function imsl_random_poisson generates pseudorandom numbers from a Poisson distribution with positive mean theta. The probability function (with θ = theta) is
f(x) = (e-qθx)/x!, for x = 0, 1,2,
If theta is less than 15, imsl_random_poisson uses an inverse CDF method; otherwise, the PTPE method of Schmeiser and Kachitvichyanukul (1981) (see also Schmeiser 1983) is used. The PTPE method uses a composition of four regions, a triangle, a parallelogram, and two negative exponentials. In each region except the triangle, acceptance/rejection is used. The execution time of the method is essentially insensitive to the mean of the Poisson.
The function imsl_random_seed_set can be used to initialize the seed of the random number generator. The function imsl_random_option can be used to select the form of the generator.
Example
In this example, imsl_random_poisson is used to generate five pseudorandom deviates from a Poisson distribution with mean equal to 0.5.
 
#include <imsl.h>
 
#define N_RANDOM 5
 
int main()
{
int *r;
int seed = 123457;
float theta = 0.5;
 
imsl_random_seed_set (seed);
r = imsl_random_poisson (N_RANDOM, theta, 0);
imsl_i_write_matrix ("Poisson(0.5) random deviates", 1, 5, r, 0);
}
Output
 
Poisson(0.5) random deviates
1 2 3 4 5
2 0 1 0 1