This gentle introduction to scientific computing aims to convey the basic ideas, principles and techniques of computational science to undergraduates in mathematics, science and engineering. The required background is a first course in calculus, the basics of linear algebra, and familiarity with elementary programming. The real strength of the text is its adroit mix of analytical and numerical, theoretical and practical. It is imbued throughout with uncommon good sense.

What the book is not: a text in programming, a guide to modeling, a how-to manual for using canned software. What it is: an invitation to students to apply their mathematical skills to computing problems in a variety of contexts. Programming, modeling and the use of commercial software are all addressed, but they don’t intrude on the overall theme.

The authors begin with a relatively simple problem: a model that requires computing an integral numerically, using a combination of analytical techniques and variations of the trapezoidal rule. This establishes a pattern we see throughout: set up the model with care; understand what needs to be computed, what technique is appropriate, and what the relative error is likely to be; carry out the computation, determine if the answer makes sense, and interpret the solution in scientific terms.

This introductory piece is followed by two chapters on numerical solutions of ordinary differential equations that emphasize numerical stability and accuracy. Both chapters are based on case studies (rabbit cultivation and predator-prey). They begin with model building, and then go on to selection of numerical methods, computation of solutions and alternative methods. Following this are two chapters that explore methods for solving nonlinear algebraic equations and computing least squares solutions.

The next three chapters are quite distinctive. The first is about making choices about commercially available scientific software (including C, C++, Java, Python, Matlab and others). The authors talk about the characteristics of each language or program, the advantages and disadvantages of each, and then provide and compare code for two different algorithms in several different languages.

Two long chapters on diffusion processes follow. The first one includes: developing models for diffusion, deriving the diffusion equations, describing relevant numerical methods, and talking about how one can verify a computer implementation. The second looks at the diffusion equation again from slightly different perspectives. What are the important characteristics of the solution? Does the solution meet sense physically? How might one solve the diffusion equation analytically?

This is a top-notch book on scientific computing written with clarity, rigor where it matters, and a good sense of what students need to learn. It is among the best books in this area that I have seen.

Bill Satzer (wjsatzer@mmm.com) is a senior intellectual property scientist at 3M Company, having previously been a lab manager at 3M for composites and electromagnetic materials. His training is in dynamical systems and particularly celestial mechanics; his current interests are broadly in applied mathematics and the teaching of mathematics.