Preface
The first few steps
What is a program? And what is programming?
A Matlab 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
Write and run your first program
A Matlab program with a library function
A Matlab program with vectorization and plotting
More basic concepts
Using Matlab interactively
Arithmetics, parentheses and rounding errors
Variables
Formatting text and numbers
Arrays
Plotting
Error messages and warnings
Input data
Symbolic computations
Concluding remarks
Exercises
Exercise 1: Error messages
Exercise 2: Volume of a cube
Exercise 3: Area and circumference of a circle
Exercise 4: Volumes of three cubes
Exercise 5: Average of integers
Exercise 6: Interactive computing of volume and area
Exercise 7: Update variable at command prompt
Exercise 8: Formatted print to screen
Exercise 9: Matlab documentation and random numbers
Basic constructions
If tests
Functions
For loops
While loops
Reading from and writing to files
Exercises
Exercise 10: Introducing errors
Exercise 11: Compare integers a and b
Exercise 12: Functions for circumference and area of a circle
Exercise 13: Function for area of a rectangle
Exercise 14: Area of a polygon
Exercise 15: Average of integers
Exercise 16: While loop with errors
Exercise 17: Area of rectangle versus circle
Exercise 18: Find crossing points of two graphs
Exercise 19: Sort array with numbers
Exercise 20: Compute \( \pi \)
Exercise 21: Compute combinations of sets
Exercise 22: Frequency of random numbers
Exercise 23: Game 21
Exercise 24: Linear interpolation
Exercise 25: Test straight line requirement
Exercise 26: Fit straight line to data
Exercise 27: Fit sines to straight line
Exercise 28: Count occurrences of a string in a string
Computing integrals
Basic ideas of numerical integration
The composite trapezoidal rule
The general formula
Implementation
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 29: Hand calculations for the trapezoidal method
Exercise 30: Hand calculations for the midpoint method
Exercise 31: Compute a simple integral
Exercise 32: Hand-calculations with sine integrals
Exercise 33: Make test functions for the midpoint method
Exercise 34: Explore rounding errors with large numbers
Exercise 35: Write test functions for \( \int_0^4\sqrt{x}dx \)
Exercise 36: Rectangle methods
Exercise 37: Adaptive integration
Exercise 38: Integrating x raised to x
Exercise 39: Integrate products of sine functions
Exercise 40: Revisit fit of sines to a function
Exercise 41: Derive the trapezoidal rule for a double integral
Exercise 42: 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 43: Geometric construction of the Forward Euler method
Exercise 44: Make test functions for the Forward Euler method
Exercise 45: Implement and evaluate Heun's method
Exercise 46: Find an appropriate time step; logistic model
Exercise 47: Find an appropriate time step; SIR model
Exercise 48: Model an adaptive vaccination campaign
Exercise 49: Make a SIRV model with time-limited effect of vaccination
Exercise 50: Refactor a flat program
Exercise 51: Simulate oscillations by a general ODE solver
Exercise 52: Compute the energy in oscillations
Exercise 53: Use a Backward Euler scheme for population growth
Exercise 54: Use a Crank-Nicolson scheme for population growth
Exercise 55: Understand finite differences via Taylor series
Exercise 56: Use a Backward Euler scheme for oscillations
Exercise 57: Use Heun's method for the SIR model
Exercise 58: Use Odespy to solve a simple ODE
Exercise 59: Set up a Backward Euler scheme for oscillations
Exercise 60: Set up a Forward Euler scheme for nonlinear and damped oscillations
Exercise 61: 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 62: Simulate a diffusion equation by hand
Exercise 63: Compute temperature variations in the ground
Exercise 64: Compare implicit methods
Exercise 65: Explore adaptive and implicit methods
Exercise 66: Investigate the \( \theta \) rule
Exercise 67: Compute the diffusion of a Gaussian peak
Exercise 68: Vectorize a function for computing the area of a polygon
Exercise 69: Explore symmetry
Exercise 70: Compute solutions as \( t\rightarrow\infty \)
Exercise 71: 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 72: Understand why Newton's method can fail
Exercise 73: See if the secant method fails
Exercise 74: Understand why the bisection method cannot fail
Exercise 75: Combine the bisection method with Newton's method
Exercise 76: Write a test function for Newton's method
Exercise 77: Solve nonlinear equation for a vibrating beam
References