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 
 * folded normal distribution  with
 * parameters μ >=  0 and 
 * σ > 0.
 * The density is
 * 
 * 

*
* f (x) = φ((x - μ/)σ) + φ((- x - μ)/σ)        for x >= 0, *

* where φ denotes the density function of a standard normal distribution. * */ public class FoldedNormalGen extends RandomVariateGen { // Distribution parameters protected double mu; protected double sigma; /** * Creates a new folded normal generator with parameters μ = * mu and σ = sigma, using stream s. * */ public FoldedNormalGen (RandomStream s, double mu, double sigma) { super (s, new FoldedNormalDist (mu, sigma)); setParams (mu, sigma); } /** * Creates a new generator for the distribution dist, * using stream s. * */ public FoldedNormalGen (RandomStream s, FoldedNormalDist dist) { super (s, dist); if (dist != null) setParams (dist.getMu(), dist.getSigma()); } /** * Generates a variate from the folded normal distribution with * parameters μ = mu and σ = sigma, * using stream s. * * @param s the random stream * * @param mu the parameter mu * * @param sigma the parameter sigma * * @return Generates a variate from the FoldedNormal distribution * */ public static double nextDouble (RandomStream s, double mu, double sigma) { return FoldedNormalDist.inverseF (mu, sigma, s.nextDouble()); } /** * Returns the parameter μ of this object. * * @return the parameter mu * */ public double getMu() { return mu; } /** * Returns the parameter σ of this object. * * @return the parameter mu * */ public double getSigma() { return sigma; } protected void setParams (double mu, double sigma) { if (sigma <= 0.0) throw new IllegalArgumentException ("sigma <= 0"); if (mu < 0.0) throw new IllegalArgumentException ("mu < 0"); this.mu = mu; this.sigma = sigma; } }

Ads help maintain this website.