### Course description and philosophy

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, and convergence analysis. Students will use UNIX tools, scientific software for visualization and packages such as LAPACK and FFTW.

### 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. Students also 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.