1. Introduction#

This book addresses 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.

1.1. 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 (collocation) or approximately (by least-squares).

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

  5. Approximating derivatives and definite integrals.

  6. Finding the minimum of a function.

  7. Solving initial value problems for ordinary differential equations.

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\).

1.2. Julia: a New Alternative to Matlab and Python#

The two dominant dynamic programming language environments for numerical computing and graphics are

  • the open-source combination of Python with Numpy, Matplotlib, SciPy and other packages, sometime claled Python Scientific, and

  • the older, commercial product Matlab(TM).

Though I generally recommend the former, Matlab is long-established, especially in engineering fields, and has advantages in a few respects, like notation for working with matrices and vectors that is cleaner and closer to standard mathematical notation.

One more recent innovation is the Julia language, which for one thing combines many of the virtues of both:

  • Like Python, it is open source with some nice modern programming language features (some newer and improving on Python), while also being

  • more compatability in its syntax and notation with existing Matlab code and standard linear algebra notation.

  • Also, Julia code usually runs faster that either Python or Matlab.

P.S. What does Jupyter mean?

“JuPyteR” is a portmanteau of the names of three important modern open-source programming tools for scientific computing:

  • Julia,

  • Python, and

  • R (which is for statistical computing).

So in particular, Jupyter notebooks and Jupyter books work fine with Julia, and a Jupyter book can use a mix of different languages in different sections.