Cheney and Kincaid’s Numerical Mathematics and Computing, Sixth Edition, is an excellent textbook for those students who are minimally comfortable with Calculus, basic linear algebra, and a computer programming language. The authors provide a very good review of linear algebra concepts in the appendix. For those who have forgotten their linear algebra, the appendix is a terrific reference. This text can certainly be used for self-study. For an instructor of a course on numerical analysis this is an ideal book to use since the material is self-contained.
There are ample problems at the end of each section, allowing for an instructor to focus more on teaching the course than on developing meaningful exercises for the students. The exercises provided are of both the theoretical and the computational type. They are aimed to train the student to recognize in advance the advantages/disadvantages of a given numerical scheme as well as to verify the correctness of the output of a given numerical scheme. Many of the exercises are accompanied with answers (not solutions) towards the end of the book.
The text’s exposition is very friendly to a wide variety of learning styles. There is an abundance of numerical examples and supporting pseudocode for those who learn by example. Each section is replete with problems of all levels of difficulty for those who like to simply tackle problems with only a cursory reading of the section. Finally, all concepts are explained in a rigorous manner with theorems and proofs given as necessary.
The following is a chapter by chapter breakdown, interlaced with commentary as necessary:
Chapter 1 is a basic introduction chapter reviewing some fundamental concepts that are pertinent throughout the text.
Chapter 2 discusses the floating-point representation present in virtually every programming language. The examples and exercises provided in this chapter provide a sobering reminder that ((a + (b – a)) – b) need not always equal zero. Thus, ye be warned that if ye wishes to create a round(x, p) function that takes a (floating-point) number x and rounds it to p decimal places, then round(1.05*.7 , 2) = .73, even though 1.05*.7 = .735. While many programming languages offer infinite precision libraries, they come at a significant computational cost, in terms of both speed and memory required. Indeed, the name “infinite precision” is misleading since when performing calculations in infinite precision, one often must state the level of precision to which the calculations must be performed. As such, it is still finite precision and with enough calculations, the error will grow. Thus, students should not dismiss this section at all. In fact, it is the reviewer’s opinion that this is one of the most important sections of the text!
Chapter 3 provides a description of several standard root finding algorithms. Each method has its advantages and disadvantages and these are thoroughly discussed and supported with many examples and chapter exercises.
Chapters 4, 5, and 6 focus on standard numerical differentiation and integration techniques. For these chapters it is helpful that students remember their Calculus, since the world of analytic solutions is markedly different from the world of numerical solutions. While a good Calculus student may be comfortable with “the limit as h tends to zero of (f(x+h) – f(x))/h”, he/she will have to learn what such a statement means in a computing sense. The authors show that such a passage to the limit is not as trivial as it may initially seem.
Chapters 7 and 8 delve into solving systems of linear equations. In these chapters, concepts from the earlier chapters come into play, for example when attempting to invert large sparse matrices.
Chapters 9 and 12 discuss curve fitting and data smoothing techniques. Chapter 9 focuses on spline functions and Chapter 12 focuses on data smoothing and method of least squares.
Chapters 10, 11, and 14 explain the standard methods used to numerical solve ordinary differential equations. Chapter 10 is about ordinary differential equations, with an emphasis on the use of Taylor Series and the Runge-Kutta scheme. Chapter 11 deals with systems of ordinary differential equations, while Chapter 14 discusses boundary value problems. Chapter 13 is a short excursion into the Monte Carlo method with connecting remarks to numerical integration.
Chapter 15 wades into partial differential equations. While this is a fairly large topic, the discussion in the text is short and to the point. Several common methods, including Crank-Nicolson, Lax-Wendroff, and Gauss-Seidel, are explained with accompanying pseudocode. Chapter 16 is about Minimization of Functions, and Chapter 17 is about Linear Programming techniques.
The last few chapters in this text are meant to be surface-scratching overviews only of very deep and well-researched topics. A student wishing to take more advanced courses on the topics covered in Chapters 13, 15, 16, and 17, can certainly use this text as strong introductory preparation. Certainly the first 11 chapters would be sufficient for a standard one-semester course.
All in all, Numerical Mathematics and Computing Sixth Edition by Cheney & Kincaid is a very well written and very well thought out text.
Manan Shah splits his time as a mathematician in industry during the day and as an academic researcher in the evenings.