Class Distributions


  • public class Distributions
    extends java.lang.Object
    Contains methods for conveniently generating pseudo-random numbers from special distributions such as the Burr, Cauchy, Erlang, Geometric, Lambda, Laplace, Logistic, Weibull, etc.

    About this class:

    All distributions are obtained by using a uniform pseudo-random number generator. followed by a transformation to the desired distribution.

    Example usage:

     cern.jet.random.engine.RandomEngine generator;
     generator = new cern.jet.random.engine.MersenneTwister(new java.util.Date());
     //generator = new edu.cornell.lassp.houle.RngPack.Ranecu(new java.util.Date());
     //generator = new edu.cornell.lassp.houle.RngPack.Ranmar(new java.util.Date());
     //generator = new edu.cornell.lassp.houle.RngPack.Ranlux(new java.util.Date());
     //generator = AbstractDistribution.makeDefaultGenerator();
     for (int i=1000000; --i >=0; ) {
        int cauchy = Distributions.nextCauchy(generator);
        ...
     }
     
    Version:
    1.0, 09/24/99
    See Also:
    MersenneTwister, Random, Math
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected Distributions()
      Makes this class non instantiable, but still let's others inherit from it.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static double geometricPdf​(int k, double p)
      Returns the probability distribution function of the discrete geometric distribution.
      static double nextBurr1​(double r, int nr, RandomEngine randomGenerator)
      Returns a random number from the Burr II, VII, VIII, X Distributions.
      static double nextBurr2​(double r, double k, int nr, RandomEngine randomGenerator)
      Returns a random number from the Burr III, IV, V, VI, IX, XII distributions.
      static double nextCauchy​(RandomEngine randomGenerator)
      Returns a cauchy distributed random number from the standard Cauchy distribution C(0,1).
      static double nextErlang​(double variance, double mean, RandomEngine randomGenerator)
      Returns an erlang distributed random number with the given variance and mean.
      static int nextGeometric​(double p, RandomEngine randomGenerator)
      Returns a discrete geometric distributed random number; Definition.
      static double nextLambda​(double l3, double l4, RandomEngine randomGenerator)
      Returns a lambda distributed random number with parameters l3 and l4.
      static double nextLaplace​(RandomEngine randomGenerator)
      Returns a Laplace (Double Exponential) distributed random number from the standard Laplace distribution L(0,1).
      static double nextLogistic​(RandomEngine randomGenerator)
      Returns a random number from the standard Logistic distribution Log(0,1).
      static double nextPowLaw​(double alpha, double cut, RandomEngine randomGenerator)
      Returns a power-law distributed random number with the given exponent and lower cutoff.
      static double nextTriangular​(RandomEngine randomGenerator)
      Returns a random number from the standard Triangular distribution in (-1,1).
      static double nextWeibull​(double alpha, double beta, RandomEngine randomGenerator)
      Returns a weibull distributed random number.
      static int nextZipfInt​(double z, RandomEngine randomGenerator)
      Returns a zipfian distributed random number with the given skew.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Distributions

        protected Distributions()
        Makes this class non instantiable, but still let's others inherit from it.
    • Method Detail

      • geometricPdf

        public static double geometricPdf​(int k,
                                          double p)
        Returns the probability distribution function of the discrete geometric distribution.

        p(k) = p * (1-p)^k for k >= 0.

        Parameters:
        k - the argument to the probability distribution function.
        p - the parameter of the probability distribution function.
      • nextBurr1

        public static double nextBurr1​(double r,
                                       int nr,
                                       RandomEngine randomGenerator)
        Returns a random number from the Burr II, VII, VIII, X Distributions.

        Implementation: Inversion method. This is a port of burr1.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

        L. Devroye (1986): Non-Uniform Random Variate Generation, Springer Verlag, New York.

        Parameters:
        r - must be > 0.
        nr - the number of the burr distribution (e.g. 2,7,8,10).
      • nextBurr2

        public static double nextBurr2​(double r,
                                       double k,
                                       int nr,
                                       RandomEngine randomGenerator)
        Returns a random number from the Burr III, IV, V, VI, IX, XII distributions.

        Implementation: Inversion method. This is a port of burr2.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

        L. Devroye (1986): Non-Uniform Random Variate Generation, Springer Verlag, New York.

        Parameters:
        r - must be > 0.
        k - must be > 0.
        nr - the number of the burr distribution (e.g. 3,4,5,6,9,12).
      • nextErlang

        public static double nextErlang​(double variance,
                                        double mean,
                                        RandomEngine randomGenerator)
        Returns an erlang distributed random number with the given variance and mean.
      • nextGeometric

        public static int nextGeometric​(double p,
                                        RandomEngine randomGenerator)
        Returns a discrete geometric distributed random number; Definition.

        p(k) = p * (1-p)^k for k >= 0.

        Implementation: Inversion method. This is a port of geo.c from the C-RAND / WIN-RAND library.

        Parameters:
        p - must satisfy 0 < p < 1.

      • nextLambda

        public static double nextLambda​(double l3,
                                        double l4,
                                        RandomEngine randomGenerator)
        Returns a lambda distributed random number with parameters l3 and l4.

        Implementation: Inversion method. This is a port of lamin.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

        J.S. Ramberg, B:W. Schmeiser (1974): An approximate method for generating asymmetric variables, Communications ACM 17, 78-82.

      • nextLaplace

        public static double nextLaplace​(RandomEngine randomGenerator)
        Returns a Laplace (Double Exponential) distributed random number from the standard Laplace distribution L(0,1).

        Implementation: Inversion method. This is a port of lapin.c from the C-RAND / WIN-RAND library.

      • nextLogistic

        public static double nextLogistic​(RandomEngine randomGenerator)
        Returns a random number from the standard Logistic distribution Log(0,1).

        Implementation: Inversion method. This is a port of login.c from the C-RAND / WIN-RAND library.

      • nextPowLaw

        public static double nextPowLaw​(double alpha,
                                        double cut,
                                        RandomEngine randomGenerator)
        Returns a power-law distributed random number with the given exponent and lower cutoff.
        Parameters:
        alpha - the exponent
        cut - the lower cutoff
      • nextTriangular

        public static double nextTriangular​(RandomEngine randomGenerator)
        Returns a random number from the standard Triangular distribution in (-1,1).

        Implementation: Inversion method. This is a port of tra.c from the C-RAND / WIN-RAND library.

      • nextWeibull

        public static double nextWeibull​(double alpha,
                                         double beta,
                                         RandomEngine randomGenerator)
        Returns a weibull distributed random number. Polar method. See Simulation, Modelling & Analysis by Law & Kelton, pp259
      • nextZipfInt

        public static int nextZipfInt​(double z,
                                      RandomEngine randomGenerator)
        Returns a zipfian distributed random number with the given skew.

        Algorithm from page 551 of: Devroye, Luc (1986) `Non-uniform random variate generation', Springer-Verlag: Berlin. ISBN 3-540-96305-7 (also 0-387-96305-7)

        Parameters:
        z - the skew of the distribution (must be >1.0).