掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
データの平均値の計算について (ID:88488)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ガッさん凝り性ですね。私も。。。。 リングバッファを使うのは、データーを一括で読み込む場合ではなく、 ファイルからデーターを一つずつ読み込む場合です。 ファイルを一括で読み込む場合はガッさんのやり方が速い。 ただしリングの場合も平均値(実際は合計)を求めるのに、頭から足しこむ のではなく、単に前の合計から、上書きされようとしているデーターを 引き、新しいデーターを足せば良いと思います。 Option Explicit Const bNo = 20 '平均する個数 Private Sub Command1_Click() 'デバッグ用です、実際はファイルから読み込み Dim i As Long For i = 1 To 100 Ring (i) Next End Sub Private Sub Ring(ByVal Value As Double) Static Rbuff(0 To bNo) As Double 'Ring Buff Rbuff(0)は一番初めに使うのみ Static Pos As Long 'Ring pointer Static Sum As Double Dim Ave As Double Pos = Pos Mod bNo + 1 Sum = Sum - Rbuff(Pos) + Value 'New Sum Value Ave = Sum / bNo '移動平均値 Rbuff(Pos) = Value Debug.Print "pos = " & Pos & " : Value = " _ & Value & " : sum = " & Sum & " : Ave = " & Ave End Sub 1から100まで20個づつの移動平均を出しています。データーが20を超えたら 1づつ増えていけば成功です。 この方式は宣言を除くと、たった4行のプログラムになり、 アルゴリズムが簡単なのが自慢です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.