RandLib 2.0.0
Probability distributions, fitting, and heavy-tail tools for C++20
Loading...
Searching...
No Matches
randlib::DegenerateRand Class Referencefinal

The DegenerateRand class
Degenerate distribution. More...

#include <degenerate.hpp>

Inheritance diagram for randlib::DegenerateRand:
Collaboration diagram for randlib::DegenerateRand:

Public Member Functions

 DegenerateRand (double value=0)
 
std::string Name () const override
 
Support SupportType () const override
 
double MinValue () const override
 
double MaxValue () const override
 
void SetValue (double value)
 
double GetValue () const noexcept
 
double f (const double &x) const override
 
double logf (const double &x) const override
 
double F (const double &x) const override
 
template<std::uniform_random_bit_generator G>
double operator() (G &g) const
 
long double Mean () const override
 
long double Variance () const override
 
double Median () const override
 
double Mode () const override
 Mode is the value, which has the largest probability to happen, or, in the case of continuous distribution, has the largest value of density function.
 
long double Skewness () const override
 
long double ExcessKurtosis () const override
 
long double Entropy () const
 
void Fit (std::span< const double > sample)
 
- Public Member Functions inherited from randlib::ContinuousDistribution< double >
virtual ~ContinuousDistribution ()
 
void ProbabilityDensityFunction (std::span< const double > x, std::span< double > y) const
 fill vector y with f(x)
 
void LogProbabilityDensityFunction (std::span< const double > x, std::span< double > y) const
 fill vector y with logf(x)
 
double Hazard (const double &x) const override
 
double LikelihoodFunction (std::span< const double > sample) const override
 
double LogLikelihoodFunction (std::span< const double > sample) const override
 
bool KolmogorovSmirnovTest (std::span< const double > orderStatistic, double alpha) const
 
- Public Member Functions inherited from randlib::UnivariateDistribution< T >
virtual ~UnivariateDistribution ()
 
bool isLeftBounded () const
 
bool isRightBounded () const
 
T Quantile (double p) const
 
T Quantile1m (double p) const
 
void QuantileFunction (std::span< const double > p, std::span< T > y) const
 
void QuantileFunction1m (std::span< const double > p, std::span< T > y) const
 
std::complex< double > CF (double t) const
 
void CharacteristicFunction (std::span< const double > t, std::span< std::complex< double > > y) const
 
virtual double Hazard (const T &x) const =0
 
void HazardFunction (std::span< const T > x, std::span< double > y) const
 
virtual long double Kurtosis () const
 
virtual long double SecondMoment () const
 
virtual long double ThirdMoment () const
 
virtual long double FourthMoment () const
 
virtual double LikelihoodFunction (std::span< const T > sample) const =0
 
virtual double LogLikelihoodFunction (std::span< const T > sample) const =0
 
- Public Member Functions inherited from randlib::ProbabilityDistribution< T >
virtual ~ProbabilityDistribution ()=default
 
virtual double F (const T &x) const =0
 
void CumulativeDistributionFunction (std::span< const T > x, std::span< double > y) const
 
virtual double S (const T &x) const
 
void SurvivalFunction (std::span< const T > x, std::span< double > y) const
 
template<std::uniform_random_bit_generator G>
T operator() (G &g) const
 Draws a variate with the given engine through the virtual interface.
 
T Variate () const
 Uses the engine of this object, so it is not thread-safe for one object; use operator() with one engine per thread instead.
 
void Sample (std::span< T > outputData) const
 Fills the output with variates drawn with the engine of this object.
 
template<std::uniform_random_bit_generator G>
void Sample (G &g, std::span< T > outputData) const
 Fills the output with variates drawn with the given engine.
 
void Reseed (std::uint64_t seed)
 

Additional Inherited Members

- Public Types inherited from randlib::ProbabilityDistribution< T >
using value_type = T
 
- Static Public Member Functions inherited from randlib::UnivariateDistribution< T >
static long double GetSampleSum (std::span< const T > sample)
 
static long double GetSampleMean (std::span< const T > sample)
 
static long double GetSampleLogMean (std::span< const T > sample)
 
static long double GetSampleVariance (std::span< const T > sample, double mean)
 
static long double GetSampleLogVariance (std::span< const T > sample, double logMean)
 
static LongDoublePair GetSampleMeanAndVariance (std::span< const T > sample)
 
static LongDoublePair GetSampleLogMeanAndVariance (std::span< const T > sample)
 
static std::tuple< long double, long double, long double, long double > GetSampleStatistics (std::span< const T > sample)
 
- Protected Member Functions inherited from randlib::ContinuousDistribution< double >
 ContinuousDistribution ()
 
std::complex< double > integrateCharacteristicFunction (double t) const
 
double quantileImpl (double p, double initValue) const override
 
double quantileImpl1m (double p, double initValue) const override
 
long double ExpectedValue (const std::function< double(double)> &funPtr, double minPoint, double maxPoint) const override
 
double searchQuantile (double p, bool upperTail, double guess, double relativeStep=1e-3) const
 Deterministic root search for the quantile: brackets the root, starting from the guess when it is finite, then refines it with the Illinois variant of regula falsi (on a logarithmic scale for small p), falling back to bisection whenever the bracket does not halve.
 
- Protected Member Functions inherited from randlib::UnivariateDistribution< T >
 UnivariateDistribution ()
 
virtual long double ExpectedValue (const std::function< double(T)> &funPtr, T minPoint, T maxPoint) const =0
 
