Bullet_General.gif (3885 bytes) 矩陣的基本運算(加、減、乘、轉置、判斷是否對稱) (線上執行) (原始碼下載)

一矩陣 A 若有 n 列(row)與 m 行(column),則稱 A 為一 n×m 矩陣,若 n=m,A即為方陣(square matrix)。以下簡述一些矩陣的基本運算:

一.矩陣的加、減法:

矩陣的加法和減法就是將兩個矩陣相對應的元素相加,因此兩個矩陣若要進行加、減法,則兩者必須具有相同的列數和相同的行數,若兩個矩陣的列數或行數不同,則無法進行加、減法。

Public Sub MatrixAddition(m() As Single, n() As Single, ReturnValue() As Single)
     Dim i As Long, j As Long, row As Long, column As Long
     row = UBound(m, 1)
     column = UBound(m, 2)
     ReDim ReturnValue(1 To row, 1 To column)
     For i = 1 To row
          For j = 1 To column
               ReturnValue(i, j) = m(i, j) + n(i, j)
          Next
     Next
End Sub
Public Sub MatrixSubtraction(m() As Single, n() As Single, ReturnValue() As Single)
     Dim i As Long, j As Long, row As Long, column As Long
     row = UBound(m, 1)
     column = UBound(m, 2)
     ReDim ReturnValue(1 To row, 1 To column)
     For i = 1 To row
          For j = 1 To column
               ReturnValue(i, j) = m(i, j) - n(i, j)
          Next
     Next
End Sub

注意:以上兩個副程式並沒有判斷兩個矩陣是否具有相同的列數和相同的行數。

二.矩陣的乘法:

矩陣的乘法並非一般代數乘法,若兩個矩陣A、B的乘積AB=C,則

C 的 i , j 元素 = (A的 i 列)•(B的 j 行)

因此若要使得 C 有意義若 A 為一 n×r 矩陣,則B一定是 r×m 矩陣,也就是說 A 的行數一定要等於B的列數,才可進行矩陣乘法,如此將產生一個 n×m 的矩陣;但是反過來不一定成立,也就是說若 AB 相乘有意義,但是 BA 相乘不一定有意義;如果AB與BA皆有意義,也不表示 AB=BA,亦即矩陣的乘法無交換性。矩陣的乘法之所以要如此定義,主要是為了方便描述一複雜的線性方程式系統。

Public Sub MatrixMultiply(m() As Single, n() As Single, ReturnValue() As Single)
     Dim i As Long, j As Long, k As Long, row As Long, column As Long, max As Long
     row = UBound(m, 1)
     column = UBound(n, 2)
     max = UBound(m, 2)
     ReDim ReturnValue(1 To row, 1 To column)
     For i = 1 To row
          For j = 1 To column
               For k = 1 To max
                    ReturnValue(i, j) = ReturnValue(i, j) + m(i, k) * n(k, j)
               Next
          Next
     Next
End Sub

注意:以上的副程式並沒有判斷 A 的行數是否等於 B 的列數。

三.矩陣的轉置(transpose):

將一矩陣的列元素和行元素互相對調,即為其轉置矩陣,因此一 n×m 的矩陣其轉置矩陣為m×n。

Public Sub MatrixTranspose(m() As Single, ReturnValue() As Single)
     Dim i As Long, j As Long, row As Long, column As Long
     row = UBound(m, 1)
     column = UBound(m, 2)
     ReDim ReturnValue(1 To column, 1 To row)
     For i = 1 To row
          For j = 1 To column
               ReturnValue(j, i) = m(i, j)
          Next
     Next
End Sub

四.判斷一矩陣是否為對稱矩陣:

若一矩陣 A 與其轉置後的矩陣 At 相等,則 A 稱為對稱矩陣。若 A 為 n×m,則 At 必定為m×n,因此 A=At 的必要條件為 m=n,所以對稱矩陣一定是方陣(square matrix)。

Public Function IsSymmetric(m() As Single) As Boolean
     Dim i As Long, j As Long
     For i = 1 To UBound(m, 1)
          For j = 1 To UBound(m, 1)
               If m(j, i) <> m(i, j) Then Exit Function
          Next
     Next
     IsSymmetric = True
End Function

注意:以上的副程式並沒有判斷該矩陣是否為方陣。

五.範例:

今有A、B矩陣如下:

   1 3 2 2       4 7 0 3
   0 5 7 3       3 6 2 8
A= 4 8 3 9    B= 9 5 3 5  
   5 1 2 4       0 8 4 6

對A、B進行上述的基本運算,其程式碼如下:

Private Sub Command1_Click()
     Dim i As Long, Keyin As String, A() As Single, B() As Single, R() As Single
     For i = 1 To 2
          Keyin = InputBox("請輸入第" & i & "個矩陣,以分號"";""來分隔列元素," & _
          "以空白來分隔行元素。" & vbNewLine & "例如有一3×3的矩陣:" & _
          vbNewLine & "1 2 3 " & vbNewLine & _
          "4 5 6 " & vbNewLine & "7 8 9 " & vbNewLine & "則輸入: 1 2 3;4 5 6;7 8 9 ")
          If i = 1 Then
               If Not SepStrToMatrix(Keyin, ";", " ", A) Then _
	       MsgBox "矩陣輸入有誤,請重新輸入。": Exit Sub
          Else
               If Not SepStrToMatrix(Keyin, ";", " ", B) Then _
               MsgBox "矩陣輸入有誤,請重新輸入。": Exit Sub
          End If
     Next
     Call MatrixAddition(A, B, R)
     Call PrintMatrix(R)
     Call MatrixSubtraction(A, B, R)
     Call PrintMatrix(R)
     Call MatrixMultiply(A, B, R)
     Call PrintMatrix(R)
     Call MatrixTranspose(A, R)
     Call PrintMatrix(R)
     If IsSymmetric(A) Then Debug.Print "第一個矩陣是對稱矩陣" Else _
     Debug.Print "第一個矩陣並非對稱矩陣"
End Sub

其中 SepStrToMatrix 和 PrintMatrix 這兩個副程式,請參閱本站的 將字串拆解成陣列

執行 Command1 之後,在 VB 的即時運算視窗可得如下之結果:

 5  10  2  5 
 3  11  9  11 
 13  13  6  14 
 5  9  6  10 

-3 -4  2 -1 
-3 -1  5 -5 
-5  3  0  4 
 5 -7 -2 -2 

 31  51  20  49 
 78  89  43  93 
 67  163  61  145 
 41  83  24  57 

 1  0  4  5 
 3  5  8  1 
 2  7  3  2 
 2  3  9  4 
第一個矩陣並非對稱矩陣

 


[ 上一個 | 首頁 | 數值分析 | 下一個 ]

This page was written by Jaric on Aug. 3 , 1998. All rights reserved.

Total pageview since 4/6/1999.