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
 * Student distribution with n > 0 degrees of freedom.
 * Its density function is
 * 

*

*
* f (x) = [Γ((n + 1)/2)/(Γ(n/2)(πn)1/2)][1 + x2/n]-(n+1)/2                for - ∞ < x < ∞, *

* where * Γ(x) is the gamma function defined in * {@link GammaGen}. * *

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

* The following table gives the CPU time needed to generate 107 Student * random variates using the different implementations available in SSJ. * The second test (Q) was made with the inverse in * {@link StudentDistQuick}, * while the first test was made with the inverse in {@link StudentDist}. * These tests were made on a machine with processor AMD Athlon 4000, running * Red Hat Linux, with clock speed at 2400 MHz. * *

*

* * * * * * * * * * * * * *
Generatortime in seconds
StudentGen22.4
StudentGen(Q)6.5
StudentPolarGen1.4
*
* */ public class StudentGen extends RandomVariateGen { protected int n = -1; /** * Creates a Student random variate generator with * n degrees of freedom, using stream s. * */ public StudentGen (RandomStream s, int n) { super (s, new StudentDist(n)); setN (n); } /** * Creates a new generator for the Student distribution dist * and stream s. * */ public StudentGen (RandomStream s, StudentDist dist) { super (s, dist); if (dist != null) setN (dist.getN ()); } /** * Generates a new variate from the Student distribution * with n = n degrees of freedom, using stream s. * */ public static double nextDouble (RandomStream s, int n) { return StudentDist.inverseF (n, s.nextDouble()); } /** * Returns the value of n for this object. * * */ public int getN() { return n; } protected void setN (int nu) { if (nu <= 0) throw new IllegalArgumentException ("n <= 0"); this.n = nu; } }

Ads help maintain this website.