This book develops the basic mathematical theory of the finite element method, the most widely used technique for engineering design and analysis. This expanded second edition contains new chapters on additive Schwarz preconditioners and adaptive meshes. New exercises have also been added throughout. The book will be useful to mathematicians as well as engineers and physical scientists. It can be used for a course that provides an introduction to basic functional analysis, approximation theory, and numerical analysis, while building upon and applying basic techniques of real variable theory. Different course paths can be chosen, allowing the book to be used for courses designed for students with different interests.