Computational simulation of scientific phenomena and engineering problems often depends on solving linear systems with a large number of unknowns. This book gives insight into the construction of iterative methods for the solution of such systems and helps the reader to select the best solver for a given class of problems. The emphasis is on the main ideas and how they have led to efficient solvers such as CG, GMRES, and BI-CGSTAB. The author also explains the main concepts behind the construction of preconditioners. The reader is encouraged to gain experience by analysing numerous examples that illustrate how best to exploit the methods. The book also hints at many open problems and as such it will appeal to established researchers. There are many exercises that motivate the material and help students to understand the essential steps in the analysis and construction of algorithms.