Data Programming Course  Documentation

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