针对矩阵A和矩阵b,使用A\b后出现警告奇异精度,可使用如下matlab代码消除。具体原因查看其他博主写的关于伪逆阵pinv,写的很详细。
使用伪逆阵,A为满秩时,跟上面A\b出现的结果一样,但A的秩不为满秩时,可以防止出现矩阵奇异精度。
function varargout = svd_solve(A,b)
N = length(b);
if nargin < 3
ep = 1e-8;
end
[U,S,V] = svd(A);
sigma = diag(S);
x = zeros(N,1);
k = 1;
while 1
if abs(sigma(k))<ep
A=A-sigma(k)*U(:,k)*V(:,k)';
else
x=x+(U(:,k)'*b)/sigma(k)*V(:,k);
end
k=k+1;
if k>N
break
end
end
[varargout{1:2}]=deal(x,A);