The Crank-Nicolson Method Explained and Implemented in Python
georg.io