首页 理论教育 优化节点排序方案以减少LU分解和前代/回代乘除法次数

优化节点排序方案以减少LU分解和前代/回代乘除法次数

时间:2023-06-30 理论教育 版权反馈
【摘要】:节点排序方案对减少LU分解和前代/回代过程中的乘除法次数具有重要作用。一个好的排序方案在LU分解中产生的非零元注入会很少,非零元注入的定义是原始矩阵A中为零的元素在矩阵L或U中不再为零元素。如果采用合适的节点排序方案,求解稀疏矩阵所需要的乘除法次数可以大大减少。例4.6 确定图4.10在当前排序方案下的α、β和非零元注入数目。根据这个双重目标已提出了几种最优排序方案。

优化节点排序方案以减少LU分解和前代/回代乘除法次数

节点排序方案对减少LU分解和前代/回代过程中的乘除法次数具有重要作用。一个好的排序方案在LU分解中产生的非零元注入会很少,非零元注入的定义是原始矩阵A中为零的元素在矩阵LU中不再为零元素。如果A是一个满阵,那么LU分解过程需要的乘除法次数为978-7-111-58306-6-Chapter04-11.jpg ,而前代/回代过程需要的乘除法次数为β=n2。如果采用合适的节点排序方案,求解稀疏矩阵所需要的乘除法次数可以大大减少。

例4.4 确定求解如图4.6所示系统所需的乘除法次数以及非零元注入数目。

978-7-111-58306-6-Chapter04-12.jpg

图4.6 例4.4的图与矩阵

解4.4 LU分解的步骤如下:

q11=a11

q21=a21

q31=a31

q41=a41

q51=a51

q12=a12/q11

q13=a13/q11

q14=a14/q11

q15=a15/q11

q22=a22-q21q12

q32=a32-q31q12

q42=a42-q41q12

q52=a52-q51q12

q23=(a23-q21q13)/q22

q24=(a24-q21q14)/q22

q25=(a25-q21q15)/q22

q33=a33-q31q13-q32q23

q43=a43-q41q13-q42q23

q53=a53-q51q13-q52q23

q34=(a34-q31q14-q32q24)/q33

q35=(a35-q31q15-q32q25)/q33

q44=a44-q41q14-q42q24-q43q34

q54=a54-q51q14-q52q24-q53q34

q45=(a45-q41q15-q42q25-q43q35)/q44

q55=a55-q51q15-q52q25-q53q35-q54q45

LU分解所需的乘除法次数按行和列归纳如下:

978-7-111-58306-6-Chapter04-13.jpg

因此LU分解中乘除法次数α=40。前代(Ly=b)和回代(Ux=y)步骤如下:

y1=b1/q11

y2=(b2-q21y1/q22

y3=(b3-q31y1-q32y2/q33

y4=(b4-q41y1-q42y2-q43y3/q44

y5=(b5-q51y1-q52y2-q53y3-q54y4/q55

x5=y5

x4=y4-q45x5

x3=y3-q35x5-q34x4

x2=y2-q25x5-q24x4-q23x3

x1=y1-q15x5-q14x4-q13x3-q12x2

978-7-111-58306-6-Chapter04-14.jpg

因此前代和回代步骤中的乘除法次数β=25。求解Ax=b所需的乘除法总数为α+β=65。

当原始矩阵中的零元素在LU分解过程中变为非零元素时就产生了非零元注入。此现象可以用图形方法形象化地模拟。将例4.4的图重新画于图4.7。

在此编号方案中,与节点1对应的行和列最先进行三角分解。这相当于把节点1从该图中移除。当节点1被移除时,所有与它相连的节点必须被连接起来。而每增加一条边相当于矩阵Q中增加两个非零元注入(qijqji),因为矩阵Q是对称的。节点1移除后的新图如图4.8所示,其中的虚线表示会产生6个非零元注入:q23q24q25q34q35q45。这6个非零元注入也同样在该例的求解过程中列出。

978-7-111-58306-6-Chapter04-15.jpg

图4.7 例4.4的图

978-7-111-58306-6-Chapter04-16.jpg

图4.8 移除节点1后产生的非零元注入

例4.5 确定图4.9所示的系统求解过程所需的乘除法次数和非零元注入数目。(www.xing528.com)

978-7-111-58306-6-Chapter04-17.jpg

图4.9 例4.5的图与矩阵

解4.5 LU分解的步骤如下:

q11=a11

q51=a51

q15=a15/q11

q22=a22

q25=a25/q22

q52=a52

q33=a33

q53=a53

q35=a35/q33

q44=a44

q54=a54

q45=a45/q44

q55=a55-q51q15-q52q25-q53q35-q54q45

LU分解所需的乘除法次数按行和列归纳如下:

978-7-111-58306-6-Chapter04-18.jpg

因此LU分解中乘除法次数α=8。前代(Ly=b)和回代(Ux=y)步骤如下:

y1=b1/q11

y2=b2/q22

y3=b3/q33

y4=b4/q44

y5=(b5-q51y1-q52y2-q53y3-q54y4/q55

x5=y5

x4=y4-q45x5

x3=y3-q35x5

x2=y2-q25x5

x1=y1-q15x5

978-7-111-58306-6-Chapter04-19.jpg

因此前代和回代过程中的乘除法次数β=13。求解Ax=b所需的乘除法总数为α+β=21。

尽管两个原始矩阵有相同数目的非零元,但简单地重新编号矩阵图的顶点就可以使乘除法次数大大减少。产生这种结果的部分原因是LU分解时产生的非零元注入数目减少。例4.4中的矩阵Q变成了满阵,而例4.5中的矩阵Q仍然保持了与原始矩阵A同样的稀疏结构。从这两个例子可以看出,尽管不同的节点排序方案不会影响线性方程求解的精度,但不同的节点排序方案会对求解的速度有很大的影响。一个好的排序方案可以让生成的矩阵Q具有类似于原始矩阵A的稀疏结构,这意味着非零元注入的数目已被最小化。这个目标构成了各种最优排序方案的基础。最优排序问题是一个NP完全问题[54],然而已开发出了几种方案可以达到近似最优的结果。

例4.6 确定图4.10在当前排序方案下的αβ和非零元注入数目。

解4.6 第一步是确定LU分解中哪儿会产生非零元注入。通过观察,发现非零元注入会出现在如图4.11所示矩阵中用△标示的位置。根据图4.11,非零元注入的数目为24。

可以依据包含非零元注入的矩阵,用一种简单的方法直接计算出αβ,而不采用常规方法计算LU分解和前代/回代过程中所需的乘除法次数。

978-7-111-58306-6-Chapter04-20.jpg

图4.10 例4.6的矩阵

978-7-111-58306-6-Chapter04-21.jpg

图4.11 加入非零元注入后例4.6的矩阵

978-7-111-58306-6-Chapter04-22.jpg

β=矩阵Qnnz值 (4.2)

利用式(4.1)和式(4.2),对于图4.11所示的矩阵Q

α=(3×4)+(4×5)+(5×6)+(4×5)+(4×5)+(3×4)+

+(3×4)+(2×3)+(1×2)+(0×1)=134

β=nnz=68

因此

α+β=202

请将此结果与α+β=430做对比。

即使没有最优排序,稀疏矩阵求解也会减少超过50%的计算量。最优排序方案的目标之一是使分解后的矩阵Q具有最少的非零元注入,从而使乘除法次数α最小。最优排序方案的第2个目标是使前代/回代过程中的乘除法次数β最小化。根据这个双重目标已提出了几种最优排序方案。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