This textbook is intended for advanced undergraduate and beginning graduate students in mathematics seeking a solid foundation in the theory and practice of scientific computing. Students and researchers in other disciplines who want a fuller understanding of the principles underlying these algorithms will also find it useful.
The text is divided into three parts, corresponding to numerical methods for problems in calculus, differential equations, and linear algebra. Each part can be used for a one-term course (quarter or semester), making the book suitable for a two- or three-term sequence in numerical analysis or for largely independent courses on any of the three main topics.
Purchase through the SIAM bookstore (or elsewhere).
Considering adopting the book for your course? Request an examination copy from SIAM and/or ask me for further details about the book that might help in your decision.
Already adopting (adopted) the book for your course? Request a desk copy from SIAM. At the official website, you might also request PDF slides containing the figures and tables (and perhaps additional material) for each chapter, which may make it easier to refer to them during lectures.
Recommendations for additional material if/when a new edition is written? If you write to me, I will keep a record of suggestions.
Please write to me with errors (or possible errors). I will post them below, with the appropriate corrections, and will try to have as many as possible corrected in subsequent printings of the book.
Page 4, Example 1.2, Equation (1.4): 1/24 should be 1/81.
Page 320, Example 6.25: The fourth displayed Runge-Kutta "slope approximation" should be labelled $\mathbf{K}_4$, not $\mathbf{K}_2$.
Page 381, Example 8.3: There is an extraneous comma in the expression for a_{ij} in the case j = i.
Page 438, Exercise 6(a): \norm(x) should be norm(x) in the formula re=norm(x-xx)/\norm(x).
Page 448, Exercise 1: The series expansion given for the Bessel function has many (embarrasing) errors. First, it should be $J_{1/2}(t)$ instead of $J_1(t)$. The index of summation should be k, not n, and it should start at 1, not 0. The terms $t^{2j-1/2}$ should be $t^{2k-1/2}$.
Page 502, Exercise 4(b): $\sum_{i=1} p_{ij}$ should be $\sum_{i=1}^n p_{ij}$ (the upper limit was missing).
Code for many examples from the book will be provided in C (.c), MATLAB (.m), Python (.py) and Julia (.jl), or some subset of these languages. Example code in the book is given in C and/or MATLAB. You can (pretty reliably) use your favorite AI agent to translate code into your preferred language.
Chapter 1:
Chapter 2:
Chapter 3:
Polynomial interpolation at Chebyshev nodes on [a,b] via barycentric form [Set up for f(x)=1/(1+25 x^2) ] (.c) (.m)
Polynomial interpolation at uniform nodes on [a,b] via barycentric form [Set up for f(x)=1/(1+25 x^2) ] (.c) (.m)
Polynomial interpolation at generic nodes via barycentric form [Set up for f(x)=1/(1+25 x^2) ] (.m)
Divided difference table [Set up for data in Example 3.19] (.c)