资源简介
指数平滑法的计算中,关键是α的取值大小,但α的取值又容易受主观影响,因此合理确定α的取值方法十分重要,一般来说,如果数据波动较大,α值应取大一些,可以增加近期数据对预测结果的影响。如果数据波动平稳,α值应取小一些。理论界一般认为有以下方法可供选择:
经验判断法。这种方法主要依赖于时间序列的发展趋势和预测者的经验做出判断。
1、当时间序列呈现较稳定的水平趋势时,应选较小的α值,一般可在0.05~0.20之间取值;
2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.4之间取值;
3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值,以使预测模型灵敏度高些,能迅速跟上数据的变化;
4、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。
试算法。根据具体时间序列情况,参照经验判断法,来大致确定额定的取值范围,然后取几个α值进行试算,比较不同α值下的预测标准误差,选取预测标准误差最小的α。
在实际应用中预测者应结合对预测对象的变化规律做出定性判断且计算预测误差,并要考虑到预测灵敏度和预测精度是相互矛盾的,必须给予二者一定的考虑,采用折中的α值。
下期预测数=本期实际数×平滑系数+本期预测数×(1-平滑系数)
如某种产品销售量的平滑系数为0.4,1996年实际销售量为31万件,预测销售量为33万件。则1997年的预测销售量为:
1997年预测销售量= 31万件×0.4+33万件×(1-0.4)=32.2万件
代码片段和文件信息
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
///
/// MoveAverage移动平均法
///
public class MoveAverage
{
public ArrayList xArrayt;
public double[] OriArray;
public double[] OldArray;
// public int period;
static DataTable dt0 = new DataTable();
static DataTable dt1 = new DataTable();
static int n = 0;
static int m = 0;
public double[] PMA_dtAim;
public double[] PMA2_dtAim;
public double[] dtAim;
public double[] At;
public double[] Bt;
///
/// 从历史追溯数据定时程数据起始点设定步长移动平均
///
/// 历史追溯数据表
/// 时程数据表
/// 移动步长
public MoveAverage(double[] OriDt int previous)
{
//
// TODO: 在此处添加构造函数逻辑
//
n = OriDt.GetLength(0);
m = n - previous;
OriArray = new double[n];
OldArray = new double[m];
OriArray = OriDt;
for (int i = 0; i < m; i++)
{
OldArray[i] = OriDt[i+previous];
}
}
///
/// 一次移动平均
///
/// 步长
///
public double[] PMA1(int period)
{
double Xt = 0;
double Ft1 = 0;
PMA_dtAim = new double[m];
try
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < period; j++)
{
Ft1 = OriArray[n - m - period-1 + i + j];
}
Ft1 /= period;
PMA_dtAim[i] = Ft1;
Ft1 = 0;
}
}
catch(Exception ex)
{
string errStr = period + “_PMA1“ +ex.Message.ToString();
HttpContext.Current.Response.Write(“ript language=‘javascript‘>alert(‘“ + errStr + “‘); ript>“);
}
return PMA_dtAim;
}
///
/// 一次移动平均 预测下一个值
///
/// /// 步长
///
public double forecast(int period)
{
double FtF = 0;
try
{
FtF = PMA_dtAim[m - 1] + (OldArray[m - 1] - OldArray[m - 1 - period]) / period;// (yArray[m - 1] - yArray[m - 1 - period]) / period;
}
catch(Exception ex)
{
string errStr = period + “_forcast“ + ex.Message.ToString();
HttpContext.Current.Response.Write(“ript language=‘javascript‘>alert(‘“ +errStr + “‘); ript>“);
}
return FtF;
}
/*
///
/// 线性二次移动平均法
///
///
public double[] PMA2()
{
int
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7764 2009-06-05 15:07 MoveAverage.cs
文件 338944 2012-03-08 19:57 5.ppt
文件 1306 2012-03-08 19:04 指数平均.txt
----------- --------- ---------- ----- ----
348014 3
评论
共有 条评论