之前我們學了一大堆矩陣是什麼,現在我們要把矩陣當作乙個運算物件來看待了。
因而我們依舊先從最基礎的加法開始。
如果兩個矩陣的行數和列數都一樣,那麼它們之間可以相加,結果就是對應的元素相加的矩陣,行數和列數保持不變,例如:
顯然當加上的是零矩陣時,矩陣不變。
同時我們也可以證明矩陣加法滿**換律和結合律。
我們這樣定義加法的乙個重要原因是,這種加法在矩陣左乘向量中滿足分配律:
練習:證明這個結論。
接下來我們討論數乘。
對於乙個矩陣,乘乙個數c,也就是把每個元素都乘c,例如:
我們可以證明矩陣的數乘滿足結合律和分配律,對於矩陣左乘向量同樣有:
練習:證明這個結論。
就像向量的加法和數乘之後,我們要討論內積外積一樣,接下來我們要討論矩陣和矩陣之間的乘法。
之前我們知道,矩陣a左乘乙個向量x,等價於由列向量組成的向量,和x進行內積運算,記作ax。
n行m列的矩陣和m維向量相乘,結果是n維向量,例如:
那麼我們把運算結果再左乘乙個l行n列的矩陣b,得到b(ax),結果會是乙個l維向量,例如:
那麼我們有沒有乙個矩陣c,能夠一步到位,替代a和b兩個矩陣呢?
答案是有,這就被定義為矩陣的乘法cx=(ba)x=b(ax),其中c=ba是矩陣的乘積。
根據前面的運算結果,我們知道l行n列的矩陣b,右乘n行m列的矩陣a,最後結果應該是乙個l行m列的矩陣,這樣才能把m維的x變成乙個l維向量:
接著我們來推導乘積的具體結果。
我們把矩陣a切成列向量,得到:
接著計算出結果為:
再和矩陣b相乘,由於矩陣乘向量,是乙個線性對映,所以得到:
再提取出x,得到:
所以:即乘積c的第i個列向量,就是矩陣b乘以矩陣a的第i個列向量。
另一方面,我們也可以把c的第i個行向量,看作是矩陣a乘以矩陣b的第i個行向量。
具體到單個元素上,可以計算得c的第i行第j列元素,就是b的第i個行向量,和a的第j個列向量內積:
例如:之前的n行m列矩陣和m維向量相乘,也可以看作是n行m列矩陣,和m行1列矩陣相乘。
在這裡就體現出了行向量和列向量的不同,例如:
這個例子也說明,矩陣乘法不滿**換律。
可以驗證,矩陣乘法滿足結合律,以及左右分配律:
而主對角線全是1的對角陣為什麼叫做單位矩陣也很明顯了:
練習:證明這個結論。
要特別注意,矩陣乘法不滿**換律。
同時,消去律也不對矩陣成立,即ab=ac時,就算a不是零矩陣,b也不一定等於c:
在之後我們會討論,什麼樣的矩陣才可以滿足消去律。
另外也不能通過乘積為0做判斷,ab為零矩陣時,a和b有可能同時不為零:
根據矩陣乘法,我們可以定義出矩陣的正整數冪,例如:
可以證明,矩陣的冪也符合冪的一部分運算規律:
但是由於矩陣乘法沒有交換律,所以一般情況下,
。如果兩個矩陣可交換,即ab=ba,此時矩陣乘法也就滿足二項式定理:
探索:可交換矩陣有什麼特殊之處?
有時候我們需要把矩陣的行向量變成列向量,列向量變成行向量,這種操作被叫做轉置,用t表示:
對於轉置,可以證明:
注意矩陣乘積的轉置,在分離時需要交換順序。
練習:證明這個結論。
探索:矩陣運算還有什麼不一樣的規律?
矩陣的運算
目錄 1.矩陣與數相乘 每一項都要乘 2.矩陣的加減運算 每一項都要乘 3.矩陣相乘 4.矩陣對應元素相乘 同型矩陣 5.矩陣的轉置 t 6.矩陣的共軛轉置 h 7.矩陣的逆 i 8.矩陣的試圖 a import numpy as np m1 np.mat 1,2,3 2,3,4 print m m...
矩陣的運算
矩陣的常用運算包括 加法 減法 點乘 點除和乘法等。矩陣的加法就是2個矩陣對應位置的數值相加。in 1 import numpy as np in 2 m1 np.array 1,2,3 4,5,6 np.uint8 in 3 m2 np.array 4,5,6 7,8,9 np.uint8 in ...
矩陣的運算
1 include2 using namespace std 3int main 1920 21 cout 請輸入矩陣b的行數和列數 22 cin x k 23 cout 請輸入矩陣b 24for int i 0 i x i 253031 32 cout 矩陣a為 33for int i 0 i n...