HELP!!!求解线性方程组
这是一个求解线性方程组的程序,我检查了好几遍搞不懂哪里出了问题,请各位指点!(我刚刚学vb)
Option Explicit
Private Sub Command1_Clike()
Dim i As Integer, j As Integer, k As Integer
k = 0
For i = 1 To num
For j = 1 To num
a(i, j) = Val(Text1(k), Text)
k = k + 1
Next j
b(i) = Val(Text2(i - 1), Text)
Next i
Call Guass
For i = 1 To num
Label5(i - 1).Caption = Left$(Str$(x(i)), 6)
Label5(i - 1).Visible = True
Label4.Visible = True
Next i
End Sub
Private Sub Command2_Clike()
Dim i As Integer, j As Integer, k As Integer
Dim setX As Integer, setY As Integer
Dim setX(1 To 10) As Integer
num = Val(txtNum.Text)
Call Form_Load
If num > 10 Then
MsgBox "Number of input is too larger. "
Exit Sub
End If
Label1.Caption = Space(2) & "a(x,y) " & Space(1)
Label3.Caption = " "
Label1.Height = 300
Label1.Top = Text1(0).Top - 320
Label3.Top = Text1(0).Top
k = 0
For i = 1 To num
setX = 600
Label1.Caption = Label1.Caption & Str$(i) & Space(7)
For j = 1 To num
setY = Text1(0).Top + (i - 1) * Text1(0).Height
Text1(k).Move setX, setY, Text1(0).Width, Text1(0).Height
Text1(k).Visible = True
If i = num Then
Label5(j - 1).Move setX, setY + Text1(0).Height + 80, Text1(0).Width, Text1(0).Height
End If
set1X(j) = setX
setX = setX + Text1(0).Width + 50
k = k + 1
Next j
Text2(i - 1).Move setX, setY, Text1(0).Width, Text1(0).Height
Text2(i - 1).Visible = True
Label3.Caption = Label3.Caption & Right(Str$(i), 1) & Space(4)
Next i
Label1.Left = 100
Label3.Left = 300
Label3.Width = 100
Label3.Height = setY - Label3.Top + 500
Label1.Caption = Label1.Caption & "b "
Command1.Left = setX - 1000
Command1.Top = setY + Text1(0).Height * 2
Label4.Left = 50
Label4.Top = Label5(0).Top + 10
Label3.Visible = True
Label1.Visible = True
Command1.Visible = True
Form1.Width = setX + Text1(0).Width + 1000
Form1.Height = setX + Command1.Top + 1000
End Sub
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 99
Text1(i).Visible = False
Text1(i).Text = " "
Next i
For i = 0 To 9
Text2(i).Visible = False
Text2(i).Text = " "
Label5(i).Visible = False
Next i
Label3.Visible = False
Label1.Visible = False
Label4.Visible = False
Command1.Visible = False
Form1.Height = 2000
End Sub
Option Explicit
Public num As Integer
Public a(1 To 10, 1 To 10) As Double
Public b(1 To 10) As Double
Public x(1 To 10) As Double
Sub Guass()
Dim d As Double, t As Double, js(1 To 10) As Double
Dim i, j, k, l, m, n, iss, NN As Integer
NN = num + 1
l = 1
n = num
For k = 1 To NN - 1
d = 0#
For i = k To NN
For j = k To NN
If Abs(a(i, j)) > d Then
d = Abs(a(i, j))
js(k) = j
iss = i
End If
Next j
Next i
If d + 1# = 1# Then
l = 0
Else
If js(k) <> k Then
For i = 1 To NN
t = a(i, k)
a(i, k) = a(i, js(k))
a(i, js(k)) = t
Next i
End If
If iss <> k Then
For j = 1 To NN
t = a(k, j)
a(k, j) = a(iss, j)
a(iss, j) = t
Next j
t = b(k)
b(k) = b(iss)
b(iss) = t
End If
End If
If l = 0 Then
MsgBox ( "Gauss fail at l. ")
Exit Sub
End If
For j = k + 1 To NN
a(j, k) = a(j, k) / a(k, k)
For i = k + 1 To NN
For m = k + 1 To NN
a(i, m) = a(i, m) - a(i, k) * a(k, m)
Next m
b(i) = b(i) - a(i, k) * b(k)
a(i, k) = 0
Next i
Next j
Next k
If Abs(a(m, n)) = 0 Then
l = 0
MsgBox ( "gauss fail at 2 ")
Exit Sub
End If
x(n) = b(n) / a(n, n)
For i = n - 1 To 1 Step -1
t = 0#
For j = i + 1 To NN
t = t + a(i, j) * x(j)
Next j
x(i) = (b(i) - t) / a(i, j)
Next i
js(n) = NN - 1
For k = NN - 1 To 1 Step -1
If js(k) <> k Then
t = x(k)
x(k) = x(js(k))
x(js(k)) = t
End If
Next k
End Sub
[解决办法]
搞不懂你的代码,你多加些注释啦,很多代码如果可以共享就把它提取出来做个独立的函数,便于维护.改起来也容易些.呵呵.