加权移动平均算法 C++ 代码实现 求平均后的数组 完整代码
时间: 2024-09-10 08:24:11 浏览: 42
加权移动平均算法是一种对序列数据计算平均值的方法,其中近期的数据赋予更高的权重。在C++中,你可以通过创建一个动态数组存储数据,并根据给定的权重实时更新平均值来实现。以下是一个简单的例子:
```cpp
#include <iostream>
#include <vector>
// 定义加权移动平均函数
double weightedMovingAverage(const std::vector<int>& data, const std::vector<double>& weights, int windowSize) {
if (data.size() != weights.size() || data.size() < windowSize) {
throw std::invalid_argument("Invalid input sizes");
}
double sum = 0.0;
double weightSum = 0.0;
double average;
for (int i = 0; i < windowSize; ++i) {
sum += data[i] * weights[i];
weightSum += weights[i];
}
average = sum / weightSum;
return average;
}
int main() {
// 示例数据
std::vector<int> values = {5, 10, 15, 20, 25};
std::vector<double> weights = {0.4, 0.3, 0.2, 0.1, 0.0}; // 权重总和应接近1
int windowSize = values.size();
try {
double avg = weightedMovingAverage(values, weights, windowSize);
std::cout << "Weighted moving average: " << avg << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个代码里,`weightedMovingAverage` 函数接收一个整数向量 `data` 和对应权重的双精度浮点数向量 `weights`,以及一个窗口大小 `windowSize`。它首先检查输入是否有效,然后计算并返回前 `windowSize` 个元素的加权平均值。
如果你想计算每个时间步的加权平均,你需要不断滚动窗口并在新的数据到来时移除旧数据并加入新数据对应的权重。
阅读全文