求偽逆的三種方法:直接,SVD,QR
阿新 • • 發佈:2019-02-05
① 直接求解:
求導,令導數為0,結果如下: InvA=(ATA)-1AT
% 直接求偽逆
InvA = inv(A'*A)*A';
② SVD求解
%% SVD分解求偽逆
% 原理和公式:1. SVD分解得到的矩陣:U和V是正交陣,S是對角陣
% 2. 正交陣的逆=轉置
% 3. 對角陣的逆=非零元素求倒
% Step1: 求解A的SVD分解
[U,S,V] = svd(A); % A = U*S*V'
% Step2: 將S中的非零元素求倒
T=S;
T(find(S~=0)) = 1./S(find(S~=0));
% Step3: 求invA
svdInvA = V * T' * U';
③ QR求解
%% QR分解求偽逆
% 適用於稀疏矩陣
% 原理和公式:1. QR分解得到的矩陣:Q是正交陣,R是非奇異上三角陣
% 2. 正交陣的逆=轉置
% 3. 上(下)三角矩陣的逆也仍然是上(下)三角矩陣。不必用高斯消去法,向前替換法解方程。
% 但是具體的我不知道怎麼用程式來寫,這裡仍舊用了matlab的函式。
[Q,R] = qr(A);
InvR = inv(R'*R)*R';
qrInvA =InvR*Q';
PS: 矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分佈沒有規律,則稱該矩陣為 稀疏矩陣(sparse matrix)