节点排序方案对减少LU分解和前代/回代过程中的乘除法次数具有重要作用。一个好的排序方案在LU分解中产生的非零元注入会很少,非零元注入的定义是原始矩阵A中为零的元素在矩阵L或U中不再为零元素。如果A是一个满阵,那么LU分解过程需要的乘除法次数为 ,而前代/回代过程需要的乘除法次数为β=n2。如果采用合适的节点排序方案,求解稀疏矩阵所需要的乘除法次数可以大大减少。
例4.4 确定求解如图4.6所示系统所需的乘除法次数以及非零元注入数目。
图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分解所需的乘除法次数按行和列归纳如下:
因此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
因此前代和回代步骤中的乘除法次数β=25。求解Ax=b所需的乘除法总数为α+β=65。
当原始矩阵中的零元素在LU分解过程中变为非零元素时就产生了非零元注入。此现象可以用图形方法形象化地模拟。将例4.4的图重新画于图4.7。
在此编号方案中,与节点1对应的行和列最先进行三角分解。这相当于把节点1从该图中移除。当节点1被移除时,所有与它相连的节点必须被连接起来。而每增加一条边相当于矩阵Q中增加两个非零元注入(qij和qji),因为矩阵Q是对称的。节点1移除后的新图如图4.8所示,其中的虚线表示会产生6个非零元注入:q23、q24、q25、q34、q35和q45。这6个非零元注入也同样在该例的求解过程中列出。
图4.7 例4.4的图
图4.8 移除节点1后产生的非零元注入
例4.5 确定图4.9所示的系统求解过程所需的乘除法次数和非零元注入数目。(www.xing528.com)
图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分解所需的乘除法次数按行和列归纳如下:
因此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
因此前代和回代过程中的乘除法次数β=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分解和前代/回代过程中所需的乘除法次数。
图4.10 例4.6的矩阵
图4.11 加入非零元注入后例4.6的矩阵
β=矩阵Q的nnz值 (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个目标是使前代/回代过程中的乘除法次数β最小化。根据这个双重目标已提出了几种最优排序方案。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。