Jupyter notebooks:


  • Plotting functions ( Download notebook)

    Lecture 2:

  • Numerical demonstration of Cauchy's theorem ( Download notebook)
  • Numerical demonstration of the expansion of a plane wave into a sum of Bessel functions ( Download notebook)

    Lecture 3:

  • Animations of the scalar and vector Green functions ( Download notebook)
  • Wave propagation/reflectivity from a Salisbury screen ( Download notebook)

    Lecture 4:

  • Pulse propagation in dispersive and non-dispersive materials ( Download notebook)
  • Numerical demonstration of the Kramers-Kronig relations ( Download notebook)

    Lecture 5:

  • Plots and animations of the Gaussian beam and the Airy beam ( Download notebook)
  • Plots and animations of the Poisson-Arago spot ( Download notebook)
  • Justifying an approximation to an integral involving a Gaussian and a Bessel function ( Download notebook)

    Lecture 6:

  • Continuity of power flow for a wave incident onto an interface ( Download notebook)
  • The field of a wave incident onto a perfectly reflecting surface with a hole in it ( Download notebook)

    Lecture 7:

  • Calculating scattering from an arbitrary object using the Born approximation ( Download notebook, data file)
  • Rayleigh scattering and the color of the sky ( Download notebook, data file)

    Lecture 8:

  • Visualizing the reciprocal lattice in 2D ( Download notebook)
  • Wave propagation through a 1D lattice of delta function scatterers ( Download notebook)
  • Transfer matrices and the reflection from and transmission through an N period medium ( Download notebook)

    Lecture 9:

  • The dispersion relation of an empty unit cell ( Download notebook)
  • Degenerate perturbation theory applied to a hexagonal lattice of point scatterers ( Download notebook)
  • Plane wave expansion for propagation in arbitrary media ( Download notebook)

    Lecture 10:

  • Ray tracing through 2D index profiles ( Download notebook)
  • The WKB approximation in slowly changing refractive index profiles ( Download notebook)
  • Conformal mapping and the 2D Helmholtz equation ( Download notebook)


  • Numerical solution of the 1D Helmholtz equation in an inhomogeneous medium ( Download notebook)
  • An example of using FENICS to write your own finite element solver for the Helmholtz equation ( Download notebook)
  • If you must use COMSOL then you might want to analyse the output with python ( Download notebook, data file 1, data file 2)

    Note: if you're not using linux then the animations might not work. This is because Jupyter uses ffmpeg to make the files. Ian knows how to fix this.