vuoi
o PayPal
tutte le volte che vuoi
% sistema;
% iter numero di iterazioni effettuate dal raffinamento iterativo.
%
%
% La function richiama: Lufact, Forwsub, Backsub, Raff_iter.
%_________________________________________________________________________
%
% Esempio di utilizzo della function applicata al sistema lineare Ax=b
% dove
%
% A= 5 -2 0
% -2 5 -2
% 0 -2 5
%
% b= 3
% 1
% 3
%
% con soluzione vera:
%
% alpha= 1
% 1
% 1
%_________________________________________________________________________
%
% clear all; clc
% n=3; toll=1e-13;
% A=5*eye(n)-2*diag(ones(n-1,1),-1)-2*diag(ones(n-1,1),1)
% b=[3 1 3]'
%
% [x,iter] = Gauss(A,b,toll)
%
%_________________________________________________________________________
[L,U] = Lufact(A);
[y] = Forwsub(L,b);
[x] = Backsub(U,y);
P=eye(size(A));
[x,iter]=Raff_iter(A,b,L,U,P,x,toll);
FUNZIONE METODO DI GAUSS CON PIVOTAZIONE PARZIALE
%_________________________________________________________________________
%
% Function: Gausspv_r
% ____________________
%
% Chiamata: [x,iter] = Gausspv_r(A,b,toll);
%
%
% La function 'Gausspv_r' risolve un sistema lineare non singolare Ax = b
% mediante la fattorizzazione LU della matrice PA, con P matrice di
% permutazione (pivotazione parziale); esegue quindi il raffinamento
% iterativo della soluzione.
%
% Ax=b PA=LU => Ly=Pb
% Ux=y
%
%
% Parametri in ingresso:
% _____________________
%
% A matrice del sistema, di dimensione nxn;
%
% b vettore colonna di lunghezza n, contenente il termine noto del
% sistema;
%
% toll tolleranza per il test d'arresto del raffinamento iterativo;
%
% Parametri in uscita:
% ____________________
%
% x vettore colonna di lunghezza n, contenente la soluzione del
% sistema;
%
% iter numero di iterazioni effettuate nel raffinamento iterativo.
%
%
%
% La function richiama: Raff_iter che, pertanto, deve essere collocata
% nella stessa directory.
% Per la fattorizzazione della matrice,utilizza la function lu di Matlab.
%_________________________________________________________________________
%
% Esempio di utilizzo della function applicata al sistema lineare Ax=b
% dove
%
% A= 5 -2 0
% -2 5 -2
% 0 -2 5
%
% b= 3
% 1
% 3
%
% con soluzione esatta:
%
% alpha= 1
% 1
% 1
%_________________________________________________________________________
%
% clear all; clc
% n=3;
% A=5*eye(n)-2*diag(ones(n-1,1),-1)-2*diag(ones(n-1,1),1)
% b=[3 1 3]'
% toll=1.e-13;
%
% [x,iter] = Gausspv_r(A,b,toll)
%
% % Risultati
% x =
%
% 1
% 1
% 1
%
%
% iter =
%
% 0
% % Raffiter non ha attivato alcun raffinamento poichè la soluzione
% % determinata col metodo di Gauss è calcolata con la precisione
% % richiesta in Raffiter
%______________________________________________________________________
[L,U,P] = lu(A);
y=L\(P*b);
x=U\y;
x0=x
[x,iter]=Raff_iter(A,b,L,U,P,x0,toll);
FUNZIONE FATTORIZZAZIONE LU
function [L,U] = Lufact(A)
%______________________________________________________________
%
% Funzione: Lufact
% ___________________
%
% Chiamata: [L,U] = Lufact(A);
%
% La function 'Lufact' esegue la fattorizzazione LU della matrice
% A, senza pivotazione.
% E' utile, ad esempio, nel caso in cui A sia simmetrica e
% definita positiva.
%
% A=LU
%
%
% Parametri in ingresso:
% ______________________
%
% A matrice di dimensione nxn da fattorizzare;
%
% Parametri in uscita:
% ____________________
%
% L matrice triangolare inferiore di dimensione nxn;
% U matrice triangolare superiore di dimensione nxn;
%
%______________________________________________________________
a=A;
if abs(det(a))<10^-14
disp('Matrice A singolare')
else
[n,m]=size(a);
for k=1:m-1
%
% Azzeramento degli elementi a(i,k)
% for i=k+1:n
mik=-a(i,k)/a(k,k);
a(i,k)=-mik;
for j=k+1:n
a(i,j)=a(i,j)+mik*a(k,j);
end
end
end
%
% Costruzione delle matrici L, U
%
FUNZIONE RAFFINAMENTO ITERATIVO
function [x,iter] = Raff_iter(A,b,L,U,P,x0,toll)
%_________________________________________________________________________
%
% Function: Raff_iter
% ______________________
%
% Chiamata: [x,iter] = Raff_iter(A,b,L,U,P,x0,toll);
%
% La function 'Raff_iter' esegue il raffinamento iterativo della