{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical Methods 1\n", "\n", "# Lecture 3: Numerical integration\n", "\n", "## Exercise solutions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# some imports we will make at the start of every notebook\n", "# later notebooks may add to this with specific SciPy modules\n", "\n", "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3.1: Midpoint rule convergence plot\n", "\n", "Plot the log-log plot mentioned above." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "midpoint_rule(0, np.pi, np.sin, number_intervals=5) = 2.033281476926104\n" ] } ], "source": [ "def midpoint_rule(a, b, function, number_intervals=10):\n", " \"\"\" Our implementation of the midpoint quadrature rule.\n", " \n", " a and b are the end points for our interval of interest.\n", " \n", " 'function' is the function of x \\in [a,b] which we can evaluate as needed.\n", " \n", " number_intervals is the number of subintervals/bins we split [a,b] into.\n", " \n", " Returns the integral of function(x) over [a,b].\n", " \"\"\"\n", " interval_size = (b - a)/number_intervals\n", "\n", " # Some examples of some asserts which might be useful here - \n", " # you should get into the habit of using these sorts of checks as much as is possible/sensible.\n", " assert interval_size > 0\n", " assert type(number_intervals) == int\n", " \n", " # Initialise to zero the variable that will contain the cumulative sum of all the areas\n", " I_M = 0.0\n", " \n", " # Find the first midpoint -- i.e. the centre point of the base of the first rectangle\n", " mid = a + (interval_size/2.0)\n", " # and loop until we get past b, creating and summing the area of each rectangle\n", " while (mid < b):\n", " # Find the area of the current rectangle and add it to the running total\n", " # this involves an evaluation of the function at the subinterval midpoint\n", " I_M += interval_size * function(mid)\n", " # Move the midpoint up to the next centre of the interval\n", " mid += interval_size\n", "\n", " # Return our running total result\n", " return I_M\n", "\n", "# check the function runs and agrees with our first version used to generate the schematic plot of the method above:\n", "print('midpoint_rule(0, np.pi, np.sin, number_intervals=5) = ', midpoint_rule(0, np.pi, np.sin, number_intervals=5))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The exact area found by direct integration = 2\n", "Area 1 rectangle(s) = 3.141592654 (error = 1.141592654e+00)\n", "Area 2 rectangle(s) = 2.221441469 (error = 2.214414691e-01)\n", "Area 4 rectangle(s) = 2.052344306 (error = 5.234430595e-02)\n", "Area 8 rectangle(s) = 2.012909086 (error = 1.290908560e-02)\n", "Area 16 rectangle(s) = 2.003216378 (error = 3.216378168e-03)\n", "Area 32 rectangle(s) = 2.000803416 (error = 8.034163099e-04)\n", "Area 100 rectangle(s) = 2.000082249 (error = 8.224907099e-05)\n", "Area 1000 rectangle(s) = 2.000000822 (error = 8.224672938e-07)\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Convergence plot when integrating $\\\\sin$ with the midpoint rule')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " \"\"\"The function we wish to integrate\"\"\"\n", " return np.sin(x)\n", "\n", "# Now let's test the midpoint function.\n", "print('The exact area found by direct integration = 2')\n", "\n", "# create a list of interval sizes to test \n", "interval_sizes_M = [1, 2, 4, 8, 16, 32, 100, 1000]\n", "\n", "# initialise an array to store the errors\n", "errors_M = np.zeros_like(interval_sizes_M, dtype='float64')\n", "\n", "# loop over the list of interval sizes, compute and store errors\n", "for (i, number_intervals) in enumerate(interval_sizes_M):\n", " area = midpoint_rule(0, np.pi, f, number_intervals)\n", " errors_M[i] = abs(area-2)\n", " print('Area {:<4d} rectangle(s) = {:.9f} (error = {:.9e})'.format(\n", " number_intervals, area, errors_M[i]))\n", "\n", "# plot how the errors vary with interval size\n", "fig = plt.figure(figsize=(7, 7))\n", "ax1 = plt.subplot(111)\n", "ax1.loglog(interval_sizes_M, errors_M, 'bo-', lw=2)\n", "ax1.set_xlabel('log(number_intervals)', fontsize=16)\n", "ax1.set_ylabel('log(error)', fontsize=16)\n", "ax1.set_title('Convergence plot when integrating $\\sin$ with the midpoint rule', fontsize=16)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3.2: Complete the implementation of the trapezoid rule below" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def trapezoidal_rule(a, b, function, number_intervals=10):\n", " \"\"\"Our implementation of the trapezoidal quadrature rule.\n", " \n", " Note that as discussed in the lecture this version of the implementation \n", " performs redundant function evaluations - see the composite implementation \n", " in the homework for a more efficient version.\n", " \"\"\"\n", " interval_size = (b - a)/number_intervals\n", "\n", " assert interval_size > 0\n", " assert type(number_intervals) == int\n", "\n", " I_T = 0.0\n", "\n", " # Loop to create each trapezoid\n", " # note this function takes a slightly different approach to Midpoint \n", " # (a for loop rather than a while loop) to achieve the same thing\n", " for i in range(number_intervals):\n", " # Set the start of this interval \n", " this_bin_start = a + (interval_size * i)\n", " # Find the area of the current trapezoid and add it to the running total\n", " I_T += interval_size * \\\n", " (function(this_bin_start)+function(this_bin_start+interval_size))/2.0\n", "\n", " # Return our running total result\n", " return I_T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and test the function in a similar way:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The exact area found by direct integration = 2\n", "Area 1 rectangle(s) = 1.92367e-16 (error=2)\n", "Area 2 rectangle(s) = 1.5708 (error=0.429204)\n", "Area 10 rectangle(s) = 1.98352 (error=0.0164765)\n", "Area 100 rectangle(s) = 1.99984 (error=0.000164496)\n", "Area 1000 rectangle(s) = 2 (error=1.64493e-06)\n" ] } ], "source": [ "print(\"The exact area found by direct integration = 2\")\n", "for i in (1, 2, 10, 100, 1000):\n", " area = trapezoidal_rule(0, np.pi, np.sin, i)\n", " print(\"Area %d rectangle(s) = %g (error=%g)\"%(i, area, abs(area-2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should have found the following errors:\n", "\n", "`The area found by direct integration = 2`\n", "\n", "`Area 1 rectangle(s) = 1.92367e-16 (error=2)`\n", "\n", "`Area 2 rectangle(s) = 1.5708 (error=0.429204)`\n", "\n", "`Area 10 rectangle(s) = 1.98352 (error=0.0164765)`\n", "\n", "`Area 100 rectangle(s) = 1.99984 (error=0.000164496)`\n", "\n", "`Area 1000 rectangle(s) = 2 (error=1.64493e-06)`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The exact area found by direct integration = 2\n", "Area 1 trapezoid(s) = 0.0000000000000002 (error = 1.999999999999999778e+00)\n", "Area 2 trapezoid(s) = 1.5707963267948968 (error = 4.292036732051032200e-01)\n", "Area 4 trapezoid(s) = 1.8961188979370398 (error = 1.038811020629601956e-01)\n", "Area 8 trapezoid(s) = 1.9742316019455510 (error = 2.576839805444897102e-02)\n", "Area 16 trapezoid(s) = 1.9935703437723391 (error = 6.429656227660895951e-03)\n", "Area 32 trapezoid(s) = 1.9983933609701445 (error = 1.606639029855472245e-03)\n", "Area 100 trapezoid(s) = 1.9998355038874440 (error = 1.644961125559785131e-04)\n", "Area 1000 trapezoid(s) = 1.9999983550656619 (error = 1.644934338074222069e-06)\n", "\n", "Verificaton check: \n", "These are the corresponding values computed using Scipy's trapezoidal function and the difference with our computed result\n", "0.0000000000000002, 0.0000000000000000e+00\n", "1.5707963267948968, 0.0000000000000000e+00\n", "1.8961188979370398, 0.0000000000000000e+00\n", "1.9742316019455508, 2.2204460492503131e-16\n", "1.9935703437723391, 0.0000000000000000e+00\n", "1.9983933609701445, 0.0000000000000000e+00\n", "1.9998355038874434, 6.6613381477509392e-16\n", "1.9999983550656628, 8.8817841970012523e-16\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import scipy.integrate as si\n", "\n", "def f(x):\n", " \"\"\"The function we wish to integrate\"\"\"\n", " return np.sin(x)\n", "\n", "# Now let's test the trapezoidal function.\n", "print(\"The exact area found by direct integration = 2\")\n", "interval_sizes_T = [1, 2, 4, 8, 16, 32, 100, 1000]\n", "areas_T = np.zeros_like(interval_sizes_T, dtype='float64')\n", "errors_T = np.zeros_like(interval_sizes_T, dtype='float64')\n", "for (i, number_intervals) in enumerate(interval_sizes_T):\n", " areas_T[i] = trapezoidal_rule(0, np.pi, f, number_intervals)\n", " errors_T[i] = abs(areas_T[i]-2)\n", " print('Area {:<4d} trapezoid(s) = {:.16f} (error = {:.18e})'.format(\n", " number_intervals, areas_T[i], errors_T[i]))\n", "\n", "print(\"\\nVerificaton check: \\nThese are the corresponding values computed using Scipy's\"\n", " \" trapezoidal function and the difference with our computed result\")\n", "for (i, number_intervals) in enumerate(interval_sizes_T):\n", " area_scipy_trap = si.trapz(f(np.linspace(0, np.pi, number_intervals+1)), \n", " np.linspace(0, np.pi, number_intervals+1))\n", " print('{0:.16f}, {1:.16e}'.format(area_scipy_trap, abs(area_scipy_trap - areas_T[i])))\n", "\n", "# plot\n", "fig = plt.figure(figsize=(7, 7))\n", "ax1 = plt.subplot(111)\n", "ax1.loglog(interval_sizes_M, errors_M, 'bo-', lw=2)\n", "ax1.set_xlabel('log(number_intervals)', fontsize=16)\n", "ax1.set_ylabel('log(error)', fontsize=16)\n", "ax1.set_title('Convergence plot when integrating $\\sin$ with midpoint rule', fontsize=16)\n", "ax1.loglog(interval_sizes_T, errors_T, 'bo-', lw=2, label='Trapezoidal')\n", "ax1.loglog(interval_sizes_M, errors_M, 'ko-', lw=2, label='Midpoint')\n", "ax1.legend(loc='best', fontsize=14)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3.3: Implementing Simpson's rule\n", "\n", "Complete an implementation of Simpson's rule and test it on our sine function." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def simpsons_rule(a, b, function, number_intervals=10):\n", " \"\"\" Function to evaluate Simpson's rule. \n", " \n", " Note that this implementation takes the function as an argument, \n", " and evaluates this at the midpoint of subintervals in addition to the \n", " end point. Hence additional information is generated and used through \n", " additional function evaluations. \n", " \n", " This is different to the function/implementation available with SciPy \n", " where discrete data only is passed to the function. \n", " \n", " Bear this in mind when comparing results - there will be a factor of two\n", " in the definition of \"n\" we need to be careful about!\n", " \n", " Also note that this version of the function performs redundant function \n", " evaluations - see the **composite** implementation below.\n", " \"\"\"\n", "\n", " interval_size = (b - a)/number_intervals\n", "\n", " assert interval_size > 0\n", " assert type(number_intervals) == int\n", "\n", " I_S = 0.0\n", "\n", " # Loop to valuate Simpson's formula over each interval \n", " for i in range(number_intervals):\n", " # Find a, c, and b\n", " this_bin_start = a + interval_size * (i)\n", " this_bin_mid = this_bin_start + interval_size/2\n", " this_bin_end = this_bin_start + interval_size\n", " # Calculate the rule and add to running total.\n", " I_S += (interval_size/6) * (function(this_bin_start) +\n", " 4 * function(this_bin_mid) + function(this_bin_end))\n", "\n", " # Return our running total result\n", " return I_S" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The area found by direct integration = 2\n", "Area 1 rectangle(s) = 2.0944 (error=0.0943951)\n", "Area 2 rectangle(s) = 2.00456 (error=0.00455975)\n", "Area 10 rectangle(s) = 2.00001 (error=6.78444e-06)\n", "Area 100 rectangle(s) = 2 (error=6.76471e-10)\n", "Area 1000 rectangle(s) = 2 (error=6.79456e-14)\n" ] } ], "source": [ "print(\"The area found by direct integration = 2\")\n", "for i in (1, 2, 10, 100, 1000):\n", " area = simpsons_rule(0, np.pi, np.sin, i)\n", " print(\"Area %d rectangle(s) = %g (error=%g)\"%(i, area, abs(area-2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this simple function you should find far smaller errors, and which drop much more rapidly with smaller $h$ (or more sub-intervals).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a slight improvement for a simple function like $\\sin$, but will be much more of an improvement for functions which oscillate more, in a relative sense comapred to the size of our bins. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The exact area found by direct integration = 2\n", "Area 1 for Simpson = 2.0943951023931953 (error = 9.439510239e-02)\n", "Area 2 for Simpson = 2.0045597549844207 (error = 4.559754984e-03)\n", "Area 4 for Simpson = 2.0002691699483877 (error = 2.691699484e-04)\n", "Area 8 for Simpson = 2.0000165910479355 (error = 1.659104794e-05)\n", "Area 16 for Simpson = 2.0000010333694127 (error = 1.033369413e-06)\n", "Area 32 for Simpson = 2.0000000645300018 (error = 6.453000179e-08)\n", "Area 100 for Simpson = 2.0000000006764709 (error = 6.764708793e-10)\n", "Area 1000 for Simpson = 2.0000000000000679 (error = 6.794564911e-14)\n", "\n", "Verificaton check: These are the corresponding values computed using SciPy (BUT read the comment in the code above!)\n", "2.0943951023931953, 0.0000000000000000e+00\n", "2.0045597549844207, 0.0000000000000000e+00\n", "2.0002691699483877, 0.0000000000000000e+00\n", "2.0000165910479355, 0.0000000000000000e+00\n", "2.0000010333694132, 4.4408920985006262e-16\n", "2.0000000645300018, 0.0000000000000000e+00\n", "2.0000000006764718, 8.8817841970012523e-16\n", "2.0000000000000675, 4.4408920985006262e-16\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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XJ21akHPnrB+vfHnNBRe7BnWzZmjy/Miv//+O71792bAgAE0bNiQqlWrcvjw4VT1Eoxzku4HBATg6enJPffcw+3bt4mOjqZ69erJtvLlywNw7do1HnzwQTp27JhqRqtOnTrcunWLrVu32srOnz/PgQMHqFOnjl2569SpY1emlH0bOnQovXv3pn79+pQvX55jx45l/ObcAUZhFgCmTJmCd4rXXzc3N3x9fdm7dy9DhgwhICCAN998kwtpzLW6uECXLrB2rc6OMnSoDsf37bfQti3cdx+EhkIuvMgZDHmOwECdQSg+Xn/mVWUJULNmTdasWcPGjRs5cOAAw4cP58yZ1GmDIyIieP755zl06BCLFi0iJCSEZ599FoD69evTp08fAgMDWb58OREREWzdupW3336blStXAjB06FBiY2OZMmUKf//9t227ffs29evXp3PnzgwbNow//viDXbt2MXDgQPz8/HjkkUfsyv3MM8+wevVq3nvvPf766y9mzpzJ6tWrU/Xt66+/ZteuXezatYv+/fsTGxubzXfQAY4WNwv6lp+Nfuxhz0r25s2bMn/+fKlXr57NGKho0aIyevToZBZlafH33yITJ4qULp24ElOhgsibb4qcP5/DnTIYsom0jDzyA+kZ/ezZsydZ+T///CM9evSQokWLStmyZeWll16SoUOHSufOnW11mjVrJs8884wEBQVJ8eLFpWTJkjJ+/HiJi4uz1blx44ZMmDBB/P39xc3NTcqVKye9evWSnTt3ioiIn59fMmPDhG3jxo02OQYMGCC+vr7i5eUlnTp1koMHD9raT2n0IyIya9YsqVixonh5eUn37t3l/fffT2b0c/ToUWnTpo14eXlJpUqVJCQkRDp06CDDhw9P1jdjJWsUZpaIj4+XNWvWyAMPPGD7Qbu4uMgjjzwimzZtylAbMTEic+eK1KmTqDi9vUVGjhQ5dCiHO2Aw3CH5XWHmBOkplYKMsZI1OEQpRadOnVi7di07d+7k8ccfx9XVla+++ormzZvTqlUrVqxYYTcnZwJeXvDEE3qd84cfoFMnvc45c6YOitCzJ4SHm3VOg8FQcDEKs5DRsGFDFixYQEREBOPHj8fX19dmIFC7dm1mzZpFTEyMw/OVgs6dYc0a2LNHpxVzd9frnO3awb33wogR2ijC5OY0GAwFCkdDz4K+3fGUbGioiMWiw+VY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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " \"\"\"The function we wish to integrate\"\"\"\n", " return np.sin(x)\n", "\n", "# Now let's test the Simpson's rule function.\n", "print(\"The exact area found by direct integration = 2\")\n", "interval_sizes_S = [1, 2, 4, 8, 16, 32, 100, 1000]\n", "errors_S = np.zeros_like(interval_sizes_S, dtype='float64')\n", "areas_S = np.zeros_like(interval_sizes_S, dtype='float64')\n", "for (i, number_intervals) in enumerate(interval_sizes_S):\n", " areas_S[i] = simpsons_rule(0, np.pi, f, number_intervals)\n", " errors_S[i] = abs(areas_S[i] - 2)\n", " print('Area {:<4d} for Simpson = {:.16f} (error = {:.9e})'.format(\n", " number_intervals, areas_S[i], errors_S[i]))\n", " \n", " \n", "print('\\nVerificaton check: These are the corresponding values computed using SciPy' \n", " ' (BUT read the comment in the code above!)')\n", "# note that since our function above takes the function and can evaluate it wherever it likes, \n", "# it essentially doubles the number of intervals by evaluating the function at the mid points.\n", "# The scipy function takes in discrete data points, and hence fits a polynomial across two\n", "# intervals. \n", "# Therefore to get the same values we need to explicitly double the number of intervals in the\n", "# function call: \n", "# instead of passing it 'number_intervals' points, we pass it '2*number_intervals + 1' points\n", "# Also the SciPy implementation obviously needs an even number of intervals (equivalently an ODD\n", "# number of data points)\n", "# Note we didn't have this issue with the SciPy version of trapezoidal as both the function and\n", "# data point passing versions of the method only need two (end) points per interval.\n", "for (i, number_intervals) in enumerate(interval_sizes_S):\n", " area_scipy_simpson = si.simps(f(np.linspace(0, np.pi, 2*number_intervals + 1)),\n", " np.linspace(0, np.pi, 2*number_intervals + 1))\n", " print('{0:.16f}, {1:.16e}'.format(area_scipy_simpson, abs(area_scipy_simpson - areas_S[i])))\n", " \n", "\n", "# plot\n", "fig = plt.figure(figsize=(7, 7))\n", "ax1 = plt.subplot(111)\n", "ax1.loglog(interval_sizes_S, errors_S, 'ro-', lw=2, label='Simpson')\n", "ax1.loglog(interval_sizes_T, errors_T, 'bo-', lw=2, label='Trapezoidal')\n", "ax1.loglog(interval_sizes_M, errors_M, 'ko-', lw=2, label='Midpoint')\n", "ax1.set_xlabel('log(number_intervals)', fontsize=16)\n", "ax1.set_ylabel('log(error)', fontsize=16)\n", "ax1.set_title('Quadrature rule convergence', fontsize=16)\n", "ax1.legend(loc='best', fontsize=14)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3.4: Implementing Weddle's rule\n", "\n", "Write a function which implements Weddle's rule using appropriate calls to the simpsons and simpsons_composite functions written above." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def simpsons_composite_rule(a, b, function, number_intervals=10):\n", " \"\"\"Function to evaluate the composite Simpson's rule only using\n", " function evaluations at (number_intervals + 1) points.\n", " \n", " This implementation requires that the number of subintervals (number_intervals) be even\n", " \"\"\"\n", " assert number_intervals % 2 == 0, \"number_intervals is not even\"\n", "\n", " interval_size = (b - a) / number_intervals\n", " # start with the two end member values\n", " I_cS2 = function(a) + function(b)\n", "\n", " # add in those terms with a coefficient of 4\n", " for i in range(1, number_intervals, 2):\n", " I_cS2 += 4 * function(a + i * interval_size)\n", "\n", " # and those terms with a coefficient of 2\n", " for i in range(2, number_intervals-1, 2):\n", " I_cS2 += 2 * function(a + i * interval_size)\n", "\n", " return I_cS2 * (interval_size / 3.0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def weddles_rule(a, b, function, number_intervals=10):\n", " \"\"\" Function to evaluate Weddle's quadrature rule using\n", " appropriate calls to the composite_simpson function\n", " \"\"\"\n", " S = simpsons_composite_rule(a, b, function, number_intervals)\n", " S2 = simpsons_composite_rule(a, b, function, number_intervals*2)\n", "\n", " return S2 + (S2 - S)/15." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The area found by direct integration = 2\n", "Area with 2 rectangle(s) = 1.99857 (error=0.00142927)\n", "Area with 10 rectangle(s) = 2 (error=6.44164e-08)\n", "Area with 100 rectangle(s) = 2 (error=6.23945e-14)\n", "Area with 1000 rectangle(s) = 2 (error=8.88178e-16)\n" ] } ], "source": [ "print(\"The area found by direct integration = 2\")\n", "for i in (2, 10, 100, 1000):\n", " area = weddles_rule(0, np.pi, np.sin, i)\n", " print(\"Area with %d rectangle(s) = %g (error=%g)\"%(i, area, abs(area-2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see our final rule is much more accurate for fewer required bins. Indeed we are down at the limits where round-off errors are affecting our results." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The exact area found by direct integration = 2\n", "Area 2 interval(s), 8 function evaluations for Weddle = 1.9985707318238357 (error = 1.4292681761642889e-03)\n", "Area 4 interval(s), 14 function evaluations for Weddle = 1.9999831309459859 (error = 1.6869054014101437e-05)\n", "Area 8 interval(s), 26 function evaluations for Weddle = 1.9999997524545721 (error = 2.4754542793381518e-07)\n", "Area 16 interval(s), 50 function evaluations for Weddle = 1.9999999961908446 (error = 3.8091554355190738e-09)\n", "Area 32 interval(s), 98 function evaluations for Weddle = 1.9999999999407072 (error = 5.9292792897736035e-11)\n", "Area 100 interval(s), 302 function evaluations for Weddle = 1.9999999999999376 (error = 6.2394533983933798e-14)\n", "Area 1000 interval(s), 3002 function evaluations for Weddle = 1.9999999999999991 (error = 8.8817841970012523e-16)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " \"\"\"The function we wish to integrate\"\"\"\n", " return np.sin(x)\n", "\n", "# Now let's test the Weddle's rule function.\n", "print(\"The exact area found by direct integration = 2\")\n", "interval_sizes_W = [2, 4, 8, 16, 32, 100, 1000]\n", "errors_W = np.zeros_like(interval_sizes_W, dtype='float64')\n", "for (i, number_intervals) in enumerate(interval_sizes_W):\n", " area = weddles_rule(0, np.pi, f, number_intervals)\n", " errors_W[i] = abs(area-2)\n", " print('Area {0:<4d} interval(s), {1:<4d} function evaluations for Weddle = {2:.16f} (error = {3:.16e})'.format(\n", " number_intervals, ((number_intervals+1)+(2*number_intervals+1)), area, errors_W[i]))\n", "\n", "# plot\n", "fig = plt.figure(figsize=(6, 6))\n", "ax1 = plt.subplot(111)\n", "ax1.loglog(interval_sizes_W, errors_W, 'go-', lw=2, label='Weddle')\n", "# need to run the other quadrature rules to allow the following 3 lines\n", "ax1.loglog(interval_sizes_S, errors_S, 'ro-', lw=2, label='Simpson')\n", "ax1.loglog(interval_sizes_T, errors_T, 'bo-', lw=2, label='Trapezoidal')\n", "ax1.loglog(interval_sizes_M, errors_M, 'ko-', lw=2, label='Midpoint')\n", "ax1.set_xlabel('log(number_intervals)', fontsize=16)\n", "ax1.set_ylabel('log(error)', fontsize=16)\n", "ax1.set_title('Quadrature rule convergence', fontsize=16)\n", "ax1.legend(loc='best', fontsize=14)\n", "\n", "\n", "# this generates the image seen in lecture\n", "#fig.savefig('weddle_convergence.png', dpi=600, format='png', facecolor='w', edgecolor='w')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "427.513px" }, "toc_section_display": false, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }