diff --git a/functions/convert_matrix_to_triangular_matrix_gauss_naif.m b/functions/convert_matrix_to_triangular_matrix_gauss_naif.m index ac8bb02..1940302 100644 --- a/functions/convert_matrix_to_triangular_matrix_gauss_naif.m +++ b/functions/convert_matrix_to_triangular_matrix_gauss_naif.m @@ -29,16 +29,28 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_naif (U,b) else % convertiamo la matrice in una triangolare superiore for i=1:1:n-1 + if U(i,i) == 0 + ok=0; + break + + end for j=i+1:1:n m= U(j,i) / U(i,i); - U(j,:) = U(j,:) + ( U(i,:) * (- m ) ) ; + U(j,i+1:n+1) = U(j,i+1:n+1) + ( U(i,i+1:n+1) * (- m ) ) ; U(j,i)=m; end end - b=U(:,n+1); - U=U(:,1:n); + if ok == 0 || U(n,n)== 0 + disp('impossibile convertire') + b=[]; + U=[]; + else + + b=U(:,n+1); + U=U(:,1:n); + end end end diff --git a/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m index c2a72a3..986dcfb 100644 --- a/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m +++ b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m @@ -6,11 +6,13 @@ %U=[10,20,30;1,5,3;4,56,34]; matrice di input %b=[1;2;17]; termini noti -function [U,b] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) +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 U= [U,b]; % uniamo la matrice con la colonna dei termini noti + pivot = 1:1:n; + pivot = pivot'; % convertiamo la matrice in una triangolare superiore for i=1:1:n-1 @@ -18,12 +20,17 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) 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 + y=y(1);%prendo solo il primo indice x= x + i -1; y = i; if x~= i U([i x],:) = U([x i],:); + pivot([i x]) = pivot([x i]); + end @@ -31,7 +38,7 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) for j=i+1:1:n m= U(j,i) / U(i,i); - U(j,:) = U(j,:) + ( U(i,:) * (- m ) ) ; + U(j,i+1:n+1) = U(j,i+1:n+1) + ( U(i,i+1:n+1) * (- m ) ) ; U(j,i)=m; end @@ -42,6 +49,7 @@ function [U,b] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) disp('errore') b=[]; U=[]; + pivot = []; else b=U(:,n+1); U=U(:,1:n); diff --git a/samples/sample_complete_liner_equation_system_resolve.m b/samples/sample_complete_liner_equation_system_resolve.m index 2a3c93d..0372e5c 100644 --- a/samples/sample_complete_liner_equation_system_resolve.m +++ b/samples/sample_complete_liner_equation_system_resolve.m @@ -2,10 +2,10 @@ % in matrice triangolare superiore con gauss pivoting parziale % e algoritmo di bottom up con sostituzione -U=[4,8,12,16;2,9,6,8;0,1,1,4;6,2,2,4]; % matrice di input -b=[1;-1;2;1]; %termini noti -[x,y] = convert_matrix_to_triangular_matrix_gauss_pivoting(U,b); -[x1] = linear_system_resolver_triangular_matrix(x,y); -x1 +U=[2,4,-2;1,-1,5;4,1,-2] % matrice di input +b=[6;-3;-10] %termini noti + +[x,y,z] = convert_matrix_to_triangular_matrix_gauss_pivoting(U,b) +[x1] = linear_system_resolver_triangular_matrix(x,y)