{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab 2: Stability and accuracy (Jan. 2020)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Hint** -- as shown in class, installing:\n", "\n", "```\n", "conda install -c conda-forge jupyter_contrib_nbextensions\n", "conda install -c conda-forge jupyter_nbextensions_configurator\n", "```\n", "\n", "and setting up the table of contents sidebar extension makes it easier\n", "to move back and forth between problems." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List of Problems\n", "\n", "Both grad and undergrad should do each of the 5 problems below and upload their solutions to canvas as a zip file with a jupyter notebook containing the solutions to Problems Accuracy and Stability and png/pdf/paper solutions to probems Error, Backward-Euler and Taylor\n", "\n", "- [Problem Error](#Problem-Error) \n", "- [Problem Accuracy](#Problem-Accuracy) \n", "- [Problem Stability](#Problem-Stability) \n", "- [Problem Backward-Euler](#Problem-Backward-Euler)\n", "- [Problem Taylor](#Problem-Taylor)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectives\n", "\n", "\n", "In Lab \\#1 you were introduced to the concept of discretization, and saw that\n", "there were many different ways to approximate a given problem. This Lab\n", "will delve further into the concepts of accuracy and stability of\n", "numerical schemes, in order that we can compare the many possible\n", "discretizations.\n", "\n", "At the end of this Lab, you will have seen where the error in a\n", "numerical scheme comes from, and how to quantify the error in terms of\n", "*order*. The stability of several examples will be demonstrated, so that\n", "you can recognize when a scheme is unstable, and how one might go about\n", "modifying the scheme to eliminate the instability.\n", "\n", "Specifically you will be able to:\n", "\n", "- Define the term and identify: Implicit numerical scheme and Explicit\n", " numerical scheme.\n", "\n", "- Define the term, identify, or write down for a given equation:\n", " Backward Euler method and Forward Euler method.\n", "\n", "- Explain the difference in terminology between: Forward difference\n", " discretization and Forward Euler method.\n", "\n", "- Define: truncation error, local truncation error, global truncation\n", " error, and stiff equation.\n", "\n", "- Explain: a predictor-corrector method.\n", "\n", "- Identify from a plot: an unstable numerical solution.\n", "\n", "- Be able to: find the order of a scheme, using the test equation find\n", " the stability of a scheme, find the local truncation error from a\n", " graph of the exact solution and the numerical solution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Readings\n", "\n", "\n", "This lab is designed to be self-contained. If you would like\n", "additional background on any of the following topics, I'd recommend this book:\n", "[Finite difference computing with PDES](https://link-springer-com.ezproxy.library.ubc.ca/book/10.1007/978-3-319-55456-3) by Hans Petter Langtangen and Svein Linge\n", "The entire book is available on [github](http://hplgit.github.io/fdm-book/doc/pub/book/html/decay-book.html) with the python code [here](https://github.com/hplgit/fdm-book/tree/master/src). Much of the content of this lab is summarized in [Appendix B -- truncation analysis](https://link-springer-com.ezproxy.library.ubc.ca/content/pdf/bbm%3A978-3-319-55456-3%2F1.pdf)\n", "\n", "\n", "### Other recommended books\n", "\n", "- **Differential Equations:**\n", "\n", " - Strang (1986), Chapter 6 (ODE’s).\n", "\n", "- **Numerical Methods:**\n", "\n", " - Strang (1986), Section 6.5 (a great overview of difference methods\n", " for initial value problems)\n", "\n", " - Burden and Faires (1981), Chapter 5 (a more in-depth analysis of the\n", " numerical methods and their accuracy and stability).\n", " \n", " - Newman (2013) Derivatives, round-off and truncation errors, Section 5.10 pp. 188-198.\n", " Forward Euler, mid-point and leapfrog methods, Chapter 8 pp. 327-335.\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction \n", "\n", "\n", "Remember from Lab \\#1  that you were introduced to three approximations\n", "to the first derivative of a function, $T^\\prime(t)$. If the independent\n", "variable, $t$, is discretized at a sequence of N points,\n", "$t_i=t_0+i \\Delta t$, where $i\n", "= 0,1,\\ldots, N$ and $\\Delta t= 1/N$, then we can write the three\n", "approximations as follows:\n", "\n", " **Forward difference formula:**\n", "\n", " $$T^\\prime(t_i) \\approx \\frac{T_{i+1}-T_i}{\\Delta t}$$\n", "\n", " **Backward difference formula:**\n", "\n", " $$T^\\prime(t_i) \\approx \\frac{T_{i}-T_{i-1}}{\\Delta t}$$\n", "\n", " **Centered difference formula:**\n", "\n", " $$T^\\prime(t_i) \\approx \\frac{T_{i+1}-T_{i-1}}{2 \\Delta t}$$\n", "\n", "In fact, there are many other possible methods to approximate the\n", "derivative (some of which we will see later in this Lab). With this\n", "large choice we have in the choice of approximation scheme, it is not at\n", "all clear at this point which, if any, of the schemes is the “best”. It\n", "is the purpose of this Lab to present you with some basic tools that\n", "will help you to decide on an appropriate discretization for a given\n", "problem. There is no generic “best” method, and the choice of\n", "discretization will always depend on the problem that is being dealt\n", "with.\n", "\n", "In an example from Lab \\#1, the forward difference formula was used to\n", "compute solutions to the saturation development equation, and you saw\n", "two important results:\n", "\n", "- reducing the grid spacing, $\\Delta t$, seemed to improve the\n", " accuracy of the approximate solution; and\n", "\n", "- if $\\Delta t$ was taken too large (that is, the grid was not fine\n", " enough), then the approximate solution exhibited non-physical\n", " oscillations, or a *numerical instability*.\n", "\n", "There are several questions that arise from this example:\n", "\n", "1. Is it always true that reducing $\\Delta t$ will improve the discrete\n", " solution?\n", "\n", "2. Is it possible to improve the accuracy by using another\n", " approximation scheme (such as one based on the backward or centered\n", " difference formulas)?\n", "\n", "3. Are these numerical instabilities something that always appear when\n", " the grid spacing is too large?\n", "\n", "4. By using another difference formula for the first derivative, is it\n", " possible to improve the stability of the approximate solution, or to\n", " eliminate the stability altogether?\n", "\n", "The first two questions, related to *accuracy*, will be dealt with in\n", "[Section 4](#Accuracy), and the last two will have to wait\n", "until [Section 5](#Stability) when *stability* is discussed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accuracy of Difference Approximations \n", "\n", "\n", "Before moving on to the details of how to measure the error in a scheme,\n", "let’s take a closer look at another example which we’ve seen already …\n", "\n", "\n", "\n", "### Example Accuracy\n", "\n", "Let’s go back to the heat conduction equation from\n", "Lab \\#1, where the temperature, $T(t)$, of a rock immersed in water or\n", "air, evolves in time according to the first order ODE:\n", "$$\\frac{dT}{dt} = \\lambda(T,t) \\, (T-T_a) $$ with initial condition $T(0)$. We saw\n", "in the section on the forward Euler method  that one way to discretize\n", "this equation was using the forward difference formula  for the\n", "derivative, leading to\n", "\n", "$T_{i+1} = T_i + \\Delta t \\, \\lambda(T_i,t_i) \\, (T_i-T_a).$ (**eq: euler**)\n", "\n", "Similarly, we could apply either of the other two difference formulae,\n", "or , to obtain other difference schemes, namely what we called the\n", "*backward Euler method*\n", "\n", "$T_{i+1} = T_i + \\Delta t \\, \\lambda(T_{i+1},t_{i+1}) \\, (T_{i+1}-T_a),$ (**eq: beuler**)\n", "\n", "and the *mid-point* or *leap frog method*\n", "\n", "$T_{i+1} = T_{i-1} + 2 \\Delta t \\, \\lambda(T_{i},t_{i}) \\, (T_{i}-T_a).$ (**eq: midpoint**)\n", "\n", "The forward Euler and mid-point schemes are called *explicit methods*,\n", "since they allow the temperature at any new time to be computed in terms\n", "of the solution values at previous time steps. The backward Euler\n", "scheme, on the other hand, is called an *implicit scheme*, since it\n", "gives an equation defining $T_{i+1}$ implicitly (If $\\lambda$ depends\n", "non-linearly on $T$, then this equation may require an additional step,\n", "involving the iterative solution of a non-linear equation. We will pass\n", "over this case for now, and refer you to a reference such as\n", "Burden and Faires for the details on non-linear solvers such as *Newton’s\n", "method*)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Important point**: Note that **eq: midpoint** requires the value of the temperature at two points: $T_{i-1}$ and \n", "$T_{i}$ to calculate the temperature $T_{i+1}$. This requires an approximate guess for $T_i$, which we will discuss\n", "in more detail below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For now, let’s assume that $\\lambda$ is a constant, independent of $T$\n", "and $t$. Plots of the numerical results from each of these schemes,\n", "along with the exact solution, are given in Figure 1\n", "(with the “unphysical” parameter value $\\lambda=0.8$ chosen to enhance\n", "the show the growth of numerical errors, even though in a real material\n", "this would violate conservation of energy).\n", "\n", "The functions used in make the following figure are imported from [lab2_functions.py](https://github.com/phaustin/numeric/blob/master/numlabs/lab2/lab2_functions.py)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "******************************\n", "context imported. Front of path:\n", "/Users/phil/repos/numeric\n", "back of path: /Users/phil/.ipython\n", "******************************\n", "\n", "through /Users/phil/repos/numeric/notebooks/lab2/context.py\n" ] }, { "data": { "image/png": "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Mz09PTf02qV0I2MMhUI0NTWxadOmdzyeyN+/61nOx96NWm7H3nwt12NvvlbCcTc0NERnZydlZWXveHwhj7+EuIav3uNGAYPBMK/nzOe1S+1Gxnju3DleffVV/umf/mnusS9/+cukp6czOTnJV77yFXJzc6murl608d6o+cxv1apVfOc738Fut3Pq1Cm+/vWv8/jjj6+479/JkyffUTFC4n//rmc5H3s3Yjkee/OxnI+9+Vrux10wGOSb3/wmn/3sZ3E6ne/42kIefwlR4WdkZLzjNNro6Ojcpjpvf87IyMi7njOf1y61+Y6xq6uL7373u/z93/89ycnJc4+np6cDkJqaSkNDAxcvXlz8Qd+A+czP6XTO7Zh42223EYvFmJqaWlHfP9BPK95+++3veCzRv3/Xs5yPvflarsfefCznY2++lvNxF41G+eY3v8m2bdtobGx819cX8vhLiMAvLS1lYGCAoaEhotEohw8fZsOGDe94zv/f3r2HRPG1ARz/6q6bF9L1lqZiYEZhUVhBWmatfwRhNyTLojsUkWs3KCEsioIoCsouGunqdiGhKCiiKIOUyiJKk7KLXSwtNbfVylbJdff9Q96hffP36ttbednn89eenTNn5sxweHZmds4zfvx4iouLsdvtvHjxAk9PT3x9fbu1bk/rzj6aTCb27duHXq93SADR2tpKS0uL8rm8vJzw8PC/uv9d6U7/mpqalF+kL1++xGazMQxiAgoAAAegSURBVHDgwH5z/gAsFgsVFRUOy/rC+etKXx573dGXx1539OWx1x19edzZ7Xays7MJDQ1lxowZndb5neOv10y88/DhQ4xGIzabDZ1OR1JSEteuXQNg2rRp2O12cnNzefToERqNhjVr1jB06NB/XLe36ap/2dnZ3Lt3T3lW8+/XSOrr69m3bx8A7e3txMXF9cn+Xb16lWvXrqFSqdBoNCxZsoThw4f/47q9TVf9A7h58yZlZWWsX79eWa8vnL8DBw5QUVHB169f8fHxYd68eVitVqB/jL2u+tfXx15X/evLY6+rvkHfHXcAz549Y9u2bYSHhyu34xcsWKBc0f/u8ddrAr4QQggh/pxecUtfCCGEEH+WBHwhhBDCCUjAF0IIIZyABHwhhBDCCUjAF0IIIZyABHwhegmTycTixYux2Wx/ZXvXr18nPz//r2zr/7V9+3Zu3LjxX+u0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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import context\n", "import matplotlib.pyplot as plt\n", "from numlabs.lab2.lab2_functions import euler,beuler,leapfrog\n", "import numpy as np\n", "plt.style.use('ggplot')\n", "#\n", "# save our three functions to a dictionary, keyed by their names\n", "#\n", "theFuncs={'euler':euler,'beuler':beuler,'leapfrog':leapfrog}\n", "#\n", "# store the results in another dictionary\n", "#\n", "output={}\n", "#\n", "#end time = 10 seconds\n", "#\n", "tend=10.\n", "#\n", "# start at 30 degC, air temp of 20 deg C\n", "#\n", "Ta=20.\n", "To=30.\n", "#\n", "# note that lambda is a reserved keyword in python so call this\n", "# thelambda\n", "#\n", "theLambda=0.8 #units have to be per minute if time in seconds\n", "#\n", "# dt = 10/npts = 10/30 = 1/3\n", "#\n", "npts=30\n", "for name,the_fun in theFuncs.items():\n", " output[name]=the_fun(npts,tend,To,Ta,theLambda)\n", "#\n", "# calculate the exact solution for comparison\n", "#\n", "exactTime=np.linspace(0,tend,npts)\n", "exactTemp=Ta + (To-Ta)*np.exp(theLambda*exactTime)\n", "#\n", "# now plot all four curves\n", "#\n", "fig,ax=plt.subplots(1,1,figsize=(8,8))\n", "ax.plot(exactTime,exactTemp,label='exact',lw=2)\n", "for fun_name in output.keys():\n", " the_time,the_temp=output[fun_name]\n", " ax.plot(the_time,the_temp,label=fun_name,lw=2)\n", "ax.set_xlim([0,2.])\n", "ax.set_ylim([30.,90.])\n", "ax.grid(True)\n", "ax.set(xlabel='time (seconds)',ylabel='bar temp (deg C)')\n", "out=ax.legend(loc='upper left')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Figure 1** A plot of the exact and computed solutions for the temperature of a\n", "rock, with parameters: $T_a=20$, $T(0)=30$, $\\lambda= +0.8$,\n", "$\\Delta t=\\frac{1}{3}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice from these results that the centered/leapfrog scheme is the most accurate,\n", "and backward Euler the least accurate.\n", "\n", "The next section explains why some schemes are more accurate than\n", "others, and introduces a means to quantify the accuracy of a numerical\n", "approximation.\n", "\n", "### Round-off Error and Discretization Error \n", "\n", "From [Example Accuracy](#ex_accuracy) and the example in the Forward Euler\n", "section of the previous lab,  it is obvious that a numerical\n", "approximation is exactly that - **an approximation**. The process of\n", "discretizing a differential equation inevitably leads to errors. In this\n", "section, we will tackle two fundamental questions related to the\n", "accuracy of a numerical approximation:\n", "\n", "- Where does the error come from (and how can we measure it)?\n", "\n", "- How can the error be controlled?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Where does the error come from? \n", "\n", "#### Round-off error:\n", "\n", "When attempting to solve differential equations on a computer, there are\n", "two main sources of error. The first, *round-off error*, derives from\n", "the fact that a computer can only represent real numbers by *floating\n", "point* approximations, which have only a finite number of digits of\n", "accuracy.\n", "\n", "* Mathematical note [floating point notation](#floating-point)\n", "\n", "\n", "For example, we all know that the number $\\pi$ is a non-repeating\n", "decimal, which to the first twenty significant digits is\n", "$3.1415926535897932385\\dots$ Imagine a computer which stores only eight\n", "significant digits, so that the value of $\\pi$ is rounded to\n", "$3.1415927$.\n", "\n", "In many situations, these five digits of accuracy may be sufficient.\n", "However, in some cases, the results can be catastrophic, as shown in the\n", "following example: $$\\frac{\\pi}{(\\pi + 0.00000001)-\\pi}.$$ Since the\n", "computer can only “see” 8 significant digits, the addition\n", "$\\pi+0.00000001$ is simply equal to $\\pi$ as far as the computer is\n", "concerned. Hence, the computed result is $\\frac{1}{0}$ - an undefined\n", "expression! The exact answer $100000000\\pi$, however, is a very\n", "well-defined non-zero value." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Truncation error:\n", "\n", "The second source of error stems from the discretization of the problem,\n", "and hence is called *discretization error* or *truncation error*. In\n", "comparison, round-off error is always present, and is independent of the\n", "discretization being used. The simplest and most common way to analyse\n", "the truncation error in a scheme is using *Taylor series expansions*.\n", "\n", "Let us begin with the forward difference formula for the first\n", "derivative, , which involves the discrete solution at times $t_{i+1}$\n", "and $t_{i}$. Since only continuous functions can be written as Taylor\n", "series, we expand the exact solution (instead of the discrete values\n", "$T_i$) at the discrete point $t_{i+1}$:\n", "\n", "$$T(t_{i+1}) = T(t_i+\\Delta t) = T(t_i) + (\\Delta t) T^\\prime(t_i) + \n", " \\frac{1}{2}(\\Delta t)^2 T^{\\prime\\prime}(t_i) +\\cdots$$\n", "\n", "Rewriting to clean this up slightly gives **eq: feuler**\n", "\n", "\n", "$$\\begin{aligned}\n", "T(t_{i+1}) &= T(t_i) + \\Delta t T^{\\prime}(t_i,T(t_i)) +\n", " \\underbrace{\\frac{1}{2}(\\Delta t)^2T^{\\prime\\prime}(t_i) + \\cdots}\n", "_{\\mbox{ truncation error}} \\\\ \\; \n", " &= T(t_i) + \\Delta t T^{\\prime}(t_i) + {\\cal O}(\\Delta t^2).\n", " \\end{aligned}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This second expression writes the truncation error term in terms of\n", "*order notation*. If we write $y = {\\cal O}(\\Delta t)$, then we mean\n", "simply that $y < c \\cdot \\Delta t$ for some constant $c$, and we say that\n", "“ $y$ is first order in $\\Delta t$ ” (since it depends on $\\Delta t$ to\n", "the first power) or “ $y$ is big-oh of $\\Delta t$.” As $\\Delta t$ is\n", "assumed small, the next term in the series, $\\Delta t^2$ is small\n", "compared to the $\\Delta t$ term. In words, we say that forward euler is\n", "*first order accurate* with errors of second order.\n", "\n", "It is clear from that as $\\Delta t$ is reduced in size (as the\n", "computational grid is refined), the error is also reduced. If you\n", "remember that we derived the approximation from the limit definition of\n", "derivative, then this should make sense. This dependence of the error on\n", "powers of the grid spacing $\\Delta t$ is an underlying characteristic of\n", "difference approximations, and we will see approximations with higher\n", "orders in the coming sections …\n", "\n", "There is one more important distinction to be made here. The “truncation\n", "error” we have been discussing so far is actually what is called *local\n", "truncation error*. It is “local” in the sense that we have expanded the\n", "Taylor series *locally* about the exact solution at the point $t_i$.\n", "\n", "There is also a *global truncation error* (or, simply, *global error*),\n", "which is the error made during the course of the entire computation,\n", "from time $t_0$ to time $t_n$. The difference between local and global\n", "truncation error is illustrated in Figure 2. If the local error stays approximately\n", "constant, then the global error will be approximately the local error times\n", "the number of timesteps, or about one order of $\\Delta t$ worse than the local error." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Figure Error: ** Local and global truncation error. \n", "\n", "It is easy to get a handle on the order of the local truncation error\n", "using Taylor series, regardless of whether the exact solution is known,\n", "but no similar analysis is available for the global error. We can write\n", "\n", "$$\\text{global error} = |T(t_n)-T_n|$$\n", "\n", "but this expression can only be\n", "evaluated if the exact solution is known ahead of time (which is not the\n", "case in most problems we want to compute, since otherwise we wouldn’t be\n", "computing it in the first place!). Therefore, when we refer to\n", "truncation error, we will always be referring to the local truncation\n", "error." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Second order accuracy\n", "\n", "Above we mentioned a problem with evaluating the mid-point method. If we start with three points $(t_0,t_1,t_2)$, \n", "each separated by $\\Delta t/2$ so that $t_2 - t_0=\\Delta t$\n", "\n", "\\begin{align}\n", "y(t_2)&=y(t_1) + y^\\prime (t_1,y(t_1))(t_2 - t_1) + \\frac{y^{\\prime \\prime}(t_1,y(t_1))}{2} (t_2 - t_1)^2 + \\frac{y^{\\prime \\prime \\prime}(t_1,y(t_1))}{6} (t_2 - t_1)^3 + h.o.t. \\ (eq.\\ a)\\\\\n", "y(t_0)&=y(t_1) + y^\\prime (t_1,y(t_1))(t_0 - t_1) + \\frac{y^{\\prime \\prime}(t_1)}{2} (t_0 - t_1)^2 + \\frac{y^{\\prime \\prime \\prime}(t_1)}{6} (t_0 - t_1)^3 + h.o.t. \\ (eq.\\ b)\n", "\\end{align}\n", "\n", "\n", "where h.o.t. stands for \"higher order terms\". Rewriting in terms of $\\Delta t$:\n", "\n", "\n", "\\begin{align}\n", "y(t_2)&=y(t_1) + \\frac{\\Delta t}{2}y^\\prime (t_1,y(t_1)) + \\frac{\\Delta t^2}{8} y^{\\prime \\prime}(t_1,y(t_1)) + \\frac{\\Delta t^3}{48} y^{\\prime \\prime \\prime}(t_1,y(t_1)) + h.o.t. \\ (eq.\\ a)\\\\\n", "y(t_0)&=y(t_1) - \\frac{\\Delta t}{2}y^\\prime (t_1,y(t_1)) + \\frac{\\Delta t^2}{8} y^{\\prime \\prime}(t_1,y(t_1)) - \\frac{\\Delta t^3}{48} y^{\\prime \\prime \\prime}(t_1,y(t_1)) + h.o.t. \\ (eq.\\ b)\n", "\\end{align}\n", "\n", "\n", "and subtracting:\n", "\n", "\\begin{align}\n", "y(t_2)&=y(t_0) + \\Delta t y^\\prime (t_1,y(t_1)) + \\frac{\\Delta t^3}{24} y^{\\prime \\prime \\prime}(t_1,y(t_1)) + h.o.t. \\ (eq.\\ c)\n", "\\end{align}\n", "\n", "where $t_1=t_0 + \\Delta t/2$\n", "\n", "Comparing with [eq: feuler](#eq: feuler) we can see that we've canceled the $\\Delta t^2$ terms, so that\n", "if we drop the $\\frac{\\Delta t^3}{24} y^{\\prime \\prime \\prime}(t_1,y(t_1))$\n", "and higher order terms we're doing one order better that foward euler, as long as we can solve the problem of\n", "estimating y at the midpoint: $y(t_1) = y(t_0 + \\Delta t/2)$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### mid-point and leapfrog\n", "\n", "The mid-point and leapfrog methods take two slightly different approaches to estimating $y(t_0 + \\Delta t/2)$. \n", "For the [explicit mid-point method](https://en.wikipedia.org/wiki/Midpoint_method), we estimate $y$ at\n", "the midpoint by taking a half-step:\n", "\n", "\n", "\\begin{align}\n", "k_1 & = \\Delta t y^\\prime(t_0,y(t_0)) \\\\\n", "k_2 & = \\Delta t y^\\prime(t_0 + \\Delta t/2,y(t_0) + k_1/2) \\\\\n", "y(t_0 + \\Delta t) &= y(t_0) + k_2\n", "\\end{align}\n", "\n", "\n", "Compare this to the [leapfrog method](https://en.wikipedia.org/wiki/Leapfrog_integration), which uses the results\n", "from one half-interval to calculate the results for the next half-interval:\n", "\n", "\n", "\\begin{align}\n", "y(t_0 + \\Delta t/2) & = y(t_0) + \\frac{\\Delta t}{2} y^\\prime(t_0,y(t_0))\\ (i) \\\\\n", "y(t_0 + \\Delta t) & = y(t_0) + \\Delta t y^\\prime(t_0 + \\Delta t/2,y(t_0 + \\Delta t/2)\\ (ii)\\\\\n", "y(t_0 + 3 \\Delta t/2) & = y(t_0 + \\Delta t/2) + \\Delta t y^\\prime(t_0 + \\Delta t,y(t_0 + \\Delta t))\\ (iii) \\\\\n", "y(t_0 + 2 \\Delta t) & = y(t_0 + \\Delta t) + \\Delta t y^\\prime(t_0 + 3\\Delta t/2,y(t_0 + 3 \\Delta t/2))\\ (iv) \\\\\n", "\\end{align}\n", "\n", "\n", "Comparing (iii) and (iv) shows how the method gets its name: the half-interval and whole interval values\n", "are calculated by leaping over each other. Once the first half and whole steps are done, the rest of the\n", "integration is completed by repeating (iii) and (iv) as until the endpoint is reached.\n", "\n", "The leapfrog scheme has the advantage that it is *time reversible* or as the Wikipedia article says *sympletic*. \n", "This means that estimating $y(t_1)$ and then using that value to go backwards by $-\\Delta t$ yields $y(t_0)$\n", "exactly, which the mid-point method does not. The mid-point method, however, is one member (the 2nd order member)\n", "of a family of *Runge Kutta* integrators, which will be covered in more detail in Lab 4.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "### Problem Error -- hand-in png file or paper\n", "\n", "- a\\) Derive the error term for the backward difference formula using\n", " Taylor series, and hence show that it is also first order.\n", "\n", "- b\\) How does the constant in front of the leading order error term differ\n", " from that for the forward difference formula? Relate this back to the\n", " results plotted in [Figure error](#fig_error), where these two formulae\n", " were used to derive difference schemes for the heat conduction problem. (i.e., explain why\n", " backward euler is an overestimate and forward euler is an underestimate of the exact\n", " solution)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How can we control the error? \n", "\n", "Now that we’ve determined the source of the error in numerical methods,\n", "we would like to find a way to control it; that is, we would like to be\n", "able to compute and be confident that our approximate solution is\n", "“close” to the exact solution. Round-off error is intrinsic to all\n", "numerical computations, and cannot be controlled (except to develop\n", "methods that do not magnify the error unduly … more on this later).\n", "Truncation error, on the other hand, *is* under our control.\n", "\n", "In the simple ODE examples that we’re dealing with in this lab, the\n", "round-off error in a calculation is much smaller than the truncation\n", "error. Furthermore, the schemes being used are *stable with respect to\n", "round-off error* in the sense that round-off errors are not magnified in\n", "the course of a computation. So, we will restrict our discussion of\n", "error control in what follows to the truncation error.\n", "\n", "However, there are many numerical algorithms in which the round-off\n", "error can dominate the the result of a computation (Gaussian elimination\n", "is one example, which you will see in Lab \\#3 ), and so we must always\n", "keep it in mind when doing numerical computations.\n", "\n", "There are two fundamental ways in which the truncation error in an\n", "approximation  can be reduced:\n", "\n", "1. Decrease the grid spacing, . Provided that the second derivative of\n", " the solution is bounded, it is clear from the error term in  that as\n", "   is reduced, the error will also get smaller. This principle was\n", " demonstrated in an example from Lab \\#1. The disadvantage to\n", " decreasing  is that the cost of the computation increases since more\n", " steps must be taken. Also, there is a limit to how small  can be,\n", " beyond which round-off errors will start polluting the computation.\n", "\n", "2. Increase the order of the approximation. We saw above that the\n", " forward difference approximation of the first derivative is first\n", " order accurate in the grid spacing. It is also possible to derive\n", " higher order difference formulas which have a leading error term of\n", " the form $(\\Delta t)^p$, with $p>1$. As noted above in [Section Second Order](#sec_secondOrder)\n", " in the midpoint formula\n", " is a second order scheme, and some further examples will be given in\n", " [Section Higher order Taylor](#sec_HigherOrderTaylor). The main disadvantage to using\n", " very high order schemes is that the error term depends on higher\n", " derivatives of the solution, which can sometimes be very large – in\n", " this case, the stability of the scheme can be adversely affected\n", " (for more on this, see [Section Stability](#sec_stability).\n", "\n", "\n", "\n", "
\n", " \n", "### Problem Accuracy: hand in as part of a jupyter notebook\n", "\n", "In order to investigate these two approaches to\n", "improving the accuracy of an approximation, you can use the code in\n", "[terror.py](https://github.com/phaustin/numeric/blob/master/numlabs/lab2/terror2.py)\n", "to play with the solutions to the heat\n", "conduction equation. For a given function $\\lambda(T)$, and specified\n", "parameter values, you should experiment with various time steps and\n", "schemes, and compare the computed results (Note: only the answers to the\n", "assigned questions need to be handed in). Look at the different schemes\n", "(euler, leapfrog, midpoint, 4th order runge kutta) run them for various total\n", "times (tend) and step sizes (dt=tend/npts).\n", "\n", "The three schemes that will be used here are forward Euler (first\n", "order), leap frog (second order) and the fourth order Runge-Kutta scheme\n", "(which will be introduced in Lab 4).\n", "\n", "To hand in: Try three different step sizes for all three schemes for a\n", "total of 9 runs. It’s helpful to be able to change the axis limits to\n", "look at various parts of the plot." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use your 9 results to answer parts a and b below. (The leap-frog scheme\n", "should give you quasi-pathological results, see the explanation at the\n", "end of section 5)\n", "\n", "- a\\) Does increasing the order of the scheme, or decreasing the time step\n", " always improve the solution?\n", "\n", "- b\\) How would you compute the local truncation error from the error plot?\n", " And the global error? Do this on a plot for one set of parameters.\n", "\n", "- c\\) Similarly, how might you estimate the *order* of the local truncation\n", " error? The order of the global error? ( **Hint:** An order $p$ scheme\n", " has truncation error that looks like $c\\cdot(\\Delta t)^p$. Read the\n", " error off the plots for several values of the grid spacing and use this\n", " to find $p$.) Are the local and global error significantly different?\n", " Why or why not?\n", "\n", "### Other Approximations to the First Derivative \n", "\n", "The Taylor series method of deriving difference formulae for the first\n", "derivative is the simplest, and can be used to obtain approximations\n", "with even higher order than two. There are also many other ways to\n", "discretize the derivatives appearing in ODE’s, as shown in the following\n", "sections…" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Higher Order Taylor Methods \n", "\n", "As mentioned earlier, there are many other possible approximations to\n", "the first derivative using the Taylor series approach. The basic\n", "approach in these methods is as follows:\n", "\n", "1. expand the solution in a Taylor series at one or more points\n", " surrounding the point where the derivative is to be approximated\n", " (for example, for the centered scheme, you used two points,\n", " $T(t_i+\\Delta t)$ and $T(t_i-\\Delta t)$. You also have to make sure that you\n", " expand the series to a high enough order …\n", "\n", "2. take combinations of the equations until the $T_i$ (and possibly\n", " some other derivative) terms are eliminated, and all you’re left\n", " with is the first derivative term.\n", "\n", "One example is the fourth-order centered difference formula for the\n", "first derivative:\n", "$$\\frac{-T(t_{i+2})+8T(t_{i+1})-8T(t_{i-1})+T(t_{i-2})}{12\\Delta t} =\n", " T^\\prime(t_i) + {\\cal O}((\\Delta t)^4)$$\n", "\n", "**Quiz:** Try the quiz at [this\n", "link](https://phaustin.github.io/numeric/quizzes2/order.html)\n", "related to this higher order scheme." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predictor-Corrector Methods \n", "\n", "Another class of discretizations are called *predictor-corrector\n", "methods*. Implicit methods can be difficult or expensive to use because\n", "of the solution step, and so they are seldom used to integrate ODE’s.\n", "Rather, they are often used as the basis for predictor-corrector\n", "algorithms, in which a “prediction” for $T_{i+1}$ based only on an\n", "explicit method is then “corrected” to give a better value by using this\n", "precision in an implicit method.\n", "\n", "To see the basic idea behind these methods, let’s go back (once again)\n", "to the backward Euler method for the heat conduction problem which\n", "reads:\n", "$$T_{i+1} = T_{i} + \\Delta t \\, \\lambda( T_{i+1}, t_{i+1} ) \\, ( T_{i+1}\n", "- T_a ).$$ Note that after applying the backward difference formula ,\n", "all terms in the right hand side are evaluated at time $t_{i+1}$.\n", "\n", "Now, $T_{i+1}$ is defined implicitly in terms of itself, and unless\n", "$\\lambda$ is a very simple function, it may be very difficult to solve\n", "this equation for the value of $T$ at each time step. One alternative,\n", "mentioned already, is the use of a non-linear equation solver such as\n", "Newton’s method to solve this equation. However, this is an iterative\n", "scheme, and can lead to a lot of extra expense. A cheaper alternative is\n", "to realize that we could try estimating or *predicting* the value of\n", "$T_{i+1}$ using the simple explicit forward Euler formula and then use\n", "this in the right hand side, to obtain a *corrected* value of $T_{i+1}$.\n", "The resulting scheme, $$\\begin{array}{ll}\n", " \\mathbf{Prediction}: & \\widetilde{T}_{i+1} = T_i + \\Delta t \\,\n", " \\lambda(T_i,t_i) \\, (T_i-T_a), \\\\ \\; \\\\\n", " \\mathbf{Correction}: & T_{i+1} = T_i + \\Delta t \\,\n", " \\lambda(\\widetilde{T}_{i+1},t_{i+1}) \\, (\\widetilde{T}_{i+1}-T_a).\n", "\\end{array}$$\n", "\n", "This method is an explicit scheme, which can also be shown to be second\n", "order accurate in . It is the simplest in a whole class of schemes\n", "called *predictor-corrector schemes* (more information is available on\n", "these methods in a numerical analysis book such as  @burden-faires)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Other Methods \n", "\n", "The choice of methods is made even greater by two other classes of\n", "schemes:\n", "\n", " **Runge-Kutta methods:**\n", "\n", " We have already seen two examples of the Runge-Kutta family of integrators: Forward Euler is\n", " a first order Runge-Kutta, and the midpoint method is second order Runge-Kutta. Fourth\n", " and fifth order Runge-Kutta algorithms\n", " which will be described in Labs #4 and #5\n", "\n", " **Multi-step methods:**\n", "\n", " which use values of the solution at more than one previous time step\n", " in order to increase the accuracy. Compare these to one-step\n", " schemes, such as forward Euler, which use the solution only at one\n", " previous step.\n", "\n", "More can be found on these (and other) methods in  Burden and Faires and Newman." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Accuracy Summary\n", "\n", "In this section, you’ve been given a short overview of the accuracy of\n", "difference schemes for first order ordinary differential equations.\n", "We’ve seen that accuracy can be improved by either decreasing the grid\n", "spacing, or by choosing a higher order scheme from one of several\n", "classes of methods. When using a higher order scheme, it is important to\n", "realize that the cost of the computation usually rises due to an added\n", "number of function evaluations (especially for multi-step and\n", "Runge-Kutta methods). When selecting a numerical scheme, it is important\n", "to keep in mind this trade-off between accuracy and cost.\n", "\n", "However, there is another important aspect of discretization that we\n", "have pretty much ignored. The next section will take a look at schemes\n", "of various orders from a different light, namely that of *stability*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stability of Difference Approximations\n", "\n", "The easiest way to introduce the concept of stability is for you to see\n", "it yourself.\n", "\n", "\n", "\n", "
\n", "\n", "### Problem Stability -- hand in as part of a jupyter notebook\n", "\n", "This example is a slight modification of\n", "[Problem accuracy](#Problem-Accuracy) from the previous section on accuracy. We\n", "will add one scheme (backward euler) and drop the 4th order Runge-Kutta,\n", "and change the focus from error to stability. The value of $\\lambda$ is\n", "assumed a constant, so that the backward Euler scheme results in an\n", "explicit method, and we’ll also compute a bit further in time, so that\n", "any instability manifests itself more clearly. Run the \n", "[stability2.py](https://github.com/phaustin/numeric/blob/master/numlabs/lab2/stability2.py) script in ipython or the notebook with $\\lambda= -8\\ s^{-1}$, with $\\Delta t$ values\n", "that just straddle the stability condition for the forward euler scheme\n", "($\\Delta t < \\frac{-2}{\\lambda}$, derived below). Hand in plots with\n", "comments that show that 1) the stability condition does in fact predict\n", "the onset of the instablity in the euler scheme, and 2) the backward\n", "euler and leapfrog are either stable or unstable for the same $\\Delta t$\n", "values. (you should run out to longer than tend=10 seconds to see if\n", "there is a delayed instability.)\n", "\n", "The heat conduction problem, as you saw in Lab \\#1, has solutions that\n", "are stable when $\\lambda<0$. It is clear from\n", "[Problem stability](#Problem-Stability) above that some higher order schemes\n", "(namely, the leap-frog scheme) introduce a spurious oscillation not\n", "present in the continuous solution. This is called a *computational* or\n", "*numerical instability*, because it is an artifact of the discretization\n", "process only. This instability is not a characteristic of the heat\n", "conduction problem alone, but is present in other problems where such\n", "schemes are used. Furthermore, as we will see below, even a scheme such\n", "as forward Euler can be unstable for certain problems and choices of the\n", "time step." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is a way to determine the stability properties of a scheme, and\n", "that is to apply the scheme to the *test equation*\n", "$$\\frac{dz}{dt} = \\lambda z$$ where\n", "$\\lambda$ is a complex constant.\n", "\n", "The reason for using this equation may not seem very clear. But if you\n", "think in terms of $\\lambda z$ as being the linearization of some more\n", "complex right hand side, then the solution to is $z=e^{\\lambda t}$, and\n", "so $z$ represents, in some sense, a Fourier mode of the solution to the\n", "linearized ODE problem. We expect that the behaviour of the simpler,\n", "linearized problem should mimic that of the original problem.\n", "\n", "Applying the forward Euler scheme to this test equation, results in the\n", "following difference formula $$z_{i+1} = z_i+(\\lambda \\Delta t)z_i$$\n", "which is a formula that we can apply iteratively to $z_i$ to obtain\n", "$$\\begin{aligned}\n", "z_{i+1} &=& (1+\\lambda \\Delta t)z_{i} \\\\\n", " &=& (1+\\lambda \\Delta t)^2 z_{i-1} \\\\\n", " &=& \\cdots \\\\\n", " &=& (1+\\lambda \\Delta t)^{i+1} z_{0}.\\end{aligned}$$ The value\n", "of $z_0$ is fixed by the initial conditions, and so this difference\n", "equation for $z_{i+1}$ will “blow up” as $i$ gets bigger, if the factor\n", "in front of $z_0$ is greater than 1 in magnitude – this is a sign of\n", "instability. Hence, this analysis has led us to the conclusion that if\n", "$$|1+\\lambda\\Delta t| < 1,$$ then the forward Euler method is stable.\n", "For *real* values of $\\lambda<0$, this inequality can be shown to be\n", "equivalent to the *stability condition*\n", "$$\\Delta t < \\frac{-2}{\\lambda},$$ which is a restriction on how large\n", "the time step can be so that the numerical solution is stable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", "\n", "### Problem Backward Euler -- hand in png file or paper\n", "\n", "Perform a similar analysis for the\n", "backward Euler formula, and show that it is *always stable* when\n", "$\\lambda$ is real and negative.\n", "\n", "#### Example: leap-frog\n", "\n", "*Now, what about the leap frog scheme?*\n", "\n", "Applying the test equation to the leap frog scheme results in the\n", "difference equation $$z_{i+1} = z_{i-1} + 2 \\lambda \\Delta t z_i.$$\n", "Difference formulas such as this one are typically solved by looking for\n", "a solution of the form $z_i = w^i$ which, when substituted into this\n", "equation, yields $$w^2 - 2\\lambda\\Delta t w - 1 = 0,$$ a quadratic\n", "equation with solution\n", "$$w = \\lambda \\Delta t \\left[ 1 \\pm \\sqrt{1+\\frac{1}{(\\lambda\n", " \\Delta t)^2}} \\right].$$ The solution to the original difference\n", "equation, $z_i=w^i$ is stable only if all solutions to this quadratic\n", "satisfy $|w|<1$, since otherwise, $z_i$ will blow up as $i$ gets large.\n", "\n", "The mathematical details are not important here – what is important is\n", "that there are two (possibly complex) roots to the quadratic equation\n", "for $w$, and one is *always* greater than 1 in magnitude *unless*\n", "$\\lambda$ is pure imaginary ( has real part equal to zero), *and*\n", "$|\\lambda \\Delta t|<1$. For the heat conduction equation in\n", "[Problem Stability](#prob_stability) (which is already of the same form as the\n", "test equation ), $\\lambda$ is clearly not imaginary, which explains the\n", "presence of the instability for the leap-frog scheme.\n", "\n", "Nevertheless, the leap frog scheme is still useful for computations. In\n", "fact, it is often used in geophysical applications, as you will see\n", "later on when discretizing , and ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An example of where the leap frog scheme is superior to the other first\n", "order schemes is for undamped periodic motion (which arose in the\n", "weather balloon example from Lab \\#1 ). This corresponds to the system\n", "of ordinary differential equations (with the damping parameter, $\\beta$,\n", "taken to be zero): $$\\frac{dy}{dt} = u,$$\n", "$$\\frac{du}{dt} = - \\frac{\\gamma}{m} y.$$ You’ve already discretized\n", "this problem using the forward difference formula, and the same can be\n", "done with the second order centered formula. We can then compare the\n", "forward Euler and leap-frog schemes applied to this problem. We code this\n", "in the module\n", "\n", "Solution plots are given in [Figure oscilator](#fig_oscillator), for\n", "parameters $\\gamma/m=1$, $\\Delta t=0.25$, $y(0)=0.0$ and $u(0)=1.0$, and\n", "demonstrate that the leap-frog scheme is stable, while forward Euler is\n", "unstable. This can easily be explained in terms of the stability\n", "criteria we derived for the two schemes when applied to the test\n", "equation. The undamped oscillator problem is a linear problem with pure\n", "imaginary eigenvalues, so as long as $|\\sqrt{\\gamma/m}\\Delta t|<1$, the\n", "leap frog scheme is stable, which is obviously true for the parameter\n", "values we are given. Furthermore, the forward Euler stability condition\n", "$|1+\\lambda\\Delta\n", " t|<1$ is violated for any choice of time step (when $\\lambda$ is pure\n", "imaginary) and so this scheme is always unstable for the undamped\n", "oscillator. The github link to the oscillator module is [oscillator.py](https://github.com/phaustin/numeric/blob/master/numlabs/lab2/oscillator.py)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numlabs.lab2.oscillator as os\n", "the_times=np.linspace(0,20.,80)\n", "yvec_init=[0,1]\n", "output_euler=os.euler(the_times,yvec_init)\n", "output_mid=os.midpoint(the_times,yvec_init)\n", "output_leap=os.leapfrog(the_times,yvec_init)\n", "answer=np.sin(the_times)\n", "plt.style.use('ggplot')\n", "fig,ax=plt.subplots(1,1,figsize=(7,7))\n", "ax.plot(the_times,(output_euler[0,:]-answer),label='euler')\n", "ax.plot(the_times,(output_mid[0,:]-answer),label='midpoint')\n", "ax.plot(the_times,(output_leap[0,:]-answer),label='leapfrog')\n", "ax.set(ylim=[-2,2],xlim=[0,20],title='global error between sin(t) and approx. for three schemes',\n", " xlabel='time',ylabel='exact - approx')\n", "ax.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Figure numerical**: Numerical solution to the undamped harmonic oscillator problem, using\n", "the forward Euler and leap-frog schemes. Parameter values:\n", "$\\gamma / m=1.0$, $\\Delta t=0.25$, $y(0)=0$, $u(0)=1.0$. The exact\n", "solution is a sinusoidal wave.\n", "\n", "Had we taken a larger time step (such as $\\Delta t=2.0$, for example),\n", "then even the leap-frog scheme is unstable. Furthermore, if we add\n", "damping ($\\beta\\neq 0$), then the eigenvalues are no longer pure\n", "imaginary, and the leap frog scheme is unstable no matter what time step\n", "we use." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stiff Equations \n", "\n", "One final note: this Lab has dealt only with ODE’s (and systems of\n", "ODE’s) that are *non-stiff*. *Stiff equations* are equations that have\n", "solutions with at least two widely varying times scales over which the\n", "solution changes. An example of stiff solution behaviour is a problem\n", "with solutions that have rapid, transitory oscillations, which die out\n", "over a short time scale, after which the solution slowly decays to an\n", "equilibrium. A small time step is required in the initial transitory\n", "region in order to capture the rapid oscillations. However, a larger\n", "time step can be taken in the non-oscillatory region where the solution\n", "is smoother. Hence, using a very small time step will result in very\n", "slow and inefficient computations.\n", "\n", "There are also many other numerical schemes designed specifically for\n", "stiff equations, most of which are implicit schemes. We will not\n", "describe any of them here – you can find more information in a numerical\n", "analysis text such as  @burden-faires." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Difference Approximations of Higher Derivatives\n", "\n", "Higher derivatives can be discretized in a similar way to what we did\n", "for first derivatives. Let’s consider for now only the second\n", "derivative, for which one possible approximation is the second order\n", "centered formula: $$\\frac{y(t_{i+1})-2y(t_i)+y(t_{i-1})}{(\\Delta t)^2} = \n", " y^{\\prime\\prime}(t_i) + {\\cal O}((\\Delta t)^2),$$ There are, of course,\n", "many other possible formulae that we might use, but this is the most\n", "commonly used.\n", "\n", "
\n", "\n", "### Problem Taylor: Hand in png file or paper\n", "\n", "- a) Use Taylor series to derive this formula.\n", "\n", "- b) Derive a higher order approximation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary \n", "\n", "This lab has discussed the accuracy and stability of difference schemes\n", "for simple first order ODEs. The results of the problems should have\n", "made it clear to you that choosing an accurate and stable discretization\n", "for even a very simple problem is not straightforward. One must take\n", "into account not only the considerations of accuracy and stability, but\n", "also the cost or complexity of the scheme. Selecting a numerical method\n", "for a given problem can be considered as an art in itself.\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mathematical Notes\n", "\n", "### Taylor Polynomials and Taylor Series\n", "\n", "\n", "Taylor Series are of fundamental importance in numerical analysis. They\n", "are the most basic tool for talking about the approximation of\n", "functions. Consider a function $f(x)$ that is smooth – when we say\n", "“smooth”, what we mean is that its derivatives exist and are bounded\n", "(for the following discussion, we need $f$ to have $(n+1)$ derivatives).\n", "We would like to approximate $f(x)$ near the point $x=x_0$, and we can\n", "do it as follows:\n", "$$f(x) = \\underbrace{P_n(x)}_{\\mbox{Taylor polynomial}} +\n", " \\underbrace{R_n(x)}_{\\mbox{remainder term}},$$ where\n", "$$P_n(x)=f(x_0)+ f^\\prime(x_0)(x-x_0) +\n", " \\frac{f^{\\prime\\prime}(x_0)}{2!}(x-x_0)^2 + \\cdots + \n", " \\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n$$ is the *$n$th order Taylor\n", "polynomial* of $f$ about $x_0$, and\n", "$$R_n(x)=\\frac{f^{(n+1)}(\\xi(x))}{(n+1)!}(x-x_0)^{n+1}$$ is the\n", "*remainder term* or *truncation error*. The point $\\xi(x)$ in the error\n", "term lies somewhere between the points $x_0$ and $x$. If we look at the\n", "infinite sum ( let $n\\rightarrow\\infty$), then the resulting infinite\n", "sum is called the *Taylor series of $f(x)$ about $x=x_0$*. This result\n", "is also know as *Taylor’s Theorem*.\n", "\n", "Remember that we assumed that $f(x)$ is smooth (in particular, that its\n", "derivatives up to order $(n+1)$ exist and are finite). That means that\n", "all of the derivatives appearing in $P_n$ and $R_n$ are bounded.\n", "Therefore, there are two ways in which we can think of the Taylor\n", "polynomial $P_n(x)$ as an approximation of $f(x)$:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. First of all, let us fix $n$. Then, we can improve the approximation\n", " by letting $x$ approach $x_0$, since as $(x-x_0)$ gets small, the\n", " error term $R_n(x)$ goes to zero ($n$ is considered fixed and all\n", " terms depending on $n$ are thus constant). Therefore, the\n", " approximation improves when $x$ gets closer and closer to $x_0$.\n", "\n", "2. Alternatively, we can think of fixing $x$. Then, we can improve the\n", " approximation by taking more and more terms in the series. When $n$\n", " is increased, the factorial in the denominator of the error term\n", " will eventually dominate the $(x-x_0)^{n+1}$ term (regardless of how\n", " big $(x-x_0)$ is), and thus drive the error to zero.\n", "\n", "In summary, we have two ways of improving the Taylor polynomial\n", "approximation to a function: by evaluating it at points closer to the\n", "point $x_0$; and by taking more terms in the series.\n", "\n", "This latter property of the Taylor expansion can be seen by a simple example.\n", "Consider the Taylor polynomial for the function $f(x)=\\sin(x)$ about the\n", "point $x_0=0$. All of the even terms are zero since they involve $sin(0)$, \n", "so that if we take $n$\n", "odd ( $n=2k+1$), then the $n$th order Taylor polynomial for $sin(x)$ is\n", "\n", "$$P_{2k+1}(x)=x - \\frac{x^3}{3!}+\\frac{x^5}{5!} -\\frac{x^7}{7!}+\\cdots\n", " +\\frac{x^{2k+1}}{(2k+1)!}.\\ eq: taylor$$\n", "\n", "The plot in Figure: Taylor illustrates quite clearly\n", "how the approximation improves both as $x$ approaches 0, and as $n$ is\n", "increased." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(We'll go over [sin_taylor.py](https://github.com/phaustin/numeric/blob/master/numlabs/lab2/taylor_sin.py), the\n", "python module that generated Figure: Taylor in class)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Figure: Taylor -- Plot of $\\sin(x)$ compared to its Taylor polynomial approximations\n", "about $x_0=0$, for various values of $n=2k +1$ in eq: taylor." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider a specific Taylor polynomial, say $P_3(x)$ ( fix $n=3$). Notice\n", "that for $x$ far away from the origin, the polynomial is nowhere near\n", "the function $\\sin(x)$. However, it approximates the function quite well\n", "near the origin. On the other hand, we could take a specific point,\n", "$x=5$, and notice that the Taylor series of orders 1 through 7 do not\n", "approximate the function very well at all. Nevertheless the\n", "approximation improves as $n$ increases, as is shown by the 15th order\n", "Taylor polynomial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Floating Point Representation of Numbers\n", "\n", "Unlike a mathematician, who can deal with real numbers having infinite\n", "precision, a computer can represent numbers with only a finite number of\n", "digits. The best way to understand how a computer stores a number is to\n", "look at its *floating-point form*, in which a number is written as\n", "$$\\pm 0.d_1 d_2 d_3 \\ldots d_k \\times 10^n,$$ where each digit, $d_i$ is\n", "between 0 and 9 (except $d_1$, which must be non-zero). Floating point\n", "form is commonly used in the physical sciences to represent numerical\n", "values; for example, the Earth’s radius is approximately 6,400,000\n", "metres, which is more conveniently written in floating point form as\n", "$0.64\\times 10^7$ (compare this to the general form above).\n", "\n", "Computers actually store numbers in *binary form* (i.e. in base-2\n", "floating point form, as compared to the decimal or base-10 form shown\n", "above). However, it is more convenient to use the decimal form in order\n", "to illustrate the basic idea of computer arithmetic. For a good\n", "discussion of the binary representation of numbers, see Burden & Faires\n", " [sec. 1.2] or Newman section 4.2.\n", "\n", "For the remainder of this discussion, assume that we’re dealing with a\n", "computer that can store numbers with up to 8 *significant digits*\n", "(i.e. $k=8$) and exponents in the range $-38 \\leq n \\leq 38$. Based on\n", "these values, we can make a few observations regarding the numbers that\n", "can be represented:\n", "\n", "- The largest number that can be represented is about $1.0\\times\n", " 10^{+38}$, while the smallest is $1.0\\times 10^{-38}$.\n", "\n", "- These numbers have a lot of *holes*, where real numbers are missed.\n", " For example, consider the two consecutive floating point numbers\n", " $$0.13391482 \\times 10^5 \\;\\;\\; {\\rm and} \\;\\;\\; 0.13391483 \\times 10^5,$$\n", " or 13391.482 and 13391.483. Our floating-point number system cannot\n", " represent any numbers between these two values, and hence any number\n", " in between 13391.482 and 13391.483 must be approximated by one of\n", " the two values. Another way of thinking of this is to observe that\n", " $0.13391482 \\times 10^5$ does not represent just a single real\n", " number, but a whole *range* of numbers.\n", "\n", "- Notice that the same amount of floating-point numbers can be\n", " represented between $10^{-6}$ and $10^{-5}$ as are between $10^{20}$\n", " and $10^{21}$. Consequently, the density of floating points numbers\n", " increases as their magnitude becomes smaller. That is, there are\n", " more floating-point numbers close to zero than there are far away.\n", " This is illustrated in the figure below.\n", "\n", " The floating-point numbers (each represented by a $\\times$) are\n", " more dense near the origin.\n", " \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The values $k=8$ and $-38\\leq n \\leq 38$ correspond to what is known as\n", "*single precision arithmetic*, in which 4 bytes (or units of memory in a\n", "computer) are used to store each number. It is typical in many\n", "programming languages, including $C++$, to allow the use of higher\n", "precision, or *double precision*, using 8 bytes for each number,\n", "corresponding to values of $k=16$ and $-308\\leq n \\leq 308$, thereby\n", "greatly increasing the range and density of numbers that can be\n", "represented. When doing numerical computations, it is customary to use\n", "double-precision arithmetic, in order to minimize the effects of\n", "round-off error (in a $C++$ program, you can define a variable ` x` to\n", "be double precision using the declaration ` double x;`).\n", "\n", "Sometimes, double precision arithmetic may help in eliminating round-off\n", "error problems in a computation. On the minus side, double precision\n", "numbers require more storage than their single precision counterparts,\n", "and it is sometimes (but not always) more costly to compute in double\n", "precision. Ultimately, though, using double precision should not be\n", "expected to be a cure-all against the difficulties of round-off errors.\n", "The best approach is to use an algorithm that is not unstable with\n", "respect to round-off error. For an example where increasing precision\n", "will not help, see the section on Gaussian elimination in Lab \\#3." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "all", "encoding": "# -*- coding: utf-8 -*-", "formats": "ipynb,py:percent", "notebook_metadata_filter": "all,-language_info,-toc,-latex_envs" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "meta-9" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "218.7px" }, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }