📄 高斯消元法.frm
字号:
VERSION 5.00
Begin VB.Form Form1
Caption = "高斯消元法解方程"
ClientHeight = 8205
ClientLeft = 60
ClientTop = 345
ClientWidth = 9420
Icon = "高斯消元法.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 8205
ScaleWidth = 9420
StartUpPosition = 2 '屏幕中心
Begin VB.CommandButton Command1
Caption = "运算"
Height = 375
Left = 1560
TabIndex = 13
Top = 4200
Width = 1575
End
Begin VB.CommandButton Command3
Caption = "退出"
Height = 375
Left = 6360
TabIndex = 12
Top = 4200
Width = 1575
End
Begin VB.CommandButton Command2
Caption = "清除"
Height = 375
Left = 3960
TabIndex = 11
Top = 4200
Width = 1575
End
Begin VB.TextBox Text4
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 1335
Left = 1440
MultiLine = -1 'True
TabIndex = 10
Top = 5640
Width = 6495
End
Begin VB.TextBox Text3
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 375
Left = 2280
TabIndex = 8
Top = 2880
Width = 1335
End
Begin VB.TextBox Text2
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 375
Left = 2280
TabIndex = 6
Top = 2040
Width = 1335
End
Begin VB.ListBox List1
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 1260
ItemData = "高斯消元法.frx":0442
Left = 4200
List = "高斯消元法.frx":0444
TabIndex = 4
Top = 1560
Width = 5055
End
Begin VB.TextBox Text1
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 375
Left = 2280
TabIndex = 2
Top = 1200
Width = 1335
End
Begin VB.Label Label7
Caption = "输入右端向量"
ForeColor = &H00800000&
Height = 495
Left = 720
TabIndex = 9
Top = 2880
Width = 1215
End
Begin VB.Label Label6
Caption = "输入各系数"
ForeColor = &H00800000&
Height = 375
Left = 720
TabIndex = 7
Top = 2040
Width = 1215
End
Begin VB.Label Label5
Caption = "未知数矩阵"
ForeColor = &H00800000&
Height = 495
Left = 1440
TabIndex = 5
Top = 5160
Width = 1575
End
Begin VB.Label Label3
Caption = "——输入方程组——"
ForeColor = &H00800000&
Height = 375
Left = 5760
TabIndex = 3
Top = 1080
Width = 1935
End
Begin VB.Label Label2
Caption = "请输入变量个数n"
ForeColor = &H00800000&
Height = 375
Left = 720
TabIndex = 1
Top = 1200
Width = 1455
End
Begin VB.Label Label1
Caption = "高斯消元法解方程组"
BeginProperty Font
Name = "宋体"
Size = 15.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 375
Left = 3480
TabIndex = 0
Top = 360
Width = 3015
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public n%, x1$, geshu%, k1%, k2%, yijingjisuan As Boolean
Dim a#(), b#()
Private Sub Command1_Click()
Dim i%, j%, k%, l#, shu$
Dim s#
On Error GoTo error3
If yijingjisuan = True Then Exit Sub
'高斯消元算法
For k = 1 To n - 1 '消元过程
For i = k + 1 To n
If a(k, k) = 0 Then
MsgBox "警告!此方程无解或输入错误!请重新输入!", 48, "提示"
Call Command2_Click
Exit Sub
End If
l = a(i, k) / a(k, k)
For j = k + 1 To n
a(i, j) = a(i, j) - l * a(k, j)
Next j
b(i) = b(i) - l * b(k)
Next i
Next k
For i = n To 1 Step -1 '计算变量矩阵
s = 0
For j = i + 1 To n
s = s + a(i, j) * b(j)
Next j
If a(k, k) = 0 Then
MsgBox "警告!此方程无解或输入错误!请重新输入!", 48, "提示"
Call Command2_Click
Exit Sub
End If
b(i) = (b(i) - s) / a(i, i)
b(i) = Format(b(i), "####0.000000")
Next i
For i = 1 To n '输出结果
shu = Trim(Str(b(i)))
If Left(shu, 1) = "." Then shu = "0" & shu
If Left(shu, 2) = "-." Then shu = "-0" & Mid(shu, 2)
Text4.Text = Text4.Text + "x(" + Trim(Str(i)) + ")=" + shu + " "
Next i
yijingjisuan = True
Command2.SetFocus
Exit Sub
On Error GoTo 0
error3:
MsgBox "警告!此方程无解或输入错误!请重新输入!", 48, "提示"
End Sub
Private Sub Command2_Click()
List1.Clear
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
x1 = ""
X2 = ""
geshu = 0
k1 = 0
k2 = 0
yijingjisuan = False
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
x1 = ""
X2 = ""
geshu = 0
k1 = 0
k2 = 0
yijingjisuan = False
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
n = Int(Val(Text1))
If KeyAscii = 13 Then
ReDim a(n, n)
ReDim b(n)
Text2.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Dim i%, j%
On Error GoTo error1
If KeyAscii = 13 Then
geshu = geshu + 1
i = k1 \ n + 1
j = k1 Mod n + 1
a(i, j) = Val(Text2) '输入系数矩阵
k1 = k1 + 1
If x1 <> "" Then x1 = x1 & "+"
x1 = x1 & Trim(Val(Text2)) & "x(" & Trim(Str(geshu)) & ")"
Text2 = ""
If geshu = n Then
geshu = 0
Text3.SetFocus
End If
If List1.ListCount > n Then
MsgBox "警告!输入数据过多!请重新输入!", 48, "提示"
List1.Clear
Call Command2_Click
Exit Sub
End If
End If
Exit Sub
On Error GoTo 0
error1:
Text2 = ""
MsgBox "警告!输入数据过多!请重新输入!", 48, "提示"
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
Dim i%, j%
On Error GoTo error2
If KeyAscii = 13 Then
List1.AddItem x1 & "=" & Trim(Val(Text3))
x1 = ""
b(k2 + 1) = Val(Text3) '输入右端向量
k2 = k2 + 1
Text3 = ""
If List1.ListCount = n Then
Command1.SetFocus
Exit Sub
End If
If List1.ListCount > n Then
MsgBox "警告!输入数据过多!请重新输入!", 48, "提示"
List1.Clear
Call Command2_Click
Exit Sub
End If
Text2.SetFocus
End If
Exit Sub
On Error GoTo 0
error2:
Text3 = ""
MsgBox "警告!输入数据过多!请重新输入!", 48, "提示"
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -