Elaboradar 0.1
Caricamento in corso...
Ricerca in corso...
Nessun risultato
statistics.h
Vai alla documentazione di questo file.
1
5#include <cmath>
6
7namespace radarelab {
8/*
9 * ==================================================================
10 * Class: Statistic
11 * Description: Generic class to perform basic statistics
12 * ==================================================================
13 */
20template<typename T>
21class Statistic
22{
23public:
24 T sum_x;
25 T sum_y;
26 T sum_xy;
27 T sum_x2;
28
29 T slope;
30 T intercept;
31 T variance;
32 T dev_std;
33 T mean;
34 T M2;
35 T delta;
36 unsigned N;
37
41 Statistic():sum_x(0),sum_y(0),sum_xy(0),sum_x2(0),mean(0),M2(0),N(0){}
42
48 void feed(T x, T y)
49 {
50 sum_x+=x;
51 sum_y+=y;
52 sum_xy+=x*y;
53 sum_x2+=x*x;
54 N++;
55 }
56
62 void slim(T x, T y)
63 {
64 sum_x-=x;
65 sum_y-=y;
66 sum_xy-=x*y;
67 sum_x2-=x*x;
68 N--;
69 }
70
75 void feed(T x)
76 {
77 sum_x+=x;
78 sum_x2+=x*x;
79 N++;
80
81 delta = x-mean;
82 mean = mean+delta/(double)N;
83 M2 = M2+delta*(x-mean);
84 }
85
90 void slim(T x)
91 {
92 sum_x-=x;
93 sum_x2-=x*x;
94 N--;
95
96 if(N)
97 {
98 delta = x-mean;
99 mean = mean-delta/(double)N;
100 M2 = M2-delta*(x-mean);
101 }
102 else
103 {
104 mean=0.;
105 M2=0;
106 }
107 }
108
112 void clear()
113 {
114 sum_x=0;
115 sum_y=0;
116 sum_xy=0;
117 sum_x2=0;
118 N=0;
119 mean=0.;
120 M2=0.;
121 }
122
128 T compute_slope(unsigned minimum=2)
129 {
130 if(N>=minimum)
131 slope = (N*sum_xy-sum_x*sum_y)/(N*sum_x*sum_x-sum_x2);
132 else slope = sqrt(-1); // NaN
133 return slope;
134 }
135
141 T compute_intercept(unsigned minimum=2)
142 {
143 if(N>=minimum)
144 intercept = (sum_y*sum_x2-sum_x*sum_xy)/(N*sum_x2-sum_x*sum_x);
145 else intercept = sqrt(-1);
146 return intercept;
147 }
148
154 T compute_variance(unsigned minimum=1)
155 {
156 if(M2<0.1e-11)M2=0.;
157 if(N>=minimum) return M2/(double)N;
158 else return sqrt(-1);
159 }
160
166 T compute_dev_std(unsigned minimum=1)
167 {
168 if(N>=minimum) return sqrt(compute_variance());
169 else return sqrt(-1);
170 }
171
177 T compute_mean(unsigned minimum=1)
178 {
179 if(N>=minimum)
180 return mean;
181 else return sqrt(-1);
182 }
183};
184
185} // namespace radarelab
T compute_slope(unsigned minimum=2)
Compute least square linear fit (no exception if only scalars where provided)
Definition statistics.h:128
T compute_intercept(unsigned minimum=2)
Compute least square linear fit (no exception if only scalars where provided)
Definition statistics.h:141
T compute_dev_std(unsigned minimum=1)
Compute standard deviation of the distribution of x values.
Definition statistics.h:166
T compute_variance(unsigned minimum=1)
Compute variance of the distribution of x values.
Definition statistics.h:154
T compute_mean(unsigned minimum=1)
Compute mean of the distribution of x values.
Definition statistics.h:177
void clear()
Reset the Statistic object to a null state.
Definition statistics.h:112
String functions.
Definition cart.cpp:4