shivency

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

《数值分析与科学计算》的第二章便是讲求解线性方程组,权当对学了一个暑假的线代的总结。

 

1、LU分解

其映射简而言之便是这样:

 

用公式表示则是

Ly = b
Ux = y

 

 以下以matlab介绍LU分解

 1 >> A = [8 8 4; 4 2 -1; 2 2 2]
 2 A =
 3 
 4      8     8     4
 5      4     2    -1
 6      2     2     2
 7 
 8 >> [L,U]= lu(A)
 9 L =
10 
11     1.0000         0         0
12     0.5000    1.0000         0
13     0.2500         0    1.0000
14 
15 U =
16 
17      8     8     4
18      0    -2    -3
19      0     0     1
20 
21 >> M = lu(A)
22 M =
23 
24     8.0000    8.0000    4.0000
25     0.5000   -2.0000   -3.0000
26     0.2500         0    1.0000

line8 ~line 19表示为A的LU分解的原位形式;

line21 ~line26表示为A的LU分解的紧凑形式。

 

 1 >> M = lu(A)
 2 M =
 3 
 4     8.0000    8.0000    4.0000
 5     0.5000   -2.0000   -3.0000
 6     0.2500         0    1.0000
 7 
 8 
 9 >> u1 = triu(M)
10 u1 =
11 
12      8     8     4
13      0    -2    -3
14      0     0     1
15 
16 
17 >> l1 = tril(M)
18 l1 =
19 
20     8.0000         0         0
21     0.5000   -2.0000         0
22     0.2500         0    1.0000
23 
24 
25 >> for  i=1: size(l1,1); l1(i,i)=1;end
26 >> l1
27 l1 =
28 
29     1.0000         0         0
30     0.5000    1.0000         0
31     0.2500         0    1.0000

line9 ~line22 表示了从紧凑形式中提取U和L 。然而我们发现了l1提取了整个M的下三角,这不是我们想要的结果。

可以通过循环调整l1,获得我们想要的形式(line 27~ line 31) 。

 

使用循环并不是最佳方案

 1 %way 1
 2 >> l1 = tril(M)
 3 l1 =
 4 
 5     8.0000         0         0
 6     0.5000   -2.0000         0
 7     0.2500         0    1.0000
 8 
 9 >> l1 = l1 - diag(diag(l1)) + eye(size(l1, 1))
10 l1 =
11 
12     1.0000         0         0
13     0.5000    1.0000         0
14     0.2500         0    1.0000
15 
16 
17 %way 2
18 >> l1 = tril(M, -1) + eye(size(l1, 1))
19 l1 =
20 
21     1.0000         0         0
22     0.5000    1.0000         0
23     0.2500         0    1.0000

 

 

有时候需要选主元再进行LU分解。

便需要左乘算子先进行行变换,再进行LU分解。

posted on 2013-08-27 15:14  shivency  阅读(1208)  评论(0编辑  收藏  举报