Chain test on Cholesky
parent
0fa90d2cd4
commit
880d98e068
|
@ -0,0 +1,25 @@
|
||||||
|
scale = 1e-10;
|
||||||
|
length = 10000;
|
||||||
|
|
||||||
|
A = spalloc(length, length, 2*length);
|
||||||
|
b = zeros(length, 1);
|
||||||
|
|
||||||
|
A(1,1) = 1;
|
||||||
|
|
||||||
|
for i = 2:length
|
||||||
|
A(i, i-1) = 1e2*scale;
|
||||||
|
A(i, i) = -scale;
|
||||||
|
end
|
||||||
|
|
||||||
|
L = A'*A;
|
||||||
|
eta = A'*b;
|
||||||
|
|
||||||
|
R = choleskyNaive(L);
|
||||||
|
clear opts
|
||||||
|
opts.LT = true;
|
||||||
|
d = R' \ eta; %linsolve(R', eta, opts);
|
||||||
|
|
||||||
|
clear opts
|
||||||
|
opts.UT = true;
|
||||||
|
x = R \ d; %linsolve(R, d, opts);
|
||||||
|
|
|
@ -4,6 +4,7 @@ function A = choleskyNaive(A)
|
||||||
|
|
||||||
% Loop over rows of A
|
% Loop over rows of A
|
||||||
q = min(size(A,2), size(A,1));
|
q = min(size(A,2), size(A,1));
|
||||||
|
lastA = 0;
|
||||||
for i = 1:q
|
for i = 1:q
|
||||||
% Check for valid pivot
|
% Check for valid pivot
|
||||||
if A(i,i) <= 0.0
|
if A(i,i) <= 0.0
|
||||||
|
@ -11,6 +12,11 @@ for i = 1:q
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if lastA == A(i,i)
|
||||||
|
1;
|
||||||
|
end
|
||||||
|
lastA = A(i,i);
|
||||||
|
|
||||||
% Scale row to be the square-root factor
|
% Scale row to be the square-root factor
|
||||||
A(i,i) = sqrt(A(i,i));
|
A(i,i) = sqrt(A(i,i));
|
||||||
A(i,i+1:end) = A(i,i+1:end) ./ A(i,i);
|
A(i,i+1:end) = A(i,i+1:end) ./ A(i,i);
|
||||||
|
|
Loading…
Reference in New Issue