最近像疯狗一样搞了一波科研。
上次还是本科的偏微分方程考试前,一学期没上课做作业然后去医院缓考失败,晚上陪同学走完红毯以后开始预习,第二天八点考试。然后竟然是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的误差在矩阵比较小的时候并不会把结果搞得很离谱,也就是还是错了,查了一下发现是别地儿码错了,哎。)
时间: 2024-10-10 15:12:10