矩陣的基本運算(加、減、乘、轉置、判斷是否對稱) (線上執行) (原始碼下載)
一矩陣 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 SubPublic 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.