a b/combinedDeepLearningActiveContour/minFunc/mchol.m
1
function [l,d,perm] = mchol(A,mu)
2
% Compute a modified LDL factorization of A
3
% (MEX ME!)
4
5
if nargin < 2
6
    mu = 1e-12;
7
end
8
9
n = size(A,1);
10
l = eye(n);
11
d = zeros(n,1);
12
perm = 1:n;
13
14
for i = 1:n
15
    c(i,i) = A(i,i);
16
end
17
18
% Compute modification parameters
19
gamma = max(abs(diag(A)));
20
xi = max(max(abs(setdiag(A,0))));
21
delta = mu*max(gamma+xi,1);
22
if n > 1
23
    beta = sqrt(max([gamma xi/sqrt(n^2-1) mu]));
24
else
25
    beta = sqrt(max([gamma mu]));
26
end
27
28
for j = 1:n
29
    
30
    % Find q that results in Best Permutation with j
31
    [maxVal maxPos] = max(abs(diag(c(j:end,j:end))));
32
    q = maxPos+j-1;
33
    
34
    % Permute d,c,l,a
35
    d([j q]) = d([q j]);
36
    perm([j q]) = perm([q j]);
37
    c([j q],:) = c([q j],:);
38
    c(:,[j q]) = c(:,[q j]);
39
    l([j q],:) = l([q j],:);
40
    l(:,[j q]) = l(:,[q j]);
41
    A([j q],:) = A([q j],:);
42
    A(:,[j q]) = A(:,[q j]);
43
    
44
    for s = 1:j-1
45
        l(j,s) = c(j,s)/d(s);
46
    end
47
    for i = j+1:n
48
        c(i,j) = A(i,j) - sum(l(j,1:j-1).*c(i,1:j-1));
49
    end
50
    theta = 0;
51
    if j < n && j > 1
52
        theta = max(abs(c(j+1:n,j)));
53
    end
54
    d(j) = max([abs(c(j,j)) (theta/beta)^2 delta]);
55
    if j < n
56
        for i = j+1:n
57
            c(i,i) = c(i,i) - (c(i,j)^2)/d(j);
58
        end
59
    end
60
end