Added truncated rayleigh

master
per.andreas.brodtkorb 14 years ago
parent e4918839a9
commit bd7218621c

@ -106,7 +106,7 @@ __all__ = [
'levy_stable', 'logistic', 'loggamma', 'loglaplace', 'lognorm',
'gilbrat', 'maxwell', 'mielke', 'nakagami', 'ncx2', 'ncf', 't',
'nct', 'pareto', 'lomax', 'powerlaw', 'powerlognorm', 'powernorm',
'rdist', 'rayleigh', 'reciprocal', 'rice', 'recipinvgauss',
'rdist', 'rayleigh', 'truncrayleigh','reciprocal', 'rice', 'recipinvgauss',
'semicircular', 'triang', 'truncexpon', 'truncnorm',
'tukeylambda', 'uniform', 'vonmises', 'wald', 'wrapcauchy',
'entropy', 'rv_discrete',
@ -5177,6 +5177,40 @@ for x >= 0.
"""
)
class truncrayleigh_gen(rv_continuous):
def link(self, x, logSF, phat, ix):
rv_continuous.link.__doc__
c = phat[0]
if ix == 1:
return x - phat[1] / sqrt(-2.0 * logSF)
else:
return x - phat[2] * sqrt(-2.0 * logSF)
def _pdf(self, r, c):
rc = r+c
return rc*exp(-(rc*rc-c*c)/2.0)
def _cdf(self, r, c):
rc = r+c
return - expm1(-(rc*rc-c*c)/ 2.0)
def _ppf(self, q, c):
return sqrt(c*c - 2 * log1p(-q)) - c
def _stats(self, c):
val = 4-pi
return np.sqrt(pi/2), val/2, 2*(pi-3)*sqrt(pi)/val**1.5, \
6*pi/val-16/val**2
def _entropy(self, c):
return _EULER/2.0 + 1 - 0.5*log(2)
truncrayleigh = truncrayleigh_gen(a=0.0, name="truncrayleigh",
longname="A truncated Rayleigh",
shapes='c',
extradoc="""
Truncated Rayleigh distribution
truncrayleigh.cdf(r) = 1 - exp(-((r+c)**2-c**2)/2)
for x >= 0.
"""
)
# Reciprocal Distribution
class reciprocal_gen(rv_continuous):
def _argcheck(self, a, b):

Loading…
Cancel
Save