
%°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
% Calcolo numerico:
% esercitazione del 30 gennaio 2006
%°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
%
%
%---------------------------
% ESERCIZIO 1
%---------------------------
clear
tol=1.e-10;
alfa=input('Dammi alfa = ')
a=[alfa 2 3 10; 5 12 10 7; 9 7 6 13; 4 16 18 0];
[n,m]=size(a);
kmax=2000;
x0=ones(n,1);
y0=x0/norm(x0);
x1=a*y0; lambda0=y0'*x1;
y1=x1/norm(x1);
lambda1=y1'*a*y1;
k=0;
while( k <= kmax & abs(lambda1-lambda0)>tol*abs(lambda1) & abs(lambda1)>0 )
    lambda0=lambda1;
    x1=a*y1;
    y1=x1/norm(x1);
    lambda1=y1'*x1;
    k=k+1;
end
disp('iterazioni fatte = '); k
disp('autovettore = '); y1
disp('autovalore di modulo massimo = '); lambda1
disp('Calcolo del residuo A x-lambda x = ' ); a*y1-lambda1*y1

%--------------------------------------
% ESERCIZIO 2
%-------------------------------------
clear
tol=1.e-10;
alfa=input('Dammi alfa = ')
mat=[alfa 2 3 10; 5 12 10 7; 9 7 6 13; 4 16 18 0];
a=inv(mat);
[n,m]=size(a);
kmax=2000;
x0=ones(n,1);
y0=x0/norm(x0);
x1=a*y0; lambda0=y0'*x1;
y1=x1/norm(x1);
lambda1=y1'*a*y1;
k=0;
while( k <= kmax & abs(lambda1-lambda0)>tol*abs(lambda1) & abs(lambda1)>0 )
    lambda0=lambda1;
    x1=a*y1;
    y1=x1/norm(x1);
    lambda1=y1'*x1;
    k=k+1;
end
disp('iterazioni fatte = '); k
disp('autovettore = '); y1
disp('autovalore di modulo minimo = '); 1/lambda1
disp('Calcolo del residuo A x-lambda x = ' ); a*y1-lambda1*y1


%---------------
% ESERCIZIO 3
%---------------
clear
%---------------------------------------------------------------------------
% Questo e' l metodo delle potenze inverse con shift per ila*y0-lambda1*y0
% calcolo dell'autovalore di A pi vicino ad un numero dato eta
%---------------------------------------------------------------------------
tol=1.e-10;
alfa=input('Dammi alfa = ');
eta=input('Dammi eta = ');
mat=[alfa 2 3 10; 5 12 10 7; 9 7 6 13; 4 16 18 0];
%------ Matrice del testo di Quarteroni e Saleri --------
 mat=[alfa 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
%--------------------------------------------------------
n=max(size(mat));
a=inv(mat-eta*eye(n));
kmax=2000;
x0=ones(n,1);
y0=x0/norm(x0);
x1=a*y0; lambda0=y0'*x1;
y0=x1/norm(x1);
x1=a*y0;
lambda1=y0'*x1;
k=0;
while( k <= kmax & abs(lambda1-lambda0)>tol*abs(lambda1) & abs(lambda1)>0 )
    lambda0=lambda1;
    y0=x1/norm(x1);
    x1=a*y0;
    lambda1=y0'*x1;
    k=k+1;
end
disp('iterazioni fatte = '); k
disp('autovettore = '); y0
disp('autovalore piu'' vicino a eta = '); 1/lambda1+eta
disp('Calcolo del residuo Ax-lambda x = ' ); a*y0-lambda1*y0