📄 moveaverage.cs
字号:
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 WebSite;
using System.Collections;
/// <summary>
/// MoveAverage移动平均法
/// </summary>
public class MoveAverage
{
public ArrayList xArrayt;
public double[] xArray;
public double[] yArray;
public int period;
static DataTable dt0 = new DataTable();
static DataTable dt1 = new DataTable();
static int n = 0;
static int m = 0;
/// <summary>
/// 从历史追溯数据定时程数据起始点,设定步长移动平均
/// </summary>
/// <param name="dtSource0">历史追溯数据表</param>
/// <param name="dtSource1">时程数据表</param>
/// <param name="period">移动步长</param>
public MoveAverage(DataTable dtSource0, DataTable dtSource1, int period)
{
//
// TODO: 在此处添加构造函数逻辑
//
n = dtSource0.Rows.Count;
m = dtSource1.Rows.Count;
xArray = new double[n];
yArray = new double[m];
for (int i=0; i < n; i++)
{
xArray[i] = double.Parse(dtSource0.Rows[i][1].ToString());
}
for (int i = 0; i < m; i++)
{
yArray[i] = double.Parse(dtSource1.Rows[i][1].ToString());
}
this.period = period;
}
/// <summary>
/// 一次移动平滑 5天
/// </summary>
/// <returns></returns>
public double[] PMA1()
{
double Xt = 0;
double Ft = 0;
double Ft1 = 0;
double[] dtAim = new double[m];
try
{
for (int i = 0; i < m; i++)
{
Xt = yArray[i];
//Ft = xArray[n - m - period + i];
for (int j = 1; j <= period; j++)
{
Ft1 += xArray[n - m - j + i];
}
Ft1 /= period;
dtAim[i] = Ft1;
Ft1 = 0;
}
}
catch
{ }
return dtAim;
}
/// <summary>
/// 预测下一个值
/// </summary>
/// <returns></returns>
public double forecast()
{
double Xt = 0;
double Ft = 0;
double Ft1 = 0;
double FtF = 0;
double[] dtAim = new double[m];
try
{
for (int i = 0; i < m; i++)
{
Xt = yArray[i];
//Ft = xArray[n - m - period + i];
for (int j = 1; j <= period; j++)
{
Ft1 += xArray[n - m - j + i];
}
Ft1 /= period;
dtAim[i] = Ft1;
Ft1 = 0;
}
FtF = dtAim[m - 1] + (yArray[m - 1] - yArray[m - 1 - period]) / period;
}
catch
{ }
return FtF;
}
/// <summary>
/// 一次移动平滑Ft近似X(i-period)
/// </summary>
/// <returns>返回double[]</returns>
public double[] MA1()
{
double Xt = 0;
double Ft = 0;
double Ft1 = 0;
double[] dtAim = new double[m];
try
{
for (int i = 0; i < m; i++)
{
Xt = yArray[i];
Ft = xArray[n-m - period+i];
Ft1 = Ft + (Xt - Ft) / period;
dtAim[i] = Ft1;
}
}
catch { }
return dtAim;
}
/// <summary>
/// 一次指数平滑法
/// </summary>
/// <returns>返回double[]</returns>
public double[] IMA1()
{
double Xt = 0;
double Ft = 0;
double Ft1 = 0;
double[] dtAim = new double[m];
try
{
for (int i = 0; i < m; i++)
{
Xt = yArray[i];
Ft = xArray[n - m - 1+i];
//Ft = xArray[n - m - 1];
Ft1 = Ft + (Xt - Ft) / period;
dtAim[i] = Ft1;
}
}
catch
{ }
return dtAim;
}
/// <summary>
/// 线性二次移动平均
/// </summary>
/// <returns></returns>
/* public double[] MA2()
{
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -