|Lecturer:||Martin Komaritzan, Jan Philip Göpfert|
|Lecture:||Wed, 10-12, Room D2-136|
|Exercise:||Tue, 8-10, Room V2-222, V2-229|
Many interesting projects in natural sciences and engineering require the computation of numerical solutions to certain mathematical problems, such as solving systems of equations or minimizing some cost function. This course introduces the most frequently used numerical methods in a compact manner, based on intuitive and interesting examples from computer graphics and physics-based dynamic simulations.
We will not focus on the theoretical derivation of the presented techniques. Instead, our goal is to effciently and robustly solve numerical problems in practical applications, which requires these three steps:
- Given an engineering problem, formulate it as a mathematical problem, for instance as a system of equations or an optimization problem.
- Given a mathematical problem, analyze its properties to understand which numerical methods can be employed for its solution.
- Given a numerical method, know which open-source implementation can be used and/or how to implement it yourself as an efficient and robust algorithm.
The numerical methods to be discussed include solving dense and sparse linear systems, least squares approximations, and partial differential equations. We will also discuss efficient C++ programming and shared memory parallelization.
To facilitate a better understanding we will implement most of the techniques that we discuss in the lecture in the programming assignments. Our exercises therefore consist of several mini-projects, which you can work on alone or in groups. Our tutors have weekly consulting hours, where students can get help if they have trouble with the implementation. At the end of each mini-project, students will present their results in the exercise course.
- Basic knowledge of linear algebra and analysis is required. You should have passed your Mathe 1+2 courses.
- The programming exercises will be done in C++. We'll do a C++ crash course at the beginning.
- Botsch, Sieger, Scientific Computing Course Notes (version July 10, 2016)
- Trefethen, Bau, Numerical Linear Algebra, SIAM, 1997
- Demmel, Applied Numerical Linear Algebra, SIAM, 1997
- Press, Teukolsky, Vettering, Flannery, Numerical Recipes in C++: The Art of Scientific Computing, Cambridge University Press, 2002
- Chapman, Jost, van der Pas, Using OpenMP: Portable Shared Memory Parallel Programming , MIT Press, 2007.
- Meyers, Effective C++, Addison-Wesley Professional, 2005.
- Hager, Wellein, Introduction to High Performance Computing for Scientists and Engineers, CRC Press, 2010.
- Davis, Direct Methods for Sparse Linear Systems, SIAM, 2006.
|Week||Lecture (Wednesday)||Exercise (Tuesday)|
|17||Linear Systems, LU Factorization|
|18||Least Squares, Cholesky Factorization||Curve Interpolation, C++ Introduction|
|20||SVD, Numerical Stability||Curve Approximation|
|21||Heat Equation, Time Integration|
|22||Laplace Equation, Gradient Descent||Diffusion|
|23||Conjugate Gradients, Sparse Matrices|
Efficient C++, SIMD,
Intel SIMD Intrinsics, Performance Test Code
|25||Parallel Computing, OpenMP|
|27||Wave Equation, Band Cholesky|
|28||Sparse Cholesky Factorization||Wave Equation|