test_sdk/math/gtl_math_var.cpp

51 lines
1.2 KiB
C++
Raw Normal View History

#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<qreal>::iterator begin, std::vector<qreal>::iterator end)
{
_variance -= variance(begin, end);
}
void var::after_copying_data(std::vector<qreal>::iterator begin, std::vector<qreal>::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<qreal>::iterator begin, std::vector<qreal>::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