teaching

A brief description of some of the courses I teach.

  • Computational Science I. Aimed at second-year computer science and math students, this course treats a number of elementary algorithms for root finding, interpolation, differentiation, quadrature and optimization. We go in dome depth to investigate the stability, accuracy and efficiency both by means of analysis and by implementing and testing. All programming is done in Python (NumPy/Matplotlib/Pandas/…) and the students maintain their own repository for the assignments.
  • Computational Science II. Aimed at third-year math students (and, occasionally, physics and computer science students) this course treats more theory and is less focused on implementation and testing. We look at fixed point iteration, approximation by orthogonal polynomials and Fourier series, continuation methods and other somewhat more advanced methods.
  • Ordinary Differential Equations. Aimed at second-year math and physics students, this course runs the gamut from single, autonomous ODEs to systems of nonlinear ODEs. Solution methods as well as qualitative methods are introduced. I like to throw in a few handfuls of modelling to help the students’ intuition.
  • Partial Differential Equations. Aimed at fourth-year math students, this second course on PDEs goes into characteristics, shocks, entropy solutions, Green’s functions and generalized eigenproblems.
  • High Performance Computing. A grad-level course the treats as much as possible of basic scientific programming, using libraries, code optimization and debugging, MPI and OpenMP parallelism and offloading to GPU devices. Towards the end of the course, the students use the shared super computing facilities of Alliance Canada.