Julia:将 CHOLMOD 因子转换为稀疏矩阵,然后再转换回来

标签 julia sparse-matrix matrix-factorization suitesparse

我有一个稀疏矩阵 H 的 CHOLMOD 分解,我想编辑上、下和 block 对角因子的稀疏表示。我怎样才能做到这一点?当我运行下面的代码时,最后一行不起作用。

H = sprand(10,10,0.5)
fac = ldltfact(H; shift=0.0)
fD = fac[:D]
D = Base.SparseArrays.CHOLMOD.Sparse(fD)

有什么方法可以从稀疏矩阵反向转换为 CHOLMOD.factor 吗?

最佳答案

提取ldltfact的相关分解矩阵可能有点乏味。以下示例显示了与问题中类似的示例,并进行了最终测试,即提取的矩阵恢复了原始因式分解矩阵:

srand(1)
pre = sprand(10,10,0.5)
H = pre + pre' + speye(10,10)

fac = ldltfact(H; shift=0.0)
P = sparse(1:size(H,1),fac[:p],ones(size(H,1)))
LD = sparse(fac[:LD]) # this matrix contains both D and L embedded in it

L = copy(LD)
for i=1:size(L,1)
  L[i,i] = 1.0
end

D = sparse(1:size(L,1),1:size(L,1),diag(LD))

PHP = P*H*P'
LDL = L*D*L'

using Base.Test
@test PHP ≈ LDL

预期输出(以及 Julia v0.6.3 上的实际输出):

julia> @test PHP ≈ LDL
Test Passed

希望这有帮助。

关于Julia:将 CHOLMOD 因子转换为稀疏矩阵,然后再转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494948/

相关文章:

arrays - 我的 Fortran 代码遇到奇怪的问题

reflection - Julia:通过给定的字符串调用函数

scipy - 访问稀疏矩阵元素

julia - 语法 "|>"在 Julia 中有什么作用?

c - 使用 CSparse 库在 C 中表示稀疏矩阵

Matlab:每行或列的第一个非零元素

R - 使用 SVD 获取特征数量减少的矩阵

c++ - 如何在 Eigen C++ 中加速 LU 分解?

julia - 如何在 Julia 中进行并行矩阵乘法?

julia - 为什么我们需要 `iteratoreltype()` ?