%
% [L,D]=ldlt(A)
%
% This function computes the square root free Cholesky factorization
%
%    A=L*D*L'
%
% where L is a lower triangular matrix with ones on the diagonal, and D
% is a diagonal matrix.  
%
% It is assumed that A is symmetric and postive definite.
%
% Reference: Golub and Van Loan, "Matrix Computations", second edition, 
%            p 137.  
% Author: Brian Borchers (borchers@nmt.edu)
%
function [L,D]=ldlt(A)
%
%  Figure out the size of A.
%
n=size(A,1);
%
% The main loop.  See Golub and Van Loan for details.  
%
L=zeros(n,n);
for j=1:n
  if (j > 1)
    v(1:j-1)=L(j,1:j-1).*d(1:j-1);
    v(j)=A(j,j)-L(j,1:j-1)*v(1:j-1)';
    d(j)=v(j);
    if (j < n)
      L(j+1:n,j)=(A(j+1:n,j)-L(j+1:n,1:j-1)*v(1:j-1)')/v(j);
    end
  else
    v(1)=A(1,1);
    d(1)=v(1);
    L(2:n,1)=A(2:n,1)/v(1);    
  end
end
%
%  Put d into a matrix.
%
D=diag(d);
%
%  Put ones on the diagonal of L.
%
L=L+eye(n);


