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

📄 module5.bas

📁 使用的是最小误差法的插补程序
💻 BAS
字号:
Attribute VB_Name = "Module5"
'对曲线做最小二乘法的拟合
Public Sub DoData1()

Dim i As Integer            '循环变量
Dim xAve As Double          'X的平均值
    
Dim MaxMin(1 To 2, 1 To 4) As Single    '拟和后最大值,最小值
Dim a(6) As Double                  '存储多项式的5个系数
Dim dt(3) As Double
Dim j As Integer, K As Integer
Dim g As Double
Dim z As Double, p As Double, c As Double, q As Double, d1 As Double, d2 As Double
Dim s(20) As Double, t(20) As Double, b(20) As Double
Dim m As Integer           '循环变量
Dim xSum As Double         '存储X的总和
Dim N As Integer

'首先获得最小二成拟合多项式的系数
m = 1
    For i = 0 To 5
        a(i) = 0
    Next i
    z = 0
    For i = 0 To 9
        z = z + i / 10
    Next i
        b(0) = 1
        d1 = 10
        p = 0
        c = 0
    For i = 0 To 9
        p = p + i - z
        c = c + Shun(i, m)
    Next i
    c = c / d1
    p = p / d1
    a(0) = c * b(0)
        
    t(1) = 1
    t(0) = -1 * p
    d2 = 0
    c = 0
    g = 0
    For i = 0 To 9
        q = i - z - p
        d2 = d2 + q * q
        c = c + Shun(i, m) * q
        g = g + (i - z) * q * q
    Next i
               
    c = c / d2
    p = g / d2
    q = d2 / d1
    d1 = d2
    a(1) = c * t(1)
    a(0) = c * t(0) + a(0)
    For j = 2 To 5
        s(j) = t(j - 1)
        s(j - 1) = -p * t(j - 1) + t(j - 2)
        If (j >= 3) Then
            For K = 1 To j - 2
                s(j - 1 - K) = -p * t(j - 1 - K) + t(j - 2 - K) - q * b(j - 1 - K)
            Next K
        End If
        s(0) = -p * t(0) - q * b(0)
        d2 = 0
        c = 0
        g = 0
        For i = 0 To 9
            q = s(j)
            For K = 0 To j - 1
                q = q * (i - z) + s(j - 1 - K)
            Next K
            d2 = d2 + q * q
            c = c + Shun(i, m) * q
            g = g + (i - z) * q * q
        Next i
        c = c / d2
        p = g / d2
        q = d2 / d1
        d1 = d2
        a(j) = c * s(j)
        t(j) = s(j)
        For K = 0 To j - 1
            a(j - 1 - K) = c * s(j - 1 - K) + a(j - 1 - K)
            b(j - 1 - K) = t(j - 1 - K)
            t(j - 1 - K) = s(j - 1 - K)
        Next K
    Next j
    '===========================
    '获取系数结束
    '===========================
        

    xSum = 0
        
    For i = 0 To 9
        xSum = i + xSum
    Next i
    xAve = xSum / 10
    '根据多项式生成你和结果和最大值、最小值
    For i = 0 To 9
    '生成结果数组
        Shun(i, m) = a(0) + a(1) * (i - xAve) + a(2) * (i - xAve) * (i - xAve) _
            + a(3) * (i - xAve) * (i - xAve) * (i - xAve) + a(4) * (i - xAve) _
            * (i - xAve) * (i - xAve) * (i - xAve) + a(5) * (i - xAve) _
            * (i - xAve) * (i - xAve) * (i - xAve) * (i - xAve)
    Next i


End Sub

⌨️ 快捷键说明

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