Note: PRELIMINARY VERSION (expect typos)
Finite difference discretization
A basic model for vibrations
A centered finite difference scheme
Step 1: Discretizing the domain
Step 2: Fulfilling the equation at discrete time points
Step 3: Replacing derivatives by finite differences
Step 4: Formulating a recursive algorithm
Computing the first step
The computational algorithm
Operator notation
Implementation
Making a solver function
Computing \( u^{\prime} \)
Verification
Manual calculation
Testing very simple solutions
Checking convergence rates
Long time simulations
Using a moving plot window
Making a video
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
The global error
Stability
About the accuracy at the stability limit
Alternative schemes based on 1st-order equations
Standard methods for 1st-order ODE systems
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
Energy of the exact solution
An error measure based on total 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
Constant solution
Linear solution
Quadratic solution
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 the forward-backward scheme with quadratic damping
Exercise 17: Use a backward difference for the damping term
Exercise 18: Simulate a bouncing ball
Exercise 19: Simulate an elastic pendulum
Exercise 20: Analysis of the Euler-Cromer scheme
References
Vibration problems lead to differential equations with solutions that oscillate in time, typically in a damped or undamped sinusoidal fashion. Such solutions put certain demands on the numerical methods compared to other phenomena whose solutions are monotone. Both the frequency and amplitude of the oscillations need to be accurately handled by the numerical schemes. Most of the reasoning and specific building blocks introduced in the fortcoming text can be reused to construct sound methods for partial differential equations of wave nature in multiple spatial dimensions.