Course content
This is the second semester of Numerical Methods, covering computational methods for ordinary and partial differential equations. We cover low and high order finite difference methods and briefly survey finite element and spectral discretizations. ODE time stepping algorithms of linear multi-step and Runge-Kutta type are used as method-of-lines discretizations of time dependent PDEs. Their stability regions are described. We discuss iterative solution algorithms for large systems of equations that arise from PDE discretizations, which include conjugate gradient, GMRES, and multigrid. Analytical tools include Fourier analysis, energy methods, and multi-scale decompositions.
Scientific computing is a multi-disciplinary activity that involves mathematics, algorithms, and software engineering. Assignments will involve on practical scientific programming as well as mathematics. Scientific software principles include modularity, unit testing, performance, robustness, convergence analysis, and the use of software tools.
Computing
Computing exercises and experiments are an important part of this class. Exercises will involve nonlinear differential equations whose solutions are interesting and unpredictable otherwise. Students will experience first hand the importance of good scientific visualization, the benefits of sophisticated accurate and efficient methods, and the importance of coding with performance in mind.
Prerequisites
Mathematical prerequisies include basic analysis, linear algebra and differential equations. Some exposure to differential equations either through a differential equations class or through applications such as fluid mechanics, electro-magnetism, etc, is very desirable. There will be lots of computating assignments. Class computing will use C++ (not the object oriented parts), Python, and the Unix tool Make. Students should be able to program in a high level language such as C, C++, FORTRAN, or Java. Students who only have worked in a scripting language (Matlab Python, R etc.) should start learning C++ before the class starts or struggle in the first weeks.