Matlab 教材:關於矩陣的基本函式

之前我們看到 Matlab 是一個超級的工程型計算器, 不僅如此,它還「認得」複數、向量、矩陣。 現在介紹幾種作用在矩陣上的幾種基本的線性代數函式。

隨便輸入一個矩陣

A = [1 2 3 4; 5 6 7 8; 4 3 2 1]
這是一個三列、四行的矩陣,簡稱為三乘四矩陣, 我們稱其維度 (dimension) 為 3 x 4。 Matlab 用 size( ) 計算維度,例如
size(A)
得到回應 3   4,這就是 A 的維度。

A 的階數 (rank)是指 A 的線性無關的行向量個數, 例如 A 有四個行向量,每個行向量有三個維度
第一行第二行第三行第四行
1234
5678
4321
取出 A 的第 k 個行向量的 Matlab 語法是 A(:,k)。 所謂 rank(A) 就是上述那四個向量之中,能夠找到的、最多可能的線性無關向量個數。

rank(A)
得到答案 2,表示這四個向量之中,最多只有兩個是線性無關的。 用眼睛觀察,看起來第一行和第二行是無關的。不妨用 Matlab 實驗看看:
rank( [1 2; 5 6; 4 3] )
答案是 2,果然它們線性無關。 因此,第三行與前兩行是線性相關的,因此第三行可以寫成前兩行的線性組合。 換句話說,我們可以找到不全是 0 的常數 a1 和 a2, 使得
a1 * (第一行) + a2 * (第二行) = 第三行
這是一個三條式子、兩個未知數的線性聯立方程式, 讀者可以試著求解 a1 和 a2, 但是這一個例子不難觀察到答案:a1 = -1 而 a2 = 2, 亦即
2 * (第二行) - (第一行) = 第三行
不妨用 Matlab 做個實驗:
2*A(:,2) - A(:,1)

同理,A 的第四行也和前兩行是線性相關的,因此第四行可以寫成前兩行的線性組合。 換句話說,必定存在不全是 0 的常數 x1 和 x2, 使得

x1 * (第一行) + x2 * (第二行) = 第四行
這相當於要求解以下線性聯立方程式
x1 + 2 x2  = 4
5 x1 + 6 x2 = 8
4 x1 + 3 x2 = 1
我們可以用 Matlab 的矩陣、向量除法來求解:
[1 2; 5 6; 4 3] \ [4; 8; 1]
得到答案
-2.0000
 3.0000
因此 x1 = -2 而 x2 = 3,讀者不妨再用 Matlab 驗算
-2 * A(:,1) + 3 * A(:,2)
看看結果是不是 A 的第四行?

根據線性代數理論,A 和 A' 的階數是一樣的。 換句話說,A 的列向量之中也只有 2 個線性無關向量。亦即
第一列第二列第三列
154
263
372
481
應該頗明顯可見前兩列是線性無關的,可以叫 Matlab 驗證:

rank( [1 2 3 4; 5 6 7 8] )
而第三列與前兩列線性相關。因此第三列可以寫成前兩列的線性組合。 換句話說,可以找到不全是 0 的常數 x1 和 x2, 使得
x1 * (第一列) + x2 * (第二列) = 第三列
這一次相當於要求解
x1 + 5 x2  = 4
2 x1 + 6 x2 = 3
3 x1 + 7 x2 = 2
4 x1 + 8 x2 = 1
還是可以委託 Matlab 執行
[1 5; 2 6; 3 7; 4 8] \ [4; 3; 2; 1]
得到答案
-2.2500
 1.2500
請讀者自行驗證。

如果 B 是一個方陣,則可以計算它的行列式。例如

B = [1 2 3; 4 5 6; 7 8 9]
則 size(B) 是 3   3,它是個三乘三矩陣, 又稱為三階方陣。但是我們發現 rank(B) 是 2,所以 B 是「不滿階」的方陣, 因此它不可逆。由
det(B)
計算得知 B 的行列式是 0,再度驗證它不可逆。

最後我們介紹 trace,就是矩陣之對角線和的意思。例如

trace(B)
就是 1+5+9 也就是 15。即使不是方陣也可以有對角線和,例如
trace(A)
就是 1+6+2 也就是 9。不管是不是方陣,一個矩陣的「對角線」元素就是 A(1,1), A(2,2), A(3,3), ... 這些元素。

習題

  1. M = [1 2 3 4; 5 6 7 8; 4 3 2 1]
    則 M 的階數是 2,請寫出 M 的第一行如何成為倒數兩行的線性組合?
  2. M = [1 2 3; 4 5 6; 7 8 9]
    則 M 的階數是 2,請寫出 M 的第三行如何成為前兩行的線性組合?
  3. M = [1 2 3; 4 5 6; 7 8 9]
    則 M 的階數是 2,請寫出 M 的第一行如何成為後兩行的線性組合?
  4. 做一些實驗,猜想對任意一個方陣 A,det(A) 和 det(A') 是否相等?
  5. 做一些實驗,猜想對任意兩個方陣 A 和 B,det(A*B) 和 det(A)*det(B) 是否相等?
  6. 做一些實驗,猜想對任意兩個方陣 A 和 B,det(A+B) 和 det(A)+det(B) 是否相等?
  7. 做一些實驗,猜想對任意一個矩陣 A,trace(A) 和 trace(A') 是否相等?
  8. 做一些實驗,猜想對任意兩個方陣 A 和 B,trace(A*B) 和 trace(A)*trace(B) 是否相等?
  9. 做一些實驗,猜想對任意兩個方陣 A 和 B,trace(A+B) 和 trace(A)+trace(B) 是否相等?
  10. x=[2 1 6 7], y=[2 4 1 3], z=[0 1 1 2], 請問 x, y, z 三個序列是否線性無關?
  11. x=[25 31 9 36], y=[46 46 24 39], z=[29 47 3 69], 請問 x, y, z 三個序列是否線性無關?
  12. 若已知 x=[8 18 26]', y=[18 53 56]'z=[26 56 85]' 三個向量線性相關,亦即存在純量 a 和 b 使得
    a*x + b*y = z
    求解 a 和 b
  13. 若已知 x=[3 8 -53]', y=[5 2 59]'z=[4 7 -23]' 三個向量線性相關,亦即存在純量 a 和 b 使得
    a*x + b*y = z
    求解 a 和 b
單維彰 (2003/04/09) --- 03/04/10 (單), 04/03/19 (單) [Prev] [Next] [Up]