用奇异值分解(SVD)法, matlab中有奇异值分解,利用SVD可编程如下:
function x=SVD_equation(A,b)
%用奇异值分解求解病态线性方程组
%A系数矩阵
%b右端向量
n=length(A);
epsilon=1e-10;
x=zeros(n,1);
[U,S,V]=svd(A);
sdiag=diag(S);
for i=1:n
if sdiag(i)>epsilon
x=x+U(:,i)'*b/sdiag(i)*V(:,i);
end
end
然后用最笨的方法,把我的矩阵赋值给A,右边向量赋值给b,直接用下面的函数体计算:
n=length(A);
epsilon=1e-10;
x=zeros(n,1);
[U,S,V]=svd(A);
sdiag=diag(S);
for i=1:n
if sdiag(i)>epsilon
x=x+U(:,i)'*b/sdiag(i)*V(:,i);
end
end