n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=zeros(1,n);%初始化中间变量矩阵 A=[1 2 -3 4;4 8 12 -8;2 3 2 1;-3 -1 1 -4];%需要LU分解矩阵赋值 for p=1:n %将A矩阵赋值给U for q=1:n U(p,q)=A(p,q); end end jt=1;kt=0; for i=1:n-1 jt=jt+1; kt=kt+1; ii=U(i,i); if ii==0 %主元为零,进行行变换 for m=i:n if U(m,i)~=0 tempU=U(i,:); U(i,:)=U(m,:); U(m,:)=tempU; ii=U(i,i); %% tempP=P(i,:); %行变换结果存储在P中 P(i,:)=P(m,:); P(m,:)=tempP; break; end end %disp(ii); end disp(ii); for j=jt:n %%两重循环,完成高斯消元 perj=U(j,i)/ii; L(j,i)=perj; for k=kt:n U(j,k)=U(j,k)-perj*U(i,k); end end end savefile=\'LUdapart\'; save(savefile)
请发表评论