Skip to content
Lorena A. Barba edited this page May 22, 2025 · 32 revisions

Welcome to NumericalMOOC!

This repository is the core of the "Practical Numerical Methods with Python course. Each course module consists of a set of IPython Notebooks (links below to the rendered notebook on nbviewer), practice exercises and a coding assignment.

What is this course about?

In this course we aim to help you build a foundation for scientific computing.

We use computers every day: to communicate and connect with each other, to entertain ourselves, to check our bank account and for online shopping. But scientific computing is a special way of using computers, one that gives you lots of power to be creative and inventive. We love it—it’s challenging but fun.

Scientific computing is essential in any profession of science and technology; it’s a key tool. More than a tool, it is a way of thinking, and the language of computing is as necessary for your success as the language of mathematics.

What do we mean by "numerical methods"?

Numerical Methods are the ways in which we make problems computable by a machine that operates with numbers (a computer). Much of our scientific knowledge—especially in the physical sciences—is expressed in the language of mathematics.

Mathematics is really the way into nature’s heart. But mathematics is more about ideas and symbols than it is about numbers. In our minds, we can manipulate ideas and symbols, but in a computer, we just need numbers.

Numerical methods are the translators between the ideal world of mathematics and the numbers world of computers.

What do we mean by "practical"?

Often, a numerical methods course will cover the various discretization schemes, like a recipe book, and talk about the analysis of methods (consistency, stability, convergence) via "chalk-and-talk" lectures. Sometimes there are homework problems that ask you to apply more analysis, and perhaps a final project where you finally get to program numerical solutions. And guess what, by that time, most of the semester is over and you're thrown in the deep end.

We call this course "Practical Numerical Methods with Python" because we'll get you coding numerical solutions right away, and we aim for you to develop numerical literacy. This doesn't mean we ignore the theory, but we discuss the theory when and as you experience the behavior of different solutions, and see the relevance.

In the on-campus courses, we use a "blended learning" model, and emphasize programming practice during class meetings.

When you finish this course, we want you to be confident that you can continue teaching yourself numerical methods, as and when you need to, and apply them to solve problems.

Module 0: Getting Started.

How is this course going to work?

  1. What to expect from the instructors
  2. What is expected of you
  3. The idea of connected courses

Module 1: The phugoid model.

  1. Phugoid motion
  2. Phugoid oscillation
  3. Full phugoid model
  4. Bonus! Second-order and multi-step methods

Module 2: Space and Time

Introduction to finite-difference solutions of PDEs

  1. 1D linear and nonlinear convection
  2. CFL condition
  3. Diffusion equation in 1D
  4. Burgers' equation

Module 3: Riding the wave

Convection problems

  1. Conservation laws and the traffic-flow problem
  2. Numerical schemes for hyperbolic PDEs
  3. A better flux model
  4. Finite volume and MUSCL methods.
  5. Assignment: Sod's test problems

Module 4: Spreading out

Diffusion problems

  1. Diffusion equation in 1D and boundary conditions
  2. Implicit schemes in 1D and boundary conditions
  3. 2D heat (diffusion) equation with explicit scheme
  4. 2D heat equation with implicit scheme, and applying boundary conditions
  5. Crank-Nicolson scheme and spatial & time convergence study
  6. Assignment: Reaction-diffusion with the Gray-Scott model in 2D

Module 5: Relax and hold steady

Elliptic problems

  1. 2D Laplace equation with Jacobi iterations
  2. 2D Poisson equation with Jacobi, and algebraic convergence
  3. Gauss-Seidel, successive over-relaxation (SOR) and tuned SOR, introducing Numba
  4. The conjugate gradient method
  5. Assignment: Stokes flow in vorticity-streamfunction formulation