Skip to main content

Practical Numerical Methods with Python MAE

Why take this course?

Even if this is the only numerical methods course you ever take, dedicating yourself to mastering all modules will give you a foundation from which you can build a career in scientific computing.

A re-start for 2015!

New on-campus courses are running in Fall 2015 that will use this online course. Unlike other MOOCs that are "re run" with a fresh set of participants and a clean forum and gradebook, we will continue using the same online course that we started in August 2014. All participants who enrolled before, but did not complete the course modules, are invited to try again in 2015.

About This Course

The first instance of this course ran in Fall 2014. Prof. Lorena A. Barba at the George Washington University, led the online course while at the same time teaching an on-campus course. Two other institutions ran local courses: the University of Southampton (UK) and Pontifical Catholic University of Chile (Santiago, Chile).* The instructors at these partner institutions contributed to the development of materials and engaged with students on the course forum. Students at all locations participated in the same learning community with MOOC participants.

New in 2015 — Numerical MOOC has a new partner! A course in numerical methods will be taught at Université Libre de Bruxelles adopting this online course. The instructor is Prof. Bernard Knaepen of the Physics Department. His students will join us in the MOOC and he will contribute new materials and updates to the old materials.

*NOTE: Initial planning included the King-Abdullah University of Science and Technology (Saudi Arabia) with Prof. David Ketcheson. Unfortunately, their local course got cancelled and they could not participate.

Course Aims

The course aims are for students to achieve the following:

  • connect the physics represented by a mathematical model to the characteristics of numerical methods to be able to select a good solution method;
  • implement a numerical solution method in a well-designed, correct computer program;
  • interpret the numerical solutions that were obtained in regards to their accuracy and suitability for applications.

Who is the course for?

Numerical methods for differential equations are relevant across all of science and engineering. This course is for anyone with mathematical, scientific or engineering backgrounds who wishes to develop a grounding in scientific computing. Using a range of hands-on lessons, participants in the course will develop the basic skills to tackle modern computational modelling problems.

In developing this course, the instructors are inspired by the philosophy of open-source software. One of the tenets of the course is that we can use the web to interact, connect our learning, teach each other by sharing our learning objects. Therefore, this course is especially for those who are eager to participate in distributed knowledge creation on the web. Join us in this adventure!


The connected courses and MOOC are aimed at first-year graduate students or advanced seniors, and assume a background in vector calculus, linear algebra, and differential equations. We won't assume more than a beginner's programming experience and will guide students to develop a foundation in numerical methods, and hands-on experience coding up solutions to differential equations.

Course Topics

The course consists of stacked learning modules that are somewhat self-contained. Each one is motivated by a problem that can be modeled by a differential equation (or system of DEs) and builds new concepts in numerical computing, new coding skills and ideas about analysis of numerical solutions.

The topics cover methods for time integration of simple dynamical systems (systems of ordinary differential equations); finite-difference solutions of various types of partial differential equations (hyperbolic, parabolic or elliptic); assessing the accuracy and convergence of numerical solutions; and using the scientific Python libraries to write these numerical solutions.

Course Learning Modules

(1) The phugoid model of glider flight.

Described by a set of two nonlinear ordinary differential equations, the phugoid model motivates numerical time integration methods, and we will build it starting from an even simpler model (e.g., simple harmonic motion), building up to the full nonlinear model in 4 or 5 lessons on initial-value problems. Roughly, this module includes: a) Forward/backward differencing and Euler's method for simple harmonic motion; b) extension to the phugoid model; c) the midpoint method, convergence testing, local vs. global error; d) Runge-Kutta methods.

(2) Space and Time—Introduction to finite-difference solutions of PDEs

Starting with the simplest model represented by a partial differential equation (PDE)—the linear convection equation in one dimension—, this module builds the foundation of using finite differencing in PDEs. (The module is based on the “CFD Python” collection, steps 1 through 4.) It also motivates CFL condition, numerical diffusion, accuracy of finite-difference approximations via Taylor series, consistency and stability, and the physical idea of conservation laws. Computational techniques: more array operations with NumPy and symbolic computing with SymPy; getting better performance with NumPy array operations.

(3) Riding the wave: convection problems.

Starting with an overview of the concept of conservation laws, this module uses the traffic-flow model to study different solutions methods for problems with shocks: upwind, Lax-Friedrichs, Lax-Wendroff, MacCormack, then MUSCL (discussing limiters). Reinforces concepts of numerical diffusion and stability, in the context of solutions with shocks. It will motivate spectral analysis of schemes, dispersion errors, Gibbs phenomenon, conservative schemes.

(4) Spreading out: diffusion problems

This module deals with solutions to parabolic PDEs, exemplified by the diffusion (heat) equation. Starting with the 1D heat equation, we learn the details of implementing boundary conditions and are introduced to implicit schemes for the first time. Another first in this module is the solution of a two-dimensional problem. The 2D heat equation is solved with both explicit and implict schemes, each time taking special care with boundary conditions. The final lesson builds solutions with a Crank-Nicolson scheme.

New Modules for 2015

(5) Relax and hold steady: elliptic problems.

Laplace and Poisson equations (steps 9 and 10 of “CFD Python”), explained as systems relaxing under the influence of the boundary conditions and the Laplace operator; introducing the idea of pseudo-time and iterative methods. Linear solvers for PDEs : Jacobi’s method, slow convergence of low-frequency modes (matrix analysis of Jacobi), Jacobi as a smoother, Multigrid.

