package umontreal.iro.lecuyer.randvar;
import umontreal.iro.lecuyer.rng.*;
import umontreal.iro.lecuyer.probdist.*;
/**
* This class implements methods for generating random variates from the
* Gumbel distribution. Its density is given by
*
*
*
* f (x) = e-ze-e-z/| β|, for - ∞ < x < ∞.
*
* where we use the notation
* z = (x - δ)/β. The scale parameter β
* can be positive (for the Gumbel distribution) or negative (for the reverse
* Gumbel distribution), but not 0.
*
*/
public class GumbelGen extends RandomVariateGen {
private double delta;
private double beta;
/**
* Creates a Gumbel random number generator with
* β = 1 and
* δ = 0 using stream s.
*
*/
public GumbelGen (RandomStream s) {
this (s, 1.0, 0.0);
}
/**
* Creates a Gumbel random number generator with parameters
* β = beta and δ = delta using stream s.
*
*/
public GumbelGen (RandomStream s, double beta, double delta) {
super (s, new GumbelDist(beta, delta));
setParams (beta, delta);
}
/**
* Creates a new generator for the Gumbel distribution dist
* and stream s.
*
*/
public GumbelGen (RandomStream s, GumbelDist dist) {
super (s, dist);
if (dist != null)
setParams (dist.getBeta(), dist.getDelta());
}
/**
* Generates a new variate from the Gumbel distribution with parameters
* β = beta and δ = delta using stream s.
*
*/
public static double nextDouble (RandomStream s, double beta, double delta) {
return GumbelDist.inverseF (beta, delta, s.nextDouble());
}
/**
* Returns the parameter β.
*
*/
public double getBeta() {
return beta;
}
/**
* Returns the parameter δ.
*
*
*/
public double getDelta() {
return delta;
}
/**
* Sets the parameters β and δ of this object.
*
*/
protected void setParams (double beta, double delta) {
if (beta == 0.0)
throw new IllegalArgumentException ("beta = 0");
this.delta = delta;
this.beta = beta;
}
}
Ads help maintain this website.