线性方程组(一) LU分解

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

 

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 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/shivency/p/3280104.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值