稀疏矩陣加法運算 線性代數 矩陣基本運算

2021-10-11 15:18:12 字數 4025 閱讀 6018

在本文中,我們將介紹矩陣的大部分基本運算,依次是矩陣的加減法、矩陣的標量乘法、矩陣與矩陣的乘法、求轉置矩陣,以及深入了解矩陣的行列式運算。本文將不會涉及逆矩陣、矩陣的秩等概念,將來再**它們。

矩陣的加法減法運算將接收兩個矩陣作為輸入,並輸出乙個新的矩陣。矩陣的加法和減法都是在分量級別上進行的,因此要進行加減的矩陣必須有著相同的維數。

為了避免重複編寫加減法的**,我們先建立乙個可以接收運算函式的方法,這個方法將對兩個矩陣的分量分別執行傳入的某種運算。然後在加法、減法或者其它運算中直接呼叫它就行了:

class matrix )   add(other)   subtract(other) }const one = new matrix(  [1, 2],  [3, 4])const other = new matrix(  [5, 6],  [7, 8])console.log(one.add(other))// matrix console.log(other.subtract(one))// matrix 複製**
矩陣的標量乘法與向量的縮放類似,就是將矩陣中的每個元素都乘上標量:

class matrix }const matrix = new matrix(  [2, 3],  [4, 5])console.log(matrix.scaleby(2))// matrix 複製**
ab兩個矩陣的維數是相容的時候,就能對這兩個矩陣進行矩陣乘法。所謂維數相容,指的是a的列數與b的行數相同。矩陣的乘積ab是通過對a的每一行與矩陣b的每一列計算點積得到:

class matrix     const columns = other.columns()    const newrows = this.rows.map(row =>       columns.map(column => sum(row.map((element, i) => element * column[i])))    )    return new matrix(...newrows)  }}const one = new matrix(  [3, -4],  [0, -3],  [6, -2],  [-1, 1])const other = new matrix(  [3,  2, -4],  [4, -3,  5])console.log(one.multiply(other))// matrix 複製**
我們可以把矩陣乘法ab視為先後應用ab兩個線性變換矩陣。為了更好地理解這種概念,可以看一看我們的linear-algebra-demo。

下圖中黃色的部分就是對紅色方塊應用線性變換c的結果。而線性變換c就是矩陣乘法ab的結果,其中a是做相對於 y 軸進行反射的變換矩陣,b是做剪下變換的矩陣。

如果在矩陣乘法中調換ab的順序,我們會得到乙個不同的結果,因為相當於先應用了b的剪下變換,再應用a的反射變換:

轉置矩陣 由公式 定義。換句話說,我們通過關於矩陣的對角線對其進行翻轉來得到轉置矩陣。需要注意的是,矩陣對角線上的元素不受轉置運算影響。

class matrix }const matrix = new matrix(  [0,  1,  2],  [3,  4,  5],  [6,  7,  8],  [9, 10, 11])console.log(matrix.transpose())// matrix 複製**
矩陣的行列式運算將計算矩陣中的所有係數,最後輸出乙個數字。準確地說,行列式可以描述乙個由矩陣行構成的向量的相對幾何指標(比如在歐式空間中的有向面積、體積等空間概念)。更準確地說,矩陣a的行列式相當於告訴你由a的行定義的方塊的體積。 矩陣的行列式運算如下所示:

矩陣的行列式運算如下所示:

我們的方法可以計算任意大小矩陣(只要其行列的數量相同)的行列式:

class matrix     if (this.rows.length === 2)     const parts = this.rows[0].map((coef, index) => )    return sum(parts)  }}const matrix2 = new matrix(  [ 0, 3],  [-2, 1])console.log(matrix2.determinant())// 6const matrix3 = new matrix(  [2, -3,  1],  [2,  0, -1],  [1,  4,  5])console.log(matrix3.determinant())// 49const matrix4 = new matrix(  [3, 0, 2, -1],  [1, 2, 0, -2],  [4, 0, 6, -3],  [5, 0, 2,  0])console.log(matrix4.determinant())// 20複製**
在下圖中,我們可以看到對紅色的1×1方形進行線性變換後得到了乙個3×2的長方形,面積從1變為了6,這個數字與線性變換矩陣的行列式值相同。

如果我們應用乙個剪下變換,可以看到方形會變成乙個面積不變的平行四邊形。因此,剪下變換矩陣的行列式值等於 1:

如果行列式的值是負數,則說明應用線性變換後,空間被反轉了。比如在下圖中,我們可以看到變換前 在 的左邊,而變換後 在 的右邊。

如果變換的行列式為0,則表示它會將所有空間都壓縮到一條線或乙個點上。也就是說,計算乙個給定矩陣的行列式是否為 0,可以判斷這個矩陣對應的線性變換是否會將物件壓縮到更小的維度去。

在三維空間裡,行列式可以告訴你體積縮放了多少:

變換行列式等於 0,意味著原來的空間會被完全壓縮成體積為 0 的空間。如前文所說,如果在 2 維空間中變換的行列式為 0,則意味著變換的結果將空間壓縮成了一條線或乙個點;而在 3 維空間中變換的行列式為 0 意味著乙個物體會被壓扁成乙個平面,如下圖所示:

線性代數 2 (3 4) 矩陣及其運算

由於單位矩陣乘以任何矩陣均為原矩陣,且矩陣並沒有除法的概念,而對於自然數數的除法可以通過倒數的形式轉化為乘積的 形式,因此我們引入逆矩陣。對於n階矩陣a,如果有乙個n階矩陣b使得 ab ba e 則說a是可逆的,並且b稱為a的逆矩陣。注 逆矩陣唯一 若矩陣a可逆,則a的行列式不為0注 該定理可以對a...

矩陣 Matrices 線性代數

矩陣 在數學中,矩陣 matrix 是乙個按照長方陣列排列的複數或實數集合 矩陣相加 通常的矩陣加法被定義在兩個相同大小的矩陣 矩陣乘法 矩陣和向量的乘法 如圖 m n 的矩陣乘以 n 1 的向量,得到的是 m 1 的向量 矩陣乘法 m n 矩陣乘以 n o 矩陣,變成 m o 矩陣。矩陣乘法的性質...

線性代數 矩陣相乘

線性代數 矩陣相乘1 矩陣相乘 2 include 3using namespace std 45 6int main 7 矩陣c 結果矩陣 13 cout 請輸入矩陣a的行數和列數 14 cin am an 15 cout 請輸入矩陣b的行數和列數 16 cin bm bn 17if an bm ...