% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%                                                                       % 
% Loesung der Aufgabe 13, Matlab Kurs WS 06/07                          % 
%                                                                       % 
% Dieses Programm liest eine Matrix A und einen Vektor b ein und loest  %
% das Gleichungssystem Ax=b mit Hilfe der Choleskyzerlegung.            %
% Es werden Funktionen genutzt.                                         %
%                                                                       % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

clear all


disp('Implementation des Cholesky-Algorithmus fuer ')
disp('positiv definite Matrizen A fuer das LGS. A x = b. ')
disp(' ')
disp(' ')
disp('Bitte quadratische, symmetrische, ')
A = input('positiv definite Matrix A eingeben. A = ');
disp(' ')
disp(' ')
b = input('Bitte Loesungsvektor b eingeben. b = ');
disp(' ')
disp(' ')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  Dimension von A:
[n,m] = size(A);
if n~=m
     error('Matrix A ist nicht quadratisch !');
end

% Ist die Matrix A symmetrisch ?
if A == A'
    disp('Matrix ist symmetrisch!')
else
    error('Matrix A ist nicht symmetrisch !');
end

% Ist die Matrix A positiv definit ?
% Anm.: Eigenwerte(A) > 0 und A symmetrisch => A pos definit
if min(eig(A)) < 0
    error('Matrix A ist nicht positiv definit !');
end

% Ist b ein Spaltenvektor ?
[q,p] = size(b);
if q~=n
     error('b hat die falsche Dimension!');
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


[L,R]=cholesky(A,b,n);
y = vorw(L,b,n);
x = rueckw(R,y,n);

disp(' ')
disp('Die Cholesky-Zerlegung lautet A = L L^t mit L =')
disp(L)
disp(' ')
disp('Die Loesung des LGS Ax=b ist x = ')
disp(x)