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
 * normal distribution 
 * N(μ, σ).
 * It has mean μ and variance σ2, where σ > 0.
 *  Its density function is
 * 

*

*
* f (x) = 1/(2π)1/2σe(x-μ)2/(2σ2) *

* The nextDouble method simply calls inverseF on the * distribution. * *

* The following table gives the CPU time needed to generate 108 standard * normal random variates using the different implementations available in SSJ. * The first time is for a generator object (non-static method), and * the second time is for the static method * where no object is created. * These tests were made on a machine with processor AMD Athlon 4000, running * Red Hat Linux, with clock speed at 2403 MHz. The static method * nextDouble() for NormalBoxMullerGen and * NormalPolarGen uses only one number out of two that are * generated; thus they are twice slower than the non-static method. * *

*

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Generatortime in secondstime in seconds
 (object)(static)
NormalGen7.677.72
NormalACRGen4.714.76
NormalBoxMullerGen16.0731.45
NormalPolarGen7.3113.74
NormalKindermannRamageGen5.385.34
*
* */ public class NormalGen extends RandomVariateGen { protected double mu; protected double sigma = -1.0; /** * Creates a normal random variate generator with mean mu * and standard deviation sigma, using stream s. * */ public NormalGen (RandomStream s, double mu, double sigma) { super (s, new NormalDist(mu, sigma)); setParams (mu, sigma); } /** * Creates a standard normal random variate generator with mean * 0 and standard deviation 1, using stream s. * */ public NormalGen (RandomStream s) { this (s, 0.0, 1.0); } /** * Creates a random variate generator for the normal distribution * dist and stream s. * */ public NormalGen (RandomStream s, NormalDist dist) { super (s, dist); if (dist != null) setParams (dist.getMu(), dist.getSigma()); } /** * Generates a variate from the normal distribution with * parameters μ = mu and σ = sigma, using * stream s. * */ public static double nextDouble (RandomStream s, double mu, double sigma) { return NormalDist.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.