我正试图用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
在第一种情况下是错误的。
答案 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