Generates pseudorandom numbers from a beta distribution.
PIN — First beta
distribution parameter. (Input)
PIN must be
positive.
QIN — Second beta
distribution parameter. (Input)
QIN must be
positive.
R — Vector of length NR containing the random standard beta deviates. (Output)
NR — Number of
random numbers to generate. (Input)
Default: NR = size (R,1).
Generic: CALL RNBET (PIN, QIN, R [,…])
Specific: The specific interface names are S_RNBET and D_RNBET.
Single: CALL RNBET (NR, PIN, QIN, R)
Double: The double precision name is DRNBET.
Routine RNBET generates pseudorandom numbers from a beta distribution with parameters PIN and QIN, both of which must be positive. With p = PIN and q = QIN, the probability density function is
where Γ(⋅) is the gamma function.
The algorithm used depends on the values of p and
q. Except for the trivial cases of p = 1 or
q = 1, in
which the inverse CDF method is used, all of the methods use
acceptance/rejection. If p and q are both less than 1, the method
of Johnk (1964) is used; if either p or q is less than 1 and the
other is greater than 1, the method of Atkinson (1979) is used; if both p
and q are greater than 1, algorithm BB of Cheng (1978), which requires
very little setup time, is used if NR
is less than 4; and algorithm B4PE of Schmeiser and Babu (1980) is used if NR
is greater than or equal to 4. Note that for p and q both greater
than 1, calling RNBET
in a loop getting less than 4 variates on each call will not yield the same set
of deviates as calling RNBET
once and getting all the deviates at once.
The values returned in R are less than 1.0 and greater than ε, where ε is the smallest positive number such that 1.0 − ε is less than 1.0.
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, RNBET is used to generate five pseudorandom beta (3, 2) variates.
USE RNBET_INT
USE UMACH_INT
USE RNSET_INT
IMPLICIT NONE
INTEGER NR
PARAMETER (NR=5)
!
INTEGER ISEED, NOUT
REAL PIN, QIN, R(NR)
!
CALL UMACH (2, NOUT)
PIN = 3.0
QIN = 2.0
ISEED = 123457
CALL RNSET (ISEED)
CALL RNBET (PIN, QIN, R)
WRITE (NOUT,99999) R
99999 FORMAT (' Beta (3,2) random deviates: ', 5F7.4)
END
Beta (3,2) random deviates: 0.2814 0.9483 0.3984 0.3103 0.8296
PHONE: 713.784.3131 FAX:713.781.9260 |