Source code for chaospy.distributions.collection.cauchy

"""Cauchy distribution."""
import numpy

from ..baseclass import SimpleDistribution, ShiftScaleDistribution


class cauchy(SimpleDistribution):
    """Standard Cauchy distribution."""

    def __init__(self):
        super(cauchy, self).__init__()

    def _pdf(self, x):
        return 1.0 / numpy.pi / (1.0 + x * x)

    def _cdf(self, x):
        return 0.5 + 1.0 / numpy.pi * numpy.arctan(x)

    def _ppf(self, q):
        return numpy.tan(numpy.pi * q - numpy.pi / 2.0)

    def _lower(self):
        return -3e13

    def _upper(self):
        return 3e13


[docs]class Cauchy(ShiftScaleDistribution): """ Cauchy distribution. Also known as Lorentz distribution, Cachy-Lorentz distribution, and Breit-Wigner distribution. Args: shift (float, Distribution): Location parameter scale (float, Distribution): Scaling parameter Examples: >>> distribution = chaospy.Cauchy() >>> distribution Cauchy() >>> uloc = numpy.linspace(0.1, 0.9, 5) >>> uloc array([0.1, 0.3, 0.5, 0.7, 0.9]) >>> xloc = distribution.inv(uloc) >>> xloc.round(3) array([-3.078, -0.727, 0. , 0.727, 3.078]) >>> numpy.allclose(distribution.fwd(xloc), uloc) True >>> distribution.pdf(xloc).round(3) array([0.03 , 0.208, 0.318, 0.208, 0.03 ]) >>> distribution.sample(4).round(3) array([ 0.524, -2.646, 6.35 , -0.056]) Notes: The Cauchy distribution is what is known as a "pathological" distribution. It is not only infinitely bound, but heavy tailed enough that approximate bounds is also infinite for any reasonable approximation. This makes both bounds and moments results in non-sensibel results. E.g.:: >>> distribution.lower < -1e10 array([ True]) >>> distribution.upper > 1e10 array([ True]) """
[docs] def __init__(self, scale=1, shift=0): super(Cauchy, self).__init__( dist=cauchy(), scale=scale, shift=shift, )