(6) Perform like a pro: making your codes faster

Getting performance out of your numerical Python codes with just-in-time compilation, targeting GPUs with Numba and PyCUDA.

Planned new modules, not yet developed:

Boundaries take over: the boundary element method (BEM)

Weak and boundary integral formulation of elliptic partial differential equations; the free space Green's function. Boundary discretization: basis functions; collocation and Galerkin systems. The BEM stiffness matrix: dense versus sparse; matrix conditioning. Solving the BEM system: singular and near-singular integrals; Gauss quadrature integration.

Course Instructors

Lorena Barba

Prof. Lorena A. Barba

At the George Washington University, Prof. Barba teaches the course MAE-6286 in the Mechanical and Aerospace Engineering department, where she is an Associate Professor. She obtained a PhD in Aeronautics from the California Institute of Technology and a Mechanical Engineering degree from Universidad Técnica Federico Santa María in Chile.

Follow @LorenaABarba on Twitter.

Ian Hawke

Dr. Ian Hawke

As a member of the new University of Southampton Centre for Doctoral Training in Next Generation Computational Modelling, Dr. Hawke teaches the course FEEG6001: Numerical Methods, for 1st-year PhD students. He has a PhD in Applied Mathematics and Theoretical Physics from the University of Cambridge.

Follow @IanHawke on Twitter.

Carlos Jerez

Prof. Bernard Knaepen

A faculty member in the Fluid and Plasma Dynamics research unit of the Physics Department, Université Libre de Bruxelles, Bernard Knaepen has taught a master's level course on numerical methods for PDEs for several years. In 2015, he's adopting Numerical MOOC and planning to contribute new material for the course community.

Follow @bknaepen on Twitter.

Teaching Assistants, Fall 2015

Natalia Clementi

Natalia Clementi

Natalia joined Professor Barba's research group at George Washington University in 2014. She is a physicist trained in Cordoba, Argentina, and is working on research involving numerical methods for biophysics.

Follow @ncclementi on Twitter.

Gilbert Forsyth

Gilbert Forsyth

Gil Forsyth is a second-year PhD student studying with Professor Barba at the George Washington University. He is a graduate of Oberlin College and Boston University with an MSc in Mechanical Engineering.

Follow @gilforsyth on Twitter.

Alice Harpole

Alice Harpole

Alice is a second year PhD student at the University of Southampton, where she is studying with Ian Hawke. She has an MSci in Astrophysics from the University of Cambridge.

Follow @debruges on Twitter.

Teaching Assistants, Fall 2014

In addition to Gilbert Forsyth (listed above), in 2014 we had the expert assistantship of:

Christopher Cooper

Christopher Cooper

Christopher joined Professor Barba's research group at Boston University in 2010. He obtained an MS in Mechanical Engineering in 2012 and graduated with his PhD in May 2015. He has a BSc and Engineer's degree in Mechanical Engineering from Universidad Técnica Federico Santa María in Chile.

Frequently Asked Questions

Do I use my edX account to log in?

No. You have to create a separate account on our Open edX system. We are not affiliated with the edX consortium in any way. We are just using the course platform that they developed, which is free and open-source software. Our instance is separately hosted, and thus you need a separate account.

What does it mean that there are "connected courses"?

It means that similar courses will be taught at the four partner universities, that course instructors will collaborate on the creation of course content and learning objects, and that students at all locations participate in the same community, via this MOOC. As a participant in the MOOC, you will interact with the students taking the course for credit at the four partner institutions, and with all instructors and teaching assistants.

What resources do I need for this course?

You need Python. For this, there are two options. Option one is a computer that has the scientific Python stack installed. By that, we mean core Python, plus the scientific libraries (NumPy, SciPy, Matplotlib, and so on). If you would like to install these on your computer, you may download a full Python distribution like Anaconda or Canopy. Option two is to use a web-based Python system, like a free Wakari account or Pythonanywhere.

Why are you using Python?

Python is free. Python is a complete programming solution, with excellent interactive options and visualization tools. Python is a good learning language: it has easy syntax, it is interpreted and it has dynamic typing. Python has a large community: people post and answer each other's questions about Python all the time. For numerical computing, Python can do everything Matlab can do; but free. Python is exploding in popularity and is used for teaching programming at the top schools. Python is used in industry; it can help you get a job.

Will there be a certificate of accomplishment for this course?

Instead of a certificate, we will award badges. You can earn a badge for completing any learning module of the course (there will be seven modules), and if you complete all modules, you will earn an "Expert" badge. If you already know about numerical methods, but want to join the MOOC to participate in the community and help others, you can have a "Mentor" badge (details about this will be posted once the course starts).

Is there course credit?

If you are a student at one of the partner universities, you can enroll in your local connected course, for credit. If you are not, you can join us in the MOOC and earn badges, but there is no college credit associated with the badges.

How is this course different than a regular edX course?

It is different in that we are not associated with edX in any way. It is also different in that all course materials will be developed openly and be available outside of the Open edX platform: videos will be on YouTube and can be viewed without being registered in the course; lessons will be on GitHub and can be downloaded by anyone; everything will be shared under a permissive open license.

How much time will I need to dedicate to this course per week?

It depends on your previous experience with numerical computing and with Python, but we estimate that if you dedicate 6 hours per week, on average, you will gain a lot from this course.

  1. Course Number

  2. Classes Start

    Sep 01, 2015