对称正定矩阵的对角线更新


19

A是一个 ×对称正定(SPD)稀疏矩阵。是一个稀疏对角矩阵。大( > 10000),并且的非零数通常为100〜1000 。G n nn×nGnnG

A已因式分解在乔列斯基形式。LDLT

当变为时,如何有效地更新和?D A A + GLDAA+G


G只有正元素吗?如果是这样,那么这是一个微不足道的上限:将对角线更新视为一级更新的总和。存在O(n ^ 2)个方法来计算秩更新的LDL ^ t因式分解(谷歌搜索提供了示例)。然后,您的对角线更新将在O(rn ^ 2)中运行,其中r是G的非零对角线元素的数量。鉴于这些更新的特定性质,可以使用一些快捷方式来保存一些计算,但是尚不清楚是否有可能将阶数降低到O(rn ^ 2)以下。

3
我同意-我不相信有任何方法可以比对Cholesky因式分解更快地进行对角线更新,而只是重复进行因式分解,但是排名第一的更新可以在时间内完成,并且您只需为每个更新进行一次G的对角线上的非零值。O(m2)G
Brian Borchers

10
对于Ñ Ñ Žģ 在数百,这将是很难击败重构。如果A的大小变得很大而G的稀疏,它可能会有所回报。在任何情况下,可能的更新和近似都由预计算后的二次时间内对角线加上固定的对称线性系统解决了吗?n104nnz(G)AAG
杰德·布朗

5
杰德,我想您应该在这里将您的评论升级为答案。
迈克尔·格兰特

Answers:


3

最新版本的CHOLMOD SuiteSparse软件包(测试版4.4.5)支持使用matlab(和C)API 修改对称行/列(rank2更新)以进行LDLT分解。我在其中一个项目中成功使用了它。

您可以使用它来对因式分解进行nnz(G)更新。正是基于文件。

因此,复杂度将为O(nnz(G)nnz(L))。当对稀疏A使用填充减少置换时,可以显着减少nnz(L)A

该软件包可以从这里下载

以下是包裹所有者给您的一些注意事项(蒂姆·戴维斯教授):

API:

LD = ldlrowmod(LD,k)通过将A(:,k)和A(k,:)设置为第k个标识行/列来删除行/列k。

LD = ldlrowmod(LD,k,C)用稀疏列C替换A的第k行/列(必须是身份的第k行/列)。

复杂:

行添加/删除最多需要O(nnz(L))时间,因此,如果nnz(L)O(n),则时间最多为O(n)

填充减少排列:

LDLT = A 那样,分解用户矩阵是一个好主意。相反,我们置换为LDLT = PAPT这样L的非零数就少得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.