### Course description

This is the second semester of Numerical Methods. We focus on computational methods related to differential equations. Solution of ordinary differential equations discussed in some detail, including linear multistep and Runge Kutta methods, stability and barrier theorems, and methods for stiff problems. Introduction to solution of certain partial differential equations such as the Poisson problem and the heat equation. A very brief introduction to finite element methods. Iterative methods for solving large systems of equations, including conjugate gradients, gmres and the role of pre-conditioners. Discrete Fourier analysis and applications to stability analysis, spectral methods, and fast solvers.

There will be a regular coding and computational experiments along with the more theoretical material. We will emphasize basic principles of scientific software such as modularity, unit testing, performance, robustness, and convergence analysis. We will discuss use of software tools such as visualization and specialized computing packages.

### Prerequisites

Mathematical prerequisies include basic analysis, linear algebra and differential equations. 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.