|
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 |