Class StudentT
- java.lang.Object
-
- com.opengamma.strata.math.impl.cern.StudentT
-
- All Implemented Interfaces:
Serializable
,Cloneable
,DoubleUnaryOperator
,IntUnaryOperator
public class StudentT extends Object
StudentT distribution (aka T-distribution); See the math definition and animated definition.p(x) = k * (1+x^2/f) ^ -(f+1)/2 where k = g((f+1)/2) / (sqrt(pi*f) * g(f/2)) and 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: Adapted Polar Box-Muller transformation.
- This is a port of RandStudentT used in CLHEP 1.4.0 (C++). CLHEP's implementation, in turn, is based on tpol.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon
R.W. Bailey (1994): Polar generation of random variates with the t-distribution, Mathematics of Computation 62, 779-781.
- 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 StudentT
shared
protected double
TERM
-
Constructor Summary
Constructors Constructor Description StudentT(double freedom, RandomEngine randomGenerator)
Constructs a StudentT 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 degreesOfFreedom)
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
-
TERM
protected double TERM
-
shared
protected static StudentT shared
-
randomGenerator
protected RandomEngine randomGenerator
-
-
Constructor Detail
-
StudentT
public StudentT(double freedom, RandomEngine randomGenerator)
Constructs a StudentT distribution. Example: freedom=1.0.- Parameters:
freedom
- degrees of freedom.randomGenerator
- input- Throws:
IllegalArgumentException
- if freedom <= 0.0.
-
-
Method Detail
-
cdf
public double cdf(double x)
Returns the cumulative distribution function.- Parameters:
x
- input- Returns:
- result
-
nextDouble
public double nextDouble()
Returns a random number from the distribution.- Returns:
- result
-
nextDouble
public double nextDouble(double degreesOfFreedom)
Returns a random number from the distribution; bypasses the internal state.- Parameters:
degreesOfFreedom
- degrees of freedom.- Returns:
- result
- Throws:
IllegalArgumentException
- if a <= 0.0.
-
pdf
public double pdf(double x)
Returns the probability distribution function.- Parameters:
x
- input- Returns:
- result
-
setState
public void setState(double freedom)
Sets the distribution parameter.- Parameters:
freedom
- degrees of freedom.- Throws:
IllegalArgumentException
- if freedom <= 0.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 <= 0.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
-
-