% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%                                                         %
%        SS 2007 - Numerik 2 Programmieraufgaben          %
%                                                         %
%                Aufgabe 7 - Potenzmethode                %   
%                                                         % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

clear all
% a)
% Berechnung des groessten EWs:
% -----------------------------

A =  [0 -8 16 -104; 0 2 -12 42; 0 9 -16 105; 1 -2 13 -42];
x0 = [ 1; 0 ; 0 ; 0];
n = 4;
epsilon = 10^-8;
[lambda_approx, x_approx, iteration] = potenzmethode(A,n,x0,epsilon);


% Berechnung der exakten Eigenwerte (nur zum Vergleich)
lambda = eig(A);
[r,index] = max(abs(lambda));
lambda_exact = lambda(index);

disp(' ')
disp(['Der betragsgroesste Eigenwert (exakt) ist lambda = ',num2str(lambda_exact)]);
disp(['Der groesste approximierte EW ist lambda_approx = ',num2str(lambda_approx)]);
disp(' ')
disp(['Zur Erreichung der Genauigkeit ',num2str(epsilon),' waren ',num2str(iteration),' Iterationen noetig.'])
disp(' ')
% b)
% Berechnung des zweitgroessten Eigenwertes:
% ------------------------------------------
mu=10;
x0 = [ 1;1 ; 1 ; 1];
B = inv(A-mu*eye(n));

[lambda_approx, x_approx, iteration] = potenzmethode(B,n,x0,epsilon);


lambda_2 =1/lambda_approx+mu;
lambda = eig(A); 
[r,index]=max(abs(lambda));
lambda(index)=0;
[r,index]= max(abs(lambda));
lambda_exact = lambda(index);

disp(['Der betragsmaessig zweitgroesste Eigenwert (exakt) ist lambda = ',num2str(lambda_exact)])
disp(['Der betragsmaessig zweitgroesste approximierte Eigenwert ist '])
disp(['lambda_approx = ',num2str(lambda_2)])
disp(' ')
disp(['Zur Erreichung der Genauigkeit ',num2str(epsilon),' waren ',num2str(iteration),' Iterationen noetig.'])
disp(' ')