📄 非线性方程组.frm
字号:
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 6075
ClientLeft = 60
ClientTop = 450
ClientWidth = 8640
LinkTopic = "Form1"
ScaleHeight = 6075
ScaleWidth = 8640
StartUpPosition = 3 'Windows Default
Begin VB.PictureBox Picture1
Height = 2055
Left = 2640
ScaleHeight = 1995
ScaleWidth = 3555
TabIndex = 1
Top = 720
Width = 3615
End
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 1095
Left = 1440
TabIndex = 0
Top = 3360
Width = 1335
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public Function LEGauss(n As Integer, dblA() As Double, dblB() As Double) As Boolean
' 局部变量
Dim i As Integer, j As Integer, k As Integer
Dim nIs As Integer
ReDim nJs(n) As Integer
Dim d As Double, t As Double
' 开始求解
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 j
Next i
' 无解,返回
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 i
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 j
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 j
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 j
dblB(i) = dblB(i) - dblA(i, k) * dblB(k)
Next i
Next k
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 j
dblB(i) = dblB(i) - t
Next i
' 调整解的次序
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 k
' 求解成功
LEGauss = True
End Function
Private Sub Command1_Click()
Dim a(2, 2) As Double, b(2) As Double
a(1, 1) = 1
a(1, 2) = 1
a(2, 1) = 2
a(2, 2) = 3
b(1) = 5
b(2) = 6
Call LEGauss(2, a, b)
For i = 1 To 2
Picture1.Print b(i)
Next i
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -