我們通過消元法解出\(ax=b\),在消元過程中,我們要把a化成上三角形式,我們稱之為\(u\)。而\(e\)就是描述\(a\)與\(u\)關係的矩陣,我們有\(ea=u\)。
這是之前學過的內容,再熟悉不過了,但是我們的行交換矩陣\(e\)並不是乙個漂亮的形式,為啥這麼說呢!?看個例幾~
\[a=\left[
\begin
2&4&2\\
4&10&5\\
0&2&9
\end
\right]
\]\[e_\left[
\begin
1&0&0\\
-2&1&0\\
0&0&1
\end
\right] \times a\left[
\begin
2&4&2\\
4&10&5\\
0&2&9
\end
\right]=
u_1\left[
\begin
2&4&2\\
0&2&1\\
0&2&9
\end
\right]
\]這裡我們對a第二行進行消元,我們使用矩陣\(e_\)來表示上面左乘矩陣a的矩陣,這個矩陣反應了我們對a的消元操作,這就不用我說了。
我們把這一步得出的矩陣暫且命名為\(u_1\)
\[e_\left[
\begin
1&0&0\\
0&1&0\\
0&-1&1
\end
\right] \times
u_1\left[
\begin
2&4&2\\
0&2&1\\
0&2&9
\end
\right]
=u\left[
\begin
2&4&2\\
0&2&1\\
0&0&8
\end
\right]
\]繼續消元,這回就得到最後的u了。
\[e= \left[
\begin
1&0&0\\
0&1&0\\
0&-1&1
\end
\right] \times \left[
\begin
1&0&0\\
-2&1&0\\
0&0&1
\end
\right]= \left[
\begin
1&0&0\\
-2&1&0\\
2&-1&1
\end
\right]
\]得出了e,\(e\)反應了我們對\(a\)所進行的消元操作,\(e_\)說明該行從原矩陣取了-2倍行一,\(e_\)說明該行從原矩陣取了1倍行二,這也就是我們對第二行進行的消元操作——減去2倍行一。
但是第三行就有問題了,我們對第三行進行消元時,並沒有從第三行中減去任何倍的行一,我們直接減去了1倍的行2,但是這個位置卻有個2,這是因為上一步消元中我們對行2減去了2倍行一,而這次消元我們直接用行3減去了已經處理完的行2,所以之前的操作就體現在這裡了。
但是,這個資料是多餘的,因為矩陣\(e\)中的第二行已經足夠說明這個操作了,我們不想要它。這就有了\(a=lu\)這一形式。
我們先看看\(l\)是啥,因為之前我們知道的式子是\(ea=u\),兩邊分別左乘\(e^\),則得到\(a=e^u\),所以\(l\)即\(e\)的逆。
然後再看看\(e\)的逆是啥:
\[e^=l=\left[
\begin
1&0&0\\
2&1&0\\
0&1&1
\end
\right]
\]對於e這種消元矩陣,逆的本質其實是把消元所做的操作復原,所以那些關鍵的部分的負號都變成了正號。所以它的你很容易得到。
不過隨便你用什麼求逆,高斯若爾當法、matlab??反正你會得到這個,令人驚奇的是這個矩陣個沒用的數字沒了只剩下這些我們關注的,對消元有用的資訊。
呦呦呦,不知道你發沒發現,上面我們舉得例子都是沒有行互換的,而現實場景恰恰都要行互換,所以我們要得到下乙個形式。
我們先來定義一些置換矩陣,它是單位矩陣的行互換形式,對於這種矩陣,它的逆等於它本身,它們相乘,結果也依然在這些矩陣中。
我們看看\(2 \times 2\)形式下的所有置換矩陣:
\[\left[
\begin
1&0\\
0&1\end
\right],
\left[
\begin
0&1\\
1&0\end
\right]
\]第乙個就是單位陣,它啥都不做,第二個把第一行和第二行互換。
對於\(3 \times 3\)我就不說了,它有6個,對於\(n \times n\)有\(n!\)個置換矩陣。
所以完整的形式應該是\(a=plu\),p代表所作的行互換。
轉置放在這裡實在有點不搭,但是gilbert strang老爺子就是這麼講的哈哈哈,我好喜歡這老爺子~~
轉置即把矩陣放倒或立起來:
\[a = \left[
\begin
1&3\\
2&3\\
4&1\end
\right],
a^ = \left[
\begin
1&2&4\\
3&3&1
\end
\right]
\]對稱矩陣的轉置等於本身:
\[a = a^t \left[
\begin
1&3&5\\
3&2&7\\
5&7&4
\end
\right]
\]對於轉置有如下運算性質:
\[(ab)^t = b^ta^t
\]乙個矩陣乘它的轉置必定得到乙個對稱矩陣:
\[(aa^t)^t = a^a^t =aa^t
\]
cusolver庫使用(LU分解)
由於網上關於使用cusolver庫的介紹比較少,今天就簡單地根據samples寫了乙個lu分解,來解決稠密矩陣ax b的例子 需要安裝cuda 首先使用vs建立工程 1.導入庫 第一步 右鍵專案 新增依賴性 生成自定義 第二步 專案屬性 鏈結器 輸入 新增三個依賴項cudart.lib,cusolv...
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...
轉置矩陣,逆矩陣和倒轉置矩陣
單位矩陣 轉置矩陣 transpose matrix 性代數中,矩陣 a的轉置是另乙個矩陣a t 也寫做a tr,t a或a 由下列等價動作建立 形式上說,m n矩陣a的轉置是n m矩陣 對於矩陣a,b和標量c轉置有下列性質 轉置是從 m n矩陣的 向量空間到所有 n m矩陣的向量空間的 線性對映。...