Course Objectives:
The main objective of this course is to introduce students to some of the key computational techniques used in modelling and simulation of realworld phenomena. This course is designed to expose students to techniques and methods from a variety of disciplines, not normally encompassed in a single course. Unlike other courses focused more specifically on algorithms, data structures or numerical analysis, this course emphasizes handson programming to understand a variety of scientific phenomena and computational methods.
Course Contents
A subset of the following topics will be covered in a typical offering of the course and the lecture/lab hours mentioned for each topic are only indicative of the actual hours.
Introduction to Python, plotting in Python, Monte Carlo simulations, sampling from a discrete distribution, estimating Pi using Monte Carlo simulations, verifying the prime number theorem, random text generation, introduction to Pythonâ€™s scipy.stats module (2 lectures, 3 lab hours)
Concepts of objectoriented programming, basic algorithms for efficiently traversing and computing path length distributions of arbitrary networks, computing set of connected components using Breadth First Search, introduction to networks, small world networks, percolation, introduction to Pythonsâ€™s NetworkX package (2 lectures, 3 lab hours)
Introduction to linear system of equations, Jacobi and GaussSiedel iterative techniques for solving linear systems, interpolation and Lagrange polynomial, polynomial curve fitting, introduction to Pythonâ€™s scipy.interpolate and numpy.linalg (routines to solving equations and inverting matrices) modules (2 lectures, 3 lab hours)
Numerical differentiation using forwarddifference formula, elements of numerical integration, the trapezoidal rule, computing the Jacobian matrix, estimating position from accelerometer reading, introduction to Pythonâ€™s scipy.integrate subpackage (2 lectures, 3 lab hours)
Discrete least squares approximations, orthogonal functions, orthogonal least square polynomials and least square approximation, discrete trigonometric approximations, fast Fourier transform (FFT). Introduction to Pythonâ€™s numpy.polynomial and numpy.fft packages (2 lectures, 3 lab hours)
Introduction to ordinary differential equations (ODEs), theory of InitialValue problems, Euler method for solving initialvalue problems, simulating a simple pendulum, solving ODEs using Pythonâ€™s scipy.integrate module (2 lectures, 3 lab hours)
Introduction to partial differential equations (PDEs), finite difference method for solving PDE, finding a root using the bisection method, fixedpoint iteration, Newtonâ€™s method, finding the fixed point of the dynamics of a single cardiac cell, simulation of the cardiac tissue PDE, using Pythonâ€™s visualization tools, introduction to Pythonâ€™s PDE solver (2 lectures, 1 lab)
Introduction to matrix factorization, Cholesky decomposition, sampling from a continuous distribution, ratioofuniforms method, generating Gaussian random vectors, introduction to Pythonâ€™s numpy.linalg (routines for matrix decomposition) and numpy.random modules (2 lectures, 3 lab hours)
Introduction to Eigen values and Eigen vectors, the power method, deflation methods, applications in page rank and mixing time of Markov chains, introduction to singular value decomposition (SVD), relation to the least square problem, sensitivity of SVD, computing SVD, application in image compression (4 lectures, 6 lab hours)
Monte Carlo integration, importance sampling, introduction to Markov chain, MetropolisHastings algorithm, the Ising model, simulated annealing, Gibbs sampler (4 lectures, 6 lab hours)
Introduction to convex optimization, constrained optimization, dual function, dual problem, gradient method with fixed and diminishing step size, rate of convergence and bounds on deviation from optimal value, introduction to Pythonâ€™s CVXOPT package (2 lectures, 3 lab hours)
Introduction to kSAT and colorability, the DavisPutnam algorithm, introduction to Pythonâ€™s pythonsat package, NPcompleteness, number partitioning problem, recursive and dynamic programming (2 lectures, 3 lab hours)
Learning Outcomes:
Upon successful completion of this course, the student will:
 have working knowledge of some popular and wellknown computational methods.
 be able to Write codes that use computational methods to numerically solve problems in a variety of disciplines.
 Know about open source packages that implement popular computational methods.
 be able to apply the mathematical concepts discussed over the duration of the course.
Text Books:
None
References:

Richard L. Burden and J. Douglas Faires, â€śNumerical Analysis,â€ť Cengage Learning; 9th edition, January 1, 2015, ISBN13: 9788131516546

William H. Press, Saul A. Teukolsky, William T. Vetterling and Brian P. Flannery, â€śNumerical Recipes: The Art of Scientific Computing,â€ť Cambridge University Press; 3rd edition, September 6, 2007, ISBN13: 9780521880688

Chris Myers, â€śComputational Methods for Complex Systems: Notes and Exercisesâ€ť Available online at https://pages.physics.cornell.edu/~myers/teaching/ComputationalMethods

Official documentation for Python 3 Available online at https://docs.python.org/3

Other reference materials will be prescribed by the instructor on a topicbytopic basis.
Past Offerings
 Offered in JanMay, 2024 by Albert Sunny
 Offered in JanMay, 2023 by Albert Sunny
 Offered in JanMay, 2022 by Albert Sunny
 Offered in JanMay, 2021 by Albert
Course Metadata
Item  Details 

Course Title  Computational Methods and Applications 
Course Code  CS5016 
Course Credits  2034 
Course Category  PMT 
Proposing Faculty  Albert Sunny 
Approved on  Senate 11 of IIT Palakkad 
Course prerequisites  Familiarity with coding, calculus, probability and linear algebra 
Course status  NEW 