Python is widely used in computational science, numerical methods, and scientific programming courses and in computer science. There are many good textbooks available for such courses, but none quite like this one.
No programming experience and no previous knowledge of numerical methods is assumed, but this book should be of interest even if you have such knowledge. It is neither a computer programming book nor a numerical methods/analysis book. The book uses programming to impart a deeper understanding of the pragmatic meaning of some of the mathematics most frequently used in engineering and the sciences.
The first two chapters, which should be easily accessible to college freshmen, provide a solid introduction to a minimum but sufficient subset of Python, and, notably, an introduction to the craft of programming. Python 2.7 is used, but all of the code can be converted to Python 3 very easily. Basic data types, control structures, and list comprehensions are covered and a few items from the numpy, matplotlib, and sympy packages are used. Implementing algorithms as functions is emphasized and the importance of vectorization, unit testing, and the verification of implementations is stressed. An appendix describes in detail how to obtain, install, and use appropriate Python and support software and includes a very brief description of using IPython notebooks.
Chapters on computing definite integrals, solving ordinary differential equations, and solving nonlinear algebraic equations follow. The emphasis is on the implementation of numerical algorithms. The implementations shown are well commented and clearly written, and the plotting capabilities of Python are used to excellent effect. Each chapter includes appropriate exercises.
A reasonable knowledge of calculus is required to follow most of the chapter on computing integrals, the first section of the chapter on ordinary differential equations, and most of the chapter on non-linear algebraic equations. Most of the material on ordinary and partial differential equations and on systems of algebraic equations requires more mathematical background.
The book is very well written, but ever so slightly marred by a number of awkward phrases, none of which inhibit readability. The hardcover version is well bound and nicely printed. It is also available as an open-access book.
This very good introductory textbook could be used in a variety of courses. A motivated reader with knowledge of calculus could easily use it for self-study. I highly recommend it.