求僞逆的三種方法:直接,SVD,QR - [專業理論]
版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明http://www.blogbus.com/shijuanfeng-logs/238839798.html
① 直接求解:
求導,令導數爲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)