Class Binomial

All Implemented Interfaces:
DoubleFunction, IntFunction, Serializable, Cloneable

public class Binomial extends AbstractDiscreteDistribution
Binomial distribution; See the math definition and animated definition.

p(x) = k * p^k * (1-p)^(n-k) with k = n! / (k! * (n-k)!).

Instance methods operate on a user supplied uniform random number generator; they are unsynchronized.

Static methods operate on a default uniform random number generator; they are synchronized.

Implementation: High performance implementation. Acceptance Rejection/Inversion method. This is a port of RandBinomial used in CLHEP 1.4.0 (C++). CLHEP's implementation is, in turn, based on

V. Kachitvichyanukul, B.W. Schmeiser (1988): Binomial random variate generation, Communications of the ACM 31, 216-222.

Version:
1.0, 09/24/99
Author:
wolfgang.hoschek@cern.ch
See Also:
  • Field Details

    • n

      protected int n
    • p

      protected double p
    • shared

      protected static Binomial shared
  • Constructor Details

    • Binomial

      public Binomial(int n, double p, RandomEngine randomGenerator)
      Constructs a binomial distribution. Example: n=1, p=0.5.
      Parameters:
      n - the number of trials (also known as sample size).
      p - the probability of success.
      randomGenerator - a uniform random number generator.
      Throws:
      IllegalArgumentException - if n*Math.min(p,1-p) <= 0.0
  • Method Details

    • cdf

      public double cdf(int k)
      Returns the cumulative distribution function.
    • generateBinomial

      protected int generateBinomial(int n, double p)
      * Binomial-Distribution - Acceptance Rejection/Inversion * * * Acceptance Rejection method combined with Inversion for * generating Binomial random numbers with parameters * n (number of trials) and p (probability of success). * For min(n*p,n*(1-p)) invalid input: '<' 10 the Inversion method is applied: * The random numbers are generated via sequential search, * starting at the lowest index k=0. The cumulative probabilities * are avoided by using the technique of chop-down. * For min(n*p,n*(1-p)) >= 10 Acceptance Rejection is used: * The algorithm is based on a hat-function which is uniform in * the centre region and exponential in the tails. * A triangular immediate acceptance region in the centre speeds * up the generation of binomial variates. * If candidate k is near the mode, f(k) is computed recursively * starting at the mode m. * The acceptance test by Stirling's formula is modified * according to W. Hoermann (1992): The generation of binomial * random variates, to appear in J. Statist. Comput. Simul. * If p invalid input: '<' .5 the algorithm is applied to parameters n, p. * Otherwise p is replaced by 1-p, and k is replaced by n - k. * * * FUNCTION: - samples a random number from the binomial * distribution with parameters n and p and is * valid for n*min(p,1-p) > 0. * REFERENCE: - V. Kachitvichyanukul, B.W. Schmeiser (1988): * Binomial random variate generation, * Communications of the ACM 31, 216-222. * SUBPROGRAMS: - StirlingCorrection() * ... Correction term of the Stirling * approximation for log(k!) * (series in 1/k or table values * for small k) with long int k * - randomGenerator ... (0,1)-Uniform engine * *
    • nextInt

      public int nextInt()
      Returns a random number from the distribution.
      Specified by:
      nextInt in class AbstractDiscreteDistribution
    • nextInt

      public int nextInt(int n, double p)
      Returns a random number from the distribution with the given parameters n and p; bypasses the internal state.
      Parameters:
      n - the number of trials
      p - the probability of success.
      Throws:
      IllegalArgumentException - if n*Math.min(p,1-p) <= 0.0
    • pdf

      public double pdf(int k)
      Returns the probability distribution function.
    • setNandP

      public void setNandP(int n, double p)
      Sets the parameters number of trials and the probability of success.
      Parameters:
      n - the number of trials
      p - the probability of success.
      Throws:
      IllegalArgumentException - if n*Math.min(p,1-p) <= 0.0
    • staticNextInt

      public static int staticNextInt(int n, double p)
      Returns a random number from the distribution with the given parameters n and p.
      Parameters:
      n - the number of trials
      p - the probability of success.
      Throws:
      IllegalArgumentException - if n*Math.min(p,1-p) <= 0.0
    • toString

      public String toString()
      Returns a String representation of the receiver.
      Overrides:
      toString in class Object