From ed6268c665ae62515ecfa2cdedea4c36a1d41d94 Mon Sep 17 00:00:00 2001 From: Giovanni Di Grezia Date: Wed, 8 Oct 2014 15:11:46 +0200 Subject: [PATCH] Aggiunto gauss naif e implementato alcuni script come funzioni. --- complete_liner_equation_system_resolver.m | 61 ------------------- convert_matrix_to_triangular_matrix.m | 44 ------------- ...t_matrix_to_triangular_matrix_gauss_naif.m | 44 +++++++++++++ ...trix_to_triangular_matrix_gauss_pivoting.m | 51 ++++++++++++++++ float2bin.m => functions/float2bin.m | 0 ...linear_system_resolver_triangular_matrix.m | 23 +++++++ liner_system_resolver_triangular_matrix.m | 20 ------ calculate_eps.m => samples/calculate_eps.m | 0 .../calculate_minimum.m | 0 ...e_complete_liner_equation_system_resolve.m | 11 ++++ .../sample_sum_to_1e7.m | 0 .../sample_with_while.m | 0 test.m => samples/test.m | 0 .../triangolo_superiore_inferiore_matrice.m | 4 ++ 14 files changed, 133 insertions(+), 125 deletions(-) delete mode 100644 complete_liner_equation_system_resolver.m delete mode 100644 convert_matrix_to_triangular_matrix.m create mode 100644 functions/convert_matrix_to_triangular_matrix_gauss_naif.m create mode 100644 functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m rename float2bin.m => functions/float2bin.m (100%) create mode 100644 functions/linear_system_resolver_triangular_matrix.m delete mode 100644 liner_system_resolver_triangular_matrix.m rename calculate_eps.m => samples/calculate_eps.m (100%) rename calculate_minimum.m => samples/calculate_minimum.m (100%) create mode 100644 samples/sample_complete_liner_equation_system_resolve.m rename sample_sum_to_1e7.m => samples/sample_sum_to_1e7.m (100%) rename sample_with_while.m => samples/sample_with_while.m (100%) rename test.m => samples/test.m (100%) create mode 100644 samples/triangolo_superiore_inferiore_matrice.m diff --git a/complete_liner_equation_system_resolver.m b/complete_liner_equation_system_resolver.m deleted file mode 100644 index 7bcaa5e..0000000 --- a/complete_liner_equation_system_resolver.m +++ /dev/null @@ -1,61 +0,0 @@ -% completa risoluzione di un sistema lineare usando la riduzione -% in matrice triangolare superiore con gauss pivoting parziale -% e algoritmo di bottom up con sostituzione - -U=[0,20,30;0,5,3;0,56,34]; % matrice di input -b=[1;2;17]; %termini noti - - - - -n= length(b); -U= [U,b]; -U - - -for i=1:1:n-1 - x_max = max ( abs(U(i:n,i)) ); - if x_max == 0 - disp('errore matrice di input, det 0') - break - else - [x,y]= ind2sub(size(U), find (abs(U(i:n,i)) == x_max) ); - x= x + i -1; - y = i; - - if x~= i - U([i x],:) = U([x i],:); - - - end - - for j=i+1:1:n - - U(j,:) = U(j,:) + ( U(i,:) * (- U(j,i) / U(i,i) ) ) ; - - end - end -end - -if x_max ~= 0 - - b=U(:,n+1); - U=U(1:n,1:n); - - - x=[]; - n= length(b); - x(n) = b(n)/U(n,n); - - for i=n-1:-1:1 - somma = 0; - for k=i+1:n - somma=somma+U(i,k) * x(k); - end - - x(i) = (b(i) - somma)/ U(i,i); - end - disp ('La soluzione è ') - x -end - diff --git a/convert_matrix_to_triangular_matrix.m b/convert_matrix_to_triangular_matrix.m deleted file mode 100644 index 465b064..0000000 --- a/convert_matrix_to_triangular_matrix.m +++ /dev/null @@ -1,44 +0,0 @@ - -% questo algoritmo converte una matrice quadrata generica in -% triangolare superiore mediante metodo di gauss con pivot parziale - -U=[10,20,30;1,5,3;4,56,34]; % matrice di input -b=[1;2;17]; %termini noti -n= length(b); % lunghezza del vettore dei termini noti o numero equazioni - - -U= [U,b]; % uniamo la matrice con la colonna dei termini noti - -U %stampiamo la matrice -det(U(:,1:n)) % stampiamo il determinante della matrice - - -% convertiamo la matrice in una triangolare superiore -for i=1:1:n-1 - x_max = max ( abs(U(i:n,i)) ); - if x_max == 0 - disp('errore') - else - [x,y]= ind2sub(size(U), find (abs(U(i:n,i)) == x_max) ); - x= x + i -1; - y = i; - - if x~= i - U([i x],:) = U([x i],:); - - - end - - for j=i+1:1:n - - U(j,:) = U(j,:) + ( U(i,:) * (- U(j,i) / U(i,i) ) ) ; - - end - end -end -U % stampiamo la nuova matrice convertita - -det ( U(:,[1 : n]) ) % stampiamo il nuovo determinante - % non considerando i termini noti - % e verichiamo che è uguale al vecchio - % determinante diff --git a/functions/convert_matrix_to_triangular_matrix_gauss_naif.m b/functions/convert_matrix_to_triangular_matrix_gauss_naif.m new file mode 100644 index 0000000..ac8bb02 --- /dev/null +++ b/functions/convert_matrix_to_triangular_matrix_gauss_naif.m @@ -0,0 +1,44 @@ + +% questo algoritmo converte una matrice quadrata generica in +% triangolare superiore mediante metodo di gauss +% i moltiplicatori sono salvati nella matrice inferiore + +%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_naif (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 + + + 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 + for j=i+1:1:n + m= U(j,i) / U(i,i); + U(j,:) = U(j,:) + ( U(i,:) * (- m ) ) ; + U(j,i)=m; + end + + end + + b=U(:,n+1); + U=U(:,1:n); + end + +end diff --git a/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m new file mode 100644 index 0000000..c2a72a3 --- /dev/null +++ b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m @@ -0,0 +1,51 @@ + +% questo algoritmo converte una matrice quadrata generica in +% triangolare superiore mediante metodo di gauss con pivot parziale +% i moltiplicatori sono salvati nella matrice inferiore + +%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) + + + n= length(b); % lunghezza del vettore dei termini noti o numero equazioni + U= [U,b]; % uniamo la matrice con la colonna dei termini noti + + % convertiamo la matrice in una triangolare superiore + for i=1:1:n-1 + x_max = max ( abs(U(i:n,i)) ); + if x_max == 0 + break + else + [x,y]= ind2sub(size(U), find (abs(U(i:n,i)) == x_max) ); + x= x + i -1; + y = i; + + if x~= i + U([i x],:) = U([x i],:); + + + end + + for j=i+1:1:n + + m= U(j,i) / U(i,i); + U(j,:) = U(j,:) + ( U(i,:) * (- m ) ) ; + U(j,i)=m; + + end + end + end + + if x_max == 0 || U(n,n) == 0 + disp('errore') + b=[]; + U=[]; + else + b=U(:,n+1); + U=U(:,1:n); + end + + +end diff --git a/float2bin.m b/functions/float2bin.m similarity index 100% rename from float2bin.m rename to functions/float2bin.m diff --git a/functions/linear_system_resolver_triangular_matrix.m b/functions/linear_system_resolver_triangular_matrix.m new file mode 100644 index 0000000..65a8613 --- /dev/null +++ b/functions/linear_system_resolver_triangular_matrix.m @@ -0,0 +1,23 @@ +%risoluzione matrice triangolare superiore con algoritmo +% di sostituzione botton up (all'indietro) + +%example input +% U=[2,2,4;0,-7,-11;0,0,2]; +% b=[5;-8;-2]; + + +function[x] = linear_system_resolver_triangular_matrix(U,b) + + x=[]; + n= length(b); + x(n) = b(n)/U(n,n); + + for i=n-1:-1:1 + somma = 0; + for k=i+1:n + somma=somma+U(i,k) * x(k); + end + + x(i) = (b(i) - somma)/ U(i,i); + end +end \ No newline at end of file diff --git a/liner_system_resolver_triangular_matrix.m b/liner_system_resolver_triangular_matrix.m deleted file mode 100644 index 3e866a5..0000000 --- a/liner_system_resolver_triangular_matrix.m +++ /dev/null @@ -1,20 +0,0 @@ -%risoluzione matrice triangolare superiore con algoritmo -% di sostituzione botton up (all'indietro) - -U=[2,2,4;0,-7,-11;0,0,2]; -b=[5;-8;-2]; - -x=[]; -n= length(b); -x(n) = b(n)/U(n,n); - -for i=n-1:-1:1 - somma = 0; - for k=i+1:n - somma=somma+U(i,k) * x(k); - end - - x(i) = (b(i) - somma)/ U(i,i); -end -disp ('La soluzione è ') -x \ No newline at end of file diff --git a/calculate_eps.m b/samples/calculate_eps.m similarity index 100% rename from calculate_eps.m rename to samples/calculate_eps.m diff --git a/calculate_minimum.m b/samples/calculate_minimum.m similarity index 100% rename from calculate_minimum.m rename to samples/calculate_minimum.m diff --git a/samples/sample_complete_liner_equation_system_resolve.m b/samples/sample_complete_liner_equation_system_resolve.m new file mode 100644 index 0000000..2a3c93d --- /dev/null +++ b/samples/sample_complete_liner_equation_system_resolve.m @@ -0,0 +1,11 @@ +% completa risoluzione di un sistema lineare usando la riduzione +% 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 + diff --git a/sample_sum_to_1e7.m b/samples/sample_sum_to_1e7.m similarity index 100% rename from sample_sum_to_1e7.m rename to samples/sample_sum_to_1e7.m diff --git a/sample_with_while.m b/samples/sample_with_while.m similarity index 100% rename from sample_with_while.m rename to samples/sample_with_while.m diff --git a/test.m b/samples/test.m similarity index 100% rename from test.m rename to samples/test.m diff --git a/samples/triangolo_superiore_inferiore_matrice.m b/samples/triangolo_superiore_inferiore_matrice.m new file mode 100644 index 0000000..a5e3295 --- /dev/null +++ b/samples/triangolo_superiore_inferiore_matrice.m @@ -0,0 +1,4 @@ +U=[4,8,12,16;2,9,6,8;0,1,1,4;6,2,2,4]; + +triu(U)%superiore +tril(U)%inferiore \ No newline at end of file