Package sim.util.distribution
Class Binomial
java.lang.Object
sim.util.distribution.AbstractDistribution
sim.util.distribution.AbstractDiscreteDistribution
sim.util.distribution.Binomial
- All Implemented Interfaces:
Serializable
Binomial distribution; See the math definition
and animated definition.
Static methods operate on a default uniform random number generator; they are synchronized.
p(k) = C(n,k) * p^k * (1-p)^(n-k) with C(n,k) = n! / (k! * (n-k)!).
Instance methods operate on a user supplied uniform random number generator; they are unsynchronized.
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.
- See Also:
-
Field Summary
Fields inherited from class sim.util.distribution.AbstractDistribution
randomGenerator
-
Constructor Summary
ConstructorDescriptionBinomial
(int n, double p, MersenneTwisterFast randomGenerator) Constructs a binomial distribution. -
Method Summary
Modifier and TypeMethodDescriptiondouble
cdf
(int k) Returns the cumulative distribution function.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).int
nextInt()
Returns a random number from the distribution.int
nextInt
(int n, double p) Returns a random number from the distribution with the given parameters n and p; bypasses the internal state.double
pdf
(int k) Returns the probability distribution function.void
setNandP
(int n, double p) Sets the parameters number of trials and the probability of success.toString()
Returns a String representation of the receiver.Methods inherited from class sim.util.distribution.AbstractDiscreteDistribution
nextDouble
Methods inherited from class sim.util.distribution.AbstractDistribution
apply, apply, getRandomGenerator, setRandomGenerator
-
Field Details
-
n
protected int n -
p
protected double p
-
-
Constructor Details
-
Binomial
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 classAbstractDiscreteDistribution
-
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 trialsp
- 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 trialsp
- the probability of success.- Throws:
IllegalArgumentException
- if n*Math.min(p,1-p) <= 0.0
-
toString
Returns a String representation of the receiver.
-