Fixato bugs su gauss, aggiunto check per numeri molto vicini a 0 su gauss, aggiunto esercizi

This commit is contained in:
2014-10-22 15:18:59 +02:00
parent 6b30e9e8cb
commit a7dc38ea38
7 changed files with 194 additions and 16 deletions

View File

@@ -10,25 +10,18 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_naif (U,b)
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
norma = norm(U,inf);
U= [U,b]; % uniamo la matrice con la colonna dei termini noti
ok=1;
%check 0 sulla diagonale
for i=1:n
if U(i,i) == 0
ok=0;
break
end
end
if ok == 0
disp('impossibile convertire')
b=[];
U=[];
else
% convertiamo la matrice in una triangolare superiore
for i=1:1:n-1
if abs(U(i,i)) <= eps * norma
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
end
if U(i,i) == 0
ok=0;
break
@@ -42,15 +35,16 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_naif (U,b)
end
if ok == 0 || U(n,n)== 0
if ok == 0 || U(n,n) == 0
disp('impossibile convertire')
b=[];
U=[];
else
if abs(U(n,n)) <= eps * norma
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
end
b=U(:,n+1);
U=U(:,1:n);
end
end
end

View File

@@ -10,6 +10,7 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
n= length(b); % lunghezza del vettore dei termini noti o numero equazioni
norma = norm(U,inf);
U= [U,b]; % uniamo la matrice con la colonna dei termini noti
pivot = 1:1:n;
pivot = pivot';
@@ -17,9 +18,15 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
% convertiamo la matrice in una triangolare superiore
for i=1:1:n-1
x_max = max ( abs(U(i:n,i)) );
if x_max <= eps * norma
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
end
if x_max == 0
break
else
%trovo gli indici di tutti i numeri uguali a max
[x,y]= ind2sub(size(U), find (abs(U(i:n,i)) == x_max) );
x=x(1);%prendo solo il primo indice
@@ -51,6 +58,9 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b)
U=[];
pivot = [];
else
if abs(U(n,n)) <= eps * norma
disp('WARNING: Elemento prossimo allo zero sulla diagonale')
end
b=U(:,n+1);
U=U(:,1:n);
end