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.