MIT 18.337/6.338

Modern Numerical Computing


  1. Students' final project materials are now up. Thank you so much for participating in the course. We hope you enjoyed it!
  2. 11/28: Final project presentation schedules and rules announced. Starts Monday (12/3) and ends Wednesday (12/12).
  3. 11/21: Homework 4 due Friday November 30 is up.
  4. 10/05: Project rules published! Topic proposal on Oct 11 during office hours!
  5. 9/30: Check out the note on using Google Colab to run your notebooks.
  6. 9/27: Homework 3 due Wednesday October 3 is up.
  7. 9/18: Homework 2 due Monday September 24 is up.
  8. 9/12: Office Hours are on Thursday from 4 PM - 5:30 PM at the Julia Lab (Building 32-G, 7th Floor). Enter Stata, find the Gates tower, come to the 7th floor, and follow the directions to the Julia lab.
  9. 9/8: Homework 1 due Monday September 17 is up.
  10. Join the Piazza forum for this course.
  11. Please take the pre-class survey.


Have you ever wondered why:

In this course we'll break down all the barriers that get in the way of writing high performance code. We expect to cover topics in

and much more...

Also, watch out for exciting guest lectures!

Getting Started

  1. Create an account on GitHub and add your SSH key.
  2. Fill out the pre-class survey.
  3. Signup onto Piazza.
  4. Install Julia 1.0 on your laptop (platform specific instructions)
  5. We recommend using Julia via Juno, VSCode or Jupyter

Using Google Colab

Students who would like to run the notebooks on GPUs can do so via Google Colab. The machine learning notebooks are available on Google Drive, provided you install Julia on Colab via the colab_install_julia notebook.

Office Hours

TAs will be available at the JuliaLab in CSAIL every Thursday from 4 PM to 5:30 PM. To get there, go to Stata (Building 32), find the Gates Building and take the lift to the 7th floor. You will find directions to the Julia Lab on the walls. If these office hours are inconvenient, just walk up to the TAs and they'll help you.

Update: We just realised that the office hours are inconvenient for some people. You can contact the TA at ranjanan AT mit DOT edu and speak separately about any questions or issues.


Homework = 40% (Roughly 6 assignments)

Midterm Project = 20%

Final Project = 40%


Date Topic Required Reading
Lecture 1 9/5 Why Julia? Julia: A Fresh Approach to Numerical Computing
Lecture 2 9/10 Natural Language Processing Demos
Machine Learning Tutorials 2 and 3
Lecture 3 9/12 Julia is Fast, Polymorphism, Generic Programming Why we created Julia
Lecture 4 9/17 GPU and Distributed
Lecture 5 9/19 Machine Learning Tutorials 4 and 5
(Multi-layer Perceptrons and Convolutional Nets)
Lecture 6 9/24 Macros and Metaprogramming Latexify.jl (JuliaCon 2018)
Lecture 7 9/26 Machine Learning Tutorials 6, 7, and 8
(Recurrent Nets)
Machine Learning in Julia (JuliaCon 2018)
Lecture 8 10/1 Reinforcement Learning David Silver's Reinforcement Learning Lectures
Stanford Reinforcement Learning Slides
Lecture 9 10/3 Guest Lecture: "Modia.jl - A package for modelling and simulation" by Dr. Chris Laughman (Mitsubishi Electric Research Lab)
No Lecture 10/8Holiday (Columbus Day)
Lecture 10 10/10 Differential Equations
Lecture 11 10/15 Memory model and performance Performance tips - Julia docs
Lecture 12 10/17 Guest Lecture: "Building a Human Brain Scale Neural Network with D4M.jl and Apache Accumulo" by Dr. Jeremy Kepner
Lecture 13 10/22 Spectral Partitioning
Lecture 14 10/24 Graph Algorithms in Julia
Lecture 15 10/29 Singular Value Decomposition
Lecture 16 10/31 Validated Numerics in Julia
Lecture 17 11/5 Generalized SVD
Lecture 18 11/7 Scalars, Vectors and Matrices
No Lecture 11/12Holiday (Veterans' Day)
Lecture 19 11/14
Lecture 20 11/19 Fast Multipole
No Lecture 11/21Cancelled (Thanksgiving travel)
Lecture 21 11/26
Lecture 22 11/28 Guest Lecture: Juan Pablo Vielma
Lecture 23 12/3
Lecture 24 12/5
Lecture 25 12/10
Lecture 26 12/12


To submit the homework, you have two options:

  1. Homework 1: Getting Started
  2. Homework 2: Understanding Types in Julia
  3. Homework 3: Expression Trees
  4. Homework 4: SVD and GSVD


Project archive is up! Send your code and presentations by 12/12!

Check out the project rules!

Final project presentation schedules and rules announced. Starts Monday (12/3) and ends Wednesday (12/12).

Yinzhan Xu, Yunkun Zhou Subcubic Matrix Multiplication & complexity estimator (folder)
Nanfang Hong Reconstruct 3D shape from Extended Gauss Image (Folder | github)
Angus Foo Overlapping Finite Elements (Folder | slides)
Christian Landeros Generative Adversarial Networks for Unsupervised Clustering (Folder | slides)
Rebecca Carlson, Kathi Hoebel, Olivia Waring A Julia U-Net for Cell Segmentation (Folder slides | report)
Sarah Greer Software Defined Radio (Folder)
Alasdair Hastewell ODE Finder (Folder | slides)
Florence Yip Email author for permission
Kim Holmgren, Eric Wybenga Financial Strategy Backtester (Folder | slides)
Chris Courtin Mixed-Integer Geometric Programs (Folder | slides)
Paul Gibby Building a Toolkit for Adversarial Learning in Julia (Folder | slides)
Ali Ramadhan Massively parallel nonhydrostatic ocean modeling on GPUs(Folder | GitHub | Slides)
Matt Johnson Reaction Mechanism Simulator (Folder | Slides | Github)
Saleh Al Nasser Siesmic Reverse Time Migration (Folderslides)
Kevin Silmore Immersed Boundary Hydrodynamics with Rigid Constraints (Folder | slides)
Yusu Liu Identifying the Optimum Perovskite Catalyst for Water Splitting using Julia (Folder | slides)
Jenny Coulter Email author for permission
Nicholas Rivera Nonlinear solvers for coupled eigenequations (Folder | slides)
Suzane Cavalcanti, Caroline Nielsen Autodiff of non-smooth functions (Folder | slides)
Robin Park Email author for permission
Jennifer Dawkins, Brian Do Stride Prediction for Exoskeleton Control (Folder | slides)
Felipe Suarez Stein Variational Gradient Descent (Folder | slides)

Previous Classes