% Angewandte Numerik 1, SoSe 2014
% Uebungsblatt 02, Aufgabe 15: Cholesky-Zerlegung
%
% Testprogramm fuer die Funktion L = choleskyBand(A),
% die die CholeskyZerlegung einer Bandmatrix A berechnet

clear all;
close all;
clc;

tol = 1e-12;


%% Testfall 1

A = 3*eye(4)+diag([1,1,1],-1)+diag([1,1,1],1);
L = choleskyBand(A,1);
err = max(max(abs(L*L'-A)));

if (err < tol)
    fprintf('Testfall 1: Bestanden.\n');
else
    fprintf(2,'Testfall 1: Fehlgeschlagen.\n');
end


%% Testfall 2

A = 8*eye(7)+diag(2*ones(6,1),-1)+diag(2*ones(6,1),1)+...
    diag(ones(5,1),-2) + diag(ones(5,1),2);
L = choleskyBand(A,2);
err = max(max(abs(L*L'-A)));

if (err < tol)
    fprintf('Testfall 2: Bestanden.\n');
else
    fprintf(2,'Testfall 2: Fehlgeschlagen.\n');
end


%% Testfall 3

n=50; 
A=rand(5,n); 
A=   diag(A(1,:))+diag(A(2,2:end),1)+diag(A(3,2:end),-1)...
    + diag(A(4,6:end),5)+diag(A(5,6:end),-5);
A = A+A';
A = A+(norm(A,1)+norm(A,Inf))*eye(n);
A = A+A'+n*eye(n);
L = choleskyBand(A,5);
err = max(max(abs(L*L'-A)));

if (err < tol)
    fprintf('Testfall 3: Bestanden.\n');
else
    fprintf(2,'Testfall 3: Fehlgeschlagen.\n');
end