- Protected Member Functions inherited from randlib::ProbabilityDistribution< T >
std::string toStringWithPrecision (const double a_value, const int n=6) const
 
 ProbabilityDistribution ()=default
 
DefaultEngine & engine () const
 
virtual void sample (detail::EngineRef g, std::span< T > outputData) const
 Fills the output with variate(g); distributions with a faster bulk algorithm override it.
 
fit_error fitError (FitErrorCode code, const std::string &explanation) const
 
- Static Protected Member Functions inherited from randlib::UnivariateDistribution< T >
static bool allElementsAreNotGreaterThan (T value, std::span< const T > sample)
 
static bool allElementsAreNotSmallerThan (T value, std::span< const T > sample)
 
static bool allElementsAreNonNegative (std::span< const T > sample)
 
static bool allElementsArePositive (std::span< const T > sample)
 
- Static Protected Attributes inherited from randlib::ProbabilityDistribution< T >
static constexpr size_t MAX_ITER_REJECTION = detail::MAX_ITER_REJECTION
 MAX_ITER_REJECTION upper boundary for maximum amount of iterations in rejection methods one thousand should be enough to be sure there is a bug (or rejection method is too slow to be used)
 
static constexpr char POSITIVITY_VIOLATION [] = "All elements should be positive"
 
static constexpr char NON_NEGATIVITY_VIOLATION [] = "All elements should be non-negative"
 
static constexpr char UPPER_LIMIT_VIOLATION [] = "No element should be greater than "
 
static constexpr char LOWER_LIMIT_VIOLATION [] = "No element should be smaller than "
 

Detailed Description

The DegenerateRand class
Degenerate distribution.

f(x|a) = δ(a)

Notation: X ~ δ(a)

Constructor & Destructor Documentation

◆ DegenerateRand()

randlib::DegenerateRand::DegenerateRand ( double  value = 0)
inlineexplicit

Member Function Documentation

◆ Entropy()

long double randlib::DegenerateRand::Entropy ( ) const
inline

◆ ExcessKurtosis()

long double randlib::DegenerateRand::ExcessKurtosis ( ) const
inlineoverridevirtual
Returns
E[((X - μ) / σ) ^ 4] - 3 (fourth moment around the mean divided by the square of the variance of the probability distribution minus 3)

var is finite, so is mu

Reimplemented from randlib::UnivariateDistribution< T >.

◆ f()

double randlib::DegenerateRand::f ( const double &  x) const
inlineoverridevirtual
Parameters
x
Returns
probability density function

Reimplemented from randlib::ContinuousDistribution< double >.

◆ F()

double randlib::DegenerateRand::F ( const double &  x) const
inlineoverride

◆ Fit()

void randlib::DegenerateRand::Fit ( std::span< const double >  sample)
inline
Parameters
sample

◆ GetValue()

double randlib::DegenerateRand::GetValue ( ) const
inlinenoexcept

◆ logf()

double randlib::DegenerateRand::logf ( const double &  x) const
inlineoverridevirtual
Parameters
x
Returns
logarithm of probability density function

Implements randlib::ContinuousDistribution< double >.

◆ MaxValue()

double randlib::DegenerateRand::MaxValue ( ) const
inlineoverridevirtual
Returns
maximum possible value that can be achieved by random variable

Implements randlib::ProbabilityDistribution< T >.

◆ Mean()

long double randlib::DegenerateRand::Mean ( ) const
inlineoverridevirtual
Returns
Mathematical expectation

Implements randlib::UnivariateDistribution< T >.

◆ Median()

double randlib::DegenerateRand::Median ( ) const
inlineoverridevirtual
Returns
such x that F(x) = 0.5

Reimplemented from randlib::UnivariateDistribution< T >.

◆ MinValue()

double randlib::DegenerateRand::MinValue ( ) const
inlineoverridevirtual
Returns
minimum possible value that can be achieved by random variable

Implements randlib::ProbabilityDistribution< T >.

◆ Mode()

double randlib::DegenerateRand::Mode ( ) const
inlineoverridevirtual

Mode is the value, which has the largest probability to happen, or, in the case of continuous distribution, has the largest value of density function.

Returns
mode. In case, when it's not unique, return any of them.

Reimplemented from randlib::ContinuousDistribution< double >.

◆ Name()

std::string randlib::DegenerateRand::Name ( ) const
inlineoverridevirtual
Returns
title of distribution, for instance "Normal(0, 1)"

Implements randlib::ProbabilityDistribution< T >.

◆ operator()()

template<std::uniform_random_bit_generator G>
double randlib::DegenerateRand::operator() ( G &  g) const

◆ SetValue()

void randlib::DegenerateRand::SetValue ( double  value)
inline

◆ Skewness()

long double randlib::DegenerateRand::Skewness ( ) const
inlineoverridevirtual
Returns
E[((X - μ) / σ) ^ 3] where μ is central moment and σ is standard deviation

var is finite, so is mu

Reimplemented from randlib::UnivariateDistribution< T >.

◆ SupportType()

Support randlib::DegenerateRand::SupportType ( ) const
inlineoverridevirtual
Returns
type of support

Implements randlib::UnivariateDistribution< T >.

◆ Variance()

long double randlib::DegenerateRand::Variance ( ) const
inlineoverridevirtual
Returns
Variance of random variable

Implements randlib::UnivariateDistribution< T >.


The documentation for this class was generated from the following file: