umontreal.iro.lecuyer.randvar.ChiGen Maven / Gradle / Ivy
Show all versions of ssj Show documentation
/*
* Class: ChiGen
* Description: random variate generators for the chi distribution
* Environment: Java
* Software: SSJ
* Copyright (C) 2001 Pierre L'Ecuyer and Université de Montréal
* Organization: DIRO, Université de Montréal
* @author
* @since
* SSJ is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License (GPL) as published by the
* Free Software Foundation, either version 3 of the License, or
* any later version.
* SSJ is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* A copy of the GNU General Public License is available at
GPL licence site.
*/
package umontreal.iro.lecuyer.randvar;
import umontreal.iro.lecuyer.rng.*;
import umontreal.iro.lecuyer.probdist.*;
/**
* This class implements random variate generators for the
* chi distribution. It has ν > 0 degrees of freedom and
* its density function is
*
*
*
* f (x) = e-x2/2xν-1/(2(ν/2)-1Γ(ν/2)) for x > 0
*
* where
* Γ(x) is the gamma function defined
* in {@link GammaGen}.
*
*
* The (non-static) nextDouble method simply calls inverseF on the
* distribution (slow).
*
*/
public class ChiGen extends RandomVariateGen {
protected int nu = -1;
/**
* Creates a chi random variate generator with
* ν = nu degrees of freedom, using stream s.
*
*/
public ChiGen (RandomStream s, int nu) {
super (s, new ChiDist(nu));
setParams (nu);
}
/**
* Create a new generator for the distribution dist,
* using stream s.
*
*/
public ChiGen (RandomStream s, ChiDist dist) {
super (s, dist);
if (dist != null)
setParams (dist.getNu ());
}
/**
* Generates a random variate from the chi distribution with ν = nu
* degrees of freedom, using stream s.
*
*/
public static double nextDouble (RandomStream s, int nu) {
if (nu <= 0)
throw new IllegalArgumentException ("nu <= 0");
return ChiDist.inverseF (nu, s.nextDouble());
}
/**
* Returns the value of ν for this object.
*
*
*/
public int getNu() {
return nu;
}
protected void setParams (int nu) {
if (nu <= 0)
throw new IllegalArgumentException ("nu <= 0");
this.nu = nu;
}
}