15template <
class T1,
class T2,
typename T>
35 [[nodiscard]] virtual
Pair<T>
Mode() const = 0;
40#include <randlib/core/univariate.hpp>
49template <
class T1,
class T2,
typename T>
52 return std::make_pair(X.Mean(), Y.Mean());
55template <
class T1,
class T2,
typename T>
58 long double var1 = X.Variance();
59 long double var2 = Y.Variance();
60 long double covariance = (var1 == 0.0L || var2 == 0.0L) ? 0.0L : Correlation() * std::sqrt(var1) * std::sqrt(var2);
61 return std::make_tuple(var1, covariance, var2);
64template <
class T1,
class T2,
typename T>
67 return std::make_pair(X, Y);
The BivariateDistribution class Abstract class for all bivariate probability distributions.
Definition bivariate.hpp:17
T2 Y
2nd marginal distributions
Definition bivariate.hpp:20
virtual LongDoublePair Mean() const final
Definition bivariate.hpp:50
Pair< T > MaxValue() const override
Definition bivariate.hpp:29
virtual ~BivariateDistribution()
Definition bivariate.hpp:24
virtual LongDoubleTriplet Covariance() const final
Definition bivariate.hpp:56
BivariateDistribution()
Definition bivariate.hpp:21
virtual std::pair< T1, T2 > GetMarginalDistributions() const final
Definition bivariate.hpp:65
T1 X
1st marginal distributions
Definition bivariate.hpp:19
virtual long double Correlation() const =0
virtual Pair< T > Mode() const =0
Pair< T > MinValue() const override
Definition bivariate.hpp:28
The ProbabilityDistribution class Abstract class for all probability distributions.
Definition distribution.hpp:28
Definition bivariate_normal.hpp:10
std::pair< T, T > Pair
Definition fwd.hpp:33
Triplet< long double > LongDoubleTriplet
Definition fwd.hpp:44
Pair< long double > LongDoublePair
Definition fwd.hpp:40