Package cern.jet.random
Class Binomial
java.lang.Object
cern.colt.PersistentObject
cern.jet.random.AbstractDistribution
cern.jet.random.AbstractDiscreteDistribution
cern.jet.random.Binomial
- All Implemented Interfaces:
DoubleFunction
,IntFunction
,Serializable
,Cloneable
Binomial distribution; See the math definition
and animated definition.
Static methods operate on a default uniform random number generator; they are synchronized.
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.
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
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
private double
private double
private double
private double
private double
private double
private double
private int
protected int
private int
private int
private int
private double
protected double
private double
private double
private double
private double
private double
private double
private double
private double
private double
private double
private double
protected static Binomial
private double
private double
private double
private double
Fields inherited from class cern.jet.random.AbstractDistribution
randomGenerator
Fields inherited from class cern.colt.PersistentObject
serialVersionUID
-
Constructor Summary
ConstructorsConstructorDescriptionBinomial
(int n, double p, RandomEngine randomGenerator) Constructs a binomial distribution. -
Method Summary
Modifier and TypeMethodDescriptiondouble
cdf
(int k) Returns the cumulative distribution function.private double
cdfSlow
(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.static int
staticNextInt
(int n, double p) Returns a random number from the distribution with the given parameters n and p.toString()
Returns a String representation of the receiver.private static void
xstaticSetRandomGenerator
(RandomEngine randomGenerator) Sets the uniform random number generated shared by all static methods.Methods inherited from class cern.jet.random.AbstractDiscreteDistribution
nextDouble
Methods inherited from class cern.jet.random.AbstractDistribution
apply, apply, clone, getRandomGenerator, makeDefaultGenerator, setRandomGenerator
-
Field Details
-
n
protected int n -
p
protected double p -
n_last
private int n_last -
n_prev
private int n_prev -
par
private double par -
np
private double np -
p0
private double p0 -
q
private double q -
p_last
private double p_last -
p_prev
private double p_prev -
b
private int b -
m
private int m -
nm
private int nm -
pq
private double pq -
rc
private double rc -
ss
private double ss -
xm
private double xm -
xl
private double xl -
xr
private double xr -
ll
private double ll -
lr
private double lr -
c
private double c -
p1
private double p1 -
p2
private double p2 -
p3
private double p3 -
p4
private double p4 -
ch
private double ch -
log_p
private double log_p -
log_q
private double log_q -
log_n
private double log_n
-
-
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. -
cdfSlow
private double cdfSlow(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
-
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 trialsp
- the probability of success.- Throws:
IllegalArgumentException
- if n*Math.min(p,1-p) <= 0.0
-
toString
Returns a String representation of the receiver. -
xstaticSetRandomGenerator
Sets the uniform random number generated shared by all static methods.- Parameters:
randomGenerator
- the new uniform random number generator to be shared.
-