#include "gtl_math_var.h" #include "gtl_math.h" namespace gtl { namespace math { var::var(gtl::analog_data *data) : analog_value(data) , _variance(0.) { _name = "var"; } void var::before_copying_data(std::vector::iterator begin, std::vector::iterator end) { _variance -= variance(begin, end); } void var::after_copying_data(std::vector::iterator begin, std::vector::iterator end) { _variance += variance(begin, end); } void var::data_changed() { analog_value::data_changed(); if(_data.size() != 0) _value = _variance; emit value_changed(); } qreal var::variance(std::vector::iterator begin, 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; } } // namespace math } // namespace gtl