⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moveaverage.cs

📁 移动平均法源码,步长有5,10,30,内含一次指数平滑计算法,适合进行数据短 中 长期预测
💻 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 + -