Many problems in applied mathematics, physics, chemistry, and engineering give rise to large sparse linear systems of equations. Standard solution methods for small systems of equations, such as Gaussian elimination and Cholesky factorization, cannot be used, because these methods require too much arithmetic work and computer storage to be practical for large problems. Large linear systems of equations are typically solved by iterative methods. This course provides up-to-date coverage of iterative methods for solving large sparse linear systems. The course presents the theory behind numerous state-of-the-art iterative methods, including the Conjugate Gradient, Generalized Minimal Residual, Bi-Conjugate Gradient and Quasi-Minimal Residual methods. Orthogonal and oblique projections are emphasized, because many of the iterative methods discussed can be understood in terms of projections. Practical issues, such as storage schemes for sparse matrices, the discretization of partial differential equations and parallel implementation, are also addressed. MATLAB implementations of iterative methods provides valuable hands-on experience. We will discuss applications of the techniques discussed to the solution of large systems of equations that arise in data science.