Author(s): F. James | Library: MATHLIB |
Submitter: | Submitted: 27.11.1984 |
Language: Fortran | Revised: |
Structure:
SUBROUTINE subprograms
User Entry Names: FUNRAN, FUNPRE
Internal Entry Names: FUNZER
Files Referenced: Printer
External References: GAUSS, RNDM,
user-supplied FUNCTION subprogram
COMMON Block Names and Lengths: /FUNINT/ 1
Usage:
CALL FUNPRE(F,FSPACE,XLOW,XHIGH) | (once for each function) | ||
CALL FUNRAN(FSPACE,XRAN) | (for each random number) |
Method:
In FUNPRE, the percentiles are calculated using a combination of trapezoidal and Gaussian integration to a rather high accuracy, which is printed out by FUNPRE. If the desired accuracy is not obtained, an warning is printed in addition.
Subroutine FUNRAN finds the desired random number by calling RNDM (V104) and doing a 4-point interpolation on FSPACE to transform the uniform random number to the distribution specified. This method produces quite accurately distributed numbers even when the function F is badly skew or spiked as long as the width of a spike is not less than 1/1000 of the total range.
Error handling:
An error message is printed
Notes:
Some additional information which may be of use is contained in
COMMON / FUNINT/ FINTAfter a call to FUNPRE, FINT contains the integral of F from XLOW to XHIGH.
After a call to FUNRAN, FINT contains the integral of
F from XLOW to XRAN, divided by the total integral
to XHIGH (i.e., it will be a number uniformly distributed
between zero and one).