123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef MATHUTIL_H
- #define MATHUTIL_H
- #include <QVector>
- #include <QtMath>
- #include <limits>
- namespace Helper {
- static double minvec(const QVector<double> &vec)
- {
- double val = std::numeric_limits<double>::min();
- for (int i = 0; i < vec.count(); ++i) {
- if (i == 0) {
- val = vec.at(i);
- } else if (val > vec.at(i)) {
- val = vec.at(i);
- }
- }
- return val;
- }
- static double maxvec(const QVector<double> &vec)
- {
- double val = std::numeric_limits<double>::max();
- for (int i = 0; i < vec.count(); ++i) {
- if (i == 0) {
- val = vec.at(i);
- } else if (val < vec.at(i)) {
- val = vec.at(i);
- }
- }
- return val;
- }
- /// 均值
- static double mean(const QVector<double> &vec)
- {
- if (vec.count() == 0) {
- return 0;
- }
- double sum = 0;
- for (auto v : vec) {
- sum += v;
- }
- return sum / vec.count();
- }
- /// 标准差
- static double standardDeviation(const QVector<double> &vec)
- {
- if (vec.count() == 0) {
- return 0;
- }
- double meanVal = mean(vec);
- double sum = 0;
- for (auto v : vec) {
- sum += qPow(v - meanVal, 2.0);
- }
- return sum / vec.count();
- }
- static std::pair<double, double> meanAndStandardDeviation(const QVector<double> &vec)
- {
- if (vec.count() == 0) {
- return std::make_pair(0, 0);
- }
- double meanVal = mean(vec);
- double sum = 0;
- for (auto v : vec) {
- sum += qPow(v - meanVal, 2.0);
- }
- return std::make_pair(meanVal, sum / vec.count());
- }
- /// 方差
- static double variance(const QVector<double> &vec)
- {
- return qSqrt(standardDeviation(vec));
- }
- } // namespace Helper
- #endif // MATHUTIL_H
|