This book covers numerical methods for partial differential equations: discretization methods such as finite difference, finite volume and finite element methods; solution methods for linear and nonlinear systems of equations and grid generation. The book takes account of both the theory and implementation, providing simultaneously both a rigorous and an inductive presentation of the technical details. It contains modern topics such as adaptive methods, multilevel methods and methods for convection-dominated problems. Detailed illustrations and extensive exercises are included. It will provide mathematics students with an introduction to the theory and methods, guiding them in their selection of methods and helping them to understand and pursue finite element programming. For engineering and physics students it will provide a general framework for formulation and analysis of methods providing a broader perspective to specific applications.