Preface
The first few steps
What is a program? And what is programming?
A Python program with variables
The program
Dissection of the program
Why not just use a pocket calculator?
Why you must use a text editor to write programs
Installation of Python
Write and run your first program
A Python program with a library function
A Python program with vectorization and plotting
More basic concepts
Using Python interactively
Arithmetics, parentheses and rounding errors
Variables and objects
Integer division
Formatting text and numbers
Arrays
Plotting
Error messages and warnings
Input data
Symbolic computations
Concluding remarks
Exercises
Exercise 1.1: Error messages
Exercise 1.2: Volume of a cube
Exercise 1.3: Area and circumference of a circle
Exercise 1.4: Volumes of three cubes
Exercise 1.5: Average of integers
Exercise 1.6: Interactive computing of volume and area
Exercise 1.7: Peculiar results from division
Exercise 1.8: Update variable at command prompt
Exercise 1.9: Formatted print to screen
Exercise 1.10: Python documentation and random numbers
Basic constructions
If tests, colon and indentation
Functions
For loops
While loops
Lists and tuples - alternatives to arrays
Reading from and writing to files
Exercises
Exercise 2.1: Errors with colon, indent, etc.
Exercise 2.2: Compare integers a and b
Exercise 2.3: Functions for circumference and area of a circle
Exercise 2.4: Function for area of a rectangle
Exercise 2.5: Area of a polygon
Exercise 2.6: Average of integers
Exercise 2.7: While loop with errors
Exercise 2.8: Area of rectangle versus circle
Exercise 2.9: Find crossing points of two graphs
Exercise 2.10: Sort array with numbers
Exercise 2.11: Compute \( \pi \)
Exercise 2.12: Compute combinations of sets
Exercise 2.13: Frequency of random numbers
Exercise 2.14: Game 21
Exercise 2.15: Linear interpolation
Exercise 2.16: Test straight line requirement
Exercise 2.17: Fit straight line to data
Exercise 2.18: Fit sines to straight line
Exercise 2.19: Count occurrences of a string in a string
Computing integrals
Basic ideas of numerical integration
The composite trapezoidal rule
The general formula
Implementation
Making a module
Alternative flat special-purpose implementation
The composite midpoint method
The general formula
Implementation
Comparing the trapezoidal and the midpoint methods
Testing
Problems with brief testing procedures
Proper test procedures
Finite precision of floating-point numbers
Constructing unit tests and writing test functions
Vectorization
Measuring computational speed
Double and triple integrals
The midpoint rule for a double integral
The midpoint rule for a triple integral
Monte Carlo integration for complex-shaped domains
Exercises
Exercise 3.1: Hand calculations for the trapezoidal method
Exercise 3.2: Hand calculations for the midpoint method
Exercise 3.3: Compute a simple integral
Exercise 3.4: Hand-calculations with sine integrals
Exercise 3.5: Make test functions for the midpoint method
Exercise 3.6: Explore rounding errors with large numbers
Exercise 3.7: Write test functions for \( \int_0^4\sqrt{x}dx \)
Exercise 3.8: Rectangle methods
Exercise 3.9: Adaptive integration
Exercise 3.10: Integrating x raised to x
Exercise 3.11: Integrate products of sine functions
Exercise 3.12: Revisit fit of sines to a function
Exercise 3.13: Derive the trapezoidal rule for a double integral
Exercise 3.14: Compute the area of a triangle by Monte Carlo integration
Solving ordinary differential equations
Population growth
Derivation of the model
Numerical solution
Programming the Forward Euler scheme; the special case
Understanding the Forward Euler method
Programming the Forward Euler scheme; the general case
Making the population growth model more realistic
Verification: exact linear solution of the discrete equations
Spreading of diseases
Spreading of a flu
A Forward Euler method for the differential equation system
Programming the numerical method; the special case
Outbreak or not
Abstract problem and notation
Programming the numerical method; the general case
Time-restricted immunity
Incorporating vaccination
Discontinuous coefficients: a vaccination campaign
Oscillating one-dimensional systems
Derivation of a simple model
Numerical solution
Programming the numerical method; the special case
A magic fix of the numerical method
The 2nd-order Runge-Kutta method (or Heun's method)
Software for solving ODEs
The 4th-order Runge-Kutta method
More effects: damping, nonlinearity, and external forces
Illustration of linear damping
Illustration of linear damping with sinusoidal excitation
Spring-mass system with sliding friction
A finite difference method; undamped, linear case
A finite difference method; linear damping
Exercises
Exercise 4.1: Geometric construction of the Forward Euler method
Exercise 4.2: Make test functions for the Forward Euler method
Exercise 4.3: Implement and evaluate Heun's method
Exercise 4.4: Find an appropriate time step; logistic model
Exercise 4.5: Find an appropriate time step; SIR model
Exercise 4.6: Model an adaptive vaccination campaign
Exercise 4.7: Make a SIRV model with time-limited effect of vaccination
Exercise 4.8: Refactor a flat program
Exercise 4.9: Simulate oscillations by a general ODE solver
Exercise 4.10: Compute the energy in oscillations
Exercise 4.11: Use a Backward Euler scheme for population growth
Exercise 4.12: Use a Crank-Nicolson scheme for population growth
Exercise 4.13: Understand finite differences via Taylor series
Exercise 4.14: Use a Backward Euler scheme for oscillations
Exercise 4.15: Use Heun's method for the SIR model
Exercise 4.16: Use Odespy to solve a simple ODE
Exercise 4.17: Set up a Backward Euler scheme for oscillations
Exercise 4.18: Set up a Forward Euler scheme for nonlinear and damped oscillations
Exercise 4.19: Discretize an initial condition
Solving partial differential equations
Finite difference methods
Reduction of a PDE to a system of ODEs
Construction of a test problem with known discrete solution
Implementation: Forward Euler method
Application: heat conduction in a rod
Vectorization
Using Odespy to solve the system of ODEs
Implicit methods
Exercises
Exercise 5.1: Simulate a diffusion equation by hand
Exercise 5.2: Compute temperature variations in the ground
Exercise 5.3: Compare implicit methods
Exercise 5.4: Explore adaptive and implicit methods
Exercise 5.5: Investigate the \( \theta \) rule
Exercise 5.6: Compute the diffusion of a Gaussian peak
Exercise 5.7: Vectorize a function for computing the area of a polygon
Exercise 5.8: Explore symmetry
Exercise 5.9: Compute solutions as \( t\rightarrow\infty \)
Exercise 5.10: Solve a two-point boundary value problem
Solving nonlinear algebraic equations
Brute force methods
Brute force root finding
Brute force optimization
Model problem for algebraic equations
Newton's method
Deriving and implementing Newton's method
Making a more efficient and robust implementation
The secant method
The bisection method
Rate of convergence
Solving multiple nonlinear algebraic equations
Abstract notation
Taylor expansions for multi-variable functions
Newton's method
Implementation
Exercises
Exercise 6.1: Understand why Newton's method can fail
Exercise 6.2: See if the secant method fails
Exercise 6.3: Understand why the bisection method cannot fail
Exercise 6.4: Combine the bisection method with Newton's method
Exercise 6.5: Write a test function for Newton's method
Exercise 6.6: Solve nonlinear equation for a vibrating beam
Appendix: Getting access to Python
Required software
Anaconda and Spyder
Spyder on Mac
Installation of additional packages
How to write and run a Python program
The need for a text editor
Text editors
Terminal windows
Using a plain text editor and a terminal window
Spyder
The SageMathCloud and Wakari web services
Basic intro to SageMathCloud
Basic intro to Wakari
Installing your own Python packages
Writing IPython notebooks
A simple program in the notebook
Mixing text, mathematics, code, and graphics
References