Class Empirical
- All Implemented Interfaces:
Serializable
The probability distribution function (pdf) must be provided by the user as an array of positive real numbers. The pdf does not need to be provided in the form of relative probabilities, absolute probabilities are also accepted.
If interpolationType == LINEAR_INTERPOLATION a linear interpolation within the bin is computed, resulting in a constant density within each bin.
Instance methods operate on a user supplied uniform random number generator; they are unsynchronized.
Implementation: A uniform random number is generated using a user supplied generator. The uniform number is then transformed to the user's distribution using the cumulative probability distribution constructed from the pdf. The cumulative distribution is inverted using a binary search for the nearest bin boundary.
This is a port of RandGeneral used in CLHEP 1.4.0 (C++).
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected double[]
protected int
static final int
static final int
Fields inherited from class sim.util.distribution.AbstractDistribution
randomGenerator
-
Constructor Summary
ConstructorDescriptionEmpirical
(double[] pdf, int interpolationType, MersenneTwisterFast randomGenerator) Constructs an Empirical distribution. -
Method Summary
Modifier and TypeMethodDescriptiondouble
cdf
(int k) Returns the cumulative distribution function.double
Returns a random number from the distribution.double
pdf
(double x) Returns the probability distribution function.double
pdf
(int k) Returns the probability distribution function.void
setState
(double[] pdf, int interpolationType) Sets the distribution parameters.toString()
Returns a String representation of the receiver.Methods inherited from class sim.util.distribution.AbstractDistribution
apply, apply, getRandomGenerator, nextInt, setRandomGenerator
-
Field Details
-
cdf
protected double[] cdf -
interpolationType
protected int interpolationType -
LINEAR_INTERPOLATION
public static final int LINEAR_INTERPOLATION- See Also:
-
NO_INTERPOLATION
public static final int NO_INTERPOLATION- See Also:
-
-
Constructor Details
-
Empirical
Constructs an Empirical distribution. The probability distribution function (pdf) is an array of positive real numbers. It need not be provided in the form of relative probabilities, absolute probabilities are also accepted. The pdf must satisfy both of the following conditions- 0.0 <= pdf[i] : 0<=i<=pdf.length-1
- 0.0 < Sum(pdf[i]) : 0<=i<=pdf.length-1
- Parameters:
pdf
- the probability distribution function.interpolationType
- can be either Empirical.NO_INTERPOLATION or Empirical.LINEAR_INTERPOLATION.randomGenerator
- a uniform random number generator.- Throws:
IllegalArgumentException
- if at least one of the three conditions above is violated.
-
-
Method Details
-
cdf
public double cdf(int k) Returns the cumulative distribution function. -
nextDouble
public double nextDouble()Returns a random number from the distribution.- Specified by:
nextDouble
in classAbstractDistribution
-
pdf
public double pdf(double x) Returns the probability distribution function. -
pdf
public double pdf(int k) Returns the probability distribution function. -
setState
public void setState(double[] pdf, int interpolationType) Sets the distribution parameters. The pdf must satisfy both of the following conditions- 0.0 <= pdf[i] : 0 < =i <= pdf.length-1
- 0.0 < Sum(pdf[i]) : 0 <=i <= pdf.length-1
- Parameters:
pdf
- probability distribution function.interpolationType
- can be either Empirical.NO_INTERPOLATION or Empirical.LINEAR_INTERPOLATION.- Throws:
IllegalArgumentException
- if at least one of the three conditions above is violated.
-
toString
Returns a String representation of the receiver.
-