%% Iterační metody pro systémy lineárních rovnic
% Příklad: třídiagonální matice

n=10;
D=2*diag(ones(n,1));
E1=-diag(ones(n-1,1),-1);
A=D+E1+E1'

%
% Řešíme systém Ax=b pro b=[1,\dots,1]^T

b=ones(n,1);

% Rozklad matice

L=tril(A,-1);
U=triu(A,1);

%
% Jacobiova metoda

TJ=-inv(D)*(L+U);
gj=inv(D)*b;

% Kolik iterací je potřeba na dosažení přesnosti 10^{-6}?



%
% Spektrální poloměr

rj=max(abs(eig(TJ)))

%
% Gaussova-Seidelova metoda

TG=-inv(D+L)*U;
gg=inv(D+L)*b;

% Kolik iterací je potřeba na dosažení přesnosti 10^{-6}?



%
% Spektrální poloměr

rg=max(abs(eig(TG)))

% Relaxační metoda

om1=0.8;
TR1=-inv(D+om1*L)*((om1-1)*D + om1*U);

% Spektrální poloměr

r1=max(abs(eig(TR1)))

om2=1.2;
TR2=-inv(D+om2*L)*((om2-1)*D + om2*U);

% Spektrální poloměr

r2=max(abs(eig(TR2)))

%
% Optimální omega

om_o=2/(1+sqrt(1-rj^2))
TRo=-inv(D+om_o*L)*((om_o-1)*D + om_o*U);
ro=max(abs(eig(TRo)))

%
%