%% Minta házi feladat

%% A Cholesky-felbontás elkészítése
% A házi feladatban a Cholesky-felbontást elkészítő algoritmust
% valósítottam meg az alábbi függvénnyel
%%
% <include>CholeskyFelbontas.m</include>
%%
% A függvényt működését az alábbi példán szemléltethetjük
A=[16 -4 4; -4 10 -1; 4 -1 2]
%%
U=CholeskyFelbontas(A)
%% 
% Ekkor valóban U1*U'=A, 
U'*U-A
%%
% Továbbá tényleg csak pozitív definit mátrixokra működik, például az
A=[16 -4 4; -4 10 -1; 4 -1 -10]
%%
% indefinit mátrixra meghívva hibaüzenetet kapunk.

%% Futásidő tesztelése a Gauss-eliminációhoz képest
% Ehhez felhasználjuk a Gauss-eliminációt elkészítő függvényt
%%
% <include>simaGauss.m</include>
%%
% A teszteléshez pozitív definit mátrixsorozatot készítünk, majd
% ellenőrizzük rajta a felbontás elkészítésének idejét.
meret=12;
futasidoChol=zeros(1, meret);
futasidoGauss=zeros(1, meret);

for j=1:meret
    i=j*40;
    A=rand(i);
    B=A'*A; % szimmetrikus, pozitív definit véletlen mátrix
    tic 
    simaGauss(B);
    futasidoGauss(j)=toc;
    
    tic 
    CholeskyFelbontas(B);
    futasidoChol(j)=toc;
end
plot(40:40:meret*40,futasidoGauss,'b', 40:40:meret*40, futasidoChol,'r')
xlabel('A mátrix mérete')
ylabel('Felbontás elkészítése (mp)')
title('Az LU és Cholesky felbontások összehasonlítása')
legend('LU','Cholesky')
%%
% A futásidőkön látszik, hogy nagyméretű mátrixokra a Cholesky-felbontás
% elkészítése gyorsabb. Viszont az sqrt() függvény kiszámítása több időt
% igényel, mint az alapműveletek, ezt látjuk kis méretű mátrixokra.