function Hausaufgabe6
  fprintf('Erste Matrix\n');
  A = [9 -36 30; -36 192 -180; 30 -180 180]
  D = meinCholesky(A)
  
  fprintf('Probe\n');
  D'*D
  
  fprintf('Zweite Matrix\n');  
  A = [6 -10 -2; -10 20 5; -2 5 1]
  D = meinCholesky(A)
  
  fprintf('Probe\n');
  D'*D
end


function D= meinCholesky(A)
% Größe von A bestimmen
n=length(A);

% Matrix für Rückgabe
D=zeros(n,n);

% Algorithmus aus der Vorlesung für Cholesky-Zerlegung
for i=1:n
  for k=i:n
    sum=0;
    for j=1:(i-1)
      sum=sum+D(j,i)*D(j,k);
    end
    s=A(i,k)-sum;
    if(i==k)
      if(s<0) % keine Cholesky-Zerlegung möglich
        fprintf('Matrix ist nicht positiv definit');
        D = A;
        return;
      else
        D(i,i)=sqrt(s);
      end
    else
      D(i,k)=s/D(i,i);
    end
  end
end
end

% Protokoll der Ausgabe:
% Erste Matrix
% 
% A =
% 
%      9   -36    30
%    -36   192  -180
%     30  -180   180
% 
% 
% D =
% 
%    3.000000000000000 -12.000000000000000  10.000000000000000
%                    0   6.928203230275509  -8.660254037844387
%                    0                   0   2.236067977499790
% 
% Probe
% 
% ans =
% 
%      9   -36    30
%    -36   192  -180
%     30  -180   180
% 
% Zweite Matrix
% 
% A =
% 
%      6   -10    -2
%    -10    20     5
%     -2     5     1
% 
% Matrix ist nicht positiv definit
% D =
% 
%      6   -10    -2
%    -10    20     5
%     -2     5     1
% 
% Probe
% 
% ans =
% 
%    140  -270   -64
%   -270   525   125
%    -64   125    30
% 
