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 
 * lognormal distribution. Its density is
 * 
 * 

*
* f (x) = (1/((2π)1/2σx)e-(ln(x)-μ)2/(2σ2) for x > 0, *

* where σ > 0. * *

* The (non-static) nextDouble method simply calls inverseF on the * lognormal distribution object. * One can also generate a lognormal random variate X via * *

*
* X = Math.exp (NormalGen.nextDouble (s, mu, sigma)), *

* in which * NormalGen can actually be replaced by any subclass of NormalGen. * */ public class LognormalGen extends RandomVariateGen { private double mu; private double sigma = -1.0; /** * Creates a lognormal random variate generator with parameters * μ = mu and σ = sigma, using stream s. * */ public LognormalGen (RandomStream s, double mu, double sigma) { this (s, new LognormalDist(mu, sigma)); setParams (mu, sigma); } /** * Creates a lognormal random variate generator with parameters * μ = 0 and * σ = 1, using stream s. * */ public LognormalGen (RandomStream s) { this (s, 0.0, 1.0); } /** * Create a random variate generator for the lognormal * distribution dist and stream s. * */ public LognormalGen (RandomStream s, LognormalDist dist) { super (s, dist); if (dist != null) setParams (dist.getMu(), dist.getSigma()); } /** * Generates a new variate from the lognormal * distribution with parameters μ = mu and * σ = sigma, using stream s. * */ public static double nextDouble (RandomStream s, double mu, double sigma) { return LognormalDist.inverseF (mu, sigma, s.nextDouble()); } /** * Returns the parameter μ of this object. * */ public double getMu() { return mu; } /** * Returns the parameter σ of this object. * * */ public double getSigma() { return sigma; } /** * Sets the parameters μ and σ of this object. * */ protected void setParams (double mu, double sigma) { if (sigma <= 0) throw new IllegalArgumentException ("sigma <= 0"); this.mu = mu; this.sigma = sigma; } }

Ads help maintain this website.