# Sparse Matrices

This M-file considers full and sparse matrices It looks at their construction, manipulation and visualization.

A sparse matrix is a matrix where the majority of the entries are zero, in Matlab a special type of matrix is used which "squeezes" out the zero entries (it saves memory).

This is a random matrix:

N=5; M=rand(N); M2=M*M; % This is its matrix square. Mp2=M.*M; % This is its point-wise square.

This is an identity matrix and a sparse identity matrix:

myI=eye(N) myspI=speye(N)

myI = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 myspI = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1

I can check if a matrix is sparse like this:

issparse(myI) issparse(myspI)

ans = logical 0 ans = logical 1

I can force a matrix to be sparse:

mysamp=3*myI; mysamp(2,3)=-2; mysamp=sparse(mysamp);

This looks dumb but can be quite effective especially if we want to use the sparse matrix many times later.

This is an example of a sparse matrix build in action. It builds a second order differentiation matrix.

Define a spatial grid:

xmin = 0; xmax = 50; N = 2^7; x = linspace(xmin,xmax,N+1); dx=x(2)-x(1); dx2=dx*dx;

Now build a vector of ones,

e=ones(N+1,1);

Next use spdiags to drop the correct vectors into the correct diagonals.

```
Dxx = spdiags([e -2*e e], -1:1, N+1, N+1);
% finally scale
Dxx=(1/dx2)*Dxx;
```

This is how you visualize a matrix structure. Filled entries are in blue while empty ones are white.

figure(1) clf spy(Dxx);

Sparsity can be very helpful when carrying out matrix solves since it offers immense speed up especially for very large matrices.

```
Dxxf=full(Dxx); % This converts Dxx to a full matrix.
myrhs=sin(8*pi*x/(xmax-xmin))';
tic,mysols=Dxx\myrhs; toc
tic,mysolsf=Dxxf\myrhs; toc
max(abs(mysols-mysolsf))
```

Elapsed time is 0.000244 seconds. Elapsed time is 0.028909 seconds. ans = 3.6027e-14