cholesky分解_<读书笔记8>稀疏矩阵Cholesky分解[3]

d156f21923c790ea3e339e53be59a8c6.png

本篇为稀疏矩阵求解算法经典论著<Direct Methods for Sparse Linear System>的<读书笔记 8>

4.6 Symbolic analysis

矩阵的符号分析是其数值分解的前导。它通常只包括计算非零模式而不进行数值计算。这使得数值分解可以对具有相同非零模式的矩阵序列进行重复计算(在求解非线性方程时经常出现的一种情况)。符号因子分解包括对因子分解的非零模式的显式表示的计算;一些稀疏的Cholesky算法需要这一点。矩阵的置换对fill-in有很大的影响。通常找到一个fill-reducing置换矩阵

,使得
的因子分解要比
更加稀疏。
cs_schol函数完成了应用于up-looking 稀疏Cholesky分解的符号分析。

4.7 Up-looking Cholesky

函数cs_cho1是up-looking Cholesky算法的实现。在本书中,用粗体描述代码中相对应的注释,如下:

Nonzero pattern of L(k, :):

Triangular solve:

Compute L(k,k):

执行完整的稀疏Cholesky分解,包括用函数S=cs_schol(order,A)完成fill-reducing preordering和符号分析,接下来用N=cs_chol(A,S),其中order为0,则用自然排序,如果order为1,则用对

完成fill-reducing 最小度排序。

4.8 left-looking and supernodal Cholesky

left-looking的Cholesky分解算法比向上的Cholesky分解算法更常用。其伪代码为:

97cac8c8fd85277ce81bc4bf7dcf4572.png

它一次计算一列,可以从以下表达式推导得到:

其中,每个矩阵的中间的行和列均为矩阵第

行和第
列。如果
的前
列已经算出来,则
,然后就能得到
。对于稀疏矩阵的伪代码为:

67355f6b0ec006e8516ea30f1a86c847.png

该方法要求计算

的列的非零样式(按顺序)在数值分解之前。相比之下,up-looking方法在进行数值因数分解之前只需要列计数的累积和,并在一次遍历中计算非零样式(按排序顺序)和数值分解。使用
cs_ereach可以在
时间内计算
的非零样式。

left-looking的数值分解需要访问

的第
行。非零样式
通过第
行子树
。这对于up-looking算法已经足够,但是对于left-looking方法仍然还需要访问
以及submatrix
的数值。

left-looking算法构成了超节点法(supernodal)的基础。在Cholesky分解以及LU分解中,经常会出现以下形式的矩阵,黑色的稠密块(block)即被称为超节点supernodal。考虑到上面提到的公式,三个矩阵中间的行与列可以扩展为维度为

的块矩阵
。则可以将公式改写为:

f3ed311f08415cd2d8845027b42d35d3.png

chol_super函数是supernodal left- looking Cholesky分解的原型。

af1a4ec64e8328ca6a760838c8eb2b4e.png

chol_super依赖于四个关键操作,所有这些操作都可以利用密集的矩阵内核:

1. 一个对称的更新

。在稀疏情况下,
是一个稠密矩阵。
表示第
个超节点的子节点的子集中的行。每个子孙的更新可以通过单个密集矩阵乘法完成。

2. 一个密集的Cholesky分解,函数chol

3.一个稀疏矩阵乘积,

,其中两个
项来自第
个超节点的后代。

4. 稠密三角形解

,使用
的第
个对角块。

4.9 Right-looking and multifrontal Cholesky

right-looking Cholesky 分解基于以下表达式,其中

为标量。

可以通过

来求解
,然后可以求得
。接下来可以得到方程
。然后迭代求解。其MATLAB的表达为:

45c74772272c33498d0c4666c6227aee.png

right-looking方法是multifrontal法的基础。multifrontal法与choL_right方法类似,除了对外积

求和做延迟处理。类似supernodal方法,
的列被组合在一起。每一组被表示为一个稠密前波矩阵(dense frontal matrix)。令
为一个前波矩阵的第一列的非零样式。则前波矩阵的维度为
。对前波矩阵进行
步的分解,并且完成一个rank-k的外积。这些步骤可以使用密集矩阵BLAS,因此他们也可以获得非常高的性能。在本书的第6.3节将会做更加详细的介绍。

chol_right不同的是,在前波矩阵中计算的外积不会立即添加到稀疏矩阵

中。设列
是一个被表示为前波矩阵
的最后一个主列(即
在函数
chol_super)。它保持在前波矩阵中,直到它的父矩阵被分解。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值