% Script-File

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


% Vektor mit Dimension der Matrix
v=10:10:50;

% Mehrfach Zerlegung testen.
Anz=5;

k=menu('Auswahl der Testbeispiele', ...
       'qr aus MATLAB', ...
       'eigener Givens-QR', ...
       'Vergleich beider',...
       'Ende');

while (k<4)

       % Vektoren f"ur Zeit, Fehler
       zeit  =zeros(2,length(v));
       fehler=zeros(2,length(v));
       i=1;
       for n=v
	   for j=1:Anz
	       % Beliebige Matrix der Dimension n
	       A=rand(n);
	       % Beliebige rechte Seite
	       x=rand(n,1); b=A*x;

	       % 1. Variante, qr aus MATLAB
	       if (k==1 | k==3)
		  flops(0);    
		  [Q,R]=qr(A);
		  y=R\ (Q'*b);
		  zeit(1,i)  =zeit(1,i)  +flops;
		  fehler(1,i)=fehler(1,i)+norm(x-y)/norm(x);
	       end; % if

	       % 2. Variante, eigene QR-Zerlegung
	       if (k==2 | k==3)
		  B=A; y=b;
		  flops(0);    
		  [B,c,s]=GIVENSQRDEC(B);
		  y=GIVENSMULT(y,c,s);
		  y=BACKWARD(B,y);
		  zeit(2,i)  =zeit(2,i)  +flops;
		  fehler(2,i)=fehler(2,i)+norm(x-y)/norm(x);       
	       end % if
           end % for
	       
           zeit(:,i)  =zeit(:,i)/Anz;
	   fehler(:,i)=fehler(:,i)/Anz;
	   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, `+r`=MATLAB, `og`=eigener QR');
       ylabel('||e||/||x||');

       figure(2);
       hold off;
       if (k==1 | k==3)
	  plot(v,zeit(1,:),'+r');
	  hold on;
       end; % if
       if (k==2 | k==3)
 	  plot(v,zeit(2,:),'og');
       end; % if
       hold off;
       title('Rechenzeit');
       xlabel('n, `+r`=MATLAB, `og`=eigener QR');
       ylabel('flops');
       
       k=menu('Auswahl der Testbeispiele', ...
              'qr aus MATLAB', ...
	      'eigener QR', ...
	      'Vergleich beider',...
	      'Ende');
end; % while
% Hinzuf"ugen eines Suchpfades f"ur M-Files (nur falls erforderlich)
p=path; path(p, '../matlab/');



