#ifndef STL_STATISTICS_H #define STL_STATISTICS_H // Computes average and standard deviation // for data stored in std::vector container #include #include #include #include using namespace std; // Average double get_ave(const vector & x) { // average = sum_i=1^N x_i /N // sum up values, initial value 0 double sum = accumulate(x.begin(),x.end(),0); return (sum/x.size()); } // Standard deviation; known average double get_sigma(const vector& x, double & ave) { // sum_i=1^N (x_i-)^2 // sigma = sqrt( -------------------- ) // N-1 // // // (x-).(x-) // = sqrt( --------------- ) // N-1 // subtract ave from all elements ; store to xx vector xx(x); int N = x.size(); transform(x.begin(),x.end(),xx.begin(),bind2nd(minus(),ave)); double sigma = inner_product(xx.begin(),xx.end(),xx.begin(),0); sigma = sqrt(sigma/(N-1)); return sigma; } #endif