Numerical analysis--the design and analysis of algorithms that provide approximate but accurate solutions to numerical problems--is at the heart of scientific computing. Scott’s rigorous textbook surveys the field using first principles. His book is more thorough and demanding than the more popular alternatives [1,2] that have been in use for decades.
Given its theorem-proving bent, the book might not be suitable for junior computer science students in the way that the two aforementioned classics are. Its focus on formal proofs, however, makes this book suitable for advanced undergraduate and graduate courses on numerical computing. Since it concentrates on laying the mathematical foundation of computational science, it does not replace more pragmatic algorithmic catalogs . Even so, its depth is a good complement to more shallow code-snippet catalogs, and it provides a nice overview of the theoretical developments underlying the algorithms typically described in those handbooks.
The book is organized around 19 relatively short chapters (17 if we omit the introduction and the final two-page “chapter” on notation). Readers can expect to find every topic in conventional numerical analysis--from iterative methods for solving nonlinear equations and a myriad of techniques for solving linear systems of equations to techniques that allow for the solution of a nonlinear system as a sequence of linear systems, including those that approximate solutions at a potentially lower computational cost than more accurate direct methods. Readers will also find chapters devoted to the approximation of general functions by simple classes of functions (interpolation) and numerical quadrature (integration). There are chapters on eigenvalues, including a discussion of the power method (for finding the largest eigenvalue) and inverse iteration (for discovering any eigenvalue), as well as a reference to singular values as the natural generalization of eigenvalues. Additional chapters focus on discretization methods for solving ordinary differential equations. A final chapter provides an eagle’s-eye overview of the effects of floating-point arithmetic on the accuracy of numerical algorithms.
The author’s writing style is always concise. Only some of the biographical remarks about the mathematicians and scientists mentioned in the text are distracting; however, they always exist as footnotes and sketch the person’s genealogical and academic relationships to other notable mathematicians. Often these notes just list the person’s mentors and PhD students, affiliations, and/or major awards. Each chapter includes suggestions for further reading and (mostly theorem-proving) exercises, with solutions to some of them. Relatively few code snippets are provided (for MATLAB and Octave); this is surprising for a numerical computing textbook.
In summary, Scott has written a well-conceived textbook for inquisitive readers with a predilection for mathematics.