Julia ldlfact和稀疏转换

时间:2018-01-30 04:57:38

标签: julia linear-algebra

我正试图用ldlfact解决朱莉娅的线性系统问题。为什么我在以下情况下会得到不同的结果?

设置

srand(10)
n = 7
pre = sprand(n,n,0.5)
H = pre + pre' + speye(n,n)
p_true = rand(n)
g = H*-p_true
fac = ldltfact(H; shift=0.0)
perm = fac[:p]
p1 = zeros(n)
p2 = zeros(n)

案例1

LDs = sparse(fac[:LD])
q1 = LDs\-g[perm]
p1[perm] = fac[:U]\q1
H*p - H*p_true

案例2

q2 = fac[:LD]\-g[perm]
p2[perm] = fac[:U]\q2
H*p2 - H*p_true

解决方案p1在第一种情况下是错误的。

1 个答案:

答案 0 :(得分:1)

无法将此作为评论发布,所以想为后代添加。以下列方式解决案例1 适用于此示例(感谢@ DanGetz' s post

L = copy(LDs)
for i=1:size(L,1)
  L[i,i] = 1.0
end
D = sparse(1:size(L,1),1:size(L,1),diag(LDs))

q1 = (L*D)\-g[perm]
p1[perm] = L'\q1
H*p1 - H*p_true