# Programming for Computations (MATLAB/Octave version)¶

Contents:

- Programming for Computations (MATLAB/Octave version)
- Preface
- The first few steps
- What is a program? And what is programming?
- A Matlab program with variables
- A Matlab program with a library function
- A Matlab program with vectorization and plotting
- More basic concepts
- 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 composite midpoint method
- Testing
- Vectorization
- Measuring computational speed
- Double and triple integrals
- Derivation via one-dimensional integrals
- Direct derivation
- Programming a double sum
- Reusing code for one-dimensional integrals
- Verification via test functions
- Theory
- Implementation
- The Monte Carlo integration algorithm
- Implementation
- Verification
- Test function for function with random numbers
- Integral over a circle

- Exercises

- 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

- Population growth
- Solving partial differential equations
- Finite difference 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
- Newton’s method
- The secant method
- The bisection method
- Rate of convergence
- Solving multiple nonlinear algebraic equations
- 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
- References