Julia:将 CHOLMOD 因子转换为稀疏矩阵并再次返回
Julia: converting CHOLMOD factor to sparse matrix and back again
我有一个稀疏矩阵的 CHOLMOD 分解 H
,我想编辑上、下和块对角线因子的稀疏表示。我怎样才能做到这一点?当我在下面 运行 时,最后一行不起作用。
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
希望对您有所帮助。
我有一个稀疏矩阵的 CHOLMOD 分解 H
,我想编辑上、下和块对角线因子的稀疏表示。我怎样才能做到这一点?当我在下面 运行 时,最后一行不起作用。
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
希望对您有所帮助。