亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

使用C# 實現(xiàn)移動加權(quán)平均(Weighted Moving Average)算法

admin
2025年7月17日 22:12 本文熱度 495

前面我們討論過"C#實現(xiàn)加權(quán)平均法",今天我們繼續(xù)研究另外一種【移動加權(quán)平均法】。

在時間序列分析、股票數(shù)據(jù)處理、工業(yè)信號平滑等場景中,移動平均(Moving Average) 是最常見的平滑技術(shù)之一。相比簡單移動平均(SMA),移動加權(quán)平均(WMA) 會給更靠近當(dāng)前時刻的數(shù)據(jù)分配更高的權(quán)重,能更敏銳地反映趨勢變化。

本文會深入了解如下內(nèi)容:

  • ? 快速理解 WMA 的原理
  • ? 使用 C# 編寫一個通用的 WMA 實現(xiàn)
  • ? 提供完整示例和代碼解析

什么是移動加權(quán)平均(WMA)?

移動加權(quán)平均(Weighted Moving Average, WMA)與簡單移動平均(Simple Moving Average, SMA)的區(qū)別在于:

  • ? SMA 是把窗口內(nèi)的值等權(quán)重平均;
  • ? WMA 則對窗口內(nèi)的值分配不同的權(quán)重,通常是離當(dāng)前點越近,權(quán)重越大。

舉個例子:

  • ? 對于長度為 5 的窗口,權(quán)重可能是 [1, 2, 3, 4, 5],最新值乘以 5,最舊值乘以 1。

算法思路

對于一個時間序列:

  1. 1. 定義窗口大小 n,以及對應(yīng)的權(quán)重列表 [w1, w2, ..., wn]
  2. 2. 從頭到尾滑動窗口,每個位置計算:
  3. 3. 對每個位置輸出對應(yīng)的 WMA。

C# 實現(xiàn)示例

下面是一份使用 .NET 6/C# 10 的 WMA 完整示例:

using System;
using System.Collections.Generic;
using System.Linq;

namespaceWeightedMovingAverageDemo
{
    classProgram
    {
        static void Main(string[] args)
        {
            // 原始數(shù)據(jù)序列
            List<double> data = new() { 102030405060708090100 };

            // 設(shè)置窗口大小
            int windowSize = 3;

            // 設(shè)置權(quán)重(例如 1, 2, 3,離當(dāng)前位置越近權(quán)重越大)
            List<double> weights = new() { 123 };

            List<double> result = CalculateWeightedMovingAverage(data, windowSize, weights);

            Console.WriteLine("移動加權(quán)平均結(jié)果:");
            Console.WriteLine(string.Join(", ", result.Select(x => x.ToString("F2"))));
        }

        /// <summary>
        /// 計算移動加權(quán)平均數(shù)
        /// </summary>
        static List<doubleCalculateWeightedMovingAverage(List<double> data, int windowSize, List<double> weights)
        {
            if (weights.Count != windowSize)
                thrownew ArgumentException("權(quán)重數(shù)量必須等于窗口大小。");

            List<double> result = new();

            for (int i = 0; i <= data.Count - windowSize; i++)
            {
                double weightedSum = 0;
                double weightSum = weights.Sum();

                for (int j = 0; j < windowSize; j++)
                {
                    weightedSum += data[i + j] * weights[j];
                }

                result.Add(weightedSum / weightSum);
            }

            return result;
        }
    }
}

代碼解析

1?? 輸入數(shù)據(jù)

  • data:原始時間序列,如傳感器數(shù)據(jù)、股價等。
  • windowSize:滑動窗口大小。
  • weights:自定義權(quán)重列表,元素個數(shù)必須與窗口大小一致。

2?? 算法核心

  • ? 外層循環(huán):從頭到尾滑動窗口。
  • ? 內(nèi)層循環(huán):窗口內(nèi)每個值乘以權(quán)重累加。
  • ? 用加權(quán)和除以權(quán)重之和,得出 WMA。

3?? 返回值

  • ? 返回一個新的列表,長度是 data.Count - windowSize + 1。

輸出結(jié)果

輸入數(shù)據(jù):

10, 20, 30, 40, 50, 60, 70, 80, 90, 100

窗口大小:3
權(quán)重:[1, 2, 3]

輸出:

---

解釋:

  • ? 第一個窗口 (10,20,30) => (10×1 + 20×2 + 30×3)/6 = 23.33
  • ? 第二個窗口 (20,30,40) => (20×1 + 30×2 + 40×3)/6 = 33.33
  • ? 以此類推。

?? 小結(jié)

本篇演示了:

  • ? 移動加權(quán)平均的核心原理
  • ? 使用 C# 編寫通用實現(xiàn)
  • ? 靈活設(shè)置權(quán)重,提升趨勢檢測的靈敏度

在工業(yè)生產(chǎn)、金融數(shù)據(jù)分析、實時信號濾波等場景,都可以直接使用此實現(xiàn),或者把它封裝為工具類。


閱讀原文:原文鏈接


該文章在 2025/7/18 10:46:16 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved