{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical Integration of a Function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we have a function $f(x)$ that we want to integrate. For example, $f(x) = \\sin(x)$, to be integrated from $0$ to $\\pi$. The result should be\n", "\\begin{equation*}\n", "\\int_{0}^{\\pi} \\sin(x) dx = - \\cos(x) \\Big|_{0}^{\\pi} = 2\n", "\\end{equation*}\n", "But how about we evaluate the integral numerically?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us first define the function to be integrated and plot it." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def func(x):\n", " f = np.sin(x) # use the `sin` function from numpy\n", " return f" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = 40 # number of partitions used below\n", "x_array = np.linspace(0, np.pi, N+1) # this function uniformly partitions a range and returns an array (endpoint included)\n", "f_array = func(x_array) # apply our function on the array (element-wise)\n", "\n", "plt.figure()\n", "plt.plot(x_array, f_array)\n", "plt.xlabel('x')\n", "plt.ylabel('f')\n", "plt.title(r'$f(x) = \\sin (x)$')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Integration using Riemann Sum\n", "\n", "The integral of the function is the area under the curve. We can integrate the function by partitioning the x-axis into small segments and approximating the area within each partition as a rectangle. Then the total area is approximated by the sum of all rectangle areas." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dx = np.pi / N\n", "\n", "plt.figure()\n", "plt.plot(x_array, f_array)\n", "plt.bar(x_array, f_array, width=dx, edgecolor='orange') # make bar plot\n", "plt.xlabel('x')\n", "plt.ylabel('sin(x)')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total area = 1.998971810497066\n" ] } ], "source": [ "Riemann_sum = np.sum(f_array * dx)\n", "print(f'Total area = {Riemann_sum}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we increase the number of partitions, `N`, we can improve the precision of the numerical integration. To do this, let us define a function that carries out the steps we did above, but with `N` as a parameter." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def sum_over_N_part(N):\n", " \"\"\"\n", " integrate a function using Riemann sum over N partitions.\n", " input:\n", " N: int, number of partitions.\n", " output:\n", " Riemann_sum: float, value of integral.\n", " \"\"\"\n", " x_array = np.linspace(0, np.pi, N+1)\n", " f_array = func(x_array) # note that `func` has been defined outside this function\n", " dx = np.pi / N\n", " Riemann_sum = np.sum(f_array * dx)\n", " return Riemann_sum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First check if we can reproduce our result above:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.998971810497066" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum_over_N_part(40)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let us try a bigger N:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.9998355038874436" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum_over_N_part(100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact, we can see how our result improves by plotting the result with respect to N:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N_array = [10, 40, 100, 400, 1000, 4000, 10000] # try these N values\n", "sum_array = []\n", "for N in N_array:\n", " s = sum_over_N_part(N)\n", " sum_array.append(s)\n", "\n", "plt.figure()\n", "plt.plot(N_array, sum_array)\n", "plt.xscale('log') # use `log` scale\n", "plt.xlabel('N')\n", "plt.ylabel('Riemann sum')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check how fast the numerical result converges to the right answer:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "err_array = np.abs(2 - np.array(sum_array)) # absolute deviation from the right answer\n", "\n", "plt.figure()\n", "plt.plot(N_array, err_array)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('N')\n", "plt.ylabel('error')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This figure shows that the numerical result converges to the right answer quadratically, i.e., error $\\propto N^{-2}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Integration using Monte Carlo\n", "\n", "An alternative, perhaps amusing, method for doing the integral is to use the \"Monte Carlo\" method. Monte Carlo generally refers to numerical methods that rely on using (pseudo)random numbers. In our case, we will generate random numbers to help us estimate the area under the curve.\n", "\n", "The idea is to look at a box that contains the curve, such as one bounded by $x = 0, \\pi$ and $y = 0, 1$. Our goal is to estimate the fraction of area inside the box that is under the curve. Since we know the total area of the box, $A = \\pi$, by evaluating the fraction, we will be able to find the area under the curve. Now the trick is to estimate this fraction using random numbers. Basically, we will toss random points inside the box and count how many happen to lie below the curve." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "R = 1000 # number of random points\n", "\n", "y_coord = np.random.rand(R) # y coordinates uniformly sampled between 0 and 1\n", "x_coord = np.random.rand(R) * np.pi # x coordinates uniformly sampled between 0 and pi\n", "\n", "plt.figure()\n", "plt.plot(x_array, f_array) # plotting the curve\n", "plt.plot(x_coord, y_coord, 'x') # plotting the random points\n", "plt.xlim(0, np.pi)\n", "plt.ylim(0, 1)\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of points below the curve = 650\n" ] } ], "source": [ "below_curve = (y_coord < func(x_coord)) # binary array, 1 for True (below curve) and 0 for False (above curve)\n", "count_below = np.sum(below_curve) # count the number of points below the curve\n", "print(f'number of points below the curve = {count_below}')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Area under curve = 2.0420352248333655\n" ] } ], "source": [ "fraction = count_below / R # fraction of points below the curve\n", "MonteCarlo_area = np.pi * fraction # estimated area below the curve\n", "print(f'Area under curve = {MonteCarlo_area}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We may improve the precision by increasing the number of random points, `R`. Let us again define a function to carry out the steps above, with the number `R` as a parameter:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def estimate_by_R_points(R):\n", " \"\"\"\n", " Define a python function to do the integral using R random points.\n", " Input:\n", " R: int, number of random points.\n", " Output:\n", " MonteCarlo_area: float, value of integral as given by Monte Carlo method.\n", " \"\"\"\n", " y_coord = np.random.rand(R)\n", " x_coord = np.random.rand(R) * np.pi\n", " below_curve = (y_coord < func(x_coord))\n", " count_below = np.sum(below_curve)\n", " fraction = count_below / R\n", " MonteCarlo_area = np.pi * fraction\n", " return MonteCarlo_area" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us plot the result with respect to the number R. Since each time we run the function, there will be a different realization of the random points, we should take an average over multiple trials for each R. We will also estimate the error of the estimation by calculating the standard error among the trials." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "R_array = [100, 400, 1000, 4000, 10000, 40000, 100000] # try these R values\n", "est_array = [] # list of estimates\n", "se_array = [] # list of standard errors\n", "\n", "trial = 100\n", "for R in R_array:\n", " res = []\n", " for t in range(trial): # for each R, repeat the calculation `trial` times\n", " mc = estimate_by_R_points(R)\n", " res.append(mc) # collect results from the trials in the list `res`\n", " res_mean = np.mean(res) # calculate the mean of the trials\n", " res_se = np.std(res) / np.sqrt(trial) # standard error = standard deviation / sqrt(#data-points)\n", " est_array.append(res_mean)\n", " se_array.append(res_se)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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j07rcn79ynIq6xq44Qw1axURiaUV01YiXV90aZW19fz5vWK+dfQghvVJ6CG3RUSAlrv7fqalN7r7WW1fTniKy6rITk/h6q8EXjcXEUk4LR1BHEOkm42ZwHtAl+2IaFtlLdur6rjhjNH0ym6zewFFRDq1lgLiECKjyU0HLiDSi+vM1u5/6GzqGxpZU1ZJekoSFx5TFHY5IiIdRkvjQTS4+wvufhFwNLCCSJ9MV7Zbde2gur6RbhmpFPbKIi1FzVpFRHZp8SK1maUDZxA5iigC7gGejn9Z7ScnPYXBeV32tg4RkQPW0kXqh4GxwHPAL9w9cGQ4ERHpmlo6gvgWUAFcBfww0uEqELlY7e7eLc61iYhIiJoNCHfXCXkRkQSmEBARkUAKCBERCaSAEBGRQAoIEREJpIAQEZFACggREQmkgBARkUAKCBERCaSAEBGRQAoIEREJpIAQEZFACggREQmkgBARkUAKCBERCaSAEBGRQAoIEREJpIAQEZFAcQsIM3vAzDaZWeBY1mbW08yeNrOFZjbXzMZGp480swVNHuVmdnW86hQRkWDxPIJ4EJjawvzrgQXuPg64ELgbwN2Xufvh7n44cCRQCTwdxzpFRCRA3ALC3d8AylpYZAzwWnTZpUCRmfXda5lTgM/cfU18qhQRkeaEeQ3iI+BcADObBAwCBu61zDRgZjvXJSIihBsQtwM9zGwB8APgQ6Bh10wzSwPOAv7S0krM7DIzm2dm80pLS+NYrohIYkkJ64PdvRy4GMDMDFgFrGyyyGnAfHff2Mp6ZgAzACZMmODxqVZEJPGEdgRhZj2iRwkAlwJvRENjl+no9JKISGjidgRhZjOByUCemZUANwKpAO5+HzAaeMjMHFgEXNLkvdnAFODyeNUnIiIti1tAuPv0VubPAUY0M68C6B2PukREJDa6k1pERAIpIEREJJACQkREAikgREQkkAJCREQCKSBERCSQAkJERAIpIEREJJACQkREAikgREQkkAJCREQCKSBERCSQAkJERAIpIEREJJACQkREAikgREQkkAJCREQCKSBERCSQAkJERAIpIEREJJACQkREAikgREQkkAJCREQCKSBERCSQAkJERAIpIEREJJACQkREAikgREQkUErYBXQEj11+TNgliIh0ODqCEBGRQHELCDN7wMw2mdknzczvaWZPm9lCM5trZmObzOthZk+Y2VIzW2Jm+oovItLO4nkE8SAwtYX51wML3H0ccCFwd5N5dwMvuPso4DBgSbyKFBGRYHELCHd/AyhrYZExwGvRZZcCRWbW18y6AycA90fn1br7tnjVKSIiwcK8BvERcC6AmU0CBgEDgcFAKfC/Zvahmf3RzLLDK1NEJDGFGRC3Az3MbAHwA+BDoIFIy6ojgN+5+3igAvhxcysxs8vMbJ6ZzSstLY1/1SIiCSK0gHD3cne/2N0PJ3INIh9YCZQAJe7+XnTRJ4gERnPrmeHuE9x9Qn5+frzLFhFJGKEFRLSlUlr05aXAG9HQ2ACsNbOR0XmnAItDKVJEJIHF7UY5M5sJTAbyzKwEuBFIBXD3+4DRwENm5sAi4JImb/8B8KdogKwELo5XnSIiEszcPewa2oyZlQJr9prcHdgew7Q8YHOcSmtJUC3ttZ5Y39Paci3Nj/X/P2h6WNskqJb2Wk9Y26S56fpb2b/3HOh2OdjpB7NNBrl78Pl5d+/SD2BGjNPmdZT62ms9sb6nteVamh/r/3/Q9LC2SZjbJaxtsj/bSn8rbb9dDnZ6vLZJInS18fcYp4WlrWo5kPXE+p7Wlmtp/v78/2u7hLdNmpuubbJ/7znQ7dJW09tUlzrFdDDMbJ67Twi7DvmCtknHpO3S8cRrmyTCEUSsZoRdgOxD26Rj0nbpeOKyTXQEISIigXQEISIigRQQIiISSAEhIiKBFBDNMLNzzOwPZvaYmX017HoEzGy0md0XHUzq+2HXIxFmlh3tMPPMsGuRCDObbGZvRv9eJh/oehIqIJob5c7MpprZMjNbYWY/BnD3v7r7d4HvAeeHUW8i2M9tssTdvwd8A/hyGPUmgv3ZJlE/Ah5v3yoTz35uFwd2AhlEOkA9IAkVEASMcmdmycC9wGlEBjGabmZjmixyQ3S+xMeD7Mc2MbOzgFnAc+1bZkJ5kBi3iZlNIdKZ5qb2LjIBPUjsfytvuvtpRML7Fwf6gQkVEB48yt0kYIW7r3T3WuBR4GyLuAN43t3nt3etiWJ/tkl0+Weiv/jfbN9KE8d+bpPJwNHABcB3zSyh9intaX+2i7s3RudvBdIP9DPj1ptrJzIAWNvkdQlwFJEeZb8CdDezYR7pgVbaR+A2iZ5LPZfIL7yOINpX4DZx9ysBzOxfgM1NdkzSPpr7WzkXOBXoAfzPga5cAdEMd78HuCfsOuQL7j4bmB1yGRLA3R8Muwb5grs/BTx1sOvR4SCsAwqavB4YnSbh0TbpeLRNOqa4bhcFBLwPDDezwdEBiqYBz4RcU6LTNul4tE06prhul4QKiOgod3OAkWZWYmaXuHs9cCXwIrAEeNzdF4VZZyLRNul4tE06pjC2izrrExGRQAl1BCEiIrFTQIiISCAFhIiIBFJAiIhIIAWEiIgEUkCIiEggdbUhEkdm1gB8TORvbRXwbXffFmpRIjHSEYRIfFW5++HuPpZIT5xXhF2QSKwUECLtZw6R3jdFOgUFhEg7iA7scgrqv0g6EQWESHxlmtkCYAPQF3g53HJEYqeAEImvKnc/HBgEGLoGIZ2IOusTiSMz2+nuOdHn44G/AkOjvXCKdGg6ghBpJ+7+IbAQmB52LSKx0BGEiIgE0hGEiIgEUkCIiEggBYSIiARSQIiISCAFhIiIBFJAiIhIIAWEiIgEUkCIiEig/w8dPGXpPlBY/QAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.errorbar(R_array, est_array, yerr=se_array) # make plot with errorbars\n", "plt.axhline(2, color='k') # draw horizontal line\n", "plt.xscale('log')\n", "plt.xlabel('R')\n", "plt.ylabel('Monte Carlo area')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can see how the error scales with the number of random points:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(R_array, se_array)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('R')\n", "plt.ylabel('standard error')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This figure shows that our result converges again quadratically, i.e., error $\\propto R^{-2}$." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }