Javascript Menu by
World Business Strategies Logo


Register Now on our Quants Hub Website

6 Month Course Outline:


The goal of this hands-on course is to introduce the new language features in C++ 11 and apply them to the design and implementation of frameworks to approximate the solution of partial differential equations (PDE) using the finite difference method (FDM). We design the frameworks with reusability and extendibility in mind so that you add your own solvers to the framework or apply design techniques to other kinds of applications in computational finance. In particular, we combine the object-oriented and functional programming models that C+11 supports and we encapsulate the algorithms in a next-generation design patterns object network.

The course style and contents have the same level of detail as in Daniel J.  Duffy’s courses on and

Topics Covered

  • New language features in C++11.
  • Applying C++11 in computational finance.
  • Functional programming and multi-paradigm design.
  • Creating software frameworks for one-factor (and two-factor) PDE models.
  • Modern FDM: ADI, ADE, MOL, Crank Nicolson.

Benefits of Course

  • New language features in C++11.
  • Being effective with C++11; what to use now and what to use later.
  • Incremental build-up of topics; learn step-by-step project.
  • Practical exercises and end-of-course project.
  • Modern C++11, design and PDE models.


We assume that the student has a good working knowledge of C++ as well as a good mathematical background. In particular, some knowledge of finite differences for PDEs is assumed. This is a course on bringing C++11 and PDE/FDM together. If you have queries on this course please do not hesitate to contact me dduffy AT

Quants Hub Programming School 6 Month Format

Lecture 1. New Fundamental Language Features in C++11

In this lecture we discuss the new syntax that makes C++11 a ‘better C++’ in terms of understandability and reliability of code. Topics include: autodecltypenoexceptconstexprnullptruniform initialization and initializer liststemplate typedefdefault template parametersnew fundamental data types.

Lecture 2. Advanced Language Features in C++11

In this lecture we discuss features that improve the efficiency and robustness of C++ code. Topics include: variadic templatesmove semantics A-Z and smart pointers. We shall use these features when developing PDE models in C++.

Lecture 3. Introduction to Functional Programming in C++11

C+11 is a multiparadigm programming language. In this lecture we give a short overview of the functional programming (FP) model and how C++11 supports it. Topics include: FP essentials, from function pointers to universal function wrappershigher-order functionsstrict and delayed variables, C++ binders and lambda functions.

We shall see how powerful and useful the functional programming model is when developing mathematical algorithms for the finite difference method.

Lecture 4. Data Structures

In this lecture we introduce a number of new data types. Topics include: tupleunionfixed-size arrays and unordered containers. We show some examples of use, including how to use them in design patterns code.

Lecture 5. Applied Functional Programming in C++11

In this lecture we apply C++ to the creation of next-generation design patterns and classes that model a number of essential entities in the PDE software framework. The focus is on creating code that is portable and that can be extended to suit a wide range of PDE models. It is the combination of the object-oriented and functional programming models that provides the foundation for flexible software. Topics include: implementing BridgeWhole-PartAdapter and other design patterns.

Lecture 6. Creating Software Frameworks

In this lecture we introduce a framework that can accommodate one-factor (and later two-factor) option pricing problems. The framework is based on experience with several software projects that have proved to be successful. The focus is on applying and integrating the topics from the first five lectures to produce customisable applications. Of particular importance is applying system patterns such as Layers and Builder.

Lecture 7. One-Factor Option Pricers

In this lecture we implement several popular finite difference schemes and we add them to the framework. Included are Crank-Nicolsonimplicit Euler and Richardson extrapolation. We discuss how to model boundary conditions and payoff functions. We also pay attention to the choice of matrix solver (for example, EigenBoost uBLAS or minimal library) and efficiency issues.

Lecture 8. Advanced Option Pricers

We elaborate on the topics in lecture 7 by discussing nonlinear PDEs in computational finance, for example uncertain volatility models (UVM), anchoring (Asian-style problem) and early exercise features. We use both the Method of Lines (MOL) in Boost and Alternating Direction Explicit (ADE) to produce high-order accurate and efficient schemes.

Lecture 9.  Two-Factor Option Pricing Models

In this lecture we give an overview of the main finite difference methods to price two-factor option problems. Topics include: Alternating Direction Implicit (ADI), ADE, MOL and the Method of Fractional Steps (‘Soviet Splitting’). We set up the systems in each case and we give examples in comptutational finance such as baskets, Heston and Asian-style PDEs.

Lecture 10. Project Discussion

The main focus of the projects is to take a focused and well-defined problem, solve it with one or more finite difference schemes and implement the schemes using C++11

and related design patterns. Some suggestions:

  • The Method of Lines (MOL) using the Boost C++ odeint library.
  • PDEs with uncertain parameters.
  • ADE for stochastic volatility models.
  • Build a prototypical customisable framework in C++11 for two-factor PDE problems.

The final project will be marked with feedback and a pass or fail will be given. One retake is allowed if you fail.

Originator and Trainer

Daniel J. Duffy is founder of Datasim Financial. He has been using C++ since 1989 and has a PhD in Numerical Analysis from Trinity College (Dublin University).

PRMIA Certification

PRMIA Certification

The Professional Risk Managers' International Association (PRMIA) is a non-profit professional association, governed by a Board of Directors directly elected by its global membership, of nearly 90,000 members worldwide. PRMIA is represented globally by over 65 chapters in major cities around the world, led by Regional Directors appointed by PRMIA's Board.

The Programming School will be fully certified by PRMIA

CPD Certification

You will be able to receive up to 137 CPD points (12 hours of structured CPD and 125 hours of self-directed CPD) for completing this course.

The CPD Certification Service was established in 1996 as the independent CPD accreditation institution operating across industry sectors to complement the CPD policies of professional and academic bodies. The CPD Certification Service provides recognised independent CPD accreditation compatible with global CPD principles.