Class ChiSquare
- java.lang.Object
-
- com.opengamma.strata.math.impl.cern.ChiSquare
-
- All Implemented Interfaces:
Serializable
,Cloneable
,DoubleUnaryOperator
,IntUnaryOperator
public class ChiSquare extends Object
ChiSquare distribution; See the math definition and animated definition.- A special case of the Gamma distribution.
p(x) = (1/g(f/2)) * (x/2)^(f/2-1) * exp(-x/2) with g(a) being the gamma function and f being the degrees of freedom.
Valid parameter ranges: freedom > 0.
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:
- Method: Ratio of Uniforms with shift.
- High performance implementation. This is a port of RandChiSquare used in CLHEP 1.4.0 (C++). CLHEP's implementation, in turn, is based on chru.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon
J.F. Monahan (1987): An algorithm for generating chi random variables, ACM Trans. Math. Software 13, 168-172.
- Version:
- 1.0, 09/24/99
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected double
freedom
protected RandomEngine
randomGenerator
protected static ChiSquare
shared
-
Constructor Summary
Constructors Constructor Description ChiSquare(double freedom, RandomEngine randomGenerator)
Constructs a ChiSquare distribution.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description double
applyAsDouble(double dummy)
Equivalent to nextDouble().int
applyAsInt(int dummy)
Equivalent to nextInt().double
cdf(double x)
Returns the cumulative distribution function.Object
clone()
Returns a deep copy of the receiver; the copy will produce identical sequences.protected RandomEngine
getRandomGenerator()
Returns the used uniform random number generator;static RandomEngine
makeDefaultGenerator()
Constructs and returns a new uniform random number generation engine seeded with the current time.double
nextDouble()
Returns a random number from the distribution.double
nextDouble(double freedom)
Returns a random number from the distribution; bypasses the internal state.int
nextInt()
Returns a random number from the distribution; returns (int) Math.round(nextDouble()).double
pdf(double x)
Returns the probability distribution function.protected void
setRandomGenerator(RandomEngine randomGenerator)
Sets the uniform random generator internally used.void
setState(double freedom)
Sets the distribution parameter.static double
staticNextDouble(double freedom)
Returns a random number from the distribution.String
toString()
Returns a String representation of the receiver.-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.function.DoubleUnaryOperator
andThen, compose
-
Methods inherited from interface java.util.function.IntUnaryOperator
andThen, compose
-
-
-
-
Field Detail
-
freedom
protected double freedom
-
shared
protected static ChiSquare shared
-
randomGenerator
protected RandomEngine randomGenerator
-
-
Constructor Detail
-
ChiSquare
public ChiSquare(double freedom, RandomEngine randomGenerator)
Constructs a ChiSquare distribution. Example: freedom=1.0.- Parameters:
freedom
- degrees of freedom.randomGenerator
- generator- Throws:
IllegalArgumentException
- if freedom < 1.0.
-
-
Method Detail
-
cdf
public double cdf(double x)
Returns the cumulative distribution function.- Parameters:
x
- x- Returns:
- result
-
nextDouble
public double nextDouble()
Returns a random number from the distribution.- Returns:
- result
-
nextDouble
public double nextDouble(double freedom)
Returns a random number from the distribution; bypasses the internal state.- Parameters:
freedom
- degrees of freedom. It should hold freedom < 1.0.- Returns:
- result
-
pdf
public double pdf(double x)
Returns the probability distribution function.- Parameters:
x
- x- Returns:
- result
-
setState
public void setState(double freedom)
Sets the distribution parameter.- Parameters:
freedom
- degrees of freedom.- Throws:
IllegalArgumentException
- if freedom < 1.0.
-
staticNextDouble
public static double staticNextDouble(double freedom)
Returns a random number from the distribution.- Parameters:
freedom
- degrees of freedom.- Returns:
- result
- Throws:
IllegalArgumentException
- if freedom < 1.0.
-
toString
public String toString()
Returns a String representation of the receiver.
-
applyAsDouble
public double applyAsDouble(double dummy)
Equivalent to nextDouble(). This has the effect that distributions can now be used as function objects, returning a random number upon function evaluation.- Specified by:
applyAsDouble
in interfaceDoubleUnaryOperator
-
applyAsInt
public int applyAsInt(int dummy)
Equivalent to nextInt(). This has the effect that distributions can now be used as function objects, returning a random number upon function evaluation.- Specified by:
applyAsInt
in interfaceIntUnaryOperator
-
clone
public Object clone()
Returns a deep copy of the receiver; the copy will produce identical sequences. After this call has returned, the copy and the receiver have equal but separate state.- Returns:
- a copy of the receiver.
-
getRandomGenerator
protected RandomEngine getRandomGenerator()
Returns the used uniform random number generator;- Returns:
- result
-
makeDefaultGenerator
public static RandomEngine makeDefaultGenerator()
Constructs and returns a new uniform random number generation engine seeded with the current time. Currently this isMersenneTwister
.- Returns:
- result
-
nextInt
public int nextInt()
Returns a random number from the distribution; returns (int) Math.round(nextDouble()). Override this method if necessary.- Returns:
- result
-
setRandomGenerator
protected void setRandomGenerator(RandomEngine randomGenerator)
Sets the uniform random generator internally used.- Parameters:
randomGenerator
- input
-
-