Computing and Numerical Methods 2

Module aims

The module builds on your prior programming ability, introducing you to programming with a compiled language (C++) and further numerical analysis techniques, which you will need and apply in later years of the Aeronautics course and subsequently in industry. The emphasis of the module is to impart a basic awareness of common pitfalls in applying numerical methods together with a degree of competence in the application of numerical analysis to common model problems, such as the solution of differential equations.

Learning outcomes

On successfully completing this module, you should be able to:

1. Implement the essential procedural and object-oriented programming constructs in C++  and write complex programs to solve a variety of numerical problems;
2. Apply time-stepping methods for initial-value problems with particular emphasis on their consistency, stability and convergence;
3. Choose appropriate solvers for stiff systems, being aware of the concept of stiffness;
4. Extend the methods used for ordinary differential equations to the numerical solution of partial differential equations;
5. Identify accuracy and stability limitations in numerical methods for Partial Differential Equations (PDEs);
6. Carry out a computational analysis involving program writing, debugging, validation and results presentation.
7. use a UNIX shell and execute basic commands.
 

Module syllabus

Object-oriented programming:
- The C++ language; variables, operators and I/O; control structures; functions; classes, arrays, dynamic memory and pointers. 

Unix: 
- Linux, the UNIX file system, basic commands, editing files, networks.
 
Numerical Analysis:
- Finite Difference Methods: forwards difference, backwards difference, central difference. Order of accuracy. Higher derivatives. 
- Numerical Solution of Ordinary Differential Equations (ODEs): review of theory: initial value problems, systems of ODEs, geometric perspectives (direction field and phase plane).
- Simple methods for ODEs: forward Euler, explicit Runge Kutta methods. Errors, adaptive methods, application to systems, the need to consider complex eigenvalues.
- Numerical stability of ODE solvers (1): simple analysis of explicit methods.
- Numerical stability of ODE solvers (2): implicit and LMM methods, stiff problems (Van der Pol), Boundary value problems and shooting. Z-transform approach.
- Introductory Finite Differences for Partial Differential Equations (PDEs): Types of equations, basic construction of solver illustrated using heat conduction equation.
- Difference schemes for PDEs: convergence and consistency.
- Stability analysis of numerical schemes for PDEs: Von Neumann and modified equation analysis. FTCS and Crank Nicholson methods for heat conduction equation.
- Elliptic and Hyperbolic equations: concept of relaxation upwinding for hyperbolic equations.

Teaching methods

The instruction of programming is carried out using a flipped-classroom approach. Prior to the tutorial session, you will review a pre-recorded lecture and test your understanding by attempting to solve a few short exercises. During the 2-hour in-class tutorial that follows, you will discuss the solution of the online self-assessment with the tutor and raise any questions. A problem sheet will then be attempted, with tutors available to answer questions.

For the part of the module addressing numerical methods, you will be introduced to the fundamental idea behind the methods using large whole class lectures, with half-class tutorial sessions, held in computer labs, used to apply and reinforce your understanding.  

Assessments

The module offers extensive opportunities for formative self-assessment by students, through both the pre-session self-assessments and weekly tutorials.
You will be summatively assessed through in-class programming tests (assessing your programmings skills in C++), a multiple-choice test on numerical methods and a computing project. 

 
Assessment type Assessment description Weighting Pass mark
Examination C++ Mastery Test 30% 40%
Examination Numerical Methods MCQ 20% 40%
Coursework Project 50% 40%
 
You will be offered opportunities to receive both structured and opportunistic formative feedback. Through the weekly programming tutorials, you will be able to formative self-assess your progress and understanding, as well as ask for feedback from the class tutors. 
Written feedback will be provided for your submissions for the summative project and in-class test. 
Further individual feedback is available on request via this module’s online feedback forum, staff office hours and discussions with tutors.

Reading list

Core