Numerical Methods using Python

This set of tutorials are written at an introductory level for an engineering or physical sciences major. It is ideal for someone who has completed college level courses in linear algebra, calculus and differential equations. While prior experience with programming is certainly an advantage, it is not expected. At UC Davis, this is aimed at sophomore level Chemical and Biochemical Engineers and Materials Scientists: examples and the language used here might reflect this. At the same time, this is not meant to be an exhaustive course in Python or in numerical methods. The focus is on introducing the mathematical techniques and developing an insight for scientific computation, independent of programming language.

Interactive tutorials using the Jupyter framework are an engaging alternative to learning numerical methods from a static textbook. Yet I was unable to find a set of pedagogic and interactive code notebooks that covered the range of topics suitable for this level of instruction. I have hoped to fill this gap. These notebooks were developed and tested using the Anaconda distribution.

- 1.1 Data Types and Basic Operations
- 1.2 User-defined Functions
- 1.3 Logic and Repetition
- 1.4 Vectorization: Manipulating Scientific Data
- 1.5 Formatting and Storing Data
- Practice Problems

- 6.1 Numerical Root Finding
- 6.2 Nonlinear equations in one variable
- 6.3 More general root-finding
- Practice Problems

**License Requirements.** This repository is maintained on GitHub at hmanikantan/ECH60 and published under an MIT license. This means you are free to use, copy, modify and adapt any part of this module for non-commercial purposes. The license terms require you to give attribution and share your work under the same terms. I welcome feedback of any kind, including pull requests for corrections and additions.

**Acknowledgements.** My ECH 60 students beta tested these tutorials. Their learning styles, feedback and comments crafted the structure of this series. The world of Python is a fantastic testament to the power of open-source science and learning. I thank the countless selfless nameless strangers whose stackoverflow comments have informed me, and whose coding styles have inadvertently crept into these modules. And I thank the generous online notes of John Kitchin, Patrick Walls, Vivi Andasari, Charles Jekel, and Jeffrey Kantor whose works directly or indirectly inspired and influenced this project. I am happy to contribute to this collective knowledge base, free for anyone to adapt, build on, and make their own.