Scipy.sparse and problems
There are seven available sparse matrix types in 
scipy.sparse:- csc_matrix: Compressed Sparse Column format
- csr_matrix: Compressed Sparse Row format
- bsr_matrix: Block Sparse Row format
- lil_matrix: List of Lists format
- dok_matrix: Dictionary of Keys format
- coo_matrix: COOrdinate format (aka IJV, triplet format)
- dia_matrix: DIAgonal format
As indicated by the excellent
documentation, the
dok_matrix or lil_matrix formats are preferable to construct matrices as they
support basic slicing and indexing similar to a standard NumPy array.You will notice that the FD matrix we have constructed for the Poisson problem is
composed entirely of diagonal elements, as is often the case. If you were constructing a
similar matrix in MATLAB, you would use the
spdiags function, and
scipy.sparse has its own
equivalent.
However, all the scipy.sparse formats also have special methods
setdiag
which provide a more object-orientated method of doing the same thing.Scipy has a few different direct solvers for sparse matrices, given below:
factorized:
This computes the  decomposition of the input matrix , returning a Python
function that can be called to solve Note, 
scipy.sparse.linalg also has many iterative solvers, which we will investigate
further in the next chapter.Problems
Your goal for this problem is to construct the FD matrix  given above, using
scipy.sparse, and:Visualise Poisson Matrix
Visualise the matrix  using the Matplotlib 
spy plotSolve Poisson problem
Solve the Poisson problem using:
- , with boundary conditions and . The analytical solution is .
- , with boundary conditions and . The analytical solution is
Sparse versus dense: matrix multiplication
Vary the number of discretisation points  and calculate  using both sparse and
dense matrices. For each  calculate the time to calculate the matix
multiplicatiion using Python's
time.perf_counter,
and plot execution time versus  for dense and sparse matrix multiplication.
Comment on how the time varies with .Sparse versus dense: solving Poisson problem
- Vary the number of discretisation points and solve the Poisson problem with varying , and with using both the sparse and direct solvers. For each record the time taken for both the dense and sparse solvers, and record the numerical error . Generate plots of both error and time versus , and comment on how they vary with


