📄 module1.bas
字号:
Attribute VB_Name = "Module1"
Option Explicit
Public Function gosi(n As Integer, aa() As Double, bb() As Double, X() As Double)
Dim i, j, k As Integer
Dim temp As Double
Dim tempnum As Integer
Dim a() As Double
ReDim a(1 To n, 1 To n) As Double
Dim b() As Double
ReDim b(1 To n) As Double
'--------------------保持输入系数及常数矩阵不变
For i = 1 To n
For j = 1 To n
a(i, j) = aa(i, j)
Next j
b(i) = bb(i)
Next i
'**************************
'----------------------------对系数矩阵进行初步处理,使对角元素尽可能为所在列的最大值
For i = 1 To n - 1
temp = Abs(a(i, i))
tempnum = i
For j = i To n
If temp < Abs(a(j, i)) Then
temp = Abs(a(j, i))
tempnum = j
Else
End If
Next j
For j = 1 To n
temp = a(i, j)
a(i, j) = a(tempnum, j)
a(tempnum, j) = temp
Next j
temp = b(i)
b(i) = b(tempnum)
b(tempnum) = temp
Next i
'**********************************************
For i = 1 To n - 1
If a(i, i) = 0 Then
For j = i To n
If a(j, i) <> 0 Then '寻找所在列不为0的行,并调换
For k = i To n
temp = a(j, k)
a(j, k) = a(i, k)
a(i, k) = temp
Next k
temp = b(i)
b(i) = b(j)
b(j) = temp
Else
End If
Exit For
Next j
Else
End If
If a(i, i) = 0 Then
MsgBox "error!"
Exit Function
End If
'----------------------------消去
For j = i + 1 To n
For k = n To i + 1 Step -1
a(j, k) = a(j, k) - a(i, k) * a(j, i) / a(i, i)
Next k
b(j) = b(j) - b(i) * a(j, i) / a(i, i)
a(j, k) = a(j, k) - a(i, k) * a(j, i) / a(i, i)
Next j
Next i
'----------------------回代
For i = n To 1 Step -1
For j = i + 1 To n
X(i) = X(i) + a(i, j) * X(j)
Next j
X(i) = b(i) - X(i)
X(i) = X(i) / a(i, i)
Next i
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -