【MATLAB】几种求矩阵伪逆的方法

几种求矩阵伪逆的方法

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值