Numerical Methods in Engineering with Python 3
Python is a general purpose programming language supporting object-oriented and structured programming. It is free, simple to use and implement, and well structured, and equally useful for non-numerical as for numerical applications. For these reasons it is sometimes chosen as a language for a first programming course. It is clear that in such case, a first course on numerical methods prefers using Python as a tool for implementing and testing the algorithms over an alternative such as MATLAB, or scilab, the open source MATLAB clone.
The present book is written in line with the previous observations. It is assumed that the student/reader is familiar with some programming language that is preferably, but not necessarily, Python. For those who do not know Python yet, a short introduction is given, and it as assumed that their programming skills suffice to learn the details along the way. Thus the book should not be considered as a course on Python. Only part of the language is used. For example, the only object that is used is an array. On the other hand, modules with many predefined functionality beyond the Python core such as numpy and matplotlib.pyplot are essential. Source code for the algorithms in the book are available for download at the CUP website.
After the introductory chapter on Python, the book follows the classical structure and items of a first numerical analysis course: Solution of linear systems, interpolation and curve fitting, roots of equations, numerical differentiation and integration, (ordinary) differential equations (initial value and boundary value problems), (symmetric) eigenvalue problems and (elementary) optimization. It is a true hands-on course where formal proofs are almost always omitted or just replaced by some motivating examples. There is an ample number of exercises, mostly numerical (i.e., not asking for a proof or a generalization or the derivation of a formula) and they are often taken from engineering applications.
Some peculiarities that struck me are the following.
- There is no list of references. With proofs and more formal aspects missing, some students may be interested in further reading or a more advanced approach. They are left on their own, although these references hould be readily available in any library or even on the Internet.
- There is no treatment of the mechanism of rounding errors in floating point computations and neither is error analysis or the numerical stability of a method formally included (except for stability and stiffness of ODE solvers). Remarks on rounding errors, and hence on stability, are downgraded to remarks sometimes with computing in double precision as a possible cure.
- Polynomial interpolation is included in extension, even rational and spline interpolation are discussed, but not the choice of the interpolation points like adaptive interpolation or the use of Chebyshev points for a finite interval. A simple idea that may influence the error and the convergence considerably.
- Speed of convergence for iterative methods is mentioned but not formally discussed.
- Multivariate optimization is very concise as compared to the extensive discussion of less important issues. Discussion includes only a method of M. Powell and the simplex method (not to be confused with the simplex method of linear programming which is not included).
So we may conclude that this is a practical introduction, pushing the theory as far in the background as possible. There is a lot of material, probably far too much for a single course. Some sections that could be deleted for a shorter course are marked with an asterisk. For those who are familiar with the second edition, the changes (apart from the necessary adaptation of the code to Python 3.0) include: an introduction to matplotlib.pyplot in chapter 1; an interpolating polynomial plot routine is added to the interpolation chapter; in the chapter on differential equations, the Taylor series method is dropped in favor of Euler's method; an improved implementation is given for the Jacobi method for eigenvalues as well as for the Runge-Kutta method for differential equations; and some new problems are added.