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

📄 d9r10.bas

📁 VB常用数值算法集1 VB常用数值算法集1
💻 BAS
字号:
Attribute VB_Name = "Module1"
Public NDATAT, XT(1000), YT(1000), ARR(1000), AA, ABDEVT
Sub MEDFIT(X(), Y(), NDATA, A, B, ABDEV)
    SX = 0#
    SY = 0#
    SXY = 0#
    SXX = 0#
    For J = 1 To NDATA
        XT(J) = X(J)
        YT(J) = Y(J)
        SX = SX + X(J)
        SY = SY + Y(J)
        SXY = SXY + X(J) * Y(J)
        SXX = SXX + X(J) ^ 2
    Next J
    NDATAT = NDATA
    DEL = NDATA * SXX - SX ^ 2
    AA = (SXX * SY - SX * SXY) / DEL
    BB = (NDATA * SXY - SX * SY) / DEL
    CHISQ = 0#
    For J = 1 To NDATA
        CHISQ = CHISQ + (Y(J) - (AA + BB * X(J))) ^ 2
    Next J
    SIGB = Sqr(CHISQ / DEL)
    B1 = BB
    F1 = ROFUNC(B1)
    B2 = BB + Abs(3 * SIGB) * Sgn(F1)
    F2 = ROFUNC(B2)
1   If F1 * F2 > 0# Then
        BB = 2# * B2 - B1
        B1 = B2
        F1 = F2
        B2 = BB
        F2 = ROFUNC(B2)
        GoTo 1
    End If
    SIGB = 0.01 * SIGB
2   If Abs(B2 - B1) > SIGB Then
        BB = 0.5 * (B1 + B2)
        If BB = B1 Or BB = B2 Then GoTo 3
        F = ROFUNC(BB)
        If F * F1 >= 0# Then
            F1 = F
            B1 = BB
        Else
            F2 = F
            B2 = BB
        End If
        GoTo 2
    End If
3   A = AA
    B = BB
    ABDEV = ABDEVT / NDATA
End Sub
Function ROFUNC(B)
    N1 = NDATAT + 1
    NML = N1 / 2
    NMH = N1 - NML
    For J = 1 To NDATAT
        ARR(J) = YT(J) - B * XT(J)
    Next J
    Call SORT(NDATAT, ARR())
    AA = 0.5 * (ARR(NML) + ARR(NMH))
    Sum = 0#
    ABDEVT = 0#
    For J = 1 To NDATAT
        D = YT(J) - (B * XT(J) + AA)
        ABDEVT = ABDEVT + Abs(D)
        Sum = Sum + XT(J) * Sgn(D)
    Next J
    ROFUNC = Sum
End Function
Sub SORT(N, RA())
      L = Int(N / 2) + 1
      IR = N
      Do
          If L > 1 Then
            L = L - 1
            RRA = RA(L)
          Else
            RRA = RA(IR)
            RA(IR) = RA(1)
            IR = IR - 1
            If IR = 1 Then
              RA(1) = RRA
              Exit Sub
            End If
          End If
          I = L
          J = L + L
          While J <= IR
            If J < IR Then
              If RA(J) < RA(J + 1) Then J = J + 1
            End If
            If RRA < RA(J) Then
              RA(I) = RA(J)
              I = J
              J = J + J
            Else
              J = IR + 1
            End If
          Wend
          RA(I) = RRA
      Loop
End Sub

⌨️ 快捷键说明

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