gsl-random-0.4.5: Bindings the the GSL random number generation facilities.

Stabilityexperimental
MaintainerPatrick Perry <patperry@stanford.edu>
Safe HaskellNone

GSL.Random.Dist

Contents

Description

Random number distributions. Functions for generating random variates and computing their probability distributions.

Synopsis

The Gaussian Distribution

General

gaussianPdf :: Double -> Double -> DoubleSource

gaussianPdf x sigma computes the probabililty density p(x) for a Gaussian distribution with mean 0 and standard deviation sigma.

gaussianP :: Double -> Double -> DoubleSource

gaussianP x sigma computes the cumulative distribution function P(x) for a Gaussian distribution with mean 0 and standard deviation sigma.

gaussianQ :: Double -> Double -> DoubleSource

gaussianQ x sigma computes the cumulative distribution function Q(x) for a Gaussian distribution with mean 0 and standard deviation sigma.

gaussianPInv :: Double -> Double -> DoubleSource

gaussianPInv p sigma computes the inverse of the cumulative distribution function of a Gaussian distribution with mean 0 and standard deviation sigma. It returns x such that P(x) = p.

gaussianQInv :: Double -> Double -> DoubleSource

gaussianPInv q sigma computes the inverse of the cumulative distribution function of a Gaussian distribution with mean 0 and standard deviation sigma. It returns x such that Q(x) = q.

getGaussian :: RNG -> Double -> IO DoubleSource

getGaussian r sigma gets a normal random variable with mean 0 and standard deviation sigma. This uses the Box-Mueller algorithm.

getGaussianZiggurat :: RNG -> Double -> IO DoubleSource

getGaussianZiggurat r sigma gets a normal random variable with mean 0 and standard deviation sigma. This uses the Marsaglia-Tsang ziggurat algorithm.

getGaussianRatioMethod :: RNG -> Double -> IO DoubleSource

getGaussianRatioMethod r sigma gets a normal random variable with mean 0 and standard deviation sigma. This uses the Kinderman-Monahan-Leva ratio method.

Unit Variance

ugaussianPdf :: Double -> DoubleSource

ugaussianPdf x computes the probabililty density p(x) for a Gaussian distribution with mean 0 and standard deviation 1.

ugaussianP :: Double -> DoubleSource

ugaussianP x computes the cumulative distribution function P(x) for a Gaussian distribution with mean 0 and standard deviation 1.

ugaussianQ :: Double -> DoubleSource

ugaussianQ x computes the cumulative distribution function Q(x) for a Gaussian distribution with mean 0 and standard deviation 1.

ugaussianPInv :: Double -> DoubleSource

ugaussianPInv p computes the inverse of the cumulative distribution function of a Gaussian distribution with mean 0 and standard deviation 1. It returns x such that P(x) = p.

ugaussianQInv :: Double -> DoubleSource

ugaussianPInv q computes the inverse of the cumulative distribution function of a Gaussian distribution with mean 0 and standard deviation 1. It returns x such that Q(x) = q.

getUGaussian :: RNG -> IO DoubleSource

getUGaussian r gets a normal random variable with mean 0 and standard deviation 1. This uses the Box-Mueller algorithm.

getUGaussianRatioMethod :: RNG -> IO DoubleSource

getUGaussianRatioMethod r gets a normal random variable with mean 0 and standard deviation 1. This uses the Kinderman-Monahan-Leva ratio method.

The Flat (Uniform) Distribution

flatPdf :: Double -> Double -> Double -> DoubleSource

flatPdf x a b computes the probability density p(x) at x for a uniform distribution from a to b.

flatP :: Double -> Double -> Double -> DoubleSource

flatP x a b computes the cumulative distribution function P(x).

flatQ :: Double -> Double -> Double -> DoubleSource

flatQ x a b computes the cumulative distribution function Q(x).

flatPInv :: Double -> Double -> Double -> DoubleSource

flatPInv p a b computes the inverse of the cumulative distribution and returns x so that function P(x) = p.

flatQInv :: Double -> Double -> Double -> DoubleSource

flatQInv q a b computes the inverse of the cumulative distribution and returns x so that function Q(x) = q.

getFlat :: RNG -> Double -> Double -> IO DoubleSource

getFlat r a b gets a value uniformly chosen in [a,b).

The Exponential Distribution

exponentialPdf :: Double -> Double -> DoubleSource

exponentialPdf x mu computes the density at x of an exponential with mean mu.

getExponential :: RNG -> Double -> IO DoubleSource

getExponential r mu gets a random exponential with mean mu.

The Levy alpha-Stable Distributions

getLevy :: RNG -> Double -> Double -> IO DoubleSource

getLevy r c alpha gets a variate from the Levy symmetric stable distribution with scale c and exponent alpha. The algorithm only works for 0 <= alpha <= 2.

getLevySkew :: RNG -> Double -> Double -> Double -> IO DoubleSource

getLevySkew r c alpha beta gets a variate from the Levy skew stable distribution with scale c, exponent alpha, and skewness parameter beta. The skewness parameter must lie in the range [-1,1]. The algorithm only works for 0 <= alpha <= 2.

The Poisson Distribution

poissonPdf :: Int -> Double -> DoubleSource

poissonPdf k mu evaluates the probability density p(k) at k for a Poisson distribution with mean mu.

