算法

移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。

算法公式

一次移动平均

一次移动平均代码实现

#include<iostream>
#include<cstdlib>

using namespace std;

/* * a为需要输出的数据数组 * n为移动间隔 * t为期数 */

//得到第一个一次移动平均数
template<typename T>
T Get_MovAver_first(T* a, int n)
{
   
	T ret = 0;
	T* p = a;
	
	for(int i = 0; i < n; i++)
	{
   
		ret += *p;
		p++;
	}
	return (ret / n);
}

//得到下一个一次移动平均数
template<typename T>
T Get_MovAver_next(T M,T* a1,T* a2,int n)
{
   
	return (M + (*a1 - *a2) / n)
}

//得到第n个一次移动平均数
template<typename T>
T Get_MovAver_next_t(T* a, int n, int t, int size)
{
   
	if(t + 1 > size) exit(0);
	T M = Get_MovAver_first(a, n);
	T* p = a; p++;
	
	for(int i = t-n; i < t; i++)
	{
   
		M = Get_MovAver_next(M, p-1, p+1, n);
		p++;
	}
}

二次移动平均

二次移动平均代码实现

#include<iostream>

using namespace std;
//思路就是先生成一次移动平均的数组
T Get_MovAver_D(T M1, T M2, int n,int t)
{
   
	T a = 2 * M1 - M2;
	T b = 2 * (M1 - M2)/(n -1);
	
	return (a + b*t);
}

参考文献