package umontreal.iro.lecuyer.randvar;
import umontreal.iro.lecuyer.rng.*;
import umontreal.iro.lecuyer.probdist.*;
/**
* This class implements Erlang random variate generators using
* the convolution method. This method uses inversion to
* generate k exponential variates with parameter λ and returns
* their sum.
*
*/
public class ErlangConvolutionGen extends ErlangGen {
/**
* Creates an Erlang random variate generator with parameters
* k and λ = lambda,
* using stream s.
*
*/
public ErlangConvolutionGen (RandomStream s, int k, double lambda) {
super (s, null);
setParams (k, lambda);
}
/**
* Creates an Erlang random variate generator with parameters
* k and
* λ = 1, using stream s.
*
*/
public ErlangConvolutionGen (RandomStream s, int k) {
this (s, k, 1.0);
}
/**
* Creates a new generator for the distribution dist
* and stream s.
*
*/
public ErlangConvolutionGen (RandomStream s, ErlangDist dist) {
super (s, dist);
if (dist != null)
setParams (dist.getK(), dist.getLambda());
}
public double nextDouble() {
return convolution (stream, k, lambda);
}
public static double nextDouble (RandomStream s, int k, double lambda) {
return convolution (s, k, lambda);
}
private static double convolution (RandomStream s, int k, double lambda) {
double x = 0.0;
for (int i=0; i
Ads help maintain this website.