实验二矩阵的LU分解
一、题目:求矩阵[2 1 1 2;1 2 3 2;2 4 1 1;3 1 2 3]的Doolittle分解
二、方法:Doolittle分解,矩阵的紧凑格式的LU分解法
三、程序:
(1) 紧凑格式的LU分解法
function a=nalupad(a)
n=length(a);
a(2:n-1)=a(2:n-1)/a(1,1);
for k=2:n
a(k,k:n)=a(k,k:n)-a(k,1:k-1)*a(1:k-1,k:n);
a(k+1:n,k)=(a(k+1:n,k)-a(k+1:n,1:k-1)*a(1:k-1,k))/a(k,k);
end
(2) LU分解
function f=LU_decom(A)
[m,n]=size(A)
L=eye(n);
U=zeros(n);
flag='ok';
for i=1:n
U(1,i)=A(1,i);
end
for r=2:n
L(r,1)=A(r,1)/U(1,1);
end
for i=2:n
for j=i:n
z=0;
for r=1:i-1
z=z+L(i,r)*U(r,j);
end
U(i,j)=A(i,j)-z;
end
if abs(U(i,i)) flag='failure' return; end for k=i+1:n m=0; for q=1:i-1 m=m+L(k,q)*U(q,i); end L(k,i)=(A(k,i)-m)/U(i,i); end end L U end 四、结果: (1) 紧凑格式的LU分解法 >> nalupad([2 1 1 2;1 2 3 2;2 4 1 1;3 1 2 3]) ans = 2.0000 1.0000 1.0000 2.0000 0.5000 1.5000 2.5000 1.0000 1.0000 2.0000 -5.0000 - 3.0000 3.0000 -1.3333 -0.4667 -3.0667 (2) LU分解 >> LU_decom([2 1 1 2;1 2 3 2;2 4 1 1;3 1 2 3]) m = 4 n = 4 L = 1.0000 0 0 0 0.5000 1.0000 0 0 1.0000 2.0000 1.0000 0 1.5000 -0.3333 -0.2667 1.0000 U = 2.0000 1.0000 1.0000 2.0000 0 1.5000 2.5000 1.0000 0 0 -5.0000 -3.0000 0 0 0 -0.4667 五、拓展:矩阵分解成LU形式是有条件的,首先矩阵必须是非奇异的矩阵,其次矩阵的全部顺序主子式非零的时候才能完全保证矩阵可分解成LU且分解唯一。Doolittle分解法是不选主元的三角分解法,若U(k,k)绝对值很小时,按此分解法可能引起舍入误差的积累。可以通过交换矩阵A的行实现矩阵PA的LU分解(前提是A为非奇异的矩阵)。