# Commits

committed 47abac1 Merge

Merged rjleveque/uwhpsc into master

# codes/homework4/quadrature.ipynb

+{
+ "metadata": {
+  "name": "quadrature"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+  {
+   "cells": [
+    {
+     "cell_type": "heading",
+     "level": 1,
+     "metadata": {},
+     "source": [
+      "Numerical Quadrature"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Numerical quadrature refers to approximating a definite integral numerically, \n",
+      "$$~~ \\int_a^b f(x) dx.$$\n",
+      "Many numerical analysis textbooks describe a variety of quadrature methods or \"rules\".  "
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "First define a simple function for which we know the exact answer:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def f1(x):\n",
+      "    return 1. + x**3\n",
+      "\n",
+      "a1 = 0.\n",
+      "b1 = 2.\n",
+      "int_true1 = (b1-a1) + (b1**4 -a1**4) / 4.\n",
+      "print \"true integral: %22.14e\" % int_true1"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "true integral:   6.00000000000000e+00\n"
+       ]
+      }
+     ],
+     "prompt_number": 176
+    },
+    {
+     "cell_type": "heading",
+     "level": 2,
+     "metadata": {},
+     "source": [
+      "The Trapezoid Rule"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "We will first look at the Trapezoid method.  This method is implemented by evaluating the function at $n$ points and then computing the areas of the trapezoids defined by a piecewise linear approximation to the original function defined by these points.  In the figure below, we are approximating the integral of the blue curve by the sum of the areas of the red trapezoids."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def plot_trap(f,a,b,n):\n",
+      "    x = linspace(a-0.2, b+0.2, 10000) # points for smooth plot\n",
+      "    plot(x,f(x),'b-')\n",
+      "    xj = linspace(a,b,n)\n",
+      "    plot(xj,f(xj),'ro-')\n",
+      "    for xi in xj:\n",
+      "        plot([xi,xi], [0,f(xi)], 'r')\n",
+      "    plot([a,b], [0,0], 'r') # along x-axis\n",
+      "\n",
+      "plot_trap(f1,a1,b1,5)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "display_data",
+       "png": "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\n5iIiFvD/InTd/hvGEDwAAAAASUVORK5CYII=\n"
+      }
+     ],
+     "prompt_number": 177
+    },
+    {
+     "cell_type": "heading",
+     "level": 3,
+     "metadata": {},
+     "source": [
+      "The Trapezoid rule formula"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "The area of a single trapezoid is the width of the base times the average height, so between points $x_j$ and $x_{j+1}$ this gives:\n",
+      "$$\\frac{h}{2} (f(x_j) + f(x_{j+1}).$$\n",
+      "\n",
+      "Summing this up over all the trapezoids gives:\n",
+      "$$h\\left(\\frac 1 2 f(x_0) + f(x_1) + f(x_2) + \\cdots + f(x_{n-2}) + \\frac 1 2 f(x_{n-1})\\right) = h\\sum_{j=0}^{n-1} f(x_j) - \\frac h 2 \\left(f(x_0) + f(x_{n-1})\\right) = h\\sum_{j=0}^{n-1} f(x_j) - \\frac h 2 \\left(f(a) + f(b))\\right).$$\n",
+      "\n",
+      "This can be implemented as follows (note that in Python fj[-1] refers to the last element of fj, and similarly fj[-2] would be the next to last element)."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def trapezoid(f,a,b,n):\n",
+      "    h = (b-a)/(n-1)\n",
+      "    xj = linspace(a,b,n)\n",
+      "    fj = f(xj)\n",
+      "    int_trapezoid = h*sum(fj) - 0.5*h*(fj[0] + fj[-1])\n",
+      "    return int_trapezoid\n"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 178
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "We can test it out for the points used in the figure above:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "n = 5\n",
+      "int_trap = trapezoid(f1,a1,b1,n)\n",
+      "error = abs(int_trap - int_true1)\n",
+      "print \"trapezoid rule approximation: %22.14e,  error: %10.3e\" % (int_trap, error)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "trapezoid rule approximation:   6.25000000000000e+00,  error:  2.500e-01\n"
+       ]
+      }
+     ],
+     "prompt_number": 179
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Using more points will give a better approximation, try changing it in the cell above."
+     ]
+    },
+    {
+     "cell_type": "heading",
+     "level": 3,
+     "metadata": {},
+     "source": [
+      "Convergence tests"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "If we increase n, the number of points used, and hence decrease h, the spacing between points, we expect the error to converge to zero for reasonable functions $f(x)$.\n",
+      "\n",
+      "The trapezoid rule is \"second order accurate\", meaning that the error goes to zero like $O(h^2)$ for a function that is sufficiently smooth (for example if its second derivative is continuous).  For small $h$, the error is expected to be behave like $Ch^2 + O(h^3)~$ as $h$ goes to zero, where $C$ is some constant that depends on how smooth $h$ is.  \n",
+      "\n",
+      "If we double n (and halve h) then we expect the error to go down by a factor of 4 roughly (from $Ch^2$ to $C(h/2)^2~$).\n",
+      "\n",
+      "We can check this by trying several values of n and making a table of the errors and the ratio from one n to the next:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def error_table(f,a,b,nvals,int_true):\n",
+      "    print \"      n         trapezoid            error       ratio\"\n",
+      "    last_error = 0.  # need something for first ratio\n",
+      "    for n in nvals:\n",
+      "        int_trap = trapezoid(f,a,b,n)\n",
+      "        error = abs(int_trap - int_true)\n",
+      "        ratio = last_error / error\n",
+      "        last_error = error # for next n\n",
+      "        print \"%8i  %22.14e  %10.3e  %10.3e\" % (n,int_trap, error, ratio)\n",
+      "    \n",
+      "nvals = array([5, 10, 20, 40, 80, 160, 320])\n",
+      "error_table(f1,a1,b1,nvals,int_true1)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "      n         trapezoid            error       ratio\n",
+        "       5    6.25000000000000e+00   2.500e-01   0.000e+00\n",
+        "      10    6.04938271604938e+00   4.938e-02   5.062e+00\n",
+        "      20    6.01108033240997e+00   1.108e-02   4.457e+00\n",
+        "      40    6.00262984878369e+00   2.630e-03   4.213e+00\n",
+        "      80    6.00064092292902e+00   6.409e-04   4.103e+00\n",
+        "     160    6.00015822158934e+00   1.582e-04   4.051e+00\n",
+        "     320    6.00003930778982e+00   3.931e-05   4.025e+00\n"
+       ]
+      }
+     ],
+     "prompt_number": 180
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "(Note that the first ratio reported is meaningless.)\n",
+      "\n",
+      "Convergence might be easier to see in a plot.  If a method is p'th order accurate then we expect the error to behave like $E\\approx Ch^p$ for some constant $C$, for small $h$.  This is hard to visualize.  It is much easier to see what order accuracy we are achieving if we produce a log-log plot instead, since $E = Ch^p~$ means that $\\log E = \\log C + p\\log h$ \n",
+      "\n",
+      "In other words $\\log E~$ is a linear function of $\\log h~$."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def error_plot(f,a,b,nvals,int_true):\n",
+      "    errvals = zeros(nvals.shape)  # initialize to right shape\n",
+      "    for i in range(len(nvals)):\n",
+      "        n = nvals[i]\n",
+      "        int_trap = trapezoid(f,a,b,n)\n",
+      "        error = abs(int_trap - int_true)\n",
+      "        errvals[i] = error\n",
+      "    hvals = (b - a) / (nvals - 1)  # vector of h values for each n\n",
+      "    loglog(hvals,errvals, 'o-')\n",
+      "    xlabel('spacing h')\n",
+      "    ylabel('error')\n",
+      "    \n",
+      "error_plot(f1,a1,b1,nvals,int_true1)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "display_data",
+       "png": "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\n/zfgh3ptRGDvAAAAAElFTkSuQmCC\n"
+      }
+     ],
+     "prompt_number": 181
+    },
+    {
+     "cell_type": "heading",
+     "level": 3,
+     "metadata": {},
+     "source": [
+      "An oscillatory function"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "If the function $f(x)$ is not as smooth (has larger second derivative at various places) then the accuracy with a small number of points will not be nearly as good.  For example, consider this function:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "k = 50.\n",
+      "def f2(x):\n",
+      "    return 1. + x**3 + sin(k*x)\n",
+      "\n",
+      "a2 = 0.\n",
+      "b2 = 2.\n",
+      "int_true2 = (b2-a2) + (b2**4 - a2**4) / 4. - (1./k) * (cos(k*b2) - cos(k*a2))\n",
+      "print \"true integral: %22.14e\" % int_true2"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "true integral:   6.00275362255425e+00\n"
+       ]
+      }
+     ],
+     "prompt_number": 182
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Making k larger will make it more oscillatory.  For this function with k=50, using n=10 points is not going to give a very good approximation:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "plot_trap(f2,a2,b2,10)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "display_data",
+       "png": "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\nRK5CYII=\n"
+      }
+     ],
+     "prompt_number": 183
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "This doesn't look very good, but for larger values of $n$ we still see the expected convergence rate:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "error_plot(f2,a2,b2,nvals,int_true2)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "display_data",
+       "png": "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\nItKk/wfkA5fHgeT/QAAAAABJRU5ErkJggg==\n"
+      }
+     ],
+     "prompt_number": 184
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Now make the function much more oscillatory with a larger value of $k$..."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "k = 1000.\n",
+      "def f2(x):\n",
+      "    return 1. + x**3 + sin(k*x)\n",
+      "\n",
+      "a2 = 0.\n",
+      "b2 = 2.\n",
+      "int_true2 = (b2-a2) + (b2**4 - a2**4) / 4. - (1./k) * (cos(k*b2) - cos(k*a2))\n",
+      "print \"true integral: %22.14e\" % int_true2"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "true integral:   6.00136745954910e+00\n"
+       ]
+      }
+     ],
+     "prompt_number": 185
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "For the previous choice of nvals the method does not seem to be doing well:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "nvals = array([5, 10, 20, 40, 80, 160, 320])\n",
+      "print \"nvals = \",nvals\n",
+      "error_plot(f2,a2,b2,nvals,int_true2)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "nvals =  [  5  10  20  40  80 160 320]\n"
+       ]
+      },
+      {
+       "output_type": "display_data",
+       "png": "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\nokWSzJvBfPTRR9q9e7diYmL0u9/9TpI0d+5cGYahTz/9VHv37tWgQYMq93Pe/v37NXz4cH366acq\nKirS9u3bJUlpaWlasGCB9uzZo5KSkmqXgjYMQ16vVxkZGdq9e7fWrl1bZRVQINQICjQYcXFxys3N\n1eOPP668vDy1atWq8rXRo0fL5XJp7Nix2rBhgyTpm2++0fjx49WtWzctX75c+/btkyRt2rRJEydO\nVIsWLSRJl19++QXHat++ve644w41atRIAwcO1Pbt21VeXq69e/fql7/8pZo0aaJf//rXqmmptb59\n++r6669XVFSU+vXrp23bttn91wH4jaBAg3H11Vdr79696tGjh8aPH68XXnih8rXqvrDnzZun2267\nTXv37tWCBQuq3Ij+Ymtp/jg8mjVrprKysgveY7WPH9/WslmzZiotLbU8HhBMBAUajC+//FKSNGbM\nGE2ePFl79uyRZH5hv/766/L5fFqxYkXlKamSkhJ17txZpaWlevXVVyv3M3jwYGVlZen06dOSpG+/\n/faixzYMQ82aNVPPnj21du1anT17Vm+88Ybd/4tAUBAUaDDy8vJ0yy23qHfv3nr99dc1ffp0SebY\nQqtWrXTjjTdq1apVmjp1qiRpxowZmjJligYMGKCePXtWjifMmjVLLpdLXbp0Uc+ePeXxeC441k/H\nHs4/T0tL0/Tp09WrVy9deumluuyyy6r9bE2fB5zA/SjQ4HXs2FE7d+5U69atg36sU6dO6dJLL5XP\n59O0adNkGEbl4DkQruhRoMEL5W/rbrdbvXr1UqdOnVRQUKBZs2aF7NhAXdGjAABYokcBALBEUAAA\nLBEUAABLBAUAwBJBAQCwRFAAACz9P0rU4mPCKMqNAAAAAElFTkSuQmCC\n"
+      }
+     ],
+     "prompt_number": 186
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "In this case the $O(h^2)~$ behavior does not become apparent unless we use much smaller $h$ values so that we are resolving the oscillations:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "nvals = array([5 * 2**i for i in range(12)])\n",
+      "print \"nvals = \",nvals\n",
+      "error_plot(f2,a2,b2,nvals,int_true2)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "nvals =  [    5    10    20    40    80   160   320   640  1280  2560  5120 10240]\n"
+       ]
+      },
+      {
+       "output_type": "display_data",
+       "png": "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\nlq517gAAAABJRU5ErkJggg==\n"
+      }
+     ],
+     "prompt_number": 187
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Eventually we see second order convergence and ratios that approach 4:"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "error_table(f2,a2,b2,nvals,int_true2)"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "      n         trapezoid            error       ratio\n",
+        "       5    6.16511276525547e+00   1.637e-01   0.000e+00\n",
+        "      10    6.11640342954375e+00   1.150e-01   1.423e+00\n",
+        "      20    5.93766915031525e+00   6.370e-02   1.806e+00\n",
+        "      40    6.06556743605608e+00   6.420e-02   9.922e-01\n",
+        "      80    6.18855102747922e+00   1.872e-01   3.430e-01\n",
+        "     160    7.40477216296790e+00   1.403e+00   1.334e-01\n",
+        "     320    5.36931843072561e+00   6.320e-01   2.220e+00\n",
+        "     640    6.00002231770676e+00   1.345e-03   4.699e+02\n",
+        "    1280    6.00107919913986e+00   2.883e-04   4.666e+00\n",
+        "    2560    6.00129774432062e+00   6.972e-05   4.135e+00\n",
+        "    5120    6.00135017283866e+00   1.729e-05   4.033e+00\n",
+        "   10240    6.00136314705017e+00   4.312e-06   4.009e+00\n"
+       ]
+      }
+     ],
+     "prompt_number": 188
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 188
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}

# codes/homework4/quadrature.py

