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

📄 滑动平均m2.bas

📁 <VB数理统计实用算法>书中的算法源程序
💻 BAS
字号:
Attribute VB_Name = "modMethod"
'滑动平均
Option Explicit

'一次三点滑动平均
'P:原始数据,二维
'R:滑动平均结果,二维
'E:残差,二维
Public Sub Smooth_1_3(P() As Double, R() As Double, E() As Double)
    Dim I As Integer, J As Integer
    Dim M As Integer, N As Integer
    On Error GoTo SmoothErr
    M = UBound(P, 1)                        '数据组数
    N = UBound(P, 2)                        '数据点数
    For I = 1 To M
'滑动平均
        R(I, 1) = 0.83333333 * P(I, 1) + 0.33333333 * P(I, 2) - 0.16666667 * P(I, 3)
        For J = 2 To N - 1
            R(I, J) = (P(I, J - 1) + P(I, J) + P(I, J + 1)) * 0.33333333
        Next J
        R(I, N) = -0.16666667 * P(I, N - 2) + 0.33333333 * P(I, N - 1) + 0.83333333 * P(I, N)
'计算残差
        For J = 1 To N
            E(I, J) = P(I, J) - R(I, J)
        Next J
    Next I
    Exit Sub
SmoothErr:
    MsgBox "在求一次三点滑动平均的过程中出现错误!"
    Exit Sub
End Sub

'一次五点滑动平均
'P:原始数据,二维
'R:滑动平均结果,二维
'E:残差,二维
Public Sub Smooth_1_5(P() As Double, R() As Double, E() As Double)
    Dim I As Integer, J As Integer
    Dim M As Integer, N As Integer
    On Error GoTo SmoothErr
    M = UBound(P, 1)                        '数据组数
    N = UBound(P, 2)                        '数据点数
    For I = 1 To M
'滑动平均
        R(I, 1) = (3 * P(I, 1) + 2 * P(I, 2) + P(I, 3) - P(I, 5)) / 5
        R(I, 2) = (4 * P(I, 1) + 3 * P(I, 2) + 2 * P(I, 3) + P(I, 4)) / 10
        For J = 3 To N - 2
            R(I, J) = (P(I, J - 2) + P(I, J - 1) + P(I, J) + P(I, J + 1) + P(I, J + 2)) / 5
        Next J
        R(I, N - 1) = (P(I, N - 3) + 2 * P(I, N - 2) + 3 * P(I, N - 1) + 4 * P(I, N)) / 10
        R(I, N) = (-P(I, N - 4) + P(I, N - 2) + 2 * P(I, N - 1) + 3 * P(I, N)) / 5
'计算残差
        For J = 1 To N
            E(I, J) = P(I, J) - R(I, J)
        Next J
    Next I
    Exit Sub
SmoothErr:
    MsgBox "在求一次五点滑动平均的过程中出现错误!"
    Exit Sub
End Sub

'三次五点滑动平均
'P:原始数据,二维
'R:滑动平均结果,二维
'E:残差,二维
Public Sub Smooth_3_5(P() As Double, R() As Double, E() As Double)
    Dim I As Integer, J As Integer
    Dim M As Integer, N As Integer
    On Error GoTo SmoothErr
    M = UBound(P, 1)                        '数据组数
    N = UBound(P, 2)                        '数据点数
    For I = 1 To M
'滑动平均
        R(I, 1) = 0.98571429 * P(I, 1) + 0.05714286 * (P(I, 2) + P(I, 4)) _
                - 0.08571429 * P(I, 3) - 0.01428571 * P(I, 5)
        R(I, 2) = 0.05714286 * (P(I, 1) + P(I, 5)) + 0.77142857 * P(I, 2) _
                + 0.34285714 * P(I, 3) - 0.22857143 * P(I, 4)
        For J = 3 To N - 2
            R(I, J) = -0.08571429 * (P(I, J - 2) + P(I, J + 2)) + 0.34285714 * _
                (P(I, J - 1) + P(I, J + 1)) + 0.48571429 * P(I, J)
        Next J
        R(I, N - 1) = 0.05714286 * (P(I, N - 4) + P(I, N)) - 0.22857143 * _
                P(I, N - 3) + 0.34285714 * P(I, N - 2) + 0.77142857 * P(I, N - 1)
        R(I, N) = -0.01428571 * P(I, N - 4) + 0.05714286 * (P(I, N - 3) + P(I, N - 1)) _
                - 0.08571429 * P(I, J - 2) + 0.98571429 * P(I, N)
'计算残差
        For J = 1 To N
            E(I, J) = P(I, J) - R(I, J)
        Next J
    Next I
    Exit Sub
SmoothErr:
    MsgBox "在求一次五点滑动平均的过程中出现错误!"
    Exit Sub
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -