SSJ
V. 2.6.

umontreal.iro.lecuyer.probdist
Class InverseDistFromDensity

java.lang.Object
  extended by umontreal.iro.lecuyer.probdist.ContinuousDistribution
      extended by umontreal.iro.lecuyer.probdist.InverseDistFromDensity
All Implemented Interfaces:
Distribution

public class InverseDistFromDensity
extends ContinuousDistribution

Implements a method for computing the inverse of an arbitrary continuous distribution function when only the probability density is known. The cumulative probabilities (cdf) are pre-computed by numerical quadrature of the density using Gauss-Lobatto integration over suitably small intervals to satisfy the required precision, and these values are kept in tables. Then the algorithm uses polynomial interpolation over the tabulated values to get the inverse cdf. The user can select the desired precision and the degree of the interpolating polynomials.

The algorithm may fail for some distributions for which the density becomes infinite at a point (for ex. the Gamma and the Beta distributions with α < 1) if one chooses too high a precision (a too small eps, for ex. ε∼10-15). However, it should work also for continuous densities with finite discontinuities.

While the setup time for this class is relatively slow, the numerical inversion is extremely fast and practically independent of the required precision and of the specific distribution. For comparisons between the times of standard inversion and inversion from this class as well as comparisons between setup times, see the introduction in class InverseFromDensityGen from package randvar.

Thus if only a few inverses are needed, then using this class is not efficient because of the slow set-up. But if one wants to call inverseF thousands of times or more, then using this class will be very efficient.


Field Summary
 
Fields inherited from class umontreal.iro.lecuyer.probdist.ContinuousDistribution
decPrec
 
Constructor Summary
InverseDistFromDensity(ContinuousDistribution dist, double xc, double eps, int order)
          Given a continuous distribution dist with a well-defined density method, this class will compute tables for the numerical inverse of the distribution.
InverseDistFromDensity(MathFunction dens, double xc, double eps, int order, double xleft, double xright)
          Given a continuous probability density dens, this class will compute tables for the numerical inverse of the distribution.
 
Method Summary
 double cdf(double x)
          Computes the distribution function at x.
 double density(double x)
          Computes the probability density at x.
 double getEpsilon()
          Returns the u-resolution eps associated with this object.
 int getOrder()
          Returns the order associated with this object.
 double[] getParams()
          Return a table containing the parameters of the current distribution.
 double getXc()
          Returns the xc given in the constructor.
 double inverseF(double u)
          Computes the inverse distribution function at u.
 String toString()
          Returns a String containing information about the current distribution.
 
Methods inherited from class umontreal.iro.lecuyer.probdist.ContinuousDistribution
barF, getMean, getStandardDeviation, getVariance, getXinf, getXsup, inverseBisection, inverseBrent, setXinf, setXsup
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

InverseDistFromDensity

public InverseDistFromDensity(ContinuousDistribution dist,
                              double xc,
                              double eps,
                              int order)
Given a continuous distribution dist with a well-defined density method, this class will compute tables for the numerical inverse of the distribution. The user may wish to set the left and the right boundaries between which the density is non-zero by calling methods setXinf and setXsup of dist, for better efficiency. Argument xc can be the mean, the mode or any other x for which the density is relatively large. The u-resolution eps is the required absolute error in the cdf, and order is the degree of the Newton interpolating polynomial over each interval. An order of 3 or 5, and an eps of 10-6 to 10-12 are usually good choices. Restrictions: 3 <= order <= 12.


InverseDistFromDensity

public InverseDistFromDensity(MathFunction dens,
                              double xc,
                              double eps,
                              int order,
                              double xleft,
                              double xright)
Given a continuous probability density dens, this class will compute tables for the numerical inverse of the distribution. The left and the right boundaries of the density are xleft and xright (the density is 0 outside the interval [xleft, xright]). See the description of the other constructor.

Method Detail

density

public double density(double x)
Computes the probability density at x.

Specified by:
density in class ContinuousDistribution
Parameters:
x - value at which the density is evaluated
Returns:
density function evaluated at x

cdf

public double cdf(double x)
Computes the distribution function at x.

Parameters:
x - value at which the distribution function is evaluated
Returns:
distribution function evaluated at x

inverseF

public double inverseF(double u)
Computes the inverse distribution function at u.

Specified by:
inverseF in interface Distribution
Overrides:
inverseF in class ContinuousDistribution
Parameters:
u - value at which the inverse distribution function is evaluated
Returns:
the inverse distribution function evaluated at u

getXc

public double getXc()
Returns the xc given in the constructor.


getEpsilon

public double getEpsilon()
Returns the u-resolution eps associated with this object.


getOrder

public int getOrder()
Returns the order associated with this object.


getParams

public double[] getParams()
Return a table containing the parameters of the current distribution. This table is returned as: [xc, eps, order].


toString

public String toString()
Returns a String containing information about the current distribution.

Overrides:
toString in class Object

SSJ
V. 2.6.

To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.