g05 Chapter Contents
g05 Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_rngs_compd_poisson (g05mec)

## 1  Purpose

nag_rngs_compd_poisson (g05mec) generates a vector of pseudorandom integers, each from a discrete Poisson distribution with differing parameter $\lambda$.

## 2  Specification

 #include #include
 void nag_rngs_compd_poisson (Integer m, const double vlamda[], Integer x[], Integer igen, Integer iseed[], NagError *fail)

## 3  Description

nag_rngs_compd_poisson (g05mec) generates $m$ integers ${x}_{j}$, each from a discrete Poisson distribution with mean ${\lambda }_{j}$, where the probability of ${x}_{j}=I$ is
 $Pxj=I= λjI×e-λj I! , I=0,1,…,$
where
 $0≤λj, j= 1,2,…,m.$
The methods used by this function have low set up times and are designed for efficient use when the value of the parameter $\lambda$ changes during the simulation. For large samples from a distribution with fixed $\lambda$ using nag_rngs_poisson (g05mkc) to set up and use a reference vector may be more efficient.
When $\lambda <7.5$ the product of uniforms method is used, see for example Dagpunar (1988). For larger values of $\lambda$ an envelope rejection method is used with a target distribution:
 $fx=13 if ​x≤1, fx=13x-3 otherwise.$
This distribution is generated using a ratio of uniforms method. A similar approach has also been suggested by Ahrens and Dieter (1989). The basic method is combined with quick acceptance and rejection tests given by Maclaren (1990). For values of $\lambda \ge 87$ Stirling's approximation is used in the computation of the Poisson distribution function, otherwise tables of factorials are used as suggested by Maclaren (1990).
One of the initialization functions nag_rngs_init_repeatable (g05kbc) (for a repeatable sequence if computed sequentially) or nag_rngs_init_nonrepeatable (g05kcc) (for a non-repeatable sequence) must be called prior to the first call to nag_rngs_compd_poisson (g05mec).

## 4  References

Ahrens J H and Dieter U (1989) A convenient sampling method with bounded computation times for Poisson distributions Amer. J. Math. Management Sci. 1–13
Dagpunar J (1988) Principles of Random Variate Generation Oxford University Press
Maclaren N M (1990) A Poisson random number generator Personal Communication

## 5  Arguments

1:     mIntegerInput
On entry: $m$, the number of Poisson distributions for which pseudorandom variates are required.
Constraint: ${\mathbf{m}}\ge 1$.
2:     vlamda[m]const doubleInput
On entry: the means, ${\lambda }_{\mathit{j}}$, for $\mathit{j}=1,2,\dots ,{\mathbf{m}}$, of the Poisson distributions.
Constraint: $0.0\le {\mathbf{vlamda}}\left[j\right]\le \mathit{maxint}/2.0$, where $\mathit{maxint}$ is the largest integer representable on the machine (see nag_max_integer (X02BBC)).
3:     x[m]IntegerOutput
On exit: the $m$ pseudorandom numbers from the specified Poisson distributions.
4:     igenIntegerInput
On entry: must contain the identification number for the generator to be used to return a pseudorandom number and should remain unchanged following initialization by a prior call to nag_rngs_init_repeatable (g05kbc) or nag_rngs_init_nonrepeatable (g05kcc).
5:     iseed[$4$]IntegerCommunication Array
On entry: contains values which define the current state of the selected generator.
On exit: contains updated values defining the new state of the selected generator.
6:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}\ge 1$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NE_REAL_ARRAY_ELEM_CONS
On entry, $2×{\mathbf{vlamda}}\left[i-1\right]>\mathrm{MAXINT}$ for at least one value of $i=1,2,\dots ,{\mathbf{m}}$.
On entry, at least one element of ${\mathbf{vlamda}}<0.0$.

Not applicable.

None.

## 9  Example

This example prints ten pseudorandom integers from five Poisson distributions with means ${\lambda }_{1}=0.5$, ${\lambda }_{2}=5$, ${\lambda }_{3}=10$, ${\lambda }_{4}=50$ and ${\lambda }_{5}=100$. These are generated by ten calls to nag_rngs_compd_poisson (g05mec), after initialization by nag_rngs_init_repeatable (g05kbc).

### 9.1  Program Text

Program Text (g05mece.c)

None.

### 9.3  Program Results

Program Results (g05mece.r)