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