Generates pseudorandom numbers from a standard gamma distribution.
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)
NR — Number of
random numbers to generate. (Input)
Default: NR = size (R,1).
Generic: CALL RNGAM (A, R [,…])
Specific: The specific interface names are S_RNGAM and D_RNGAM.
Single: CALL RNGAM (NR, A, R)
Double: The double precision name is DRNGAM.
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 (a, b) 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.
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.
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
Gamma(3) random deviates: 6.8428 3.4452 1.8535 3.9992 0.7794
PHONE: 713.784.3131 FAX:713.781.9260 |