00001 #ifndef _theplu_yat_statistics_averagerpair_
00002 #define _theplu_yat_statistics_averagerpair_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "Averager.h"
00028
00029 #include "yat/utility/iterator_traits.h"
00030
00031 #include <cmath>
00032 #include <utility>
00033
00034 namespace theplu{
00035 namespace yat{
00036 namespace statistics{
00037
00043 class AveragerPair
00044 {
00045 public:
00046
00050 AveragerPair(void);
00051
00056
00057
00058
00059
00063 AveragerPair(const AveragerPair&);
00064
00068 void add(const double x, const double y, const long n=1);
00069
00077 double ccc(void) const;
00078
00085 double correlation(void) const;
00086
00094 double covariance(void) const;
00095
00099 double mean_xy(void) const;
00100
00105 double msd(void) const;
00106
00110 long n(void) const;
00111
00115 void reset(void);
00116
00120 double sum_xy(void) const;
00121
00126 double sum_squared_deviation(void) const;
00127
00131 double sum_xy_centered(void) const;
00132
00136 const Averager& x_averager(void) const;
00137
00141 const Averager& y_averager(void) const;
00142
00146 const AveragerPair& operator=(const AveragerPair& a);
00147
00151 const AveragerPair& operator+=(const AveragerPair&);
00152
00153 private:
00154 Averager x_;
00155 Averager y_;
00156 double xy_;
00157
00158 };
00159
00163 template <class Iter1, class Iter2>
00164 void add(AveragerPair& ap, Iter1 first1, Iter1 last1, Iter2 first2)
00165 {
00166 utility::check_iterator_is_unweighted(first1);
00167 utility::check_iterator_is_unweighted(first2);
00168 for ( ; first1 != last1; ++first1, ++first2)
00169 ap.add(*first1, *first2);
00170 }
00171
00172
00173 }}}
00174
00175 #endif