Introduction

This book and course address the design and analysis of methods for computing numerical values for solutions to mathematical problems. Most often, only accurate approximations are possible rather than exact solutions, so a key mathematical goals is to assess the accuracy of such approximations.

Given that most numerical methods allow any degree of accuracy to be achieved by working hard enough, the next level of analysis is assessing cost, or equivalently speed, or more generally the efficiency of resource usage. The most natural question then is how much time and other resources are needed to achieve a given degree of accuracy.

Topics

The main areas of interest are:

  1. Finding the zeros of a function: solving \(f(x) = 0\).

  2. Solving systems of simultaneous linear equations; in matrix-vector notation, solving \(Ax = b\) for \(x\).

  3. Fitting polynomials to a collection of data points, either exactly (colocation) or approximately (least-squares).

  4. Approximating a function by a polynomial, or several polynomials.

  5. Approximating derivatives and definite integrals.

  6. Solving ordinary differential equations.

If there is time and interest, we will also look at methods for finding the minimum of a function.

Although it is the last major topic, the numerical solution of differential equations will often be mentioned earlier as a motivation for other topics. However, we start in a simpler setting: the problem of finding the zeros of a real-valued function: solving \(f(x) = 0\).

Presentation of results: notebooks and projects

The final objective in most cases is seeking understanding of a mathematical problem through observations on and analysis of numerical results, and establishing the accuracy and reliability of both the numerical results and conclusions drawn from them – not just the numbers themselves. Thus much of the work will be presented in the form of Jupyter notebooks (or in some case, if you prefer as Jupyter books like this one) that start by stating the problem[s] to be solved, discuss the choice of appropriate numerical methods to use, implement and testing them, present computed results with assessment of their accuracy and reliability, and suitably interpret the results.

That last sentence might give the impression that the actual computer programming part is a distinct minority of the whole — that is not only true, but becomes more true given the fact that the core numerical methods are already well-implemented in readily available software, such as the packages Numpy and SciPy for use with Python.

In addition to reports on homework assignments, a couple of more substantial projects will be done, presented in reports in the framework described above.

Restrictions on characters used in names

TL;DR: “Mostly letters and digits”

  • The names of Python variables (including the names of functions) must only contain letters, digits, and underscores: no dashes, spaces or other punctuation.

  • The names of files containing Python modules must follow the above restrictions — because these names are used as variables in import statements. (Apart from the period in the suffix “.py” of course.]

  • The names of notebook files have just a little more flexibility: they should only contain letters, digits, underscores and hyphens; no spaces or other punctuation. The only difference from the above is allowing hyphens. (And apart from the period in the suffix “.ipynb” of course.]
    Aside: this is roughly the same rule as for web-site addresses.
    You can get away with some other characters in some situations, but will run into problems in situations like cross-referencing to a notebook from another notebook, posting on a web-site, and using a notebook as a section in a Jupyter Book.