# MAS212 Scientific Computing and Simulation (2019/20)

## Lecturer: Dr Sam Dolan (G18)

This is the course web page for MAS212 Scientific Computing and Simulation in 2019/20.
Last year's material is here.

## Course Information

MAS212 is a 10-credit, Level 2, first-semester module which covers various techniques in scientific computing, and their implementation in Python. The course is intended to follow on from MAS115 Mathematical Investigation Skills.

## MOLE

This year I will also use MOLE for some course materials, such as video clips.

## Software and setup

We will be using the Anaconda distribution of Python (version 3.7), which includes Jupyter Notebook and Spyder.

Anaconda3 is available on (the majority of) Managed Desktop machines. From the Start Menu, select the folder "Anaconda3 (64-bit)".

To install Anaconda on your own computer, use the link below, and choose the Python 3.7 version

## Learning Resources

There are many books on Python and scientific computing. For this course, I recommend:

• Learning Scientific Programming with Python by Christian Hill (Cambridge University Press, 2015).
Copies are available in the library.

A range of material is available on the web, including:

## Sample Notebooks

In this course we will use Jupyter notebooks to combine code, text, plots and media. To view a notebook in the browser, click on the links in the left column. (Alternatively, copy-and-paste the notebook's URL in to the box at nbviewer.jupyter.org).

TitleDescriptionnotebook
Fern The Barnsley Fern: an image of a fern with self-similar (fractal) properties, generated by iterating certain affine transformations. .ipynb
ODE_Example Shows how to (a) solve a first-order single-variable ODE using scipy.integrate.odeint, and plot; (b) solve a second-order equation by writing as a pair of first-order equations; (c) solve predator-prey equations. .ipynb
Curve_Fit_Example Shows how to (a) generate a data set with simulated noise; (b) save and then re-load the data; (c) fit the data to a simple model using scipy.optimize.curve_fit(). .ipynb
Media_Example Shows how to load and interact with various media: data, images, web pages, YouTube videos and maps. .ipynb

## Lectures and Lab Classes

Week Lectures Computer labs Solutions Challenges
0 Revise Python for the class test with: ---
1 L1: Introducing the course Lab Class 1: Jupyter Notebook .html .ipynb Class discussion
2 L2: Arrays in numpy Class Test 1 (.ipynb) Class Test 1 answers The Mandelbrot set
3 L3: Plotting Lab Class 3: matplotlib .html .ipynb The logistic map
4 L4: Ordinary differential equations Lab Class 4: Solving ODEs with odeint() .html .ipynb
5 L5: Numerical methods for ODEs Lab Class 5: Explicit methods for ODEs .html .ipynb
6 L6: Implicit methods for ODEs Lab Class 6: Implicit methods for ODEs .html .ipynb
7 Lecture 7: Curve fitting.
Lab Class 7: Fitting data .html .ipynb
8 Lecture 8: Linear systems and conditioning.
Lab Class 8: Gauss-Jordan elimination .html .ipynb
9 Lecture 9: Animations Lab Class 9: Animations Codes 5 and 6 by J Vanderplas .html .ipynb
10 Lecture 10: The discrete Fourier transform. Lab Class 10: Discrete Fourier Transform .html .ipynb

## Assignments

# Title Summary Due Feedback
1 The Newton-Raphson method and fractals Applying the NR method to find the roots of real and complex functions. Sun 27th Oct (23:59pm). Solution code: .py
Feedback: .pdf
2 Investigating a dynamical system You will write a report in LaTeX, and a Python code. Sun 1st Dec (23:59pm). Solution: .pdf .ipynb .html
3 Gravitational waves You will fit a model to data and prepare a presentation using Beamer. Fri 20th Dec (23:59pm). Example presentation: .pdf .tex

## Class Tests

To take a test, right click on ".ipynb" link, save the file in your notebooks directory (choose 'All Files' not 'Text Documents'), and then open the notebook using Jupyter Notebook. Read the rubric. Then click on a question and select 'Insert Cell Below'. Change the cell type to 'code' or 'markup', as appropriate. Completed tests will be submitted here.

To view a test, left click on the ".html" link.

2019/20: