%
% Calcolo Numerico 1 - Milano - Esercizio 2 - 19 giugno 2015
%

clear all, close all

B=[4 -1 0; -1 4 -1; 0 -1 4];
I3=eye(3); Z3=zeros(3);
A=[B, -I3, Z3; -I3 B -I3; Z3, -I3, B];
b=A*ones(9,1);

% A e`a dominanza diagonale stretta 

[x,iter_j]=jacobi(A,b,zeros(9,1),200,1e-6);
d=diag(A); l=tril(A,-1); u=triu(A,+1);
m_jac=diag(1./d)*(-l-u);
rho_j=max(abs(eig(m_jac)));
 
[x,iter_gs]=gseidel(A,b,zeros(9,1),200,1e-6);
d=diag(diag(A));
m_gs=inv(d+l)*(-u);
rho_gs=max(abs(eig(m_gs)));
 

fprintf('Jacobi:   iter=%3d \t rho=%8.6f\n',iter_j,rho_j)
fprintf('G_Seidel: iter=%3d \t rho=%8.6f\n',iter_gs,rho_gs)


% 2.1) A e`a dominanza diagonale stretta 
% 2.2) 2.3) Jacobi:   iter= 44 	 rho=0.707107
%           G_Seidel: iter= 23 	 rho=0.500000

%Si osserva che il raggio spettrale della matrice di iterazione 
%del metodo di Gauss Seidel è il quadrato del raggio spettrale 
%della matrice di iterazione del metodo di Jacobi, dunque il 
%secondo metodo ha velocità asintotica di convergenza doppia
%rispetto al primo e converge pertanto in un numero di iterazioni
% che è circa la metà 