#include "gtl_math.h" #include #include #include mathFunctions::mathFunctions() { } qreal mathFunctions::squared_sum(const std::vector::iterator &begin, const std::vector::iterator &end) { qreal sum = 0; for(auto it = begin; it != end; ++it) { sum += qPow(*it, 2); } return sum; } qreal mathFunctions::rms(const std::vector::iterator &begin, const std::vector::iterator &end) { return qSqrt(mathFunctions::squared_sum(begin, end)/std::distance(begin,end)); } qreal mathFunctions::max(const std::vector::iterator &begin, const std::vector::iterator &end) { return *std::max_element(begin, end); } qreal mathFunctions::min(const std::vector::iterator &begin, const std::vector::iterator &end) { return *std::min_element(begin, end); } qreal mathFunctions::mean(const std::vector::iterator &begin, const std::vector::iterator &end) { return std::accumulate(begin, end, 0.)/std::distance(begin, end); } qreal mathFunctions::kurt(const std::vector::iterator &begin, const std::vector::iterator &end) { qreal value = 0; int n = std::distance(begin, end); if(n > 3) { qreal mean = mathFunctions::mean(begin, end); qreal variance = 0.; for(auto it = begin; it != end; ++it) variance += pow((*it - mean), 2); variance /= n; qreal sigma = 0; for(auto it = begin; it != end; ++it) sigma += pow((*it - mean), 4); sigma /= n; qreal k1 = (qreal)(n*n - 1) / (qreal)((n-2)*(n-3)); qreal k2 = (qreal)((6. / (n + 1.)) - 3.); value = k1*(sigma/pow(variance,2) + k2); } return value; } qreal mathFunctions::var(const std::vector::iterator &begin, const std::vector::iterator &end) { int n = std::distance(begin, end); qreal mean = std::accumulate(begin, end, 0.)/n; qreal v = 0.; for(auto it = begin; it != end; ++it) v += qPow((*it - mean), 2); v /= n-1; return v; }