poissonP :: Int -> Double -> DoubleSource

poissonP k mu evaluates the cumulative distribution function P(k) at k for a Poisson distribution with mean mu.

poissonQ :: Int -> Double -> DoubleSource

poissonQ k mu evaluates the cumulative distribution function Q(k) at k for a Poisson distribution with mean mu.

getPoisson :: RNG -> Double -> IO IntSource

getPoisson r mu gets a poisson random variable with mean mu.

The Cauchy Distribution

getCauchy :: RNG -> Double -> IO DoubleSource

getCauchy r a gets a random cauchy with scale a.

cauchyPdf :: Double -> Double -> DoubleSource

cauchyPdf x a evaluates the probability density p(x) at x for a Cauchy distribution with scale parameter a. The density is given by p(x) dx = { 1 over api (1 + (x/a^2)) } dx.

The Beta Distribution

getBeta :: RNG -> Double -> Double -> IO DoubleSource

getBeta r a b gets a random beta with parameters a and b.

betaPdf :: Double -> Double -> Double -> DoubleSource

betaPdf x a b evaluates the probability density p(x) at x for a Beta distribution with parameters a and b. The density is given by p(x) dx = {Gamma(a+b) over Gamma(a) Gamma(b)} x^{a-1} (1-x)^{b-1} dx for 0 <= x <= 1.

The Logistic Distribution

getLogistic :: RNG -> Double -> IO DoubleSource

getLogistic r a gets a random logistic with scale a.

logisticPdf :: Double -> Double -> DoubleSource

logisticPdf x a evaluates the probability density p(x) at x for a logistic distribution with scale parameter a. The density is given by p(x) dx = { exp(-xa) \over a (1 + \exp(-xa))^2 } dx.

The Log-Normal Distribution

getLognormal :: RNG -> Double -> Double -> IO DoubleSource

getLognormal zeta sigma gets a random lognormal with parameters zeta and sigma.

lognormalPdf :: Double -> Double -> Double -> DoubleSource

lognormalPdf x zeta sigma evaluates the probability density p(x) at x for a log-normal distribution with parameters zeta and sigma, given. The density is given by p(x) dx = p(x) {1 over x sqrt{2 pi sigma^2} } exp(-(ln(x) - zeta)^2/2 sigma^2) dx

The Pareto Distribution

getPareto :: RNG -> Double -> Double -> IO DoubleSource

getPareto r a b gets a random Pareto with exponent a and scale b.

paretoPdf :: Double -> Double -> Double -> DoubleSource

paretoPdf x a b evaluates the probability density p(x) at x for a Pareto distribution with exponent a and scale b. The density is given by p(x) dx = (ab) (x/b)^{a+1} dx for x >= b.

The Weibull Distribution

getWeibull :: RNG -> Double -> Double -> IO DoubleSource

getWeibull r a b gets a random Weibull with scale a and exponent b.

weibullPdf :: Double -> Double -> Double -> DoubleSource

weibullPdf x a b evaluates the probability density p(x) at x for a Weibull distribution with scale a and exponent b. The density is given by p(x) dx = {b over a^b} x^{b-1} exp(-(x/a)^b) dx for x >= 0.

The Gamma Distribution

getGamma :: RNG -> Double -> Double -> IO DoubleSource

getGamma r a b gets a random gamma with parameters a and b. Uses the Marsagli-Tsang fast gamma method.

getGammaKnuth :: RNG -> Double -> Double -> IO DoubleSource

getGammaKnuth r a b gets a random gamma with parameters a and b. Uses the algorithms from Knuth (vol 2).

gammaPdf :: Double -> Double -> Double -> DoubleSource

gammaPdf x a b evaluates the probability density p(x) at x for a gamma distribution with parameters a and b. The density is given by p(x) dx = p(x) dx = {1 over Gamma(a) b^a} x^{a-1} e^{-x/b} dx for x > 0.

The Multinomial Distribution

getMultinomial :: RNG -> Int -> Vector Double -> IO (Vector Int)Source

getMultinomial r n ps gets a random sample from a multinomial distribution with parameters ps formed by n trials.

multinomialPdfSource

Arguments

:: Vector Int
ns
-> Vector Double
ps
-> Double 

multinomialPdf ns ps evaluates the probability density p(ns) at ns for a multinomial distribution with parameters ps, where all ps are non-negative and sum to 1. Note that xs and alphas should have the same length.

multinomialLnPdfSource

Arguments

:: Vector Int
ns
-> Vector Double
ps
-> Double 

multinomialLnPdf xs alphas == log (multinomialPdf xs alphas), but more efficient.

The Dirichlet Distribution

getDirichlet :: RNG -> Vector Double -> IO (Vector Double)Source

getDirichlet r alphas gets a random sample from a Dirichlet distribution with parameters alphas, where all alphas are positive.

dirichletPdfSource

Arguments

:: Vector Double
xs
-> Vector Double
alphas
-> Double 

dirichletPdf xs alphas evaluates the probability density p(xs) at xs for a Dirichlet distribution with parameters alphas, where all alphas are positive (strictly greater than zero). Note that xs and alphas should have the same length.

dirichletLnPdfSource

Arguments

:: Vector Double
xs
-> Vector Double
alphas
-> Double 

dirichletLnPdf xs alphas == log (dirichletPdf xs alphas), but more efficient.