@@ -27,81 +27,88 @@ namespace Stats {
2727class Distribution
2828{
2929public:
30- Distribution (const Distribution & other) = delete ;
31- Distribution & operator = (const Distribution & other) = delete ;
30+ Distribution (const Distribution & other) = delete ; // !< Copy constructor
31+ Distribution & operator = (const Distribution & other) = delete ; // !< Assignment constructor
3232
33- virtual double pdf ( double x) const = 0;
34- virtual double cdf ( double x) const = 0;
35- virtual double icdf ( double P) const = 0;
36- virtual double mean () const = 0;
37- virtual double var () const = 0;
38- virtual double mode () const = 0;
39- virtual double rnd () const = 0;
33+ virtual double pdf ( double x) const = 0; // !< Probability density function
34+ virtual double cdf ( double x) const = 0; // !< Cumulative distribution function
35+ virtual double icdf ( double P) const = 0; // !< Inverse cumulative distribution function
36+ virtual double mean () const = 0; // !< Mean
37+ virtual double var () const = 0; // !< Variance
38+ virtual double mode () const = 0; // !< Mode of distribution
39+ virtual double rnd () const = 0; // !< Random number
4040
4141protected:
4242 virtual ~Distribution () = default ;
4343 Distribution () = default ;
4444};
4545
46+
4647class StandardNormal : private Distribution
4748{
4849public:
4950 StandardNormal () = default ;
5051 ~StandardNormal () override = default ;
5152
52- double pdf ( double x ) const override ;
53- double cdf ( double x ) const override ;
54- double icdf ( double P) const override ;
55- double mean () const override { return 0.0 ; }
56- double var () const override { return 1.0 ; }
57- double mode () const override { return 0.0 ; }
58- double rnd () const override ;
53+ double pdf ( double x ) const override ; // !< Probability density function
54+ double cdf ( double x ) const override ; // !< Cumulative distribution function
55+ double icdf ( double P) const override ; // !< Inverse cumulative distribution function
56+ double mean () const override { return 0.0 ; } // !< Mean
57+ double var () const override { return 1.0 ; } // !< Variance
58+ double mode () const override { return 0.0 ; } // !< Mode of distribution
59+ double rnd () const override ; // !< Random number
5960
6061private:
6162 constexpr static const double s_normalizing_constant = 0.398942280401433 ; // = 1/sqrt(2*pi);
6263};
6364
6465
66+
6567class Gamma : private Distribution
6668{
6769public:
68- Gamma ( double alpha, double beta);
70+ Gamma ( double alpha, double beta); // !< Value constructor
6971 ~Gamma () override = default ;
7072
71- double pdf ( double x ) const override ;
72- double cdf ( double x ) const override ;
73- double icdf ( double P ) const override ;
73+ double pdf ( double x ) const override ; // !< Probability density function
74+ double cdf ( double x ) const override ; // !< Cumulative distribution function
75+ double icdf ( double P ) const override ; // !< Inverse cumulative distribution function
76+
77+ // Mean
7478 double mean () const override { return m_alpha/m_beta; }
79+
80+ // Variance
7581 double var () const override { return m_alpha/(m_beta*m_beta); }
76- double mode () const override ;
77- double rnd () const override ;
82+ double mode () const override ; // !< Mode of distribution
83+ double rnd () const override ; // !< Random number
7884
79- double shape () const { return m_alpha; }
80- double rate () const { return m_beta; }
81- double scale () const { return 1 ./m_beta; }
85+ double shape () const { return m_alpha; } // !< Get value of shape parameter
86+ double rate () const { return m_beta; } // !< Get rate (inverse scale)
87+ double scale () const { return 1 ./m_beta; } // !< Get value of scale parameter (inverse rate)
8288
8389private:
8490 const double m_alpha; // > 0 shape
8591 const double m_beta; // > 0 rate
8692};
8793
8894
89-
9095class ChiSquared : private Distribution
9196{
9297public:
93- ChiSquared ( int df );
98+ ChiSquared ( int df ); // !< Value Constructor
9499 ~ChiSquared () override = default ;
95100
96- double pdf ( double x) const override ;
97- double cdf ( double x) const override ;
98- double icdf ( double P) const override ;
99- double mean () const override { return m_nu; }
100- double var () const override { return 2 *m_nu; }
101+ double pdf ( double x) const override ; // !< Probability density function
102+ double cdf ( double x) const override ; // !< Cumulative distribution function
103+ double icdf ( double P) const override ; // !< Inverse cumulative distribution function
104+ double mean () const override { return m_nu; } // !< Mean
105+ double var () const override { return 2 *m_nu; } // !< Variance
106+
107+ // ! Mode of distribution
101108 double mode () const override { return std::fmax ( m_nu-2.0 , 0.0 ); }
102- double rnd () const override ;
109+ double rnd () const override ; // !< Random number
103110
104- int dof () const { return m_nu; }
111+ int dof () const { return m_nu; } // !< Get degrees of freedom
105112
106113private:
107114 static double GammaFctHalfInt ( double x);
@@ -111,29 +118,49 @@ class ChiSquared : private Distribution
111118};
112119
113120
121+
122+
123+
124+
125+
126+
114127class Exponential : private Distribution
115128{
116129public:
117- Exponential ( double lambda);
130+ Exponential ( double lambda); // !< Value constructor
118131 ~Exponential () override = default ;
119132
133+ // ! Probability density function
120134 double pdf ( double x) const override {
121135 return x>=0.0 ? m_lambda*exp (-m_lambda*x) : 0.0 ;
122136 }
137+
138+ // ! Cumulative distribution function
123139 double cdf ( double x) const override {
124140 return x>=0.0 ? 1.0 -exp (-m_lambda*x) : 0.0 ;
125141 }
142+
143+ // ! Inverse cumulative distribution function
126144 double icdf ( double P) const override {
127145 assert ( P>=0.0 );
128146 assert ( P<1.0 );
129147 return -log (1.0 -P)/m_lambda;
130148 }
149+
150+ // ! Mean
131151 double mean () const override { return 1.0 /m_lambda; }
152+
153+ // ! Variance
132154 double var () const override { return 1.0 /(m_lambda*m_lambda); }
155+
156+ // ! Mode of distributiion
133157 double mode () const override { return 0.0 ; }
134- double rnd () const override ;
158+ double rnd () const override ; // !< Random number
135159
160+ // ! Get rate (inverse scale)
136161 double rate () const {return m_lambda; }
162+
163+ // ! Get scale (inverse ratse)
137164 double scale () const {return 1 ./m_lambda;}
138165
139166private:
0 commit comments