These are just ideas -- please see me if there's something else you'd like to work on, or if you'd like to discuss any of these. Let me know by next Monday 13 May what your project will be and who will be working on it.

Each project must turn in a one-page progress report by Wednesday 22 May, and a final report of 10-15 pages by Wednesday 12 June. Each project will give a 20-minute presentation during the last week of class (signup sheet). We can also arrange for experimental projects to present a demo in the lab.

Experimental and application projects can be solo or a group of two students. Survey projects must be solo.

__ Algorithm experiments.__
For an algorithm experiment, you will implement and compare
different approaches to a sparse algorithm. Here are a couple of
possibilities; email me if you're interested in something not on the list.

- Use sparse matrices to implement some of the graph algorithms from Jon Berry's challenge list, first in Matlab and then using KDT and/or Combinatorial BLAS.
- Implement and experiment with Kelner's recent cycle-projection algorithm for solving linear systems from Laplacian matrices. (A simple, combinatorial algorithm for solving SDD systems in nearly-linear time)
- Devise and experiment with hill-climbing strategies that take a specified sparse Cholesky elimination order and try to improve it.
- Write a levels-of-fill incomplete factorization preconditioner for Matlab, and experiment with using it in an iterative method.

__ Application experiments.__
An application experiment is any problem that comes from
computational science and has a challenging linear system in it;
you will experiment with methods for the sparse computation.
The application should be one you are already familiar with,
from your research or another class or a collaboration.
Talk to me if you'd like to do this.

__ Survey projects.__
For a survey project, you will read a few research papers
on a sparse matrix topic not covered in class.
Here are some possibilites.
Some of them come with a link to a paper,
and I can give you references for the others if you'd like.
In each case you will end up reading a few related papers
for background and comparison as well.
Email me if you're interested in something not on the list.

- Nearly-linear-time algorithms for solving linear systems using support-theory preconditioning. (See CS 219 reference page.)
- Quantum computing for solving linear equation systems. (paper: Harrow, Hassidim, and Lloyd)
- Symmetric indefinite factorization: A = L*D*L' where D is block diagonal with 1-by-1 and 2-by-2 blocks.
- Sparse QR factorization and least squares problems.
- The real details of UMFpack, Tim Davis's unsymmetric multifrontal method.
- Mesh partitioning algorithms: geometric, spectral, multilevel.
- Parallel multifrontal algorithms, e.g. MUMPS.
- Graph coloring for sparse Jacobian estimation.
- Ordering methods for preconditioned conjugate gradient methods applied to unstructured grid problems. (paper: D'Azevedo, Forsyth, and Tang)
- Ordering, anisotropy, and factored sparse approximate inverses. (paper: Bridson and Tang)
- Preconditioning symmetric indefinite systems using weighted bipartite matching. (paper: Hagemann and Schenk, paper: Duff and Koster)
- Maximum-weight basis preconditioners. (paper: Boman, Chen, Hendrickson, and Toledo)
- Preconditioning symmetric indefinite systems from optimization problems. (paper: Haws and Meyer)