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

% Vektor mit Dimension der Matrix
v=2:2:8;
zeit  =zeros(length(v),5);
fehler=zeros(length(v),5);
linienstil=['+'  'o'  '*'  'x'  's'];
farbe     =['g'  'r'  'y'  'c'  'm'];
menueeintrag=['MATLAB            ';...
              'GAUSS-LU          ';...
              'Cramer mit det    ';...
              'Cramer mit Laplace'];
textlaenge  =[6 8 14 18];
	    
k=menu('Auswahl der Testbeispiele',...
       menueeintrag(1,:),...
       menueeintrag(2,:),...
       menueeintrag(3,:),...
       menueeintrag(4,:),...
       'Vergleich aller',...
       'Ende');

while (k<6)

      fprintf('Zeit f"ur L"osung eines lin. Gls.\n');
      fprintf('Dim.');
      if (k==1 | k==5)
	 fprintf('|   MATLAB        ');
      end	           
      if (k==2 | k==5)
	 fprintf('|  GAUSS-LU       ');
      end	           
      if (k==3 | k==5)
	 fprintf('|Cramer mit det   ');
      end	           
      if (k==4 | k==5)
	 fprintf('|Cramer mit Laplace');
      end	           
      fprintf('\n');

      i=1;
      for n=v
          % Beliebige Matrix der Dimension n
	  A=rand(n);
	  % Beliebige Loesung 
	  x=rand(n,1);
	  % zugehoerige rechte Seite
	  b=A*x;

	  % 1. Variante, eingebaute LU-Variante mittels 
	  if (k==1 | k==5)
	     flops(0);    
	     c=A\b;
	     zeit(i,1)=flops;
	     fehler(i,1)=norm(c-x)/norm(x);
	  end;

	  % 2. Variante, selbstgeschriebene LU-Variante 
	  if (k==2 | k==5)
	     B=A; c=b;
	     flops(0);    
	     % Gauss-Zerlegung
	     B=GAUSSLU(B);
	     % modifiziertes Vorw"artseinsetzen (Einheitsdiagonale)
	     c=FORWARD(B,c,1);
	     % R"uckw"artseinsetzen
	     c=BACKWARD(B,c);
	     zeit(i,2)=flops;
	     fehler(i,2)=norm(c-x)/norm(x); 
	  end; % if

	  % 3. Variante Cramersche Regel mit eingebautem 'det'
	  if (k==3 | k==5)
	     flops(0);    
	     c=CRAMER(A,b);
	     zeit(i,3)=flops;
	     zeit(i,3)=flops;
	     fehler(i,3)=norm(c-x)/norm(x); 
	  end

	  % 4. Variante Cramersche Regel mit LAPLACEschen Entwicklungssatz
	  if (k==4 | k==5)
	     flops(0);    
	     c=CRAMER(A,b,'DETERMINANTE');
	     zeit(i,4)=flops;
	     fehler(i,4)=norm(c-x)/norm(x); 
	  end;
	  i=i+1; 
      end; % for


      figure(1);
      unterschrift='n ';
      if (k<5)
	 fprintf('----------------------\n');
         plot(v,fehler(:,k),[linienstil(k) farbe(k)]);
         unterschrift=[unterschrift '`' linienstil(k) farbe(k) '`=',...
	               menueeintrag(k,1:textlaenge(k))];
	 i=1;
	 for n=v
	     fprintf('%4g|%12.4e\n', n, zeit(i,k));
	     i=i+1;
	 end;
      else
	 fprintf('-----------------------------------------------------------------------------\n');
	 for k=1:4
             plot(v,fehler(:,k),[linienstil(k) farbe(k)]);
             unterschrift=[unterschrift '`' linienstil(k) farbe(k) '`=',...
	                   menueeintrag(k,1:textlaenge(k)) ', '];
	     hold on;
         end; % for
	 hold off;
	 k=5;
         i=1;
	 for n=v
	     fprintf('%4g|   %12.4e  |   %12.4e  |   %12.4e  |   %12.4e\n', n, zeit(i,1:k-1));
	     i=i+1;
	 end;
      end; % if
      title('rel. Fehler zur vorgegebenen Loesung');
      ylabel('rel. Fehler ||x-tilde{x}||/||x||');
      xlabel(unterschrift);
      fprintf('\n');

     
      k=menu('Auswahl der Testbeispiele', ...
             menueeintrag(1,:), ...
             menueeintrag(2,:), ...
             menueeintrag(3,:),...
             menueeintrag(4,:),...
             'Vergleich aller',...
	     'Ende');
end; % while

