pinv/inv/LU/SVD分解

1. LU分解

LU分解(LU Factorization)可以將一個矩陣分解爲一個單位下三角矩陣和一個上三角矩陣的乘積。LU分解非常簡單,下圖可以直觀的看出LU分解的求解方法。
在這裏插入圖片描述

LU分解主要應用在數值分析中,用來解線性方程、求反矩陣或計算行列式,起源於高斯消元法,也即所謂的杜爾裏特算法(Doolittle algorithm):從下至上地對矩陣A做初等行變換,將對角線左下方的元素變成零,然後再證明這些行變換的效果等同於左乘一系列單位下三角矩陣,這一系列單位下三角矩陣的乘積的逆就是L矩陣,它也是一個單位下三角矩陣。

def LU(A):
    U = np.copy(A)
    m, n = A.shape
    L = np.eye(n)
    for k in range(n-1):
        for j in range(k+1,n):
            L[j,k] = U[j,k]/U[k,k]
            U[j,k:n] -= L[j,k] * U[k,k:n]
    return L, U

2. 特徵分解與SVD分解

直觀理解,當A正定時,特徵分解是求A\sqrt{A},而SVD分解是求B|B|

奇異值分解起源於方陣的特徵分解:A=QΣQ1A = Q\Sigma Q^{-1},通過Q變換,所有維度之間變爲相互獨立,A矩陣的旋轉和投影效應被消除。
對於非方陣,可以用奇異值分解:B=UΣVTB=U\Sigma V^T,其中U和V都是正交陣。SVD的意義類似奇異值分解,但又有些不一樣。SVD的右奇異向量(V的列向量)是BTBB^TB的特徵向量,它的左奇異向量(U的列向量)是BBTBB^T的特徵向量,而奇異值是這兩個對稱矩陣相同的非零特徵值的平方根(實際上它們兩個非零特徵值一模一樣)。
總結來說,特徵值分解是針對AA來的,而奇異值分解是針對BBTBB^T來的(強制把非方陣變爲了方陣)。奇異值計算量非常大,需要先計算BBTBB^TBTBB^TB,然後用LU分解計算特徵向量和特徵值,N^3複雜度,規模大時計算量很大。
在這裏插入圖片描述

3. 逆矩陣

對於任何矩陣 A 來說,僞逆 B 都存在,是唯一的,並且具有與 A’ 相同的維度。如果 A 是方陣且非奇異,則 pinv(A) 只是一種成本比較高的計算 inv(A) 的方式。但是,如果 A 不是方陣,或者是方陣且奇異,則 inv(A) 不存在。在這些情況下,pinv(A) 擁有 inv(A) 的部分(但非全部)屬性。

1、pinv 通過奇異值分解來形成 A 的僞逆。
2、inv 執行輸入矩陣的 LU 分解(如果輸入矩陣是 Hermitian 矩陣,則執行 LDL 分解)。然後它使用結果來形成線性方程組,其解爲矩陣求逆 inv(X)。
3、如果是奇異矩陣,此時不存在逆矩陣,可用pinv(A)求其僞逆。
4、如果是非奇異矩陣,存在逆矩陣,可用inv(A),也可用pinv(A),只不過pinv(A)的計算成本較高。

A=QΣQ1A = Q\Sigma Q^{-1},則A1=Q(1/Σ)Q1A^{-1} = Q(1/\Sigma) Q^{-1}
B=UΣVTB=U\Sigma V^T,則B1=V(1/Σ)TUTB^{-1}=V(1/\Sigma)^T U^T

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章