My Project
twoDimensionalStatistics.cc
Go to the documentation of this file.
1/* TwoDimensionalStatistics.cc
2 */
4#include "osl/stat/average.h"
5#include <cmath>
6
8{
9public:
11
12 // MANIPULATORS
13 void add(const double& x, const double& y)
14 {
15 m_x.add(x);
16 m_y.add(y);
17 m_x2.add(x*x);
18 m_y2.add(y*y);
19 m_xy.add(x*y);
20 }
21 void merge(const Data& r)
22 {
23 m_x.merge(r.m_x);
24 m_y.merge(r.m_y);
25 m_x2.merge(r.m_x2);
26 m_y2.merge(r.m_y2);
27 m_xy.merge(r.m_xy);
28 }
29 void clear()
30 {
31 m_x.clear();
32 m_y.clear();
33 m_x2.clear();
34 m_y2.clear();
35 m_xy.clear();
36 }
37};
38
39// CREATORS
44
49
50// MANIPULATORS
52add(const double& x, const double& y)
53{
54 m_data->add(x,y);
55}
56
59{
60 m_data->merge(*r.m_data);
61}
62
64clear()
65{
66 m_data->clear();
67}
68
69
70// ACCESSORS
72size() const
73{
74 return m_data->m_x.numElements();
75}
76
78averageX() const
79{
80 return m_data->m_x.average();
81}
82
84averageY() const
85{
86 return m_data->m_y.average();
87}
88
90averageX2() const
91{
92 return m_data->m_x2.average();
93}
94
96averageY2() const
97{
98 return m_data->m_y2.average();
99}
100
102averageXY() const
103{
104 return m_data->m_xy.average();
105}
106
108meanSquaredErrors() const
109{
110 return averageX2() - 2*averageXY() + averageY2();
111}
112
115{
116 return averageX2() - averageX()*averageX()
117 -2*(averageXY() - averageX()*averageY())
118 + averageY2() - averageY()*averageY();
119}
120
122correlation() const
123{
124 return (averageXY() - averageX()*averageY())
125 / sqrt((averageX2() - averageX()*averageX())
126 * (averageY2() - averageY()*averageY()));
127}
128
130fitting(double &a, double &b, double &residual) const
131{
132 double d = averageX2() - averageX()*averageX();
133 double n = averageXY() - averageX()*averageY();
134 if (std::abs(d) < 1e-8) {
135 a = 0.0;
136 b = averageY();
137 residual = averageY2() - averageY()*averageY();
138 return;
139 }
140 a = n / d;
141 b = (averageX2()*averageY() - averageXY()*averageX()) / d;
142 residual = averageY2()-averageY()*averageY()
143 - n * n / d;
144}
145
146/* ------------------------------------------------------------------------- */
147// ;;; Local Variables:
148// ;;; mode:c++
149// ;;; c-basic-offset:2
150// ;;; End:
incrementaly maintain average of data sequence
Definition average.h:14
void clear(double a=0.0, int e=0)
Definition average.h:42
void merge(const Average &r)
Definition average.h:34
double add(const double &x)
Add an element x.
Definition average.h:27
void add(const double &x, const double &y)
void fitting(double &a, double &b, double &residual) const
ax + b = y
void merge(const TwoDimensionalStatistics &)
void add(const double &x, const double &y)