Matlab求{1}-inverse

最近像疯狗一样搞了一波科研。

上次还是本科的偏微分方程考试前,一学期没上课做作业然后去医院缓考失败,晚上陪同学走完红毯以后开始预习,第二天八点考试。然后竟然是C-。

所以说,永远不能低估一个懒人的决心。

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------------

今天为啥要写这个呢,因为我怀疑Matlab里面的pinv用来求{1}-inverse,会有很大的精度误差,所以打算找一个求{1}-inverse的函数。

Matlab里面没有现成的,然后网上也找不到,为了偷懒不自己写我只能用rref了。

核心思路就是利用rref里面的高斯消元做两遍,由于没有查到rref怎么记录变换矩阵,所以用附加矩阵的方法可以记录下变换矩阵(必须感谢我的两个高代老师哈哈)。

为了偷懒我也是蛮拼的。

下面贴个代码,伸手党接好,错了别找我。(我也想伸手啊!!!)

function [ y ] = ginv( A )
    [m,n] = size(A);
    M1 = cat(2,A,eye(m));
    M2 = rref(M1);
    PA = M2(:,1:n);
    P = M2(:,n+1:n+m);
    M3 = cat(2,PA',eye(n));
    M4 = rref(M3);
    J = M4(:,1:m);
    Q = M4(:,m+1:m+n);
    y = Q'*J'*P;
end

偷到了懒心情大好,写个博客纪念一下哈哈。

(后记:果然精度提高了。然并卵,我发现pinv的误差在矩阵比较小的时候并不会把结果搞得很离谱,也就是还是错了,查了一下发现是别地儿码错了,哎。)

 

转载于:https://www.cnblogs.com/soya/p/4561275.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值