Changeset 2558
- Timestamp:
- Sep 24, 2011, 10:53:04 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/tukey.cc
r2510 r2558 66 66 TukeyBiweightEstimator estimator(5, false); 67 67 double x = estimator(data.begin(), data.end()); 68 suite.add(suite.equal(x, correct ));68 suite.add(suite.equal(x, correct, 2)); 69 69 double y = estimator(data.begin(), data.end()); 70 70 TukeyBiweightEstimator estimator2(5, true); -
trunk/yat/statistics/Averager.cc
r2119 r2558 6 6 Copyright (C) 2006 Jari Häkkinen, Markus Ringnér 7 7 Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson 8 Copyright (C) 2011 Peter Johansson 8 9 9 10 This file is part of the yat library, http://dev.thep.lu.se/yat … … 33 34 34 35 Averager::Averager(void) 35 : n_(0), x_(0), xx_(0)36 : n_(0), mean_(0), m2_(0) 36 37 { 37 38 } 38 39 40 39 41 Averager::Averager(double x, double xx, long n) 40 : n_(n), x_(x), xx_(xx)42 : n_(n), mean_(x/n), m2_(xx-x*x/n) 41 43 { 42 44 } 43 45 46 44 47 Averager::Averager(const Averager& a) 45 : n_(a.n_), x_(a.x_), xx_(a.xx_)48 : n_(a.n_), mean_(a.mean_), m2_(a.m2_) 46 49 { 47 50 } 48 51 52 49 53 void Averager::add(double d, long n) 50 54 { 55 double delta = d - mean_; 56 mean_ += n*delta/(n+n_); 57 m2_ += delta*delta*n_*n/(n_+n); 51 58 n_ += n; 52 59 assert(n_>-1); 53 x_ += n*d;54 xx_ += n*d*d;55 60 } 56 61 … … 62 67 double Averager::mean(void) const 63 68 { 64 return x_/n_;69 return mean_; 65 70 } 66 71 … … 72 77 void Averager::rescale(double a) 73 78 { 74 x_ *= a;75 xx_ *= a*a;79 mean_ *= a; 80 m2_ *= a*a; 76 81 } 77 82 … … 79 84 { 80 85 n_=0; 81 x_=xx_=0.0;86 mean_=m2_=0.0; 82 87 } 83 88 … … 99 104 double Averager::sum_x(void) const 100 105 { 101 return x_;106 return n_*mean_; 102 107 } 103 108 104 109 double Averager::sum_xx(void) const 105 110 { 106 return xx_;111 return m2_+n_*mean_*mean_; 107 112 } 108 113 109 114 double Averager::sum_xx_centered(void) const 110 115 { 111 return xx_-x_*x_/n_;116 return m2_; 112 117 } 113 118 114 119 double Averager::variance(double m) const 115 120 { 116 return (xx_ - 2*m*x_ + m*m*n()) /n_;121 return sum_xx()/n() + m*m - 2*m*mean(); 117 122 } 118 123 … … 130 135 const Averager& Averager::operator=(const Averager& a) 131 136 { 132 n_ = a.n_; 133 x_ = a.x_; 134 xx_ = a.xx_; 137 if (this != &a) { // avoid self-assignment 138 n_ = a.n_; 139 mean_ = a.mean_; 140 m2_ = a.m2_; 141 } 135 142 return *this; 136 143 } … … 138 145 const Averager& Averager::operator+=(const Averager& a) 139 146 { 147 mean_ += (n()*mean() + a.n()*a.mean()) / (n() + a.n()); 148 double delta = mean_ = a.mean(); 149 m2_ += a.m2_ + n()*a.n()*delta*delta/(n()+a.n()); 140 150 n_+=a.n_; 141 x_+=a.x_;142 xx_+=a.xx_;143 151 return *this; 144 152 } -
trunk/yat/statistics/Averager.h
r2161 r2558 8 8 Copyright (C) 2005, 2006 Jari Häkkinen, Peter Johansson, Markus Ringnér 9 9 Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson 10 Copyright (C) 2009, 2010 Peter Johansson10 Copyright (C) 2009, 2010, 2011 Peter Johansson 11 11 12 12 This file is part of the yat library, http://dev.thep.lu.se/yat … … 179 179 private: 180 180 long n_; 181 double x_, xx_;181 double mean_, m2_; 182 182 }; 183 183
Note: See TracChangeset
for help on using the changeset viewer.