Let’s say I have a sparse positive semidefinite matrix that I want to factor using ldltfact and then solve a system of equations with changing right hand sides.
Is there any way to do this without allocating new memory for the solution at each iteration? I am looking for something like A_ldiv_B!(sol,F,rhs)
where F can be a CHOLMOD factorization.
function solve(F,sol,rhs)
sol[:] = F\rhs
end
function subsituteInLoop(F,n)
sol = zeros(n)
for iii = 1:5
rhs = rand(n)
@time solve(F,sol,rhs)
end
end
# create random pos def matrix X
n = 100
X = sprand(n,n,0.3)
X = 0.5*(X'+X)
X = sparse(X + (-minimum(eigs(X)[1])+1)*eye(n))
# factor X
F = ldltfact(X)
subsituteInLoop(F,n)
Output:
0.000041 seconds (9 allocations: 5.852 KiB)
0.000024 seconds (9 allocations: 5.852 KiB)
0.000017 seconds (9 allocations: 5.852 KiB)
0.000017 seconds (9 allocations: 5.852 KiB)
0.000015 seconds (9 allocations: 5.852 KiB)