首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

HELP!求解线性方程组,该如何解决

2012-01-22 
HELP!!!求解线性方程组这是一个求解线性方程组的程序,我检查了好几遍搞不懂哪里出了问题,请各位指点!(我刚

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




[解决办法]
搞不懂你的代码,你多加些注释啦,很多代码如果可以共享就把它提取出来做个独立的函数,便于维护.改起来也容易些.呵呵.

热点排行
Bad Request.