implementati algoritmi iterativi di jacobi e gauss-seidel
This commit is contained in:
49
functions/gauss_seidel_abs.m
Normal file
49
functions/gauss_seidel_abs.m
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
% gauss seidel algorithm
|
||||
|
||||
%input
|
||||
%U=[10,20,30;1,5,3;4,56,34]; matrice di input
|
||||
%b=[1;2;17]; termini noti
|
||||
%x0 vettore di partenza
|
||||
%toll tolleranza assoluta , esempio 1e-4
|
||||
%nmax numero massimo di passaggi, esempio 500
|
||||
|
||||
|
||||
%Ooutput
|
||||
%x0 soluzione computata
|
||||
%err errore assoluto computato
|
||||
%niter numero di interazioni eseguite
|
||||
%ier 1 se il numero di iterazioni ha raggiunto nmax, 0 altrimenti
|
||||
|
||||
function [x0,err,niter,ier] = gauss_seidel_abs (U,b,x0,toll,nmax)
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
niter = 0;
|
||||
ier = 0;
|
||||
err = inf;% err infinito per superare subito toll
|
||||
|
||||
while ( niter < nmax ) && ( err >= toll)
|
||||
x0_old = x0;
|
||||
for i=1:n
|
||||
partial_sum = 0;
|
||||
partial_sum2 = 0;
|
||||
|
||||
for k=1:i-1
|
||||
partial_sum = partial_sum + ( U(i,k) * x0(k));
|
||||
end
|
||||
for k=i+1:n
|
||||
partial_sum2 = partial_sum2 + ( U(i,k) * x0(k));
|
||||
end
|
||||
x0(i) = (b(i) - partial_sum - partial_sum2)/U(i,i) ;
|
||||
end
|
||||
niter = niter + 1;
|
||||
err = norm(x0_old - x0,inf);
|
||||
mex = [' Iterazione ', num2str(niter),' : ',mat2str(x0), ' Errore assoluto : ', num2str(err)];
|
||||
disp (mex)
|
||||
end
|
||||
if niter == nmax
|
||||
disp('Warning: Massimo numero di step raggiunti')
|
||||
ier = 1;
|
||||
end
|
||||
|
||||
end
|
||||
49
functions/gauss_seidel_rel.m
Normal file
49
functions/gauss_seidel_rel.m
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
% gauss seidel algorithm
|
||||
|
||||
%input
|
||||
%U=[10,20,30;1,5,3;4,56,34]; matrice di input
|
||||
%b=[1;2;17]; termini noti
|
||||
%x0 vettore di partenza
|
||||
%toll tolleranza relativa , esempio 1e-4
|
||||
%nmax numero massimo di passaggi, esempio 500
|
||||
|
||||
|
||||
%Ooutput
|
||||
%x0 soluzione computata
|
||||
%err errore relativo computato
|
||||
%niter numero di interazioni eseguite
|
||||
%ier 1 se il numero di iterazioni ha raggiunto nmax, 0 altrimenti
|
||||
|
||||
function [x0,err,niter,ier] = gauss_seidel_rel (U,b,x0,toll,nmax)
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
niter = 0;
|
||||
ier = 0;
|
||||
err = inf;% err infinito per superare subito toll
|
||||
|
||||
while ( niter < nmax ) && ( err >= toll)
|
||||
x0_old = x0;
|
||||
for i=1:n
|
||||
partial_sum = 0;
|
||||
partial_sum2 = 0;
|
||||
|
||||
for k=1:i-1
|
||||
partial_sum = partial_sum + ( U(i,k) * x0(k));
|
||||
end
|
||||
for k=i+1:n
|
||||
partial_sum2 = partial_sum2 + ( U(i,k) * x0(k));
|
||||
end
|
||||
x0(i) = (b(i) - partial_sum - partial_sum2)/U(i,i) ;
|
||||
end
|
||||
niter = niter + 1;
|
||||
err = norm(x0_old - x0,inf)/norm(x0,inf);
|
||||
mex = [' Iterazione ', num2str(niter),' : ',mat2str(x0), ' Errore relativo : ', num2str(err)];
|
||||
disp (mex)
|
||||
end
|
||||
if niter == nmax
|
||||
disp('Warning: Massimo numero di step raggiunti')
|
||||
ier = 1;
|
||||
end
|
||||
|
||||
end
|
||||
50
functions/jacobi_abs.m
Normal file
50
functions/jacobi_abs.m
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
% jacobi algorithm
|
||||
|
||||
%input
|
||||
%U=[10,20,30;1,5,3;4,56,34]; matrice di input
|
||||
%b=[1;2;17]; termini noti
|
||||
%x0 vettore di partenza
|
||||
%toll tolleranza assoluta , esempio 1e-4
|
||||
%nmax numero massimo di passaggi, esempio 500
|
||||
|
||||
|
||||
%Ooutput
|
||||
%x0 soluzione computata
|
||||
%err errore assoluto computato
|
||||
%niter numero di interazioni eseguite
|
||||
%ier 1 se il numero di iterazioni ha raggiunto nmax, 0 altrimenti
|
||||
|
||||
function [x0,err,niter,ier] = jacobi_abs (U,b,x0,toll,nmax)
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
niter = 0;
|
||||
ier = 0;
|
||||
err = inf;% err infinito per superare subito toll
|
||||
x1 = x0;% solo per inizializzare
|
||||
|
||||
while ( niter < nmax ) && ( err >= toll)
|
||||
for i=1:n
|
||||
partial_sum = 0;
|
||||
partial_sum2 = 0;
|
||||
|
||||
for k=1:i-1
|
||||
partial_sum = partial_sum + ( U(i,k) * x0(k));
|
||||
end
|
||||
for k=i+1:n
|
||||
partial_sum2 = partial_sum2 + ( U(i,k) * x0(k));
|
||||
end
|
||||
x1(i) = (b(i) - partial_sum - partial_sum2)/U(i,i) ;
|
||||
end
|
||||
niter = niter + 1;
|
||||
err = norm(x1 - x0,inf);
|
||||
x0=x1;
|
||||
mex = [' Iterazione ', num2str(niter),' : ',mat2str(x0), ' Errore assoluto : ', num2str(err)];
|
||||
disp (mex)
|
||||
end
|
||||
if niter == nmax
|
||||
disp('Warning: Massimo numero di step raggiunti')
|
||||
ier = 1;
|
||||
end
|
||||
|
||||
end
|
||||
50
functions/jacobi_rel.m
Normal file
50
functions/jacobi_rel.m
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
% jacobi algorithm
|
||||
|
||||
%input
|
||||
%U=[10,20,30;1,5,3;4,56,34]; matrice di input
|
||||
%b=[1;2;17]; termini noti
|
||||
%x0 vettore di partenza
|
||||
%toll tolleranza relativa , esempio 1e-4
|
||||
%nmax numero massimo di passaggi, esempio 500
|
||||
|
||||
|
||||
%Ooutput
|
||||
%x0 soluzione computata
|
||||
%err errore relativo computato
|
||||
%niter numero di interazioni eseguite
|
||||
%ier 1 se il numero di iterazioni ha raggiunto nmax, 0 altrimenti
|
||||
|
||||
function [x0,err,niter,ier] = jacobi_rel (U,b,x0,toll,nmax)
|
||||
|
||||
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
|
||||
niter = 0;
|
||||
ier = 0;
|
||||
err = inf;% err infinito per superare subito toll
|
||||
x1 = x0;% solo per inizializzare
|
||||
|
||||
while ( niter < nmax ) && ( err >= toll)
|
||||
for i=1:n
|
||||
partial_sum = 0;
|
||||
partial_sum2 = 0;
|
||||
|
||||
for k=1:i-1
|
||||
partial_sum = partial_sum + ( U(i,k) * x0(k));
|
||||
end
|
||||
for k=i+1:n
|
||||
partial_sum2 = partial_sum2 + ( U(i,k) * x0(k));
|
||||
end
|
||||
x1(i) = (b(i) - partial_sum - partial_sum2)/U(i,i) ;
|
||||
end
|
||||
niter = niter + 1;
|
||||
err = norm(x1 - x0,inf) / norm (x1,inf);
|
||||
x0=x1;
|
||||
mex = [' Iterazione ', num2str(niter),' : ',mat2str(x0), ' Errore relativo : ', num2str(err)];
|
||||
disp (mex)
|
||||
end
|
||||
if niter == nmax
|
||||
disp('Warning: Massimo numero di step raggiunti')
|
||||
ier = 1;
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user