diff --git a/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m index 8c52780..89791b2 100644 --- a/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m +++ b/functions/convert_matrix_to_triangular_matrix_gauss_pivoting.m @@ -6,7 +6,7 @@ %U=[10,20,30;1,5,3;4,56,34]; matrice di input %b=[1;2;17]; termini noti -function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) +function [U,b,pivotp] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) n= length(b); % lunghezza del vettore dei termini noti o numero equazioni @@ -63,6 +63,13 @@ function [U,b,pivot] = convert_matrix_to_triangular_matrix_gauss_pivoting (U,b) end b=U(:,n+1); U=U(:,1:n); + + pivotp=zeros(n); + theone= diag(diag(ones(n))); + for i=1:n + move = pivot(i); + pivotp(i,:)= theone(move,:); + end end diff --git a/functions/jacobi_ordered_csr.m b/functions/jacobi_ordered_csr.m new file mode 100644 index 0000000..eee75dc --- /dev/null +++ b/functions/jacobi_ordered_csr.m @@ -0,0 +1,55 @@ + +% jacobi algorithm + +%input +%U=ordered csr +%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_ordered_csr (elementi,colonne,indice_riga,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; + + start = indice_riga(i); + stop = start; + while colonne(stop)~= i + stop = stop +1; + end + for k=start:(stop -1) + partial_sum = partial_sum + (elementi(k) * x0(colonne(k))); + end + for k=(stop +1):(indice_riga(i+1) - 1) + partial_sum2 = partial_sum2 + (elementi(k) * x0(colonne(k))); + end + x1(i) = (b(i) - partial_sum - partial_sum2)/ elementi(stop) ; + 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 diff --git a/functions/matrix_to_ordered_csr.m b/functions/matrix_to_ordered_csr.m new file mode 100644 index 0000000..6772218 --- /dev/null +++ b/functions/matrix_to_ordered_csr.m @@ -0,0 +1,27 @@ +function [array_elementi,array_colonna, array_inizio_riga ] = matrix_to_ordered_csr( A ) +%conversione matrice in formato ordinato csr usando 3 array + + +sizem = size(A); + +nelemento = 1; + +array_elementi=[]; +array_colonna=[]; +array_inizio_riga=[]; + + +for j=1:sizem(1) + array_inizio_riga(j)= nelemento; + for i=1:sizem(2) + if A(j,i)~= 0 + array_elementi( nelemento)= A(j,i); + array_colonna ( nelemento) = i; + nelemento=nelemento + 1; + end + end +end + array_inizio_riga(j +1 )= nelemento; + +end + diff --git a/samples/applicazione_algoritmi_time.m b/samples/applicazione_algoritmi_time.m new file mode 100644 index 0000000..76ff346 --- /dev/null +++ b/samples/applicazione_algoritmi_time.m @@ -0,0 +1,9 @@ +sostituzione allindietro n^2 +gauss naif e pivot n^3 +kramer fattoriale +thomas lineare + +diag dominante e simemtrica positiva - gauss naif stabile + +diag dominante- jacobi e gauss seidel convergenti +simmetrica positiva - gauss seidel convergente \ No newline at end of file diff --git a/samples/floating_rule.m b/samples/floating_rule.m new file mode 100644 index 0000000..04b6d55 --- /dev/null +++ b/samples/floating_rule.m @@ -0,0 +1,10 @@ +realmin 2.23 e-308 min normalizzato +realmax 1.79 e308 max normalizzato +eps 2.2 e-16 + +format long e + +minimo numero in matlab 4.9e-324 - non normalizzato +se pių piccolo č 0 + +se due numeri distano per pių di e-16 in pratica non vengono sentiti nella somma diff --git a/samples/general_commands.m b/samples/general_commands.m new file mode 100644 index 0000000..e877abd --- /dev/null +++ b/samples/general_commands.m @@ -0,0 +1,15 @@ +diag (diag(...)) (estrae una matrice diagonale) +tril(...) (estrae il triangolo inferiore) +inv(...) (inversa di una matrice) +max (...) (massimo di un vettore) +abs(...) (valore assoluto di un vettore componenteper componente) +eig(...) (autovalori di una matrice) +cond(...) (indice di condizionamento di una matri +chol(...) (fattorizzazione di Cholesky di una matrice +lu(...) (fattorizzazione lu di una matrice) +norm (norma di un vettore o di una matrice) +' (trasposta di una matrice) +. (operazioni componente per componente) +help (fornisce informazioni sui comandi in linea di matlab +clear all (cancella tutte le variabili) +clc \ No newline at end of file