/NumericalMethodsOld

Contains Jupyter notebooks and other materials prepared for the course Numerical Methods offered at TIFR Hyderabad (https://moldis-group.github.io/teaching.html)

Primary LanguageJupyter NotebookMIT LicenseMIT

NumericalMethods

License: MIT Python3

This repository contains Jupyter notebooks, images, PDFs, etc. prepared for the course Numerical Methods offered for Ph. D. students at TIFR Hyderabad (https://moldis-group.github.io/teaching.html)

How to access this material?

First of all, this material is made available on the GitHub to encourage others to access it freely, maintain a local copy, and may be even contribute corrections or new material. So, you can follow one of the three steps listed below freely, i.e., without having to commit to any responsibilities.

  1. If you think that you will ever use (or reuse) this material (or a part of it) for any purpose, you should sign-in to github by creating an account (maybe google account works for this too), and then click the 'Fork' button on the top-right. Then, you will get a local copy to play with. You will also be notified when any changes is made to this master version. You will be able to merge the new changes to your own copy of this repository. Others can also pull the changes you make in your version.

  2. To download the content to your computer, type the following in a terminal

git clone https://github.com/raghurama123/NumericalMethods.git

or click the 'code' botton above and then click 'Download zip'

If you also Fork the material, then replace 'raghurama123' in the above line with your 'username'

  1. If you want to try the material in a web browser, i.e., to test the code or make small changes and run the code, you can access this repository at the interactive platform Binder by clicking the link: https://mybinder.org/v2/gh/raghurama123/NumericalMethods/HEAD

If you also Fork the material, then replace 'raghurama123' in the above line with your 'username'

What is Github and how to use it?

If you want to learn about Github, you can try these tutorials:

  1. Git Tutorial
  2. Learn Git
  3. Version control and Github

Syllabus:

  1. Python: Writing/running codes, Jupyter notebooks, modules

  2. Linear Equations: Direct methods: Cramer's rule, row-reduction, forward/backward substitution, Gaussian elimination; LU factorization: Cholesky's method, scipy.linalg.solve, scipy.linalg.cholesky, scipy.linalg.cho_factor, scipy.linalg.cho_solve

  3. Data Modeling: Approximations: least squares fitting, numpy.polyval, numpy.polyfit; Interpolation: polynomial interpolation, scipy.interpolate.interp1d

  4. Root finding: The problem, fixed-point iteration, bisection method, Newton-Raphson method (1-D and n-D), Jacobian matrix, pseudo-inverse, quasi-Newton method (1-D: secant method, n-D: Broyden), scipy.optimize

  5. Optimization/Minimization: 1-D problems, n-D problems, scipy.optimize.minimize(method=’L-BFGS-B’), Simplex method, scipy.optimize.minimize(method=’Nelder-Mead’), How to select an optimization method?

  6. Numerical Differentiation: Finite difference; Error analysis

  7. Numerical Integration: Newton-Cotes formulae, Romberg/Gaussian integration, Multiple integrals

  8. Initial Value Problems: Euler/Runge-Kutta methods; Stability and Stiffness

  9. Boundary Value Problems: Shooting Method

  10. Symmetric Matrix Eigenvalue Problems: Jacobi rotations, Power/inverse power method, Tridiagonal form

  11. Application to Chemical Physics: Molecular thermodynamics (Ideal gas, harmonic oscillator, rigid rotor partition functions), Equation of states, Schroedinger equation of Hydrogen molecule cation, Hartree-Fock for He atom, Linear variational problems in Quantum mechanics (1D potentials, Tunneling problems), Potential energy surface fitting, Time-dependent Schroedinger equation.

  12. Optional Topics: Krylov Subspace Techniques, Lanczos iteration, Iterative linear solvers, Non-linear regression, Matrices: Rank and condition numbers

Suggested References:

  1. Numerical Methods in Engineering with Python 3, Jaan Kiusalaas, Cambridge University Press (2013).
  2. A Student’s Guide to Python for Physical Modeling, Jesse M. Kinder, Philip Nelson, Princeton University Press (2018).
  3. Numerical Methods, W. Boehm, H. Prautzsch, Universities Press (2000).
  4. Introduction to Numerical Computation, Lars Elden, Linde Wittmeyer-Koch, Hans Bruun Nielsen, Overseas Press (2006).
  5. Elementary Numerical Analysis: An Algorithmic Approach, Samuel D. Conte, Carl de Boor, Edition 3, McGraw-Hill (1981).
  6. Introductory Numerical Analysis, Anthony J. Pettofrezzo, Dover (2006).
  7. Elementary Theory and Application of Numerical Analysis, David G. Moursund, Charles S. Duris, Dover (1988).
  8. A First Course in Computational Physics, Paul L. DeVries, Javier E. Hasbun, Jones & Bartlett, Ed.2 (2011).
  9. Python Programming and Numerical Methods - A Guide for Engineers and Scientists, Qingkai Kong, Timmy Siauw, Alexandre Bayen
  10. Numerical Approximation Methods, Harold Cohen, Springer (2011).
  11. Numerical Analysis, Francis Sears, McGraw Hill, Ed.2 (1989).

There are several interesting books on this topic, some are very extensive. The books listed above are known for their brevity and can be covered during a 3-4 months course. Some of these books contain codes in languages mentioned on the right side. However, the presentation in these books are generally applicable and they do not emphasize on using one particular programming language. You can pick one or two of these books and use them alongside the course material.

Additional reading:

  1. Introduction to object-oriented programming in Python with examples
  2. Square Roots from 1; 24, 51, 10 to Dan Shanks
  3. Babylon and the square root of 2
  4. PEP 8 — Style Guide for Python Code
  5. What Every Computer Scientist Should Know About Floating-Point Arithmetic

Contact

For comments, questions, suggestions or requests please write to ramakrishnan@tifrh.res.in

Twitter URL