+# Saved from notebook and then edited a bit by hand, e.g. added
+# from pylab import *
+
+# As it, this will do all the plot on top of one another, so you might want to add
+# figure()  commands before each plot to create a new figure, and savefig(filename) afterwards
+# if you wanted to save them.
+
+#------------------------------------
+
+# -*- coding: utf-8 -*-
+# <nbformat>3.0</nbformat>
+
+# <headingcell level=1>
+
+# Numerical Quadrature
+
+# <markdowncell>
+
+# Numerical quadrature refers to approximating a definite integral numerically,
+# $$~~ \int_a^b f(x) dx.$$
+# Many numerical analysis textbooks describe a variety of quadrature methods or "rules".
+
+# <markdowncell>
+
+# First define a simple function for which we know the exact answer:
+
+# <codecell>
+
+from pylab import *  # added by hand
+
+def f1(x):
+    return 1. + x**3
+
+a1 = 0.
+b1 = 2.
+int_true1 = (b1-a1) + (b1**4 -a1**4) / 4.
+print "true integral: %22.14e" % int_true1
+
+# <headingcell level=2>
+
+# The Trapezoid Rule
+
+# <markdowncell>
+
+# We will first look at the Trapezoid method.  This method is implemented by evaluating the function at $n$ points and then computing the areas of the trapezoids defined by a piecewise linear approximation to the original function defined by these points.  In the figure below, we are approximating the integral of the blue curve by the sum of the areas of the red trapezoids.
+
+# <codecell>
+
+def plot_trap(f,a,b,n):
+    x = linspace(a-0.2, b+0.2, 10000) # points for smooth plot
+    plot(x,f(x),'b-')
+    xj = linspace(a,b,n)
+    plot(xj,f(xj),'ro-')
+    for xi in xj:
+        plot([xi,xi], [0,f(xi)], 'r')
+    plot([a,b], [0,0], 'r') # along x-axis
+
+plot_trap(f1,a1,b1,5)
+
+# <headingcell level=3>
+
+# The Trapezoid rule formula
+
+# <markdowncell>
+
+# The area of a single trapezoid is the width of the base times the average height, so between points $x_j$ and $x_{j+1}$ this gives:
+# $$\frac{h}{2} (f(x_j) + f(x_{j+1}).$$
+#
+# Summing this up over all the trapezoids gives:
+# $$h\left(\frac 1 2 f(x_0) + f(x_1) + f(x_2) + \cdots + f(x_{n-2}) + \frac 1 2 f(x_{n-1})\right) = h\sum_{j=0}^{n-1} f(x_j) - \frac h 2 \left(f(x_0) + f(x_{n-1})\right) = h\sum_{j=0}^{n-1} f(x_j) - \frac h 2 \left(f(a) + f(b))\right).$$
+#
+# This can be implemented as follows (note that in Python fj[-1] refers to the last element of fj, and similarly fj[-2] would be the next to last element).
+
+# <codecell>
+
+def trapezoid(f,a,b,n):
+    h = (b-a)/(n-1)
+    xj = linspace(a,b,n)
+    fj = f(xj)
+    int_trapezoid = h*sum(fj) - 0.5*h*(fj[0] + fj[-1])
+    return int_trapezoid
+
+# <markdowncell>
+
+# We can test it out for the points used in the figure above:
+
+# <codecell>
+
+n = 5
+int_trap = trapezoid(f1,a1,b1,n)
+error = abs(int_trap - int_true1)
+print "trapezoid rule approximation: %22.14e,  error: %10.3e" % (int_trap, error)
+
+# <markdowncell>
+
+# Using more points will give a better approximation, try changing it in the cell above.
+
+# <headingcell level=3>
+
+# Convergence tests
+
+# <markdowncell>
+
+# If we increase n, the number of points used, and hence decrease h, the spacing between points, we expect the error to converge to zero for reasonable functions $f(x)$.
+#
+# The trapezoid rule is "second order accurate", meaning that the error goes to zero like $O(h^2)$ for a function that is sufficiently smooth (for example if its second derivative is continuous).  For small $h$, the error is expected to be behave like $Ch^2 + O(h^3)~$ as $h$ goes to zero, where $C$ is some constant that depends on how smooth $h$ is.
+#
+# If we double n (and halve h) then we expect the error to go down by a factor of 4 roughly (from $Ch^2$ to $C(h/2)^2~$).
+#
+# We can check this by trying several values of n and making a table of the errors and the ratio from one n to the next:
+
+# <codecell>
+
+def error_table(f,a,b,nvals,int_true):
+    print "      n         trapezoid            error       ratio"
+    last_error = 0.  # need something for first ratio
+    for n in nvals:
+        int_trap = trapezoid(f,a,b,n)
+        error = abs(int_trap - int_true)
+        ratio = last_error / error
+        last_error = error # for next n
+        print "%8i  %22.14e  %10.3e  %10.3e" % (n,int_trap, error, ratio)
+
+nvals = array([5, 10, 20, 40, 80, 160, 320])
+error_table(f1,a1,b1,nvals,int_true1)
+
+# <markdowncell>
+
+# (Note that the first ratio reported is meaningless.)
+#
+# Convergence might be easier to see in a plot.  If a method is p'th order accurate then we expect the error to behave like $E\approx Ch^p$ for some constant $C$, for small $h$.  This is hard to visualize.  It is much easier to see what order accuracy we are achieving if we produce a log-log plot instead, since $E = Ch^p~$ means that $\log E = \log C + p\log h$
+#
+# In other words $\log E~$ is a linear function of $\log h~$.
+
+# <codecell>
+
+def error_plot(f,a,b,nvals,int_true):
+    errvals = zeros(nvals.shape)  # initialize to right shape
+    for i in range(len(nvals)):
+        n = nvals[i]
+        int_trap = trapezoid(f,a,b,n)
+        error = abs(int_trap - int_true)
+        errvals[i] = error
+    hvals = (b - a) / (nvals - 1)  # vector of h values for each n
+    loglog(hvals,errvals, 'o-')
+    xlabel('spacing h')
+    ylabel('error')
+
+error_plot(f1,a1,b1,nvals,int_true1)
+
+# <headingcell level=3>
+
+# An oscillatory function
+
+# <markdowncell>
+
+# If the function $f(x)$ is not as smooth (has larger second derivative at various places) then the accuracy with a small number of points will not be nearly as good.  For example, consider this function:
+
+# <codecell>
+
+k = 50.
+def f2(x):
+    return 1. + x**3 + sin(k*x)
+
+a2 = 0.
+b2 = 2.
+int_true2 = (b2-a2) + (b2**4 - a2**4) / 4. - (1./k) * (cos(k*b2) - cos(k*a2))
+print "true integral: %22.14e" % int_true2
+
+# <markdowncell>
+
+# Making k larger will make it more oscillatory.  For this function with k=50, using n=10 points is not going to give a very good approximation:
+
+# <codecell>
+
+plot_trap(f2,a2,b2,10)
+
+# <markdowncell>
+
+# This doesn't look very good, but for larger values of $n$ we still see the expected convergence rate:
+
+# <codecell>
+
+error_plot(f2,a2,b2,nvals,int_true2)
+
+# <markdowncell>
+
+# Now make the function much more oscillatory with a larger value of $k$...
+
+# <codecell>
+
+k = 1000.
+def f2(x):
+    return 1. + x**3 + sin(k*x)
+
+a2 = 0.
+b2 = 2.
+int_true2 = (b2-a2) + (b2**4 - a2**4) / 4. - (1./k) * (cos(k*b2) - cos(k*a2))
+print "true integral: %22.14e" % int_true2
+
+# <markdowncell>
+
+# For the previous choice of nvals the method does not seem to be doing well:
+
+# <codecell>
+
+nvals = array([5, 10, 20, 40, 80, 160, 320])
+print "nvals = ",nvals
+error_plot(f2,a2,b2,nvals,int_true2)
+
+# <markdowncell>
+
+# In this case the $O(h^2)~$ behavior does not become apparent unless we use much smaller $h$ values so that we are resolving the oscillations:
+
+# <codecell>
+
+nvals = array([5 * 2**i for i in range(12)])
+print "nvals = ",nvals
+error_plot(f2,a2,b2,nvals,int_true2)
+
+# <markdowncell>
+
+# Eventually we see second order convergence and ratios that approach 4:
+
+# <codecell>
+
+error_table(f2,a2,b2,nvals,int_true2)
+
+# <codecell>
+
+

# codes/homework4/quadrature_notebook.pdf

Binary file added.

# codes/homework4/test1.f90

+
+program test1
+
+    use quadrature, only: trapezoid, error_table
+
+    implicit none
+    real(kind=8) :: a,b,int_true
+    integer :: nvals(7), i
+
+    a = 0.d0
+    b = 2.d0
+    int_true = (b-a) + (b**4 - a**4) / 4.d0
+
+    print 10, int_true
+ 10 format("true integral: ", es22.14)
+    print *, " "  ! blank line
+
+    ! values of n to test:
+    do i=1,7
+        nvals(i) = 5 * 2**(i-1)
+        enddo
+
+    call error_table(f, a, b, nvals, int_true)
+
+contains
+
+    real(kind=8) function f(x)
+        implicit none
+        real(kind=8), intent(in) :: x
+
+        f = 1.d0 + x**3
+    end function f
+
+end program test1

# codes/homework5/Makefile

+
+OBJECTS = functions.o quadrature.o test.o
+FFLAGS = -fopenmp
+
+.PHONY: test clean
+
+test: test.exe
+	./test.exe
+
+test.exe: $(OBJECTS) + gfortran$(FFLAGS) $(OBJECTS) -o test.exe + +%.o : %.f90 + gfortran$(FFLAGS) -c  $<  + +clean: + rm -f *.o *.exe *.mod + # codes/homework5/README.txt + +Sample code to start with for Homework 5. + +For convenience a Makefile is provided: +$ make test
+
+to compile and run.
+
+A notebook describing Simpson's rule is in the notebook subdirectory, in
+various formats.
+

# codes/homework5/functions.f90

+
+module functions
+
+    use omp_lib
+    implicit none
+    integer :: fevals(0:7)
+    real(kind=8) :: k
+    save
+
+contains
+
+    real(kind=8) function f(x)
+        implicit none
+        real(kind=8), intent(in) :: x
+        integer thread_num
+
+        ! keep track of number of function evaluations by
+        ! each thread:
+        thread_num = 0   ! serial mode
+        !\$ thread_num = omp_get_thread_num()
+        fevals(thread_num) = fevals(thread_num) + 1
+
+        f = 1.d0 + x**3 + sin(k*x)
+
+    end function f
+
+end module functions

# codes/homework5/notebook/quadrature2.html

