若是用表示全部實數的集合,那麼咱們用
表示全部
的實數矩陣組成的向量空間,即:
算法
其中,大寫字母(如)表示矩陣,帶下標的小寫字母(如
)表示矩陣中的元素。除了用
表示矩陣
中第
行第
列的元素以外,也能夠用
和
表示。數組
矩陣轉置(transposition):微信
矩陣加法(addition):spa
標量-矩陣乘法(scalar-matrix multiplication):scala
矩陣-矩陣乘法(matrix-matrix multiplication):code
矩陣點乘(pointwise multiplication):ip
矩陣點除(pointwise division):
注意,要使矩陣點除有意義,則分母矩陣中不能有值爲0的元素。v8
咱們用表示全部長度爲
的實數向量組成的向量空間,即:
get
其中,粗體小寫字母(如)表示向量,帶下標的小寫字母(如
)表示向量中的元素。除了用
表示向量
中第
個元素以外,也能夠用
和
表示。it
咱們用表示列向量,用
表示行向量,即:
向量加法(vector addition):
標量-向量乘法(scalar-vector multiplication):
內積/點積(inner/dot product):
向量點乘(pointwise multiplication):
向量點除(pointwise division):
注意,要使向量點除有意義,則分母向量中不能有值爲0的元素。
「Saxpy」是「scalar a x plus y」的助記符,表示用的值更新
的值。Saxpy算法用公式表示爲:
注意這裏的「」不是相等符號,而是賦值符號。
若是把Saxpy算法中的標量換成矩陣,那麼咱們就能獲得廣義(generalized)Saxpy算法,即Gaxpy算法:
其中,,
而且
。
咱們能夠用兩層for循環實現Gaxpy算法:
for i=1:m
for j=1:n
y(i)=y(i)+A(i,j)x(j)
end
end
在這段代碼中,外層的for循環遍歷矩陣的每一行,內層的for循環遍歷矩陣的每一列,像這樣一行一行地遍歷矩陣的Gaxpy算法也稱爲面向行的(row-oriented)Gaxpy算法。
固然,咱們也能夠一列一列地遍歷矩陣,這樣就有了面向列的(column-oriented)Gaxpy算法:
for j=1:n
for i=1:m
y(i)=y(i)+A(i,j)x(j)
end
end
不一樣於向量和
的內積
,向量
和
的外積
表示以下:
其中,,
而且
。
和Gaxpy算法相似,外積也有面向行的外積:
for i=1:m
for j=1:n
A(i,j)=A(i,j)+x(i)y(j)
end
end
和面向列的外積:
for j=1:n
for i=1:m
A(i,j)=A(i,j)+x(i)y(j)
end
end
一個的矩陣能夠看做是
個長度爲
的行向量組成的:
同理,一個的矩陣也能夠看做是
個長度爲
的列向量組成的:
咱們能夠用表示矩陣
的第
個行向量(第
行):
也能夠用表示矩陣
的第
個列向量(第
列):
在此基礎上,咱們能夠重寫面向行的Gaxpy算法:
for i=1:m
y(i)=y(i)+A(i,:)x
end
能夠看出,面向行的Gaxpy算法其實是個內積操做加
個標量加法操做。
咱們接着重寫面向列的Gaxpy算法:
for j=1:n
y=y+x(j)A(:,j)
end
能夠看出,面向列的Gaxpy算法其實是個標量-向量乘法操做加
個向量加法操做。
對於外積,咱們先重寫面向行的外積:
for i=1:m
A(i,:)=A(i,:)+x(i)y
end
能夠看出,面向行的外積其實是個標量-向量乘法操做加
個行向量加法操做。
咱們接着重寫面向列的外積:
for j=1:n
A(:,j)=A(:,j)+y(j)x
end
能夠看出,面向列的外積其實是個標量-向量乘法操做加
個列向量加法操做。
咱們把矩陣-矩陣乘法寫成用更新
的形式,即:
其中,,
而且
。
咱們把矩陣-矩陣乘法用三層for循環展開獲得:
for i=1:m
for j=1:n
for k=1:r
C(i,j)=C(i,j)+A(i,k)B(k,j)
end
end
end
能夠看出,矩陣-矩陣乘法其實是個標量乘法操做加
個標量加法操做。
若是咱們只展開外面兩層for循環,則有:
for i=1:m
for j=1:n
C(i,j)=C(i,j)+A(i,:)B(:,j)
end
end
能夠看出,矩陣-矩陣乘法其實是個內積操做加
個標量加法操做。
若是咱們只展開最外層的for循環,則有:
for i=1:m
C(i,:)=C(i,:)+A(i,:)B
end
能夠看出,矩陣-矩陣乘法其實是個向量-矩陣乘法操做加
個向量加法操做。
雖然改變三層for循環的先後順序並不影響矩陣-矩陣乘法的結果,可是能夠方便咱們從不一樣角度理解矩陣-矩陣乘法。這裏只列出告終果,具體過程能夠參考上述方法。
循環 順序 |
兩層循環 | 一層循環 | 兩層循環對應的 數據訪問方式 |
---|---|---|---|
i j k | 內積 | 向量-矩陣乘法 | 從A取行,從B取列 |
j i k | 內積 | 矩陣-向量乘法 | 從A取行,從B取列 |
i k j | Saxpy | 面向行的Gaxpy | 從B取行,從C取行 |
j k i | Saxpy | 面向列的Gaxpy | 從A取列,從C取列 |
k i j | Saxpy | 面向行的外積 | 從B取行,從C取行 |
k j i | Saxpy | 面向列的外積 | 從A取列,從C取列 |
和實數相對的是複數,所以咱們接下來介紹複數矩陣和複數向量。
咱們用表示全部複數組成的集合,用
表示全部
的複數矩陣構成的向量空間,而且用
表示全部長度爲
的複數向量構成的向量空間。
若是矩陣,那麼咱們用
和
分別表示矩陣A的實部和虛部,即:
,
。
雖然實數矩陣的大部分操做都適用於複數矩陣,可是也有一些操做不適用於複數矩陣。好比:
矩陣的共軛(conjugate)矩陣
:
其中,兩個實部相等,虛部互爲相反數的複數互爲共軛複數(conjugate complex number)。
複數矩陣的轉置(transposition)是共軛轉置:
兩個複數向量的內積(inner product):