% A feladat megoldása (a használt "time" parancsot lásd a fájl végén):

N=1:100;

times=zeros(100,3);

for i=1:100
    idok=time(i);
    times(i,:)=idok;
    %pause
end

times

plot(N,times(:,1),N,times(:,2),N,times(:,3))

% Látható, hogy a beépített megoldó a leglassabb, míg a két, felbontást használó módszer viszonylag gyorsan lefut.
%
% Ez az a függvény, ami kiszámítja, adott N esetén mennyi idő kell a módszereknek.
% A tic/toc parancs úgy működik, hogy a "tic" helyen kezdi mérni az időt, és a "toc" paraméternél fejezi be, valamint  a "toc" fogja megadni magát az időt.
% A felbontások esetén az alábbi ötletet használjuk: ha C=L\cdot U, akkor a C\cdot x=b egyenlet átírható egy rendszerré az y=U\cdot x, új változó bevezetésével:
% L \cdot y = b, \\
% U \cdot x = y.
% Mivel ezeknek bal oldalai háromszög mátrixok, így a megoldásuk csupán visszahelyettesítésekből áll.
% Hasonlóan működik a Cholesky felbontás is, hiszen ekkor C=G\cdot G^T.

function [out]=time(N)
    C=(N-1)*eye(N)+ones(N);
    b=ones(N,1);
    out=zeros(3,1);

    tic;
        for k=1:1000
            y=C\b;
        end
    out(1)=toc;
    tic;
        [L,U]=lu(C);
        for k=1:1000
            y=L\b;
            x=U\y;
        end
    out(2)=toc;
    tic;
        G=chol(C);
        for k=1:1000
            y=G'\b;
            x=G\y;
        end
    out(3)=toc;
end