This page contains the material for a practical course on modeling, simulation, and optimization that was thaught in the summer semester 2021 at the Friedrich-Alexander Universität Erlangen-Nürnberg. This course provides a practical introduction to some of the most commonly used discretization methods for PDEs (finite differences and finite elements) and their implementation in matlab. It also covers some of the basics of gradient-based optimization focused on (PDE-constrained) optimal control problems. Some basic programming skills in matlab or a similar programming language is recommended but not required.
The 12 lectures are structured into three parts of 4 lectures each. The different parts can be studied largely independent, but sometimes rely on previously covered topics. In particular the material on time discretization from lecture 3 in part 1 also plays an important role in the other parts.
For each week, you can find the lecture slides (.pdf), a related matlab exercise (.pdf), and a starting point for the matlab code (.m). For each of the three parts there is a bonus exercise. The bonus questions are significantly more advanced than the other exercises and they do not always come with a starting point for the matlab code.
Part I: Finite Differences (bonus question)
o Lecture 1: Finite differences for the 1-D Poisson equation
o Lecture 2: Finite differences for the 2-D Poisson equation
o Lecture 3: Time-discretization
o Lecture 4: Von Neumann stability analysis and advection-diffusion equations
Part II: Finite Elements (bonus question)
o Lecture 5: Finite elements in 1-D
o Lecture 6: Finite elements in 2-D
Part III: Optimization (bonus question)
o Lecture 9: Optimization and gradient descent
o Lecture 10: Hessians and step size selection
o Lecture 11: Dynamic optimal control
o Lecture 12: Control of neural ODEs
For questions, suggestions, or for the solutions to the matlab exercises, please contact me (daniel.veldman@math.fau.de).