% Script-File 

% Hinzuf"ugen eines Suchpfades f"ur M-Files (nur falls erforderlich)
p=path; path(p, '../routines/');

global tol;
tol=sqrt(eps);

% Vektor mit Dimension der Matrix
v=2:20;

k=menu('Auswahl der Testbeispiele', ...
       'GAXPY-GAUSS mit allem, `einfache` Genauigkeit', ...
       'GAXPY-GAUSS mit allem, `einfache` Genauigkeit, richtiges Residuum', ...
       'Vergleich beider',...
       'Ende');

while (k<4)

       % Vektoren f"ur Zeit, Fehler, Konditionszahl
       k2    =ones(1,length(v));
       fehler=zeros(3,length(v));
       i=1;
       matrixtype=menu('Beispielmatrix',...
	               'Hilbertmatrix',...
		       'Random Matrix');
       for n=v
	   if matrixtype==1
	      % Hilbertmatrix der Dimension n
	      A=hilb(n);
	   else
	      A=randn(n,n)-.5;
	   end
	   % exakte L"osung
	   x=ones(n,1);
	   % zugeh"orige rechte Seite
	   b=A*x;
	   % Konditionszahl der Matrix
	   k2(i)=cond(A);


	   % 1. Variante, selbstgeschriebene LU-Variante 
           % GAUSS-Algorithmus der Vorlesung mit vollst"andiger Pivotisierung
           % Alle Werte werden gest"ort, auch die iterative Verbesserung und
	   % die dortige Berechung des Residuums
	   if (k==1 | k==3)
	      % Zeilenskalierung
	      [D,A,b]=SKALIERUNG(A,b);
	      B=A; c=b;
	      % gest"orte Gauss-Zerlegung
	      [B,p]=GAUSSPGAXPYS(B);
	      % modifiziertes gest"ortes Vorw"artseinsetzen (Einheitsdiagonale)
	      c(p,:)=FORWARDS(B(p,:),c(p,:),1);
	      % gest"ortes R"uckw"artseinsetzen
	      c(p,:)=BACKWARDS(B(p,:),c(p,:));
	      c=c(p,:);
	      % Iterative Verbesserung mit gest"orten Daten und 
	      % Rechenoperationen, Residuum wird auch gest"ort
	      c=ITVERBS1(A,c,b,3,B,p);
	      fehler(1,i)=norm(x-c)/norm(x);
	   end % if

	   % 2. Variante, selbstgeschriebene LU-Variante 
           % GAUSS-Algorithmus der Vorlesung mit vollst"andiger Pivotisierung
           % Alle Werte werden gest"ort, auch die iterative Verbesserung aber
	   % mit Ausnahme der dortigen Berechung des Residuums
	   if (k==2 | k==3)
	      % Zeilenskalierung
	      [D,A,b]=SKALIERUNG(A,b);
	      B=A; c=b;
	      % gest"orte Gauss-Zerlegung
	      [B,p]=GAUSSPGAXPYS(B);
	      % modifiziertes gest"ortes Vorw"artseinsetzen (Einheitsdiagonale)
	      c(p,:)=FORWARDS(B(p,:),c(p,:),1);
	      % gest"ortes R"uckw"artseinsetzen
	      c(p,:)=BACKWARDS(B(p,:),c(p,:));
	      c=c(p,:);
	      % Iterative Verbesserung mit gest"orten Daten und 
	      % Rechenoperationen, Residuum wird auch gest"ort
	      c=ITVERBS2(A,c,b,3,B,p);
	      fehler(2,i)=norm(x-c)/norm(x);
	   end % if

	   i=i+1;
       end % for

       figure(1);
       hold off;
       if (k==1 | k==3)
	  semilogy(v,fehler(1,:),'+r');
	  hold on;
       end; % if
       if (k==2 | k==3)
 	  semilogy(v,fehler(2,:),'og');
       end; % if
       hold off;
       title('Relative Fehler der L"osung');
       xlabel('n, `+`=gest. Res., `o`=doppelt genaues Res.,');
       ylabel('||e||/||x||');

       figure(2);
       semilogy(v,k2,'*');
       title('Konditionszahl der Matrix');
       xlabel('n');
       ylabel('cond_2(A)');
       
       k=menu('Auswahl der Testbeispiele', ...
	      'GAUSS mit allem, `einfache` Genauigkeit', ...
	      'GAUSS mit allem, `einfache` Genauigkeit, richtiges Residuum', ...
	      'Vergleich beider',...
	      'Ende');
end; % while


