clc; clear all; close all; % Sparse Matrix computation % Iniziamo considerando una matrice FULL come la seguente A = [ 0 0 0 5 0 2 0 0 1 3 0 0 0 0 4 0] % Al suo interno sono presenti numerosi valori nulli % che sarebbe comodo non doversi portare dietro per % velocizzare e snellire il proprio codice. % Matlab mette a disposizione la funzione SPARSE % che permette la conversione di una matrice 'densa' % in una 'sparsa' S = sparse(A) % In alternativa, per creare direttamente una matrice % sparsa è possibile fornire una coppia di vettori % contenenti gli indici I e J, ed un vettore di Valori % seguiti dalla dimensione N ed M della matrice % % sparse(i, j, val, N, M) % % Nell'esempio di prima S = sparse([3 2 3 4 1],[1 2 2 3 4],[1 2 3 4 5],4,4) % Per tornare indietro alla definizione FULL basterà % il comando A = full(S) %% Efficienza di calcolo clc; dim = 2*1e3; % Creo una matrice random SPARSA con una percentuale di elementi non-nulli A = sprand(dim, dim, 0.25); tic, A*A; toc Af = full(A); tic, Af*Af; toc %% Aumento il numero di zeri A = sprand(dim, dim, 0.005); Af = full(A); tic, A*A; toc tic, Af*Af; toc %% Calcolo degli autovalori-autovettori tic, [eigenval, eigenvec] = eigs(A); toc tic, [eigenval, eigenvec] = eig(Af); toc