RandLib 2.0.0
Probability distributions, fitting, and heavy-tail tools for C++20
Loading...
Searching...
No Matches
bivariate.hpp
Go to the documentation of this file.
1#pragma once
2
7
8namespace randlib
9{
10
15template <class T1, class T2, typename T>
17{
18protected:
19 T1 X{};
20 T2 Y{};
22
23public:
25
26protected:
27public:
28 [[nodiscard]] Pair<T> MinValue() const override { return Pair<T>(X.MinValue(), Y.MinValue()); }
29 [[nodiscard]] Pair<T> MaxValue() const override { return Pair<T>(X.MaxValue(), Y.MaxValue()); }
30
31 [[nodiscard]] virtual LongDoublePair Mean() const final;
32 virtual LongDoubleTriplet Covariance() const final;
33 virtual long double Correlation() const = 0;
34 [[nodiscard]] virtual std::pair<T1, T2> GetMarginalDistributions() const final;
35 [[nodiscard]] virtual Pair<T> Mode() const = 0;
36};
37
38} // namespace randlib
39
40#include <randlib/core/univariate.hpp>
45
46namespace randlib
47{
48
49template <class T1, class T2, typename T>
51{
52 return std::make_pair(X.Mean(), Y.Mean());
53}
54
55template <class T1, class T2, typename T>
57{
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);
62}
63
64template <class T1, class T2, typename T>
66{
67 return std::make_pair(X, Y);
68}
69
70} // namespace randlib
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