我正在尝试用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 适用于此示例(感谢 @DanGetz 的帖子(
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