1. 程式人生 > >求偽逆的三種方法:直接,SVD,QR

求偽逆的三種方法:直接,SVD,QR

① 直接求解:

求導,令導數為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)