clear all;
close all;
n=120;
% wir bauen eine Matrix mit erfuelltem Zeilensummenkriterium
a=2*rand(n,n)-1;
ad=a-diag(diag(a)); % Diagonale rausnehmen
ep=0.002 % Stoerungsterm: je groesser, 
% desto besser die Konvergenz
s=sum(abs(ad'))*(1+ep).*(1+ep*rand(1,n)); 
% wir bauen eine Diagonale, 
% die groessere Elemente als die Rest-Zeilensumme hat 
a=ad+diag(s); % und schreiben sie rein
zsnorm=zsk(a) % Zeilensummennorm ausrechnen
% Ab hier werden die Iterationsmatrizen mal genauer untersucht
d=diag(diag(a));   % der Diagonalteil
cgsv=-inv(d)*(a-d);   % Iterationsmatrix GSV
% und der Spektralradius dazu
spektralradiusgsv=max(abs(eig(cgsv))) 
R=a;   % wird der R-Teil
L=a;   % wird der L-Teil
for i=1:n   
    for j=1:i
        L(j,i)=0;
        R(i,j)=0;
    end
end
cesv=-inv(d+L)*R;  % Iterationsmatrix des ESV
sass=sassenfeld(a) % dito Sassenfeld-Wert
spektralradiusesv=max(abs(eig(cesv)))
b=rand(n,1);  % Zufallsvektor 
x=rand(n,1);  % Zufallsvektor 
rlistgsv=[];    % Liste der Fehlernormen fuer gsv
rlistesv=[];    % Liste der Fehlernormen fuer esv
xg=x; % Iterierte des GSV
xe=x; % Iterierte des ESV
for i=1:200   % wir machen hier die Iteration:
    restg=b-a*xg;
    restgnorm=norm(restg);
    rlistgsv=[rlistgsv restgnorm];
    xg=gsvschritt(a, b, xg);
    reste=b-a*xe;
    restenorm=norm(reste);
    rlistesv=[rlistesv restenorm];
    xe=esvschritt(a, b, xe);  
end
% und jetzt etwas Plotterei
semilogy(1:length(rlistgsv),rlistgsv,1:length(rlistesv),rlistesv)
legend('GSV','ESV')
title('Residuum') 
xlabel('Iterationen')
ylabel('Residuum')
