RNGAM

Generates pseudorandom numbers from a standard gamma distribution.

Required Arguments

A — The shape parameter of the gamma distribution. (Input)
This parameter must be positive.

R — Vector of length NR containing the random standard gamma deviates. (Output)

Optional Arguments

NR — Number of random numbers to generate. (Input)
Default: NR = size (R,1).

FORTRAN 90 Interface

Generic: CALL RNGAM (A, R [])

Specific: The specific interface names are S_RNGAM and D_RNGAM.

FORTRAN 77 Interface

Single: CALL RNGAM (NR, A, R)

Double: The double precision name is DRNGAM.

Description

Routine RNGAM generates pseudorandom numbers from a gamma distribution with shape parameter a and unit scale parameter. The probability density function is

 

Various computational algorithms are used depending on the value of the shape parameter a. For the special case of a = 0.5, squared and halved normal deviates are used; and for the special case of a = 1.0, exponential deviates (from IMSL routine RNEXP) are used. Otherwise, if a is less than 1.0, an acceptance‑rejection method due to Ahrens, described in Ahrens and Dieter (1974), is used; if a is greater than 1.0, a ten‑region rejection procedure developed by Schmeiser and Lal (1980) is used.

Deviates from the two‑parameter gamma distribution with shape parameter a and scale parameter b can be generated by using RNGAM and then multiplying each entry in R by b. The following statements (in single precision) would yield random deviates from a gamma (ab) distribution.

 

CALL RNGAM (NR, A, R)

CALL SSCAL (NR, B, R, 1)

The Erlang distribution is a standard gamma distribution with the shape parameter having a value equal to a positive integer; hence, RNGAM generates pseudorandom deviates from an Erlang distribution with no modifications required.

Comments

The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator.

Example

In this example, RNGAM is used to generate five pseudorandom deviates from a gamma (Erlang) distribution with shape parameter equal to 3.0.

 

USE RNGAM_INT

USE UMACH_INT

USE RNSET_INT

 

IMPLICIT NONE

INTEGER NR

PARAMETER (NR=5)

!

INTEGER ISEED, NOUT

REAL A, R(NR)

!

CALL UMACH (2, NOUT)

A = 3.0

ISEED = 123457

CALL RNSET (ISEED)

CALL RNGAM (A, R)

WRITE (NOUT,99999) R

99999 FORMAT (' Gamma(3) random deviates: ', 5F8.4)

END

Output

 

Gamma(3) random deviates: 6.8428 3.4452 1.8535 3.9992 0.7794