数值分析:从矩阵分解的角度进行列主元Gauss消去法,MATLAB实现代码
function [L,U,x]=LUGauss(H,b)
[m,n]=size(H); %H为系数矩阵,b为列向量
for i=1:n %start
[maxValue, linearIndex]=max(H(i:n,i));
[row, ~] = ind2sub(size(H), linearIndex);
if H(i,i)~=maxValue
a=H(row+i-1,:);
H(row+i-1,:)=H(i,:);
H(i,:)=a;
end
end %end 对整个矩阵进行选列主元操作
L=eye(m); %start
L(:,1)=H(:,1)/H(1,1);
U=zeros(m,n);
U(1,:)=H(1,:);
for i=2:m
for j=2:n
if i<=j
U(i,j)=H(i,j)-sum(L(i,1:i-1).*U(1:i-1,j)');
else
if U(j,j)==0
L(i,j)=0;
else
L(i,j)=(H(i,j)-sum(L(i,1:j-1).*U(1:j-1,j)'))/U(j,j);
end
end
end
end %end 对矩阵H进行LU分解
y=inv(L)*b; %start
x=inv(U)*y; %end 求解结果
end