几种求矩阵伪逆的方法
A*x=y当A不可逆如何解x
求伪逆有五种方法,左右同时乘以A’,’chol()分解,qr() 分解,svd()分解和pinv()求伪逆,下面来比较一下哪个最优秀。
如果A是个355行3列的矩阵,经过计算,五个方式计算结果相同,对模型的拟合都是没有影响的。
如果A是个355行12列的矩阵(更高维),那么根据我对数据的拟合,结果如下:
深蓝线是数据,绿色的线是两边同时×A’,浅蓝色的线是pinv分解拟合出的模型,红线是qr拟合出的模型,黄线是svd分解拟合出的模型。这么浅显的看的话在高维下svd和两边同时×A’胜出,那么他们究竟谁更胜一筹,我们看一下第一范式,第二范式和Inf范式检验的结果:
可见在高维情况下是svd分解更胜一筹(范式结果低),低维下不要轻易用两边同时×A’,因为会出奇异矩阵警告。
几种求伪逆的方法如下(matlab代码):
result=(A'*A)\(A'*y) %两边同时乘A’
result_pinv=pinv(A)*y %pinv
%svd
[U,S,V] = svd(A);
T=S;
T(find(S~=0)) = 1./S(find(S~=0));
svdInvA = V * T' * U';
alpha_svd=svdInvA*y;
%qr
[Q,R] = qr(A);
InvR = inv(R'*R)*R';
qrInvA =InvR*Q';
alpha_qr=qrInvA*y;
————————————————
原文链接:https://blog.csdn.net/qq_41448372/article/details/105742441