Finite difference discretization 
       A basic model for vibrations 
       A centered finite difference scheme 
 Implementation 
       Making a solver function 
       Verification 
       Scaled model 
 Long time simulations 
       Using a moving plot window 
       Making animations 
       Using Bokeh to compare graphs 
       Using a line-by-line ascii plotter 
       Empirical analysis of the solution 
 Analysis of the numerical scheme 
       Deriving a solution of the numerical scheme 
       Exact discrete solution 
       Convergence 
       The global error 
       Stability 
       About the accuracy at the stability limit 
 Alternative schemes based on 1st-order equations 
       The Forward Euler scheme 
       The Backward Euler scheme 
       The Crank-Nicolson scheme 
       Comparison of schemes 
       Runge-Kutta methods 
       Analysis of the Forward Euler scheme 
 Energy considerations 
       Derivation of the energy expression 
       An error measure based on energy 
 The Euler-Cromer method 
       Forward-backward discretization 
       Equivalence with the scheme for the second-order ODE 
       Implementation 
       The velocity Verlet algorithm 
 Generalization: damping, nonlinear spring, and external excitation 
       A centered scheme for linear damping 
       A centered scheme for quadratic damping 
       A forward-backward discretization of the quadratic damping term 
       Implementation 
       Verification 
       Visualization 
       User interface 
       The Euler-Cromer scheme for the generalized model 
 Exercises and Problems 
       Problem 1: Use linear/quadratic functions for verification 
       Exercise 2: Show linear growth of the phase with time 
       Exercise 3: Improve the accuracy by adjusting the frequency 
       Exercise 4: See if adaptive methods improve the phase error 
       Exercise 5: Use a Taylor polynomial to compute \( u^1 \) 
       Exercise 6: Find the minimal resolution of an oscillatory function 
       Exercise 7: Visualize the accuracy of finite differences for a cosine function 
       Exercise 8: Verify convergence rates of the error in energy 
       Exercise 9: Use linear/quadratic functions for verification 
       Exercise 10: Use an exact discrete solution for verification 
       Exercise 11: Use analytical solution for convergence rate tests 
       Exercise 12: Investigate the amplitude errors of many solvers 
       Exercise 13: Minimize memory usage of a vibration solver 
       Exercise 14: Implement the solver via classes 
       Exercise 15: Interpret \( [D_tD_t u]^n \) as a forward-backward difference 
       Exercise 16: Use a backward difference for the damping term 
       Exercise 17: Analysis of the Euler-Cromer scheme 
 Applications of vibration models 
       Oscillating mass attached to a spring 
       General mechanical vibrating system 
       A sliding mass attached to a spring 
       A jumping washing machine 
       Motion of a pendulum 
       Motion of an elastic pendulum 
       Bouncing ball 
       Electric circuits 
 Exercises 
       Exercise 18: Simulate resonance 
       Exercise 19: Simulate oscillations of a sliding box 
       Exercise 20: Simulate a bouncing ball 
       Exercise 21: Simulate an elastic pendulum 
       Exercise 22: Simulate an elastic pendulum with air resistance 
 References