2006-12-06

第11回講義:連立一次方程式第1回

  1. 前回の解答

    Sub 掛算()
    Dim x() As Single, y() As Single, z() As Single
    Dim gyou1 As Integer, gyou2 As Integer, retsu1 As Integer, retsu2 As Integer
    Dim i As Integer, j As Integer, k As Integer
    
    Sheets(1).Select
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
     i = i + 1
    Loop
    gyou1 = i - 1
    
    j = 1
    Do While Selection.Cells(1, j) <> "" And IsNumeric(Selection.Cells(1, j))
     j = j + 1
    Loop
    retsu1 = j - 1
    
    Sheets(2).Select
    i = 1
    Do While Selection.Cells(i, 1) <> "" And IsNumeric(Selection.Cells(i, 1))
     i = i + 1
    Loop
    gyou2 = i - 1
    
    j = 1
    Do While Selection.Cells(1, j) <> "" And IsNumeric(Selection.Cells(1, j))
     j = j + 1
    Loop
    retsu2 = j - 1
    
    If retsu1 = gyou2 Then
     ReDim x(gyou1, retsu1)
     ReDim y(gyou2, retsu2)
     ReDim z(gyou1, retsu2)
    
     Sheets(1).Select
     For i = 1 To gyou1
      For j = 1 To retsu1
       x(i, j) = Selection.Cells(i, j)
      Next j
     Next i
    
     Sheets(2).Select
     For i = 1 To gyou2
      For j = 1 To retsu2
       y(i, j) = Selection.Cells(i, j)
      Next j
     Next i
    
     For i = 1 To gyou1
      For j = 1 To retsu2
       z(i, j) = 0
       For k = 1 To retsu1
        z(i, j) = z(i, j) + x(i, k) * y(k, j)
       Next k
      Next j
     Next i
    
     Sheets(3).Select
     For i = 1 To gyou1
      For j = 1 To retsu2
       Selection.Cells(i, j) = z(i, j)
      Next j
     Next i
    
    Else
     Sheets(3).Select
     Selection.Cells(1, 1) = "ベクトルの型が異なるので掛け算できません"
    End If
    
    End Sub
    

  2. 履き出し法

    この問題をExcelを使って解きましょう。まず係数の部分と定数項の部分を Excelのセルに入力します。

    ABC
    244
    2-1-6
    23-2
    Sheet1
     
    ABC
    18
    -2  
    -6  
    Sheet2
    まずこの係数部分と定数項を配列に読み込んで、Sheets(3)の(1,1)セルから順に 表示します。

    Sub 連立一次方程式1()
    Dim x(3, 4) As Single
    Dim i As Integer, j As Integer
    
    Sheets(1).Select
    For i = 1 To 3
    For j = 1 To 3
    x(i, j) = Selection.Cells(i, j)
    Next j
    Next i
    
    Sheets(2).Select
    For i = 1 To 3
    x(i, 4) = Selection.Cells(i, 1)
    Next i
    
    Sheets(3).Select
    Cells(1, 1).Select
    For i = 1 To 3
    For j = 1 To 4
    Selection.Cells(i, j) = x(i, j)
    Next j
    Next i
    
    End Sub
    するとこのようになります。
    ABCD
    24418
    2-1-6-2
    23-2-6
    Sheet3
  3. 履き出し法の実行 自分で計算する手順を考えながら、プログラムを書きます。 途中経過もExcelに出力すると分かりやすいです。
    ABCD
    24418 
    2-1-6-2 
    23-2-6 
         
    1229(1,1)成分を1にするために第1行を(1,1)成分で割ります
    2-1-6-2 
    23-2-6 

     
    1229 
    0-5-10-20(2,1)成分を0にするために第2行から第1行×(2,1)成分を引きます
    0-1-6-24(3,1)成分を0にするために第3行から第1行×(3,1)成分を引きます
    Sheet3
    Sub 連立一次方程式2()
    Dim x(3, 4) As Single
    Dim i As Integer, j As Integer, basho As Integer
    
    Sheets(1).Select
    For i = 1 To 3
    For j = 1 To 3
    x(i, j) = Selection.Cells(i, j)
    Next j
    Next i
    
    Sheets(2).Select
    For i = 1 To 3
    x(i, 4) = Selection.Cells(i, 1)
    Next i
    
    Sheets(3).Select
    basho = 1
    Cells(basho, 1).Select
    For i = 1 To 3
    For j = 1 To 4
    Selection.Cells(i, j) = x(i, j)
    Next j
    Next i
    
    Rem (1,1)成分を1にするために第一行を(1,1)成分で割るプログラムを書いてください。
    
    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
    For j = 1 To 4
    Selection.Cells(i, j) = x(i, j)
    Next j
    Next i
    
    Rem (2,1)成分を0にするために第二行から第一行の(2,1)成分倍を引くプログラムを書いてください。
    Rem (3,1)成分を0にするために第三行から第一行の(3,1)成分倍を引くプログラムを書いてください。
    
    basho = basho + 4
    Cells(basho, 1).Select
    For i = 1 To 3
    For j = 1 To 4
    Selection.Cells(i, j) = x(i, j)
    Next j
    Next i
    
    End Sub
  4. 演習問題

    1. 上のプログラムにおいて、Rem 文で書いている手順をBasicのプログラムで書きなさい。
    最後まで解くとこうなります。

    ABCDE(ここは説明です)
    24418 
    2-1-6-2 
    23-2-6 
         
    1229(1,1)成分を1にするために第1行を(1,1)成分で割ります
    2-1-6-2 
    23-2-6 
        
    1229 
    0-5-10-20(2,1)成分を0にするために第2行から第1行×(2,1)成分を引きます
    0-1-6-24(3,1)成分を0にするために第3行から第1行×(3,1)成分を引きます
         
    1229 
    0124(2,2)成分を1にするために第2行を(2,2)成分で割ります
    0-1-6-24 
         
    10-21(1,2)成分を0にするために第1行から第2行×(1,2)成分を引きます
    0124
    00-4-20(3,2)成分を0にするために第3行から第2行×(3,2)成分を引きます
         
    10-21 
    0124 
    0015(3,3)成分を1にするために第3行を(3,3)成分で割ります
         
    10011(1,3)成分を0にするために第1行から第3行×(1,3)成分を引きます
    010-6(2,3)成分を0にするために第2行から第3行×(2,3)成分を引きます
    0015
    Sheet3

0 件のコメント: