{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Solutions to tutorial exercises" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from scipy import linalg, interpolate, optimize, special" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.1:**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "541\n", "0.01 9.9\n", "0.10000000000000009\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAACaCAYAAABG4ilDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKqElEQVR4nO3dXcxkd10H8O+ProDKxrUuSAXSpySEiN7Yrg2+ZiNEoTEgJpp6QwkmhosmcmFiSRNogolBoyEmvsQXUjRovVC0IRABlXphQLZNX9OubXUbamsrGorGiFb/XsypPIzzdGfLzuvv80kmM885Z2Z+//mdnfnuOWfO1BgjAABdPG/TBQAArJPwAwC0IvwAAK0IPwBAK8IPANCK8AMAtHLsQhY+efLkODg4WFEpAAAXz+233/75McaL56dfUPg5ODjImTNnLl5VAAArUlWPLJputxcA0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtLLd4eemm77yepXT1v18u1TXNtSwrXV1qOHEieUvBwfLL1u1+HIhj3EhtRwcrOf1mp+27ufbpbq2oYZtrWvfa9iwGmMsvfCpU6fGmTNnVljOnKpkjC9fr3Laup9vl+rahhq2ta4ONeyTfezPLte1DTVsa137XsOaVNXtY4xT89Oft7YKAAC2gPADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0cu5CFz549m9OnT6+olP/vU0lOnz79f9ernLbu59ulurahhm2tq0MN+2Qf+7PLdW1DDdta177XsGkXdJLD48ePj6uuuuqrftK3nTuXtz3yyFf9OADA/rn58stz8+Gzsj9Ht91228KTHDrD8zoee9fr2oYatrWuDjXsk33szy7XtQ01bGtd+17DmjjDMwBAhB8AoBnhBwBoRfgBAFoRfgCAVoQfAKAV4QcAaEX4AQBauaCft1i797znK69XOW3dz7dLdW1DDdtaV4ca3v/+LO3EieQLX1hu2aeeWjz98suXf4wLqeXEiS/f3qf+7HJd21DDtta17zVs2Haf4RkA4DlyhmcAgAg/AEAzwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANCK8AMAtCL8AACtCD8AQCvCDwDQivADALQi/AAArQg/AEArwg8A0IrwAwC0IvwAAK0IPwBAK8IPANBKjTGWX7jqn5I8srpykiQnk3x+xc+xrTqPPek9/s5jT3qPv/PYk97jN/bVu3yM8eL5iRcUftahqs6MMU5tuo5N6Dz2pPf4O4896T3+zmNPeo/f2Dc3dru9AIBWhB8AoJVtDD+/uekCNqjz2JPe4+889qT3+DuPPek9fmPfkK075gcAYJW2ccsPAMDKbCT8VNWPVdV9VfU/VXVqbt67quqhqjpbVT90xP0vrapPVNWD0/U3rqfyi6uq/rCq7pwu56rqziOWO1dV90zLnVlzmStTVTdV1T8ceg2uOWK5N0zrw0NVdcO661yFqvrFqnqgqu6uqg9X1Ykjltub3p+vjzXzK9P8u6vqyk3UuQpV9Yqq+suqun967/vpBcucrqqnDv17ePcmal2F863He977Vx/q6Z1V9cWqeufcMnvT+6r6QFU9WVX3Hpq21Gf2Wt/rxxhrvyT51iSvTvKpJKcOTX9NkruSvCDJFUkeTnLJgvv/QpIbpts3JHnfJsZxkV+TX0ry7iPmnUtyctM1rmDMNyX5mfMsc8m0HrwyyfOn9eM1m679Ioz9B5Mcm26/76h1eF96v0wfk1yT5GNJKslrk3xm03VfxPFfluTK6fbxJH+7YPynk3xk07WuaPzPuh7vc+/nxnlJkn/M7Nwze9n7JN+f5Mok9x6adt7P7HW/129ky88Y4/4xxtkFs96c5JYxxpfGGH+f5KEkVx+x3Aen2x9M8iMrKXRNqqqS/HiSP9h0LVvo6iQPjTH+bozxn0luyaz/O22M8fExxtPTn59O8vJN1rMGy/TxzUl+d8x8OsmJqrps3YWuwhjj8THGHdPtf01yf5KXbbaqrbK3vZ/zuiQPjzFWfbLgjRlj/FWSf5mbvMxn9lrf67ftmJ+XJfncob8fzeI3iG8eYzyezN5UkrxkDbWt0vcleWKM8eAR80eSj1fV7VX1U2usax2unzZzf+CITaHLrhO77O2Z/a93kX3p/TJ97NDrVNVBku9I8pkFs7+rqu6qqo9V1bett7KVOt963KL3Sa7N0f/J3dfeJ8t9Zq91HTi2qgeuqk8meemCWTeOMf70qLstmLbTX0db8nX4iTz7Vp/vGWM8VlUvSfKJqnpgStdb79nGn+TXk7w3sx6/N7Ndf2+ff4gF992JdWKZ3lfVjUmeTvKhIx5mZ3s/Z5k+7myvl1VVL0ryR0neOcb44tzsOzLbHfJv0/Fvf5LkVWsucVXOtx536P3zk7wpybsWzN7n3i9rrevAysLPGOP1z+FujyZ5xaG/X57ksQXLPVFVl40xHp82jT75XGpch/O9DlV1LMmPJrnqWR7jsen6yar6cGabB3fiA3DZ9aCqfivJRxbMWnad2DpL9P66JD+c5HVj2um94DF2tvdzlunjzvZ6GVX1NZkFnw+NMf54fv7hMDTG+GhV/VpVnRxj7PxvPy2xHu917ydvTHLHGOOJ+Rn73PvJMp/Za10Htm23161Jrq2qF1TVFZkl3785YrnrptvXJTlqS9IueH2SB8YYjy6aWVVfX1XHn7md2YGy9y5adtfM7dN/SxaP67NJXlVVV0z/c7o2s/7vtKp6Q5KfTfKmMca/H7HMPvV+mT7emuSt0zd/XpvkqWc2le+66bi+30ly/xjjl49Y5qXTcqmqqzN7f/7n9VW5Gkuux3vb+0OO3MK/r70/ZJnP7PW+16/rCPC5o7rfklnK+1KSJ5L82aF5N2Z2xPfZJG88NP23M30zLMk3JfnzJA9O15duYhwX6bW4Ock75qZ9S5KPTrdfmdlR73cluS+zXSYbr/sijf33ktyT5O5pJb9sfvzT39dk9u2Yh/dl/JkdzP+5JHdOl9/Y994v6mOSdzyz/me22ftXp/n35NA3QXf9kuR7M9uEf/ehnl8zN/7rpz7fldlB8N+96bov0tgXrsddej+N7+syCzPfcGjaXvY+s4D3eJL/mj7nf/Koz+xNvtc7wzMA0Mq27fYCAFgp4QcAaEX4AQBaEX4AgFaEHwCgFeEHAGhF+AEAWhF+gI2oqu+cftT2hdNZgO+rqm/fdF3A/nOSQ2BjqurnkrwwydcmeXSM8fMbLgloQPgBNmb6DZ/PJvmPzE7p/98bLglowG4vYJMuTfKiJMcz2wIEsHK2/AAbU1W3JrklyRWZ/bDt9RsuCWjg2KYLAHqqqrcmeXqM8ftVdUmSv66qHxhj/MWmawP2my0/AEArjvkBAFoRfgCAVoQfAKAV4QcAaEX4AQBaEX4AgFaEHwCgFeEHAGjlfwEa9Fd2OIFSxQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 1.\n", "\n", "print(2 * 9 * 10 * 3 + 1)\n", "\n", "# 2.\n", "\n", "print(1.0e-2, 9.9e0)\n", "\n", "# 3.\n", "\n", "print(1.1e0 - 1.0e0)\n", "\n", "# 4.\n", "\n", "d_1_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n", "d_2_vals = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n", "E_vals = [0, -1, -2]\n", "\n", "fig, ax = plt.subplots(figsize=(10, 2))\n", "ax.axhline(0, color=\"black\")\n", "\n", "for E in E_vals:\n", " for d1 in d_1_vals:\n", " for d2 in d_2_vals:\n", " ax.plot(-(d1 + d2 * 0.1) * 10**E, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", " ax.plot(+(d1 + d2 * 0.1) * 10**E, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", "\n", "ax.plot(0.0, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", "\n", "ax.set_yticks([])\n", "ax.set_xlabel(\"x\")\n", "ax.set_xlim([-11, 11])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.2:**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13\n", "0.5 3.0\n", "0.5\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 1.\n", "\n", "print(2 * 1 * 2 * 3 + 1)\n", "\n", "# 2.\n", "\n", "print((1.0 * 1.0 + 0.0 * 0.5) * 2.0**(-1), (1.0 * 1.0 + 1.0 * 0.5) * 2.0**1)\n", "\n", "# 3.\n", "\n", "print((1.0 * 1.0 + 1.0 * 0.5) * 2.0**0 - (1.0 * 1.0 + 0.0 * 0.5) * 2.0**0)\n", "\n", "# 4.\n", "\n", "d_1_vals = [1]\n", "d_2_vals = [0, 1]\n", "E_vals = [1, 0, -1]\n", "\n", "fig, ax = plt.subplots(figsize=(10, 2))\n", "ax.axhline(0, color=\"black\")\n", "\n", "for E in E_vals:\n", " for d1 in d_1_vals:\n", " for d2 in d_2_vals:\n", " ax.plot(-(d1 + d2 * 0.5) * 2**E, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", " ax.plot(+(d1 + d2 * 0.5) * 2**E, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", " \n", "ax.plot(0.0, 0.0, color=\"red\", marker=\"+\", markersize=20)\n", "\n", "ax.set_yticks([])\n", "ax.set_xlabel(\"x\")\n", "ax.set_xlim([-5, 5])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.3:**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "70368744177664.0\n" ] } ], "source": [ "x = 0.1 + 0.2 - 0.3\n", "\n", "for i in range(100):\n", " x = x + x\n", " \n", "print(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.4:**" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def function(x):\n", " return (1.0 - np.cos(x)) / x**2\n", "\n", "def relative_error(x):\n", " return np.abs(0.5 - function(x)) / 0.5\n", "\n", "x = np.linspace(-1.0e-7, 1.0e-7, 1000)\n", "\n", "fig, ax = plt.subplots(1, 2, figsize=(8, 3))\n", "ax[0].plot(x, function(x))\n", "ax[0].set_xlabel(\"x\")\n", "ax[0].set_ylabel(\"f (x)\")\n", "ax[1].plot(x, relative_error(x))\n", "ax[1].set_xlabel(\"x\")\n", "ax[1].set_ylabel(\"relative error (x)\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.5:**" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.999999999999993 10.000000000000004\n" ] } ], "source": [ "array = [0.9**n for n in range(0, 400)]\n", "\n", "s_1 = 0.0\n", "for x in array:\n", " s_1 += x\n", "\n", "s_2 = 0.0\n", "for x in array[::-1]:\n", " s_2 += x\n", " \n", "print(s_1, s_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.6:**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 1.\n", "\n", "x = np.linspace(-1, 1, 100)\n", "\n", "def exp_taylor(x):\n", " return 1.0 + x + x**2 / 2.0\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, np.exp(x), color=\"black\", linestyle=\"--\")\n", "ax.plot(x, exp_taylor(x), color=\"red\")\n", "plt.show()\n", "\n", "# 2.\n", "\n", "def absolute_error(x):\n", " return np.abs(np.exp(x) - exp_taylor(x))\n", "\n", "def relative_error(x):\n", " return np.abs(np.exp(x) - exp_taylor(x)) / np.exp(x)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, absolute_error(x), color=\"blue\")\n", "ax.plot(x, relative_error(x), color=\"red\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.7:**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 1.\n", "\n", "def forward_diff(f, x, h):\n", " return (f(x + h) - f(x)) / h\n", "\n", "def central_diff(f, x, h):\n", " return (f(x + h) - f(x - h)) / (2.0 * h)\n", "\n", "x = np.linspace(-2.0 * np.pi, 2.0 * np.pi, 1000)\n", "h = 0.5\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, forward_diff(np.sin, x, h), color=\"red\")\n", "ax.plot(x, central_diff(np.sin, x, h), color=\"blue\")\n", "ax.plot(x, np.cos(x), color=\"black\", linestyle='--')\n", "plt.show()\n", "\n", "# 2.\n", "\n", "def forward_error(f, x, h, exact_value):\n", " return np.abs(forward_diff(f, x, h) - exact_value) / np.abs(exact_value)\n", "\n", "def central_error(f, x, h, exact_value):\n", " return np.abs(central_diff(f, x, h) - exact_value) / np.abs(exact_value)\n", "\n", "x = 1.0\n", "h = np.array([2.0**(-n) for n in range(1, 60)]);\n", "\n", "fig, ax = plt.subplots()\n", "ax.loglog(h, forward_error(np.sin, x, h, np.cos(x)), color=\"red\")\n", "ax.loglog(h, central_error(np.sin, x, h, np.cos(x)), color=\"blue\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.8:**" ] }, { "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": [ "h = 0.1\n", "x = np.arange(0, 10, h)\n", "y_1 = np.zeros(x.size)\n", "y_2 = np.zeros(x.size)\n", "\n", "y_1[0] = 1.0\n", "for i in range(x.size - 1):\n", " y_1[i+1] = y_1[i] - y_1[i] * h\n", "\n", "y_2[0] = 1.0\n", "for i in range(x.size - 1):\n", " y_2[i+1] = y_2[i-1] - y_2[i] * 2.0 * h\n", "\n", "fig, ax = plt.subplots(1, 2, figsize=(8, 3))\n", "ax[0].plot(x, y_1, color=\"red\")\n", "ax[0].plot(x, np.exp(-x), color=\"black\", linestyle=\"--\")\n", "ax[1].plot(x, y_2, color=\"blue\")\n", "ax[1].plot(x, np.exp(-x), color=\"black\", linestyle=\"--\")\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.9:**" ] }, { "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": [ "phi = np.zeros(20, dtype=np.float16)\n", "phi[0] = 1.0\n", "phi[1] = (np.sqrt(5.0) - 1.0) / 2.0\n", "for n in range(1, 19):\n", " phi[n+1] = phi[n-1] - phi[n]\n", " \n", "phi_exact = np.zeros(20, dtype=np.float16)\n", "phi_exact[0] = 1.0\n", "phi_exact[1] = (np.sqrt(5.0) - 1.0) / 2.0\n", "for n in range(1, 19):\n", " phi_exact[n+1] = phi_exact[n] * phi_exact[1]\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(phi, linestyle=\"-\", color=\"red\")\n", "ax.plot(phi_exact, linestyle=\"--\", color=\"black\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 02.10:**" ] }, { "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": [ "alpha = np.linspace(-2, 2, 1000)\n", "C_p = 2.0 * alpha**2 / np.abs(1 - alpha**2)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(alpha, C_p)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.1:**" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def scalar_product(x, y):\n", " \"\"\"\n", " Calculates scalar product of two vectors.\n", " Args:\n", " x (array_like): Vector of size n\n", " y (array_like): Vector of size n\n", " Returns:\n", " numpy.float: Scalar product of x and y\n", " \"\"\"\n", " n = x.size\n", " z = 0.0\n", " for i in range(n):\n", " z = z + x[i] * y[i]\n", " return z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.2:**" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def matrix_vector_product(A, x):\n", " \"\"\"\n", " Calculates matrix-vector product.\n", " Args:\n", " A (array_like): A m-by-n matrix\n", " x (array_like): Vector of size n\n", " Returns:\n", " numpy.ndarray: Matrix-vector product\n", " \"\"\"\n", " m, n = A.shape\n", " b = np.zeros(m)\n", " for i in range(m):\n", " for j in range(n):\n", " b[i] = b[i] + A[i, j] * x[j]\n", " return b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.3:**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def matrix_matrix_product(A, B):\n", " \"\"\"\n", " Calculates matrix-matrix product.\n", " Args:\n", " A (array_like): A m-by-n matrix\n", " B (array_like): A n-by-p matrix\n", " Returns:\n", " numpy.ndarray: Matrix-matrix product\n", " \"\"\"\n", " m, n = A.shape\n", " n, p = B.shape\n", " C = np.zeros((m, p))\n", " for i in range(m):\n", " for j in range(p):\n", " for k in range(n):\n", " C[i, j] = C[i, j] + A[i, k] * B[k, j]\n", " return C" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.4:**" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def forward_substitution(A, b):\n", " \"\"\"\n", " Solves a system of linear equations with lower triangular matrix.\n", " Args:\n", " A (array_like): A n-by-n lower triangular matrix\n", " b (array_like): RHS vector of size n\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " for i in range(n):\n", " x[i] = 1.0 / A[i, i] * (b[i] - A[i, :] @ x)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.5:**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def backward_substitution(A, b):\n", " \"\"\"\n", " Solves a system of linear equation with upper triangular matrix.\n", " Args:\n", " A (array_like): A n-by-n upper triangular matrix\n", " b (array_like): RHS vector of size n\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " for i in reversed(range(n)):\n", " x[i] = 1.0 / A[i, i] * (b[i] - A[i, :] @ x)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.6:**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def gaussian_elimination(A):\n", " \"\"\"\n", " Transforms given matrix into an upper triangular form using the Gaussian elimination algorithm.\n", " Args:\n", " A (array_like): A n-by-n matrix\n", " Returns:\n", " numpy.ndarray: Upper triangular matrix\n", " \"\"\"\n", " n, n = A.shape\n", " U = np.copy(A)\n", " for i in range(n): \n", " for j in range(i + 1, n):\n", " for k in range(n):\n", " U[j, k] = U[j, k] - (U[j, i] / U[i, i]) * U[i, k] \n", " return U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.7:**" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def gaussian_elimination_with_pivoting(A):\n", " \"\"\"\n", " Transforms given matrix into an upper triangular form using the Gaussian elimination algorithm with pivoting.\n", " Args:\n", " A (array_like): A n-by-n matrix\n", " Returns:\n", " numpy.ndarray: Upper triangular matrix\n", " \"\"\"\n", " n, n = A.shape\n", " U = np.copy(A)\n", " for i in range(n):\n", " max_row = np.argmax(np.abs(U[i:, i]))\n", " if (max_row != 0):\n", " row_i = np.copy(U[i, :])\n", " U[i, :] = U[i + max_row, :]\n", " U[i + max_row, :] = row_i \n", " for j in range(i + 1, n):\n", " U[j, :] = U[j, :] - (U[j, i] / U[i, i]) * U[i, :] \n", " return U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.8:**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def gaussian_elimination_with_pivoting_vector(A, b):\n", " \"\"\"\n", " Transforms given matrix into an upper triangular form using the Gaussian elimination algorithm with pivoting, \n", " performs identical operations on RHS vector.\n", " Args:\n", " A (array_like): A n-by-n regular matrix\n", " b (array_like): RHS vector of size n\n", " Returns:\n", " numpy.ndarray: Upper triangular matrix\n", " numpy.ndarray: RHS vector corresponding to upper triangular matrix\n", " \"\"\"\n", " n, n = A.shape\n", " U = np.zeros((n, n + 1))\n", " U[:, :-1] = A\n", " U[:, -1] = b\n", " for i in range(0, n): \n", " max_row = np.argmax(np.abs(U[i:, i]))\n", " if (max_row != 0):\n", " row_i = np.copy(U[i, :])\n", " U[i, :] = U[i + max_row, :]\n", " U[i + max_row, :] = row_i \n", " for j in range(i + 1, n):\n", " U[j, :] = U[j, :] - (U[j, i] / U[i, i]) * U[i, :] \n", " return U[:, :-1], U[:, -1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.9:**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def lu_decomposition(A):\n", " \"\"\"\n", " Factors given matrix as the product of a lower and an upper triangular matrix using LU decomposition.\n", " Args:\n", " A (array_like): A n-by-n matrix\n", " Returns:\n", " numpy.ndarray: Lower triangular matrix\n", " numpy.ndarray: Upper triangular matrix\n", " \"\"\"\n", " n, n = A.shape\n", " L = np.zeros((n, n))\n", " U = np.zeros((n, n))\n", " for i in range(n):\n", " for j in range(i, n):\n", " U[i, j] = A[i, j] - L[i, :] @ U[:, j]\n", " L[j, i] = 1.0 / U[i, i] * (A[j, i] - L[j, :] @ U[:, i])\n", " return L, U" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 03.10:**" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def thomas_algorithm(A, b):\n", " \"\"\"\n", " Solves system of linear equations with a tridiagonal matrix using Thomas algorithm.\n", " Args:\n", " A (array_like): A n-by-n regular matrix\n", " b (array_like): RHS vector of size n\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " p = np.diag(A, 1)\n", " q = np.diag(A, 0)\n", " r = np.diag(A, -1)\n", " p = np.insert(p, n - 1, 0.0) \n", " r = np.insert(r, 0, 0.0)\n", " x = np.zeros(n)\n", " mu = np.zeros(n)\n", " rho = np.zeros(n)\n", " mu[0] = -p[0] / q[0]\n", " rho[0] = b[0] / q[0]\n", " for i in range(1, n):\n", " mu[i] = -p[i] / (r[i] * mu[i - 1] + q[i])\n", " rho[i] = (b[i] - r[i] * rho[i - 1]) / (r[i] * mu[i - 1] + q[i])\n", " x[n-1] = rho[n-1]\n", " for i in reversed(range(n - 1)):\n", " x[i] = mu[i] * x[i+1] + rho[i]\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.1:**" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "def jacobi_method(A, b, error_tolerance):\n", " \"\"\"\n", " Solves system of linear equations iteratively using Jacobi's algorithm.\n", " Args:\n", " A (array_like): A n-by-n diagonally dominant matrix\n", " b (array_like): RHS vector of size n\n", " error_tolerance (float): Error tolerance\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " x_new = np.zeros(n)\n", " k = 0\n", " while linalg.norm(np.dot(A, x) - b) > error_tolerance:\n", " for i in range(n):\n", " x_new[i] = (1.0 / A[i, i]) * (b[i] \n", " - np.dot(A[i, :i], x[:i]) - np.dot(A[i, i+1:], x[i+1:])) \n", " x = x_new \n", " k = k + 1\n", " print(k)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.2:**" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def gauss_seidel_method(A, b, error_tolerance):\n", " \"\"\"\n", " Solves system of linear equations iteratively using Gauss-Seidel's algorithm.\n", " Args:\n", " A (array_like): A n-by-n diagonally dominant matrix\n", " b (array_like): RHS vector of size n\n", " error_tolerance (float): Error tolerance\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " k = 0\n", " while linalg.norm(np.dot(A, x) - b) > error_tolerance:\n", " for i in range(n):\n", " x[i] = (1.0 / A[i, i]) * (b[i] \n", " - np.dot(A[i, :i], x[:i]) - np.dot(A[i, i+1:], x[i+1:])) \n", " k = k + 1\n", " print(k)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.3:**" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "def successive_overrelaxation_method(A, b, omega, error_tolerance):\n", " \"\"\"\n", " Solves system of linear equations iteratively using successive over-relaxation (SOR) method.\n", " Args:\n", " A (array_like): A n-by-n matrix\n", " b (array_like): RHS vector of size n\n", " omega (float): Relaxation factor\n", " error_tolerance (float): Error tolerance\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " k = 0\n", " while linalg.norm(np.dot(A, x) - b) > error_tolerance:\n", " for i in range(n):\n", " x[i] = (1.0 - omega) * x[i] + (omega / A[i, i]) * (b[i] \n", " - np.dot(A[i, :i], x[:i]) - np.dot(A[i, i+1:], x[i+1:]))\n", " k = k + 1\n", " print(k)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.4:**" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "103\n", "98\n", "66\n" ] } ], "source": [ "A = np.random.rand(100, 100) + 10 * np.eye(100) # create diagonally dominant matrix to ensure convergence\n", "b = np.random.rand(100)\n", "x = jacobi_method(A, b, 1.0e-15)\n", "x = gauss_seidel_method(A, b, 1.0e-15)\n", "x = successive_overrelaxation_method(A, b, 0.7, 1.0e-15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.5:**" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "def conjugate_gradient_method(A, b, error_tolerance):\n", " \"\"\"\n", " Solves system of linear equations using conjugate gradient method.\n", " Args:\n", " A (array_like): A n-by-n real, symmetric, and positive-definite matrix\n", " b (array_like): RHS vector of size n\n", " error_tolerance (float): Error tolerance\n", " Returns:\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " n, n = A.shape\n", " x = np.zeros(n)\n", " r = b - A @ x\n", " p = r\n", " while True:\n", " alpha = (r.T @ r) / (p.T @ A @ p) \n", " x = x + alpha * p\n", " r_new = r - alpha * A @ p \n", " if linalg.norm(r_new) < error_tolerance:\n", " break \n", " beta = (r_new.T @ r_new) / (r.T @ r)\n", " p = r_new + beta * p \n", " r = r_new\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 04.6:**" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def power_iteration(A, max_it):\n", " \"\"\"\n", " Finds the greatest (in absolute value) eigen value of given matrix and its corresponding eigenvector.\n", " Args:\n", " A (array_like): A n-by-n diagonalizable matrix\n", " max_it (int): Maximum number of iterations\n", " Returns:\n", " numpy.ndarray: Eigenvector corresponding to a greatest eigenvalue (in absolute value)\n", " float: Greatest eigenvalue (in absolute value)\n", " \"\"\"\n", " n, n = A.shape\n", " e_vec = np.random.rand(n)\n", " for i in range(max_it):\n", " e_vec_new = A @ e_vec\n", " e_vec = e_vec_new / linalg.norm(e_vec_new)\n", " e_val = linalg.norm(A @ e_vec)\n", " return e_vec, e_val" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.1:**" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def linear_interpolation(x_p, y_p, x):\n", " \"\"\"\n", " Calculates the linear interpolation.\n", " Args:\n", " x_p (array_like): X-coordinates of a set of datapoints\n", " y_p (array_like): Y-coordinates of a set of datapoints\n", " x (array_like): An array on which the interpolation is calculated\n", " Returns:\n", " numpy.ndarray: The linear interpolation\n", " \"\"\" \n", " sort = np.argsort(x_p)\n", " x_p = x_p[sort]\n", " y_p = y_p[sort]\n", " interp = np.zeros(x.size)\n", " for i in range(x_p.size - 1):\n", " interp += (y_p[i] + (y_p[i + 1] - y_p[i]) / (x_p[i + 1] - x_p[i]) * \n", " (x - x_p[i])) * (x >= x_p[i]) * (x <= x_p[i + 1])\n", " return interp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.2:**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a set of 8 uniformly spaced points from [-pi, pi]\n", "x_p = np.linspace(-np.pi, np.pi, 8)\n", "y_p = np.sin(x_p)\n", "\n", "# initialize an array on which the interpolation is evaluated\n", "x = np.linspace(np.min(x_p), np.max(x_p), 1000)\n", "\n", "# calculate the piece-wise linear interpolation\n", "f = linear_interpolation(x_p, y_p, x)\n", "\n", "# plot the results\n", "fig, ax = plt.subplots(1, 2, figsize=(9, 3))\n", "ax[0].scatter(x_p, y_p)\n", "ax[0].plot(x, f, color=\"blue\")\n", "ax[0].plot(x, np.sin(x), color=\"red\", linestyle=\"--\")\n", "ax[1].plot(x, np.abs(f - np.sin(x)))\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.3:**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def lagrange_interpolation(x, y):\n", " \"\"\"\n", " Calculates a Lagrange interpolating polynomial.\n", " Args:\n", " x (array_like): X-coordinates of a set of datapoints\n", " y (array_like): Y-coordinates of a set of datapoints\n", " Returns:\n", " numpy.poly1d: The Lagrange interpolating polynomial\n", " \"\"\"\n", " n = x.size\n", " L = np.poly1d(0)\n", " for i in range(n):\n", " F = np.poly1d(1)\n", " for j in range(n):\n", " if j != i:\n", " F *= np.poly1d([1., -x[j]]) / (x[i] - x[j])\n", " L += y[i] * F\n", " return L" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.4:**" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a set of 8 uniformly spaced points from [-pi, pi]\n", "x_p = np.linspace(-np.pi, np.pi, 8)\n", "y_p = np.sin(x_p)\n", "\n", "# initialize an array on which the interpolation is evaluated\n", "x = np.linspace(np.min(x_p), np.max(x_p), 1000)\n", "\n", "# calculate the Lagnrange interpolating polynomial\n", "f = lagrange_interpolation(x_p, y_p)\n", "\n", "# plot the results\n", "fig, ax = plt.subplots(1, 2, figsize=(9, 3))\n", "ax[0].scatter(x_p, y_p)\n", "ax[0].plot(x, f(x), color=\"blue\")\n", "ax[0].plot(x, np.sin(x), color=\"red\", linestyle=\"--\")\n", "ax[1].plot(x, np.abs(f(x) - np.sin(x)))\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.5:**" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def neville_algorithm(x, y):\n", " \"\"\"\n", " Calculates a Lagrange interpolating polynomial using Neville's algorithm.\n", " Args:\n", " x (array_like): X-coordinates of a set of datapoints\n", " y (array_like): Y-coordinates of a set of datapoints\n", " Returns:\n", " numpy.poly1d: The Lagrange interpolating polynomial\n", " \"\"\"\n", " n = x.size # get the size of data\n", " L = [[0 for _ in range(n)] for _ in range(n)] # initialize empty list of polynomials\n", " for i in range(n): \n", " L[i][i] = np.poly1d(y[i])\n", " k = 1\n", " while k < n:\n", " for i in range(n - k):\n", " j = i + k\n", " L[i][j] = (np.poly1d([1., -x[j]]) * L[i][j-1] \n", " - np.poly1d([1., -x[i]]) * L[i+1][j]) / (x[i] - x[j]) \n", " k = k + 1\n", " return L[0][n-1] # return Lagrange polynomial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.6:**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# define the Runge's function\n", "def runge_function(x):\n", " return 1.0 / (1.0 + 25.0 * x**2)\n", "\n", "# consider a set of points in which the function is evaluated\n", "x_p = np.linspace(-1.0, 1.0, 12)\n", "y_p = runge_function(x_p)\n", "\n", "# initialize an array on which the interpolation is evaluated\n", "x = np.linspace(np.min(x_p), np.max(x_p), 1000)\n", "\n", "# find Lagrange interpolating polynomial\n", "f = neville_algorithm(x_p, y_p)\n", "\n", "# plot results\n", "fig, ax = plt.subplots(1, 2, figsize=(9, 3))\n", "ax[0].scatter(x_p, y_p)\n", "ax[0].plot(x, f(x), color=\"blue\")\n", "ax[0].plot(x, runge_function(x), color=\"red\", linestyle=\"--\")\n", "ax[1].plot(x, np.abs(f(x) - runge_function(x)))\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.7:**" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "def chebyshev_polynomial(n):\n", " \"\"\"\n", " Calculates a Chebyshev polynomial of degree n using recursive formula.\n", " Args:\n", " n (int): Degree of the polynomial\n", " Returns:\n", " numpy.poly1d: The Chebyshev polynomial of degree n\n", " \"\"\"\n", " T = [0 for i in range(n + 1)]\n", " for i in range(n + 1):\n", " if i == 0:\n", " T[i] = np.poly1d(1)\n", " elif i == 1:\n", " T[i] = np.poly1d([1, 0])\n", " else:\n", " T[i] = 2.0 * np.poly1d([1, 0]) * T[i-1] - T[i-2]\n", " return T[n]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.8:**" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.linspace(-1.0, 1.0, 1000)\n", "\n", "# plot Chebyshev polynomials\n", "fig, ax = plt.subplots()\n", "for i in range(5):\n", " T = chebyshev_polynomial(i)\n", " ax.plot(x, T(x), label=r\"$ T_{} \\ (x) $\".format(i))\n", "ax.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.9:**" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def chebyshev_roots(n):\n", " \"\"\"\n", " Calculates roots of a Chebyshev polynomial of degree n.\n", " Args:\n", " n (int): Degree of the polynomial\n", " Returns:\n", " numpy.ndarray: Roots of a Chebyshev polynomial of degree n\n", " \"\"\"\n", " roots = np.zeros(n)\n", " for k in range(n):\n", " roots[k] = -np.cos(np.pi * (k + 0.5) / n)\n", " return roots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.10:**" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# define the Runge's function\n", "def runge_function(x):\n", " return 1.0 / (1.0 + 25.0 * x**2)\n", "\n", "# evaluate the Runge's function at roots of the 12-th degree Chebyshev polynomial\n", "x_p = chebyshev_roots(12)\n", "y_p = runge_function(x_p)\n", "\n", "# initialize an array on which the interpolation is calculated\n", "x = np.linspace(-1.0, 1.0, 1000)\n", "\n", "# calculate the Lagrange interpolating polynomial\n", "f = neville_algorithm(x_p, y_p)\n", " \n", "# plot the results\n", "fig, ax = plt.subplots(1, 2, figsize=(9, 3))\n", "ax[0].scatter(x_p, y_p)\n", "ax[0].plot(x, f(x), color=\"blue\")\n", "ax[0].plot(x, runge_function(x), color=\"red\", linestyle=\"--\")\n", "ax[1].plot(x, np.abs(f(x) - runge_function(x)))\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.11:**" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "def polynomial_least_squares(x, y, n):\n", " \"\"\"\n", " Calculates the n-th degree polynomial least squares approximation.\n", " Args:\n", " x (array_like): X-coordinates of a set of datapoints\n", " y (array_like): Y-coordinates of a set of datapoints\n", " n (int): degree of the approximating polynomial\n", " Returns:\n", " numpy.poly1d: The n-th degree polynomial least squares approximation\n", " \"\"\"\n", " A = np.zeros((n + 1, n + 1))\n", " b = np.zeros(n + 1)\n", " for i in range(n + 1):\n", " b[i] = np.sum(y * x**i)\n", " for j in range(n + 1):\n", " A[i, j] = np.sum(x**(i + j))\n", " beta = linalg.solve(A, b)\n", " return np.poly1d(beta[::-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.12:**" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# consider data with Gaussian noise\n", "x_p = np.random.rand(100)\n", "y_p = x_p + 0.1 * np.random.normal(size=100)\n", "\n", "# initialize an array on which the interpolation is evaluated\n", "x = np.linspace(np.min(x_p), np.max(x_p), 100)\n", "\n", "# find least squares interpolation\n", "f = polynomial_least_squares(x_p, y_p, 1)\n", "\n", "# plot results\n", "fig, ax = plt.subplots()\n", "ax.scatter(x_p, y_p) # plot the discrete data\n", "ax.plot(x, f(x), color=\"red\") # plot least squares interpolation " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 05.13:**" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# consider data with Gaussian noise\n", "x_p = np.random.rand(100)\n", "y_p = x_p**2 + 0.1 * np.random.normal(size=100)\n", "\n", "# initialize an array on which the interpolation is evaluated\n", "x = np.linspace(np.min(x_p), np.max(x_p), 100)\n", "\n", "# calculate the quadratic least squares interpolation\n", "f = polynomial_least_squares(x_p, y_p, 2)\n", "\n", "# plot the result\n", "fig, ax = plt.subplots()\n", "ax.scatter(x_p, y_p) # plot the discrete data\n", "ax.plot(x, f(x), color=\"red\") # plot least squares interpolation " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.1:**" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "def bubble_sort(array):\n", " \"\"\"\n", " Sorts the input data using bubble sort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " tmp = np.copy(array)\n", " for i in range(tmp.size):\n", " for j in range(tmp.size - i - 1):\n", " if tmp[j] > tmp[j + 1]:\n", " tmp[j], tmp[j + 1] = tmp[j + 1], tmp[j]\n", " return tmp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.2:**" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "def selection_sort(array):\n", " \"\"\"\n", " Sorts the input data using selection sort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " tmp = np.copy(array)\n", " for i in range(tmp.size):\n", " index_of_min = i\n", " for j in range(i, tmp.size):\n", " if tmp[j] < tmp[index_of_min]:\n", " index_of_min = j\n", " #index_of_min = i + np.argmin(tmp[i:])\n", " if index_of_min != i:\n", " tmp[i], tmp[index_of_min] = tmp[index_of_min], tmp[i] \n", " return tmp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.3:**" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "def insertion_sort(array):\n", " \"\"\"\n", " Sorts the input data using inserion sort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " tmp = np.copy(array)\n", " for i in range(1, tmp.size):\n", " j = i\n", " val = tmp[i]\n", " while j > 0 and tmp[j - 1] > val:\n", " tmp[j] = tmp[j - 1]\n", " j = j - 1\n", " tmp[j] = val\n", " return tmp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.4:**" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "def shell_sort(array):\n", " \"\"\"\n", " Sorts the input data using shell sort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " tmp = np.copy(array)\n", " gap = int(tmp.size / 2)\n", " while gap > 0:\n", " for i in range(gap, tmp.size):\n", " val = tmp[i]\n", " j = i\n", " while j >= gap and tmp[j - gap] > val:\n", " tmp[j] = tmp[j - gap]\n", " j = j - gap\n", " tmp[j] = val\n", " gap = int(gap / 2)\n", " return tmp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.5:**" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "def quick_sort(array):\n", " \"\"\"\n", " Sorts the input data using quicksort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " less = np.array([])\n", " equal = np.array([])\n", " greater = np.array([])\n", " if array.size > 1:\n", " pivot = array[0]\n", " for x in array:\n", " if x < pivot: less = np.append(less, x)\n", " if x == pivot: equal = np.append(equal, x)\n", " if x > pivot: greater = np.append(greater, x)\n", " return np.concatenate((quick_sort(less), equal, quick_sort(greater)))\n", " else:\n", " return array" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.6:**" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "def heap_sort(array):\n", " \"\"\"\n", " Sorts the input data using heap sort algorithm.\n", " Args:\n", " array (array_like): input data\n", " Returns:\n", " numpy.ndarray: sorted data\n", " \"\"\"\n", " def heapify(array, size, parent_index): \n", " index_of_largest = parent_index\n", " left_child_index = 2 * parent_index + 1 \n", " right_child_index = 2 * parent_index + 2\n", " if left_child_index < size and array[left_child_index] > array[index_of_largest]: \n", " index_of_largest = left_child_index \n", " if right_child_index < size and array[right_child_index] > array[index_of_largest]: \n", " index_of_largest = right_child_index\n", " if index_of_largest != parent_index: \n", " array[index_of_largest], array[parent_index] = array[parent_index], array[index_of_largest]\n", " heapify(array, size, index_of_largest) \n", " tmp = np.copy(array)\n", " for i in reversed(range(int(tmp.size / 2))): \n", " heapify(tmp, tmp.size, i) \n", " for i in reversed(range(1, tmp.size)): \n", " tmp[i], tmp[0] = tmp[0], tmp[i]\n", " heapify(tmp, i, 0) \n", " return tmp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 06.7:**" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bubble sort:\n", "29 µs ± 776 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n", "selection sort:\n", "29.2 µs ± 998 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n", "insertion sort:\n", "13.2 µs ± 374 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n", "shell sort:\n", "20.7 µs ± 1.8 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n", "quicksort:\n", "342 µs ± 6.12 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "heapsort:\n", "44 µs ± 1.23 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n", "bubble sort:\n", "3.43 ms ± 112 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "selection sort:\n", "1.89 ms ± 45.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "insertion sort:\n", "1.36 ms ± 40.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "shell sort:\n", "493 µs ± 10 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "quicksort:\n", "5.54 ms ± 60.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "heapsort:\n", "901 µs ± 18.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "bubble sort:\n", "339 ms ± 11.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", "selection sort:\n", "183 ms ± 2.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", "insertion sort:\n", "155 ms ± 6.42 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", "shell sort:\n", "8.59 ms ± 439 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "quicksort:\n", "92.8 ms ± 3.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", "heapsort:\n", "15 ms ± 700 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sizes = [10**i for i in range(1, 4)]\n", "\n", "bubblesort_times = []\n", "selectionsort_times = []\n", "insertionsort_times = []\n", "shellsort_times = []\n", "quicksort_times = []\n", "heapsort_times = []\n", "for i in sizes:\n", " random_array = np.random.rand(i)\n", " print(\"bubble sort:\")\n", " time = %timeit -o bubble_sort(random_array)\n", " bubblesort_times.append(time.average)\n", " print(\"selection sort:\")\n", " time = %timeit -o selection_sort(random_array)\n", " selectionsort_times.append(time.average)\n", " print(\"insertion sort:\")\n", " time = %timeit -o insertion_sort(random_array)\n", " insertionsort_times.append(time.average)\n", " print(\"shell sort:\")\n", " time = %timeit -o shell_sort(random_array)\n", " shellsort_times.append(time.average)\n", " print(\"quicksort:\")\n", " time = %timeit -o quick_sort(random_array)\n", " quicksort_times.append(time.average)\n", " print(\"heapsort:\")\n", " time = %timeit -o heap_sort(random_array)\n", " heapsort_times.append(time.average)\n", "\n", "fig, ax = plt.subplots()\n", "ax.loglog(sizes, bubblesort_times, label=\"Bubble sort\", marker=\"o\")\n", "ax.loglog(sizes, selectionsort_times, label=\"Selection sort\", marker=\"o\")\n", "ax.loglog(sizes, insertionsort_times, label=\"Insertion sort\", marker=\"o\")\n", "ax.loglog(sizes, shellsort_times, label=\"Shell sort\", marker=\"o\")\n", "ax.loglog(sizes, quicksort_times, label=\"Quick sort\", marker=\"o\")\n", "ax.loglog(sizes, heapsort_times, label=\"Heap sort\", marker=\"o\")\n", "ax.set_xlabel('array size')\n", "ax.set_ylabel('time [s]')\n", "ax.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.1:**" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "def bisection(f, a, b, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the root of a continuous function using bisection method.\n", " Args:\n", " f (function): Continuous function defined on an interval [a, b], where f(a) and f(b) have opposite signs\n", " a (float): Leftmost point of the interval\n", " b (float): Rightmost point of the interval\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: The root of function f\n", " Raises:\n", " RuntimeError: Raises an exception when the root is not found\n", " \"\"\"\n", " k = 0\n", " while k < max_iterations:\n", " c = (a + b) / 2.0\n", " if f(a) * f(c) > 0:\n", " a = c\n", " else:\n", " b = c\n", " k = k + 1\n", " if np.abs(b - a) < error_tolerance:\n", " print(\"root found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return (a + b) / 2.0\n", " raise RuntimeError(\"no root found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.2:**" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "root found within tolerance 1e-15 using 53 iterations\n", "1.4655712318767677\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return x**3 - x**2 - 1.0\n", "\n", "x = np.linspace(-3.0, 3.0, 1000)\n", "root = bisection(f, np.min(x), np.max(x))\n", "print(root)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "ax.scatter(root, f(root))\n", "ax.axhline(0.0, color=\"black\", linestyle=\"--\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.3:**" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "def secant_method(f, x_0, x_1, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the root of a continuous function using secant method.\n", " Args:\n", " f (function): Continuous function\n", " x_0 (float): First initial guess\n", " x_1 (float): Second initial guess\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: The root of function f\n", " Raises:\n", " RuntimeError: Raises an exception when the root is not found\n", " \"\"\"\n", " k = 0\n", " while k < max_iterations:\n", " x = (f(x_1) * x_0 - f(x_0) * x_1) / (f(x_1) - f(x_0))\n", " x_0 = x_1\n", " x_1 = x\n", " k = k + 1\n", " if np.abs(x_1 - x_0) < error_tolerance:\n", " #print(\"root found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return x\n", " raise RuntimeError(\"no root found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.4:**" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.3247179572447458\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return x**3 - x - 1.0\n", "\n", "x = np.linspace(0.0, 2.0, 1000)\n", "root = secant_method(f, np.min(x), np.max(x))\n", "print(root)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "ax.scatter(root, f(root))\n", "ax.axhline(0.0, color=\"black\", linestyle=\"--\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.5:**" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "def false_position_method(f, x_0, x_1, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the root of a continuous function using false position method.\n", " Args:\n", " f (function): Continuous function defined on an interval [x_0, x_1], where f(x_0) and f(x_1) have opposite signs\n", " x_0 (float): Leftmost point of the interval\n", " x_1 (float): Rightmost point of the interval\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: The root of function f\n", " Raises:\n", " RuntimeError: Raises an exception when the root is not found\n", " \"\"\"\n", " k = 0\n", " while k < max_iterations:\n", " x = (f(x_1) * x_0 - f(x_0) * x_1) / (f(x_1) - f(x_0))\n", " if f(x_0) * f(x) > 0:\n", " x_0 = x\n", " else:\n", " x_1 = x\n", " k = k + 1\n", " if np.abs(f(x)) < error_tolerance:\n", " #print(\"root found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return x\n", " raise RuntimeError(\"no root found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.6:**" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "def newton_raphson(f, x_0, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the solution of one nonlinear eqution using Newton-Raphson method.\n", " Args:\n", " f (function): Function whose derivative is continuous and nonzero in the neighborhood of a root\n", " x_0 (float): Initial guess\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: The solution of a given equation\n", " Raises:\n", " RuntimeError: Raises an exception when the solution is not found\n", " \"\"\"\n", " def df_dx(f, x, h=1.0e-7):\n", " return (f(x + h) - f(x)) / h\n", " k = 0\n", " while k < max_iterations:\n", " x = x_0 - f(x_0) / df_dx(f, x_0)\n", " k = k + 1\n", " if np.abs(f(x)) < error_tolerance:\n", " #print(\"root found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return x\n", " x_0 = x\n", " raise RuntimeError(\"no root found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.7:**" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8654740331016145\n" ] } ], "source": [ "def f(x):\n", " return x**3 - np.cos(x)\n", "\n", "root = newton_raphson(f, 0.0)\n", "print(root)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.8:**" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "complex division by zero\n" ] } ], "source": [ "def f(x):\n", " return x**(1/3) + 2.0\n", "try:\n", " root = newton_raphson(f, 0.0)\n", "except Exception as e:\n", " print(e)\n", "else:\n", " print(root)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.9:**" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "def newton_raphson_2d(f_0, f_1, x_0, y_0, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the solution of a sytem of two equations using Newton-Raphson method.\n", " Args:\n", " f_1 (function): Function whose derivative is continuous and nonzero in the neighborhood of a root\n", " f_2 (function): Function whose derivative is continuous and nonzero in the neighborhood of a root\n", " x_0 (float): Initial guess\n", " y_0 (float): Initial guess\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " list: The vector of solution of a given sytem of equations\n", " Raises:\n", " RuntimeError: Raises an exception when the solution is not found\n", " \"\"\"\n", " def df_dx(f, x, y, h=1.0e-7):\n", " return (f(x + h, y) - f(x, y)) / h\n", " def df_dy(f, x, y, h=1.0e-7):\n", " return (f(x, y + h) - f(x, y)) / h\n", " k = 0\n", " J = np.zeros((2, 2))\n", " b = np.zeros(2)\n", " while k < max_iterations:\n", " J[0][0] = df_dx(f_0, x_0, y_0)\n", " J[0][1] = df_dy(f_0, x_0, y_0)\n", " J[1][0] = df_dx(f_1, x_0, y_0)\n", " J[1][1] = df_dy(f_1, x_0, y_0)\n", " b[0] = -f_0(x_0, y_0)\n", " b[1] = -f_1(x_0, y_0)\n", " delta = linalg.solve(J, b)\n", " x = x_0 + delta[0]\n", " y = y_0 + delta[1]\n", " k = k + 1\n", " if np.max([np.abs(f_0(x, y)), np.abs(f_1(x, y))]) < error_tolerance:\n", " #print(\"root found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return [x, y]\n", " x_0 = x\n", " y_0 = y\n", " raise RuntimeError(\"no root found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 07.10:**" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.6371078452969544, 0.7188187186922144]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f_0(x, y):\n", " return x**2 + 4.0 * x - y**2 - 2.0 * y - 1.0\n", "\n", "def f_1(x, y):\n", " return x**2 + 5*y - 4.0\n", "\n", "root = newton_raphson_2d(f_0, f_1, 0.0, 0.0)\n", "print(root)\n", "\n", "x = np.linspace(-2.0, 2.0, 100)\n", "y = np.linspace(-2.0, 2.0, 100)\n", "X, Y = np.meshgrid(x, y)\n", "\n", "fig, ax = plt.subplots()\n", "ax.scatter(root[0], root[1], 500, marker=\"+\", color=\"red\")\n", "a = ax.contour(X, Y, f_0(X, Y), colors=\"black\", linestyles=\"-\")\n", "b = ax.contour(X, Y, f_1(X, Y), colors=\"black\", linestyles=\"-\")\n", "ax.clabel(a)\n", "ax.clabel(b)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.1:**" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "def golden_section_search(f, a, b, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the minimum of function using golden section search.\n", " Args:\n", " f (function): A strictly unimodal function on [a, b]\n", " a (float): Left endpoint of the interval\n", " b (float): Right endpoint of the interval\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: A coordinate of minimum\n", " Raises:\n", " RuntimeError: Raises an exception when the minimum is not found\n", " \"\"\"\n", " gr = (np.sqrt(5.0) + 1.0) / 2.0\n", " k = 0\n", " c = a + (b - a) / gr \n", " d = b - (b - a) / gr\n", " while k <= max_iterations:\n", " if f(c) < f(d):\n", " a = d\n", " d = c\n", " c = a + (b - a) / gr \n", " else:\n", " b = c \n", " c = d\n", " d = b - (b - a) / gr\n", " k = k + 1\n", " if np.abs(b - a) < error_tolerance:\n", " print(\"minimum found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return (a + b) / 2.0\n", " raise RuntimeError(\"minimum not found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.2:**" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "minimum found within tolerance 1e-07 using 39 iterations\n", "2.215301416536189\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return 3.0 * np.sin(x + 2) + x**2 - 3.0 * x + 5.0\n", "\n", "x = np.linspace(-5.0, 5.0, 1000)\n", "\n", "x_min = golden_section_search(f, np.min(x), np.max(x), 1.0e-7)\n", "print(x_min)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "ax.scatter(x_min, f(x_min))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.3:**" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "def parabolic_interpolation_search(f, a, b, c, error_tolerance=1.0e-15, max_iterations=500):\n", " \"\"\"\n", " Finds the minimum of function using parabolic interpolation search.\n", " Args:\n", " f (function): A strictly unimodal function on [a, b]\n", " a (float): Left endpoint of the interval\n", " b (float): Point inside the interval\n", " c (float): Right endpoint of the interval\n", " error_tolerance (float): Error tolerance\n", " max_iterations (int): Maximum number of iterations\n", " Returns:\n", " float: A coordinate of minimum\n", " Raises:\n", " RuntimeError: Raises an exception when the minimum is not found\n", " \"\"\"\n", " k = 0\n", " while k <= max_iterations:\n", " x_min = b - 0.5 * ((b - a)**2 * (f(b) - f(c)) - (b - c)**2 * (f(b) - f(a))) / ((b - a)\n", " * (f(b) - f(c)) - (b - c) * (f(b) - f(a)))\n", " if x_min < b:\n", " if f(x_min) < f(b):\n", " c = b\n", " b = x_min\n", " else:\n", " a = x_min\n", " else:\n", " if f(x_min) < f(b):\n", " a = b\n", " b = x_min\n", " else:\n", " c = x_min\n", " k = k + 1\n", " if np.abs(c - a) < error_tolerance:\n", " #print(\"minimum found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return b\n", " raise RuntimeError(\"minimum not found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.4:**" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.211659172323886\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return np.log(1.0 + np.abs(x - 1)**2) - np.arctan(x)\n", "\n", "x = np.linspace(-5.0, 5.0, 1000)\n", "\n", "x_min = parabolic_interpolation_search(f, np.min(x), (np.min(x) + np.max(x)) / 2.0, np.max(x), 1.0e-7)\n", "print(x_min)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "ax.scatter(x_min, f(x_min))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.5:**" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "def steepest_descent(f, x_0, step, error_tolerance=1.0e-15, max_iterations=1e5):\n", " \"\"\"\n", " Finds the minimum of function using the method of steepest descent.\n", " Args:\n", " f (function): A strictly unimodal and differentiable function in a neighborhood of a point x_0\n", " x_0 (float): Initial guess\n", " step (float): Step size multiplier\n", " error_tolerance (float): Error tolerance\n", " n_max (int): Maximum number of iterations\n", " Returns:\n", " float: A coordinate of minimum\n", " Raises:\n", " RuntimeError: Raises an exception when the minimum is not found\n", " \"\"\"\n", " def grad(f, x, h=1.0e-8):\n", " return (f(x + h) - f(x)) / h\n", " k = 0\n", " while k < max_iterations:\n", " x_1 = x_0 - step * grad(f, x_0)\n", " k = k + 1\n", " if np.abs(x_1 - x_0) < error_tolerance:\n", " #print(\"minimum found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return x_1\n", " x_0 = x_1\n", " raise RuntimeError(\"minimum not found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.6:**" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.1952907012523994\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return -x**3 * np.exp(-(x + 1)**2) + 10 * x * np.tanh(x - 2)\n", "\n", "x = np.linspace(-5, 5, 1000)\n", "\n", "x_min = steepest_descent(f, 0.0, 1.0e-3, 1.0e-7)\n", "print(x_min)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "ax.scatter(x_min, f(x_min))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.7:**" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "def steepest_descent_nd(f, x_0, step, error_tolerance=1.0e-15, max_iterations=1e5):\n", " \"\"\"\n", " Finds the minimum of function using the method of steepest descent.\n", " Args:\n", " f (function): A strictly unimodal and differentiable function in a neighborhood of a point x_0\n", " x_0 (float): Initial guess\n", " step (float): Step size multiplier\n", " error_tolerance (float): Error tolerance\n", " n_max (int): Maximum number of iterations\n", " Returns:\n", " float: A coordinate of minimum\n", " Raises:\n", " RuntimeError: Raises an exception when the minimum is not found\n", " \"\"\"\n", " def grad(f, x, h=1.0e-8):\n", " return np.array([(f(x + h * np.identity(x.size)[j]) - f(x)) / h for j in range(x.size)])\n", " k = 0\n", " while k < max_iterations:\n", " x_1 = x_0 - step * grad(f, x_0)\n", " k = k + 1\n", " if linalg.norm(x_1 - x_0) < error_tolerance:\n", " print(\"minimum found within tolerance\", error_tolerance, \"using\", k, \"iterations\")\n", " return x_1\n", " x_0 = x_1\n", " raise RuntimeError(\"minimum not found within tolerance\", error_tolerance, \"using\", max_iterations, \"iterations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 08.8:**" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "minimum found within tolerance 1e-07 using 19777 iterations\n", "[0.99988525 0.99977007]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x): \n", " return (1.0 - x[0])**2.0 + 100.0 * (x[1] - x[0]**2.0)**2.0\n", "\n", "x = np.meshgrid(np.linspace(0.0, 2.0, 100), np.linspace(0.0, 2.0, 100))\n", "\n", "x_min = steepest_descent_nd(f, np.array([0.0, 0.0]), 1.0e-3, 1.0e-7)\n", "print(x_min)\n", "\n", "fig, ax = plt.subplots()\n", "ax.pcolormesh(x[0], x[1], f(x), norm=mpl.colors.LogNorm(), shading=\"gouraud\", zorder=0)\n", "ax.contour(x[0], x[1], f(x), norm=mpl.colors.LogNorm(), colors=\"black\", linestyles=\"-\", zorder=1)\n", "ax.scatter(x_min[0], x_min[1], color=\"white\", marker=\"+\", s=500, zorder=2)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.1:**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def midpoint_rule(f, a, b, N=100):\n", " \"\"\"\n", " Calculates definite integral of 1D function using rectangular rule.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " N (int): Number of subdivisions of the interval [a, b]\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x, h = np.linspace(a, b, N, retstep=True)\n", " I = 0.0\n", " for i in range(N - 1):\n", " I += h * f((x[i] + x[i+1]) / 2.0)\n", " return I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.2:**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.142621456557612 0.0010288029678187094\n", "False\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return 4.0 / (1.0 + x**2)\n", "\n", "a = 0.0\n", "b = 1.0\n", "N = 10\n", "\n", "I = midpoint_rule(f, a, b, N)\n", "error = np.abs(np.pi - I)\n", "print(I, error)\n", "\n", "if error < 1.0e-5:\n", " print(True)\n", "else:\n", " print(False)\n", "\n", "x = np.linspace(a, b, 1000)\n", "t = np.linspace(a, b, N + 1)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "for i in range(N):\n", " x_s = np.array([(t[i] + t[i+1]) / 2.0])\n", " y_s = f(x_s)\n", " l = interpolate.lagrange(x_s, y_s)\n", " xx = np.linspace(t[i], t[i+1], 10)\n", " ax.stackplot(xx, l(xx), color=\"blue\", alpha=0.2) \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.3:**" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def trapezoidal_rule(f, a, b, N=100):\n", " \"\"\"\n", " Calculates definite integral of 1D function using trapezoidal rule.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-most point of the interval\n", " b (float): Right-most point of the interval\n", " N (int): Number of subdivisions of the interval [a, b]\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x, h = np.linspace(a, b, N, retstep=True)\n", " I = 0.0\n", " for i in range(N - 1):\n", " I += h / 2.0 * (f(x[i]) + f(x[i+1]))\n", " return I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.4:**" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.6939176020058372 0.0007704214458919001\n", "False\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return 1.0 / x\n", "\n", "a = 1.0\n", "b = 2.0\n", "N = 10\n", "\n", "I = trapezoidal_rule(f, a, b, N)\n", "error = np.abs(np.log(2) - I)\n", "print(I, error)\n", "\n", "if error < 1.0e-5:\n", " print(True)\n", "else:\n", " print(False)\n", "\n", "x = np.linspace(a, b, 1000)\n", "t = np.linspace(a, b, N + 1)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "for i in range(N):\n", " x_s = np.array([t[i], t[i+1]])\n", " y_s = f(x_s)\n", " l = interpolate.lagrange(x_s, y_s)\n", " xx = np.linspace(t[i], t[i+1], 10)\n", " ax.stackplot(xx, l(xx), color=\"blue\", alpha=0.2) \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.5:**" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def simpsons_quadratic_rule(f, a, b, N=100):\n", " \"\"\"\n", " Calculates definite integral of 1D function using Simpson's 1/3 rule.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " N (int): Number of subdivisions of the interval [a, b]\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x, h = np.linspace(a, b, N, retstep=True)\n", " I = 0.0\n", " for i in range(N - 2):\n", " I += h * (1.0 / 6.0 * f(x[i]) + 2.0 / 3.0 * f((x[i] + x[i+1]) / 2.0) + 1.0 / 6.0 * f(x[i+1]))\n", " return I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.6:**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.47206995069497343 0.1286542723312752\n", "False\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return np.sin(np.pi * x**2 / 2.0)\n", "\n", "a = 0.0\n", "b = 2.0\n", "N = 10\n", "\n", "I = simpsons_quadratic_rule(f, a, b, N)\n", "error = np.abs(special.fresnel(2)[0] - I)\n", "print(I, error)\n", "\n", "if error < 1.0e-5:\n", " print(True)\n", "else:\n", " print(False)\n", "\n", "x = np.linspace(a, b, 1000)\n", "t = np.linspace(a, b, N + 1)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "for i in range(N):\n", " x_s = np.array([t[i], (t[i] + t[i+1]) / 2.0, t[i+1]])\n", " y_s = f(x_s)\n", " l = interpolate.lagrange(x_s, y_s)\n", " xx = np.linspace(t[i], t[i+1], 10)\n", " ax.stackplot(xx, l(xx), color=\"blue\", alpha=0.2) \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.7:**" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def simpsons_cubic_rule(f, a, b, n=100):\n", " \"\"\"\n", " Calculates definite integral of 1D function using Simpson's 3/8 rule.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " n (int): Number of subdivisions of the interval [a, b]\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x, h = np.linspace(a, b, n, retstep=True)\n", " I = 0\n", " for i in range(n-1):\n", " I += h * (1.0 / 8.0 * f(x[i]) + 3.0 / 8.0 * f((2.0 * x[i] + x[i+1]) / 3.0) \\\n", " + 3.0 / 8.0 * f((x[i] + 2.0 * x[i+1]) / 3.0) + 1.0 / 8.0 * f(x[i+1]))\n", " return I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.8:**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8427008319786382 3.902892342644293e-08\n", "True\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return 2.0 / np.sqrt(np.pi) * np.exp(-x**2)\n", "\n", "a = 0.0\n", "b = 1.0\n", "N = 10\n", "\n", "I = simpsons_cubic_rule(f, a, b, N)\n", "error = np.abs(special.erf(1) - I)\n", "print(I, error)\n", "\n", "if error < 1.0e-5:\n", " print(True)\n", "else:\n", " print(False)\n", " \n", "x = np.linspace(a, b, 1000)\n", "t = np.linspace(a, b, N + 1)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, f(x))\n", "for i in range(N):\n", " x_s = np.array([t[i], (2.0 * t[i] + t[i+1]) / 3.0, (t[i] + 2.0 * t[i+1]) / 3.0, t[i+1]])\n", " y_s = f(x_s)\n", " l = interpolate.lagrange(x_s, y_s)\n", " xx = np.linspace(t[i], t[i+1], 10)\n", " ax.stackplot(xx, l(xx), color=\"blue\", alpha=0.2) \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.9:**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def rombergs_method(f, a, b, m=10):\n", " \"\"\"\n", " Calculates definite integral of 1D function using Romberg's method.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " m (int): Number of extrapolations\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " R = np.zeros((m, m))\n", " R[0, 0] = trapezoidal_rule(f, a, b, 2)\n", " for k in range(1, m):\n", " R[k, 0] = trapezoidal_rule(f, a, b, 2**k + 1) \n", " for j in range(1, k + 1):\n", " R[k, j] = R[k, j-1] + 1.0 / (4.0**j - 1.0) * (R[k, j-1] - R[k-1, j-1]) \n", " return R[m-1, m-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.10:**" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def legendre_polynomial(n):\n", " \"\"\"\n", " Calculates a Legendre polynomial of degree n using recursive formula.\n", " Args:\n", " n (int): Degree of the polynomial\n", " Returns:\n", " numpy.poly1d: The Legendre polynomial of degree n\n", " \"\"\"\n", " P = [0 for i in range(n + 1)]\n", " for i in range(n + 1):\n", " if i == 0:\n", " P[i] = np.poly1d(1)\n", " elif i == 1:\n", " P[i] = np.poly1d([1, 0])\n", " else:\n", " P[i] = (2.0 * i - 1.0) / i * np.poly1d([1, 0]) * P[i-1] - (i - 1.0) / i * P[i-2]\n", " return P[n]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.11:**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.linspace(-1.0, 1.0, 1000)\n", "\n", "fig, ax = plt.subplots()\n", "for i in range(5):\n", " P = legendre_polynomial(i)\n", " ax.plot(x, P(x), label=r\"$ P_{} \\ (x) $\".format(i))\n", "ax.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.12:**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def gauss_legendre_quadrature(f, a, b, N=3):\n", " \"\"\"\n", " Calculates definite integral of 1D function using Gaussian quadrature rule.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " N (int): Degree of used polynomial\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x, w = np.polynomial.legendre.leggauss(N)\n", " I = 0.0\n", " for i in range(N):\n", " I += w[i] * f((b - a) / 2.0 * x[i] + (a + b) / 2.0)\n", " return (b - a) / 2.0 * I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.13:**" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def monte_carlo_integration(f, a, b, c, d, N=500):\n", " \"\"\"\n", " Calculates definite integral of 1D function using Monte Carlo method.\n", " Args:\n", " f (function): A function defined on interval [a, b]\n", " a (float): Left-hand side point of the interval\n", " b (float): Right-hand side point of the interval\n", " N (int): Number of random points generated\n", " Returns:\n", " float: Definite integral\n", " \"\"\"\n", " x = np.linspace(a, b, 1000)\n", " fig, ax = plt.subplots()\n", " ax.plot(x, f(x), color=\"black\")\n", " S = 0\n", " for i in range(N):\n", " x_p = np.random.uniform(a, b)\n", " y_p = np.random.uniform(c, d)\n", " if y_p <= f(x_p) and y_p >= 0.0:\n", " S = S + 1\n", " ax.scatter(x_p, y_p, marker=\"x\", color='blue')\n", " elif y_p >= f(x_p) and y_p <= 0.0:\n", " S = S - 1\n", " ax.scatter(x_p, y_p, marker=\"x\", color='red')\n", " else:\n", " ax.scatter(x_p, y_p, marker=\"x\", color='lightgray')\n", " return (S / N) * (b - a) * (d - c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 09.14:**" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.20106192982974677 0.20106192982974677\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return np.sin(x)\n", "\n", "I = monte_carlo_integration(f, 0.0, 4.0 * np.pi, -1.0, 1.0, 1000)\n", "error = np.abs(0.0 - I)\n", "print(I, error)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.1:**" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def forward_euler(f, x_0, x_n, y_0, n): # Runge-Kutta 1st order method\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " y[i+1] = y[i] + h * f(x[i], y[i])\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.2:**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAoxklEQVR4nO3dd3hUdd7+8feHQJASLA+x0EIogsFVSmgiLOAjRXQBARECFpSACor8ZBfFxgp2V0GRXBErRmNEQTAUBSnP0oMoghGMKNUC8ixE0WWB7++PGXxiTJnAJGdmcr+uK9fMnDmZuWcuuT055fs15xwiIhL+KngdQEREgkOFLiISIVToIiIRQoUuIhIhVOgiIhGioldvXLNmTVe/fn2v3l5EJCxt2LBhv3MutqDnPCv0+vXrk5WV5dXbi4iEJTPbUdhz2uUiIhIhVOgiIhFChS4iEiFU6CIiEUKFLiISIYotdDN7ycx+MLPNhTxvZjbVzHLMbJOZtQx+TL+0NKhfHypU8N2mpZXaW4mIhJtAttBfAXoU8XxPoLH/JxmYfuqxCpCWBsnJsGMHOOe7TU5WqYuI+BVb6M65FcCBIlbpDbzmfNYAZ5jZecEK+JsJE+DwYb4H7gD+DXD4sG+5iIgEZR96bWBXnse7/cv+wMySzSzLzLL27dtXsnfZuROAFcBU4CbA5VkuIlLeBaPQrYBlBc6a4ZxLdc4lOucSY2MLvHK1cPXqATAAmAykARPyLBcRKe+CUei7gbp5HtcB9gbhdX9v8mSoWhWAu/HtrH8ESOnaNehvJSISjoJR6HOB6/xnu7QDDjrnvg3C6/5eUhKkpkJcHGbGtHr16NW8Obe9+irz5s0L+tuJiIQbK25OUTN7E+gM1AS+Bx4AKgE451LMzIDn8J0Jcxi40TlX7KhbiYmJ7lQH5/r555/p3Lkzn3/+OUuXLqVNmzan9HoiIqHOzDY45xILfM6rSaKDUegA33//Pe3bt+enn35i9erVNGzYMAjpRERCU1GFHvZXip5zzjksWLCAY8eO0bNnT/bv3+91JBERT4R9oQM0adKEuXPnsnPnTv7yl7/wyy+/eB1JRKTMRUShA3To0IG0tDTWrFlDUlISx44d8zqSiEiZiphCB+jXrx9PP/00s2fP5vbbb8er4wMiIl7wbAq60nLHHXewZ88ennjiCc455xzuv/9+ryOJiJSJiCt0gMcee4x9+/bxwAMPEBsbyy233OJ1JBGRUheRhW5mvPDCC+zfv5/bbruNmjVrMmDAAK9jiYiUqojah55XxYoVeeutt+jQoQNJSUksXrzY60giIqUqYgsdoGrVqsydO5emTZvSt29fgnEhk4hIqIroQgc488wzWbhwITVr1qRnz55s27bN60giIqUi4gsdoFatWnzwwQeYGd26dWPPnj1eRxIRCbpyUegAjRs3ZuHChRw4cIDu3btz4EBRkzCJiISfclPoAC1btmTOnDl8+eWX9OrVi9zcXK8jiYgETbkqdICuXbuSnp7O+vXr6d27t8Z9EZGIUe4KHaBv37688sorLFu2jAEDBnDkyBGvI4mInLJyWegAQ4YMYfr06WRmZjJ06FAN5iUiYS+gK0XNrAcwBYgCZjjnHs33/JnAS0BD4FdgmHNuc5CzBt2IESPIzc1l3LhxVKtWjRkzZlChQrn9f5yIhLliC93MooBpwOX4JoReb2ZznXOf51ntHuAT51xfM2vqX/+y0ggcbHfddRe5ubn8/e9/p3r16kyZMgXfrHoiIuElkC30NkCOc247gJmlA72BvIWeADwC4Jz7wszqm9k5zrnvgx24NDz44IPk5uby9NNPExMTw+TJk72OJCJSYoEUem1gV57Hu4G2+db5FLga+KeZtQHigDr4JpUOeWbGU089xU8//cTDDz9MTEwM48eP9zqWiEiJBFLoBe1/yD9zxKPAFDP7BPgM2Agc/cMLmSUDyQD16tUrUdDSZmZMnz6dn3/+mbvvvpvq1aszatQor2OJiAQskELfDdTN87gOsDfvCs65Q8CNAObbAf21/4d866UCqQCJiYkhN51QVFQUr7zyCj///DOjR48mOjqa5ORkr2OJiAQkkFM61gONzSzezKKBa4G5eVcwszP8zwHcDKzwl3zYqVSpEm+99Ra9evVixIgRvPjii15HEhEJSLFb6M65o2Y2CliE77TFl5xzW8xspP/5FOAC4DUzO4bvYOlNpZi51FWuXJlZs2bRt29fhg8fTlRUFDfccIPXsUREihTQeejOufnA/HzLUvLcXw00Dm40b5122mm8++679O7dm2HDhlGxYkWGDBnidSwRkULpKpoiVKlShTlz5tClSxeuv/563nzzTa8jiYgUSoVejBOzHnXs2JEhQ4aQkZHhdSQRkQKp0ANQrVo1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Y8YMzj//fPr168eqVavw6noUCa5iC905dxQYhe/slWwgwzm3xcxGmtnI0g4oIsHTrFkzXnzxxd8OoC5dupQOHTrQtm1bXn/9dY3LHuYCOg/dOTffOXe+c66hc26yf1mKc+4PB0Gdczc452YFO6iIlEAhk2yccO655zJp0iR27drFtGnTyM3NZejQocTFxfHggw/y7bffehJbTo2uFBWJNAFMsnFCtWrVuPXWW9myZQuLFi0iMTGRiRMnEhcXx5AhQ1i3bp0HH0BOlsZyEYk09ev7Sjy/uDj45ptif/3LL79k2rRpvPTSS+Tm5tK2bVtuv/12+vfvT3R0dNDjSsloLBeR8qSEk2zk17hxY5555hn27NnDs88+y//+7/+SlJREXFwcEydOZO/e/Ce5SahQoYtEmpOcZCO/mJgYRo0aRXZ2NgsWLKBFixY8+OCD1KtXj/79+7N48WJdhRpiVOgikeYUJ9nIr0KFCvTo0YP58+fz5Zdfcuedd7Js2TIuv/xymjZtylNPPaWLlUKECl0k0gRxko38GjVqxBNPPMHu3buZOXMmsbGx3HXXXdSuXZvrr7+e1atX65x2D+mgqIickk2bNpGSksLMmTP56aefuPjiixk5ciRJSUnExMR4HS/i6KCoiJSaiy66iOeff569e/eSkuK7NOWWW26hVq1aJCcns27dOm21lxEVuogERUxMDCNGjGDjxo2sXr2afv368frrr9O2bVsuuuginnnmGfbv3+91zIimQheRoDIz2rVrxyuvvMK3335LSkoKVapU4c4776R27doMHDiQDz74QGfIlALtQxeRMrFp0yZefPFFXn/9dQ4cOEC9evW48cYbufHGG4mLi/M6XtjQPnQR8dxFF13ElClT2LNnD+np6TRp0oSJEycSHx9P9+7dycjI0CQcp0iFLiJl6rTTTvttt8vXX3/NfffdR3Z2NgMHDuTcc89lxIgRrFy5UgdST4J2uYiI544dO8aSJUuYOXMm7777LocPH6Zhw4YMHTqUoUOH0qBBA68jhgztchERbxQzjO8JUVFRdOvWjZkzZ/Ldd9/xyiuv/DZ2TMOGDenUqRMzZszg4MGDZRo/3GgLXURKx4lhfA8f/r9lVauW6KrVnTt3kpaWxquvvsrWrVupXLkyffr04brrrqNbt25UrFixlMKHrqK20AMqdDPrAUwBooAZzrlH8z3fG3gIOA4cBcY45/5Z1Guq0EUi3CkO45uXc47169fz2muv8eabb3LgwAHOPvtsBgwYwODBg2nfvj1mBc1nH3lOqdDNLArYBlyOb8Lo9cAg59znedapDvzsnHNmdhG+aeqaFvW6KnSRCFehgm+CjfzM4BTOQT9y5Ajz588nLS2N999/n19//ZW4uDiuvfZaBg0axEUXXRTR5X6q+9DbADnOue3OuSNAOtA77wrOuZ/c//2foRqgw9Mi5V2QhvHNLzo6mj59+vD222/z/fff89prr5GQkMCTTz5J8+bNadasGQ899BA5OTmn9D7hKJBCrw3syvN4t3/Z75hZXzP7AsgEhhX0QmaWbGZZZpa1b9++k8krIuEiyMP4FqRGjRoMHTqU+fPn89133zF9+nRiY2O5//77ady4Ma1bt+bpp58uN5NyBFLoBf3t8octcOfcbP9ulj749qf/8ZecS3XOJTrnEmNjY0sUVETCTCkO41uQmjVrMnLkSJYvX86uXbt48sknOX78OGPHjqVOnTp06dKF559/PqInwA5kH3p74EHnXHf/47sBnHOPFPE7XwOtnXOFjsSjfegiUha2bdtGeno66enpZGdnY2Zceuml9O/fn379+lG79h92OIS0Uz0oWhHfQdHLgD34DooOds5tybNOI+Ar/0HRlsA8oI4r4sVV6CJS1j7//HNmzZrFrFmz+OyzzwC45JJLfiv3eqe4f78sBOO0xSuAZ/CdtviSc26ymY0EcM6lmNnfgOuA/wC/AON02qKIhLKtW7fyzjvv8Pbbb/PJJ58A0LZt29/KPT4+3tuAhTjlQi8NKnQRCRU5OTm88847zJo1ixO91KpVK66++mr69OnDBRdcEDKnQqrQRUQC9PXXX/9W7mvXrgV8c6n26dOH3r170759e6KiojzLp7FcRKR8C3BMGYD4+Hjuuusu1qxZw549e5g+fTqNGjViypQpdOzYkfPOO4+bbrqJefPm8csvv5TZRwiEttBFJLIFYUwZgEOHDrFw4ULee+89MjMzOXjwIFWrVqVbt2706dOHK6+8kv/6r/8qhQ/we9rlIiLlVxDHlDnhyJEjrFixgjlz5vDee++xe/duKlSoQMeOHbnqqqvo1asXTZo0KZX97ip0ESm/SmlMmROcc3z88ce89957zJkz57fTIRs2bMiVV15Jr1696NSpE5UrVz7l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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = forward_euler(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.3:**" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def runge_kutta_2(f, x_0, x_n, y_0, n):\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " k_1 = f(x[i], y[i])\n", " #k_2 = f(x[i] + h / 2.0, y[i] + h / 2.0 * k_1) \n", " #y[i+1] = y[i] + h * k_2 # rectangular rule\n", " k_2 = f(x[i] + h, y[i] + h * k_1) \n", " y[i+1] = y[i] + h / 2.0 * (k_1 + k_2) # trapezoid rule (Heun's predictor-corrector method) \n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.4:**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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a5k5cya1atWib9++xMTE0KdPH7Zv3372B5FiR4UuUoKVKlWKjh078tlnn7F8+XLuuusuRo4cSXx8PMnJyfoANcSo0EUE4Mf96Vu3bqV3797MmDGDRo0a0apVK6ZPn86JE2c8KlmKARW6iPxEzZo1GT58ONu3b2fo0KFkZWXRuXNnatWqxYgRI9i3b5/XEeU0VOgiUqCLL76YPn36sHXrViZNmkR0dDTPPfccNWrU4PHHH2f9+vVeR5R8VOgickalS5fmnnvuYcGCBaxYsYL777+fMWPGULduXdq2bcuMGTO0O6aYUKGLSMAaNGjAmDFj2L59O0OGDGHDhg106tSJa665htdff127YzymQheRcxYVFcULL7zAV199xYQJE6hevTrPPvss0dHRpKSksHLlSt9AXca3SOnEIhEJiuXLl/P222+TlpbG4cOHaXzVVTy2fTu/OnqU8qcGRUb6zmJNTvYyakjTiUUiUugaNWrEBx98wI4dOxg5ciT7cnL49dGj1ACeBTaDLuNbyFToIhJUVapUoXfv3mw4fpzPgLbAW8C1QGtgUk6Orh1TSFToIlIoLDaW24EJ+GbIGQJkAfcBsbGxDBo0iBxdoz2oVOgiUjjyXMb3cuAFYGv58nz83HM0bNiQl156ifj4eBITE5k4cSJHjhzxNG44UKGLSOEo4DK+EaNGccewYXz88cdkZ2fz4osvsnHjRu6//35q1KjB008/zZo1a7xOHrJ0lIuIeOrEiROkp6czevRopkyZwrFjx7j55pt55JFH6Nq1K5UqVfI6YrGio1xEpNiKiIigXbt2TJgwgR07dvD6669z4MABevbsSfXq1enRoweLFi3S7EoB0Dt0ESl2nHMsW7aM0aNHM378eH744QeuueYaunfvzoMPPkhsbKzXET2jd+giElLMjMaNG5OamsrOnTsZM2YMl19+Ob/73e+Ii4ujVatW/O1vf2P//v1eRy1WAip0M2tvZpvMLMvMBhSwvrOZ/dvMVplZppndGvyoIlISVahQgR49ejB//ny2bNnCH//4R7Zt20aPHj2oVq0aDz74IHPnztUFwghgl4uZReA7yastkAtkAEnOufV5xlQADjjnnJnVwzeRdO0zPa52uYjI+XLO8cUXXzB27FgmTJjAvn37uOKKK3jwwQfp3r07devW9TpiobnQXS43A1nOua3OuaNAGtA5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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = runge_kutta_2(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.5:**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def runge_kutta_3(f, x_0, x_n, y_0, n):\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " k_1 = f(x[i], y[i])\n", " k_2 = f(x[i] + h / 2.0, y[i] + h / 2.0 * k_1)\n", " k_3 = f(x[i] + h, y[i] + h * (-k_1 + 2.0 * k_2))\n", " y[i+1] = y[i] + h * (k_1 / 6.0 + 2.0 * k_2 / 3.0 + k_3 / 6.0) # Simpson's 1/3 rule\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.6:**" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = runge_kutta_3(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.7:**" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def runge_kutta_4(f, x_0, x_n, y_0, n):\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " k_1 = f(x[i], y[i])\n", " k_2 = f(x[i] + h / 2.0, y[i] + h / 2.0 * k_1)\n", " k_3 = f(x[i] + h / 2.0, y[i] + h / 2.0 * k_2)\n", " k_4 = f(x[i] + h, y[i] + h * k_3)\n", " y[i+1] = y[i] + h / 6.0 * (k_1 + 2.0 * k_2 + 2.0 * k_3 + k_4)\n", " #k_2 = f(x[i] + h / 3.0, y[i] + h / 3.0 * k_1)\n", " #k_3 = f(x[i] + 2.0 * h / 3.0, y[i] + h * (-k_1 / 3.0 + k_2))\n", " #k_4 = f(x[i] + h, y[i] + h * (k_1 - k_2 + k_3))\n", " #y[i+1] = y[i] + h * (k_1 / 8.0 + 3.0 * k_2 / 8.0 + 3.0 * k_3 / 8.0 + k_4 / 8.0) # Simpson's 3/8 rule\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.8:**" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = runge_kutta_4(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.9:**" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def backward_euler(f, x_0, x_n, y_0, n): # implicit method\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " y[i+1] = optimize.fsolve(lambda z: z - y[i] - h * f(x[i+1], z), y[i])\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.10:**" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x, y):\n", " return -100.0 * y + 100.0\n", "\n", "y0 = 5.0\n", "\n", "x_1, y_1 = forward_euler(f, 0.0, 0.5, y0, 25)\n", "x_2, y_2 = backward_euler(f, 0.0, 0.5, y0, 25)\n", "\n", "x_exact = np.linspace(0.0, 0.5, 1000)\n", "y_exact = (y0 - 1.0) * np.exp(-100.0 * x_exact) + 1.0\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(x_exact, y_exact, color='black')\n", "ax.scatter(x_1, y_1, color='red')\n", "ax.scatter(x_2, y_2, color='blue')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.11:**" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def leap_frog(f, x_0, x_n, y_0, n): \n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " y[1] = y[0] + h * f(x[0], y[0]) \n", " for i in range(1, n-1):\n", " y[i+1] = y[i-1] + 2.0 * h * f(x[i], y[i])\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.12:**" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAog0lEQVR4nO3deXSTdd7+8fenFJHKNmBF1hYRRossYu1TeNyACoXBsowoUpVHwcoRfECPg0gHXBGUYdxA/RXxQZ0CImMBQRBlcwGUgmVHrIxggZGCggsq2/f3R6JTaqEppL2b9Hqdk5Pkm2+SKzlyeffOvZhzDhERCX0RXgcQEZHgUKGLiIQJFbqISJhQoYuIhAkVuohImIj06o3PPfdcFxsb69Xbi4iEpDVr1uxzzkUX9ZhnhR4bG0t2drZXby8iEpLMbMfJHtMqFxGRMKFCFxEJEyp0EZEwoUIXEQkTKnQRkTBRbKGb2ctmttfMNp7kcTOzZ80s18zWm1nb4Mf0y8yE2FiIiPBdZ2aW2luJiISaQJbQpwLJp3i8K9DMf0kDXjjzWEXIzIS0NNixA5zzXaelqdRFRPyKLXTn3PvAN6eY0gN41fmsAmqZWb1gBfxNejocOsTXwFDgMMChQ75xEREJyjr0BsBXBe7n+cd+x8zSzCzbzLLz8/NL9i47dwLwAfAsMABwBcZFRCq6YBS6FTFW5FkznHMZzrl451x8dHSRe66eXOPGAFwPPAb8AxhdYFxEpKILRqHnAY0K3G8I7A7C655ozBiIigJgJDAQX7G/lJQU9LcSEQlFwSj0ucCt/q1dEoGDzrk9QXjdE6WmQkYGxMRgZjzfuDHJrVoxaOpUFi5cGPS3ExEJNVbcOUXNbDpwDXAu8DXwIFAZwDn3opkZMBHfljCHgNucc8UedSs+Pt6d6cG5vv/+e6666ipyc3P54IMPaNOmzRm9nohIeWdma5xz8UU+5tVJooNR6AC7d+8mMTGRo0ePsmrVKhprnbqIhLFTFXrI7ylav3593n77bX788Ue6devGgQMHvI4kIuKJkC90gEsuuYSsrCy2bdvGn//8Zw4fPux1JBGRMhcWhQ7QsWNHpkyZwpIlS7jjjjvwalWSiIhXPDtjUWm45ZZb2LFjB6NGjaJ+/fqMHTvW60giImUmrAodID09nd27dzNu3Djq1q3LsGHDvI4kIlImwq7QzYznnnuOvXv3cs899xAdHU1qaqrXsURESl3YFTpApUqV+Mc//sH+/fv5n//5H6Kjo+ncubPXsURESlXY/Cha2Nlnn83s2bNp0aIFvXv35pNPPvE6kohIqQrbQgeoWbMmCxcu5LzzzuNPf/oTn332mdeRRERKTVgXOsD555/PokWLMDO6dOnC7t3BP26YiEh5EPaFDnDhhReyYMEC9u/fT3JysvYmFZGwVCEKHeCyyy4jKyuLrVu3kpKSwk8//eR1JBGRoKowhQ6QlJTEa6+9xocffkifPn04cuSI15FERIKmQhU6wI033sgLL7zA/PnzueWWWzh27JjXkUREgiIst0Mvzp133snBgwe5//77qV69OhkZGfgO6y4iEroqZKEDDB8+nIMHD/L4449Ts2ZNxo8fr1IXkZBWYQsd4LHHHuO7775jwoQJ1KxZk1GjRnkdSUTktAVU6GaWDDwDVAJecs6NK/T4H4CXgabAz8DtzrmNQc4adGbGM888w3fffcfo0aOpUaMGQ4cO9TqWiMhpKbbQzawSMAm4FsgDVpvZXOfc5gLTRgI5zrleZnaRf36n0ggcbBEREUyZMoXvv/+eYcOGUaNGDW677TavY4mIlFggW7kkALnOue3OucPADKBHoTlxwGIA59xWINbM6gY1aSmKjIxk+vTpXHvttQwcOJBZs2Z5HUlEpMQCKfQGwFcF7uf5xwpaB/QGMLMEIAZoWPiFzCzNzLLNLDs/P//0EpeSKlWqkJWVRbt27ejXrx8LFizwOpKISIkEUuhFbfpR+Pxu44A/mFkOcDfwKXD0d09yLsM5F++ci4+Oji5p1lJ3zjnnMG/ePC655BJ69erFe++953UkEZGABVLoeUCjAvcbAicc4co5951z7jbnXBvgViAa+FewQpalWrVq8e6779K8eXNSUlJYtmyZ15FERAISSKGvBpqZWRMzOwvoC8wtOMHMavkfAxgIvO+c+y64UctOnTp1eO+992jSpAndu3fnww8/9DqSiEixii1059xRYAjwDrAFmOmc22Rmg8xskH/axcAmM9sKdAVCftu/8847j8WLF9OgQQO6devGqlWrvI4kInJK5lzh1eFlIz4+3mVnZ3vy3iWxa9curr76avLz81m8eDHx8fFeRxKRCszM1jjniiyiCndwrpJq0KABS5cupU6dOlx77bV8+umnXkcSESmS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9NVAMzNrYmZn4SvtuYUnmVlN4GpgTnAjSrD16NGDVatWUb16da655homT57sdSQRCYJiC905dxQYArwDbAFmOuc2mdkgMxtUYGovYJFz7sfSiSrB1KJFCz755BM6dOhAWload955Jz///LPXsUTkDJhXWzzEx8e77OxsT95b/uPo0aOMGjWKcePGER8fz6xZs4iJifE6loichJmtcc7FF/WY9hSt4CIjIxk7dixZWVls27aNtm3bsmjRIq9jichpUKELAD179iQ7O5v69euTnJzMo48+yvHjx72OJSIloEKX3zRr1oxVq1bRr18/Ro8eTUpKCt9++63XsUQkQCp0OcE555zDa6+9xsSJE1m0aBHx8fHk5OR4HUtEAqBCl98xMwYPHsz777/PL7/8Qrt27Zg6darXsUSkGCp0OanExETWrl1L+/btue2227j99tv58UdtlSpSXqnQ5ZTOO+883nnnHUaNGsXUqVNJSEhg8+bNXscSkSKo0KVYkZGRPPLIIyxatIh9+/YRHx+vVTAi5ZAKXQKWlJRETk4OiYmJ3HbbbfTv358ffvjB61gi4qdClxKpV68e7777Lg8++CCvvfYal19+ORs2bPA6loigQpfTUKlSJR566CHee+89Dhw4QEJCAi+99JJOnCHiMRW6nLaOHTuSk5PDFVdcwR133MHNN9/Md99953UskQpLhS5npG7duiy89VYerVmTGdOmcWmdOnz88MNexxKpkFTocmYyM6k0aBB/PXiQ5cCxo0f574ceYswNN3Ds2DGv04lUKCp0OTPp6XDoEABXADlAH+Cvb7xBx44d2blzp4fhRCoWFbqcmUKFXQuYBrwCrF27ltatWzNz5kwPgolUPAEVupklm9lnZpZrZiNOMucaM8sxs01mtjy4MaXcatz4d0MG3BoTQ05ODs2bN+fGG2/k9ttv1zbrIqWs2EI3s0rAJKArEAfcZGZxhebUAp4HUpxzLfD91S0VwZgxEBV14lhUFIwZQ9OmTfnwww9JT09n6tSpXHrppaxevdqbnCIVQCBL6AlArnNuu3PuMDAD6FFoTj/gTefcTgDn3N7gxpRyKzUVMjIgJgbMfNcZGb5xoHLlyjz22GMsXbqUn3/+mfbt2zNmzBiOHj3qcXCR8BNIoTcAvipwP88/VlBz4A9mtszM1pjZrUW9kJmlmVm2mWXn5+efXmIp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WrZsydChQ+nXrx9Vq1b1Op6cgg7OJSIniI6O5sEHH2Tnzp1MmTIFM2PgwIE0atSI9PR0du3a5XVEOQ0qdJEKrGrVqtx+++3k5OSwdOlSrrzySsaOHUtsbCz9+vXj448/9jqilIAKXUQwM6655hqysrL44osv+N///V/mz59PYmIiiYmJTJ8+nSNHjngdU4qhQheREzRp0oQJEyaQl5fHc889xzfffEO/fv2IjY3lkUceYffuwlstS3mhQheRIlWvXp0hQ4awdetW5s+fT8uWLXnwwQeJiYmhT58+LF26VFvHlDMqdBE5pYiICLp168bChQv5/PPPGTZsGEuWLKFjx47ExcXx7LPPcuDAAa9jCip0ESmBCy+8kPHjx5OXl8crr7xCzZo1GTp0KA0aNOCOO+5g7dq1Xkes0FToIlJiVatW5dZbb2XVqlWsWbOGfv36kZmZyWWXXUZiYiKvvvoqP/30k9cxKxwVuoickbZt2zJ58mR2797N008/zYEDB+jfvz/169fn7rvvZv369V5HrDBU6CISFLVq1WLo0KFs2bKFxYsX07VrVzIyMmjdujUJCQlkZGTw/fffex0zrKnQRSSozIyOHTsybdq035baDx06xJ133km9evUYMGAAK1eu1BYypUCFLiKlps7ChQx96ik2bNrEyvPPp298PK+//jrt27enZcuWPP300+zbt8/rmGFDhS4ipSMzE9LSYMcODEj89795afVq9jz9NJMnT6ZatWrcc889NGjQgL59+7Jw4UKOHTvlOXKkGDraooiUjthY2LHj9+MxMfDllwCsX7+eKVOm8Nprr/Htt99Sr149br75Zvr370+LFi3KNG6o0NEWRaTs7dxZ7HirVq145pln2LNnD7NmzSI+Pp6///3vXHLJJVx++eVMnDiR/fv3n3mWzEzf/2AiInzXmZln/prlkApdREpH48YBj1epUoU///nPzJ07l927d/PUU09x9OhR7r77burVq0fv3r2ZM2fO6R0grMCqH5zzXaelhWWpa5WLiJSOX4v00KH/jEVFQUYGpKYG9BLr16/nlVdeITMzk6+//ppzzz2Xfv360b9/fy699FLMijqHfSEBrPoJJWe8ysXMks3sMzPLNbMRRTzew8zWm1mOmWWb2RVnGlpEQlxqqq+8Y2LAzHddgjIH3yqZX4/8OG/ePDp06MCLL77IZZdd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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = leap_frog(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.13:**" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def adams_bashforth(f, x_0, x_n, y_0, n): \n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " y[1] = y[0] + h * f(x[0], y[0]) \n", " for i in range(1, n-1):\n", " y[i+1] = y[i] + 3.0 / 2.0 * h * f(x[i], y[i]) - 1.0 / 2.0 * h * f(x[i-1], y[i-1])\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.14:**" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAm8ElEQVR4nO3dd3xUdb7/8deHAEIEBCUiElJUFEGREgFBAWkBlOKKKzGCF70GrFhoyi6uF7FciiiKu1Fwl73UFYEgUqPSViEBYZFqQBIi/ABdUaRI+/7+mNGNGGACk5zM5P18POYxc858M/Oeo3lzcuYUc84hIiKhr5TXAUREJDhU6CIiYUKFLiISJlToIiJhQoUuIhImSnv1xlWrVnVxcXFevb2ISEhavXr1N865qPye86zQ4+LiyMzM9OrtRURCkplln+45bXIREQkTKnQRkTChQhcRCRMqdBGRMKFCFxEJE2ctdDObYGZ7zeyL0zxvZva6mWWZ2b/MrGHwY/pNmgRxcVCqlO9+0qRCeysRkVATyBr6X4EOZ3i+I1DLf0sB3jr/WPmYNAlSUiA7G5zz3aekqNRFRPzOWujOuaXAv88wpCsw0fl8BlQ2s+rBCviLIUPg0CH2AE8ARwEOHfLNFxGRoGxDrwHszDOd65/3G2aWYmaZZpa5b9++gr1LTg4Ay4DXgL6AyzNfRKSkC0ahWz7z8r1qhnMu1TmX4JxLiIrK98jV04uJAaA7MBR4F/jfPPNFREq6YBR6LlAzz3Q0sCsIr/trw4dDZCQAfwJ6AIOB97t1C/pbiYiEomAUehrQy7+3S1Pge+fc7iC87q8lJ0NqKsTGYma8GxND06uu4t7UVJ0TRkQEsLNdU9TMpgCtgKrAHuA5oAyAc+7PZmbAG/j2hDkE9HbOnbVhExIS3PkW8Z49e2jSpAlHjx5l5cqV1KxZ8+w/JCISwsxstXMuId/nvLpIdDAKHWDDhg00a9aM+Ph4li9fToUKFYKQTkSkeDpToYf8kaJ169Zl+vTpfPHFFyQlJXHixAmvI4mIeCLkCx0gMTGR119/nQ8++IABAwZ4HUdExBOeXeAi2B5++GG2bNnCq6++yjXXXEOfPn28jiQiUqTCptABRo8eTVZWFo888ggxMTF07NjR60giIkUmLDa5/CwiIoKpU6dSr1497rrrLtasWeN1JBGRIhNWhQ5QsWJF5s6dyyWXXMJtt93Gjh07vI4kIlIkwq7QAapXr868efM4cuQInTp14t//PtO5xUREwkNYFjpAnTp1mDVrFtu2baNbt24cOXLE60giIoUqbAsdoGXLlvztb39j2bJl3HfffZw8edLrSCIihSas9nLJT48ePdi5cycDBw6kZs2ajBw50utIIiKFIuwLHaB///5kZ2czatQoYmNjeeyxx7yOJCISdCWi0M2M1157jdzcXPr160d0dDR33HGH17FERIIqrLeh5xUREcHkyZNp0qQJ99xzDytWrPA6kohIUJWYQgeIjIwkLS2NmjVrcvvtt/PFF194HUlEJGhKVKEDREVFsXDhQsqXL09iYiLZ2dleRxIRCYoSV+gAcXFxLFiwgEOHDtG+fXsKfMFqEZFiqEQWOsD111/PnDlzyMnJoVOnThw4cMDrSCIi5yWgQjezDma2xcyyzGxwPs9XMbOZZvYvM1tlZtcFP2rw3XzzzUyfPp3PP/+cO+64g59++snrSCIi5+yshW5mEcCbQEegDpBkZnVOGfYssNY5Vw/oBbwW7KCFpXPnzowfP5709HR69eqlKx6JSMgKZD/0xkCWc247gJlNBboCG/OMqQO8BOCc22xmcWZWzTm3J9iBC8N9993Hvn37GDBgAFFRUYwdOxbfta9FREJHIIVeA9iZZzoXaHLKmHXA74DlZtYYiAWigZAodPAdTbp3715GjBjBpZdeytChQ72OJCJSIIEUen6rqu6U6ZeB18xsLbAe+Bw4/psXMksBUgBiYmIKFLQovPLKK+zdu5fnnnuOSy65hEceecTrSCIiAQuk0HOBmnmmo4FdeQc4534AegOYb1vFV/4bp4xLBVIBEhISTv1HwXNmxttvv813333Ho48+SsWKFenVq5fXsUREAhLIXi4ZQC0zizezskAPIC3vADOr7H8O4L+Bpf6SDzllypRh2rRptGnTht69ezNjxgyvI4mIBOSshe6cOw48CiwANgHTnXMbzKyvmfX1D7sW2GBmm/HtDdOvsAIXhXLlyjFr1iyaNm1KUlIS8+fP9zqSiMhZmXPebPlISEhwmZmZnrx3oPbv38+tt97K5s2bWbBgAS1atPA6koiUcGa22jmXkN9zJfZI0UBUrlyZhQsXEhcXx+23305GRobXkURETkuFfhZRUVEsXryYqlWrkpiYyPr1672OJCKSLxV6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P/+Z3bt3M336dBo2bMioUaO47rrraNSoEWPGjGH37t2+HyghJwkLpNBr4DvQ62e5/nm/YmZ3mNlmYC5wf34vZGYp/k0ymfv27TuXvCIiv1KuXDnuuusu5syZ88t5ZJxzPPnkk9SoUYM2devyzv338112NjgH2dmQkhKWpR5IoVs+836zBu6cm+nfzNINGJbfCznnUp1zCc65hKioqAIFFRE5m0svvZR+/fqxZs0aNm7cyB//+Ed2bt3Kg0ePUg3oAkwBDobpScICKfRcoGae6Whg1+kGO+eWAleaWdXzzCYics6uvfZann/+ebYcP04m8BiwBrgHuBRIys5mzpw5HD161NOcwRRIoWcAtcws3szKAj2AtLwDzOwqMzP/44ZAWeDbYIcVESkoi42lETAKyAE+AXoCi0qVokuXLlx22WU8+OCDpKenc/z4cS+jnrezFrpz7jjwKLAA2IRvD5YNZtbXzPr6h90JfGFma4E3gbudDusSkeIgz0nCSgEtgT9HRrJ7wgTmzp3LbbfdxtSpU2nbti2XX345ffr0YdGiRSF5il8dKSoi4W/SJN8285wciInxlXyeqyYdOnSIDz/8kBkzZjBnzhwOHjzIJZdcQrdu3ejevTutW7embNmyHn6A/zjTbosqdBGRPA4fPsyCBQt47733SEtL48CBA1SuXPmXcm/bti0XXHCBZ/lU6CIi5+DIkSMsWrSI9957j9mzZ/P9999TqVIlunTpwl133UW7du0oX7782V8oiFToIiLn6ejRoyxevJj33nuPWbNm8d1333HhhReSmJhIt27duO2227j44osLPYcKXUQkiI4dO8bHH3/MrFmzmD17Nrt27SIiIoIWLVrQtWtXunbtSlxcXKG8t862KCISRGXKlKF9+/aMGzeOnTt3smrVKgYNGsTevXt54okniI+Pp379+vzpT3/i888//8+53Av5FARaQxcRCaKsrCxmz57NrFmzWLFiBc45YmJi6Fq7Nt2WLOGWn36izM+DIyN9l+nLs8fN2WiTi4iIB/bu3csHH3zA7NmzWThnDkec4yJgKPDUz4NiY2HHjoBfU4UuIuKxg2YsAuYA7YG7f37CDE6eDPh1zlTopc83pIiInN2FsbF0y86m26lPxMQE7T30paiISFHIcwqCX0RG+uYHiQpdRKQoJCf7vgCNjfVtZomNLfAXomejTS4iIkUlOTmoBX4qraGLiIQJFbqISJhQoYuIhAkVuohImFChi4iECc+OFDWzfUD2Of54VeCbIMYpasrvnVDODqGdP5SzQ/HJH+uci8rvCc8K/XyYWebpDn0NBcrvnVDODqGdP5SzQ2jk1yYXEZEwoUIXEQkToVroqV4HOE/K751Qzg6hnT+Us0MI5A/JbegiIvJbobqGLiIip1Chi4iEiZArdDPrYGZbzCzLzAZ7nSc/ZrbDzNab2Vozy/TPu9jMFpnZl/77KnnGP+P/PFvMLNGDvBPMbK+ZfZFnXoHzmlkj/+fOMrPXzcw8yv4nM/vav/zXmlmn4pjd/741zexjM9tkZhvMrJ9/frFf/mfIHhLL38zKmdkqM1vnz/+8f36xX/an5ZwLmRsQAWwDrgDKAuuAOl7nyifnDqDqKfP+FxjsfzwYeMX/uI7/c1wAxPs/X0QR520BNAS+OJ+8wCrgJsCAeUBHj7L/Ceifz9hild3/vtWBhv7HFYGt/pzFfvmfIXtILH//e1XwPy4DrASahsKyP90t1NbQGwNZzrntzrmjwFSgq8eZAtUV+Jv/8d/glytRdQWmOud+cs59BWTh+5xFxjm3FPj3KbMLlNfMqgOVnHOfOt//4RPz/ExRZz+dYpUdwDm32zm3xv/4ALAJqEEILP8zZD+dYpPdn9k55370T5bx3xwhsOxPJ9QKvQawM890Lmf+H8grDlhoZqvNLMU/r5pzbjf4fhGAS/3zi+tnKmjeGv7Hp873yqNm9i//Jpmf/2Qu1tnNLA5ogG9NMaSW/ynZIUSWv5lFmNlaYC+wyDkXcss+r1Ar9Py2SxXH/S6bO+caAh2BR8ysxRnGhspn+tnp8hanz/EWcCVQH9gNjPLPL7bZzawCMAN4wjn3w5mG5jPP08+QT/aQWf7OuRPOufpANL617evOMLzY5T9VqBV6LlAzz3Q0sMujLKflnNvlv98LzMS3CWWP/08z/Pd7/cOL62cqaN5c/+NT5xc559we/y/qSeBt/rMJq1hmN7My+ApxknPuff/skFj++WUPteUP4JzbD3wCdCBEln1+Qq3QM4BaZhZvZmWBHkCax5l+xcwuNLOKPz8G2gNf4Mt5n3/YfcBs/+M0oIeZXWBm8UAtfF+weK1Aef1/mh4ws6b+b/h75fmZIvXzL6PfHfiWPxTD7P73Gw9scs6NzvNUsV/+p8seKsvfzKLMrLL/cXmgLbCZEFj2p+XFN7HncwM64fs2fRswxOs8+eS7At834euADT9nBC4B0oEv/fcX5/mZIf7PswUPvh0HpuD70/gYvrWNB84lL5CA75d3G/AG/iORPcj+d2A98C98v4TVi2N2//vejO/P838Ba/23TqGw/M+QPSSWP1AP+Nyf8wtgqH9+sV/2p7vp0H8RkTARaptcRETkNFToIiJhQoUuIhImVOgiImFChS4iEiZU6CIiYUKFLiISJv4/H/dbOllTpwMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = adams_bashforth(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.15:**" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def adams_moulton(f, x_0, x_n, y_0, n): \n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " y[1] = y[0] + h * f(x[0], y[0]) \n", " for i in range(1, n-1):\n", " y[i+1] = optimize.fsolve(lambda z: z - y[i] - h * (5.0 / 12.0 * f(x[i+1], z) + 2.0 / 3.0 * \\\n", " f(x[i], y[i]) - 1.0 / 12.0 * f(x[i-1], y[i-1])), y[i])\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.16:**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAnKElEQVR4nO3de1xUdf7H8dcHwgot7aJ5QcAU81rmj3TVWlOszEtoZVr8rMw0I6vt0bqZ1Fa2qNvV3fKypla4GpVWiptpeS01E/NCXlFMJMuo3S6rZl6+vz9m6oeEgDpwmOH9fDzmMXO+c5h5z3nI28OZczHnHCIiEvzCvA4gIiKBoUIXEQkRKnQRkRChQhcRCREqdBGREHGaV298/vnnu9jYWK/eXkQkKK1Zs+Yb51zNop7zrNBjY2PJzMz06u1FRIKSme063nPa5CIiEiJU6CIiIUKFLiISIlToIiIhQoUuIhIiSix0M5tqZl+b2WfHed7M7O9mtt3MNphZ68DH9Js+HWJjISzMdz99epm9lYhIsCnNGvorQNdinr8WiPPfBgMTTj1WEaZPh8GDYdcucM53P3iwSl1ExK/EQnfOLQP+XcwsiUCa8/kYqGFmdQIV8FcpKbB/P3uBPwA/A+zf7xsXEZGAbEOvB+wuMJ3nH/sNMxtsZplmlpmfn39i75KbC8CHwN/w/SngCoyLiFR2gSh0K2KsyKtmOOcmOefinXPxNWsWeeTq8UVHA3Aj8BjwKjCmwLiISGUXiELPA+oXmI4C9gTgdY+VmgqRkYCv0G8GRgBvXnddwN9KRCQYBaLQ5wC3+vd2+R3wvXPuywC87rGSkmDSJIiJwcyYGh1N+7g4bn3pJVatWhXwtxMRCTZW0jVFzew14ErgfGAvvhXkCADn3EQzM+BFfHvC7AcGOOdKPOtWfHy8O9WTc+Xn59O2bVv27dvHqlWr0NkbRSTUmdka51x8kc95dZHoQBQ6wObNm2nXrh1RUVEsX76c6tWrByCdiEjFVFyhB/2Rok2bNmXWrFls3bqVvn37cvjwYa8jiYh4IugLHSAhIYEJEyYwf/587rvvPrz6q0NExEueXeAi0O68806ys7N56qmnuOiii7j//vu9jiQiUq5CptABRo8ezfbt23nggQeIjo6md+/eXkcSESk3IbHJ5RdhYWFMmzaNNm3acMstt7By5UqvI4mIlJuQKnSAyMhIMjIyiIqKomfPnmzbts3rSCIi5SLkCh2gZs2avPfee4SFhdG1a1f27t3rdSQRkTIXkoUO0LBhQ+bOnctXX31Fjx49+O9//+t1JBGRMhWyhQ7Qpk0bXn/9dT799FPtoy4iIS+kCx2gZ8+ejB8/nnfffZfk5GTtoy4iISukdls8nrvuuovdu3eTmppKdHQ0jzzyiNeRREQCrlIUOsCTTz7J7t27efTRR4mKiuL222/3OpKISEBVmkI3M1566SX27NnDoEGDqF27Nl27FnepVBGR4BLy29ALqlKlCrNmzaJFixbccMMNOvBIREJKpSp0gLPPPpv33nuPunXr0r17dzZu3Oh1JBGRgKh0hQ5wwQUXsGDBAs444wyuueYadu3a5XUkEZFTVikLHaBBgwbMnz+fffv2cfXVV5Ofn+91JBGRU1KqQjezrma21cy2m9nwIp4/x8zeNrMNZvaJmbUIfNTAa9myJRkZGeTm5tKtWzd+/PFHryOJiJy0EgvdzMKBccC1QDPgZjNrVmi2EcA659zFwK3A3wIdtKxcfvnlzJw5k7Vr19KrVy8OHjzodSQRkZNSmjX0NsB251yOc+5nIB1ILDRPM2AhgHNuCxBrZhcENGkZ6t69Oy+//DKLFi0iKSmJI0eOeB1JROSElabQ6wG7C0zn+ccKWg9cD2BmbYAYIKrwC5nZYDPLNLPMirbNun///jz33HPMmjVLpwgQkaBUmgOLrIixwm03Bvibma0DsoC1wG/OhOWcmwRMAoiPj69wjfnAAw+Qn5/P6NGjOe+88xg1apTXkURESq00hZ4H1C8wHQXsKTiDc+4HYACAmRmw038LOqmpqXz77beMHj2aatWqMWLECK8jiYiUSmkKfTUQZ2YNgC+AfsAtBWcwsxrAfv829juBZf6SDzpmxvjx49m3bx8pKSlUq1aN++67z+tYIiIlKrHQnXOHzWwoMB8IB6Y65zaa2RD/8xOBpkCamR0BNgEDyzBzmQsPD+eVV15h//793H///VStWpWBA4P6I4lIJWBeffkXHx/vMjMzPXnv0jp48CCJiYksWLCAGTNm0K9fP68jiUglZ2ZrnHPxRT1XaY8ULY3TTz+dt956iyuuuIL+/fszZ84cryOJiByXCr0EkZGRzJ07l9atW9OnTx8++OADryOJiBRJhV4KZ511FvPmzaNJkyYkJiby0UcfeR1JROQ3VOildO6557JgwQKioqLo3r07FX37v4hUPir0E3DBBRewcOFCzj33XK6++mrWrVvndSQRkV+p0E9QVFQUixYtolq1aiQkJLB+/XqvI4mIACr0k9JgxQqWHDlC5L//TULr1mSNGeN1JBERFfoJmz4dBg/mwj17WAyccfQoCQ8/zMa//tXrZCJSyanQT1RKCuzfD0AjYDG+w207jxjBpk2bvEwmIpWcCv1E5eYeMxmHr9TDjh6lc+fObNmyxZNYIiIq9BMVHf2boYuARXXrAtC5c2e2bdtWzqFERFToJy41FSIjjx2LjKTpU0+xaNEiDh8+TKdOncjOzvYmn4hUWir0E5WUBJMmQUwMmPnuJ02CpCSaNWvGokWL+Pnnn+nUqZPW1EWkXOlsi2UgKyuLhIQEwsPDWbRoEU2bNvU6koiECJ1tsZy1bNmSJUuWANCxY0eysrK8DSQilYIKvYw0a9aMpUuXUqVKFTp16sTatWu9jiQiIU6FXoYaN27M0qVLqVq1Kp07d+aTTz7xOpKIhDAVehlr2LAhy5Yt49xzz6VLly6sWLHC60giEqJKVehm1tXMtprZdjMbXsTz1c0sw8zWm9lGMxsQ+KjBKyYmhqVLl1KnTh2uvvpqli1b5nUkEQlBJRa6mYUD44BrgWbAzWbWrNBs9wCbnHOXAFcCz5pZlQBnDWpRUVEsWbKE6OhounbtysKFC72OJCIhpjRr6G2A7c65HOfcz0A6kFhoHgecZWYGVAP+DRwOaNIQUKdOHZYsWUKjRo3o0aMH//rXv7yOJCIhpDSFXg/YXWA6zz9W0ItAU2APkAXc75w7WviFzGywmWWaWWZ+fv5JRg5utWrVYvHixbRo0YJevXqRnp7udSQRCRGlKXQrYqzw0UjXAOuAukAr4EUzO/s3P+TcJOdcvHMuvmbNmicYNXScd955LFy4kA4dOnDLLbcwadIkryOJSAgoTaHnAfULTEfhWxMvaADwlvPZDuwEmgQmYmg6++yzmTdvHt26deOuu+7i6aef9jqSiAS50hT6aiDOzBr4v+jsB8wpNE8ukABgZhfgOwFhTiCDhqIzzzyTt956i759+/KnP/2JlJQUvDoVg4gEv9NKmsE5d9jMhgLzgXBgqnNuo5kN8T8/EXgSeMXMsvBtonnIOfdNGeYOGVWqVGH69OlUr16dUaNG8d133/HCCy8QFqZDBETkxJRY6ADOuXeBdwuNTSzweA9wdWCjVR7h4eFMnDiR6tWr8/TTT/PDDz8wdepUIiIivI4mIkGkVIUuZc/M+Otf/8o555zDiBEj+OGHH3j99dc544wzvI4mIkFCf9dXIGbGww8/zLhx45gzZw7XXnst33//vdexRCRIqNAroOTkZP75z3/y0Ucf0bFjR7788kuvI4lIEFChV1BJSUnMnTuX7du30759e139SERKpEKvwK655hoWL17Mvn376NChA6tXr/Y6kohUYCr0Cu6yyy5j+fLlnHXWWVx55ZW89957XkcSkQpKhR4E4uLiWLFiBY0bN6Znz55MmzbN60giUgGp0INE7dq1Wbp0Kb///e+59dZbefrpp3VUqYgcQ4UeRM4++2zeffddbrrpJv70pz/x4IMPcvTob05qKSKVlA4sCjKnn346r732GrVr1+b5558nLy+PtLQ0HYAkIlpDD0ZhYWGMHTuWp2++mTfffJOEM8/km/r1Yfp0r6OJiIdU6EHKZszgj7Nn8ybwKdAuL4/sO+9UqYtUYir0YJWSAvv3cyOwCPgOaPfTTyx/8EFvc4mIZ1TowSo399eH7YCPgXOBhL17eeONN7xKJSIeUqEHq+joYyYbAiuBy04/nb59+/LUU09pt0aRSkaFHqxSUyEy8pih8yIjeX/CBPr168dDDz1EcnIyhw8f9iigiJQ37bYYrJKSfPcpKb7NL9HRkJrKGUlJTL/tNho0aMDo0aP5/PPPSU9Pp3r16t7mFZEyZ6X5s9zMugJ/w3cJusnOuTGFnh8G+BuG04CmQE3n3L+P95rx8fEuMzPzZHNLKbz00kskJycTFxdHRkYGDRs29DqSiJwiM1vjnIsv6rkSN7mYWTgwDrgWaAbcbGbNCs7jnHvaOdfKOdcKeBhYWlyZS/kYNGgQCxYsYO/evbRp04alS5d6HUlEylBptqG3AbY753Kccz8D6UBiMfPfDLwWiHBy6jp16sSqVauoVasWXbp0YfLkyV5HEpEyUppCrwfsLjCd5x/7DTOLBLoCs47z/GAzyzSzzPz8/BPNKiepUaNGrFy5koSEBAYNGsQDDzzAkSNHvI4lIgFWmkK3IsaOt+G9J7D8eJtbnHOTnHPxzrn4mjVrljajBECNGjWYO3cu9913H2PHjqVnz566XqlIiClNoecB9QtMRwF7jjNvP7S5pcI67bTT+Nvf/sbEiRN5//33adeuHTt27PA6logESGkKfTUQZ2YNzKwKvtKeU3gmM6sOdARmBzaiBNpdd93FggUL+Oqrr2jbtq2+LBUJESUWunPuMDAUmA9sBt5wzm00syFmNqTArL2BBc65fWUTVQLply9Lzz//fLp06cILL7ygI0tFglyp9kMvC9oPvWL4/vvv6d+/PxkZGdx2221MnDhR51YXqcBOaT90CW3Vq1fnnXfe4bHHHuPVV1/liiuuYPfu3SX/oIhUOCp0ISwsjMcff5y3336brVu3Eh8fz7Jly7yOJSInSIUuv+rVqxerVq2iRo0aJCQkMG7cOG1XFwkiKnQ5RtOmTfnkk0/o2rUrQ4cOZeDAgfz0009exxKRUlChy29Ur16d2bNn8+ijj/Lyyy/TsWNH8vLyvI4lIiVQoUuRwsLCGDlyJG+//TabNm3i0ksv5YMPPvA6logUQ4UuxerVqxerV6/mggsu4Oqrr+bJJ5/k6NGjXscSkSKo0KVETZo0YdWqVdxyyy38+c9/pkePHnz77bdexxKRQlToUipVq1Zl2rRpjB8/noULF9K6dWtWr17tdSwRKUCFLqVmZtx999189NFHAFx++eVMmDBBuzaKVBAqdDlhl112GZ9++ikJCQkkJyfTv39/9u3TKXxEvKZCl5Ny3nnnMXfuXEaOHMmMGTNoe845bDaD2FiYPt3reCKVkgpdTlpYWBiPXngh86tUYe+hQ8QDL+/ahRs0SKUu4gEVupyalBSuOniQ9UBb4A6g/4ED/Pjwwx4HE6l8VOhyanJzAagLvA88ge+SVf+zezdr1671MJhI5aNCl1MTHf3rw3Dgz8AiYF94OL/73e948cUXtReMSDlRocupSU2FyMhjhjpGRrL+xRe56qqruPfee7nhhhv4z3/+41FAkcqjVIVuZl3NbKuZbTez4ceZ50ozW2dmG81MF6msLJKSYNIkiIkBM9/9pEmcP2QIGRkZPPvss8ydO5dWrVqxYsUKr9OKhLQSL0FnZuHANuAqIA/fRaNvds5tKjBPDWAF0NU5l2tmtZxzXxf3uroEXeWxevVq+vbtS25uLk888QTDhw8nPDzc61giQelUL0HXBtjunMtxzv0MpAOJhea5BXjLOZcLUFKZS+Vy2WWXsXbtWvr06cMjjzxCp06d2LVrl9exREJOaQq9HlDwIpN5/rGCGgPnmNkSM1tjZrcW9UJmNtjMMs0sMz8//+QSS1CqXr06M2bMIC0tjXXr1nHxxRczXfuqiwRUaQrdihgrvJ3mNOB/gO7ANcCjZtb4Nz/k3CTnXLxzLr5mzZonHFaCm5nRv39/1q9fT8uWLfnf//1fkpKS+O6777yOJhISSlPoeUD9AtNRwJ4i5nnPObfPOfcNsAy4JDARJdQ0aNCAJUuWMHLkSF5//XUuueQSPvzwQ69jiQS90hT6aiDOzBqYWRWgHzCn0DyzgSvM7DQzi8R30ODmwEaVUHLaaafx6KOPsnz5ciIiIrjyyitJSUnh0KFDXkcTCVolFrpz7jAwFJiPr6TfcM5tNLMhZjbEP89m4D1gA/AJMNk591nZxZZQ0bZtW9atW8eAAQMYNWoU7du3Z9u2bV7HEglKJe62WFa026IU9tZbbzFo0CAOHDjAmDFjGDp0KGFhOvZNpKBT3W1RpFxcf/31ZGVl0blzZ+6//366dOnC559/7nUskaChQpcKpW7dumRkZDBlyhQyMzNp2bIlkydP1vlgREpBhS4Vjplxxx13kJWVRZs2bRg0aBDdu3dnz57CO1eJSEEqdKmwYmJieP/993nhhRdYsmQJLVq0YMaMGVpbFzkOFbpUaGFhYQwdOpT169fTtGlTkpKS6NOnDzrSWOS3VOgSFOLi4li2bBlPPfUUGRkZNG/enNdff11r6yIFqNAlaISHhzNs2DA+/fRTYmNj6devH71799a2dRE/FboEnebNm7Ny5UqeeeYZ5s+fT7NmzZgyZYrW1qXSU6FLUAoPD+fBBx8kKyuLVq1aceedd3LVVVeRk5PjdTQRz6jQJag1atSIRYsWMXHiRD5ZvpyWjRox1owjMTGg0/NKJaNCl6AXFhbGXdWqsQno5BwPAJfn5rLpzjtV6lKpqNAlNKSkEPXTT2QA04Fs4NKffuKJe+7h4MGDHocTKR8qdAkNubmA72ostwCbgBuAx7//nosvvpjFixd7GE6kfKjQJTRERx8zWQuYAcyvVYvDhw/TuXNnbrvtNh2QJCFNhS6hITUVIiOPHYuM5OrnnuOzzz5jxIgRzJgxgyZNmjB16lTt4ighSYUuoSEpCSZNgpgYMPPdT5oESUmceeaZpKamsm7dOpo1a8bAgQO58sor2bxZF9WS0KJCl9CRlASffw5Hj/ruk5KOebp58+YsXbqUyZMnk5WVxSWXXMIjjzzCgQMHPIkrEmilKnQz62pmW81su5kNL+L5K83sezNb57/9OfBRRU5dWFgYAwcOZMuWLfTr14/U1FRatmzJvHnzvI4mcspKLHQzCwfGAdcCzYCbzaxZEbN+6Jxr5b+NDHBOkYCqVasWaWlpfPDBB4SHh9OtWzd69erFzp07vY4mctJKs4beBtjunMtxzv0MpAOJZRtLpHwkJCSQlZXFmDFj+OCDD2jWrBmPP/64NsNIUCpNodcDdheYzvOPFdbOzNab2Twza17UC5nZYDPLNLNM7T4mFUWVKlV46KGH2LJlC4mJiTzxxBM0a9aM2bNna28YCSqlKXQrYqzwv/JPgRjn3CXAC8A7Rb2Qc26Scy7eORdfs2bNEwoqUtaioqJIT09n0aJFREZG0qtXL7p37052drbX0URKpTSFngfULzAdBRxzAmrn3A/Ouf/6H78LRJjZ+QFLKVKOOnXqxLp163juuef46KOPaNGiBSkpKezbt8/raCLFKk2hrwbizKyBmVUB+gFzCs5gZrXNzPyP2/hf99tAhxUpLxERETzwwANs27aNvn37MmrUKJo0aaJrmkqFVmKhO+cOA0OB+cBm4A3n3EYzG2JmQ/yz3Qh8Zmbrgb8D/Zz+1UsIqF27NmlpaXz44YfUqlWLpKQk2rdvz8cff+x1NJHfMK96Nz4+3mVmZnry3iIn4+jRo6SlpfHwww/z1VdfccsttzBmzBjq169f8g+LBIiZrXHOxRf1nI4UFSmlsLAwbr/9drKzs0lJSWHWrFlcdNFFPPbYY9q+LhWCCl3kBFWrVo2//OUvbN26leuuu46RI0fSuHFjpk2bxtGjR72OJ5WYCl3kJMXExJCens5HH31EvXr1uPXWW2nbti3Lly/3OppUUip0kVPUoUMHPv74Y9LS0tizZw+XX34510dGstUMYmN1GTwpNyp0kQAICwujf//+bBs5kpEREbx/4ADNgbt37eKrQYNU6lIuVOgiAVT1ySd59NAhdgB3A5OBRgcO8Ng99/Djjz96nE5CnQpdJJD81zathe8cGJuBbsDI77+nUaNGjB8/nkOHDnkYUEKZCl0kkApd27QR8AawqnZtmjZtyj333EPz5s2ZOXOmjjiVgFOhiwTSca5t2uaZZ1i8eDFz586lSpUq9OnTh3bt2rFw4UJvckpIUqGLBFIx1zY1M7p378769euZMmUKX3zxBV26dKFz586sXLnS6+QSAlToIoFWwrVNw8PDueOOO8jOzmbs2LFs3LiR9u3b06NHD9atW+dFYgkRKnQRj5xxxhncf//95OTkMHr0aFasWMGll17KTTfdxJYtW7yOJ0FIhS7isapVqzJ8+HBycnJ45JFHmDdvHs2bN+f2228nJyfH63gSRFToIhVEjRo1ePLJJ8nJyeEPf/gD6enpXHTRRdx9993k5eV5HU+CgApdpIKpWbMmzz77LDt27ODOO+9k8uTJNGzYkOTkZHL9+7mLFEWFLlJB1atXjwkTJpCdnc3tt9/O5MmTadSoEUOGDGHXrl1ex5MKSIUuUsHFxsbyj3/8g+zsbAYOHMjUqVOJi4tj8ODB7Ny50+t4UoGo0EWCRExMDBMmTGDHjh0MHjyYV199lcaNGzNw4EB9eSpAKQvdzLqa2VYz225mw4uZ7zIzO2JmNwYuoogUVL9+fV588UVycnK4++67mT59Oo0bN2bAgAFkZ2d7HU88VGKhm1k4MA64FmgG3GxmzY4z31/xXUxaRMpYvXr1+Pvf/05OTg733nsv6enpNGnShH79+ukApUqqNGvobYDtzrkc59zPQDqQWMR89wKzgK8DmE9ESlC3bl2ef/55du7cybBhw3j33Xe59NJL6XbmmSwzw8XE6HzslURpCr0esLvAdJ5/7FdmVg/oDUws7oXMbLCZZZpZZn5+/olmFZFi1K5dmzFjxpD7zDOkRkSQ+dNPdAQuz81l7sCBuH/+0+uIUsZKU+hWxFjh836OBR5yzh0p7oWcc5Occ/HOufiaNWuWMqKInIgao0Yx4tAhPsd3TvY8oOfBg1xyxx3MmDGDw4cPextQykxpCj0PqF9gOgrYU2ieeCDdzD4HbgTGm1mvQAQUkRPkP/goEhgKbAdeBY4cOkRSUhKNGzdmwoQJHDhwwMOQUhZKU+irgTgza2BmVYB+wJyCMzjnGjjnYp1zscBMINk5906gw4pIKRS6yEYEcCuQFR3NO++8Q61atUhOTiYmJobHH3+cr7/W116hosRCd84dxvcf/Xx8V9R6wzm30cyGmNmQsg4oIifoOBfZCBs1isTERFauXMnixYtp27YtTzzxBNHR0dx11106w2MIMK8ugxUfH+8yMzM9eW+RkDd9OqSk+Da/REf7Sr7QedkBNm/ezPPPP09aWhoHDx6kR48ePPjgg3Ts2BGzor4+E6+Z2RrnXHyRz6nQReTrr79m/PjxjBs3jm+++YbWrVvz4IMP0qdPHyIiIryOJwUUV+g69F9EqFWrFo8//ji5ubn84x//YN++fSQlJdGwYUOeeeYZvvvuO68jSimo0EXkV2eeeSaDBw9m06ZNZGRkcOGFFzJs2DCioqJITk5m06ZNXkeUYqjQReQ3wsLC6NGjB0uWLGHNmjX06dOHqVOn0rx5c6666irmzJnDkSPFHnYiHlChi0ixWrduzcsvv8zu3btJTU1l8+bNJCYmEhcXx7PPPst//vMfryOKnwpdREqlZs2ajBgxgp07d/LGG28QFRXFH//4R6KiohgyZAgbN270OmKlp0IXkRMSERFBnz59WLZsGWvXrqVfv368+uqrtGjRgoSEBN5++22dXsAjKnQROWmtWrViypQp5OXlMWbMGLKzs7n++uuJiYnhscceY/fu3SW/iASMCl1ETtl5553HQw89RE5ODnPmzKFVq1Y8+eSTxMbEkBgZyTwzjug0vmVOhS4iAXPaaafRs2dP/vWvf5Hz3HMMDw9n1YEDdAMa5eYyesAA9o4f73XMkKVCF5EyETt2LKmHD5MLvAFcCIw4dIioe+7hpptuYtGiRXh1pHqoUqGLSNnwn8a3CtAHWAhsAe4DFi5cSEJCAhdddBFjxozhyy+/9C5nCFGhi0jZKHQaX4CLgGdjYvjiiy9IS0ujdu3aPPzww9SvX5/rrruOd955h0OHDpV/1hChQheRsnGc0/iSmsoZZ5xB//79WbZsGVu3bmXYsGFkZmbSu3dvoqKiGDZsmE7nexJU6CJSNpKSYNIkiIkBM9/9pEm/OY1v48aNGT16NLm5uWRkZNC+fXvGjh1L06ZN6dChA1OmTOHHH3/06EMEF50+V0QqnL179zJt2jSmTJnCli1bqFq1KjfddBMDBgygQ4cOhIVV3nVRnQ9dRIKSc46VK1cydepU0tPT2bdvH7GxsfTv35/+/fsTFxfndcRyd8rnQzezrma21cy2m9nwIp5PNLMNZrbOzDLN7PJTDS0iYma0b9+eyZMn89VXX5GWlkZcXBx/+ctfaNy4Me3atWP8+PF8++23XketEEpcQzezcGAbcBWQh++i0Tc75zYVmKcasM8558zsYnzXHW1S3OtqDV1ETtYXX3zBjBkzSEtL47PPPiMiIoLu3btz66230q1bN04//XSvI5aZU11DbwNsd87lOOd+BtKBxIIzOOf+6/7/f4aqgI4WEJEyU69ePYYNG8aGDRtYu3Yt9957LytXruT666+nTp06JCcns3Llykp34FJpCr0eUPAMO3n+sWOYWW8z2wL8C7ijqBcys8H+TTKZ+fn5J5NXRORXZkarVq149tlnycvLY968eXTt2pVXXnmF9u3b06hRI1JSUsgaMwZiYyEszHcfoueUKc0mlz7ANc65O/3T/YE2zrl7jzP/74E/O+e6FPe62uQiImXlhx9+YNasWaSnp7Pwgw84cvQozYF+/lujyMgid6EMBqe6ySUPqF9gOgrYc7yZnXPLgIZmdv4JpRQRCZCzzz6bAQMGMH/+fPbUrcs44BzgUSAOaLN/P8/dey95eXneBg2w0hT6aiDOzBqYWRV8/8HNKTiDmTUyM/M/bo3v9A362llEPFfriy9IBj4EcoGngSPAg//5D9HR0XTs2JEJEyYQCpuBSyx059xhYCgwH9iMbw+WjWY2xMyG+Ge7AfjMzNYB44C+rrJ9GyEiFVOBc8rUB/4IrAG21q3LE088QX5+PsnJydSpU4drrrmGl156KWjLXQcWiUhomz4dBg+G/fv/f6zANnTnHFlZWbz22mu8+eab7Nixg7CwMDp27MiNN95I7969qVOnjnf5C9GRoiJSuU2fDikpvlP6Rkf7ThxWxBeizjk2bNjAzJkzmTlzJlu2bMHM6NChAzfeeCPXX3899evXL+INyo8KXUTkJGzatImZM2cya9YsNmzYAEDbtm258cYbueGGG2jQoEG5Z1Khi4icom3btjFr1ixmzZrFmjVrALj00kvp1asXiYmJXHzxxfj3DSlTKnQRkQDauXMns2bN4q233uLjjz/GOUdsbCzXXXcdiYmJXHHFFURERJTJe6vQRUTKyN69e8nIyGD27Nm8//77HDx4kBo1atC9e3cSExPp2rUrZ511VsDeT4UuIlIO9u3bx4IFC5g9ezZz587l22+/pUqVKnTu3JnExESuO3yYus88U+KXs8VRoYuIlLPDhw+zYsUKZs+ezezZs9mxYwcA8cAfgCQ4ZvfJ0lKhi4h4yDnHpnr1mP3ll2QANwP3/fJkTAx8/nmpX6u4Qj/tVIOKiEjxzIzmX31Fc2AEhc4vnpsbsPepvBfmExEpTwVOQWDHGT9VKnQRkfKQmurbZl5QZKRvPEBU6CIi5SEpyfcFaEwMmPnuA3xOdm1DFxEpL0lJZXpRDa2hi4iECBW6iEiIUKGLiIQIFbqISIhQoYuIhAjPDv03s3xg10n++PnANwGMU96U3zvBnB2CO38wZ4eKkz/GOVezqCc8K/RTYWaZxzuXQTBQfu8Ec3YI7vzBnB2CI782uYiIhAgVuohIiAjWQp/kdYBTpPzeCebsENz5gzk7BEH+oNyGLiIivxWsa+giIlKICl1EJEQEXaGbWVcz22pm281suNd5imJmn5tZlpmtM7NM/9i5Zva+mWX7788pMP/D/s+z1cyu8SDvVDP72sw+KzB2wnnN7H/8n3u7mf3dzKzwe5VT9sfN7Av/8l9nZt0qYnb/+9Y3s8VmttnMNprZ/f7xCr/8i8keFMvfzM4ws0/MbL0//xP+8Qq/7I/LORc0NyAc2AFcCFQB1gPNvM5VRM7PgfMLjT0FDPc/Hg781f+4mf9znA408H++8HLO+3ugNfDZqeQFPgHa4bsgyzzgWo+yPw78sYh5K1R2//vWAVr7H58FbPPnrPDLv5jsQbH8/e9Vzf84AlgF/C4Ylv3xbsG2ht4G2O6cy3HO/QykA4keZyqtROBV/+NXgV4FxtOdcwedczuB7fg+Z7lxzi0D/l1o+ITymlkd4Gzn3Ern+xeeVuBnyjv78VSo7ADOuS+dc5/6H/8IbAbqEQTLv5jsx1NhsvszO+fcf/2TEf6bIwiW/fEEW6HXA3YXmM6j+H9AXnHAAjNbY2aD/WMXOOe+BN8vAlDLP15RP9OJ5q3nf1x43CtDzWyDf5PML38yV+jsZhYLXIpvTTGoln+h7BAky9/Mws1sHfA18L5zLuiWfUHBVuhFbZeqiPtddnDOtQauBe4xs98XM2+wfKZfHC9vRfocE4CGQCvgS+BZ/3iFzW5m1YBZwB+ccz8UN2sRY55+hiKyB83yd84dcc61AqLwrW23KGb2Cpe/sGAr9DygfoHpKGCPR1mOyzm3x3//NfA2vk0oe/1/muG//9o/e0X9TCeaN8//uPB4uXPO7fX/oh4FXuL/N2FVyOxmFoGvEKc7597yDwfF8i8qe7AtfwDn3HfAEqArQbLsixJshb4aiDOzBmZWBegHzPE40zHMrKqZnfXLY+Bq4DN8OW/zz3YbMNv/eA7Qz8xON7MGQBy+L1i8dkJ5/X+a/mhmv/N/w39rgZ8pV7/8Mvr1xrf8oQJm97/fFGCzc+65Ak9V+OV/vOzBsvzNrKaZ1fA/PhPoAmwhCJb9cXnxTeyp3IBu+L5N3wGkeJ2niHwX4vsmfD2w8ZeMwHnAQiDbf39ugZ9J8X+erXjw7TjwGr4/jQ/hW9sYeDJ5gXh8v7w7gBfxH4nsQfZpQBawAd8vYZ2KmN3/vpfj+/N8A7DOf+sWDMu/mOxBsfyBi4G1/pyfAX/2j1f4ZX+8mw79FxEJEcG2yUVERI5DhS4iEiJU6CIiIUKFLiISIlToIiIhQoUuIhIiVOgiIiHi/wDip095b71QEgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = adams_moulton(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.17:**" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "def predictor_corrector(f, x_0, x_n, y_0, n):\n", " x, h = np.linspace(x_0, x_n, n, retstep=True)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " y[1] = y[0] + h * f(x[0], y[0]) \n", " for i in range(1, n-1):\n", " q = y[i] + 3.0 / 2.0 * h * f(x[i], y[i]) - 1.0 / 2.0 * h * f(x[i-1], y[i-1])\n", " y[i+1] = y[i] + h * (5.0 / 12.0 * f(x[i+1], q) + 2.0 / 3.0 * f(x[i], y[i]) - 1.0 / 12.0 * f(x[i-1], y[i-1]))\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.18:**" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = predictor_corrector(f, 0.0, 3200.0, 1.0, 10)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.19:**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "def bulirsch_stoer(f, x_0, x_n, y_0, n, m=5): \n", " x = np.linspace(x_0, x_n, n)\n", " y = np.zeros(n)\n", " y[0] = y_0\n", " for i in range(n-1):\n", " T = np.zeros((m, m))\n", " T[0, 0] = leap_frog(f, x[i], x[i+1], y[i], 2)[1][-1]\n", " for k in range(1, m):\n", " T[k, 0] = leap_frog(f, x[i], x[i+1], y[i], 2 * (k+1))[1][-1]\n", " for j in range(1, k+1):\n", " T[k, j] = T[k, j-1] + 1.0 / (4**j - 1) * (T[k, j-1] - T[k-1, j-1]) \n", " y[i+1] = T[m-1, m-1]\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 10.20:**" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAm3klEQVR4nO3deXgUZb728e8vYREERYaAsgX0jYdN1oAQBBIYERQEBDSIAqJGEMYFFT0qiiJnhnFBB1RkxCUcFhERgyyJoKzDkiBhDWgMOwi4DqsM8Lx/pPVETEgDHSrduT/Xlau7q590313CbfFUVZc55xARkeAX5nUAEREJDBW6iEiIUKGLiIQIFbqISIhQoYuIhIhiXr1xhQoVXI0aNbx6exGRoLR69ervnHMRuT3nWaHXqFGDtLQ0r95eRCQomdn2vJ7TlIuISIhQoYuIhAgVuohIiFChi4iECBW6iEiIyLfQzewdM9tvZhvyeN7M7B9mlmlm68ysceBj+kyaBDVqQFhY9u2kSQX2ViIiwcafLfT3gA5neL4jEOX7SQDePP9YuZg0CRISYPt2cC77NiFBpS4i4pNvoTvnFgM/nGFIFyDRZVsBlDOzKwIV8DdPPQVHjrAPeAg4DnDkSPZyEREJyBx6FWBnjse7fMv+wMwSzCzNzNIOHDhwdu+yYwcAS4DXgAGAy7FcRKSoC0ShWy7Lcr1qhnNuvHMu2jkXHRGR65mreateHYAewLPAu8CoHMtFRIq6QBT6LqBajsdVgT0BeN3fGzkSSpcGsgu9F/DfwPQuXQL+ViIiwSgQhZ4E9PEd7dIc+Nk5tzcAr/t7vXvD+PEQGYmZ8U716rSIiuLO8eNJTU0N+NuJiAQby++aomY2BYgFKgD7yN5ALg7gnBtnZgaMJftImCPAXc65fL91Kzo62p3vl3Pt37+fa6+9lmPHjrFy5Uqqa/pFREKcma12zkXn+pxXF4kORKEDbNq0iRYtWhAZGcmyZcsoW7ZsANKJiBROZyr0oD9TtE6dOkyfPp1NmzYRHx/PiRMnvI4kIuKJoC90gOuvv57XX3+dOXPm8Mgjj3gdR0TEE55d4CLQ7rvvPrZs2cLo0aO5+uqrGTRokNeRREQuqJApdIAXX3yRzMxMHnjgASIjI+nUqZPXkURELpiQmHL5VXh4OJMnT6ZRo0bcdtttOpxRRIqUkCp0gDJlyvDpp59SsWJFOnXqRFZWlteRREQuiJArdIDLL7+cefPmceLECTp27Mj333/vdSQRkQIXkoUO8F//9V8kJSWxfft2br75Zo4ePep1JBGRAhWyhQ7QsmVLJk2axPLly+nduzcnT570OpKISIEJ6UIH6N69O6+88goff/wxQ4YMwaszY0VEClpIHbaYl4ceeogdO3YwevRoIiMjGTJkiNeRREQCrkgUOsBLL73Ezp07eeSRR6hSpQq33Xab15FERAKqyBR6WFgYEydO5Ntvv6VPnz5cfvnltGnTxutYIiIBE/Jz6DlddNFFfPLJJ1x11VXcfPPNrFmzxutIIiIBU6QKHaB8+fIkJydz6aWX0qFDBzIzM72OJCISEEWu0AGqVatGSkoKJ0+e5IYbbmDv3sBfYElE5EIrkoUOUKtWLebMmcO+ffvo2LEjP/30k9eRRETOi1+FbmYdzGyLmWWa2RO5PH+ZmX1sZuvMbJWZ1Qt81MBr1qwZM2bMYNOmTXTp0kVnk4pIUMu30M0sHHgd6AjUAXqZWZ3Thj0JpDvn6gN9gNcCHbSgtG/fnsTERJYsWaIrHolIUPNnC70ZkOmcy3LOHQemAl1OG1MHWADgnNsM1DCzSgFNWoDi4+P5xz/+QVJSEgkJCTqbVESCkj/HoVcBduZ4vAu49rQxa4FbgKVm1gyIBKoC+wIR8kIYPHgwBw4c4Pnnn6dixYr87W9/8zqSiMhZ8afQLZdlp2/C/g14zczSgfXAGuAPcxdmlgAkAFSvXv2sgl4Iw4cPZ//+/YwaNYo//elPPPbYY15HEhHxmz+FvguoluNxVWBPzgHOuX8DdwGYmQFbfT+cNm48MB4gOjq60M1rmBljx47lhx9+YOjQoZQtW5YBAwZ4HUtExC/+FHoqEGVmNYHdQDxwe84BZlYOOOKbY78HWOwr+aATHh7OxIkTOXz4MPfffz9lypThjjvu8DqWiEi+8t0p6pw7AQwGkoEMYJpzbqOZDTCzXzdfawMbzWwz2UfDPFhQgS+EEiVK8OGHHxIbG0u/fv34+OOPvY4kIpIv8+qIjujoaJeWlubJe/vr0KFDtG/fnrS0NGbNmsUNN9zgdSQRKeLMbLVzLjq354rsmaL+KFOmDHPmzKFu3bp069aNxYsXex1JRCRPKvR8lCtXjpSUFCIjI+nUqROpqaleRxIRyZUK3Q8RERHMnz+fChUqcMMNN7B+/XqvI4mI/IEK3U9VqlRhwYIFlCpViuuvv56vvvrK60giIr+jQj8LNWvWZMGCBZw6dYp27dqRlZXldSQRkd+o0M9SrVq1+Oyzzzhy5AhxcXFs27bN60giIoAK/Zw0aNCA+fPnc/DgQeLi4ti+fbvXkUREVOjnqlGjRnz22Wf8+OOPtG3blp07d+b/SyIiBUiFfh6aNGlCSkoK3333HXFxcezevdvrSCJShKnQz1OzZs1ITk5m//79xMXF6fqkIuIZFXoANG/enHnz5rF3717atm3Lt99+63UkESmCVOgBEhMTw5w5c9i5cyft2rVj//79XkcSkSJGhR5ArVq1Yvbs2WzdupW2bduyb1/QXLBJREKACj3A2rRp81upa05dRC4kFXoBiIuLY+7cuezYsYM2bdqwa9curyOJSBGgQi8grVu3JiUlhW+//ZY2bdro5CMRKXAq9AIUExPD/Pnz+f7772nTpg1bt/7hMqsiIgGjQi9gzZo14/PPP+fgwYO0bt2azMxMryOJSIjyq9DNrIOZbTGzTDN7IpfnLzWzWWa21sw2mtldgY8avBo3bsznn3/OsWPHaN26NZs3b/Y6koiEoHwL3czCgdfJvvhzHaCXmdU5bdggYJNzrgEQC7xsZiUCnDWoNWjQgIULF3Lq1CliY2PZuHGj15FEJMT4s4XeDMh0zmU5544DU4Eup41xQFkzM6AM8ANwIqBJQ0DdunVZuHAhYWFhxMbGsmbNGq8jiUgI8afQqwA5v0pwl29ZTmOB2sAeYD3woHPu1OkvZGYJZpZmZmkHDhw4x8jBrVatWixatIhSpUoRFxfHsmXLvI4kIiHCn0K3XJa50x7fAKQDlYGGwFgzu+QPv+TceOdctHMuOiIi4iyjho6oqCiWLl1KxYoVad++PSkpKV5HEpEQ4E+h7wKq5Xhclewt8ZzuAma4bJnAVqBWYCKGpurVq7NkyRKioqLo3LkzM2bM8DqSiAQ5fwo9FYgys5q+HZ3xQNJpY3YA7QDMrBLwX4AuuJmPSpUq8cUXX9CkSRN69uzJ+++/73UkEQli+Ra6c+4EMBhIBjKAac65jWY2wMwG+IaNAGLMbD2wAHjcOfddQYUOJZdddhkpKSm0bduWfv36MXbsWK8jiUiQKubPIOfcHGDOacvG5bi/B2gf2GhFR5kyZZg1axa9evXiL3/5Cz///DNPPvkk2QcNiYj4R2eKFhIXXXQRH374IXfeeSdPP/00Q4cOxbnT9z2LiOTNry10uTCKFSvGe++9xyWXXMJLL73ETz/9xJtvvkmxYvrPJCL5U1MUMmFhYYwZM4bLLruMF154gQMHDjBlyhRKlSrldTQRKeQ05VIImRkjRoxgzJgxJCUl0b59e3788UevY4lIIadCL8QGDx7M1KlTWbVqFa1bt2b37t1eRxKRQkyFXsjdeuutzJ07l+3btxMTE6NvahSRPKnQg0Dbtm1ZtGgRv/zyC9dddx0rV670OpKIFEIq9CDRqFEj/vWvf1GuXDnatm3L3LlzvY4kIoWMCj2IXHnllSxbtoxatWrRuXNnEhMTvY4kIoWICj3IVKpUiYULFxIXF0ffvn35n//5H52AJCKACj0olS1bltmzZ3PHHXfw1FNPkZCQwH/+8x+vY4mIx3RiUZAqUaIEiYmJ1KhRgxdeeIGdO3cybdo0LrnkD19DLyJFhLbQg9ivJyBNmDCBBQsW0KpVK3bt2uV1LBHxiAo9BPTv35/Zs2ezdetWmjdvztq1a72OJCIeUKGHiPbt27N06VLMjFatWpGcnOx1JBG5wFToIaR+/fqsWLGCK6+8kptuuokJEyZ4HUlELiAVeoipUqUKS5Ys4frrr+eee+7hyZtv5lRkJISFQY0aMGmS1xFFpID4Vehm1sHMtphZppk9kcvzj5lZuu9ng5mdNLPygY8r/ihbtixJSUkkxMXx11mz6LljB4edg+3bISFBpS4SovItdDMLB14HOgJ1gF5mVifnGOfci865hs65hsB/A4uccz8UQF7xU/HixRn3zTe8AswEWgG7AI4cgaee8jKaiBQQf7bQmwGZzrks59xxYCrQ5QzjewFTAhFOzo/t3MnDwCwgE2gKrALYscPLWCJSQPwp9CrAzhyPd/mW/YGZlQY6AB/l8XyCmaWZWdqBAwfONqucrerVAbgRWA6UAtoAH/zpTx6GEpGC4k+h53bp+by+PKQzsCyv6Rbn3HjnXLRzLjoiIsLfjHKuRo6E0qUBqAusBKLDwoj/7juGDx+u74ARCTH+FPouoFqOx1WBPXmMjUfTLYVH794wfjxERoIZEZGRzJ8wgX79+vHcc88RHx/P0aNHvU4pIgFi+W2lmVkx4CugHbAbSAVud85tPG3cpcBWoJpz7nB+bxwdHe3S0tLONbecB+ccL730Eo8//jhNmjThk08+oXLlyl7HEhE/mNlq51x0bs/lu4XunDsBDAaSgQxgmnNuo5kNMLMBOYZ2A1L8KXPxlpnx2GOPMXPmTDIyMoiOjmbFihVexxKR85TvFnpB0RZ64bB+/Xq6du3Krl27eP3117nnnnu8jiQiZ3BeW+gS2q655hpSU1OJjY3l3nvvZdCgQRw/ftzrWCJyDlToQvny5ZkzZw5Dhw7ljTfeoF27duzbt8/rWCJyllToAkB4eDijRo1iypQprF69miZNmpCamup1LBE5Cyp0+Z34+HiWL19O8eLFadWqFe+//77XkUTETyp0+YMGDRqQmppKy5Yt6devHw888ICuWSoSBFTokqsKFSqQnJzMkCFDGDNmDO3atWPv3r1exxKRM1ChS56KFSvGyy+/zOTJk1m9ejWNGjVi0aJFXscSkTyo0CVfvXr1YtWqVZQrV4527drx4osv6ntgRAohFbr4pW7duqSmptK9e3eGDh3KLbfcws8//+x1LBHJQYUufitbtixTp07l1Vdf5dNPPyU6Opq1a9d6HUtEfFToclbMjAcffJBFixZx5MgRmjdvznvvved1LBFBhS7nKCYmhjVr1hATE8Ndd91FQkICx44d8zqWSJGmQpdzVrFiRVJSUnjyySf55z//SfPmzdmyZYvXsUSKLBW6nJfw8HBGjhzJnDlz2L17N02aNGHixIlexxIpklToEhAdO3YkPT2dJk2a0KdPH/r168ehQ4e8jiVSpKjQJWCqVKnCggULeOaZZ0hMTKRp06asW7fO61giRYYKXQKqWLFiPPfccyxYsICff/6ZZs2aMW7cOJ2IJHIB+FXoZtbBzLaYWaaZPZHHmFgzSzezjWam88OLuLi4ONLT04mNjWXgwIHcdtttOhFJpIDlW+hmFg68DnQE6gC9zKzOaWPKAW8ANzvn6gI9Ax9Vgk3FihWZM2cOf/vb35gxYwaNGjVi5cqVXscSCVn+bKE3AzKdc1nOuePAVKDLaWNuB2Y453YAOOf2BzamBKuwsDAef/xxFi9ezMmTJ2nZsiUvvPACJ0+e9DqaSMjxp9CrADtzPN7lW5bT1cBlZrbQzFabWZ9ABZTQEBMTw9q1a+nZsyfDhg0jNjaW7du3ex1LJKT4U+iWy7LT93AVA5oANwE3AMPM7Oo/vJBZgpmlmVnagQMHzjqsBLdy5coxefJkJk6cyNq1a6lfvz6TJ0/2OpZIyPCn0HcB1XI8rgrsyWXMPOfcYefcd8BioMHpL+ScG++ci3bORUdERJxrZgliZsYdd9zB2rVrqVevHr179+aOO+7QDlORAPCn0FOBKDOraWYlgHgg6bQxnwCtzKyYmZUGrgUyAhtVQknNmjVZtGgRzz33HFOnTqVBgwYsXbrU61giQS3fQnfOnQAGA8lkl/Q059xGMxtgZgN8YzKAecA6YBXwtnNuQ8HFllBQrFgxnnnmGZYsWUJ4eDht2rRh2LBhun6pyDkyr074iI6OdmlpaZ68txQ+Bw8e5C9/+Qvvv/8+0dHRJCYmUrt2ba9jiRQ6ZrbaORed23M6U1QKhbJly/Lee+8xbdo0tm7dSqNGjXjllVc4deqU19FEgoYKXQqVnj17smHDBq6//noeeeQR4uLiyMrK8jqWSFBQoUuhc/nll5OUlMS7775Leno69evXZ/z48fo+GJF8qNClUDIz+vXrx/r162nevDn33XcfN954I7t37/Y6mkihpUKXQq169eqkpKQwduxYFi9eTL169Zg0aZK21kVyoUKXQi8sLIxBgwaRnp5OnTp1uOOOO+jRowf79u3zOppIoaJCl6ARFRXF4sWLGTVqFLNnz6ZOnTpMnDhRW+siPip0CSrh4eEMHTqU9PR0atWqRZ8+fbjpppvYuXNn/r8sEuJU6BKUatWqxeLFi3nttddYtGgRdevWZdy4cTpuXYo0FboErfDwcB544AE2bNhAs2bNGDhwIG3btiUzM9PraCKeUKFL0KtZsyafffYZb7/9Nunp6VxzzTW89NJLuoiGFDkqdAkJZsbdd9/Nxo0bad++PY899hgtWrRg/fr1XkcTuWBU6BJSqlSpwsyZM5kyZQpbt26lcePGPPHEExw5csTraCIFToUuIcfMiI+PJyMjgzvvvJNRo0ZRr1495s2b53U0kQKlQpeQVaFCBd555x0WLlxIyZIl6dixI/Hx8ezdu9fraCIFQoUuIa9Nmzakp6fz/PPPM3PmTGrXrq1DHCUkqdClSChZsiTDhg1j3bp1NGnShIEDB9KyZUvtNJWQokKXIuXqq69m/vz5JCYmkpmZSePGjXn88cc5dOiQ19FEzptfhW5mHcxsi5llmtkTuTwfa2Y/m1m67+eZwEcVCQwz484772Tz5s307duXv//979SuXZtp06bh/vd/oUYNCAvLvp00yeu4In7L95qiZhYOfAVcD+wCUoFezrlNOcbEAo865zr5+8a6pqgUFsuXL2fQoEGsWbOGdmFhjDl1it+uZlq6NIwfD717exlR5Dfne03RZkCmcy7LOXccmAp0CWRAES+1aNGC1NRUXi9fntWnTlEfGAocBDhyBJ56ytuAIn7yp9CrADm/ym6Xb9npWpjZWjOba2Z1c3shM0swszQzSztw4MA5xBUpGOHh4dz/4498BfQFXgRqkb314rZv9zSbiL/8KXTLZdnp8zRfApHOuQbAGGBmbi/knBvvnIt2zkVHREScVVCRAle9OhHA28AK4AqgF9CuZEk2btzoaTQRf/hT6LuAajkeVwX25BzgnPu3c+6Q7/4coLiZVQhYSpELYeTI7Dlz4FpgJTCueHHSixWjYcOGDBkyhJ9++snLhCJn5E+hpwJRZlbTzEoA8UBSzgFmdrmZme9+M9/rfh/osCIFqnfv7B2gkZFgRnhkJPe9+y5fbdtG//79efXVV4mKiuLNN9/kxIkTXqcV+YN8C905dwIYDCQDGcA059xGMxtgZgN8w3oAG8xsLfAPIN7pumASjHr3hm3b4NSp7NvevalQoQJvvfUWX375JfXq1eP++++nUaNGzJ8/3+u0Ir+T72GLBUWHLUowcs4xc+ZMHn30UbKysujcuTMvv/wyUVFRXkeTIuJ8D1sUER8zo1u3bmzatIlRo0axcOFC6tatyyOPPKL5dfGcCl3kHJQsWZKhQ4fy9ddf07dvX0aPHk1UVBTjxo3T/Lp4RoUuch4qVarEP//5T7788kvq1q3LwIEDadiwIbNnz0a7keRCU6GLBEDDhg354osv+Oijj/jll1/o1KkTbdu2JTU11etoUoSo0EUCxMy45ZZb2LRpE2PHjmXjxo00a9aM+Ph4vvnmG6/jSRGgQhcJsOLFizNo0CAyMzMZNmwYs2bNonbt2jz00EN89913XseTEKZCFykgl1xyCc8//zxff/01/fr1Y8yYMVx11VX89a9/1UWrpUCo0EUKWOXKlRk/fjzr168nNjaWJ598kquvvpoJEyboiBgJKBW6yAVSp04dPvnkExYvXkzVqlW55557qFu3Lh988IGubyoBoUIXucBatWrF8uXL+fjjjylRogTx8fE0btyYTz/9VIc6ynlRoYt4wMzo2rUr6enpTJo0iUOHDtG5c2diYmL44osvvI4nQUqFLuKh8PBwbr/9djIyMnjrrbfYuXMnbdu25c9//jMrV670Op4EGRW6SCFQvHhxEhISyMzM5JVXXmHt2rU0b96cLl26sG7dOq/jSZBQoYsUIhdddBEPP/wwWVlZjBgxgkWLFtGgQQN69uzJ+vXrvY4nhZwKXaQQKlu2LE8//TRZWVk89dRTJCcnU79+fXr06KEtdsmTCl2kECtfvjwvvPAC27Zt4+mnnyYlJYUGDRrQvXt31q5d63U8KWRU6CJBoHz58owYMYJt27YxbNgw5s+fT8OGDbnllltIT0/3Op4UEn4Vupl1MLMtZpZpZk+cYVxTMztpZj0CF1FEflW+fHmef/55tm3bxrPPPsvnn39Oo0aN6Nq1K2vWrPE6nngs30I3s3DgdaAjUAfoZWZ18hg3iuxrj4pIAbrssssYPnw427ZtY/jw4SxatIjGjRvTqVMn/vWvf3kdTzzizxZ6MyDTOZflnDsOTAW65DLuL8BHwP4A5hORMyhXrhzPPvss27ZtY8SIEaxYsYKWLVvSpk0bkpOTdeZpEeNPoVcBduZ4vMu37DdmVgXoBow70wuZWYKZpZlZ2oEDB842q4jk4dJLL+Xpp59m+/btvPrqq2RlZdGhQweaNGnChx9+yMmTJ72OKBeAP4VuuSw7/X/7rwKPO+fO+KfGOTfeORftnIuOiIjwM6KI+Oviiy/mwQcf5JtvvmHChAkcOnSIW2+9lTp16vDOO+9w/PhxryNKAfKn0HcB1XI8rgrsOW1MNDDVzLYBPYA3zKxrIAKKyNkrUaIE/fv3JyMjg2nTplG6dGnuvvturrrqKl577TUOHz7sdUQpAP4UeioQZWY1zawEEA8k5RzgnKvpnKvhnKsBTAfud87NDHRYETk74eHh9OzZky+//JK5c+dy5ZVX8tBDDxEZGcmzzz7L/v3a5RVK8i1059wJYDDZR69kANOccxvNbICZDSjogCJy/syMDh06sGjRIpYuXUpMTAzPP/881atXJyEhgc2bN3sdUQLAvNoLHh0d7dLS0jx5bxGBzZs3M3r0aBITEzl27BidOnXi0UcfpXXr1pjltutMCgMzW+2ci87tOZ0pKlJE1apVi7feeosdO3YwfPhwVqxYQWxsLE2bNmXq1Km6PF4QUqGLFHERERE8++yz7Nixg3HjxnHw4EF69erFVVddxejRozl48KDXEcVPKnQRAaBUqVLcd999ZGRkkJSURI0aNRgyZAhVq1bl4Ycf5ptvvvE6ouRDhS4ivxMWFkbnzp1ZtGgRq1at4qabbmLs2LFERUXRuXNnPvvsM52BWkip0EUkT02bNmXy5Mls376dYcOGsWrVKtq3b0/dunV58803OTRhAtSoAWFh2beTJnkduUjTUS4i4rdffvmFadOm8dprr7F69WouBe4GBgFXApQuDePHQ+/enuYMZWc6ykWFLiJnzTnHisqV+ce33zIdOAl0Jvsb+tpVr45t3+5twBCmwxZFJKDMjBb79jEF2AY8BSwHrgdq7djBK6+8wg8//OBlxCJJhS4i56Z6dSD7q1dHADuARKBCyZI88sgjVK5cmb59+7J8+XLtRL1AVOgicm5GjsyeM/e5CLizdGmWTZjA2rVr6d+/PzNmzCAmJoZGjRr9doy7FBwVuoicm969s3eARkaCWfatb4do/fr1eeONN9izZw/jxmVfJmHgwIFUrlyZgQMHsm7dOo/DhybtFBWRAuecY+XKlYwbN44PPviAY8eO0aJFC+6991569uxJmTJlvI4YNLRTVEQ8ZWY0b96c9957j927d/+207R///5cccUV3HvvvaxYsUJz7edJhS4iF1T58uV5+OGHycjIYMmSJfTo0YPJkyfTokULrrnmGkaPHs13333ndcygpEIXEU+YGddddx3vvvsue/fu5a233uLiiy9myJAhVK5cmZ49e5KcnKzroZ4FzaGLSKGyYcMGJkyYQGJiIj/88APVqlXjrrvu4q677qJGjRpex/Oc5tBFJGjUq1eP0aNHs2fPHj744ANq167NiBEjqFmzJrGxsbzzzjv8+9//9jpmoeRXoZtZBzPbYmaZZvZELs93MbN1ZpZuZmlmdl3go4pIUVKyZEluvfVWkpOT2bp1KyNGjGDPnj3cfffdVKpUidtvv5158+bpQhw55DvlYmbhwFdkn9W7i+yLRvdyzm3KMaYMcNg558ysPtnXHa11ptfVlIuInK1fD39MTExk6tSp/Pjjj1xxxRX07t2bPn36cM0113gdscCd75RLMyDTOZflnDsOTAW65BzgnDvk/u//DBcDOvZIRALu18Mf33jjDfbu3ctHH31Es2bNePXVV6lfvz6NGjVi9OjRfPvtt15H9YQ/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(t, N):\n", " return -np.log(2.0) / 1600.0 * N\n", "\n", "t, N = bulirsch_stoer(f, 0.0, 3200.0, 1.0, 5, 4)\n", "\n", "t_exact = np.linspace(0.0, 3200.0, 1000)\n", "N_exact = 1.0 * np.exp(-np.log(2.0) / 1600.0 * t_exact)\n", " \n", "fig, ax = plt.subplots()\n", "ax.plot(t_exact, N_exact, color='black')\n", "ax.scatter(t, N, color='red')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.1:**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def shooting_method(f, g, a, b, n, alpha, beta):\n", " \"\"\"\n", " Solves 2nd order explicit ODE in the form y(x)'' = f(x, y(x), y(x)') in [a, b] with y(a) = alpha, y(b) = beta\n", " using shooting method.\n", " Args:\n", " f (function): function \n", " g (function): function\n", " a (float): The left-most point of the interval\n", " b (float): The right-most point of the interval\n", " n (int): number of points dividing interval [a, b]\n", " alpha (float): initial value at x = a\n", " beta (float): initial value at x = b\n", " Returns:\n", " numpy.ndarray: Vector of grid-points\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " def semi_implicit_euler_system(f, g, a, b, n, y_0, z_0):\n", " x, h = np.linspace(a, b, n, retstep=True)\n", " y = np.zeros(n)\n", " z = np.zeros(n)\n", " y[0] = y_0\n", " z[0] = z_0\n", " for i in range(n - 1):\n", " z[i + 1] = z[i] + h * f(x[i], y[i], z[i])\n", " y[i + 1] = optimize.fsolve(lambda q: q - y[i] - h * g(x[i + 1], q, z[i + 1]), y[i])\n", " return x, y\n", " def shooting_function(gamma):\n", " x, y = semi_implicit_euler_system(f, g, a, b, n, alpha, gamma)\n", " return y[-1] - beta\n", " root = optimize.fsolve(shooting_function, 0.0)\n", " x, y = semi_implicit_euler_system(f, g, a, b, n, alpha, root)\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.2:**" ] }, { "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": [ "def f(x, y, z):\n", " return 0.5 * np.sqrt(1.0 + z**2)\n", "\n", "def g(x, y, z):\n", " return z\n", "\n", "a = -1.0\n", "b = 1.0\n", "n = 20\n", "alpha = 0.0\n", "beta = 0.0\n", "\n", "x_numerical, y_numerical = shooting_method(f, g, a, b, n, alpha, beta)\n", "\n", "x_analytical = np.linspace(a, b, 100) \n", "y_analytical = 2.0 * np.cosh(x_analytical / 2.0) - 2.255\n", "\n", "fig, ax = plt.subplots()\n", "ax.scatter(x_numerical, y_numerical, color=\"red\")\n", "ax.plot(x_analytical, y_analytical, color=\"black\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.3:**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def finite_difference_method(a, b, n, p, q, r, s, alpha, beta):\n", " \"\"\"\n", " Solves 2nd order linear ODE in the form p(x)y(x)'' + q(x)y(x)' + r(x)y(x) + s(x) = 0 in [a, b] with y(a) = alpha,\n", " y(b) = beta using finite difference method.\n", " Args:\n", " a (float): The left-most point of the interval\n", " b (float): The right-most point of the interval\n", " n (int): Number of points dividing interval [a, b]\n", " p (function): Arbitrary differentiable function\n", " q (function): Arbitrary differentiable function\n", " r (function): Arbitrary differentiable function\n", " s (function): Arbitrary differentiable function\n", " alpha (float): Initial value at x = a\n", " beta (float): Initial value at x = b\n", " Returns:\n", " numpy.ndarray: Vector of grid-points\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " x, h = np.linspace(a, b, n, retstep=True)\n", " A = np.zeros((n, n))\n", " b = np.zeros(n)\n", " for i in range(n):\n", " if i == 0:\n", " A[i, i] = 1.0\n", " b[i] = alpha\n", " elif i == n - 1:\n", " A[i, i] = 1.0 \n", " b[i] = beta\n", " else:\n", " A[i, i - 1] = p(x[i])\n", " A[i, i] = -2.0 * p(x[i]) -q(x[i]) * h + r(x[i]) * h**2 \n", " A[i, i + 1] = p(x[i]) + q(x[i]) * h \n", " b[i] = -s(x[i]) * h**2\n", " y = linalg.solve(A, b)\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.4:**" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "p = lambda x: 1.0\n", "q = lambda x: 2.0\n", "r = lambda x: 100.0\n", "s = lambda x: 0.0\n", "\n", "a = 0.0\n", "b = 2.0\n", "n = 20\n", "alpha = 1.0\n", "beta = 0.0\n", "\n", "t_numerical, y_numerical = finite_difference_method(a, b, n, p, q, r, s, alpha, beta)\n", "\n", "t_analytical = np.linspace(a, b, 100)\n", "y_analytical = -np.exp(-t_analytical) * np.sin(3.0 * np.sqrt(11.0) * (t_analytical - 2.0)) / np.sin(6.0 * np.sqrt(11.0)) \n", "\n", "# plot results\n", "fig, ax = plt.subplots()\n", "ax.scatter(t_numerical, y_numerical, color=\"red\")\n", "ax.plot(t_analytical, y_analytical, color=\"black\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.5:**" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def finite_element_method(f, a, b, n, alpha, beta):\n", " \"\"\"\n", " Solves 2nd order ODE in the form y(x)'' = f(x) in [a, b] with y(a) = alpha,\n", " y(b) = beta using finite element method.\n", " Args:\n", " f (function): Funtion\n", " a (float): The left-most point of the interval [a, b]\n", " b (float): The right-most point of the interval [a, b]\n", " n (int): Number of points dividing interval [a, b]\n", " alpha (float): Initial value at x = a\n", " beta (float): Initial value at x = b\n", " Returns:\n", " numpy.ndarray: Vector of grid-points\n", " numpy.ndarray: Vector of solution\n", " \"\"\"\n", " def phi(i, n):\n", " return np.identity(n)[i]\n", " x, h = np.linspace(a, b, n, retstep=True)\n", " K = np.zeros((n, n))\n", " F = np.zeros(n)\n", " y = np.zeros(n)\n", " for i in range(n):\n", " if i == 0:\n", " K[i, i] = 1.0\n", " F[i] = alpha\n", " elif i == n - 1:\n", " K[i, i] = 1.0\n", " F[i] = beta\n", " else:\n", " K[i, i - 1] = 1.0\n", " K[i, i] = -2.0\n", " K[i, i + 1] = 1.0\n", " F[i] = h**2 * f(x[i])\n", " q = linalg.solve(K, F)\n", " for i in range(n):\n", " y += q[i] * phi(i, n)\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise 11.6:**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return -50.0 * np.exp(x)\n", "\n", "a = -1.0\n", "b = 1.0\n", "alpha = 00.0\n", "beta = 10.0\n", "n = 20\n", "\n", "x_numerical, T_numerical = finite_element_method(f, a, b, n, alpha, beta)\n", "\n", "x_analytical = np.linspace(a, b, 100)\n", "T_analytical = -50.0 * np.exp(x_analytical) + 63.76 * x_analytical + 82.15\n", " \n", "fig, ax = plt.subplots()\n", "ax.scatter(x_numerical, T_numerical, color=\"red\") \n", "ax.plot(x_analytical, T_analytical, color=\"black\")\n", "plt.show()" ] } ], "metadata": { "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }