文档库 最新最全的文档下载
当前位置:文档库 › 矩阵的LU分解

矩阵的LU分解

矩阵的LU分解
矩阵的LU分解

实验二矩阵的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为非奇异的矩阵)。

相关文档