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

📄 modle.bas

📁 用于空间插值的地理数据处理的趋势面分析
💻 BAS
字号:
Attribute VB_Name = "ModLE"
'''''''''''''''''''''''''''''''
'模块名:ModLE
'函数名:LEGauss
'功能:用高斯消元法求解对称方程组
'参数:n-integer变量,线性方程组的阶数
'      dbla-double型nxn二维变量,线性方程组的系数矩阵
'      dblb-double型长度为n的一维变量,线性方程组的常数向量,返回方程组的解向量
'返回值:boolean型,求解成功为true,无解或求解失败为false

Public Function LEGauss(ByVal n As Integer, dbla() As Double, dblb() As Double) As Boolean
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim nis As Integer
    Dim njs() As Integer
    Dim d As Double
    Dim t As Double
    ReDim njs(1 To n)
    
    '开始求解
    For k = 1 To n - 1
        d = 0#
        
        '归一
        For i = k To n
            For j = k To n
                t = Abs(dbla(i, j))
                If t > d Then
                    d = t
                    njs(k) = j
                    nis = i
                End If
            Next
        Next
        
        '无解,返回
        If d + 1# = 1# Then
            LEGauss = False
            Exit Function
        End If
        
        '消元
        If njs(k) <> k Then
            For i = 1 To n
                t = dbla(i, k)
                dbla(i, k) = dbla(i, njs(k))
                dbla(i, njs(k)) = t
            Next
        End If
        
        If nis <> k Then
            For j = k To n
                t = dbla(k, j)
                dbla(k, j) = dbla(nis, j)
                dbla(nis, j) = t
            Next
            t = dblb(k)
            dblb(k) = dblb(nis)
            dblb(nis) = t
        End If
        
        d = dbla(k, k)
        For j = k + 1 To n
            dbla(k, j) = dbla(k, j) / d
        Next
        
        dblb(k) = dblb(k) / d
        For i = k + 1 To n
            For j = k + 1 To n
                dbla(i, j) = dbla(i, j) - dbla(i, k) * dbla(k, j)
            Next
            dblb(i) = dblb(i) - dbla(i, k) * dblb(k)
        Next
    Next
        
    d = dbla(n, n)
        
    '无解,返回
    If Abs(d) + 1# = 1# Then
        LEGauss = False
        Exit Function
    End If
    
    '回代
    dblb(n) = dblb(n) / d
    For i = n - 1 To 1 Step -1
        t = 0#
        For j = i + 1 To n
            t = t + dbla(i, j) * dblb(j)
        Next
        dblb(i) = dblb(i) - t
    Next
        
    '调整解的次序
    njs(n) = n
    For k = n To 1 Step -1
        If njs(k) <> k Then
            t = dblb(k)
            dblb(k) = dblb(njs(k))
            dblb(njs(k)) = t
        End If
    Next
    
    '求解成功
    LEGauss = True
End Function

⌨️ 快捷键说明

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