+<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<meta charset="utf-8">
+<title>IPython Notebook</title>
+<link rel="stylesheet" href="quadrature2_files/jquery-ui.css" type="text/css">
+<link rel="stylesheet" href="quadrature2_files/boilerplate.css" type="text/css">
+<link rel="stylesheet" href="quadrature2_files/fbm.css" type="text/css">
+<link rel="stylesheet" href="quadrature2_files/page.css" type="text/css">
+
+
+<script type="text/javascript" src="quadrature2_files/MathJax.js" charset="utf-8"></script>
+
+<script type="text/javascript">
+// MathJax disabled, set as null to distingish from *missing* MathJax,
+// where it will be undefined, and should prompt a dialog later.
+window.mathjax_url = "http://cdn.mathjax.org/mathjax/latest/MathJax.js";
+</script>
+<link rel="stylesheet" href="quadrature2_files/codemirror.css">
+<link rel="stylesheet" href="quadrature2_files/ipython.css">
+<link rel="stylesheet" href="quadrature2_files/prettify.css">
+<link rel="stylesheet" href="quadrature2_files/notebook.css" type="text/css">
+<link rel="stylesheet" href="quadrature2_files/printnotebook.css" type="text/css">
+<link rel="stylesheet" href="quadrature2_files/renderedhtml.css" type="text/css">
+
+
+
+<style type="text/css">.MathJax_Hover_Frame {border-radius: .25em; -webkit-border-radius: .25em; -moz-border-radius: .25em; -khtml-border-radius: .25em; box-shadow: 0px 0px 15px #83A; -webkit-box-shadow: 0px 0px 15px #83A; -moz-box-shadow: 0px 0px 15px #83A; -khtml-box-shadow: 0px 0px 15px #83A; border: 1px solid #A6D ! important; display: inline-block; position: absolute}
+.MathJax_Hover_Arrow {position: absolute; width: 15px; height: 11px; cursor: pointer}
+</style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; color: black; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
+.MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 5px 0px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -khtml-border-radius: 5px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
+.MathJax_MenuItem {padding: 1px 2em; background: transparent}
+.MathJax_MenuTitle {background-color: #CCCCCC; margin: -5px 0 0 0; text-align: center; font-style: italic; font-size: 80%; color: #444444; padding: 2px 0; overflow: hidden}
+.MathJax_MenuArrow {position: absolute; right: .5em; color: #666666}
+.MathJax_MenuActive .MathJax_MenuArrow {color: white}
+.MathJax_MenuCheck {position: absolute; left: .7em}
+.MathJax_MenuRadioCheck {position: absolute; left: .7em}
+.MathJax_MenuLabel {padding: 1px 2em 3px 1.33em; font-style: italic}
+.MathJax_MenuRule {border-top: 1px solid #DDDDDD; margin: 4px 3px}
+.MathJax_MenuDisabled {color: GrayText}
+.MathJax_MenuActive {background-color: #606872; color: white}
+.MathJax_Menu_Close {position: absolute; width: 31px; height: 31px; top: -15px; left: -15px}
+</style><style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
+#MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
+#MathJax_ZoomEventTrap {position: absolute; left: 0; top: 0; z-index: 302; display: inline-block; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
+</style><style type="text/css">.MathJax_Preview {color: #888}
+#MathJax_Message {position: fixed; left: 1px; bottom: 2px; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
+#MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
+.MathJax_Error {color: #CC0000; font-style: italic}
+</style><style type="text/css">.MathJax_Display {text-align: center; margin: 0; position: relative; display: block; width: 100%}
+.MathJax .merror {background-color: #FFFF88; color: #CC0000; border: 1px solid #CC0000; padding: 1px 3px; font-style: normal; font-size: 90%}
+#MathJax_Tooltip {background-color: InfoBackground; color: InfoText; border: 1px solid black; box-shadow: 2px 2px 5px #AAAAAA; -webkit-box-shadow: 2px 2px 5px #AAAAAA; -moz-box-shadow: 2px 2px 5px #AAAAAA; -khtml-box-shadow: 2px 2px 5px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true'); padding: 3px 4px; position: absolute; left: 0; top: 0; width: auto; height: auto; display: none}
+.MathJax {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; border: 0; padding: 0; margin: 0}
+.MathJax img, .MathJax nobr, .MathJax a {border: 0; padding: 0; margin: 0; max-width: none; max-height: none; vertical-align: 0; line-height: normal; text-decoration: none}
+img.MathJax_strut {border: 0 !important; padding: 0 !important; margin: 0 !important; vertical-align: 0 !important}
+.MathJax span {display: inline; position: static; border: 0; padding: 0; margin: 0; vertical-align: 0; line-height: normal; text-decoration: none}
+.MathJax nobr {white-space: nowrap ! important}
+.MathJax img {display: inline ! important; float: none ! important}
+.MathJax_Processing {visibility: hidden; position: fixed; width: 0; height: 0; overflow: hidden}
+.MathJax_Processed {display: none!important}
+.MathJax_ExBox {display: block; overflow: hidden; width: 1px; height: 60ex}
+.MathJax .MathJax_EmBox {display: block; overflow: hidden; width: 1px; height: 60em}
+.MathJax .MathJax_HitBox {cursor: text; background: white; opacity: 0; filter: alpha(opacity=0)}
+.MathJax .MathJax_HitBox * {filter: none; opacity: 1; background: transparent}
+#MathJax_Tooltip * {filter: none; opacity: 1; background: transparent}
+@font-face {font-family: MathJax_Blank; src: url('about:blank')}
+.MathJax .noError {vertical-align: ; font-size: 90%; text-align: left; color: black; padding: 1px 3px; border: 1px solid}
+</style></head>
+<body data-project="/Users/rjl/Dropbox/classes/am583.13/hw5" data-base-project-url="/" data-base-kernel-url="/" data-read-only="False" data-notebook-id="5b3b0c08-e36e-40c8-9f52-6459a8cd6248"><div style="visibility: hidden; overflow: hidden; position: absolute; top: 0px; height: 1px; width: auto; padding: 0px; border: 0px none; margin: 0px; text-align: left; text-indent: 0px; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal;"><div id="MathJax_Hidden"></div></div><div style="display: none;" id="MathJax_Message"></div>
+<div style="border-top-style: none; border-left-style: none; border-right-style: none;" class="border-box-sizing ui-widget ui-widget-content" id="header">
+<span id="ipython_notebook"><h1><a href="http://127.0.0.1:8888/" alt="dashboard"><img src="quadrature2_files/ipynblogo.png" alt="IPython Notebook"></a></h1></span>
+
+<span id="login_widget">
+
+</span>
+
+
+
+</div>
+<div style="display: block;" class="border-box-sizing" id="site">
+
+<div class="border-box-sizing ui-widget" id="main_app">
+<div class="border-box-sizing ui-widget" id="notebook_panel">
+<div class="border-box-sizing" id="notebook"><div tabindex="2" class="cell text_cell border-box-sizing ui-widget-content ui-corner-all"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h1>Numerical Quadrature</h1></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Numerical quadrature refers to approximating a definite integral numerically,
+<span class="MathJax_Preview"></span><div style="text-align: left;" aria-readonly="true" role="textbox" class="MathJax_Display"><span style="" id="MathJax-Element-2-Frame" class="MathJax"><nobr><span style="margin-left: 0em;" id="MathJax-Span-6" class="math"><span style="display: inline-block; position: relative; width: 91px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(0.795em, 1000em, 3.667em, -0.524em); top: -2.564em; left: 0em;"><span id="MathJax-Span-7" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-8" class="mtext">&nbsp;</span><span style="font-family: STIXGeneral;" id="MathJax-Span-9" class="mtext">&nbsp;</span><span style="padding-left: 0.188em;" id="MathJax-Span-10" class="msubsup"><span style="display: inline-block; position: relative; width: 1.659em; height: 0px;"><span style="position: absolute; clip: rect(2.112em, 1000em, 4.731em, -0.468em); top: -3.671em; left: 0em;"><span style="font-family: STIXIntegralsD; vertical-align: -0.615em;" id="MathJax-Span-11" class="mo">∫<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.45em;"></span></span><span style="display: inline-block; width: 0px; height: 3.671em;"></span></span><span style="position: absolute; clip: rect(1.673em, 1000em, 2.514em, -0.508em); top: -3.442em; left: 1.234em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-12" class="mi">b</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; clip: rect(1.844em, 1000em, 2.514em, -0.512em); top: -1.411em; left: 0.599em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-13" class="mi">a</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-14" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-15" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-16" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-17" class="mo">)</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-18" class="mi">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.027em;"></span></span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-19" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-20" class="mo">.</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 3.166em; vertical-align: -1.183em;"></span></span></nobr></span></div><script id="MathJax-Element-2" type="math/tex; mode=display">~~ \int_a^b f(x) dx.</script>
+Many numerical analysis textbooks describe a variety of quadrature methods or "rules".  </p></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>First define a simple function for which we know the exact answer:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[112]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 135.2px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">f1</span>(<span class="cm-variable">x</span>):</pre><pre>    <span class="cm-keyword">return</span> <span class="cm-number">1.</span> <span class="cm-operator">+</span> <span class="cm-variable">x</span><span class="cm-operator">**</span><span class="cm-number">3</span></pre><pre> </pre><pre><span class="cm-variable">a1</span> = <span class="cm-number">0.</span></pre><pre><span class="cm-variable">b1</span> = <span class="cm-number">2.</span></pre><pre><span class="cm-variable">int_true1</span> = (<span class="cm-variable">b1</span><span class="cm-operator">-</span><span class="cm-variable">a1</span>) <span class="cm-operator">+</span> (<span class="cm-variable">b1</span><span class="cm-operator">**</span><span class="cm-number">4</span> <span class="cm-operator">-</span><span class="cm-variable">a1</span><span class="cm-operator">**</span><span class="cm-number">4</span>) <span class="cm-operator">/</span> <span class="cm-number">4.</span></pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"true integral: %22.14e"</span> <span class="cm-operator">%</span> <span class="cm-variable">int_true1</span></pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>true integral:   6.00000000000000e+00
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h2>The Trapezoid Rule</h2></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>We will first look at the Trapezoid method.  This method is implemented by evaluating the function at <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-3-Frame" class="MathJax"><nobr><span id="MathJax-Span-21" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.748em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-22" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-23" class="mi">n</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.68em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-3" type="math/tex">n</script>
+ points and then computing the areas of the trapezoids defined by a
+piecewise linear approximation to the original function defined by these
+ points.  In the figure below, we are approximating the integral of the
+blue curve by the sum of the areas of the red trapezoids.</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[113]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 188px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">plot_trap</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>):</pre><pre>    <span class="cm-variable">x</span> = <span class="cm-variable">linspace</span>(<span class="cm-variable">a</span><span class="cm-operator">-</span><span class="cm-number">0.2</span>, <span class="cm-variable">b</span><span class="cm-operator">+</span><span class="cm-number">0.2</span>, <span class="cm-number">10000</span>) <span class="cm-comment"># points for smooth plot</span></pre><pre>    <span class="cm-variable">plot</span>(<span class="cm-variable">x</span>,<span class="cm-variable">f</span>(<span class="cm-variable">x</span>),<span class="cm-string">'b-'</span>)</pre><pre>    <span class="cm-variable">xj</span> = <span class="cm-variable">linspace</span>(<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>)</pre><pre>    <span class="cm-variable">plot</span>(<span class="cm-variable">xj</span>,<span class="cm-variable">f</span>(<span class="cm-variable">xj</span>),<span class="cm-string">'ro-'</span>)</pre><pre>    <span class="cm-keyword">for</span> <span class="cm-variable">xi</span> <span class="cm-operator">in</span> <span class="cm-variable">xj</span>:</pre><pre>        <span class="cm-variable">plot</span>([<span class="cm-variable">xi</span>,<span class="cm-variable">xi</span>], [<span class="cm-number">0</span>,<span class="cm-variable">f</span>(<span class="cm-variable">xi</span>)], <span class="cm-string">'r'</span>)</pre><pre>    <span class="cm-variable">plot</span>([<span class="cm-variable">a</span>,<span class="cm-variable">b</span>], [<span class="cm-number">0</span>,<span class="cm-number">0</span>], <span class="cm-string">'r'</span>) <span class="cm-comment"># along x-axis</span></pre><pre> </pre><pre><span class="cm-variable">plot_trap</span>(<span class="cm-variable">f1</span>,<span class="cm-variable">a1</span>,<span class="cm-variable">b1</span>,<span class="cm-number">5</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 371px; height: 253px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 253px; width: 371px;" class="ui-resizable" src="data:image/png;base64,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%0A5iIiFvD/InTd/hvGEDwAAAAASUVORK5CYII=%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h3>The Trapezoid rule formula</h3></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>The area of a single trapezoid is the width of the base times the average height, so between points <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-4-Frame" class="MathJax"><nobr><span id="MathJax-Span-24" class="math"><span style="display: inline-block; position: relative; width: 12px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.599em, 1000em, 2.686em, -0.551em); top: -2.214em; left: 0em;"><span id="MathJax-Span-25" class="mrow"><span id="MathJax-Span-26" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-27" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-28" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.025em; vertical-align: -0.426em;"></span></span></nobr></span><script id="MathJax-Element-4" type="math/tex">x_j</script> and <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-5-Frame" class="MathJax"><nobr><span id="MathJax-Span-29" class="math"><span style="display: inline-block; position: relative; width: 27px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.599em, 1000em, 2.686em, -0.551em); top: -2.214em; left: 0em;"><span id="MathJax-Span-30" class="mrow"><span id="MathJax-Span-31" class="msubsup"><span style="display: inline-block; position: relative; width: 1.587em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-32" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-33" class="texatom"><span id="MathJax-Span-34" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-35" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-36" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-37" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.025em; vertical-align: -0.426em;"></span></span></nobr></span><script id="MathJax-Element-5" type="math/tex">x_{j+1}</script> this gives:
+<span class="MathJax_Preview"></span><div style="text-align: left;" aria-readonly="true" role="textbox" class="MathJax_Display"><span style="" id="MathJax-Element-6-Frame" class="MathJax"><nobr><span style="margin-left: 0em;" id="MathJax-Span-38" class="math"><span style="display: inline-block; position: relative; width: 126px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.03em, 1000em, 3.425em, -0.404em); top: -2.564em; left: 0em;"><span id="MathJax-Span-39" class="mrow"><span style="padding-left: 0.12em; padding-right: 0.12em;" id="MathJax-Span-40" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-41" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.495em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-42" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.188em;" id="MathJax-Span-43" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-44" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-45" class="mo">(</span><span id="MathJax-Span-46" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-47" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-48" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-49" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-50" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-51" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-52" class="mo">(</span><span id="MathJax-Span-53" class="msubsup"><span style="display: inline-block; position: relative; width: 1.587em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-54" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-55" class="texatom"><span id="MathJax-Span-56" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-57" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-58" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-59" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-60" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-61" class="mo">.</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 2.594em; vertical-align: -0.893em;"></span></span></nobr></span></div><script id="MathJax-Element-6" type="math/tex; mode=display"> \frac{h}{2} (f(x_j) + f(x_{j+1}). </script></p>
+
+<p>Summing this up over all the trapezoids gives:
+<span class="MathJax_Preview"></span><div style="text-align: left;" aria-readonly="true" role="textbox" class="MathJax_Display"><span style="" id="MathJax-Element-7-Frame" class="MathJax"><nobr><span style="margin-left: 0em;" id="MathJax-Span-62" class="math"><span style="display: inline-block; position: relative; width: 864px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(2.185em, 1000em, 5.709em, -0.505em); top: -4.138em; left: 0em;"><span id="MathJax-Span-63" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-64" class="mi">h</span><span id="MathJax-Span-65" class="mfenced"><span style="vertical-align: -0.586em;" id="MathJax-Span-66" class="mo"><span style="font-family: STIXSizeThreeSym;">(</span></span><span id="MathJax-Span-67" class="mrow"><span style="padding-left: 0.12em; padding-right: 0.12em;" id="MathJax-Span-68" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.413em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-69" class="mn">1</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.495em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-70" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-71" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-72" class="mo">(</span><span id="MathJax-Span-73" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-74" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-75" class="mn">0</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-76" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-77" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-78" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-79" class="mo">(</span><span id="MathJax-Span-80" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-81" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-82" class="mn">1</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-83" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-84" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-85" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-86" class="mo">(</span><span id="MathJax-Span-87" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-88" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-89" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-90" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-91" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-92" class="mo">⋯</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-93" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-94" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-95" class="mo">(</span><span id="MathJax-Span-96" class="msubsup"><span style="display: inline-block; position: relative; width: 1.704em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-97" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-98" class="texatom"><span id="MathJax-Span-99" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-100" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-101" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-102" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-103" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-104" class="mo">+</span><span style="padding-left: 0.37em; padding-right: 0.12em;" id="MathJax-Span-105" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.413em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-106" class="mn">1</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.495em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-107" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-108" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-109" class="mo">(</span><span id="MathJax-Span-110" class="msubsup"><span style="display: inline-block; position: relative; width: 1.704em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-111" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-112" class="texatom"><span id="MathJax-Span-113" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-114" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-115" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-116" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-117" class="mo">)</span></span><span style="vertical-align: -0.586em;" id="MathJax-Span-118" class="mo"><span style="font-family: STIXSizeThreeSym;">)</span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.48em; vertical-align: 0em;"></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.48em; vertical-align: 0em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-119" class="mo">=</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.313em;" id="MathJax-Span-120" class="mi">h</span><span style="padding-left: 0.188em;" id="MathJax-Span-121" class="munderover"><span style="display: inline-block; position: relative; width: 1.282em; height: 0px;"><span style="position: absolute; clip: rect(1.822em, 1000em, 3.622em, -0.434em); top: -2.972em; left: 0em;"><span style="font-family: STIXSizeOneSym; vertical-align: -0.524em;" id="MathJax-Span-122" class="mo">∑</span><span style="display: inline-block; width: 0px; height: 2.972em;"></span></span><span style="position: absolute; clip: rect(1.678em, 1000em, 2.752em, -0.612em); top: -1.181em; left: 0.117em;"><span id="MathJax-Span-123" class="texatom"><span id="MathJax-Span-124" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-125" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-126" class="mo">=</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-127" class="mn">0</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; clip: rect(1.578em, 1000em, 2.512em, -0.515em); top: -3.531em; left: 0.058em;"><span id="MathJax-Span-128" class="texatom"><span id="MathJax-Span-129" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-130" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-131" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-132" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-133" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-134" class="mo">(</span><span id="MathJax-Span-135" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-136" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-137" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-138" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-139" class="mo">−</span><span style="padding-left: 0.37em; padding-right: 0.12em;" id="MathJax-Span-140" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-141" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.495em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-142" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="padding-left: 0.188em;" id="MathJax-Span-143" class="mfenced"><span style="vertical-align: -0.201em;" id="MathJax-Span-144" class="mo"><span style="font-family: STIXSizeOneSym;">(</span></span><span id="MathJax-Span-145" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-146" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-147" class="mo">(</span><span id="MathJax-Span-148" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-149" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-150" class="mn">0</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-151" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-152" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-153" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-154" class="mo">(</span><span id="MathJax-Span-155" class="msubsup"><span style="display: inline-block; position: relative; width: 1.704em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-156" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-157" class="texatom"><span id="MathJax-Span-158" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-159" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-160" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-161" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-162" class="mo">)</span></span><span style="vertical-align: -0.201em;" id="MathJax-Span-163" class="mo"><span style="font-family: STIXSizeOneSym;">)</span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.865em; vertical-align: 0em;"></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.865em; vertical-align: 0em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-164" class="mo">=</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.313em;" id="MathJax-Span-165" class="mi">h</span><span style="padding-left: 0.188em;" id="MathJax-Span-166" class="munderover"><span style="display: inline-block; position: relative; width: 1.282em; height: 0px;"><span style="position: absolute; clip: rect(1.822em, 1000em, 3.622em, -0.434em); top: -2.972em; left: 0em;"><span style="font-family: STIXSizeOneSym; vertical-align: -0.524em;" id="MathJax-Span-167" class="mo">∑</span><span style="display: inline-block; width: 0px; height: 2.972em;"></span></span><span style="position: absolute; clip: rect(1.678em, 1000em, 2.752em, -0.612em); top: -1.181em; left: 0.117em;"><span id="MathJax-Span-168" class="texatom"><span id="MathJax-Span-169" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-170" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-171" class="mo">=</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-172" class="mn">0</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; clip: rect(1.578em, 1000em, 2.512em, -0.515em); top: -3.531em; left: 0.058em;"><span id="MathJax-Span-173" class="texatom"><span id="MathJax-Span-174" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-175" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-176" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-177" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-178" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-179" class="mo">(</span><span id="MathJax-Span-180" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-181" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-182" class="mi">j<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.001em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-183" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-184" class="mo">−</span><span style="padding-left: 0.37em; padding-right: 0.12em;" id="MathJax-Span-185" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-186" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.713em, 1000em, 2.739em, -0.495em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-187" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="padding-left: 0.188em;" id="MathJax-Span-188" class="mfenced"><span style="vertical-align: -0.201em;" id="MathJax-Span-189" class="mo"><span style="font-family: STIXSizeOneSym;">(</span></span><span id="MathJax-Span-190" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-191" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-192" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-193" class="mi">a</span><span style="font-family: STIXGeneral;" id="MathJax-Span-194" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-195" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-196" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-197" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-198" class="mi">b</span><span style="font-family: STIXGeneral;" id="MathJax-Span-199" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-200" class="mo">)</span></span><span style="vertical-align: -0.201em;" id="MathJax-Span-201" class="mo"><span style="font-family: STIXSizeOneSym;">)</span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.865em; vertical-align: 0em;"></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.865em; vertical-align: 0em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-202" class="mo">.</span></span><span style="display: inline-block; width: 0px; height: 4.138em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 3.949em; vertical-align: -1.746em;"></span></span></nobr></span></div><script id="MathJax-Element-7" type="math/tex; mode=display"> h\left(\frac 1 2 f(x_0) + f(x_1) + f(x_2) + \cdots + f(x_{n-2}) + \frac 1 2 f(x_{n-1})\right) = h\sum_{j=0}^{n-1} f(x_j) - \frac h 2 \left(f(x_0) + f(x_{n-1})\right) =  h\sum_{j=0}^{n-1} f(x_j) - \frac h 2 \left(f(a) + f(b))\right). </script></p>
+
+<p>This can be implemented as follows (note that in Python fj[-1] refers
+ to the last element of fj, and similarly fj[-2] would be the next to
+last element).</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[114]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71661px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 135.2px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">trapezoid</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>):</pre><pre>    <span class="cm-variable">h</span> = (<span class="cm-variable">b</span><span class="cm-operator">-</span><span class="cm-variable">a</span>)<span class="cm-operator">/</span>(<span class="cm-variable">n</span><span class="cm-operator">-</span><span class="cm-number">1</span>)</pre><pre>    <span class="cm-variable">xj</span> = <span class="cm-variable">linspace</span>(<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>)</pre><pre>    <span class="cm-variable">fj</span> = <span class="cm-variable">f</span>(<span class="cm-variable">xj</span>)</pre><pre>    <span class="cm-variable">int_trapezoid</span> = <span class="cm-variable">h</span><span class="cm-operator">*</span><span class="cm-builtin">sum</span>(<span class="cm-variable">fj</span>) <span class="cm-operator">-</span> <span class="cm-number">0.5</span><span class="cm-operator">*</span><span class="cm-variable">h</span><span class="cm-operator">*</span>(<span class="cm-variable">fj</span>[<span class="cm-number">0</span>] <span class="cm-operator">+</span> <span class="cm-variable">fj</span>[<span class="cm-operator">-</span><span class="cm-number">1</span>])</pre><pre>    <span class="cm-keyword">return</span> <span class="cm-variable">int_trapezoid</span></pre><pre> </pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>We can test it out for the points used in the figure above:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[115]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 82.4px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">n</span> = <span class="cm-number">5</span></pre><pre><span class="cm-variable">int_trap</span> = <span class="cm-variable">trapezoid</span>(<span class="cm-variable">f1</span>,<span class="cm-variable">a1</span>,<span class="cm-variable">b1</span>,<span class="cm-variable">n</span>)</pre><pre><span class="cm-variable">error</span> = <span class="cm-builtin">abs</span>(<span class="cm-variable">int_trap</span> <span class="cm-operator">-</span> <span class="cm-variable">int_true1</span>)</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"trapezoid rule approximation: %22.14e,  error: %10.3e"</span> <span class="cm-operator">%</span> (<span class="cm-variable">int_trap</span>, <span class="cm-variable">error</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>trapezoid rule approximation:   6.25000000000000e+00,  error:  2.500e-01
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Using more points will give a better approximation, try changing it in the cell above.</p></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h3>Convergence tests</h3></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>If
+ we increase n, the number of points used, and hence decrease h, the
+spacing between points, we expect the error to converge to zero for
+reasonable functions <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-8-Frame" class="MathJax"><nobr><span id="MathJax-Span-203" class="math"><span style="display: inline-block; position: relative; width: 26px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.711em, 1000em, 2.946em, -0.671em); top: -2.564em; left: 0em;"><span id="MathJax-Span-204" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-205" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-206" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-207" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-208" class="mo">)</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.202em; vertical-align: -0.318em;"></span></span></nobr></span><script id="MathJax-Element-8" type="math/tex">f(x)</script>.</p>
+
+<p>The trapezoid rule is "second order accurate", meaning that the error goes to zero like <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-9-Frame" class="MathJax"><nobr><span id="MathJax-Span-209" class="math"><span style="display: inline-block; position: relative; width: 40px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.501em, 1000em, 2.916em, -0.464em); top: -2.564em; left: 0em;"><span id="MathJax-Span-210" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-211" class="mi">O</span><span style="font-family: STIXGeneral;" id="MathJax-Span-212" class="mo">(</span><span id="MathJax-Span-213" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-214" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-215" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-216" class="mo">)</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.418em; vertical-align: -0.282em;"></span></span></nobr></span><script id="MathJax-Element-9" type="math/tex">O(h^2)</script> for a function that is sufficiently smooth (for example if its second derivative is continuous).  For small <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-10-Frame" class="MathJax"><nobr><span id="MathJax-Span-217" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-218" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-219" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.97em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-10" type="math/tex">h</script>, the error is expected to be behave like <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-11-Frame" class="MathJax"><nobr><span id="MathJax-Span-220" class="math"><span style="display: inline-block; position: relative; width: 93px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.501em, 1000em, 2.916em, -0.458em); top: -2.564em; left: 0em;"><span id="MathJax-Span-221" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-222" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span id="MathJax-Span-223" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-224" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-225" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-226" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-227" class="mi">O</span><span style="font-family: STIXGeneral;" id="MathJax-Span-228" class="mo">(</span><span id="MathJax-Span-229" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-230" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-231" class="mn">3</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-232" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-233" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.418em; vertical-align: -0.282em;"></span></span></nobr></span><script id="MathJax-Element-11" type="math/tex">Ch^2 + O(h^3)~</script> as <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-12-Frame" class="MathJax"><nobr><span id="MathJax-Span-234" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-235" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-236" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.97em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-12" type="math/tex">h</script> goes to zero, where <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-13-Frame" class="MathJax"><nobr><span id="MathJax-Span-237" class="math"><span style="display: inline-block; position: relative; width: 12px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.723em, 1000em, 2.757em, -0.458em); top: -2.564em; left: 0em;"><span id="MathJax-Span-238" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-239" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.961em; vertical-align: -0.092em;"></span></span></nobr></span><script id="MathJax-Element-13" type="math/tex">C</script> is some constant that depends on how smooth <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-14-Frame" class="MathJax"><nobr><span id="MathJax-Span-240" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-241" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-242" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.97em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-14" type="math/tex">h</script> is.  </p>
+
+<p>If we double n (and halve h) then we expect the error to go down by a factor of 4 roughly (from <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-15-Frame" class="MathJax"><nobr><span id="MathJax-Span-243" class="math"><span style="display: inline-block; position: relative; width: 28px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.501em, 1000em, 2.757em, -0.458em); top: -2.564em; left: 0em;"><span id="MathJax-Span-244" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-245" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span id="MathJax-Span-246" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-247" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-248" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.227em; vertical-align: -0.092em;"></span></span></nobr></span><script id="MathJax-Element-15" type="math/tex">Ch^2</script> to <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-16-Frame" class="MathJax"><nobr><span id="MathJax-Span-249" class="math"><span style="display: inline-block; position: relative; width: 57px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.508em, 1000em, 2.916em, -0.458em); top: -2.564em; left: 0em;"><span id="MathJax-Span-250" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-251" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-252" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-253" class="mi">h</span><span id="MathJax-Span-254" class="texatom"><span id="MathJax-Span-255" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-256" class="mo">/</span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-257" class="mn">2</span><span id="MathJax-Span-258" class="msubsup"><span style="display: inline-block; position: relative; width: 0.774em; height: 0px;"><span style="position: absolute; clip: rect(1.713em, 1000em, 2.916em, -0.495em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-259" class="mo">)</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.734em; left: 0.35em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-260" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-261" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.409em; vertical-align: -0.282em;"></span></span></nobr></span><script id="MathJax-Element-16" type="math/tex">C(h/2)^2~</script>).</p>
+
+<p>We can check this by trying several values of n and making a table of the errors and the ratio from one n to the next:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[116]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 293.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">error_table</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true</span>,<span class="cm-variable">method</span>=<span class="cm-variable">trapezoid</span>):</pre><pre>    <span class="cm-string">"""</span></pre><pre><span class="cm-string">    An improved version that takes the function defining the method as an</span></pre><pre><span class="cm-string">    input argument.</span></pre><pre><span class="cm-string">    """</span></pre><pre>    <span class="cm-keyword">print</span> <span class="cm-string">"      n         approximation        error       ratio"</span></pre><pre>    <span class="cm-variable">last_error</span> = <span class="cm-number">0.</span>  <span class="cm-comment"># need something for first ratio</span></pre><pre>    <span class="cm-keyword">for</span> <span class="cm-variable">n</span> <span class="cm-operator">in</span> <span class="cm-variable">nvals</span>:</pre><pre>        <span class="cm-variable">int_approx</span> = <span class="cm-variable">method</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>)</pre><pre>        <span class="cm-variable">error</span> = <span class="cm-builtin">abs</span>(<span class="cm-variable">int_approx</span> <span class="cm-operator">-</span> <span class="cm-variable">int_true</span>)</pre><pre>        <span class="cm-variable">ratio</span> = <span class="cm-variable">last_error</span> <span class="cm-operator">/</span> <span class="cm-variable">error</span></pre><pre>        <span class="cm-variable">last_error</span> = <span class="cm-variable">error</span> <span class="cm-comment"># for next n</span></pre><pre>        <span class="cm-keyword">print</span> <span class="cm-string">"%8i  %22.14e  %10.3e  %10.3e"</span> <span class="cm-operator">%</span> (<span class="cm-variable">n</span>,<span class="cm-variable">int_approx</span>, <span class="cm-variable">error</span>, <span class="cm-variable">ratio</span>)</pre><pre>    </pre><pre><span class="cm-variable">nvals</span> = <span class="cm-variable">array</span>([<span class="cm-number">5</span>, <span class="cm-number">10</span>, <span class="cm-number">20</span>, <span class="cm-number">40</span>, <span class="cm-number">80</span>, <span class="cm-number">160</span>, <span class="cm-number">320</span>])</pre><pre><span class="cm-variable">error_table</span>(<span class="cm-variable">f1</span>,<span class="cm-variable">a1</span>,<span class="cm-variable">b1</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true1</span>,<span class="cm-variable">trapezoid</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>      n         approximation        error       ratio
+       5    6.25000000000000e+00   2.500e-01   0.000e+00
+      10    6.04938271604938e+00   4.938e-02   5.062e+00
+      20    6.01108033240997e+00   1.108e-02   4.457e+00
+      40    6.00262984878369e+00   2.630e-03   4.213e+00
+      80    6.00064092292902e+00   6.409e-04   4.103e+00
+     160    6.00015822158934e+00   1.582e-04   4.051e+00
+     320    6.00003930778982e+00   3.931e-05   4.025e+00
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>(Note that the first ratio reported is meaningless.)</p>
+
+<p>Convergence might be easier to see in a plot.  If a method is p'th order accurate then we expect the error to behave like <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-17-Frame" class="MathJax"><nobr><span id="MathJax-Span-262" class="math"><span style="display: inline-block; position: relative; width: 62px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.667em, 1000em, 2.757em, -0.525em); top: -2.564em; left: 0em;"><span id="MathJax-Span-263" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-264" class="mi">E<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.023em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-265" class="mo">≈</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.313em;" id="MathJax-Span-266" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span id="MathJax-Span-267" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-268" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-269" class="mi">p</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.028em; vertical-align: -0.092em;"></span></span></nobr></span><script id="MathJax-Element-17" type="math/tex">E\approx Ch^p</script> for some constant <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-18-Frame" class="MathJax"><nobr><span id="MathJax-Span-270" class="math"><span style="display: inline-block; position: relative; width: 12px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.723em, 1000em, 2.757em, -0.458em); top: -2.564em; left: 0em;"><span id="MathJax-Span-271" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-272" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.961em; vertical-align: -0.092em;"></span></span></nobr></span><script id="MathJax-Element-18" type="math/tex">C</script>, for small <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-19-Frame" class="MathJax"><nobr><span id="MathJax-Span-273" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-274" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-275" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.97em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-19" type="math/tex">h</script>.
+  This is hard to visualize.  It is much easier to see what order
+accuracy we are achieving if we produce a log-log plot instead, since <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-20-Frame" class="MathJax"><nobr><span id="MathJax-Span-276" class="math"><span style="display: inline-block; position: relative; width: 66px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.667em, 1000em, 2.757em, -0.525em); top: -2.564em; left: 0em;"><span id="MathJax-Span-277" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-278" class="mi">E<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.023em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-279" class="mo">=</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.313em;" id="MathJax-Span-280" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span id="MathJax-Span-281" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-282" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-283" class="mi">p</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-284" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.028em; vertical-align: -0.092em;"></span></span></nobr></span><script id="MathJax-Element-20" type="math/tex">E = Ch^p~</script> means that <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-21-Frame" class="MathJax"><nobr><span id="MathJax-Span-285" class="math"><span style="display: inline-block; position: relative; width: 162px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.957em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-286" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-287" class="mi">log</span><span id="MathJax-Span-288" class="mo"></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-289" class="mi">E<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.023em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-290" class="mo">=</span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-291" class="mi">log</span><span id="MathJax-Span-292" class="mo"></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-293" class="mi">C<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.022em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-294" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-295" class="mi">p</span><span style="font-family: STIXGeneral; padding-left: 0.188em;" id="MathJax-Span-296" class="mi">log</span><span id="MathJax-Span-297" class="mo"></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-298" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.221em; vertical-align: -0.332em;"></span></span></nobr></span><script id="MathJax-Element-21" type="math/tex">\log E = \log C + p\log h</script> </p>
+
+<p>In other words <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-22-Frame" class="MathJax"><nobr><span id="MathJax-Span-299" class="math"><span style="display: inline-block; position: relative; width: 40px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.957em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-300" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-301" class="mi">log</span><span id="MathJax-Span-302" class="mo"></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-303" class="mi">E<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.023em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-304" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.221em; vertical-align: -0.332em;"></span></span></nobr></span><script id="MathJax-Element-22" type="math/tex">\log E~</script> is a linear function of <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-23-Frame" class="MathJax"><nobr><span id="MathJax-Span-305" class="math"><span style="display: inline-block; position: relative; width: 38px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.957em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-306" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-307" class="mi">log</span><span id="MathJax-Span-308" class="mo"></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-309" class="mi">h</span><span style="font-family: STIXGeneral;" id="MathJax-Span-310" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.221em; vertical-align: -0.332em;"></span></span></nobr></span><script id="MathJax-Element-23" type="math/tex">\log h~</script>.</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[117]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 240.8px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">error_plot</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true</span>,<span class="cm-variable">method</span>=<span class="cm-variable">trapezoid</span>):</pre><pre>    <span class="cm-variable">errvals</span> = <span class="cm-variable">zeros</span>(<span class="cm-variable">nvals.shape</span>)  <span class="cm-comment"># initialize to right shape</span></pre><pre>    <span class="cm-keyword">for</span> <span class="cm-variable">i</span> <span class="cm-operator">in</span> <span class="cm-builtin">range</span>(<span class="cm-builtin">len</span>(<span class="cm-variable">nvals</span>)):</pre><pre>        <span class="cm-variable">n</span> = <span class="cm-variable">nvals</span>[<span class="cm-variable">i</span>]</pre><pre>        <span class="cm-variable">int_approx</span> = <span class="cm-variable">method</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>)</pre><pre>        <span class="cm-variable">error</span> = <span class="cm-builtin">abs</span>(<span class="cm-variable">int_approx</span> <span class="cm-operator">-</span> <span class="cm-variable">int_true</span>)</pre><pre>        <span class="cm-variable">errvals</span>[<span class="cm-variable">i</span>] = <span class="cm-variable">error</span></pre><pre>    <span class="cm-variable">hvals</span> = (<span class="cm-variable">b</span> <span class="cm-operator">-</span> <span class="cm-variable">a</span>) <span class="cm-operator">/</span> (<span class="cm-variable">nvals</span> <span class="cm-operator">-</span> <span class="cm-number">1</span>)  <span class="cm-comment"># vector of h values for each n</span></pre><pre>    <span class="cm-variable">loglog</span>(<span class="cm-variable">hvals</span>,<span class="cm-variable">errvals</span>, <span class="cm-string">'o-'</span>)</pre><pre>    <span class="cm-variable">xlabel</span>(<span class="cm-string">'spacing h'</span>)</pre><pre>    <span class="cm-variable">ylabel</span>(<span class="cm-string">'error'</span>)</pre><pre>    </pre><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f1</span>,<span class="cm-variable">a1</span>,<span class="cm-variable">b1</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true1</span>,<span class="cm-variable">trapezoid</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 394px; height: 278px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 278px; width: 394px;" class="ui-resizable" src="data:image/png;base64,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%0A/zfgh3ptRGDvAAAAAElFTkSuQmCC%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h3>An oscillatory function</h3></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>If the function <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-24-Frame" class="MathJax"><nobr><span id="MathJax-Span-311" class="math"><span style="display: inline-block; position: relative; width: 26px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.711em, 1000em, 2.946em, -0.671em); top: -2.564em; left: 0em;"><span id="MathJax-Span-312" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-313" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-314" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-315" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-316" class="mo">)</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.202em; vertical-align: -0.318em;"></span></span></nobr></span><script id="MathJax-Element-24" type="math/tex">f(x)</script>
+ is not as smooth (has larger second derivative at various places) then
+the accuracy with a small number of points will not be nearly as good.
+For example, consider the function <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-25-Frame" class="MathJax"><nobr><span id="MathJax-Span-317" class="math"><span style="display: inline-block; position: relative; width: 179px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.548em, 1000em, 2.981em, -0.671em); top: -2.564em; left: 0em;"><span id="MathJax-Span-318" class="mrow"><span id="MathJax-Span-319" class="msubsup"><span style="display: inline-block; position: relative; width: 0.687em; height: 0px;"><span style="position: absolute; clip: rect(1.711em, 1000em, 2.946em, -0.671em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-320" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.089em; left: 0.262em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-321" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-322" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-323" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-324" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-325" class="mo">=</span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-326" class="mn">1</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-327" class="mo">+</span><span style="padding-left: 0.25em;" id="MathJax-Span-328" class="msubsup"><span style="display: inline-block; position: relative; width: 0.942em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-329" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.694em; left: 0.517em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-330" class="mn">3</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-331" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-332" class="mi">sin</span><span id="MathJax-Span-333" class="mo"></span><span style="font-family: STIXGeneral;" id="MathJax-Span-334" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-335" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-336" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-337" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-338" class="mtext">&nbsp;</span><span style="font-family: STIXGeneral;" id="MathJax-Span-339" class="mtext">&nbsp;</span><span style="font-family: STIXGeneral;" id="MathJax-Span-340" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.44em; vertical-align: -0.361em;"></span></span></nobr></span><script id="MathJax-Element-25" type="math/tex">f_2(x) = 1 + x^3 + \sin(kx)~~~</script> where <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-26-Frame" class="MathJax"><nobr><span id="MathJax-Span-341" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-342" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-343" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-26" type="math/tex">k</script> is a parameter.  For large <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-27-Frame" class="MathJax"><nobr><span id="MathJax-Span-344" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-345" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-346" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-27" type="math/tex">k</script> this function is very oscillatory.  In order to experiment with different values of <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-28-Frame" class="MathJax"><nobr><span id="MathJax-Span-347" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-348" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-349" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-28" type="math/tex">k</script>, we can define a "function factory" that creates this function for any given <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-29-Frame" class="MathJax"><nobr><span id="MathJax-Span-350" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-351" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-352" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-29" type="math/tex">k</script>, and also returns the true integral over a given interval:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[118]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71661px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 117.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">f2_factory</span>(<span class="cm-variable">k</span>, <span class="cm-variable">a</span>, <span class="cm-variable">b</span>):</pre><pre>    <span class="cm-keyword">def</span> <span class="cm-variable">f2</span>(<span class="cm-variable">x</span>):</pre><pre>        <span class="cm-keyword">return</span> <span class="cm-number">1</span> <span class="cm-operator">+</span> <span class="cm-variable">x</span><span class="cm-operator">**</span><span class="cm-number">3</span> <span class="cm-operator">+</span> <span class="cm-variable">sin</span>(<span class="cm-variable">k</span><span class="cm-operator">*</span><span class="cm-variable">x</span>)</pre><pre>    <span class="cm-variable">int_true</span> = (<span class="cm-variable">b</span><span class="cm-operator">-</span><span class="cm-variable">a</span>) <span class="cm-operator">+</span> (<span class="cm-variable">b</span><span class="cm-operator">**</span><span class="cm-number">4</span> <span class="cm-operator">-</span> <span class="cm-variable">a</span><span class="cm-operator">**</span><span class="cm-number">4</span>) <span class="cm-operator">/</span> <span class="cm-number">4.</span> <span class="cm-operator">-</span> (<span class="cm-number">1.</span><span class="cm-operator">/</span><span class="cm-variable">k</span>) <span class="cm-operator">*</span> (<span class="cm-variable">cos</span>(<span class="cm-variable">k</span><span class="cm-operator">*</span><span class="cm-variable">b</span>) <span class="cm-operator">-</span> <span class="cm-variable">cos</span>(<span class="cm-variable">k</span><span class="cm-operator">*</span><span class="cm-variable">a</span>))</pre><pre>    <span class="cm-keyword">return</span> <span class="cm-variable">f2</span>, <span class="cm-variable">int_true</span></pre><pre>    </pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>First create a version of <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-30-Frame" class="MathJax"><nobr><span id="MathJax-Span-353" class="math"><span style="display: inline-block; position: relative; width: 12px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.362em, 1000em, 2.632em, -0.671em); top: -2.214em; left: 0em;"><span id="MathJax-Span-354" class="mrow"><span id="MathJax-Span-355" class="msubsup"><span style="display: inline-block; position: relative; width: 0.687em; height: 0px;"><span style="position: absolute; clip: rect(1.711em, 1000em, 2.946em, -0.671em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-356" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.089em; left: 0.262em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-357" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.244em; vertical-align: -0.361em;"></span></span></nobr></span><script id="MathJax-Element-30" type="math/tex">f_2</script> with <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-31-Frame" class="MathJax"><nobr><span id="MathJax-Span-358" class="math"><span style="display: inline-block; position: relative; width: 48px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.701em, 1000em, 2.753em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-359" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-360" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-361" class="mo">=</span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-362" class="mn">50</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.982em; vertical-align: -0.087em;"></span></span></nobr></span><script id="MathJax-Element-31" type="math/tex">k=50</script>:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[119]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 100px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">k</span> = <span class="cm-number">50.</span></pre><pre><span class="cm-variable">a2</span> = <span class="cm-number">0.</span></pre><pre><span class="cm-variable">b2</span> = <span class="cm-number">2.</span></pre><pre><span class="cm-variable">f2</span>, <span class="cm-variable">int_true2</span> = <span class="cm-variable">f2_factory</span>(<span class="cm-variable">k</span>, <span class="cm-variable">a2</span>, <span class="cm-variable">b2</span>)</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"true integral: %22.14e"</span> <span class="cm-operator">%</span> <span class="cm-variable">int_true2</span></pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>true integral:   6.00275362255425e+00
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>For this function with k=50, using n=10 points is not going to give a very good approximation:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[120]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 29.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">plot_trap</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-number">10</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 373px; height: 253px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 253px; width: 373px;" class="ui-resizable" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXUAAAD9CAYAAABDaefJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz%0AAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVPX+P/DXICq4pCiKJigKaqggiyyS4FgIKrmWqXVz%0AQc3b4tLta95SC0vMrpWpLT+zUtPbdr03NxTUdMDcEEVFFgUUAzfcxY318/vj48As58wcZgaGObyf%0Aj4ePnDPnc87nMPmaD5/zOZ+PgjHGQAghRBbsrF0BQgghlkOhTgghMkKhTgghMkKhTgghMkKhTggh%0AMkKhTgghMmI01GNiYuDi4gJvb2+99z777DPY2dnh5s2btVI5QgghNWM01KdMmYKEhAS97QUFBdi9%0Aeze6dOlSKxUjhBBSc0ZDPSwsDE5OTnrb//GPf+Bf//pXrVSKEEKIaexNKbRlyxa4urrCx8fH4H4K%0AhcKkShFCSENn6sP+Nb5R+uDBAyxZsgSLFi2SdHLGmGz/fPDBB1avA10bXR9dn/z+mKPGoZ6Xl4f8%0A/Hz07dsXXbt2RWFhIQICAlBUVGRWRQghhJivxt0v3t7euHr1atXrrl274tixY2jTpo1FK0YIIaTm%0AjLbUJ0yYgNDQUJw9exZubm5Yu3at1vsNud9cqVRauwq1Rs7XBtD12Tq5X585FMzcDhxDB1cozO4f%0AIoSQhsac7KQnSgkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo%0A1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1AkhREYo1Akh%0AREYo1AkhDVpZGXD7trVrYTmSQj0mJgYuLi7w9vau2jZ37lx4eXnB398fc+bMwZ07d2qtkoQQUhsY%0AA4YMAVxcgPR0a9fGMiSF+pQpU5CQkKC1LTIyEhkZGUhNTcX9+/fx8ccf10oFCSGktiQlAZcvA0uW%0AAHFx1q6NZUgK9bCwMDg5OWltGzx4MOzs7GBnZ4eoqCgUFhbWSgUJIaS2bN4MvPwyMHUqEB8P3Ltn%0A7RqZz94SB1mzZg2mTZsm+F5sbGzV35VKJZRKpSVOSQghZtuzB/jhB6B1ayA4mL8eNaru66FSqaBS%0AqSxyLAVjjEnZMT8/H8OHD0e6TsdTXFwc0tLSsGnTJv2DKxSQeHhCCKlTt28Dbm78v40aAZ9/Dpw5%0AA6xebe2amZedZo1+WbduHXbs2IGNGzeacxhCCKlzp04BffrwQAeAgQOBP/+0bp0sweTul4SEBCxb%0AtgzJyclwcHCwZJ0IIaTWnTwJ9O1b/bpvX6CgALhxA2jb1nr1MpeklvqECRMQGhqKM2fOwM3NDT/8%0A8ANmzpyJe/fuISIiAn5+fnj99ddru66EEGIxp04BPj7Vr+3tgZAQ4OBB69XJEiT3qZt0cOpTJ4TU%0AU8HBwGefAQMGVG/78EPg/n3gk0+sVy/AvOy0yOgXQgixNTk5QM+e2ttGjgQyM61TH0uhljohpMG5%0AdQvo0gW4cwdQKKxdG31WG/1CCCG26Nw5oFu3+hno5qJQJ4Q0OHl5gIeHtWtROyjUCSENDoU6IYTI%0AiLr7RY4o1AkhDQ611AkhREbk3FKnIY2EkAaltBRo2ZJPs9u4sbVrI4yGNBJCiET5+UCnTvU30M1F%0AoU4IaVDOnZNvfzpAoU4IaWDk3J8OUKgTQhoYCnVCCJGR8+cp1AkhpN5btQr4v/8DKisN73fuHNC1%0Aa93UyRoo1AkhNi8jA1i8mC8cbWh1Tcbk3/1C49QJITZv3jw+RDEoiC9wceCA8H43b/JW+u3b9XuG%0ARhqnTghp0BISgOhoYOhQ3movKhLeT92fXp8D3VwU6oQQm3bzJn+gKDCQt9aVSmD3buF9z5+Xd386%0AICHUY2Ji4OLiAm9v76ptxcXFGDVqFHx8fDB69Gjcu3evVitJCCFiTpwA+vblC0cDwODBwB9/CO8r%0A9/50QEKoT5kyBQkJCVrbPvroI4SGhuLUqVMICQnB4sWLa62ChBBiSFoa4Otb/To0FDh0SHjfhtBS%0AN7rwdFhYGPLz87W2bd26FUlJSQCASZMmQalUYunSpYLlY2Njq/6uVCqhVCpNriwhhOg6cQIYNKj6%0Atbc3UFjIu2XatNHeNzcXGDGibusnhUqlgkqlssixJI1+yc/Px/Dhw5Geng4AcHJywq1btwAAjDG0%0AadOm6rXWwWn0CyGklvn4AOvWAf7+1dsGDQLeeYffONXk5gbs3w+4u9dlDWvOqqNfFAoFFHK+lUwI%0AqbcY463v7t21t/fvr98FU1zMW++dO9dd/azBpFB3cXHBlStXAACXL19G+/btLVopQgiR4vJlPjd6%0Ay5ba2/v3Bw4e1N525gzQowdgJ/MxfyZd3ogRI7B+/XoAwPr16zFq1CiLVooQQqQQW5bu6aeBlBSg%0AvLx6W3Y28NRTdVc3azEa6hMmTEBoaCjOnj0LNzc3rF27FgsXLsShQ4fg4+ODI0eOYMGCBXVRV0II%0A0ZKbKxzqbdoAXbrwkTFqp08DvXrVXd2sxejol59//llw++bNmy1eGUIIqQlDC0iHhwPJyfyhJAA4%0AepRP+CV3Mu9dIoTImbFQ37+f/72yEjh2rDrg5YxCnRBis6S01EtLgfR0oF07wNm5butnDUa7Xwgh%0ApL4yFOodOwJ9+gCJicCpU8CwYXVbN2uhUCeE2KTbt3kr3NCI6ilTgA8/BK5eBf7zn7qrmzVRqBNC%0AbJK6lW7o2ceJE/l49Q4dgODguqubNVGoE0JskqGuF7VGjYA1a+qmPvUF3SglhNgksTHqDR2FOiGk%0A3igt5cMOg4KAkhLD+0ppqTdEFOqEkHpj40bAyQlo2xZ4PBOJKAp1YRTqhJB647//BaZNA958k0Ld%0AVJLmUzf54DSfOiFEokeP+PDECxcAR0f+sNBff/GWu9C+rVoB9+9XL2MnJ1adT50QQizh5Ene8nZy%0AAhwc+EyL+/Zp75McH48FUVF4P1yJEPsoHEyMt05l6zEZfscRQmxRWpr26kXPPAMkJQFjxvDXyfHx%0ASJw9G3F5eVX7zJ/N/x4eHV2XVa3XqKVOCKkXjh8H/PyqXwcHA0eOVL/etXKlVqADQFxeHnavWlVH%0ANbQNFOqEkHpBt6UeEMAn4lIPbbQXGePY6NGjOqid7aBQJ4RYHWNAZiafgEutRQvA05P3tQNAedOm%0AgmUrHBzqoIa2g0KdEGJ1ly/zEH/iCe3tml0wkcOHY75OgL/n4YHBM2fWUS1tA4U6IcTqcnN5q1xX%0ASAhwcv9d4K23EP7hh4iKicH8iEgAwPzBURiyYgXdJNVh1uiXNWvWYO3atSgpKUFYWBi++OILS9WL%0AENKACIY6Y4i6/SuG/e9tYGIUkJGB8Hbt0OokAF8F4nYlWKOq9Z7JLfWbN29iyZIl2L17N44ePYqz%0AZ88iMTHRknUjhDQQeqGenQ1ERODJ9R9jSrPfcDnuB/40EoCMDOvU0VaYHOqOjo5gjOHOnTt4+PAh%0AHjx4ACehR78IIcSIqlC/fx94910gLAwYMQKKY8fQKPxpHDxYvS+FumEmd784Ojrim2++gbu7O5o2%0AbYpZs2YhKChIb7/Y2NiqvyuVSiiVSlNPSQiRqdwchn6Fm4Fec4ABA/j6cx07AgBCQ/lCF88/z/c9%0AdsyKFa0lKpUKKpXKIscyee6Xa9euITAwEHv27IGTkxPGjh2Lt99+G9EaNy1o7hdCiDEsNw+7n5qJ%0AZz3z0eibr4BBg7TeT0oC5s0DDh8GKiuBNm2A23cUfBykTFll7peUlBSEhITA09MTbdu2xdixY5Gc%0AnGzq4QghDc3Dh0BsLFhwMA42UaLRqRN6gQ7wYY3Z2Xyd0dOnq7rWiQiTQz0sLAypqam4efMmSkpK%0AsHPnTkRGRlqyboQQudqxgz9pdPo0jq85jp3e7wBNmgju6uAADB0K/O9/wO+/AzSC0TCT+9SfeOIJ%0ALFiwAKNHj8aDBw8wZMgQDBL4liWENDwlJcCECYC7O/D55xpvXLgAzJnDm9xffQUMGYLMH4XHqGv6%0A+9+Bl14CysuBxEQAK2qx8jaO5lMnhFhEcnw8dq1cCfuSEpwvaoqzdrNQ9DAa69YBYcGlPN2XLeOh%0APncub4IDeP99QKEAFi0yfPzVq4HGjYGYGPACMs4Wc7KTpt4lhJhNaFrcOR3ygGHAkY8dEXb+DT5Z%0A+tGjQLduWmVzc4EhQ4yfY8YMS9danijUCSFmE5oW94sreXhv2zS8eKMp2H9XQDFyBG9h68jNBbp3%0Ar6uayh/N/UIIMZvYtLhNHJtgaOdMZHYfKRjogPi8L8Q0FOqEELOJTovr5YWQZ5rpLUundvMmv/np%0A7FyLlWtgKNQJIWaLnDUL8z08tLapp8V9+mng0CHhcnl5vJUu0ognJqBQJ4SYLTw6GlF+fljYqhUA%0A4K0B1dPiBgYCqanC5fLy+P1TYjl0o5QQYr6VKxGeno7A9Fygczss25cA+8fp4uUFXLwI3L4NtG6t%0AXYz60y2PWuqEEPP88gsff56YiLw7vHPcXqO5aG8P+PryhaV1UahbHoU6IcR0e/YAs2fzx/67dEFO%0AjvBugYF8iLou6n6xPAp1Qohpjh3jz+5v2gR4ewPgLW8hQv3qjAFZWcBTT9VyPRsYCnVCSM3l5ADD%0AhwPffssXtNDYLCQoqHoBabWrV/l/XVxqqY4NFIU6IaRmrlzhz/UvWgSMGqX1llioe3gAjx4BhYXV%0A2zIygN69aTijpVGoE0Kku3OHB/qUKcD06Xpvi4W6QgH07689Xv30aT77LrEsCnVCiEGlpXzFITx6%0AxFvmAwYA8+fr7ffgAXDjhvhx+veH1lqjJ04APj6Wr29DR6FOCBGVnw+0bQuMGVkB9sor/Hn+FStE%0AJ+bSmYBRS2iodkv94EG+jVgWPXxECBG1bBnw5hsM3qtn4XbXG3A6tBNo1Ehw35ycx7MtZgofKzCQ%0Aj3a5cYO3/K9eBXr1qr26N1QU6oQQQZWVfPm4U+PiUNHsIGL7qrBCZOIuQCPURTg6AoMHA1u38ob+%0AM8+Ifj8QM1D3CyFE0KlTQEzlGjhvXYviX3di895WBhcbMhbqAPDKK8Dy5cCqVcDLL1u2voSjUCeE%0ACCr6djPevvsBkJgIj6c7oKSE97GLkbLYxYgRQHAw73YZPdqi1SWPmRXq9+/fx6RJk+Dn54devXrh%0A8OHDlqoXIcSakpMRsvZV7HpzG+DpCYUCGDgQSEoSL5KTY3weF4UCWLMG2LABsKMmZa0w68f6+uuv%0AY+DAgUhLS8OpU6fg5eVlqXoRQqwlPR0YOxbvdPoJXcYEVG3u3x9ISREucv8+n4WxU6c6qiMRZXKo%0A37lzB/v370dMTAwAwN7eHq0ez6VMCLFR+fnAsGGoWL4S6woj0Ldv9Vv9+vHpXoTk5fHhjNT6tj6T%0AR7+cP38e7dq1w+TJk5Gamor+/ftj5cqVcHR01NovNja26u9KpRJKpdLUUxJCatP160BUFPDOO8gP%0AHocOHfiIFTVfX/4UaFkZ0LixdlEpXS9EnEqlgkqlssixFIwZup8tLjU1FUFBQdiyZQsiIiIwY8YM%0AREREYOLEidUHVyhg4uEJIXXp3j3g2WeBiAggLg4JCcDnnwO7dmnv1qsX8PPP0GrBA8AnnwDXrgGf%0AfgrecV7b/+7r4hxWZE52mvzLkqurK9q2bYvhw4fD0dEREyZMwM6dO009HCHEWsrKgBde4BOxLF4M%0AADh7VngkS0CAcBcMLXZRf5gc6h06dICnpyeOHDmCyspKxMfHIyIiwpJ1I4TUtspKICYGaNIEWL26%0A6vH/s2eBHj30dxcLdep+qT/Muq2xfv16zJ49Gz169MDFixcxfvx4S9WLEFIX5s0Dzp/nS9JprEEn%0AFur9+gmvYJSVxdciJdZncp+6pINTnzoh9cK+bfFYO28lXJqXoGmbpoicNQvhWVnAunVAcjLQpo3W%0A/l278pXqdJeae/CAz+l18ybg4MC3FRXx1Ytu3Hjc0Kc+dbOZk5009wshMpccH4//xszGj9fzqrbN%0AP3ECYAzhx4/rBfqjR8Dly0CXLvrHataMB3haGh+3DlTPi06LXdQPNKqUEJnbtXIlvtQIdACIKyrC%0A7p49AVdXvf3z8gB3d63eGC3BwdpL09FiF/ULhTohMld+t0RweyORKRLF+tPVdEP92DE+hp3UDxTq%0AhMhc0X3h6XIr1J3iOnJyDId6SAhf4ELd5XvgAC12UZ9QqBMicyXus/B6W+07nnM7e2DwzJmC+4uN%0AUVfr2ZP3n2dm8r73GzdosYv6hEKdEJk7fz0afq+8jYWPO8lHdIiCw+gVCI+OFtzfWKgrFHwK3f/9%0AD9i8GRg6lOZ8qU9o9AshMlZRAaSfqMCU8h9hv2IF8MYbUM5NwLlz4mXOnuWtcUOmT+ezCjRrBnz7%0ArWXrTMxD36+EyFh+PjC36UrYOzYB/v53AIC/Px+SKOTuXaC4GHjyScPH9fbm87288QZfoo7UH9RS%0AJ0TGClR5mH0/DvjuUFUfia8vcPIkb8XrDoBRL0knZcz5lCm1UGFiNmqpEyJXjMFj6XTsDfqnVid5%0A69ZAhw68m0WXlHVGSf1GoU6IXK1Zg4o793DxhTl6b/n7A8eP6xcxNkad1H8U6oTYkLQ0oFUrIC7O%0AyI6FhcD8+fjQ/Qf06KXfy+rvLzzborGRL6T+o1AnxIYsXAi89Rbw2WfA1asiOzHGb4q++SZ2Xeoj%0AOJIlIABITdXfbuzBI1L/0SyNhNiI27eBzp2BixeBV18FBg3i/9Xz738Dn3yCe6pUtHdtgnv3NMaR%0AP57d8NYtfqzbt6tvljLG+9vPnQPatjWjojRLo9mssvIRIaRu7d0LDBgAtGwJjBwJbNsmsFNREfCP%0AfwDff4+z+U3g6Sn8YJCTE79Zmp1dve3CBaBFCzMDnVgdhTohNuLIkerpbgcO5HOuVFbq7DRzJjB5%0AMhAYaPQhosBA7QUvTp7UX3uU2B4KdUJsREoKEBTE/96xI29ta7a08fvvwIkTQGwsAODMGcP947qr%0AGJ06Bfj4WLzapI5RqBNiAyoq+GiVwMDqbU8/zWdLBADcugW8+Sbw3XeAoyMA44/7BwbyLwq11FTA%0Az8/ydSd1i0KdEBtw4QK/iam5SFFAgMbj/v/4BzB6NBAWVvW+lFA/c4bPslhZCezfD4SH1079Sd0x%0Ae5qAiooK9OvXD66urtgmeOeGEGKuM2f0A9rXF/jtNwCJicC+fUB6etV7jBkfc+7gACiVwK5dvJum%0AXTverUNsm9kt9RUrVqBXr15Q0AKFhEhWUQHEx/PJs6TIzuZrg2rq2xc4d7IYbMYMPlViy5ZV7xUV%0AAU2a6C0/quf554G1a4ENG4AXXqjhRZB6yaxQLywsxI4dOzBt2jQaj05IDfzrX8C4cdInxRJqqbdu%0ADSy1exd3AwYBkZFa70l93H/CBKCggAf7669LrDyp18zqfnnrrbewbNky3L17V3Sf2Md34gFAqVRC%0AqVSac0pCbF5lJfDll0BSEl9g4vx5oGtXw2XOnOGtai379+O5st+xN/o0Ruu8JTXUmzThN0hLSoy3%0A6kntUalUUKlUFjmWyaG+fft2tG/fHn5+fgYroxnqhBDg8GEeoAEBfAWhLVuAOfpzbmnJztZpqT98%0ACEydit2jvsLJHCfBUJc6h0vz5vwPsR7dBu+iRYtMPpbJ3S8HDx7E1q1b0bVrV0yYMAF79+7FxIkT%0ATa4IIQ1FcjIQEcH/PmwYv1FpyN27/I+rq8bG2FjAzw+O40cJLnhBsy02XBaZ+yUpKQmffvqp3ugX%0AmvuFEH2jRvG+7HHjgCtXAC8vPqxQbJ3Po0f5HC9V4Z2aCjz3HHDqFC6WtYevL78xqjlWoVcv4Jdf%0ABB4mksu8LDT3iyiLjVOn0S+EGMcYf9w/JIS/7tCBd8VoPRmqQ+smaWkpEBPDp2ls3x5PPgnY2wN/%0A/VW9/6NHvJ/e2DqjRJ4sEuoDBw7E1q1bLXEoQmTt0iU+nLFz5+ptISG8n12MVn/60qW88EsvAeAN%0A1sBA7Wl0MzN5f3rTppavP6n/6IlSQsxw/z6wbh1w5460/bOzedeI5i+26jVDxZw583iM+unTwKpV%0AwP/7f1oH0J3DhSbmatgo1AkxwzvvAHPnAq+9Jm1/oYeIpIR6T49y3u0SF6dzx5SHumZL/cQJmpir%0AIaNQJ8REDx7w9SiOHAF27uQ3PY0RezL05Enh+36VlXw1ot67v+CTnU+frrdPUBBvqZeW8td//gmE%0AhppwQUQWKNQJMVFiIu/P7tYNiIoCtm83XkYo1Nu35/OwaN7sVPvrLyCgVQ6aLl8KrFmj3W/zmLMz%0AP+aff/KVjM6e1Z7NkTQsFOqEmOjPP/mScgB/MnTPHuNlhEIdEO+COZNVia9KpgELFgAeHqLHjY7m%0A06lv3con6WrSRNo1EPmhUCfERIcOVa9EFBqqMbe5iOJiPh5dc+SLWt++vC9cV5O1q9GyaRlf0ciA%0AqVN5V1BsLDBtmrT6E3miUCfksbIy6fuWlPCWtbqbw9OTP7lfWCheRv2Up9BDRr6+AqH+11/ot+19%0A/Dnl++rVoUV06sRH4cycyaceIA0XhTohAL7/nndZ/PKLtP2zs4EuXfi9S4B3datvWBoqI9T1AvB5%0AYI4f19jAGDBjBv7z5By0H+glqU4jRgBvvSXY7U4aEAp10uCVlwPz5wOrVwPvviuwmLOArCw+3lxT%0A3758nU8xhkLdw4OvSHfjxuMNGzYAV67gw0fv0JOhpEYo1EmDp1IBbm58fhUHB74WqDFZWeJDE8WI%0AhXpyfDzeHxqFQQolFkRFIXnDBmDuXNz+/AfcutcYXbrU6HJIA2f2cnaE2Lq9e/lsiQDvwoiPNz4k%0AMCsLGDlSe1vfvsB774mX0Zs+FzzQE2fPRlxeHt9wDJj/2gFg6FCUVfqhb1/xib4IEUL/uxDZqaio%0A2f4HD1Y/rBMWBhw4YLxMdjafXVFT9+78ASShJeoqKoDcXP1Q37VyZXWgPxZ3/z5237mDEycAP78a%0AXAghoFAnMvPFF3zWwh07pO1fVsYfsQ8O5q9DQoCUFMNfDBUV/ClP3YBu1Ajo3Vtr/ecqFy7wh4ya%0ANdPebl9SIniORqWlSE2lUCc1R6FOZOPhQ2DRIr5UnKFuEE1ZWXzceOvW/LWzM+DiwreLOX+e7yO0%0AWpBYv7pYf3q5yFSKFQ4OUKmAgQONXwMhmijUiWzs3An4+/PJta5d4+PCjcnM5K1rTX5+hm94ZmXp%0Ad72oCY43h3B/OgBEPvcc5us8/vm6swc8h89E06bG1y4lRBeFOqmXSkoMDw8U8scf/HF5Ozu+MJCU%0ALpjMTP2A9vExfG6hkS9qvr4QXF6uavpctbIy4KOPEP7RR4h64w0sjIoCALzWLwrJzVYgLScaL75o%0AvP6E6KJQJ7UmOT4eC6KiEKt8PFQvPl5y2alTeVfGhg3Sz3fwIPD00/zvAwYYf2wfEG51Gwt1oZuk%0Aan37AhkZfOy7bpmqUD99mnfeHzoEpKUh/PPP8VFCAgDg65QEdOwRjXXrgNmzjdefED2sFtXy4Uk9%0AlrR9O3vPw4Mx/mwkYwB7z8ODJW3fbrRsQQFjTk6M7dzJmJeX8fPMj4xkCwYMZMF2kWzP7/z4OTmM%0Auboar2evXoydOKG9LT+fsY4dxcuEhDCWnCz+fo8ejKWnV7+urGSsXTvGLl4oY2zJEsacnRn77jv+%0AhqbH/14qKhgrKTFed5PUxb9JuZzDiszJTgp1UivmR0ZqBbr6z4KoKKNlly9nLCaGZ16nToxlZwvv%0AZ+iLo7KSZ2dhofh5ysoYc3Bg7MED7e2VlYw98QRjRUX6ZSorGWvdmrFr18SP++KLjG3YUP26sJCx%0AUKdMVhkUxFhEBGMXLggXlEsYyuUcVmROdpr18FFBQQEmTpyIoqIitGvXDpMnT8bkyZMt8PsDsXWi%0AQ/VSU4FXXgFatqz+06KF1uui/7bA2OiWUJxriXGDWmL31pbo+X8OepOaCI7xzsvDwlWrEB4dDV9f%0A3o3SqZNwHfPygCefBBwdtbcrFNVdMM8+q/1eUREfuujsLH7tfn68X/1vfwNQUYE773+B+HtLoZjy%0AETBjBk3OQmqVWaHeuHFjLF++HL6+vrh+/Tr69OmD4OBgeIl1OBKbdfAgv/G4cKG0BY1Fh+q5uQGD%0AB/MndNR/ioqAe/eA4mKw4mKMOlwM3xv3gG+LEXe9GHY/FQPvluuFv73I8JZGjx4BqA7moUOF65iZ%0AqT9/i5p6HhfdUDc0f4uary/wySfgg9knT0bzS42xesoRzPt7N8MFCbEAs0K9Q4cO6NChAwDA2dkZ%0AgYGBuHTpEoV6PZaby4fcPf+89AZjSQnwwgu8ddqiBfDPfxovE/nss3h39x/4mFU/xfO2mwdGLl7M%0Ah6iIyMsFnh8EFGTy1xfOAEOGAOfPllUFv/pP+ZtvCk7UUpGVBWzaBL+norFT5aj3vpqxoYn79+tv%0AlxLqIUGVCDy4Cqz/R1C8/z7eTHwTEyNoTAKpGxab+yU3NxcZGRkICQnR2h4bG1v1d6VSCaVSaalT%0A1oqUFODSJWDUqJqXy89HjYeh/fknHy3x6qs1+638q6/4EL4ff6ye/tWYsjK+7NqdO/ypyHHjpJXb%0Avp0H2aef8nCfN89AXRkDVq5E+GefYXWHBXjD7TC+SknEGLcodImaiXADgQ7wL5yAgOrX3bvz+hbd%0Aaoz27Z0AJ6eq9yIXLcJ8zXlTALzn7o4hw4cDq1dj/JHpaGX3HBA/nv92oDMePCsLeOYZ4Xr07csf%0AYtJlNNTPnUPrKVPwcpNyHP78EAJf6o797wM/rDN42aSBU6lUUKlUljmYJTr1i4uLWUBAANu8ebPW%0Adgsdvs5cu8ZvrrVty1hSkvRyN2/ycu3bM5aYWPNybm6M/ec/0supR4dERDC2eLH0clu3MhYaytjm%0Azfy/Uk2axNjXX/ObhK6ujGVliexYXMzYuHGM+fmx+6fPsWbNHt+EBNi6dfwtY2JjGXv3Xe1tAwcy%0Atnu38P5J27ezec9EVd2E1Rxd8/D8ZTbHfhWr6B/KP9Tp0xnbu5ex8nLGGGP+/owdOiR83AcP+E1U%0A3VEoQ4Y1FWpaAAAWYUlEQVQwtm2bQIGKCv5DcnZm7NNP2fvzy9mcOYzt28eYr6/x62aMyecGo1zO%0AYUXmZKfZP5nS0lIWGRnJli9frn9wG/vBf/45Y3/7G2PffMPY2LHSy335JQ+s779nbORI6eW++oqP%0AlPjtN8aefVZ6uSVLGHv1VcaOHmXM01N6ucmTGVu1igdVy5aGR3Bo8vBg7PRp/veYGH4MPZmZfPzh%0A1KmMPXzIVCrGgoMfvwewrCzG3N2Nn+vFFxnbuFF72xtv8M9GzIEDTPQfuZfX4yGL+fmMffIJY35+%0AjHXowCpnzmJKh0Ps9q1KwXJaZTV06cKHS2rJz+cfYFBQ1TdeXh7/HgkP56N5JJFLGMrlHFZkTnaa%0A1dHHGMPUqVPRu3dvzJkzxxK/OFjVtm28S2LMGGDXLv0HSMRs3crLjRrFp3EVGfihJz4eGDuWT/t6%0A5Ijw7H5Cdu/m5woI4GXOn5dWbv/+6kWJBw7k3TfGXL7MF29Q9z3378+7mrT89hsQHg68/Tbw3XeA%0AgwPS03kXhlqPHvw4164ZPl9Ghv5j+97ewpNkaZYRU/UgUZcuwDvv8OWFVCrcsW+DNWWT0cqvG18Z%0A4+RJ3nWkQfeRf/UiFt3U9zsZ49fbrx8QEcGnd3zcN9OtG7+p3KkT8Pe/G75mQizJrFA/cOAANm7c%0AiL1798LPzw9+fn5IePxknK0pKeFhFRbGZ9Pr2lUgvASUl/MHA8PDgTZtePhJeZKxooJnwMCBfGKo%0Afv2A5GTj5UpLeb1CQ3m/9rPP1iyc1aM9BgzgXyTGHDnCZzBUz+kdGKixZFtZGV8/7Z//5N+CU6dW%0AldMNZzs7oE8f/jClmLIyPsxQd44UY6GemSn+nuAEWz174kjUB5gRngX8/jsP55Ej+Q/nww+rJo1R%0Al1U/GbtokBIhjaLw5854vhjp0KHAN98A+/bxn4G99i2q2bOBn37iC28QUlfMCvUBAwagsrISJ06c%0AQFpaGtLS0jBkyBBL1a1OHT3Kw6RVK/766aeBw4eNlzt+nDcC27atLiclLE+e5GOk27WrWbnUVN7q%0AVdczJIRvM+bQId7KVodzv37Syp0+zVu7ar16AX/9BRSfuQQMGsSH7R07pjdHrFiL21Co5+YCrq76%0A48b79OHBLTYdrqFQ9/ERnpwrKwvw6qXgzfGlS/mvOz/8wJviAwcCAQEYlbMM2TvWIXH2bCzetQtf%0AnEzC7ju7kBgTg+Revfg36+HDvIKE1BMNYpzVw4fG90lJ4aGn1q+ftGXNjhzRLyclLFNSeCDXtNzx%0A49qr8gQESA9nze4Qf3/+gIyxBSV0w7lxY2BilyQ0GRDIxxpu3ao1IgXgDV+hUO/Tx3g3im4ZAHji%0ACf7ld+6ccDlD0+SKrRuqN5xRoeAf5IoVvBW+bBncy3PgfWa6/gNORUXY7e0NvP8+/4EQUo/IPtRP%0AnNAOTzHp6dot0oAAaaGu25KV+mUgdj6dbl3Bct7e1a99fXlL1Vg//unT2g1KJyc+J7ix6Wm1yjEG%0ALFuGpfnjsHvCWmDBAsG11q5e5Rnp4qK93VhLPSND/GEgHx/hL4R794Dr18WP2akT79a5ckV7u6Ex%0A6mjUCHjmGTRd9y2yW4QK70JhTuop2Yd6jx48uMrKDO+nG5ZeXkBBgfGbl7rlPD2Bmzc1VoWXWM7V%0AlWfmxYuGy50+rV2uWTPe/2+otaoup9tL0KeP4ZuMZWW8S+Spp8AHiz//PLBpE357OwWJLFK0nLrF%0ArTuWXd2nLvbFJTS3uZrYzInZ2fwzFqNQ6LfWGTM8fa4mh3bCHeIV1FFO6inZh3qzZjwwc3PF96mo%0A4P/INQPF3p73sRsKS8b0Q9bOjrc2DfXzMsZDXTNkFYrqvmNj59MN5969DZcrKeFdxro3IHv3Nhzq%0AOTmAmxvgmHea9/l06AAkJ6PzgM4Gy4l1o7Rpw5/wv3BBuJzQ3OZqYqFusMWtUVazX72wkH9OHTsa%0ALgcAI/85Cy/ZeWhte8/DA4NnzjRemBArkH2oA8ZHXZw7x/tsn3hCe7uxcL5wgYdUmzY1K3fxIu+K%0A1e2eMBbOBQV8pIz6pqzU8505w4fY6TxQaTTUT58GXnvi3/yG6MKFwNdfA02bGi0nFuqAeBdMebnG%0AbwUCzAl13Zb68eO8u0vKE7wvvRqNFi+uQJQTX8RiYVQUhqxYYfTJWEKshUId+l0hamLhpR7i9tlw%0AJXxK9Bd/MBayYufr1ctwWOq27o3VU02odW+0XEkJuix7AxPPxfIxk6+8UvVWp0689S/Wl20s1IXC%0A+dw53nLWXZhZzdOTT99w7572dimh7uenMQwT/N6F5lQExnz7czQSb/Khuh8lJFCgk3qNQh2GQ1Y3%0AnJPj46uGuK06nYSdN3YhcfZsrWA3FrI1OZ8m3a6empQTCvWePXmY6t1vKCjgw/ouXoLq01TtO7rg%0ALVyxLyDGDM9+KDbm3FAZgHeHeXnpn1Nq90tRER+rD/DhnUFBhssQYqsaRKgbe3ilJmEpNof37lWr%0ADJaTcj5194vYjUSxcO7enY8dfzzjrGA53ZZzcnw8Fo+MwiCFEnMHafy2sWcPT7wxYzCp5f/QM6iV%0A4DHFbrIWFfH+avX4e13m9o1rlr1/n1+3oRulAB/MolTyp30fPuRDy8PDDZchxFY1iFDv3p03PsXG%0Aq4t1F3Trxofnaf7KL7r4g0aiurnxMrduCZ9PbJSHszPva1e3KKXWs0kTPgJGbHhiRob2l4Hmbxs7%0AHibhiwOPf9uYOBGYOBH46SeUzH4H+RcU6N5d+JjGWtxi/dVeXvy3A90fo7GWOqAf6idP8p+H7r0C%0AIdHRwH/+AyQk8K6XVsLfVYTYvAYR6o0b82DPztZ/r7RUeGQIwFt4PXpolxNd/EFjvLZCwcNLaORM%0AZaXhVqlYK7+igt/wFCsndpP1wQPeF101XwkM/LaxbRvvfB40CDk5gLu7+IIYYuPGjYVz06b8C0j3%0As5B6w/P48erXx47xh6ikGDeOd7vMng289pq0MoTYogYR6oB4v3puLtC5s3h49eqlXS5y1izM99AZ%0A4taqFQYfPQrExfEUBQ9ZofNduMBHy4i1FA2Vc3bmo23EygmFbHY2/0LTnJZE9LcNH5+qtd+MhbO6%0Apa7bVWRoWKKabou7vJzX01hLPTiYt84f/4iRkiL9hmeLFnzCtgULaj7nPSG2pMGHupTw0iwXHh2N%0AqBUr8KqfxhC3f/8b4SdO8KTq2RNYtw4+vStMasmaeiOxJuXKRforKjQmXTF2vjZt+BBQ3THnUrpR%0AdOuanc2/S3SHlOpq3pw/QXvgAP8y2btXfJELIUFBNV+MhBBb0+BD3dCj6YBwWIZHR8P9BZ0hbh4e%0AwK+/8o7b777D1K/90TRpl97xaivUDXWHVPXDP3oErF6NyFOnMF/nich/dtV+oEZqOOs+qWns56mu%0Aq+aUtjUZYhgRwddKTU/nfek6vzQR0uA1+FA3NWRFhyyGhAD796N8/gd4LeMNsCFDtJLP0BhudT0z%0AM3nfu+75DNWzWzc+8uTuXf1yPl2L+Vp03boBW7cifNMmRG3ahIVR/LeNZ1tGodsb2g/UmHLjsrCQ%0At4KffNJwuf79+URo6vnqa9I3/sorwMaNQGws8PLL1OomRFeDCXV3dz4fi27oGQuvzp350DndB20M%0ADVmEQoHWU8YgzCkDdwdE8/Uxp04FLl40er5WrXjfue6MhMbKNWqk3/+P69cxeP/7iJ7VjSfnzp18%0AZY4BAxAeHY2PHs997zYmAXatqgP90SN+fmNzo+g+fq9ucRsLWmdnPl2x+qbnvn3Shxh6eABvvskX%0A23j7bWllCGlIGkyoq+dk0Wxhl5TwRRkMhZd6ThbN1npZmfHZDRUK4CmfJjgSNJPv3K4dmI8Pxpx4%0AH73cDM8SpvvbQXk5Hx0ipeWcng4+fnPOHLDuPeBYfBXswCHg55+15941cD71rQFjc1YFBvIWt/pm%0AaWqq9G6UQYP4Ck6XLvFpE2ryhOcHH/BVnHRm/CWEoAGFOqDfBXP6NG/56S7KoEs39DIzeQteyvnS%0A08Gb30uXIue3NPRsmo/WQT2A1atF18sTu5FobGx1uMsZeH8Rw8Pb3h6HvzuN7/qtRmMvT4PlfH21%0ApwtOTeVTCBvj6cmHWqp/qzhwQNo0xwAwfjywbh3w/fd8ab5GjaSVI4QY1uBCXTMsjx2TFl66NwSl%0Ahp5uuSOXOuPX6B95F8ivv/Km9fbteuMCdbs1jLaAjx0DXngBE74JQ3qxOx+n+emnOJj/pKR6hoTw%0AG5fqh7OkDhVUKPhsAnv38oetjh7lr6UICeFfqB99BMydK60MIcS4BhXqAQHaS8ZJ7S4IDuYPrqhJ%0AHa0REsJbr3rl/P35JFnLlgHz5vFxeRpNZXU5ddYLfvkwBqhUQFQUb+oOGICKnPN4+/b7KG7Mp41M%0ASZH25dO8Of8COny4eqjgoEHGywF8ac9ffuELIIWG8vHgUigU/Pvs+nXj49oJITXAzJCUlMT8/PyY%0At7c3W7lypd77Zh7e4h4+ZKx5c8bu3uWvvbwYS001Xq6sjLEnnmCsqIi/7tOHsUOHGGNGrq+igrE2%0AbRgrLOSv/f0Z279f4ODffstYx46MvfwyY/n5LGn7djbAIZLNDRrI5kdGst5dtrPDhzUOumULYyEh%0AjPXowdj33zNWUlJ1uLAwxhIS+G7OzoxduGDk4h5fw/z5jM2dy1h6OmOdOzNWWWn858IYY48e8f2d%0AnBjbts3wOWqVHM4hh2uQ0zmsyJzstDcW+mIqKioQExODPXv2oFOnTggMDERERAS86nGzy8GBt1z/%0A/JO3TIuK9NZLFmRvz1uhSUl8geiLF7XXCRVjZweEhfEGdWQkvykbHCxw8OnTgQkTgGXLkNynDxLt%0A7bH/0W0ghe+Sp8jDg8sVwMa7fJHkJk2Ad98FxozR64yOiOAtYPUoGil9/wAfKjhwIJ8g66WXpA8V%0AbNqUzwGWnQ0895y0MoSQ2mNyqKekpMDT0xPu7u4AgPHjx2PLli31OtSB6u6C7Gxg2DDBJTYFPf88%0A8O9/80AfNkz6jb0xY4CffuKrwUVFGVinuEULYNEi7EpKQlxSktZbP7M8LJwwDoOCgoDPPuPfECKp%0AO3Ei7+LJygImTZJWR4CPdpk4kQf0l19KLwfwaQjEJv4ihNQtxeOmfo1t2rQJiYmJWLNmDQBg48aN%0AOHLkCFZpTEGrUCjwwQcfVL1WKpVQKpXm1dhM6j7c8nI+Y59ey1lEcTGf3Ov+/erZaenJF0KsyLTo%0AqpdUKhVUKlXV60WLFsHEaDa9pa6QGGixsbGmnqJWODsDiYk83KUGOsAn0kpK4lPxVi2wIPGHfu4c%0AH489YIDxfRdERWHxLv3pBRZGRVU9LEQIkRfdBu+iRYtMPpbJod6pUycUFBRUvS4oKICrq6vJFalL%0AUh9J19Wjh/EFGYR066Y99a0hkbNmYX5entbUuO95eGAILXRMCJHA5O6X8vJy9OzZE3/88QeefPJJ%0ABAUF4eeff9bqU1coFCb/CtGQJcfHY/eqVWj06BEqHBwweOZMWheTkAbEnOw0OdQBICkpCXPmzEF5%0AeTmmT5+OWbNmWaxihBDSUFkt1I0enEKdEEJqzJzsbFBPlBJCiNxRqBNCiIxQqBNCiIxQqBNCiIxQ%0AqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNC%0AiIxQqBNCiIxQqBNCiIxQqBNCiIxQqBNCiIxQqJtBpVJZuwq1Rs7XBtD12Tq5X585TA71uXPnwsvL%0AC/7+/pgzZw7u3LljyXrZBDn/jyXnawPo+myd3K/PHCaHemRkJDIyMpCamor79+/j448/tmS9CCGE%0AmMDkUB88eDDs7OxgZ2eHqKgoFBYWWrJehBBCTKBgjDFzDxIVFYVp06Zh7Nix2gdXKMw9NCGENEim%0ARrO9oTcHDx6MK1eu6G1fsmQJhg8fDgCIi4tDy5Yt9QLdnEoRQggxjVkt9XXr1mHNmjX4448/4ODg%0AYMl6EUIIMYHBlrohCQkJWLZsGZKTkynQCSGknjC5pd69e3eUlpaiTZs2AID+/fvj66+/tmjlCCGE%0A1IzJo19ycnJw4cIFpKWlIS0tDV9//TWKi4sxatQo+Pj4YPTo0bh3755gWXd3d/j4+MDPzw9BQUEm%0AV76uJCcnw9/fHz4+Pli1apXgPu+++y58fHwQEhKC7OzsOq6heYxdn0qlQqtWreDn5wc/Pz8sXrzY%0ACrU0TUxMDFxcXODt7S26jy1/dsauz5Y/u4KCAgwaNAi9e/eGUqnEunXrBPez1c9PyvWZ9PkxC5o7%0Ady775JNPGGOMLV26lM2bN09wP3d3d3bjxg1LnrrWlJeXMw8PD3b+/HlWWlrK+vbtyzIzM7X2iY+P%0AZ0OHDmWMMXb48GEWHBxsjaqaRMr17du3jw0fPtxKNTRPcnIyO378OOvTp4/g+7b82TFm/Pps+bO7%0AfPkyS0tLY4wxdu3aNebi4iKrf3tSrs+Uz8+i0wRs3boVkyZNAgBMmjQJmzdvNvRlYslT15qUlBR4%0AenrC3d0djRs3xvjx47FlyxatfTSvOzg4GLdv38bVq1etUd0ak3J9gO18XrrCwsLg5OQk+r4tf3aA%0A8esDbPez69ChA3x9fQEAzs7OCAwMxKVLl7T2seXPT8r1ATX//Cwa6levXoWLiwsAwMXFRfSHq1Ao%0A8Mwzz8DPzw9r1qyxZBUs7uLFi3Bzc6t67erqiosXLxrdx1YexpJyfQqFAgcPHkTv3r0xbNgwZGZm%0A1nU1a40tf3ZSyOWzy83NRUZGBkJCQrS2y+XzE7s+Uz6/Go9+ERu7HhcXp1cZsYePDhw4gI4dOyIr%0AKwvDhg3DU089hbCwsJpWpU5IfYBK99vUVh68klJPf39/FBQUoHHjxli/fj1GjBiB3NzcOqhd3bDV%0Az04KOXx29+7dw/jx47F8+XI0b95c731b//wMXZ8pn1+NW+q7d+9Genq63p8RI0bAxcWlKvAvX76M%0A9u3bCx6jY8eOAAAvLy+MHj0aKSkpNa1GnenUqRMKCgqqXhcUFMDV1dXgPoWFhejUqVOd1dEcUq6v%0AZcuWaNasGRo3boypU6fi1q1buHnzZl1XtVbY8mcnha1/dmVlZXj++efxt7/9DSNHjtR739Y/P2PX%0AZ8rnZ9HulxEjRmD9+vUAgPXr12PUqFF6+zx48ADFxcUAgGvXrmHHjh0GRyZYW79+/ZCTk4P8/HyU%0Alpbi119/xYgRI7T2GTFiBH788UcAwOHDh9G6deuqbqj6Tsr1Xb16tao1tG3bNjg6OlYNZbV1tvzZ%0ASWHLnx1jDFOnTkXv3r0xZ84cwX1s+fOTcn2mfH4mP3wkZOHChXjllVfg4+MDDw8PbNiwAQBw6dIl%0ATJ8+HfHx8bhy5QrGjBkDAGjbti3eeustREZGWrIaFmVvb48ffvgBo0ePRnl5OaZPnw4vLy+sXr0a%0AADBjxgwMGzYMycnJ8Pb2RvPmzbF27Vor11o6Kde3adMmfPPNN7C3t4ePj4/gjdT6asKECUhKSsL1%0A69fh5uaGRYsWoaysDIDtf3aA8euz5c/uwIED2LhxY9XwZ4BPUfLXX38BsP3PT8r1mfL5WWRCL0II%0AIfUDrXxECCEyQqFOCCEyQqFOCCEyQqFOCCEyQqFOCCEyQqFOCCEy8v8B1aA7adiSgiMAAAAASUVO%0ARK5CYII=%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>This doesn't look very good, but for larger values of <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-32-Frame" class="MathJax"><nobr><span id="MathJax-Span-363" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.748em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-364" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-365" class="mi">n</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.68em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-32" type="math/tex">n</script> we still see the expected convergence rate:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[121]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 29.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 394px; height: 278px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 278px; width: 394px;" class="ui-resizable" src="data:image/png;base64,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%0AItKk/wfkA5fHgeT/QAAAAABJRU5ErkJggg==%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Now make the function much more oscillatory with a larger value of <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-33-Frame" class="MathJax"><nobr><span id="MathJax-Span-366" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-367" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-368" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-33" type="math/tex">k</script>...</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[122]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71661px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 64.8px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">k</span> = <span class="cm-number">1000.</span></pre><pre><span class="cm-variable">f2</span>, <span class="cm-variable">int_true2</span> = <span class="cm-variable">f2_factory</span>(<span class="cm-variable">k</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>)</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"true integral: %22.14e"</span> <span class="cm-operator">%</span> <span class="cm-variable">int_true2</span></pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>true integral:   6.00136745954910e+00
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>For the previous choice of nvals the method does not seem to be doing well:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[123]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 64.8px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">nvals</span> = <span class="cm-variable">array</span>([<span class="cm-number">5</span>, <span class="cm-number">10</span>, <span class="cm-number">20</span>, <span class="cm-number">40</span>, <span class="cm-number">80</span>, <span class="cm-number">160</span>, <span class="cm-number">320</span>])</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"nvals = "</span>,<span class="cm-variable">nvals</span></pre><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>, <span class="cm-variable">trapezoid</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>nvals =  [  5  10  20  40  80 160 320]
+</pre></div></div><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 394px; height: 278px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 278px; width: 394px;" class="ui-resizable" src="data:image/png;base64,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%0AokWSzJvBfPTRR9q9e7diYmL0u9/9TpI0d+5cGYahTz/9VHv37tWgQYMq93Pe/v37NXz4cH366acq%0AKirS9u3bJUlpaWlasGCB9uzZo5KSkmqXgjYMQ16vVxkZGdq9e7fWrl1bZRVQINQICjQYcXFxys3N%0A1eOPP668vDy1atWq8rXRo0fL5XJp7Nix2rBhgyTpm2++0fjx49WtWzctX75c+/btkyRt2rRJEydO%0AVIsWLSRJl19++QXHat++ve644w41atRIAwcO1Pbt21VeXq69e/fql7/8pZo0aaJf//rXqmmptb59%0A++r6669XVFSU+vXrp23bttn91wH4jaBAg3H11Vdr79696tGjh8aPH68XXnih8rXqvrDnzZun2267%0ATXv37tWCBQuq3Ij+Ymtp/jg8mjVrprKysgveY7WPH9/WslmzZiotLbU8HhBMBAUajC+//FKSNGbM%0AGE2ePFl79uyRZH5hv/766/L5fFqxYkXlKamSkhJ17txZpaWlevXVVyv3M3jwYGVlZen06dOSpG+/%0A/faixzYMQ82aNVPPnj21du1anT17Vm+88Ybd/4tAUBAUaDDy8vJ0yy23qHfv3nr99dc1ffp0SebY%0AQqtWrXTjjTdq1apVmjp1qiRpxowZmjJligYMGKCePXtWjifMmjVLLpdLXbp0Uc+ePeXxeC441k/H%0AHs4/T0tL0/Tp09WrVy9deumluuyyy6r9bE2fB5zA/SjQ4HXs2FE7d+5U69atg36sU6dO6dJLL5XP%0A59O0adNkGEbl4DkQruhRoMEL5W/rbrdbvXr1UqdOnVRQUKBZs2aF7NhAXdGjAABYokcBALBEUAAA%0ALBEUAABLBAUAwBJBAQCwRFAAACz9P0rU4mPCKMqNAAAAAElFTkSuQmCC%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>In this case the <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-34-Frame" class="MathJax"><nobr><span id="MathJax-Span-369" class="math"><span style="display: inline-block; position: relative; width: 44px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.501em, 1000em, 2.916em, -0.464em); top: -2.564em; left: 0em;"><span id="MathJax-Span-370" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-371" class="mi">O</span><span style="font-family: STIXGeneral;" id="MathJax-Span-372" class="mo">(</span><span id="MathJax-Span-373" class="msubsup"><span style="display: inline-block; position: relative; width: 0.949em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-374" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.741em; left: 0.524em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-375" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-376" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-377" class="mtext">&nbsp;</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.418em; vertical-align: -0.282em;"></span></span></nobr></span><script id="MathJax-Element-34" type="math/tex">O(h^2)~</script> behavior does not become apparent unless we use much smaller <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-35-Frame" class="MathJax"><nobr><span id="MathJax-Span-378" class="math"><span style="display: inline-block; position: relative; width: 9px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -2.564em; left: 0em;"><span id="MathJax-Span-379" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-380" class="mi">h</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.97em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-35" type="math/tex">h</script> values so that we are resolving the oscillations:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[124]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 64.8px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">nvals</span> = <span class="cm-variable">array</span>([<span class="cm-number">5</span> <span class="cm-operator">*</span> <span class="cm-number">2</span><span class="cm-operator">**</span><span class="cm-variable">i</span> <span class="cm-keyword">for</span> <span class="cm-variable">i</span> <span class="cm-operator">in</span> <span class="cm-builtin">range</span>(<span class="cm-number">12</span>)])</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"nvals = "</span>,<span class="cm-variable">nvals</span></pre><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>,<span class="cm-variable">trapezoid</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>nvals =  [    5    10    20    40    80   160   320   640  1280  2560  5120 10240]
+</pre></div></div><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 394px; height: 278px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 278px; width: 394px;" class="ui-resizable" src="data:image/png;base64,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%0Alq517gAAAABJRU5ErkJggg==%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Eventually we see second order convergence and ratios that approach 4:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[125]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 29.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">error_table</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>,<span class="cm-variable">trapezoid</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>      n         approximation        error       ratio
+       5    6.16511276525547e+00   1.637e-01   0.000e+00
+      10    6.11640342954375e+00   1.150e-01   1.423e+00
+      20    5.93766915031525e+00   6.370e-02   1.806e+00
+      40    6.06556743605608e+00   6.420e-02   9.922e-01
+      80    6.18855102747922e+00   1.872e-01   3.430e-01
+     160    7.40477216296790e+00   1.403e+00   1.334e-01
+     320    5.36931843072561e+00   6.320e-01   2.220e+00
+     640    6.00002231770676e+00   1.345e-03   4.699e+02
+    1280    6.00107919913986e+00   2.883e-04   4.666e+00
+    2560    6.00129774432062e+00   6.972e-05   4.135e+00
+    5120    6.00135017283866e+00   1.729e-05   4.033e+00
+   10240    6.00136314705017e+00   4.312e-06   4.009e+00
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h2>Simpson's Rule</h2></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>There
+ are much better methods than the Trapezoidal rule that are not much
+harder to implement but get much smaller errors with the same number of
+function evaluations. One such method is Simpson’s rule, which
+approximates the integral over a single interval from <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-36-Frame" class="MathJax"><nobr><span id="MathJax-Span-381" class="math"><span style="display: inline-block; position: relative; width: 12px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.599em, 1000em, 2.547em, -0.551em); top: -2.214em; left: 0em;"><span id="MathJax-Span-382" class="mrow"><span id="MathJax-Span-383" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-384" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-385" class="mi">i</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.858em; vertical-align: -0.259em;"></span></span></nobr></span><script id="MathJax-Element-36" type="math/tex">x_i</script> to <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-37-Frame" class="MathJax"><nobr><span id="MathJax-Span-386" class="math"><span style="display: inline-block; position: relative; width: 27px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.599em, 1000em, 2.568em, -0.551em); top: -2.214em; left: 0em;"><span id="MathJax-Span-387" class="mrow"><span id="MathJax-Span-388" class="msubsup"><span style="display: inline-block; position: relative; width: 1.587em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-389" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-390" class="texatom"><span id="MathJax-Span-391" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-392" class="mi">i</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-393" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-394" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.884em; vertical-align: -0.285em;"></span></span></nobr></span><script id="MathJax-Element-37" type="math/tex">x_{i+1}</script> by
+<span class="MathJax_Preview"></span><div style="text-align: left;" aria-readonly="true" role="textbox" class="MathJax_Display"><span style="" id="MathJax-Element-38-Frame" class="MathJax"><nobr><span style="margin-left: 0em;" id="MathJax-Span-395" class="math"><span style="display: inline-block; position: relative; width: 333px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(0.966em, 1000em, 3.77em, -0.468em); top: -2.564em; left: 0em;"><span id="MathJax-Span-396" class="mrow"><span id="MathJax-Span-397" class="msubsup"><span style="display: inline-block; position: relative; width: 2.409em; height: 0px;"><span style="position: absolute; clip: rect(2.112em, 1000em, 4.731em, -0.468em); top: -3.671em; left: 0em;"><span style="font-family: STIXIntegralsD; vertical-align: -0.615em;" id="MathJax-Span-398" class="mo">∫<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.45em;"></span></span><span style="display: inline-block; width: 0px; height: 3.671em;"></span></span><span style="position: absolute; clip: rect(3.534em, 1000em, 4.322em, -0.544em); top: -5.132em; left: 1.234em;"><span id="MathJax-Span-399" class="texatom"><span id="MathJax-Span-400" class="mrow"><span id="MathJax-Span-401" class="msubsup"><span style="display: inline-block; position: relative; width: 1.1em; height: 0px;"><span style="position: absolute; clip: rect(1.844em, 1000em, 2.514em, -0.544em); top: -2.331em; left: 0em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-402" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.002em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; top: -2.108em; left: 0.289em;"><span id="MathJax-Span-403" class="texatom"><span id="MathJax-Span-404" class="mrow"><span style="font-size: 50%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-405" class="mi">i</span><span style="font-size: 50%; font-family: STIXGeneral;" id="MathJax-Span-406" class="mo">+</span><span style="font-size: 50%; font-family: STIXGeneral;" id="MathJax-Span-407" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 4.021em;"></span></span><span style="position: absolute; clip: rect(3.534em, 1000em, 4.307em, -0.544em); top: -3.101em; left: 0.599em;"><span id="MathJax-Span-408" class="texatom"><span id="MathJax-Span-409" class="mrow"><span id="MathJax-Span-410" class="msubsup"><span style="display: inline-block; position: relative; width: 0.459em; height: 0px;"><span style="position: absolute; clip: rect(1.844em, 1000em, 2.514em, -0.544em); top: -2.331em; left: 0em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-411" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.002em;"></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; top: -2.108em; left: 0.289em;"><span style="font-size: 50%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-412" class="mi">i</span><span style="display: inline-block; width: 0px; height: 2.214em;"></span></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 4.021em;"></span></span></span></span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-413" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-414" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-415" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-416" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-417" class="mo">,</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.188em;" id="MathJax-Span-418" class="mi">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.027em;"></span></span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-419" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-420" class="mo">≈</span><span style="padding-left: 0.432em; padding-right: 0.12em;" id="MathJax-Span-421" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-422" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.705em, 1000em, 2.753em, -0.49em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-423" class="mn">6</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.188em;" id="MathJax-Span-424" class="mo">(</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-425" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-426" class="mo">(</span><span id="MathJax-Span-427" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-428" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-429" class="mi">i</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-430" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-431" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-432" class="mn">4</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-433" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-434" class="mo">(</span><span id="MathJax-Span-435" class="msubsup"><span style="display: inline-block; position: relative; width: 2.112em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-436" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-437" class="texatom"><span id="MathJax-Span-438" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-439" class="mi">i</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-440" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-441" class="mn">1</span><span id="MathJax-Span-442" class="texatom"><span id="MathJax-Span-443" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-444" class="mo">/</span></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-445" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-446" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-447" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-448" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-449" class="mo">(</span><span id="MathJax-Span-450" class="msubsup"><span style="display: inline-block; position: relative; width: 1.587em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-451" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-452" class="texatom"><span id="MathJax-Span-453" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-454" class="mi">i</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-455" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-456" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-457" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-458" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-459" class="mo">,</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 3.086em; vertical-align: -1.308em;"></span></span></nobr></span></div><script id="MathJax-Element-38" type="math/tex; mode=display">\int_{x_i}^{x_{i+1}} f(x), dx \approx \frac h 6 (f(x_i) + 4f(x_{i+1/2}) + f(x_{i+1})),</script>
+where <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-39-Frame" class="MathJax"><nobr><span id="MathJax-Span-460" class="math"><span style="display: inline-block; position: relative; width: 227px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.492em, 1000em, 3.136em, -0.551em); top: -2.564em; left: 0em;"><span id="MathJax-Span-461" class="mrow"><span id="MathJax-Span-462" class="msubsup"><span style="display: inline-block; position: relative; width: 2.112em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-463" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-464" class="texatom"><span id="MathJax-Span-465" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-466" class="mi">i</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-467" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-468" class="mn">1</span><span id="MathJax-Span-469" class="texatom"><span id="MathJax-Span-470" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-471" class="mo">/</span></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-472" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-473" class="mo">=</span><span style="padding-left: 0.432em; padding-right: 0.12em;" id="MathJax-Span-474" class="mfrac"><span style="display: inline-block; position: relative; width: 0.47em; height: 0px;"><span style="position: absolute; clip: rect(1.678em, 1000em, 2.506em, -0.446em); top: -2.75em; left: 50%; margin-left: -0.175em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-475" class="mn">1</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; clip: rect(1.678em, 1000em, 2.506em, -0.504em); top: -1.934em; left: 50%; margin-left: -0.175em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-476" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.47em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.188em;" id="MathJax-Span-477" class="mo">(</span><span id="MathJax-Span-478" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-479" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-480" class="mi">i</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-481" class="mo">+</span><span style="padding-left: 0.25em;" id="MathJax-Span-482" class="msubsup"><span style="display: inline-block; position: relative; width: 1.587em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-483" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-484" class="texatom"><span id="MathJax-Span-485" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-486" class="mi">i</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-487" class="mo">+</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-488" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-489" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.313em;" id="MathJax-Span-490" class="mo">=</span><span style="padding-left: 0.313em;" id="MathJax-Span-491" class="msubsup"><span style="display: inline-block; position: relative; width: 0.713em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-492" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-493" class="mi">i</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-494" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-495" class="mi">h</span><span id="MathJax-Span-496" class="texatom"><span id="MathJax-Span-497" class="mrow"><span style="font-family: STIXGeneral;" id="MathJax-Span-498" class="mo">/</span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-499" class="mn">2.</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.693em; vertical-align: -0.547em;"></span></span></nobr></span><script id="MathJax-Element-39" type="math/tex">x_{i+1/2} = \frac 1 2 (x_i + x_{i+1}) = x_i + h/2.</script></p>
+
+<p>Derivation: The trapezoid method is derived by approximating the
+function on each interval by a linear function interpolating at the two
+endpoints of each interval and then integrating this linear function.
+Simpson's method is derived by approximating the function by a quadratic
+ function interpolating at the endpoints and the center of the interval
+and integrating this quadratic function.</p></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Adding this up over <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-40-Frame" class="MathJax"><nobr><span id="MathJax-Span-500" class="math"><span style="display: inline-block; position: relative; width: 38px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.713em, 1000em, 2.748em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-501" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-502" class="mi">n</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-503" class="mo">−</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-504" class="mn">1</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.962em; vertical-align: -0.081em;"></span></span></nobr></span><script id="MathJax-Element-40" type="math/tex">n-1</script>  intervals gives the approximation
+<span class="MathJax_Preview"></span><div style="text-align: left;" aria-readonly="true" role="textbox" class="MathJax_Display"><span style="" id="MathJax-Element-41-Frame" class="MathJax"><nobr><span style="margin-left: 0em;" id="MathJax-Span-505" class="math"><span style="display: inline-block; position: relative; width: 608px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.03em, 1000em, 3.439em, -0.404em); top: -2.564em; left: 0em;"><span id="MathJax-Span-506" class="mrow"><span style="padding-left: 0.12em; padding-right: 0.12em;" id="MathJax-Span-507" class="mfrac"><span style="display: inline-block; position: relative; width: 0.644em; height: 0px;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.748em, -0.505em); top: -3.241em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-508" class="mi">h</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(1.705em, 1000em, 2.753em, -0.49em); top: -1.878em; left: 50%; margin-left: -0.262em;"><span style="font-family: STIXGeneral;" id="MathJax-Span-509" class="mn">6</span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; clip: rect(0.801em, 1000em, 1.224em, -0.524em); top: -1.269em; left: 0em;"><span style="border-left: 0.644em solid; display: inline-block; overflow: hidden; width: 0px; height: 1.25px; vertical-align: 0em;"></span><span style="display: inline-block; width: 0px; height: 1.049em;"></span></span></span></span><span style="font-family: STIXGeneral; padding-left: 0.188em;" id="MathJax-Span-510" class="mo">[</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-511" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-512" class="mo">(</span><span id="MathJax-Span-513" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-514" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-515" class="mn">0</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-516" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-517" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-518" class="mn">4</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-519" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-520" class="mo">(</span><span id="MathJax-Span-521" class="msubsup"><span style="display: inline-block; position: relative; width: 1.471em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-522" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-523" class="texatom"><span id="MathJax-Span-524" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-525" class="mn">1</span><span id="MathJax-Span-526" class="texatom"><span id="MathJax-Span-527" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-528" class="mo">/</span></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-529" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-530" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-531" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-532" class="mn">2</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-533" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-534" class="mo">(</span><span id="MathJax-Span-535" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-536" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-537" class="mn">1</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-538" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-539" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-540" class="mn">4</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-541" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-542" class="mo">(</span><span id="MathJax-Span-543" class="msubsup"><span style="display: inline-block; position: relative; width: 1.471em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-544" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-545" class="texatom"><span id="MathJax-Span-546" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-547" class="mn">3</span><span id="MathJax-Span-548" class="texatom"><span id="MathJax-Span-549" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-550" class="mo">/</span></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-551" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-552" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-553" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-554" class="mn">2</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-555" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-556" class="mo">(</span><span id="MathJax-Span-557" class="msubsup"><span style="display: inline-block; position: relative; width: 0.888em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-558" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-559" class="mn">2</span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-560" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-561" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-562" class="mo">⋯</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-563" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-564" class="mn">2</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-565" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-566" class="mo">(</span><span id="MathJax-Span-567" class="msubsup"><span style="display: inline-block; position: relative; width: 1.704em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-568" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-569" class="texatom"><span id="MathJax-Span-570" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-571" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-572" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-573" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-574" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-575" class="mo">+</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-576" class="mn">4</span><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-577" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-578" class="mo">(</span><span id="MathJax-Span-579" class="msubsup"><span style="display: inline-block; position: relative; width: 2.286em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-580" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-581" class="texatom"><span id="MathJax-Span-582" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-583" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-584" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-585" class="mn">3</span><span id="MathJax-Span-586" class="texatom"><span id="MathJax-Span-587" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-588" class="mo">/</span></span></span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-589" class="mn">2</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-590" class="mo">)</span><span style="font-family: STIXGeneral; padding-left: 0.25em;" id="MathJax-Span-591" class="mo">+</span><span style="font-family: STIXGeneral; font-style: italic; padding-left: 0.25em;" id="MathJax-Span-592" class="mi">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.146em;"></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-593" class="mo">(</span><span id="MathJax-Span-594" class="msubsup"><span style="display: inline-block; position: relative; width: 1.704em; height: 0px;"><span style="position: absolute; clip: rect(1.948em, 1000em, 2.75em, -0.551em); top: -2.564em; left: 0em;"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-595" class="mi">x<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span><span style="position: absolute; top: -2.181em; left: 0.463em;"><span id="MathJax-Span-596" class="texatom"><span id="MathJax-Span-597" class="mrow"><span style="font-size: 70.7%; font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-598" class="mi">n</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-599" class="mo">−</span><span style="font-size: 70.7%; font-family: STIXGeneral;" id="MathJax-Span-600" class="mn">1</span></span></span><span style="display: inline-block; width: 0px; height: 2.331em;"></span></span></span></span><span style="font-family: STIXGeneral;" id="MathJax-Span-601" class="mo">)</span><span style="font-family: STIXGeneral;" id="MathJax-Span-602" class="mo">]</span><span style="font-family: STIXGeneral;" id="MathJax-Span-603" class="mo">.</span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 2.611em; vertical-align: -0.91em;"></span></span></nobr></span></div><script id="MathJax-Element-41" type="math/tex; mode=display">\frac{h}{6}[f(x_0) + 4f(x_{1/2}) + 2f(x_1) + 4f(x_{3/2}) + 2f(x_2) + \cdots + 2f(x_{n-2}) + 4f(x_{n-3/2}) + f(x_{n-1})].</script>
+In Python this can be implemented by the following code:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[126]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 152.8px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-keyword">def</span> <span class="cm-variable">simpson</span>(<span class="cm-variable">f</span>,<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>):</pre><pre>    <span class="cm-variable">h</span> = (<span class="cm-variable">b</span><span class="cm-operator">-</span><span class="cm-variable">a</span>)<span class="cm-operator">/</span>(<span class="cm-variable">n</span><span class="cm-operator">-</span><span class="cm-number">1</span>)</pre><pre>    <span class="cm-variable">xj</span> = <span class="cm-variable">linspace</span>(<span class="cm-variable">a</span>,<span class="cm-variable">b</span>,<span class="cm-variable">n</span>)</pre><pre>    <span class="cm-variable">fj</span> = <span class="cm-variable">f</span>(<span class="cm-variable">xj</span>)</pre><pre>    <span class="cm-variable">xc</span> = <span class="cm-variable">linspace</span>(<span class="cm-variable">a</span><span class="cm-operator">+</span><span class="cm-variable">h</span><span class="cm-operator">/</span><span class="cm-number">2</span>,<span class="cm-variable">b</span><span class="cm-operator">-</span><span class="cm-variable">h</span><span class="cm-operator">/</span><span class="cm-number">2</span>,<span class="cm-variable">n</span><span class="cm-operator">-</span><span class="cm-number">1</span>)  <span class="cm-comment"># midpoints of cells</span></pre><pre>    <span class="cm-variable">fc</span> = <span class="cm-variable">f</span>(<span class="cm-variable">xc</span>)</pre><pre>    <span class="cm-variable">int_simpson</span> = (<span class="cm-variable">h</span><span class="cm-operator">/</span><span class="cm-number">6.</span>) <span class="cm-operator">*</span> (<span class="cm-number">2.</span><span class="cm-operator">*</span><span class="cm-builtin">sum</span>(<span class="cm-variable">fj</span>) <span class="cm-operator">-</span> (<span class="cm-variable">fj</span>[<span class="cm-number">0</span>] <span class="cm-operator">+</span> <span class="cm-variable">fj</span>[<span class="cm-operator">-</span><span class="cm-number">1</span>]) <span class="cm-operator">+</span> <span class="cm-number">4.</span><span class="cm-operator">*</span><span class="cm-builtin">sum</span>(<span class="cm-variable">fc</span>))</pre><pre>    <span class="cm-keyword">return</span> <span class="cm-variable">int_simpson</span></pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>This
+ method is 4th order accurate, which means that on fine enough grids the
+ error is proportional to \Delta x^4. Hence increasing n by a factor of 2
+ should decrease the error by a factor of 2^4 = 16.  Let's try it on the
+ last function we were experimenting with:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[127]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 100px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">k</span> = <span class="cm-number">1000.</span></pre><pre><span class="cm-variable">f2</span>, <span class="cm-variable">int_true2</span> = <span class="cm-variable">f2_factory</span>(<span class="cm-variable">k</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>)</pre><pre><span class="cm-keyword">print</span> <span class="cm-string">"true integral: %22.14e"</span> <span class="cm-operator">%</span> <span class="cm-variable">int_true2</span></pre><pre> </pre><pre><span class="cm-variable">error_table</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>,<span class="cm-variable">simpson</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>true integral:   6.00136745954910e+00
+      n         approximation        error       ratio
+       5    5.73687339985881e+00   2.645e-01   0.000e+00
+      10    5.91163035788901e+00   8.974e-02   2.947e+00
+      20    6.04406704558838e+00   4.270e-02   2.102e+00
+      40    6.06900954932785e+00   6.764e-02   6.313e-01
+      80    6.18844048197182e+00   1.871e-01   3.616e-01
+     160    7.40463149442203e+00   1.403e+00   1.333e-01
+     320    6.21025000380603e+00   2.089e-01   6.718e+00
+     640    6.00143086444865e+00   6.340e-05   3.294e+03
+    1280    6.00137051926171e+00   3.060e-06   2.072e+01
+    2560    6.00136763998022e+00   1.804e-07   1.696e+01
+    5120    6.00136747066329e+00   1.111e-08   1.623e+01
+   10240    6.00136746024111e+00   6.920e-10   1.606e+01
+</pre></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Note
+ that the errors get smaller much faster and the ratio approaches 16.
+The improvement over the trapezoid method is seen more clearly if we
+plot the errors together:</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[128]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 47.2px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>,<span class="cm-variable">trapezoid</span>)</pre><pre><span class="cm-variable">error_plot</span>(<span class="cm-variable">f2</span>,<span class="cm-variable">a2</span>,<span class="cm-variable">b2</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true2</span>,<span class="cm-variable">simpson</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_png"><div class="ui-wrapper ui-resizable-autohide" style="overflow: hidden; position: relative; width: 399px; height: 278px; top: 0px; left: 0px; margin: 0px;"><img style="resize: none; position: static; display: block; height: 278px; width: 399px;" class="ui-resizable" src="data:image/png;base64,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%0A"><div style="display: none;" class="ui-resizable-handle ui-resizable-e"></div><div style="display: none;" class="ui-resizable-handle ui-resizable-s"></div><div style="z-index: 1001; display: none;" class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se"></div></div></div></div></div><div title="click to expand outout" role="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only output_collapsed vbox" style="display: none;">. . .</div></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>You might want to experiment with changing <span class="MathJax_Preview"></span><span style="" aria-readonly="true" role="textbox" id="MathJax-Element-42-Frame" class="MathJax"><nobr><span id="MathJax-Span-604" class="math"><span style="display: inline-block; position: relative; width: 8px; height: 0px; font-size: 120%;"><span style="position: absolute; clip: rect(1.706em, 1000em, 2.75em, -0.51em); top: -2.564em; left: 0em;"><span id="MathJax-Span-605" class="mrow"><span style="font-family: STIXGeneral; font-style: italic;" id="MathJax-Span-606" class="mi">k<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.017em;"></span></span></span><span style="display: inline-block; width: 0px; height: 2.564em;"></span></span></span><span style="border-left: 0em solid; display: inline-block; overflow: hidden; width: 0px; height: 0.973em; vertical-align: -0.083em;"></span></span></nobr></span><script id="MathJax-Element-42" type="math/tex">k</script> in the two cells above.</p></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><h4>Simpson's method integrates cubic functions exactly</h4></div></div><div tabindex="2" class="cell text_cell border-box-sizing"><div style="display: none;" class="text_cell_input border-box-sizing"><div class="CodeMirror CodeMirror-wrap"><div style="overflow: hidden; position: relative; width: 3px; height: 0px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-default" tabindex="-1"><div style="position: relative"><div style="position: relative"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"><pre><span>x</span></pre></div><pre class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1"></div><div></div></div></div></div></div></div></div></div><div tabindex="-1" class="text_cell_render border-box-sizing rendered_html"><p>Even
+ though Simpson'e method is derived by integrating a quadratic
+approximation of the function, rather than linear as with the Trapezoid
+Rule, in fact it also integrates a cubic exactly, as seen if we try it
+out with the function f1 defined at the top of this notebook.  (This is
+because the error between the cubic and the quadratic approximation on
+each interval is not zero but does have integral equal to zero since it
+turns out to be an odd function about the midpoint.)  For this reason
+Simpson's Rule is fourth order accurate in general rather than only
+third order, as one might expect when going from a linear to quadratic
+approximation.</p>
+
+<p>Note the error ratios are whacky as a result.</p></div></div><div tabindex="2" class="cell border-box-sizing code_cell vbox"><div class="input hbox"><div class="prompt input_prompt">In&nbsp;[129]:</div><div class="input_area box-flex1"><div class="CodeMirror"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 5.71667px; left: 5.71666px;"><textarea style="position: absolute; padding: 0; width: 1px; height: 1em" wrap="off" autocorrect="off" autocapitalize="off"></textarea></div><div class="CodeMirror-scroll cm-s-ipython" tabindex="-1"><div style="position: relative; height: 29.6px;"><div style="position: relative; top: 0px;"><div style="display: none;" class="CodeMirror-gutter"><div class="CodeMirror-gutter-text"></div></div><div class="CodeMirror-lines"><div draggable="true" style="position: relative; z-index: 0; outline: medium none;"><div style="position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; outline: 5px auto none"></div><pre style="top: 0px; left: 0px;" class="CodeMirror-cursor">&nbsp;</pre><div style="position: relative; z-index: -1; display: none;"></div><div style=""><pre><span class="cm-variable">error_table</span>(<span class="cm-variable">f1</span>,<span class="cm-variable">a1</span>,<span class="cm-variable">b1</span>,<span class="cm-variable">nvals</span>,<span class="cm-variable">int_true1</span>,<span class="cm-variable">simpson</span>)</pre></div></div></div></div></div></div></div></div></div><div class="output_wrapper"><div title="click to expand outout; double click to hide output" class="out_prompt_overlay prompt" style="display: block;"></div><div style="display: -moz-box;" class="output vbox"><div class="hbox output_area"><div class="prompt"></div><div class="box-flex1 output_subarea output_text output_stream output_stdout"><pre>      n         approximation        error       ratio
+       5    6.00000000000000e+00   0.000e+00         nan