home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / queuem2 / xpnlrng.mod < prev   
Text File  |  1989-08-31  |  3KB  |  107 lines

  1. (* source: h:\modula\code\random\XpnlRNG.MOD    v1.0a       revised: 88.06.09
  2.    author: G.Greene, AGCS D/429 (NS/TS), 312/681-7783       created: 88.06.09
  3.  
  4.    function:
  5.     This is the implementation code for a package which provides a generator
  6.     of exponentially-distributed pseudo-random variates.  The numbers are in
  7.     the form of double-precision reals.
  8.  
  9.    history:
  10.     88.06.09  1.0a  initial release.
  11. *)
  12.  
  13. IMPLEMENTATION MODULE  XpnlRNG;
  14.  
  15.  
  16. FROM  MATHLIB   IMPORT (*PROC*) Log, Exp;
  17.  
  18. FROM  UnifRNG   IMPORT (*PROC*) NonzeroUniformVariate;
  19.  
  20.  
  21.  
  22. (*  Return as the function value an exponentially-distributed LongReal value,
  23.     with mean (= standard deviation) specified by the parameter.
  24. *)
  25.  
  26. PROCEDURE  ExponentialVariate (
  27.                        (*in*)  Mean: REAL ): LONGREAL;
  28.  
  29. BEGIN
  30.   RETURN  LONGREAL ( - Mean ) * Log ( NonzeroUniformVariate ( ) )
  31. END  ExponentialVariate;
  32.  
  33.  
  34.  
  35. (*  Return as the function value a random variate of the Weibull
  36.     distribution with characteristic life and shape parameters specified
  37.     by the corresponding function parameters.  Both parameters must be
  38.     greater than zero (the function returns -1, otherwise).  Possible
  39.     valid values of the function range from zero to +infinity.
  40. *)
  41.  
  42. PROCEDURE  WeibullVariate (
  43.                    (*in*)  CharacteristicLife: REAL;
  44.                    (*in*)  Shape:              REAL ): LONGREAL;
  45.  
  46. BEGIN
  47.   IF  ( CharacteristicLife <= 0.0 )  OR  ( Shape <= 0.0 )  THEN
  48.     RETURN  -1.0;
  49.  
  50.   ELSE
  51.     RETURN  LONGREAL ( CharacteristicLife ) *
  52.  
  53.              (* the following expression is equivalent to:
  54.                    ( -ln ( R ) ** ( 1 / Shape )
  55.                 ... where "**" is the FORTRAN exponential operator
  56.              *)
  57.  
  58.             Exp ( Log ( - Log ( NonzeroUniformVariate ( ) ) ) /
  59.                                                       LONGREAL ( Shape ) );
  60.   END;
  61. END  WeibullVariate;
  62.  
  63. (*                                                                         [2]
  64.  source: h:\modula\code\random\XpnlRNG.MOD    v1.0a       revised: 88.06.09 *)
  65.  
  66.  
  67. (*  Return as the function value a random variate of the logistic
  68.     distribution, with mean and standard deviation specified by the
  69.     corresponding function parameters.
  70. *)
  71.  
  72. PROCEDURE  LogisticVariate (
  73.                     (*in*)  Mean:    REAL;
  74.                     (*in*)  StdDev:  REAL ): LONGREAL;
  75.  
  76. CONST
  77.   Factor = 0.4189192692;    (* = sqrt (3) / pi *)
  78.  
  79. VAR
  80.   UniformVariate: LONGREAL;
  81.  
  82. BEGIN
  83.   UniformVariate := NonzeroUniformVariate ( );
  84.  
  85.   RETURN  LONGREAL ( Mean )  +  LONGREAL ( StdDev ) * Factor *
  86.                       Log ( UniformVariate / ( 1.0 - UniformVariate ) )
  87. END  LogisticVariate;
  88.  
  89.  
  90.  
  91. (*  Return as the function value a variate of the extreme-value distribution.
  92.     The mode and scale of the distribution are specified by the corresponding
  93.     function parameters.
  94. *)
  95.  
  96. PROCEDURE  ExtremeValueVariate (
  97.                         (*in*)  Mode:   REAL;
  98.                         (*in*)  Scale:  REAL ): LONGREAL;
  99.  
  100. BEGIN
  101.   RETURN  LONGREAL ( Mode )  +
  102.           LONGREAL ( Scale ) * Log ( - Log ( NonzeroUniformVariate ( ) ) )
  103. END  ExtremeValueVariate;
  104.  
  105.  
  106. END  XpnlRNG.
  107.