📄 modle.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 + -