{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "using BenchmarkTools, Base.Test, PyPlot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Problem 1: Exponential integrals\n", "\n", "In this problem, you will write code to compute the [exponential integral](https://en.wikipedia.org/wiki/Exponential_integral) function\n", "$$\n", "E_1(z) = \\int_z^\\infty \\frac{e^{-t}}{t} dt\n", "$$\n", "For simplicity, you only need to compute it for $\\Re z \\ge 0$, in which case the definition can be rewritten\n", "$$\n", "E_1(z) = \\int_0^1 \\frac{e^{-z/u}}{u} du\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Slow version\n", "\n", "This is the slow, simplistic implementation of this function, from the pset, that directly performs the integral numerically. We will use it for comparisons:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "E₁_slow (generic function with 2 methods)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function E₁_slow{T<:AbstractFloat}(z::Union{T,Complex{T}})\n", " real(z) < 0 && error(\"real(z) < 0 not implemented\")\n", " return quadgk(u -> exp(-z/u)/u, 0, 1, reltol=eps(T)*10)[1]\n", "end\n", "E₁_slow{T<:Real}(z::Union{T,Complex{T}}) = E₁_slow(float(z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check this, a useful resource is [WolframAlpha](https://www.wolframalpha.com), which can compute $E_1(z)$ by `ExpIntegralE[1,z]`. For $E_1(1.2)$, [we get](https://www.wolframalpha.com/input/?i=ExpIntegralE%5B1,1.2%5D) `0.158408436851462561424955970710861738534157976840578963378...`. Compared to the above result, this corresponds to a relative error of:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3.5043052210224057e-16" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compute the relative error of approx compared to exact\n", "relerr(approx,exact) = norm(approx - exact) / norm(exact)\n", "\n", "relerr(E₁_slow(1.2), 0.158408436851462561424955970710861738534157976840578963378)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hooray, we are getting the right result to nearly machine precision! We can even do complex values this way:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.886647948886305e-16" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relerr(E₁_slow(1.2 + 3.4im),\n", " -0.0196798781439709839467398951111963946354437628483798953 +\n", " 0.0708764302707789307217865597073426047954413415009995511im)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Taylor series\n", "\n", "The [Taylor series for E₁](http://functions.wolfram.com/GammaBetaErf/ExpIntegralE/06/01/04/01/02/) is:\n", "$$\n", "E_1(z) = -\\log(z) - \\gamma - \\sum_{k=1}^\\infty \\frac{(-z)^k}{k!k}\n", "$$\n", "where $\\gamma$ is the [Euler–Mascheroni constant](https://en.wikipedia.org/wiki/Euler%E2%80%93Mascheroni_constant) (`eulergamma` in Julia).\n", "\n", "Let's write a function to compute this series until it converges (until the answer stops changing in the current precision), returning the answer and the number of terms required: **Important:** when computing a series like this, it is important to realize that each term in the series can be *computed cheaply from the previous term*, rather than computing $z^k/k!$ separately for each term." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "E₁_taylor (generic function with 1 method)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function E₁_taylor(z::Number)\n", " E₁ = -eulergamma - log(z)\n", " # iteratively compute the terms in the series, starting with k=1\n", " term = oftype(E₁, z) # use oftype to ensure type stability\n", " E₁ += term\n", " for k=2:1000000\n", " term = -term * z * (k-1) / (k * k)\n", " prev_E₁ = E₁\n", " E₁ += term\n", " E₁ == prev_E₁ && return (E₁, k-1)\n", " end\n", " return E₁, typemax(Int)\n", "end" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3.5043052210224057e-16" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relerr(E₁_taylor(1.2)[1], 0.158408436851462561424955970710861738534157976840578963378)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3.3590811736585017e-15" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relerr(E₁_taylor(1.2 + 3.4im)[1],\n", " -0.0196798781439709839467398951111963946354437628483798953 +\n", " 0.0708764302707789307217865597073426047954413415009995511im)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Good, it seems to be giving the correct answer. Now, let's make a plot of how many terms it is requiring to converge:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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4MGDhSlbdF999RXeeOMNnHHGGejZs2fh4/fddx9SU1MxdOhQbNy4MW5deXl5+Ne//qVkv/r37w9N0/DYY4/FnJ+CggIMGzYMmqbh9ttvV7ItJ7KysgDE/3FctGgRZsyYUezrOnfujIYNG2L27NmYN28eGjVqhPbt2wtt0+9zUVzOPT3qXL58+cLH/LonnG7HyTEUp3LlyohEIti2bZuSffKbinNQnCDen3oj8ZJLLil2mQceeMBx3e+6detaNhLHjh2L1NRUPProo4WPrVu3DhMmTIhbdt++fYWfEUQy2N2c5FJTUzF48GA89thjaNGiBXr27ImTJ0/ik08+wZlnnlk4UN1r7du3x4wZM/Dll1/ikksuwc6dOzFv3jxomoZp06YhLS2tcNlGjRrh1VdfxW233YamTZuia9euaNiwIfLy8rBt2zZ8/vnnqF69OtatWye9X23btsVDDz2Ep556Cs2aNUPv3r1RoUIFfPTRR1i7di3atWuHBx54QHo7Tg0YMAAzZ85E79690bt3b2RmZuL777/HokWLcO211+LNN98s9rV333037r//fkdRRMD/c9GzZ0+kpaXhoosuQlZWFjRNw+eff47//Oc/aN26dWEuOsC/e8LpdpwcQ3EqVKiACy+8EJ9//jluvPFGNGzYECkpKcjOzsZ5553n6/vBDRXnoDh+35P5+flYvnw5GjdubBqp27VrF4YPH459+/bFjCEUcemllxZ7jRYsWID//Oc/6NatG+68805kZWVhx44d+PTTT7Fs2bK45Tds2GDZiCUSFsicahu5ubna6NGjta5du2oZGRlaJBLRZs+ebbrs+vXrtS5dumhpaWlaRkaGdtNNN2n/+9//fN7j8NiyZYsWjUa1/v37mz7fsWNHLSUlJe7xJ554QjvnnHO0MmXKaHXq1NH+8pe/aMeOHdOysrK0evXqOdpGNBqNS4OhK7o+47p++OEHrUePHlpGRoZWoUIFrV27dtonn3xS7LF+//33Wr9+/bSsrCytbNmyWpUqVbTzzjtPu/vuu7UlS5YI76+It956S2vXrp2Wnp6ulStXTmvWrJk2YcIE7cSJE3HLFneOncjKytJSUlIsU+CsXLlS69y5s5aRkaGlp6dr7dq1095//31t6dKlWjQa1caNG2f6uv3792spKSla+fLltX379pkuY3XOnJwLmXM/bdo0rVevXlr9+vW1ChUqaFWqVNFatmypTZo0yTRdkqapuyfsnhfdjptjMLN582YtOztbq1q1qpaSkqJFo9G4z0S/jt3J+1vVObB7T3l9T27YsEH74x//qDVo0ECLRqPaGWecoXXt2lXr2rWr1q1bN61Tp05a48aNtdTUVC0ajWrz5s0zXU8kEin2Pf3JJ59oTZs2jXv88OHD2uDBgwv/P3HiRK1SpUraJZdcom3evDlu+YKCAq1y5craqlWrhI+PqDgRTQtfYdCtW7eibt26qFOnDurVq4elS5di5syZuPnmm2OWy8nJQYsWLVC5cmUMHjwYhw8fxlNPPYU6depg1apVpln2iZLd0qVLcdlll+Hmm282neBCRN6IRqPYsmWLaT323377DWeeeSb++9//up55DQBff/01+vTpYzr0gMipULaiMjMzsWvXLlSvXh1ff/01Wrdubbrc+PHjcezYMXz77beFs8pat26Nyy+/HLNmzQpkrBhR2D355JOIRCK47777gt4VIjqtdOnSuPfee/Hss8+ajjMU9eKLL2LIkCEK94ySWSgnrpQqVQrVq1e3XW7+/Pm48sorY9IO6APz582b5+UuEiWU77//HhMmTEDv3r3xz3/+E927d8cFF1wQ9G4RJYU33ngDAwYMQCQSwV/+8peY2clGDz74ID788EPXWSW2bduG1atXOxprTGQllJFEETt37sTu3btN/9C1adMGH330UQB7RRROX3/9Nf7v//4P6enpuO666/Diiy8GvUtESeP666/H9ddfX2zjUFehQgW88soruOOOOxwHOvLz83Hvvfdi9uzZHGpFyoQykihCT5Jqlmm/Vq1a2Ldvn2llD6JkdMsttyA/Px/79+/H3LlzkZGREfQuEZGJCy+8ELfddhteeOEFR697/PHHMWTIEDRv3tyjPaNklLBfN/Q6tWXKlIl7rmzZsoXLuK3NSUREFIQuXbqgS5cujl4zfPhwRhBJuYS9o8qVKwcAcfVpgVOJoI3LFLVnzx4sWrQIWVlZxS5DRERE4XLs2DFs2bIFXbp0QdWqVX3f/rZt22ISt6tWtWpV09nvQUnYRqLezax3Oxv98ssvyMjIKDaKuGjRItx4442e7h8RERF5429/+xtuuOEGX7e5bds2NK6ThaPwLnNg+fLlsX79+tA0FBO2kZiZmYlq1arhq6++intu1apVaNGiRbGv1csV1cffUA6NvdrFQqKl6/eaLL/XbEGH6xUlsz6Z/VyBobgYk11tV6Yi6yHF61VxPVRfU7PrYrYN/XhfxlBcb3ItnJ4PN8ch+pqKKHCx9lhbTg/HzrJZ12GLYdsq9gMASuOw6eNDMRKTMd7x+n5DRZNtbDFZ0uqMW72j7aiu925dz9ia2XEYK6GY5RI0Py9DMROT0c9m3SJEz4/McZtxE/2y+pT0Q/w5Xo8TuBE7Ayk7uGfPHhyFhr+hEhp70Hxaj5O48ehB7Nmzh41EFa6++mrMmTMHOTk5hWlwFi9ejA0bNmDYsGHFvk7vYi6HxqiAlp7v53GL54wpU884/e8uw2MVLF57hsVzbuQbfq9hsdyvDvfFrkOgNCqhqsB1UD3VQj/3xo9imW24T39rfb7tWO3zesPvVl+H9O3/HZVQ9/S1MC6vH9sZhobRgdMNqDWG5fQh88Z7WDWz86zvg+j29WOTuWZGZyhoMJbBgZj/V0IltITYJIQTNp8GZVDP9X45v5qqGzdGZp8+VtraPC/+KVoJFdASxjrTTmtO6+fF6lPdyFgS1elxm8m3XyROZYvnRK+z8RPK6b1h/MITew6CHCrWGOXQEqU9WPNvUP8lS05oG4kvvvgiDhw4gJycHADA+++/j+3btwMABg0ahIoVK2LEiBF4++230bFjx8KKK5MmTULz5s1x6623Brj3RERERIkttI3ESZMmYdu2bQCASCSCd999F++++y4A4KabbkLFihVx1llnYdmyZbj//vsxfPhwlC5dGldeeSUmTZrEWc1ERETkgVTAk0iimiEsKoW2kfjzzz8LLde4cWPXibMPAtDnRnuZNU60S8tpp45xeVXdZjo9sG/WDWr2mIrOEDt6R4Wqa2XW8WF2Hq2ui5vz7rRr2Xi8+mtVn2+9W/qwyWOx27NOrbrG8tnfmZ0DfXt2o4SttuFlN7cVvetdptvZ2GV8AFGcQCn8anK3q+ja9pboO9RNt7TMwIyg6edF9XGLfhoYP61UvFPcfBKrOAeHAYi1D0heaBuJlDzOQd+gd4FOu5jXIjR68lqESl9cGvQuUGiUgjeRRDfjRr3FRmLAZL7PqY4emn1XNZuUYKQiomXVSBT9rio6QcN4zvTvsk1s1m123Fbfh+3OiVWU1sy+Yn53ul2R7+6XFHMtzF4rE9HV99XN+VPJ7P0n8746YBJpNUb+fjj9/LkmE4CKKtpIVBGlLDo5Rox+RlTHaWXuIC8nx5grvpEYVPxaZ/wkcRNVFBH0MYaNV43Ekx6sU07CluUjIiIiIu8wkkhEREQkLBWnoolerDdcwrdHJZDTiQ9BBfaNHRV6B4ZdljariRRe5f4zal7k3+L2RYboZAynHTh2+6l6wozqa2Q1kciu+9+qs1Amb6WKY5SZEGZ2zXaZdNgU18Ucbqo+rVR0X5vdGf53QYeP6N3u9FNS9aQXShRsJBIREREJ82pM4m8erFMOG4keMfvOvc7wu9lkCdHvZ35MWLFi9h3e7DGreIGq7/x6lM8sciW6DeN1kRlK7/T7terrGJT1Ns8HHd9xOlHIKEwxE7tJMSKMaXbcTWIpyu4u1s8gI1G/k6lAEgYqIsqJfg6SBxuJRERERMK8iiSGrwgIG4ke8WOkjmjiA7MavOvMFhQkmrZE5vuh16le/KZ6n1QlUnc6hs/P9DSq2R2r6LGFKZ2zTBJvp2lx3EUhwx4vV5GeXiay5mcaINXv3mSPCCcHNhKJiIiIhCVPJDERp9gRERERkccYSVTMqnPF7DljV7DeeWDsztInZshUO1lfzO9WzIabO6U65Yqf9aFl+D0kW8W1CmvHkdX5U1HD2809pfq+VsE4qUVmMovT18hVcDEK+g5UXZHej2N0WgfZzeAKP8jUcw5KKryJJIavScZIIhERERHFCV+z1WdWdXvNvlu+afi9k8NtmaXAWSL4WruEzl5FkVRNkNCZfX9VXT9XJuWJyHqLo29P9Puw6nrIotfKLp6hIjLpB6+jjInKKlG3TP1nM2ZRyJIZXVQRefOjBrabqKIu6OhiIqXF4ZhEIiIiIkpiSR9JJCIiIhKXPJHEpG8kina1On3eLliudz2r6hYTrWqiojtTRTekH12efuS9C3rCQnFUdGipGgbgVfe/FZn6z35QPcSCAG+7K0tq9lAjpzkjvRwiEPba3MnTSGR3MxERERHFSfpIoldVQYLiZ8oV0e2HMZJjJBMHML5WRaTMzfkTveZBXwfV50pUotyTfkQXZVLl+E9moofVFfYyyijyaVKS61iX5GMzYiSRiIiIiJJY0kcSiYiIiMQlTySRjURBXg1N9rvLWt+e6u42r45DdZ5GL3k1QUPm3IaxWxUQr1pi9b6TOc+qcyx6de1FO+zcvDes8ikaBd8tbXd0Trs1w5SPTyajqRkV1UtU5YdUnRdSP7aIovWRCDYSiYiIiIQlT1m+8O1RCIh+d/IjtYdXdWLtvmeKRlP8rHph9X1UNNbgRzQyjLV9jWTSw3gZ2XUas/DjveH0/PiRdslMmCLuxios7qqvOOVVJRNRYUyBoypaqiL1T7JMZimZ2EgkIiIiEpYKb8YPhq9JFr498tE+ACkK1iNa01fV+vygYqSOV+MfzYh+P7VbzqsoTFDRRS9HXDmNCQQd4XLDz3tYhpfnVh+76GZsoh5V9DaiKBOdCtMYvqJUReBUHGOY/iodDnQvkk1SNxKJiIiInEme2c3Mk0hEREREcRhJ9IHqQH0QtXBlhL2OblCCmuRglCjdqUFTNdFLF1T1GRky1VqMk1nMOO+OVj0BQlVdI69qPKuYnBOm1D+JjpFEIiIiIkpiSR1JPFoOiJjMXEnL9X9f3FA1GSLsKVt0fqTb8TNVjig/ro8f9Z/9SNPiZ5Rd1T2n4vr6UffZSGYyixp+pFXxqsaziogikJjpZFTU4w5DMu3kiSQmdSORiIiIyJnkaSSyu5mIiIiI4jCSaCI37dS/idLtbKSiJq7d86pr5pp12wU9rDpMFSzCRNUkJC9rEgOJOTHESHUXdNjvYbl8il5VXAn7J5OfvMoFmagYSSQiIiKiEFm9ejWys7NRpUoVVKhQAeeddx5eeOEF02VPnjyJJk2aIBqN4plnnnG1PUYSLegRRVlmEUk/o5Vh/94X9HdzO2GsLJLokTJRKiYSeRUV95vMpJwwTsgyUlORxc3ROX13J3IamTDsbyJOtjGTCm8iidZNso8//hjZ2dlo2bIlRo8ejbS0NGzevBk7duwwXf65557D9u3bEYm4n+zDRiIRERFRiB0+fBi33HILunfvjr///e+2y+/evRuPPvoo/vKXv2DUqFGut8tGog9URSTDIoxRLNXJjmX4PRYsEdO+OOXVOZW5l4NKEi+zz6pT5cgk2Pa2nrMfVNREdioMKXDcjHLXid5tYY84+j8m8fXXX8fu3bsxfvx4AMDRo0dRrly5YqOEf/nLX9C4cWPccMMNUo1EjkkkIiIiCrHFixcjPT0d27dvx7nnnou0tDSkp6djwIABOHHiRMyyq1atwpw5czBlyhSprmaAjUQiIiIiB/RIouqf4iOJGzduRF5eHq666ip069YN8+fPx2233YaXX34Z/fv3j1l24MCB6Nu3L9q0aSN9pOxuDpixK7qkpNwR4Xc3tdMOIdUVXOyo6EL1oxa0aBerl12xYZyE4UfFGjMyQw2CPn9m9ZztuqDlUuWY8Sp9Tknm9FPfTfocXpeicnNzcezYMdxzzz2YPHkyAKBHjx44ceIEXnnlFYwbNw7169fHzJkzsXbtWrz77rtKtstIIhEREZEw/yOJ5cqVAwD06dMn5vHrr78emqZh5cqVOHwH1N/LAAAgAElEQVT4MEaMGIGHHnoImZmZSo6UkcQQMZvgYpU+x0yiRCPdRCD9jD76PSnBz+iYqolHQSfUUDGZJaiIdlATgIxU33Mq6jmbRRftlpOLKjqNVAV116uIqKlKDi7zrlFRv7pkmIt/YS7+FfPYQRwpdvnMzEysW7cONWrEnv/q1asDAPbv349JkyYhLy8P1157LbZu3QoA2L59e+HzW7duRWZmJkqVEk/azUYiERERkbBUyFZH6YtO6ItOMY+txma0wv2my7dq1QqffvopcnJy0KBBg8LHd+7cCQCoVq0aVq9ejf3796NJkyYxr41EIhg/fjwef/xxfPPNNzj//POF95ONRCIiIqIQu/baazFx4kTMmDEDHTt2LHx8+vTpKFWqFDp27Ihzzz0XPXv2jHnd7t27ceedd6Jfv37o0aMH6tat62i7Sd1I1CoC2ulUR1GTHosCm54Ps9eo5jTHokxOxrB3VfuZDzAodp1Kqruj/TinYepiJbVkupZlciySG0EPEAFKTjez/3kSW7Rogf79+2PmzJnIy8tDhw4dsGTJErzzzjsYMWIEatasiZo1a6JFixYxr9O7nZs2bYru3bs73qOkbiQSERERORNMWb5p06ahTp06mDlzJt577z3UqVMHU6ZMwcCBAy1fx7J8CthFDXV+RA+DYheFDEuk0e67qIqomJuol9n39LBHz0TPlYqIo5fnx+0kDFVxDZlqLTo350LFvS4zAUg0GnggVIk0/E6rouIuU50SRh+zts7wmOgd6DQiKXr8THdjJyUlBaNGjXJUQaVOnTrIz893vU02EomIiIiE+d/dHBQ2EgU5HbMoGnE0W0dJjlYmCrtIj+h36UQej2f2/T+MdbuB4BNDJ/J4WdUpcMwYo4zhiiqGmerImnHG67pilzIn+olXUsYcko6NRCIiIiJhyRNJ5Fc6IiIiIorDSKIg0Yktbpcv7rVh6nrWJ7aEZQJLcbzq+gtDAgnVVTJkOoeC7mINuovZSOYcBDUUQeb8WXWEmq1XVRdz+KurhLG7Vb8iTruYAWC9yWNmd/sai+0a6ftgNnjH+NgXJq/Vnz9m8pzfGEkkIiIioiTGSGIIuYke6tHHoBJ8i9aY9jMKGdZJFirIpC1RUfMYUHNOZWpkOz0Os+VVnQunwjCRySyuJnMOnL7WnwTabiZ/eDVJQ0Uk01jG7U2T9ZpdBbNooK6xzfJW73Lj8YtefX3yjHGfzd4Nl1isYz+AnwW35xVGEomIiIgoiTGSSERERCQseSKJbCQmIKtJMUFNerGq1mLsYvZz8ktJ62IGvJts4DfV3a1Fj83sPBkfU3Eugrq/ZLYrc/8Yu4d3ne6EOtdF/kPRbmbxSSoy3bhW06/MBqzITEwRPfv68RjfJc1P/2ucIGLsehZZnyjRO8zunFlR/W4kr7CRSERERCQsmNrNQQjfHvmpCoDyp383+wLktLCtIjLpc+zWF0RKHbMoY5jqRItePlV1i2WiaKIpcPz4bp4oKXCcpmvxktNr7+bcOj0mY2yqg2CUr7nJpIrf99WsHnD8Xp1A/AeduxQ3TusaZxTzu04/NrOzrzrZkdnkFKtt+HHHuqktJcPqmBhlDFpyNxKJiIiIHOGYRCIiIiKKw0Zi8pDpZjZbPkQJ91V3WyeaEF2KGGb1BZyy64Rx2gEnSlXXsupzoK+viclyqs+F03Mgeox269WPo4ahC/BXiTOodzM3NzymTz6xv7+stnup5WutJq6YdUEbWXdHm3VburnqoudU1fac8PuPjX4uRLud7e5ip/vMCS5BYyORiIiISJCGFGgeNJ80pChfp6zkbiTuxe8RY1UhEhWZEjykujJL0WhlmGpN2/HzUqlK+WJVhdUYRQvjd27V58DuMZ1+nY3npLnZgqcZ74eOFs+bxVZkjlH0PtxlshVjjQyzGhpW63Zzr8jUENejlW4qruiRRvEJLmJ7aIxgytWHFiEzGcTNp1UQEc/iqPhDG76GVEmW3I1EIiIiIgcKkIICD5pPBSFsACd3I9GYAkcVFWEpH4adBJ0Wx4yXaW/MkniHNNhryez7v1n0ymocnpvoj+rEHzq7fbFK12uMphYdi2h83RrEE732SwX3SScaI3ITcbSKYJot53S9gL/pjIzJt51GFc3GLsqsT47TqJxoKhwvyaQN8ntfKUjJ3UgkIiIickBDqieRRC/GOcoSq6NEREREREklfM3WZGaV4N/DvlGnk1m8Sq1jrMKiouvZrqqLKK+6WkWZdcnus3nejNlkDbPbymzig9WEGSOnx2vs7NInXzQu5nmdWWdX0eW8HJavImuWWfVgM2GvP65qOIPMZBazmtH+To7xk0y9ZDNuUsyorrzuNL1OvuLtO5dMYxIZSSQiIiKiOIwkqib6Rc9qObuSoQqiim4mqyRycu76pyOTYU93YxeF6XT6X7vbzCzti+ixr7d4zC6ypccEjJNFRNPNFF2Hl1TXczZ765olq/bj/lORqFyG8dw6r68dfNzCeQQx6ITPqhJYO73zw5hoyx/5iOKkB/dqfgju/6LCt0dEREREFDhGEomIiIgE5QH4zaP1hg0biV4VuTWS6YL2iGjXsbFbWv/dq25nL/Mk6kR77Y3LWVUv7WT4XV+fzK1kN1FDnzhi15Voth6ZKhk6u44rs+0mWherTHep2fEbu95F1xfUhBXRayW6f0F1SPqbJ9HIbXUTL/MQil6toDLHOq0PTX5iI5GIiIhIECOJyaKKh+s2finTR66blX4IKGSgeuKKTNUW0QjiobNO/dtgh9jyjU3Wa/yuKppdyOr77RKxXTElU+nCuE8yaWesyFR8lYlWylBdT1lFJExmIoxRmNLhOI05yUQeZVLqGAUfXZRJMWN1Z/tdC1oX9ISd4CRTI5ETV4iIiIgoTnJHEr1kl8YmYF7VbjZGBc2SWeupaIzflc1SrphJPx1BtPvuq293czH7JcJuG2aXcvPp7dY32Zbd+qyyHwVF1djKoKKKOhUjnYJKJyNDJtqsWlD1od3wLpm2TGw+6CtIRowkEhEREVFSYySRiIiISNBJeBNJPOnBOmWxkajzYwyuzGh0RdkJrLqWbbtkTz+vTyABfu8C1rt47eolbzbpCrbavnFbOjfd42b7JZNyR78cZuv1O5GEH4kj/OzscnP+vO7CDEPXrcyQBJl7JFk7OvVuZyCsdZx1ohNdzCgu5UUlTsJ3N2/atAl9+vTB2WefjQoVKqBx48Z49NFHcezYsaB3jYiIiEoYfUyi6p8wjklM6Ejijh070Lp1a1SuXBkDBw5ERkYGVq5ciTFjxmD16tV49913xVcW1Ax+m+hi9MfiX2qMhJlF3ArXYfMluKDRqX9zDdsSTZhddLsyk2CMUbkw1om2i5KWZDLJqlUk8bbjVUoWFew+WpyeF5l4j0wUMtEjinpaHDepcIxRRRHikUc/qjmIEk0K5hUvE4qTWwndSJwzZw4OHTqElStX4txzzwUA3H777cjPz8drr72GgwcPolKlSgHvJREREZUUJ+FN1C+MYxITurv58OHDAIDq1avHPF6zZk1Eo1GULl06iN0iIiIiSngJHUns2LEjnnjiCfTv3x+PPPIIqlSpgi+++AIvv/wyBg8ejHLlytmvREWUXzAJnrErVrQ7Ve8KNtvGIbN1NDf8vsZiWyb9ToXbKmZ7ImyPS0GPhqocj2HsPlZVO1e0LnWyClNeSlVVRkQEVeVHhurzY1aNxSiYyixhql7iZjKL6m7zcNdzTqY8iQndSOzSpQseffRRPP7443j//fcBAJFIBCNHjsS4ceMC3jsiIiKixJXQjUQAyMrKQocOHdC7d29kZGTggw8+wPjx41GzZk0MGDDAfgUmX5T06FRMVMzqa7fZcya1mwuMtZudfo13E/KQCZPYHZNf+2FDv0aqalGrqD5jjFDKpNmxEtTQctU1o+0iQn5MenHKj4kcXkUXwxA5VRHFDVNFHzNmE12cT2YxCjq6KEp1RNTsXXZEwXrlJFMkMaHHJL755pu48847MWPGDPTv3x89evTA9OnTccstt+Dhhx/G/v37g95FIiIiImnLli1DNBqN+0lJScGqVatiltU0DVOnTsUf/vAHlC9fHlWrVkXnzp3x3//+19E2EzqSOHXqVLRs2RK1atWKeTw7OxuzZ8/GN998g8suu6z4FawbCqSenv184vRjGX1R0Kiv/M41t3lM9RdDP75OqwxDqIxUwj4qKDwG1KPoYpiEqY6u6NvAq8haIo7RCwOzkWJOz4Gq+9As2hymCHQwibhVpZORGUQuP05xLr7CXHwV89hBHHe9PlWCjiQOGTIEF1xwQcxj55xzTsz/+/Xrh7lz5+Lmm2/GwIEDceTIEXzzzTfYvXu3o31K6Ebir7/+ioyM+I+mvLxTp/rkSZsJ5U0mA5Vanvo9UaL5RERESaAvLkBfxDaGVmM7WuGJgPbolKAbiZdeeil69epV7PPz5s3DnDlz8N577yE7O1tqnxK6u7lhw4b45ptvsGnTppjH33jjDUSjUZx//vkB7RkRERGRN3Jzc5Gfn2/63OTJk3HhhRciOzsbmqbh6NGjrreT0JHEBx98EP/85z9x6aWX4r777kOVKlWwcOFCLFq0CHfccQdq1nTQ2WC3qEx5TKfbU9W3lsjjnxUIQ9UWmZrR+mu9mvwCJHY94DBNXhA9FzLHreJjQaZ8vB2ZCT0q9kvVR5tMZRad+i5mma5bFelkZMYHhSm9jxon4U0kUTSZdr9+/XD48GGkpKSgXbt2eOqpp9CqVSsAp/JHr1q1Cvfeey9GjhyJ559/Hrm5uahbty4mTpyIa665xtE+JXQjsV27dlixYgXGjh2LqVOnYu/evahbty4ef/xxPPjgg0HvHhEREZESpUuXRu/evXHFFVegatWqWLduHSZNmoT27dtjxYoVaN68OTZv3gxN0zB37lyUKlUKkyZNQnp6Op599ln06dMHlSpVwp/+9CfhbSZ0IxEALrjgAvzjH//wZuVBjUb3Mizi9Aup6L6o+ILoJoeraLhBwaQYVRNYnCbxlolGivJjMkvYJ3d4FWVLxFQ5MlRN6JGJcqs4BzJJt+VS4HiFtZFVCWpMYtu2bdG2bdvC/1955ZW4+uqrcf7552P48OH48MMPkZt76o/Dvn378OWXXxZOcOnevTvq1q2Lxx57LLkaiURERESJ5AvMxQrMjXnsKA46Xk/9+vVx1VVX4d1334WmaYWV5urWrRszA7pChQro3r07Xn/9dRQUFCAaFZuSwkYiERERkSAVkcTW6IvWiE23twWrMQatHK/r7LPPxm+//YYjR44gMzMTAFCjRnwMvnr16sjLy8ORI0dQsWJFoXWzkWhGtI9EdXlJq+2q7h1Q3SelunSn6j7PgGpGJ2JVF6/qPidiXkEVXdBhP+4w5c0syfQuaLluZ1WzEWX+eAVd78l5tK2k27x5M8qWLYu0tDSkpaWhZs2ayMnJiVsuJycHZcuWFW4gAgmeAoeIiIjIT3okUfWP3ZjEPXv2xD22Zs0aLFy4EF26dCl87LrrrsP27duxePHimNe+//776Ny5s6NjZSRRJ/MV3016HKfbS5Qxx2HPduBmcoyJMKTXCYKqqJPVLezmrehnhQ0VaYP8mMzi5lx4mSLHLTf3XBgn9OiMk1rkoop+fsCqih6q7nJKLtdddx3KlSuHiy++GNWrV8fatWsxffp0pKWlYcKECYXLDR8+HPPmzcPVV1+NoUOHIj09HdOmTcPJkyfx+OOPO9omG4lEREREgoKa3dyzZ0+8/vrrmDx5Mg4dOoRq1aqhd+/eGD16NOrVq1e4XPXq1fHFF1/ggQcewJQpU5CXl4eLL74Yb7zxBpo1a+Zon9hIJCIiIgq5++67D/fdd5/QsllZWXj77belt5ncjcR0eNfv42V/kuoJM15x2r9TgnsgVOVYNONHZRYzXnVNykz08LObUabrXfVoFDOqzoVM93qYqL43VFRmUTOZxQ+KxukUcjMBR39XHFGwfTknIV5n2el6w4YTV4iIiIgoTnJHEqtAriSlFa/WayQTbghjFNLvSS9OQyM+THSRiTh6mRZHlOqok4qJHl5FFxM9suYHFdfPy/OsYsKTsTKLTFQxcSjIJ5bg3UZBjUkMQnI3EomIiIgcOAlvGolh7G5mI1G1RAkv2H21DzrSaPXVPqgvoaqH5Zhwk7DbjFV9aC+jjFYxBtUpc8KYmNoo7KlyRKkeZ6oTPTbVZdzDxN+xiKo/1GW6y+xit4kdaSxJ2EgkIiIiEpRM3c2cuEJEREREcRhJNONHv4UfE1tkuKki4xdV5UtlWN0jiq6jV5Ndgqr7rKpaS1jSw4heZlWpcsLQ9RxmMufZeD+EpTKLPafVS7ws2yVa8d1pd3Q4u50ZSSQiIiKipMZIop/svt46jS76MJEihkh0Maga02GoGW01UyFMUWIDqwkuRkGl1PGTH/Wfw1gb2Y7qtEZWtQBURUtLSgJwazIfdKJdRaKVG0r2mS6KkUQiIiIiSmqMJBIREREJSqZIIhuJYScaxQ+qi7Nor0UYJreYjXn2Yxy01bVSPDTAy1rQfghjDkGr+VCqu6D97pxTsf+q8hVafUSomqjjx/kNprpKOCdyqJcsxxl+bCQSERERCWLFlWQX7tn34eZ0PHRxz6uQOLksQs9sgouKySx+poexW97q7a4qRYqKqjNhSoVjFiBXNTnH6fEmx9QJVfm/zP7IWZ1pNx/YIZ2tR46wkUhEREQkiGMSk0UVWIcFREMGYY04yoxTtCrC65RdKEA0y4IKbsJAqq+vgvGjbmo8myXnVlEf2k1EUXXUx+rWySjyr3F5N1E5P1LlqObVPquOFfkdJZU5HwdOJwdxOjZRrl6zTNRQhpcfzmH9A0pAsjcSiYiIiBxgJJGIiIiI4rCRSCWX034+P6u62PU1hSG9TgiJ1ni2eq3fKXW8qojhR8lxP7uZVXe/itasTqRaxn5OWAkm7c3vTuDcwt/Nu62tBhaIduu6eceI/nFQsQ8HBddBKrCRSERERCToJLyJ+jEFTknl5ktbIqbZUTmZJZFYhVJkrl+ynUcflLRgs6rk0jK3sNNJL35E9txsI6iIqPuJKvFXpozwH5Z1NstZffiYbWO94ffGRbZlJ5H+yFFRbCQSERERCUqmMYnRoHeAiIiIiMKHkUSviEbiw5C3T5RI96hoP5CbrlY/8ymSLdUVV8xYpZSU6db0Mx9fGCqB6J2Pbo7bq25mN/siug2nH6uiE1Lsu47VfTjHTlL5wWQJq6MUTU5rpH+wmp3l5iaPiX6IuxmPZbX/RwS36x1GEomIiIgoqTGSmCjc5KTwo1JIEETLiIqGKmQik8Zr4fR8i1ZesTvvCTgBxumtZHaIMnWfnQpq0oNMxFNm0ovq6KHd9s1jV6eOYI3Nq1VcmwM28RI90ngC8fmmfjC89lyT563WLRrB1KOK4pNgZD6YRMmUjrK7auGe7HIS3kQSwzi7mZFEIiIiIorDSKKZMI19kym6mohpdpyyCjKoyh9ixe+6zmbPS6QmCqp2s9muOl2fH4Ftp287N/vkVWobs1FkbpKNuwluO2W2jY9N9tZsuzJvQbPzt+b0v8bzp0cD7bZlF5F0S67esygVqegVFKYHEPY/XhyTSERERERJjZFEIiIiIkHJFElM7kZiJVj39fgx8cGOilHZfoxhFuXVJAuza+BnnhNZ+nkx9nHp1yosE4agJu0N8PshbU77/bH6JutWcbuonrSharKGCvotYnb7u3mri37cOO2CVvX2FL0frPbl12J+L8qrj0o39Z/1CTPuup1l6jirGHvlZuad1WuOSuwLOZXcjUQiIiIiBxhJJPKKV/WfEylqaEaPILoJX/iYAifXEPlTEVU0ix6aaWzzvB7naGKyvF51VrTqrR3R022V9HuN4Xf90rtJLG7FzbwtmXlyTpOce9kBIxO59Dpwbza5xU10UY7TiSGiecfcCFFXiaA8ACkerTdsOHGFiIiIiOIwkkhEREQkKA/eRNjCGElkI1EFLyPxKng5gt3t6G5jD4PT7lKZ1xoFfa3MzrEPZUTc5Ea06lq2202n2dfMLqnopVpX5N/itm9G9FZ22hW7xuZ5Fd3XZmRGYLgp8KRz85YMU41up9v1sxqPWcUXuRyKbmY1qhjbE/SHL4liI5GIiIhI0EkAEY/WGzZsJKrmNGzid31hFVTkhlA12cKriTB2VOfHsAs36RwepzFqqEcDjZNPij7nxsazfv89fUf885tNtud0uzIBVhVvP6N1Jo95VRtZht1Hhh+TWYquo7j1JGD58UIyUVedcTKL00ksZtFFI3f1nq34mUdNVbcRucVGIhEREZGgPACaB+sNYySRs5uJiIiIKE5yRxK9yK0n2i0cxrx+KvpNwk6m215xDsPojzavPd1LVNDIxXZPKzD0RB06/bvZxBWzLmgn63a7Hjd5F606nWS6op3WfZARhreafuyqJ/aIrsdNXsqwZ9SzOkeix6t3PavKnWjXHa2TmwCTXE7Cm0hivsPlx48fj1GjRqFZs2b47rvvYp6bN28eJk+ejB9++AEpKSlo1qwZHnroIVxxxRWOtsFIIhEREVECycnJwYQJE5CWFv/N/Pnnn0efPn1QvXp1PPHEExg9ejQOHTqEK6+8Eu+9956j7SR3JBFQP/FBdYRQdaYA/atuE8Nj+jZEv+oGVQvaKk+GasbjEs2JoZ9T48wGs9ecPn8Fbs6dgnNgFgH09dx6KAF32THVEU+/Oz/8jJyGqaS70yijWWUWM6ojjvYRRafVWkqePDiP+olwciWHDRuGtm3b4uTJk9i7d2/Mcy+88ALatGmDBQsWFD7Wr18/nHnmmZg9ezZ69OghvB1GEomIiIgSxPLlyzF//nxMmTLF9PlDhw6hevXqMY9VrFgRaWlpKFeunKNtMZIYdvrXXlURRT3a5ffYPJ3TUM++Yn4vymyfzKKlomoW87vIdv2OyMpEwxUP8iqwGPdoR0VqHn0dMil93JwSp+P7jFSkmBG99GYJRdzUWlaRqDvsw579HAsZhjGq4R+TqF+F4PezIAWeJEos0GAboiwoKMCgQYNwxx13oGnTpqbLdOzYEe+88w5eeOEFdO/eHcePH8dzzz2HQ4cOYciQIY72iY1EIiIiogQwdepUbNu2DZ999lmxyzz//PPYs2cPBg0ahEGDBgEAqlWrhsWLF6NNmzaOtsdGIhEREZEgLQUo8GCwnlYAy0jivn37MGbMGIwePRoZGcXH88uVK4dGjRrh7LPPxpVXXonDhw9j8uTJ6NmzJ/71r3+hXr16wvvERqJOdWL3sCeKd9O/4bRL1Oq4jX1XnU7/a1Z1xPg+sJpcYdf/ZfW8WVd0Y8Pv6y3Wp3o0v4puZ+P6jBJwnLmb1DxFXyfT9eyUqi5Zr5i9Jd10q8p0rwfNzTWSKS8vQqaLWaZaC7lTkAJEUuTWoeXNhXZybpEHD1q+ZuTIkahSpQruu+8+y+V69+6N0qVLx0xcyc7ORoMGDTBy5EjMnTvX4tWx2EgkIiIi8lGkVF9ESvWNeUzLXw3tWCvT5Tdt2oTp06fj2WefRU5OzqnlNQ3Hjx9HXl4etm7divT0dBw4cACLFi3C9OnTY15fuXJlXHrppfjiiy8c7ScbibowRvsANRNWjBEks6/OZhEmFRmLzSZU6I81l1iv3TacsotWOg2XGJeXmTDjNPKnesS7RDTcmGbHzSSWksCPZNVhn/xhxU1nhtPJNnbClCIn8ch0V8h8SAZPSwE0n1tPOTk50DQNgwYNwsCBA+Oer1evHgYPHoxrr70WAJCfH99vnZeXh5MnnRX/YyORiIiIKMSaNWuGd999N+7xkSNHIjc3F8899xzq1auHGjVqIBqN4q233sKdd95ZuNyOHTvw+eefo3379o62y0YiERERkahSp39Us0irU6VKFWRnZ8c9PnnyZEQiEXTv3r3wsf79+2PGjBno3LkzevXqhUOHDmHq1Kk4fvw4hg8f7miX2EjUhX2iiSi7aP86k8fMeg2c5gbUGXMT6tsy61o2I9PVKlMxxMskaDJ5LsPUlyjRrW9W4UXvgjat/mKyXCJzc+mddlGH6VbxQ9jrOTvdP1V5ElXXfXYuqHJcyS0SiW1dvvzyy2jRogVmzJiBESNGAADatGmDv/3tb7jkkkscrZuNRCIiIiJRpQCUDnonTlmyZEncY9FoFAMGDMCAAQOk189Gos7L6KFopRA91Yox/YrV10qzNC1my5uFJWTGCrupKBIEswimTL1kVZNjrM696mtlpDrNjujkJpPl7CKIRZeTiSg6rcKiujayKBVVTIDgaiOr2n+d08ksdhIlvY+K6LCbtDjitZtFiX7gePmhR7LYSCQiIiIS5VUkUfNgnZLYSJSJDulfdsy+xoumUjE+1sTkeVEyaVp0qgdPqa47LcqrUIqqcatBXSud6prRossl8FhfL6OLYUq5IpNiRnUELlnHW6rmdJyiHlEEEqGeM3mNjUQiIiIiUV5FEkNYMMeD6oNERERElOgYSRRNua9PglhjspxdxQ59gomq7javRtHbdWv62S8W9j4mq5Q7otcnDN2vXtXtNiORpsgqjY4o1fWc7Xbd6UQJIxWTQGTeQjIpZsJev1qU3YgOt3WfRc+n6slIMpNZjMS7oGU+NIIaqyQoFd7kSXRWDMUXjCQSERERURxGEhvbLxJDJopnF0kxi1YGNTkgjBlqVfAy16vTc1ZSErgHRCa6aIwqFqUiygiomQRi5DQqpyoSJTNpR8VkFpnjCOPHmJsorYrocHAJtksgr8YkhjCSyEYiERERkahUeNNI/M2DdUpidzMRERERxWEk0YpdTWOvBvOr6tJ22oUpui9O1ytabaS41zh9rSi39anDwM05laGiWosPVFRoKYlKSs5Bp8ehanJRWMhUpklMfn/QCfKqu9mLyTCSGEkkIiIiojiMJJpxWkUpEFEAACAASURBVJvYTXTFaht+V8Twk8wIdj9LfNrdA15NenEzgUU0W4SK8+f3eXHJOKklTKlyZN6SQU8CMXI6KUd1WhxVEbWgK8zIbD/8EcQE6X5wg5FEIiIiIkpmyR1JrGf4XeZrmWjkL/xf/cSoGPeoKuVL0PWhvUyjIzP2M1GoGPNqQ2acoupUOSpqQCd6smrVNZ5VCCp5uNNtBfUnRK6Gs0zXWIjGIRoxkkhEREREySy5I4lERERETiRRJJGNxCan/1UV1VbdH+DV5BgjFZNjnPaj+dDNaEtFV7XZOVbVBW11/mTOlZc9OCq64RXfGyU5HU4Yu25Fqa5ZHZRE2Wc3tZvVc5p3zOzsVlK0LySCjUQiIiIiUV5VXAlhiyyEu0Smwj7pJeh0O3bpXfz8uu9ldFEFu3OhItIY9nMQIjJpUFSkw3Hz0eLV213mLRtUeh8Zfm7LSI8qikYUT+D3nFJyk1isqK5UQSqUiIkrq1evRnZ2NqpUqYIKFSrgvPPOwwsvvBD0bhEREVFJo49JVP3DMYnqffzxx8jOzkbLli0xevRopKWlYfPmzdixY0fQu0ZERESUsBK6kXj48GHccsst6N69O/7+97/LrUymRKRov0hIUz6FJjG+TI5AM350q4ryo+a33xN//CRxbxirr4gQnehilkNRRYUWv7npphW9BEGNQnHale7nfspsS6ZLXdVkFWPXc1HedUWHDGc3J4bXX38du3fvxvjx4wEAR48eRbly5RCJRALeMyIiIiqR2EhMDIsXL0Z6ejq2b9+O7OxsbNiwARUqVMBNN92EyZMno0yZMu5WbDUJQlXt4TBGFd2M9vYq+uhHpCyoCLAf1Vp0XtaCDorqqj3kmaBqI4d9np8KTqOlBySmIPiTMiforiwyk9ATVzZu3Ii8vDxcddVV6NatG+bPn4/bbrsNL7/8Mvr37x/07hEREVFJk4pTUT/VPyEM24Vwl8Tl5ubi2LFjuOeeezB58mQAQI8ePXDixAm88sorGDduHOrXrx/wXhIRERElnoRuJJYrVw4A0KdPn5jHr7/+ekybNg0rV65U10hUnWfP6frC2vUn0tcR9gokJYXxHNQo8m/R50WEaeKPkcfX2jjRJezVWlRXXDF7qwbVdZsolUycMnubigp7N7o/+RRDgGMSE0NmZibWrVuHGjVi32rVq1cHAOzfv996BY8OBSoWKfGT3ffUDxEREQVmLj7AXHwY89hBHA5ob5JTQjcSW7VqhU8//RQ5OTlo0KBB4eM7d+4EAFSrVs16BaMmA81aermL6rj5Wh2W6KMfifTtvpLLRJ/sqrm45UdaHLvnnZ6XMNS5Fgm/JFCtZxXpV+wuS1CVWfyQyJFOpyXvZT4m3JwnpxNWxKOHYkfSF39GX/z59P9O3eWr8SNa4XZH+6VcEkUSE3riyrXXXgtN0zBjxoyYx6dPn45SpUqhY8eOwewYERERUYJL6EhiixYt0L9/f8ycORN5eXno0KEDlixZgnfeeQcjRoxAzZoOvjupTuQcBl5FwGT4WdPX7mt6mKKLVrdqSc4MYXc/uE0XFFCycWOCbdHE2irq99rdjma3ph+1kf1IUh1UDWq340FFt+k0ylgcr5JuuxtzKPpGDvoPlY1UeBNJDGGLLIS75My0adNQp04dzJw5E++99x7q1KmDKVOmYODAgUHvGhEREVHCSvhGYkpKCkaNGoVRo0YFvStERERU0iXRmMSEbyRKyYB5/F5FH0lYu6zDWE3Dzwokds/7OZFDlB8Tf4Ji1oepeiaCD+9FFTWb7XbT6nb28jb0Y2KIn+luVHfrO7XeZH12o2C8SpXjppKK6skp4fpjREUldyORiIiIyAlGEklaQAPnhYVxUksi8rset1dRV1F+TtgpbjmRYw/Te02QmyxOTiNMXkbs/Jikogsq7Y3xVndbD8HsdTLXVnXUUF2kUD/iNYbHmguu2+oNzD9UfmIjkYiIiEgUI4lEREREFIeNRPJE2HMxivafeBXt9ypnnhP6NXJzfUQnBanospWZzKL63rPrcldxvD50r8tUWtHzI7qZwKK/1vhSFRNhjETf2mGcpCKzT266wEX3z2rdZvts1t277HQ9iw6G5w6cfkxVHW2nk1PE6y+L7k0nR9u3V4JrQocQG4lEREREohhJJM85/Yormh/Djwil1Vdt1VFGv9O/qDh/bmYH+JmaSFVEW0UZDzshTvkjE+0zVmZxuj7Rj44wTVKx2xermJSfE2IA89varCqO1VvVLM2NVRXcZYbnnNZutovn6ZFJN+lu9Kiiu+oqMuW1OLNSxPjx4zFq1Cg0a9YM3333XcxzP/zwA4YMGYIvvvgCpUuXxp///Gc888wzqFq1qqNtsJFIREREJCoEZflycnIwYcIEpKXFf+PMyclBu3btULlyZUycOBGHDx/GU089he+//x6rVq1Caqr4hthITBR+f50OI6cDckIchZKm6thUjMEU5WUgwGVEVMU4REA8CmgWQax/+rUyybRFL4UxAYn+mvUmy/n9cWN1O7upGS26jaBS6VhRUcvbzAGTSKZodNE4TtGKfcRRZmC5fsdWcvHakmfYsGFo27YtTp48ib1798Y8N378eBw7dgzffvstzjzzTABA69atcfnll2PWrFm4/fbbhbdTfPybiIiIiGLpYxJV/wiOSVy+fDnmz5+PKVOmmD4/f/58XHnllYUNRADo3LkzGjZsiHnz5jk6VDYSiYiIiBJAQUEBBg0ahDvuuANNmzaNe37nzp3YvXs3Lrjggrjn2rRpg2+++cbR9tjdrCt37Pffj5Vz9hrR5cNK5aQXvyuQlBR+nis319nPCkIhSncj2o186KxT/zbY8ftjpkPvFU9OKVyv4Xerruc1Fs8Bv3cGylxas313kxVK7wZvbHhMvzXcrE8F43kJywggmW50Yxe0m4ktRalPn2M22CAE+eNS4c1MZIEW2dSpU7Ft2zZ89tlnps//8ssvAIBatWrFPVerVi3s27cPeXl5KFVK7AAYSSQiIiIKuX379mHMmDEYPXo0MjLMvwodO3YqeFWmTJm458qWLRuzjIjkjiSWPR4bQdSZPWbFTRTSK3bpTay+/qpO9u00rYuqrAcykSir8yN6PkXPnaqax06P14+k7l5eN4t9lpmIYsZsoomuwDCWX9/uZsPym01eIxqZlKnlK5OZyOoSiMZ+3NxSiVKp1030sOj+e5maSOdmso/ZxBYrdpFH0ckuOvPIYxinFkFNnsSlc4Flc2MfO3rQ8iUjR45ElSpVcN999xW7TLlyp9ogJ06ciHvu+PHjMcuIkGokrlmzBl988QXWrVuHPXv2IBKJoGrVqmjcuDEuvvhitGjRQmb1RERERCVPx76nfow2rQYGtzJdfNOmTZg+fTqeffZZ5OTkAAA0TcPx48eRl5eHrVu3Ij09vbCbWe92Nvrll1+QkZEh3NUMuGgk7t69Gy+99BLmzJmDrVu3QtM0lC5dGpUrV4amaThw4AB+++03RCIR1K5dG7fccgvuuece1KgRlhEcRERERC4FUHElJycHmqZh0KBBGDhwYNzz9erVw+DBg/HMM8+gWrVq+Oqrr+KWWbVqlePgnaNG4sMPP4wXX3wR6enp6N27Ny6//HK0atUKmZmZMcvt3LkTX3/9NT7++GNMnz4dkyZNwsCBAzFhwgRHO5cwnE50UbU+O4nSLvej/0WUaF9ZUOdWpivd7Nj0xHlmMxrMjtG8lMTv1glsC1AzJMBkGwXOeriE16uKTI1nr/LniVI1n0i0A1F1VRcz+jG56Ur3+jqo+ihyOrFFtKtaJu8iOdesWTO8++67cY+PHDkSubm5eO6551CvXj0AwNVXX405c+YgJyenMA3O4sWLsWHDBgwbNszRdh01EpcvX46//e1vuOqqqxCJRIpdLjMzE5mZmejevTuee+45LFiwAE8++aSjHSMiIiIKnQAiiVWqVEF2dnbc45MnT0YkEkH37t0LHxsxYgTefvttdOzYEYMHD8bhw4cxadIkNG/eHLfeequjXXLUSFy5cqWjlQNAJBJBjx490KNHD8evTRhOJ7okAhVRFasR52GKHhrpx202McTuXHg1YcVNCMdsX8y2u8RiHcYQhR5BtLtuTU7/axeaEQ1lWBEN5cgUeRCkRzBVT5wx4yaapXryh9O3r5vpB0FHTu24nVwkmq5IZj+MzPZJ9K3gNNLqJqWOu7rQAQugkWilaNDurLPOwrJly3D//fdj+PDhKF26NK688kpMmjTJ0XhEINlnNxMRERElqCVLzL/pN27cGB999JH0+qUaifXq1UONGjUwa9YsNGrUKO75BQsWYOjQofjpp59kNkOJSuZrsh/RNp3ZV3G/093o+28c89fYbEFBZvva3OQx0fPm9FrKJFW3C1s4Ta0UQlapdQD1qXKsbtOwRupkEorr/O6wcBpdlMkO5gc/EtCYpcoJfXQxFd5EEkMYtpNKpr1lyxasXr0abdq0wXvvvRf3fG5uLrZu3SqzCSIiIiIKgHTFlWeeeQbt27fH1VdfjVGjRqnYJyIiIqJw0sckqv7xotSfJOngZuXKlbFw4UKMGzcO48aNw+rVq/HGG2+gUqVKKvbPY3shV/nSI2Gq4CJD72exS5uigpsKJKIpYfYV+de4DeN2ZY6tZpF/nfCj+1Wmq93qvISxv82PijQ27LqjdWbd0iGobBvHTQUQP3m5f0Wvh9/d+35OAJJJgRP6LuYkpax28+jRo/GPf/wDX375JVq3bo21a9eqWjURERFRODCS6E7Xrl3xn//8B7169cJFF12Ebt26qVy9x8L4/Ra/RxVlEnYHHY0UjQKprvfrJqSiRxCNX7vNvoLrk0pURNOK40Ny58D4GU7xKHG3Gbtk3l7VlnaTnDvsVETA3ExmEb1d3P7F8DMhtyynKXBkGCewMKoYHsrn0tStWxcrV67EXXfdhddee80y6TYRERFRQglZnkQvSTUSlyxZgsaN4/N0lC1bFrNnz8Z1112H//3vfzKbICIiIqIASDUSO3ToYPn8FVdcIbN6n8kMXfZw8ovqutCiVHZx2vX56M8bT6O+fZncfnZ9OWaXyGnXpOpJDn73P8mcA9HJLFbH5MckERXXWRGntaVFu6eNE12cdj373f0ZdL1ku1Etfs6REu1SD0MOSDJIokiio4krc+fOhaZpjjeiaRrmzp3r+HVEREREFAxHkcQhQ4Zg9OjRuOOOO3DNNdegbt26lstv2rQJ8+bNw4wZM3DkyBH07dtXamf9o2K4rqKkCoURQpP1GaOM+u9+15G2+lou+vU3w+Q5q1MmejrdVP2QqfMb9lHookTPgdlyTs9BUJNynF5nN9dWwbEZI49+1IX2k5tPSLf1kr3g56SOROGmdrMZfRJLaCewpMKbqF8IK6442qWffvoJU6ZMwdNPP43hw4cjKysLLVu2RN26dVG5cmVomob9+/fj559/xldffYXt27ejSpUqGDRoEIYOHerVMRARERGRYo4aiRUqVMDIkSPx8MMPY+HChViwYAFWrFiB+fPnF3ZDRyIR1K9fHx06dMBVV12F7t27o1SpEHa0ExERETmVRLWbXe1SamoqevbsiZ49ewIA8vPzsW/fqf68jIwMpKSkqNvDZGQ2WaWczfOi6zGjV0RxMxK66GtUTUSw2hc323BalcRNBRer9fgxUcLu+jnNQynajyZzrmQquaggeowBTXQJaxez6okUMlP/gu6ClhlYlCgjVNwco971rKLbGQhZ13MSTVxR0m5NSUlBtWrVVKyKiIiIiEIghMHNsPM6H38xjplMEjKNuJhED+2+rsanujTntPqL6oohQVUgKSkj052GetxUwAkqcupl3Wq3go6SuiBT5URFdDGot5qqdDJ+TmbRz7ffqXCcHqOqySyhkkSRRKnazdFoFCkpKZY/FSpUQKNGjXD33Xdj8+bNqvabiIiIiDwkFUkcPXo0FixYgLVr16Jbt24455xzAAAbN27EP//5TzRr1gydO3fGpk2bMHPmTMydOxfLly9H8+ZmGZITharBaqcZo3L62EDRyF6Wi3Q3QSTnVj3wxo8EzGbMvrL7PcbRT2GP1BkVvTb7TJ5TXRtclM/RQxX1nFWN83Ma7VKUOMzx/idDsmrVSclVXauElJJ/6seL9YaMVCMxMzMTe/bswQ8//IB69erFPLdp0yZ07NgRjRo1wlNPPYWNGzeibdu2GDFiBD744AOpnSYiIiIib0l1Nz/11FO499574xqIAHDOOefg3nvvxRNPPAEAaNCgAe6++26sWLFCZpNEREREAcoD8JsHP3l+HoQQqUjijh07kJpa/CpSU1OxY8eOwv9nZWXhxIkTMpsMGZPKJ2Yjv626bo3PtTRbQHFdaBXdyMZ1iHZfe7EON0S7jL3sa5Kp9hHyiQ9K2PWFiZwDq8o+gD8VeBSQqbhirOesk+mClmHW+09yE4V0bj6+VGyXkoNUJLFp06aYOnUqfv01/lN7165dmDp1Kpo2bVr42E8//YSaNZNu9AIRERGVGIwkCpk0aVLhhJUePXoUTlzZtGkT3nvvPeTl5eHVV18FABw/fhyzZs1Ct27d5PfaE24ar6fDC8ZAWJbVuo3hCJnvcjKJFqxCIi7WJxKZtIsUOk2tY6QiLU4ihTYSrTYyEM6JOjLJ1XUydZ9dXBc9qiiTYDsM0UXRySyK+1B8jZ45ndShelJJSaQn1v4NFQPek+Qi1Ujs2LEjVqxYgTFjxmD+/Pk4duzUH/uyZcvij3/8I8aOHYuWLVsWPrZz5075PSYiIiIKzEmcivx5sd5wkU6m/Yc//AHvv/8+CgoKsHv3bgBA9erVEY1K9WQTERERUYCUVVyJRqMJPt7QrHNDVbYwr/rbRDs1Au7vE50sIzOZxW5yh9VlU9VV7VVtZCOZ2sgqjjMMVViCqryjksR1kZnMYuS0m1lVl2gije4IQkmeVKKinnM46GMSvVhvuChpJH7xxRdYvXo1Dh48iIKC2IsfiUQwatQoFZshIiIiIp9INRL37duHP//5z1i1ahU0TUMkEoGmaQBQ+HviNBJFv87LfJ8224aq7+drFKyjhHB6ClRH24xUVCoJUwTOy8hpUFFSt0IwOcfpZBZVk1SCrvEsQ/QTN+j9FCWzTzJ/fWT6DRO/nnPyRBKlBg4++OCD+O677/DGG2/gp59+gqZpWLRoETZs2IC7774bLVq04GQVIiIiKkGYAkfIhx9+iLvuugvXXXcd9u7dC+DU2MRzzjkHL774Inr16oUhQ4Zg7ty5SnZWvZ8BVJN4vdX3aTehjaBHo9iFQ6zygCgej2o2jlEfpxhUIm43VEQXVUeswh45daPoW0b0uFTVpw446bYoYwocFVFFVf0gTtPiBDX6vSQnBQ/qr88Bi1hVYkYZSxapSOKBAwcKk2WnpZ369MnN/f2T509/+hMWLVokswkiIiKiEDmJU1E/1T/hS4Ej1UjMzMzErl2nvtuVKVMG1atXx5o1awqfz8nJQSQSkdtDIiIiIvKdVHdz+/bt8cknn2DkyJEAgOuuuw5PPvkkUlJSUFBQgClTpqBLly5KdtQ7oh0dVtYbflfRCWHXiWPVl6YqbY8Zq7401fURTJh1QctUazHjR3oVFelkjGS6OINOJxOm7lmZ66JzMzRAwTVwkxbHqvqK6m5p1ZxWNDFKlPQ9bibY+PHXR+dmcFLJkTwTV6Qaiffffz8++eQTnDhxAmXKlMHYsWOxdu3awtnM7du3x/PPP69kR4mIiIjIP1KNxPPOOw/nnXde4f8rV66MTz/9FAcOHEBKSgoqVkzGGouqEyckcsZgH4eZm01m8TI5twqqJn6omDQRVNJt1WlxVFA1mcVHMkm1jcyii6L8nPjgd5TKzwiiHxOAVG83+bAsn5QzzjjDfiEiIiIiCi0ljcTly5fjp59+wv79+wuTaesikQiGDh2qYjNEREREAeOYRCHffvstrrvuOmzatCmucahLnEaim+G/XvVFBTUUWbSf0WnHhA+TWoxUT3BRlQbTayGoAFIo6K70oK5ZQF3+BTadNzLd0XoXtOgEFlW5E0uKIHI72r3VzN6eqj/9ZY6b+RHDQ6qRePvtt2P37t14+eWXceGFF6JSpUqq9ouIiIgohBhJFLJ27VqMGzcOd9xxh6r9CQnVEULR4cRm2y2pE2FEQy4eptGRSZvjVeoY1RE4Ix9TssQwu/39rDoTllveiRBFr52mwHETPSxp1UtkeNWf4zenn9yMHoaTVDLtBg0aMFk2ERERJZFgajevW7cO1157LerXr48KFSqgWrVq6NChA/7xj38ULqNpGmbNmoWrrroKtWvXRlpaGs477zyMHz8eJ06ccHykUo3EsWPH4sUXX0ROTo7MaoiIiIjIwtatW5Gbm4tbb70Vzz33HEaPHo1IJILs7Gz89a9/BQAcPXoU/fv3x549e3DPPffg2WefxYUXXogxY8bgiiuucLxNqe7mXr164fjx42jUqBE6d+6Ms846CykpKTHLRCIRPPvsszKbCYBXQ41VdWOrqBIjo4QMTTeb4CKTT9GMii7CoPL2qc6dmIhk8j6qnjwkMQxAn9giOoHFjyorft8WKvIPGonuv8hfEZkKMn4QPXdh3HdvBDMmsVu3bujWrVvMY/fddx9atmyJZ555BrfffjtKly6NFStW4KKLLipc5rbbbkOdOnUwduxYfPbZZ7jsssuE90iqkbhs2TLcc889OHr0KBYuXGi6TGI2EomIiIjMhGfiSiQSwdlnn42vvvoKAFCqVKmYBqKuZ8+eGDNmDNavX+9fI3HgwIFIT0/H22+/jQsvvBDp6ekyqwuhsFenFA1vePmd3SqsoSLK6EP6HFV1n8NIVTRL9UQKVRN0vKBqP0RvU5n0PoLXQFVFlrBwE3lTURHGzSdp0NmodKL77kffECepyDl69CiOHTuGgwcPYsGCBfjoo4/Qt29fy9f88ssvAICqVas62pZUI3HTpk2YOHEiLr/8cpnVEBERESWIYMvyDRs2DNOmTQMARKNRXH311Xj++ectX/Pkk0+iUqVKcd3VdqQaiU2bNsXBgwdlVhECMt/zgkiT6obdiBqvxjh6Vc017CN4DLxKlRMGKo5NNGqnIkm16H6GvXZziKKHqsb5qRzfZ8fs9Ikeh1d9N6LHJbqffoz39DJJdhkUf/OWxmEXWy5Zhg4dimuuuQY7d+7EvHnzkJ+fbzlz+fHHH8dnn32GqVOnOu7xlZrdPGnSJEybNg2rVq2SWQ0RERFRgggmBY6uYcOGuOyyy3DjjTfi/fffx+HDh5GdnW267FtvvYVRo0bh9ttvx5133un4SKUiiU8//TQqVqyItm3bokmTJqhdu7bp7OYFCxbIbIaIiIio5Jj75akfo4MmGTcE9O7dG3fffTc2btyIBg0aFD7+ySef4JZbbkH37t0xdepUV+uWaiR+9913iEQiqF27NnJzc7Fu3bq4ZcKdbHsvgDQF61E1NDno6p6qa0br7PrHZDqtrM694PkUTYUjU61F1cQPmZQsosIy0t4oqLrUQZdx91nYU9/IDPCRqVrvVTev1XF4OYFEZt2i597p5BSrLubwUTC7ue8fTv0Yrd4GtJrgeFXHjp3622Qc/vfll1+iV69eaNOmDd566y1Eo+46jqUaiVu2bJF5OREREREJ+N///odq1arFPHby5EnMnj0b5cqVQ5MmTQAA69evx5VXXol69eph4cKFKFOmjOttOmokbtu2DQBQu3btmP/b0ZcnOz6kexGmumZ0UWZ5PEKUmNssumj3vB+pdPyIWOm3nNNaz4B4dNTPyJvTiK2qJOJWRM+tDxOe/IgeypD5BDSeZtH5S4kSNVSd0kZFhNA8Gqg69L9X8frcOAk3OQ3F1lu8u+66C4cOHUL79u1x5plnYteuXXj99dfx448/4plnnkH58uWRm5uLLl264MCBA3jooYdiSvYBQP369U3zKBbHUSMxKysLkUgEx44dw/+3d+/RWVVn/sC/byTcL00iNGAVgggikAIqpaIjXpbSAhFbCCAjtCJ2dCHUS0Wlaitg6chS1HEBuhyQcqlgwYE6045Q+NkKJSIUZ1WopiMIKYQhIAG55fL+/ggnnOQ9OWfvs/fZ57zv+X7WYgHvdee9nOzzPHs/T/Pmzev/76WmpkbmaYiIiIjIZty4cXjjjTewcOFCVFRUoF27drj66qvx/PPPY/jw4QCAioqK+lbJjz/+eMpjTJo0KbhJ4r//+78jkUggOzu7wf+JiIiI4iGcjivFxcUoLi52vU3Xrl21BuakJok/+MEPXP9PQYhSClonp6SPSgUzO4OvTyZ2a5HNDkW9BmSEVjEEtenGdEeVMFKyAGBtjbzK4Tr7mHad//ubtstUji5uP4f9OXqf/3uzwnPJPr8uor9pvnStnHdhpBfS0l/zPSbn9HXUDziZRWnjChEREVG8RKd3c9BiPkmsANDS5foohSDswur0ElRnFt1EX5906ZhjE6WSLCZP6E2WvdG9+UbzJhU/UUPZzSleRz7ZDim6KkBZEUSvl9R6Xl25CTe7HP7tdEQR/XmdxqfS6cXteb1eC5U8lnvE8QK3jTBnHaKQ59BOcASkQ8wniUREREQyGEkkAA3PwZwKKIQdaRQNUeiOlAXVwdSJyust+voY7gVtIgInW3TbBJPle+zcPgYRjRo6RQvdooEn24rdTpRXBE705bBut8nj8dyIHkVEv8V+oouyORSVCJyJ6KfKc6kE9eXXOKY6odZNWJNqBDNJdC+BE4YovNpEREREFDGMJBIREREJY7o5Lc2ZMwdPPfUU+vbti48//ljzo4uWbHHjtXw7qKRCWGV0dGx0CTulHwCV1g8x6ADSgOyKil0O18m+jvYW9KJfE80ba2odqoZUOlzmlJY+qdCO3kpVV37jwmXtD9T9/XePxxVNcwf1jdbdz9mJSh8qE0dhHQuBgkx3u31N0mj7YKxkQ7HxqgAAIABJREFUzCSxrKwMv/jFL9C2rcIRkoiIiMgVI4lp55FHHsG3v/1tVFdXo6IiCr0dnZhckuzF5GYN+/ltUOVzDL+2US+i7RZS8BP1MrHBY/f5v+0fEbe30P6xtR5Px1vuVKnZ6+dy+wo5/awq47S9F04RRxVWtNIeoVSJTDoJqlO7nyOaSnkYHUSLcOk+ugW1hywD8z6xlxEbV95//32sWbMG8+fPD3soRERElNGsSKLuP9GLJKb9JLG2thbTpk3DlClT0KdPn7CHQ0RERJQR0j7dvGDBAnzxxRf4wx/+EPZQfPKzcSVKaeugRbRPZ6vTdX+rpJ1V3m47HTX8dL/MTqsK7OO8yeF5/aR5LVa+TjSVLrp5yOL187hxSov7kd/ob5nHC+hr5Kcmo8pmkSj2etIxPhMNhUz8hvDz2yw9N6zEZ01iWkcSjx49imeeeQZPP/00cnOjePggIiIiSk9pHUmcOXMm8vLyMHXqVIVHiVI/4rCiZqLFGfwWcdD12gZVE0bwXFYlamgfZrfzUci9Do9n/xF3p15d/1L6KdPiRtNGivrxOT2e/TLZCF5QEUUVfqKLOt6rCJUr0t3pxYvo0VpHuRmVzixuVI6GpqNusmP1cxgR3bwTLfGJJKbtJLG0tBSvv/46XnrpJZSVlQEAkskkzpw5g6qqKuzbtw/t27dHTk5O0w/y0LtAh4vO/ye77q/x36z7Q0RERKFZi5VYi5UNLqvE8ZBGE09pO0ksKytDMpnEtGnT8OCDD6Zc3717d0yfPh0vvPBC0w/y4g3AQOvcx8/5ndt5YxQik7J0LZ5qTGXVjp9iDZpXw7hFEJ3CDU4/rhU9BC5EEL0Co24vle4yLSqC+tgAwfd79hP6cKrhYl2m+zCiwkfk1qk4t246SuD4OaLoKOSsYzW4SkHuuLkT43Enxje47GPswG24OqQRWaoRTNQver2b03aS2LdvX6xduzbl8pkzZ+LkyZN4+eWX0b179xBGRkRERJT+0naSmJeXh6KiopTLX3zxRSQSCYwcOTKEUREREVFmq0YwaxIZSTQikUj4uJeunE9YiQMdSRzZRrlRopBi9tqQ4lbuptvntscpSB1Kq9NI4TZUlb05oh89p1yd12Vugtwk4rf0TJAp8EytNqXI2sQiuoHFT+tyJzoW/YTV3T7qorStM1q4cSVtbdq0KewhEBEREaW9jJskhi/scy+V4txhh0i86qZYRMvzOHHo8OoU7XPS4HYOhRtEHydsTh9NXXU5TJae8VPMWlZQxbn9MPDaOvWClt3MoqssTtgtA0R7Qfs54vrlpz912Ef1zBSfSGJaF9MmIiIiomAwkkhEREQkLD6RRE4SA+OnkpeOClpRSi44jd1tfPbEjVvaXteSd6f8nWzq3UcCSLbvs663NEptsHU0z1H5WqUjlW4yCulwpxS0xSsVbU89N2aiQ0vUcUPIBX5S6RQ8ThKJiIiIhDGSSMZEIcwhWz7Gfv7bePxO19kvs3afX+VwOyd+IrI6QmZ+lqNLdiG1b3QRjSrKRiHtTGyu0BHtEhWlyKjJsajs2/LTPztkpjuzWPxEs6KyBdDO5Jh0bTZKz37OmYmTRCIiIiJh8Smmzd3NRERERJSCkURXQS6l1dEnwM4pqL/7/N+9Ha7z+nmc8lciOS2nn+sTwdsFSbZ+pa7ONT5Sz7K3F00969gY4qc2oYnaiW5k6yr6oZLK1zE+Pylo0T1kARGtp2iyDmE6MZmSVUnbZ+b7F581iYwkEhEREVEKRhId6Q59WJE0+2YNHeEDr/MypwhieaO/RR6nsZBKx0Rik4+sgPphh7VxxW3PUlPcfrSwo4y66eq9nY4fdQNUNmGY7IUlenTVMSbTnWFUxhzFjT3+VAG4KKDHjRZGEomIiIgoBSOJ9cIKaXgVnHYLQzhdp1Iyxs/5XRh1NEyUXdVVsFuUgfI5uuleSxfFqKJKSR+Ln+iiiXWUGtgLbcv2eGYx7QtU1vzZiR5FMieiF5YqBBNji14kkZNEIiIiImFVABIBPW60MN1MRERERCliHkn8FEDy/L91571ym/h3Yyr5JK/7yi4xDrtTiRPd74uuxI7oa2UgoaPSCzpNum5okSklfYKk8HmwUs+iaWfREji6iR4BdC1qafySBnlEEB1nWGnmzElvVyOYSCKLaRMRERFRGoh5JBEIbuOD/XxVtuxpFFarO43BRPGIxrzCNlHs8hnS+bKfzSw6CiqHVbpFR0RUpaRP1COKKgW2DUeYraiiaETRdIFmHUeZKI3T5MYVw20JDKnChSykTowkEhEREVEaYCSRiIiISFACNYGsSEyiJpD4pApOEh1ZnVFUcmdevY9Fg+eimzrc6MoB+t0II1ooznRiQvR1UelWajGcgpbdzOLETzpXx+aQsEuWmkiZi762MevC4mczi2zq1PSimczZrNGQ6AYgXUsDrMNChcJjpLvt27djyZIl2Lx5M/bu3Yu8vDwMHjwYs2fPxhVXXOF4n+rqahQWFmLPnj2YN28eHn74Yann5CSRiIiISFAWapAIIOaXRC1qXK7/5S9/iS1btmDMmDEoLCzEoUOH8Morr2DgwIHYtm0brrrqqpT7vPzyy9i/fz8SCX+xT04SPSN+blSW/4YVLgljo4doGEr3Oaeun9HkJh7NS7Wj0JlFlp9yM40/Ln42XkQ9UhfFSKcDlS4smSKs3siyRwzTG4DcPkqZGnHV6ZFHHsHKlSvRrNmFqVtxcTH69euHuXPnYunSpQ1uf/jwYcyaNQuPP/44nnrqKV/PyY0rRERERIISqEEWqrX/SbjGEYHBgwc3mCACQI8ePdCnTx/s3r075faPP/44evfujQkTJvj+WRlJ1ELlfEzlvqJRJ91RS9lQRhilcwDnnzusQgpBFhkXpGOdomlBr1MMq+90OhUxN1gWJ+r9nEWPuDoidLrK/otilC99lZeXo2/fvg0uKykpwdKlS7FlyxbfqWaAkUQiIiIiYVkBRRKzPCKJTpYtW4aysjKMGzeuweUPPvggxo8fj0GDBin9rIwkEhEREaWZPXv2YOrUqRgyZAgmTpxYf/nixYvx17/+FWvXrlV+Dk4StedQRDezOD2vyY0w0a1lX8dkTwDTVErkhLSZRSXlqFIWJ+j9XbpKzMimxUWrQulmoAe16c0qmXiEaEx0M0tYC2xUNtuko2wAFwXwuDUAzgnetry8HMOHD0dOTg5Wr15dn1I+ceIEnnzySTz22GPo0qWL8pg4SSQiIiISlA31ydPZlXV/7GqPi923srISw4YNQ2VlJf70pz8hP//CqcDzzz+PqqoqFBcXY9++fQCA/fv3AwCOHTuGffv2oUuXLsjOzhZ6Lk4SA5NOK9ODLoujsgTbawm4bMTRK3wSxaiqXci9qnX0SzZBpRB4WKVwWGBbmI4SM4D40Ujl28YNIe7i+hq0GF/3x656B/Dl1e73O3v2LEaMGIHS0lJs3LgRvXr1anD9/v37cezYsZSaiYlEAnPmzMFzzz2HnTt3orCwUGicnCQSERERCWoGoHkIz1tbW4vi4mJs27YN69atc9yUMn36dNx5550NLjt8+DDuu+8+/PCHP8SoUaNQUFAg/JycJBIRERFF3MMPP4z169ejqKgIR44cwfLlyxtcP2HCBPTv3x/9+/dvcLmVdu7Tpw9Gjhwp9ZycJDoy2WHDiejGBq88mkrdRYvTSneV5IvKEuco5Td1f0Z0pM0N1040UT/Pb51ElTHp6D8NhNdUyU0Ux2Qj2rtZV6cQ0W+x5oqlvvlJlasctYNKBad7ijkbwUQSvRr97dq1C4lEAuvXr8f69etTrncrms22fEREREQZatOmTb7u17VrV9TUyNdgBDhJtPEKFYhGwNweR0ekyTTR3tay56ler3fYXVr8nHencSEIEz2eTXY38VOByk3cNosoHG789G5W6bSiUlAq7G+qiUJfskeyIMei8tjWz3FYx0AUNUNdNFE3f9O4YLHjChERERGliHkksRJAteR9VMIIYXXjTPcVICJU4glOwio2rvJzKIzZRD/nsApX62AieigavTMRkdVU6siKKnpFFK21iKZ7N4u+lG5Ha5UjhewRKsiSPVGKvka9EFlQaxIZSSQiIiKitBDzSCIRERGRuKAiibJ5TRM4SQyNjkSHKN2lcpzo7gQSdhkiFUGVxwHkU88RTdyolJmxOP1osr2To1BVycQmGpXUvORrpdK72V4Cx41XWlrHQpugUrtBpnVFx2JyAVIcFjtlMk4SiYiIiAQFFUmsCuAxVcV8kngEF97qiEZcAiupY+d03u33XFxTked6TmET0Z/bRARVlOlNS5KvuZ8SOLqjcCZ7J5vYJJIpJN9newkcNyoRR92iFLWTHYuJ31x+Xh/Znzuqv4HjLuaTRCIiIiJxQUUSzwXwmKo4SSQiIiIS1AzBTBKjOCGL4phC4mdld9gBct1dS5zySrq6pPrl9DOaTt1GfBOIbqL9nEU/DlHZmBHkJhUTNRt11Ue0yG7y8RLQ6ytaO9HP0SkdN6dY3MZkYsOOju4pMr6GWgBAu/N/kxmcJBIREREJCirdHESrP1WcJCrRvUlDhyAjazo3s9ipvGaym1l0dWFxIvpzmByzIBMdV0R5Rcxko3ZR2qSiEm3TUTbIzu3jKvoaay6LE1bUUOUIpCNqqLtDisqRJazfYF9jhDCSOEkkIiIiEhSnSCLb8hERERFRCkYStXPL05gI5Jve1EHRJLnZxl4nUZTuFHW61CQ02L3EkZ9mTW730ZRa1pFS9krdBrXRQ1RQm2P8LFxyeztEtxs6fSx22/5tdkGMWMzqRARiW4wkEhEREVGsMZJolOgpe5D9j52olMrR2ffZLqioq2gIJ8jNIhHsuCJKdzeWoHoPh/X8QW6Sscbg9ByyLb29BFguyOrP7BRRDKqJDyD/EXL6Bvk5eoi81U5HBF3b5NzG7PWxEe1Cr+N9E+2PVaHhuVQxkkhEREREscZIYiQFWTLGiWxJFjuRc8h0j8qFRUe5nnyHy+wEP0s6Ioi6onYiHzmn5zJR8NrrLbNebj8RPeujfpXD7XSv53Rq4+7B6tksujbRiijaeZXAkS3CJRoJc2Iyv+GnLYLKx9n6OfxEAFUC2bJH6zDaN4iIU8cVRhKJiIiIKEUUJ65EREREkZSNYNYPRnFNYqwniRfhOBKag6nVyNP6eOTFLaGkkmwSFWRZI9nkmtOGIh9JM7fUsld+SjbtaR+e6Evp9HI0HpfT2yz61vvJ/QW1AUc3r9UHTiTL9lhpZzvRFLQolZSnSsd70W+Tjo0csptfALOp9KimgkmvWE8SiYiIiGTEaU1iFMeUsZrZNu+rRRxFNyVYwu4nLUplnKKVg70EdX7sJ4Ip2Vn1dMGFfzsFId0KZotuTPHa0KAjUOv0I3pFvXS+bT42bQgT3bgi+7x+Pv6ym2gMcNrMYue2sUUlumgXVE132aOb7kJjToL8zaByKIh6lJIlcIiIiIgo1hhJJCIiIhIUp0giJ4maNROsB+90O/kUtO48keiS7qD6Q/vZxSD6GgSVB/V6Dh2Jk3KHfzs8rj1j3M3pcVzG75SK9kpBu/1ooulS0TSp09BlU6xR6priRWRzjupYLKKrVrw+yi7js29mUdnE4paOVungEsX0ZpBjUkkzy24QMtv/mXTjJJGIiIhIECOJlCF0bASxhyhkwxWy54Z+oodu9/E6h3Uan9XOwk9oxuk+1mV+ik64jd/PsnanDU8BEY2EmQgfBLUxQ9deKR28PuomxicYWXYqkeNGd/kcXYLq9WTyK6FSdUo3Ext1SB4niURERESCGEmMkdY40+R1p9DS4EiCIHu+qHt9n2gxaNnx2ZvXSlb69fSJpsdxE3ZJIsFIrFvJHBnW2kavj4HsW6m71IvucjdO/JT30UG0ALjbRzNCpXJ0E41imegUL1tCPxO718u+BhSc2E8SiYiIiETFqZg26yQSERERUYooTlyNaYlzrtfbU9EmUs+i5XPSpz+0W7JAJQUuupnGKxHjll+UrUHS1H1MUNkRIrokweCmFy9BbcLw85brIJoO1z0+txbnTkJKlesqn+PGT99n0TRvBL4xysLacxbVzSxxWpPISCIRERERpYh1JFGG2wYXL9HfACMaJdJZLHqXxsdqilOIJAq1QkRfb9lytHayUVLNISHRXtB2JqJ2skQ308hG5Zyo9KyO4mtnp9APO8gSOFGKTvkVVGsDL6JRvrDGFyRGEomIiIgo1hhJJCIiIhIUp0giJ4kRYqW09aWn6/JXzfDX+kuq0cfhdlbdQXvSYPf5v1U2f8ime0UTGH66lxxq9LfIfaLCT9rcTVSXgwsSrfmnk+imEd2rGfz0VZZNPfvpHCO7OsFHOlw2zWzv6+zUxzkOZI8Uuo6GonUNdSygEdveGaw4TRKZbiYiIiKiFLGOJOYCOC55H5UTdjPs54N152sNo4duIQC33sMqTCxX1l2Lw8Rya5XzeK/3JeQl4vZuLX42scgS2Tiiu4RL9A8GYvx8xUXL9pDv4lG64v2i0TuTRa785Eas1yDsNulA3cQpiKif14Tsq6++wr/+67+ipKQEJSUlOHbsGJYsWYKJEyem3DaZTGLhwoV47bXX8Le//Q2tW7fGN7/5TcyfPx/9+vXTNiYiIiIiCtmRI0cwa9YsdO3aFf3798fmzZubvO0Pf/hDrFy5EhMnTsSDDz6Ir776Cjt37sThw4elnjP2k0TRChJBrdwSLdgtXkD7wqm9tRbR+76ya/xkb+8nKidawkW2y2eQ58k6ilrbpcuaSQ9WVNEroqijnItKgWgD6+yMiGJZHMOFyq31iV5rE1V6BMuur1OJ1EW9l3FUxxWUsNYkdunSBYcOHUKnTp3w0Ucf4dprr3W83apVq7B06VK88847KCoqUhoT1yQSERERRVx2djY6derkebsXX3wR3/rWt1BUVIRkMolTp075fk5OEomIiIgENUNdJFH3Hx2p3RMnTqCkpATXXnstZs6ciQ4dOqBt27a4/PLLsXr1aunHi3262RKFNehWWtiph7PTZcH2lo7yinSndyiqZV1M9FVWYTCRJbqZxWsoQX1BTWzGkC3fE+WvYcCsns0qHVdEy+KoHD1kF9P4WVii8u2Meo9p2QVIUSiBE2V///vfkUwmsXLlSmRnZ2PevHlo3749XnrpJYwbNw4dOnTAbbfdJvx4nCQSERERCYpyncSTJ+vOho4ePYpt27bhmmuuAQCMHDkSBQUFmD17dnwmidu3b8eSJUuwefNm7N27F3l5eRg8eDBmz56NK664QuqxVOI9Trwie069oJ2ihaL3deP1uG4RTPkNM6L9iL3IlnAJcoOI25gzpRupn0LmGbKxxi+V9EMU6nhY/BTT1kHw9bMiikCwfZz9UjkCmCw3E+SRSjYfkSlHzShq1aouS1NQUFA/QQSANm3aYOTIkVi+fDlqa2uRlSW22jCtJ4m//OUvsWXLFowZMwaFhYU4dOgQXnnlFQwcOBDbtm3DVVdd5f0gRERERIJ0RBI3rgT+sLLhZSdlCzc76NKlCwDg619PnbJ36tQJVVVV+Oqrr9CuXTuhx0vrSeIjjzyClStXolmzCz9GcXEx+vXrh7lz52Lp0qUhjo6IiIgo1S3j6/7YfboD+NHVao/buXNn5Ofno6ysLOW6srIytGzZUniCCKT5JHHw4MEpl/Xo0QN9+vTB7t27He7RNK8yXrKlx+wpYdH7yqaRdRFNc4vRlY40kSSx6Op8IrsEO0obbOxEx2eyR4ONyBdKJYWqUjsx3ZmsMxkhUf0mWkwcMXR8m6O6fVC3KK9JBICxY8fi5ZdfxsaNG3HLLbcAqCvEvW7duvr/i0rrSWJTysvL0bdv37CHQURERKTNq6++ii+//LI+Urhu3Trs378fADBt2jS0a9cOTzzxBFatWoXvf//7eOihh9C+fXssWrQI1dXVeO6556SeL+MmicuWLUNZWRlmz57t+zGcAhSfn9+IIhrtUzmL8tOcQDYKqb9kjhO30ILo+apopE7XOWxI0TFXKpttIrpEXLQLi5ModRLxSzTSqRKpi0JdLzcRGpPJEjhROrI4MbE1zU/v5igJM5I4b948fPHFFwCARCKBtWvXYu3atQCAu+++G+3atUOnTp3wwQcf4NFHH8X8+fNRVVWF6667DitWrJAOoGXUJHHPnj2YOnUqhgwZ4tjwmoiIiEhFmJPEzz//XOixunXrhrffflttQMigjivl5eUYPnw4cnJysHr1aiQSibCHRERERJS2MiKSWFlZiWHDhqGyshJ/+tOfkJ8vFiT/v4eAizrU/fvs+cuyxwPfGO9066bTuaIZoSgt5BXt1mLf1CJeMzFsbnmsKL0LKkSTQn421hgk2oXFTnYXWdSJbhYx0RHGRJ3ETHnfHIgs8lBJ55reGGJy8Y3TkWoTVmIzGtaJOQkNdWIUWW35gnjcqInimKScPXsWI0aMQGlpKTZu3IhevXoJ37fji0DLgXX/zuDjFhERUdq5CeNxExpGbT7DDkyFYp0YEpbWk8Ta2loUFxdj27ZtWLduHQYNGuT7sexnZSZO2NORW6kcM1FGk8udTSzfjnrBCD9dWCwGYg+iGzNky7rYiR4MVKKbUeq+kmHc+jU3xWSBqrAjdaLYZ6mhqJfA0SmtJ4kPP/ww1q9fj6KiIhw5cgTLly9vcP2ECRNCGhkRERFRekvrSeKuXbuQSCSwfv16rF+/PuV6r0nixQDaulzv54xJ5SxLx3pGP4EMa32ifW2i02Vu5Ps+p9O5qUpf6qAKbPt5zSJeFieKgkonZGL00EDU1erjLNrD+aTtAC8bVXQaXlDRRdGjYRTzDXHUDMFE/aI4IYvimIRt2rQp7CEQERERZaS0niQSERERmcQ1iTHRHkCt4G1V1r6bpNJkIaze0WrLt2VTqFHfLGJCRPtNq3RhoVR+1p6oHOgi3hHGSj372cwSFWEdvaK+IIiCE+tJIhEREZEMRhJjxO3E2fTyftmzNdH14XYq0UXZfs9mN7OYKBodpbI4Ud/442N8shFE0Q+zbFQs6rWv/FTvl/3iO32Fgiz2LbmZxdrAAohvYiExKkcTP9FNbqOLtthPEomIiIhExSmSmDG9m4mIiIhIH0YSzxMNedtvJ5qijtJmF5UUtGztRDUmehGYqE0oy0/CxmTHkxhs/BFN59qppHNFDxAqaXAda08iSrZ2oh9BfdJlv6Uq4wgyrSs6LpUxWM8Rhd+nF9UCzUR3vUo+btRwkkhEREQkKKsGyKoO5nGjhpNEBX6ijxYdZ0N+Ah5OZBsgOJXKcYsumunrbBelziKyW6JM9nnww2ssUdxEo8BE72bRA4ToSxvUxhvR6KeuA5Mg0QiibOmboDZhBPkNUTniZdg3lzThJJGIiIhIUKI6mEhiIoDHVMVJ4nmml+y4nfH5iTKqVJ+wBFXb1qkUjl34PZ5Nl52JUqQzDfld/5eBBaKN0r12UuH18YoeqhTMDmp9nenSMkExMZYo/bxxx0kiERERkaA4rUlkCRwiIiIiShHrSGIegItdrvcT8taRYVLZ6OKU0jDRQEKlPI6Vjja/wcUS9bIzokSfXzRRpvK6BNRlBVDbJCLL7ccIcjOLqKBSu0GW5REci8lOKiZKuIgykWo1caTK5MU0iWogURXM40YNI4lERERElCLWkcQgmAxyiPJTkcLvz6HS6zk8usrOiEbRdJ9jp3Gf61anL/xbNqoou0lEVy2qsKJ3slG7oHpbA0Y2p4gyUdpGVqZE6rhJpQlVAM4F9LgRw0giEREREaVgJJGIiIhIVDWCiSRGcE0iJ4kB8Qqhm2j1qoNK2TezvZ6jQEeSKcjki2yCSqVPs4/Xwp56bswrFd14eF4f1qA2Zuh6XllR2ByjIKhNKiZ6HZuof2iik4rsa6WjD3NT3MZ8WOF5SR4niURERESiqhHM+kFGEqMlD2pngbq6mzTmFRRQ6dai0plFtiuNaARRvPSNbNkZr1dDx9Jv3WVndD+vnclOL16fMA0lcnRvzAg7aqh7M0gENqTo7qvsdtx0+lTbP2W9z/+9W+yplJiIYLrxc3Sw3lITG0m8chRuH0P3/l2kW6wniURERERSYrS7mZNEBTr6JduZLJvjpyyOLDNrEiWLN3uep+s+jw6qcLWJntZ2bp9Op7FrKqatI2rm9gH38/iiHzmn2wVVxsY0wbRC7dfEHk64io3LDZ1eKnvU8BPR53BhIgavI6Ln9HUQHbvXkUU2n+P1c7h9dZ3GHIlIYowmiSyBQ0REREQpGEkkIiIiEhWjSCIniRqIZp28qGxmUSHb71l0LKJpZrfezc1syQW13s4mN44E2RtZNq1uT7JdJTgW6x3+pu0yDb2qRTuq6P6wu33ARd8C++1E317Zj5zTSyw6PqfXTPT57fk+Hb2qnXi8p7rT0k4bYUxm7lXSvRY/C0rc3gI/Y1L51pssqUPB4SSRiIiISBQjifFhnb0EWaBaxwYX0aLWKkW3dW9gkd240sxhSbJ39NDpvFb2nFSltKvoRhhdW4V2NXpcL/bndSuB4/Sp8hqnZJzBqVi2U3TRTyX6xj+SaC0oO5WQv44wlUpKQnfE0en187M/SjZiazjiaBEtwaNSXl6U7MvsZxxBFQpPyz7M5Cr2k0QiIiIiYTGKJHJ3MxERERGliHUksb3t337WeJvkJ5slmkUKmpV2tnNKQftLLVucflqV5IdTetjp+b1eUet6rz4PQW528ctPck2ybqVoClqWnw+/jk0bKu2S7ETTvbIrF0RT+X52EbiN2UAq30//Z9E0s6wobsLwMybRb3PYHWaMq0YwkcQItuVjJJGIiIiIUsQ6kuiH11mPW7BCdBGwVyWMsJow+H1ef1FDi+irZiJGusv2bz8bR4Lm57USPY93evdDWqbut9SKyq4u0Sien003TnRsJgmqlZJdkF+7gA50fqKHsp902W+Yn6OEiW9uyFb+AAAcmElEQVSf6LgidHQwg2sSiYiIiCjOOEkkIiIiEmVFEnX/8YgklpaWYty4cbj00kvRpk0b9O7dG7NmzcLp0w5ruzVhulkzlbqLKmvQ3TIzXmOR7a5iTx8XnN+UIpsZEq+JqFLz38+7YL2DJpL6upds+3mt3Gon6h6LnWA9RdlNLKKpaLcfV/Rj42cjiegGF5P8jCWoNLOPschuWDnZ9sK/47Rxxc8iExOCOgJlmgMHDuDaa69FTk4OHnzwQeTm5mLr1q145plnsGPHDqxduzaQ5+UkkYiIiEhUCGsSly5disrKSmzduhVXXnklAODee+9FTU0NfvWrX+H48ePo0KGD9iHFepKYBzP9knV3dRFdEOz0fKLRyvxGfze8b2pJGzf2Ejhu3VfUootedGwg0b1ZJUrn9n46u6osVxeMejqVyLGE1QvaSVCbREykJERFKT2iIKjooQo/fZozTZSOhp5CmCSeOHECANCpU6cGl+fn5yMrKwvNmzcPYEBck0hEREQUaUOHDkUymcQ999yDXbt24cCBA3jrrbewcOFCTJ8+Ha1aaagv6yDWkUQvKtUsdJ0JOdWiVTnBth4vrELbooW1LU7RRTv3Ujqi5+R+ysDoLvAgujJHNnqne01nkNHFNOMnYhdUVNNEuRuVEkKa+SmcrcJ62zL0k9wklaNHRqtGMOVqXIpp33777Zg1axaee+45rFu3DgCQSCQwc+ZMPPvsswEMpg4niUREREQR161bN9x4440YPXo0cnNz8e6772LOnDnIz8/HAw88EMhzcpJIREREJCqEtny//vWvcd9996G0tBSdO3cGAIwaNQo1NTWYMWMGxo8fj5ycHO1D4iRRMx0VLrzuK9retLePx/ZL5eeWTUGLC2s5uK4Ub1DdUGKwTN7EZhXnXV2pojQWuyiV4ZFU+7XUy0RT0ColcIJccGIR7ZessrBDpeyM7Pj8vE5xKIuzcnvdH7vjLntCFyxYgIEDB9ZPEC1FRUV48803sXPnTtx8883ax8lJIhEREZEoDbubxxfW/bHbcQC4+gXn25eXlyM3N3XaXFVVtziyutolDKkg1pPEprY8OG0WcSIa0XNb4+10pqRSo9eJV8BAR+1glR6fFtHooXjfZ1Eq0TvNJV8aiMP5tI9IpkjpG9Evp11QmzFMN16XPYAFOSbRsWhgjy6a3tjSmI5yLn7i/bJHJRNlZ1Sir2lVFidgPXv2xHvvvYfS0lL06NGj/vIVK1YgKysLhYWFLvf2L9aTRCIiIiIpIdRJ/MlPfoLf/e53uP766zF16lTk5eVh/fr1+P3vf48pU6YgPz+YpUOcJBIRERFF2A033IAtW7bgZz/7GRYsWICKigoUFBTgueeew09+8pPAnjf2k0QTy/atMLlK1slrnG7ZHK/nVamZqPP1E+3M4o9oYlw2xWtiKXuQRF8X2WSPnzR8QN/GKG3QiGLvZj9k20j52Vij8FpZqWevtLN9E4tFd0eWxi9RVNOmJha3yKbDo/pahRFJBIBrrrkGv/3tbwN44qax4woRERERpYh9JFGF21mRn3XzTifnQfV9Fh2LndsYdK9Lt6KKThFFexcW+U0sopErE5tZdPPzvBlaAsdO9kNvopuIaFpBpcuJaPQuqhtrLD7GF/bGFR2i+s00mX2LrJAiiWFgJJGIiIiIUjCSKMnrLMotluN1QqwSfzJwcq71+UV5rVN06u2sv0SOqKAiiFEoBGFixZLg+shWp+v+FimFYxdk9M5EqRfZSKefsURxzWSUxkLSZc/8iHzxrxhFEjlJJCIiIhIVQlu+sDDdTEREREQpGEl04RVOd7teV7cWi2gGzE+3Fp281srL/tz6S+EEKeyNK37IJo9EU98RLA3kJ20pmuI18SUzsaEmSphmNspkajeCRwc5MUo3M5JIRERERCliHUnsYPu311mU00m8W5BBpfi1F5Xi106iWCHEEmyB7UyT9ufnpJOfAtZRYqCYtsVPAW2/eQPRWLxKmXkTRwKV8aX90YmRRCIiIiKKs1hHEomIiIikVCOYqF8EdzfHepKYC/HFuiYW9frp0hLU8wfVBMLteaO7Tj2ofs4G+haTmijVSTRB9kuYIR1h7D2cdfdubiys3yVeZI9yPGLFQ6wniURERERSYrQmMfaTRLczLqd4kNOJrJ+NJKKlanRE2XSvX496cMXqwuLdeSWo3gGi5/HpeC4e2R4I3kz3KBYVpZ1jsgcclbFENOpqRRW9Ioppv/mCSEDsJ4lEREREwhhJJMD5TFF03aDudXtedAcZorhO0CqHo68UTlgRxLgJqMi41cMZkO/jLMpE9M7kOsB0F8UDkwEm+iVHURS61scdJ4lEREREomIUSWSdRCIiIiJKEetIYocqINflbOBoc7HH8VoPr6NDiq419zo2k+jOdunOHHlvWAmKbFo1yBI4QY3FrfdQU2TTzD5eFyv1HFTaOW6iusknQoLuuOIkzkWzrNetMtRRnFeNYCKJrJNIRERElMZilG6O9SSx2Vfu1ztFGb2iiyrrqkWjfKLleOK2pl1eUMvBg+ycGlRh7yDjErIxlzSOkfipN5XOmzEiesAR7dnsRLSYtt9vtp8NGKLfCJWjjYki2jrGV6HwGCQv1pNEIiIiIikxiiRy4woRERERpYh9JDH7RNPXVbVLvcyeghbd2CJLd4cUP3RkvsLKtol3XLFEYTl4XCuhOYnC+yFJ5Ysq+8EXTesGOSaTnVYEX58op5gB+TRznFPMka+JyEgiEREREcVZ7COJbmvq7VFGt6iiU0RRtCxOhNZ6++L2c8iW2xGtumF1XgHcu680sy1x1lMWx0/xCtFNG+nY/UX0NZAdi+BrIVvuxk+oOqgvaJC9kU1GNUWJjimim3eCjtalSbw8UJGPHtoxkkhEREREccZIIhEREZGoGEUS4z1JPIoLcX6PcnJW6jmszSymOaVX3DJBImlnILyNOO5Ekz2606t+kkxuY/CTFNP9s1sCHEtQaWbZ1G6QH2YT61CC2jATUaKbUzKV6XSuiQUvFLx4TxKJiIiIZLAtX0wcgXPlEacz7POnRSqbWXRT2RwjGt3TEYTxCriIPofbJhU78U0qYUUQRYW9lDvI54/RUv2IbsYIjOF0gWjpm5Nt6/4OMqJo8hsbxUhdFMdEauI9SSQiIiKSUY1gtv0ykhhhmur3upXD8dNr2a2MjEq9W13RPZXn0ElPiRu7TIyiyT6vn5I/IccSTETtTHywRWtkmRiL7FpEA4uQVQpni/LzSZbtrC5L5dsl+m02cXQKO0dC4jhJJCIiIhIV1C7kCO5uTvs6iefOncOMGTNwySWXoHXr1hg8eDA2bNgQ9rCIiIgoE1klcHT/ieAkMe0jiZMmTcKaNWvw0EMPoUePHliyZAm++93vYvPmzbjuuuvc71wJ5/yA22YWW7zfqSyO7MYVp0yOSirYRHZKRyUM3ZtVxKVjZxMvomOQ7Q8doaSQaNkb2UbgQZZ1UUl9i45Ltq2RnzGZSH1Ljqv2axf+LZp6lt2w4lEVzVHQ3xgTY/Kz8kr2KOhnIQuFI60jiSUlJXjrrbcwd+5czJ07F/feey82btyIrl274rHHHgt7eCSoamXYI6B6KzeHPQKy7OQXI0pOgO8HnRejSGJaTxLffvttNGvWDFOmTKm/rEWLFpg8eTK2bt2KsrIy9wf4FHWnZuWoO7Wx/giqapdaBudo89QoovUU6U7k5Tlk++PE6bUwM0nMh94o4tchd/6cD/1jCMDK/4e6c3ue3xvX+BjESWKkNDVJzIX/b0waHBEo5tI63fyXv/wFPXv2RNu2bRtcPmjQoPrrL7nkkjCGRkRERJmoCkBNAI9bG8BjKkrrSOLBgwfRuXPnlMs7d+6MZDKJf/zjHyGMioiIiCj9pXUk8fTp02jRokXK5S1btqy/3tUbAH56/t9OmUOPFbxuG1cacNjEYqVcneokOqUf7ENx66vslPKwp4i9HtvtOYLyD4fns36e1jgj9BinUOF6fQRrlCqyv9OiixmsV9lth8FZyO/m8DMWUec/sa08vssWa4OL1wfY7QvjxOtL5ER2U0ljzeE9PreDhp01Bj9fbNHXyuvg05jXQc2N7WNm38TSmH1Ty8m2Td/OiX2jSznqvhlOn24/m0mCZh+Hyrc5qDKcKuOr1DkQvzLvF0qT0nqS2KpVK5w9ezbl8jNnztRf78SaPO4GgIPnL7SvLTzicCfrk+zwralu4z7O49lNP1yD27k8hvsUyP16ry+V12NbRDYRem0gdJry1RwHzuxodJngmCxJzzi9bKPNUx7Xy351/HzVEi7XCU6aGhCYcB8/DewolXzcDj7G8n+CtzvofRO7M4K74WV/M7l9Ob2IfsEaj+nUcWDfDseb1hMdl+gYdN/X7eDj9RVzI/h1TiqkBBvfNYnjqIH7+yF2SnvBV5K3t3M7Hl+k8Lh+WhLL7rdQeevL6n5zeweBArQ7zR5XRVpPEjt37uyYUj54sO4XS5cuXRzvt3fvXgDAPwN10UQK3f6rVR/B69AmOinxe/sMcvX0sEdAlp8rfzFiLalwX6cJ3Fdwfz9kJ337JW9PF+zduxdDhgwx+pwXX3wxWrdujX8+pTLNdde6dWtcfPHFgT2+rLSeJPbv3x+bN2/GyZMnG2xe+fOf/4xEIoH+/fs73u/222/HsmXL0K1btyajjURERBQtp0+fxt69e3H77bcbf+7LLrsMu3fvxpEjTulGPS6++GJcdtllgT2+rEQymVQ52QpVSUkJBg8ejHnz5uHhhx8GUNeBpW/fvujYsSM++OCDkEdIRERElJ7SOpI4aNAgjBkzBk888QTKy8vrO67s27cPixcvDnt4RERERGkrrSOJQF3k8KmnnsKyZctw7NgxFBYWYvbs2bj11lvDHhoRERFR2kr7SSIRERER6ZfWxbSJiIiIKBixmiSeO3cOM2bMwCWXXILWrVtj8ODB2LBhQ9jDip3t27dj6tSp6Nu3L9q2bYuuXbti7Nix+Oyzz8IeGgGYM2cOsrKyUFhYGPZQYmnHjh0oKipCXl4e2rRpg379+uHf/u3fwh5W7JSWlmLcuHG49NJL0aZNG/Tu3RuzZs0KtT5fHHz11Vd45pln8J3vfAd5eXnIysrC0qVLHW+7Z88eDBs2DO3atUNeXh4mTpwY6M7jOIpVunn8+PFYs2YNHnroofpNLiUlJdi8eTOuu+66sIcXG2PGjMGWLVswZswYFBYW4tChQ3jllVdw8uRJbNu2DVdddVXYQ4ytsrIy9OrVC1lZWejWrRs+/vjjsIcUK//93/+NoqIiDBw4EGPHjkXbtm3x97//HbW1tZg7d27Yw4uNAwcOoF+/fsjJycG//Mu/IDc3F1u3bsXixYtxxx13YO3atWEPMWPt27cPBQUF6Nq1K7p3747Nmzdj8eLFmDhxYoPblZWVoX///sjJycH06dNx4sQJPP/88+jatStKSkrQrFla78uNjmRMbNu2LZlIJJIvvPBC/WVnzpxJ9ujRIzlkyJAQRxY/W7duTVZVVTW47LPPPku2bNkyeffdd4c0Kkomk8mxY8cmb7311uTQoUOT/fr1C3s4sVJZWZnMz89Pjh49OuyhxN6cOXOSWVlZyd27dze4fNKkScmsrKzkl19+GdLIMt+5c+eS5eXlyWQymdy+fXsykUgk33zzzZTb3X///ck2bdokDxw4UH/Zhg0bkolEIvn6668bG2+mi026+e2330azZs0wZcqU+statGiByZMnY+vWrSgrKwtxdPEyePDglLO8Hj16oE+fPti9O4qNieLh/fffx5o1azB//vywhxJLy5cvx+HDhzFnzhwAwKlTp5CMT6InUk6cOAEA6NSpU4PL8/PzkZWVhebNm4cxrFjIzs5Oed2drFmzBiNGjMAll1xSf9ktt9yCnj17YtWqVUEOMVZiM0n8y1/+gp49ezbozALU1Vq0rqdwlZeXR6odUZzU1tZi2rRpmDJlCvr06RP2cGJp48aNaN++Pfbv348rr7wSbdu2Rfv27fHAAw849qin4AwdOhTJZBL33HMPdu3ahQMHDuCtt97CwoULMX36dHbqCtk//vEPHD58GNdcc03KdYMGDcLOnTtDGFVmis0k8eDBg+jcuXPK5Z07d0YymXTsAU3mLFu2DGVlZRg3blzYQ4mlBQsW4IsvvsCsWbPCHkpsffbZZ6iqqsIdd9yB73znO1izZg0mT56MhQsX4p577gl7eLFy++23Y9asWXjvvfcwYMAAXHbZZbjrrrswbdo0zJs3L+zhxd7BgwcBoMnf6UePHkVVVZXpYWWk2KzsPH36NFq0aJFyecuWLeuvp3Ds2bMHU6dOxZAhQ1IWJ1Pwjh49imeeeQZPP/00cnNzwx5ObJ08eRKnT5/G/fffjxdffBEAMGrUKJw9exavvfYann32WVx++eUhjzI+unXrhhtvvBGjR49Gbm4u3n33XcyZMwf5+fl44IEHwh5erFm/r71+p2dnZxsdVyaKzSSxVatWjimbM2fO1F9P5pWXl2P48OHIycnB6tWrkUgkwh5S7MycORN5eXmYOnVq2EOJNesY1Diaftddd2HRokXYunUrJ4mG/PrXv8Z9992H0tLS+mjVqFGjUFNTgxkzZmD8+PHIyckJeZTxZX1X+Ds9eLFJN3fu3Lk+RG1nXdalSxfTQ4q9yspKDBs2DJWVlfjd736H/Pz8sIcUO6WlpXj99dcxbdo0lJWVYd++fdi7dy/OnDmDqqoq7Nu3D8eOHQt7mLFgHYO+/vWvN7jcWsTP98GcBQsWYODAgSnpzKKiIpw6dYpr3kJmvS9N/U7Pzc1lFFGT2EwS+/fvj08//RQnT55scPmf//xnJBIJ9O/fP6SRxdPZs2cxYsQIlJaW4t1330WvXr3CHlIslZWVIZlMYtq0aSgoKEBBQQG6d++Obdu24W9/+xu6d+/OdYqGXH311QCQUmnBWi/dsWNH42OKq/LyctTU1KRcbq1zq66uNj0ksunSpQs6duyI7du3p1xXUlLC3+caxWaSOHr0aFRXV+O1116rv+zcuXNYsmQJBg8e3GAbPQWrtrYWxcXF2LZtG95+++36HeZkXt++fbF27VqsXbsW77zzTv2fPn36oGvXrnjnnXcwefLksIcZC8XFxUgmk3jjjTcaXP76668jOzsbQ4cODWdgMdSzZ0/s3LkTpaWlDS5fsWIFuxFFxPe//3389re/bXBStXHjRnz66acoLi4OcWSZJVYdV8aOHYt33nkHP/7xj+s7rmzfvh1/+MMfMGTIkLCHFxs//vGP8fLLL6OoqAhjxoxJuX7ChAkhjIrsbrrpJlRUVLDjimH33nsvFi9ejDFjxuDGG2/Epk2b8Jvf/AZPPvkkI7oG/fGPf8Qtt9yC3NxcTJ06FXl5eVi/fj1+//vfY8qUKVi4cGHYQ8xor776Kr788kuUlZVh4cKF+N73vocBAwYAAKZNm4Z27drhwIEDGDhwIDp06FDfcWXevHm47LLLUFJSwnSzLiEW8jbu7NmzycceeyzZpUuXZKtWrZLf+ta3ku+9917Yw4qdoUOHJrOyspr8Q+EbOnRosrCwMOxhxE51dXXy2WefTRYUFCRbtGiR7NmzZ/Lll18Oe1ix9OGHHyaHDx+e7NKlS7JFixbJK6+8Mjl37txkTU1N2EPLeN26dWvy98O+ffvqb/fJJ58khw0blmzbtm0yNzc3OXHixOThw4dDHHnmiVUkkYiIiIjExGZNIhERERGJ4ySRiIiIiFJwkkhEREREKThJJCIiIqIUnCQSERERUQpOEomIiIgoBSeJRERERJSCk0QiIiIiSsFJIhERERGl4CSRiIiIiFJwkkhEGWnfvn3IysrC0qVLU6574IEHcPvtt0s93qJFi9C1a1dUVVXpGiIRUaRxkkhEsfL555/jjTfewMyZM6Xu94Mf/ADnzp3DokWLAhoZEVG0cJJIRLHy0ksvoXv37vinf/onqfu1aNECkyZNwgsvvBDQyIiIooWTRCIK3alTp4w8T3V1NVasWIGxY8f6un9xcTH27t2LzZs36x0YEVEEcZJIREb97Gc/Q1ZWFnbv3o277roLubm5uOGGGwAAe/bswejRo5GXl4dWrVrh2muvxfr16xvc/9ixY3j00UdRWFiIdu3aoUOHDvjud7+Ljz/+2PO5//jHP6KiogK33HJLg8sLCgqQlZXl+Of999+vv93AgQORm5uL//iP/9DwShARRVuzsAdARPGSSCQAAGPGjEHPnj3xi1/8AslkEp988gmGDBmCb3zjG3jiiSfQpk0brFq1CqNGjcKaNWtwxx13AAD+93//F+vWrcOYMWNQUFCA8vJyLFq0CEOHDsUnn3yC/Pz8Jp9769atSCQSGDBgQIPLX3rpJZw8ebLBZS+88AJ27dqFvLy8BpcPHDgQH3zwgY6Xgogo0jhJJKJQDBgwAL/61a/q/3/rrbeiW7du+PDDD9GsWd2h6f7778f111+PGTNm1E8SCwsL8emnnzZ4rLvvvhu9evXy3JCyZ88e5Obmom3btg0uLyoqavD/1atXY8eOHZg9ezb69OnT4Lru3btj2bJl8j8wEVGaYbqZiIxLJBL40Y9+VP//Y8eOYdOmTRgzZgyOHz+OioqK+j+33XYbPvvsMxw8eBAAkJ2dXX+/2tpaHD16FK1bt0avXr2wY8cO1+etqKhATk6O620++eQTTJ48GXfeeSeefPLJlOtzcnJw+vRpnDlzRuZHJiJKO4wkElEoCgoK6v9dWlqKZDKJp556Cj/96U9TbptIJHD48GF07twZyWQS8+fPx4IFC/D555+jpqam/jYXX3yx5/Mmk8kmrztx4gS+973v4dJLL8Wbb77pen8rbU5ElKk4SSSiULRq1ar+37W1tQCARx99tMki1z169AAAzJkzB08//TTuvfdezJ49G7m5ucjKysL06dPrH6cpeXl5KCkpafL6SZMm4dChQ/jwww9TUtKWY8eOoXXr1mjRooXrcxERpTtOEokodN27dwdQl0q++eabXW/7m9/8BjfffDNee+21Bpd/+eWX6Nixo+t9r7zySqxYsQInTpxAu3btGlw3d+5crFu3DmvXrsUVV1zR5GN8/vnn6N27t+vzEBFlAq5JJKLQdezYEUOHDsWiRYtw6NChlOuPHDlS/++LLrooJWW8evVqlJWVeT7Pt7/9bSSTSXz00UcNLt+wYUN9qnvkyJGuj7Fjxw5cd911ns9FRJTuGEkkokh49dVXccMNN6Bfv36YMmUKunfvjvLycmzduhVlZWXYuXMnAGDEiBGYNWsW7rnnHlx33XX4n//5HyxfvhyXX36553Ncf/31yM3NxYYNGzB06ND6y8ePH49OnTrh8ssvx/Llyxvc57bbbquPUH700Uc4evQoRo0ape8HJyKKKE4SiSgSevfuje3bt+PnP/853nzzTVRUVKBTp04YMGAAnnnmmfrbPfnkkzh16hRWrFiBVatW4eqrr8Z//ud/4vHHH0/ZTNL4/9nZ2ZgwYQJWr16N2bNn119+9OhRAHX9mRvbtGlT/SRx9erV6Nq1a4MJJhFRpkok3bb6ERFlGGtN4X/913/hpptuEr7fuXPn0K1bNzz55JOYOnVqgCMkIooGrkkkolgpKCjA5MmTMXfuXKn7LV68GM2bN29Q35GIKJMxkkhEREREKRhJJCIiIqIUnCQSERERUQpOEomIiIgoBSeJRERERJSCk0QiIiIiSsFJIhERERGl4CSRiIiIiFJwkkhEREREKThJJCIiIqIUnCQSERERUYr/D/VhboOwiDntAAAAAElFTkSuQmCC", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(0,10,200)\n", "pcolor(x',x, [E₁_taylor(x+y*im)[2] for y in x, x in x], cmap=\"hsv\")\n", "colorbar()\n", "xlabel(\"real(z)\")\n", "ylabel(\"imag(z)\")\n", "title(L\"number of Taylor-series terms for $E_1(z)$\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not surprisingly, it is good for small $|z|$ but starts to get big quickly. For large $|z|$, we need a different algorithm, and for that we will use continued fractions.\n", "\n", "For very small $|z|$, we will want to just inline the Taylor polynomial with `@evalpoly`, so let's close by writing a function that just computes the coefficients of the series (not including $\\log(z)$):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "E₁_taylor_coefficients (generic function with 1 method)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SOLUTION code\n", "# n coefficients of the Taylor series of E₁(z) + log(z), in type T:\n", "function E₁_taylor_coefficients{T<:Number}(::Type{T}, n::Integer)\n", " n < 0 && throw(ArgumentError(\"$n ≥ 0 is required\"))\n", " n == 0 && return T[]\n", " n == 1 && return T[-eulergamma]\n", " # iteratively compute the terms in the series, starting with k=1\n", " term::T = 1\n", " terms = T[-eulergamma, term]\n", " for k=2:n\n", " term = -term * (k-1) / (k * k)\n", " push!(terms, term)\n", " end\n", " return terms\n", "end" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "11-element Array{Float64,1}:\n", " -0.577216 \n", " 1.0 \n", " -0.25 \n", " 0.0555556 \n", " -0.0104167 \n", " 0.00166667 \n", " -0.000231481\n", " 2.83447e-5 \n", " -3.1002e-6 \n", " 3.06192e-7 \n", " -2.75573e-8 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_taylor_coefficients(Float64, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's write a macro that inlines this expression for a given number of terms and precision, which we'll use to do performance optimization below. We will only do this `Float64` (double) precision, since that is the precision requested by the pset:" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "@E₁_taylor64 (macro with 1 method)" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SOLUTION code\n", "macro E₁_taylor64(z, n::Integer)\n", " c = E₁_taylor_coefficients(Float64, n)\n", " taylor = Expr(:macrocall, Symbol(\"@evalpoly\"), :t, c...)\n", " quote\n", " let t = $(esc(z))\n", " $taylor - log(t)\n", " end\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "2.837963777242665e-16" ], "text/plain": [ "2.837963777242665e-16" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relerr(@E₁_taylor64(2.0, 30), E₁_taylor(2.0)[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Good, seems to be computing the same thing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Continued-fraction expansion\n", "\n", "The [continued-fraction expansion for E₁](http://functions.wolfram.com/GammaBetaErf/ExpIntegralE/10/) is:\n", "$$\n", "\\frac{e^{-z}}{z + \\frac{1}{1 + \\frac{1}{z + \\frac{2}{1 + \\frac{2}{z + \\frac{3}{1 + \\cdots}}}}}}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, the exact continued-fraction expansion has an infinite number of terms. If we truncate it to a finite number of terms, there is some ambiguity about what the last term should be (or the first term, since we iterate backwards through the coefficients).\n", "\n", "People have investigated how to construct and define an *optimal* truncation for the continued-fraction expansion in some range of parameters, and the result is called a *modified approximant* [see e.g. equation (≈12) in Backeljaw and Cuyt, \"Algorithm 895: A continued fractions package for special functions,\" *ACM TOMS* **36**, article 15 (2009)].\n", "\n", "For E₁, I've played around a bit with this and ended up with a truncation that works pretty well:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "E₁_cf (generic function with 1 method)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compute E₁ via n terms of the continued-fraction expansion, implemented\n", "# in the simplest way:\n", "function E₁_cf(z::Number, n::Integer)\n", " # starting with z seems to give many fewer terms for intermediate |z| ~ 3\n", " cf::typeof(inv(z)) = z\n", " for i = n:-1:1\n", " cf = z + (1+i)/cf\n", " cf = 1 + i/cf\n", " end\n", " return exp(-z) / (z + inv(cf))\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check that this is converging for $z=4$:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "20-element Array{Float64,1}:\n", " 0.00582285 \n", " 0.000476212\n", " 5.60469e-5 \n", " 8.37068e-6 \n", " 1.48464e-6 \n", " 3.00369e-7 \n", " 6.7499e-8 \n", " 1.65353e-8 \n", " 4.35523e-9 \n", " 1.22051e-9 \n", " 3.60936e-10\n", " 1.11899e-10\n", " 3.61737e-11\n", " 1.21395e-11\n", " 4.21339e-12\n", " 1.50747e-12\n", " 5.54472e-13\n", " 2.09189e-13\n", " 8.0784e-14 \n", " 3.17858e-14" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[relerr(E₁_cf(4, n), E₁_slow(4)) for n in 1:20]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The continued-fraction expansion should converge more and more rapidly as $|z|$ gets large. Let's try $z = 8$:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "20-element Array{Float64,1}:\n", " 0.00162422 \n", " 6.12415e-5 \n", " 3.61306e-6 \n", " 2.87668e-7 \n", " 2.85331e-8 \n", " 3.35576e-9 \n", " 4.52707e-10\n", " 6.84218e-11\n", " 1.13852e-11\n", " 2.05794e-12\n", " 3.99931e-13\n", " 8.29366e-14\n", " 1.83504e-14\n", " 4.31774e-15\n", " 1.07943e-15\n", " 3.59812e-16\n", " 1.79906e-16\n", " 1.79906e-16\n", " 1.79906e-16\n", " 1.79906e-16" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[relerr(E₁_cf(8, n), E₁_slow(8)) for n in 1:20]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's write a function to figure out how many terms we need in this expansion to converge to about 14 digits. (We check convergence by comparing to the cf expansion with twice as many terms.)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition E₁_cf_nterms(Number) in module Main at In[16]:2 overwritten at In[27]:2.\n", "WARNING: Method definition E₁_cf_nterms(Number, Any) in module Main at In[16]:2 overwritten at In[27]:2.\n" ] }, { "data": { "text/plain": [ "E₁_cf_nterms (generic function with 2 methods)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function E₁_cf_nterms(z::Number, reltol=1e-14)\n", " for n = 1:100 # give up after 100 terms\n", " doubled = E₁_cf(z, 2n)\n", " if abs(E₁_cf(z, n) - doubled) ≤ reltol*abs(doubled)\n", " return n\n", " end\n", " end\n", " return 101\n", "end" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(1,10,100)\n", "pcolor(x',x, [E₁_cf_nterms(x+y*im) for y in x, x in x], cmap=\"hsv\")\n", "colorbar()\n", "xlabel(\"real(z)\")\n", "ylabel(\"imag(z)\")\n", "title(L\"number of cf-series terms for $E_1(z)$\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the contours can be pretty well approximated by ellipses, similar to the Taylor series above.\n", "\n", "Now, we'd like to figure out the crossover point where it becomes faster to compute a Taylor series than a continued-fraction expansion. To do this, we need to first come up with a very efficient way to compute the continued-fraction expansion:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inlining the continued-fraction expansion for a fixed number of terms:\n", "\n", "As in pset 2, we may want to inline this whole expansion for a fixed number of terms. It is helpful to be able to look at the expansion, and we'll do this with SymPy as in pset 2:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{e^{- z}}{z + \\frac{1}{1 + \\frac{1}{z + \\frac{2}{1 + \\frac{2}{z + \\frac{3}{1 + \\frac{3}{z + \\frac{4}{1 + \\frac{4}{z + \\frac{5}{z}}}}}}}}}}$$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "using SymPy\n", "display(\"text/latex\", E₁_cf(Sym(:z), 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As in pset 2, we'll use the Polynomials package to write a macro that inlines this as a ratio of two polynomials. (We can't exactly use the code from pset 2, since $z$ enters this expansion in a different way than in that pset, but the general idea is the same.)\n", "\n", "As above, our macro will only work in double (`Float64`) precision. We can compute the coefficients exactly as integers, but we need to use `BigInt` because otherwise they will quickly overflow. We can't use `BigInt` coefficients in the macro, however, because then the resulting computation will be done in (slow!) arbitrary-precision arithmetic, so we convert the coefficients to `Float64`." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition E₁_cfpoly(Integer) in module Main at In[19]:6 overwritten at In[96]:6.\n" ] }, { "data": { "text/plain": [ "@E₁_cf64 (macro with 1 method)" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SOLUTION code\n", "# for numeric-literal coefficients: simplify to a ratio of two polynomials:\n", "import Polynomials\n", "# return (p,q): the polynomials p(x) / q(x) corresponding to E₁_cf(x, a...),\n", "# but without the exp(-x) term\n", "function E₁_cfpoly{T<:Real}(n::Integer, ::Type{T}=BigInt)\n", " q = Polynomials.Poly(T[1])\n", " p = x = Polynomials.Poly(T[0,1])\n", " for i = n:-1:1\n", " p, q = x*p+(1+i)*q, p # from cf = x + (1+i)/cf = x + (1+i)*q/p\n", " p, q = p + i*q, p # from cf = 1 + i/cf = 1 + i*q/p\n", " end\n", " # do final 1/(x + inv(cf)) = 1/(x + q/p) = p/(x*p + q)\n", " return p, x*p + q\n", "end\n", "macro E₁_cf64(x, n::Integer)\n", " p,q = E₁_cfpoly(n, BigInt)\n", " evalpoly = Symbol(\"@evalpoly\")\n", " num_expr = Expr(:macrocall, evalpoly, :t, Float64.(Polynomials.coeffs(p))...)\n", " den_expr = Expr(:macrocall, evalpoly, :t, Float64.(Polynomials.coeffs(q))...)\n", " quote\n", " let t = $(esc(x))\n", " exp(-t) * $num_expr / $den_expr\n", " end\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compare this to SymPy's result for simplifying the continued fraction to a ratio of polynomials, just to make sure we are getting the same polynomial:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{z^{5} + 19 z^{4} + 107 z^{3} + 229 z^{2} + 314 z + 250}{z^{6} e^{z} + 20 z^{5} e^{z} + 125 z^{4} e^{z} + 320 z^{3} e^{z} + 480 z^{2} e^{z} + 480 z e^{z} + 120 e^{z}}$$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"text/latex\", cancel(E₁_cf(Sym(:z), 4)))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(Poly(250 + 314⋅x + 229⋅x^2 + 107⋅x^3 + 19⋅x^4 + x^5),Poly(120 + 480⋅x + 480⋅x^2 + 320⋅x^3 + 125⋅x^4 + 20⋅x^5 + x^6))" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_cfpoly(4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yay! Finally, these polynomials will be evaluated in the macro by Horner's rule or similar:" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{\\left(z \\left(z \\left(z \\left(z \\left(1.0 z + 19.0\\right) + 107.0\\right) + 229.0\\right) + 314.0\\right) + 250.0\\right) e^{- z}}{z \\left(z \\left(z \\left(z \\left(z \\left(1.0 z + 20.0\\right) + 125.0\\right) + 320.0\\right) + 480.0\\right) + 480.0\\right) + 120.0}$$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"text/latex\", @E₁_cf64 Sym(:z) 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although the transformation of the continued fraction to a ratio of polynomials is exact in the absence of roundoff errors, we should double check that this hasn't accidentally created big rounding errors:" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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tG/fPnr37h0DBgyIbt26RXl5+Rrb5HK5uOqqq/IyJAAAFKOkmL7mmmsa/vmRRx5Z5zZiGgCALV1STNfX1+d7DgAAKDkbfc300qVL4+qrr47HHnusMeYBAICSsdEx3bp16zjzzDO9+RAAgCYv6W4evXv3jpkzZ+Z5FAAAKC1JMT127Ni44YYbYvLkyfmeBwAASkby3Ty++tWvxsCBA6N79+7RvXv3dd4a75577snLkAAAUIySYvrFF1+MXC4X3/jGN2LVqlXx5ptvrrVNLpfb5OEAAKCYJcW066UBACDxmmkAAGATYnrVqlXxu9/9Lk466aT44Q9/GC+99FJERCxYsCDuuuuuePfdd/M2JAAAFKOkmP7444+jX79+ceSRR0ZdXV3ce++98f7770dERJs2bWLEiBE+ShwAgC1eUkz/7Gc/i1deeSUmTZoUb731VmRZ1rCuWbNmMWzYsHjggQfyNiQAABSjpJi+++6749///d/je9/73jrv2tGzZ09vUgQAYIuXFNMLFiyI7t27r3f9ihUrYuXKlclDAQBAKUiK6e233z6mTZu23vUPP/xw7LzzzslDAQBAKUiK6RNOOCF+/etfx+23395wvXQul4tly5bFOeecEw899FCcdNJJeR0UAACKTdKHtvz0pz+NV155JWpra+MrX/lKREQceeSR8cEHH8TKlSvjpJNOiuOPPz6vgwIAQLFJiulcLhc33XRTHHvssTFx4sR44403or6+Prbffvs47LDDon///vmeEwAAik5STK+27777xr777puvWQAAoKT4OHEAAEgkpgEAIJGYBgCARGIaAAASiWkAAEi0yTE9b968eOGFF2Lx4sX5mAcAAEpGckzfc889sdNOO8XXv/71qK6ujqeffjoiIubPnx+777573H333XkbEgAAilFSTP/xj3+MQw45JDp06BCjRo1q+EjxiIgOHTpE165d4+abb87bkAAAUIySYnr06NHRv3//mDJlSvzkJz9Za/0+++wTzz333CYPBwAAxSwppl9++eU47LDD1rt+6623jvfeey95KAAAKAVJMV1RUfGFbzh86623on379slDAQBAKUiK6W9/+9tx6623xsqVK9da984778RNN90UBxxwwCYPBwAAxSwppseOHRuzZ8+OPffcM2644YbI5XIxadKkOPfcc2PXXXeNLMti1KhR+Z4VAACKSlJM77jjjjFlypRo3759nHfeeZFlWVx22WVx8cUXx6677hqPP/54dOvWLc+jAgBAcWme+oW77LJLTJ48OT766KN48803o76+Prbbbrvo2LFjPucDAICilRTTr776auy8884REdGuXbvYc8898zoUAACUgqTLPHr37h277bZbXHzxxfHmm2/meyYAACgJSTH9X//1X9GxY8c4//zzY8cdd4yampq47LLLYtasWfmeDwAAilZSTJ900knxyCOPxJw5c+Kqq66KrbbaKn72s5/FdtttF/vss09cddVVMXfu3HzPCgAARSUpplfbeuut45RTTonHHnss3n777bjiiisil8vF6aefHttuu22+ZgQAgKK0STH9WZ07d45ddtklevXqFRUVFVFfX5+vXQMAQFFKvjVeRESWZfHoo4/G7bffHn/4wx9i/vz50a5duzjiiCPi8MMPz9eMAABQlJJi+vHHH4877rgjJk6cGO+99160bds2Dj744Dj88MNj//33j+bNN6nRS9rIkSOjqqoqamtro7a2ttDjAAA0eXV1dVFXVxcLFizI+75zWZZlG/tFZWVl0aZNmzjooIPi8MMPj0GDBkXLli3zPlwpmTZtWtTU1MTUqVOjurq60OMAAPA5jdFrSS8h//73v4/vf//70bp167wMAQAApSgppg899NB8zwEAACVng2J69OjRkcvl4pxzzomysrIYPXr0l35NLpeL8847b5MHBACAYrVB10yXlZVFLpeLJUuWRMuWLaOs7MvvqJfL5WLVqlV5GbIUuGYaAKC4Feya6c/fM9o9pAEAII8f2gIAAE1NUkw3a9YsbrvttvWuv/3226NZs2bJQwEAQClIiukvu8x61apVkcvlkgYCAIBSkXyZx/pieeHChTFp0qTo0KFD8lAAAFAKNjimL7zwwmjWrFk0a9YscrlcHHXUUQ1//+yfdu3axW9/+9s44ogjGnNuAAAouA3+0Ja99torTj755MiyLK677rr43ve+Fz179lxjm1wuF1tttVXU1NTEIYcckvdhAQCgmGxwTA8ePDgGDx4cERGLFy+Of/3Xf42999670QYDAIBil/Rx4jfffHO+5wAAgJKTFNOrzZ49O5577rlYsGDBOj/I5ZhjjtmU3QMAQFFLiumlS5fGscceG3feeWfU19dHLpdruF3eZ+/yIaYBANiSJd0a7+yzz4677rorxo4dG48++mhkWRa33nprPPzwwzF48OD45je/GS+88EK+ZwUAgKKSFNMTJ06MH//4x3HmmWfGLrvsEhERXbt2jf333z/uu++++MpXvhLXXnttXgcFAIBikxTT7733Xuy1114REVFeXh4R/7zDx2qHHnpo3HXXXXkYDwAAildSTG+99dbxwQcfRERERUVFtGvXLl5//fWG9QsXLoylS5fmZ0IAAChSSW9A3HvvvWPKlClx5plnRkTEQQcdFJdddll07tw56uvrY/z48dG3b9+8DgrA5pdl2RpvLC9GZoTi0FSf50mvTI8YMSK22267WLZsWUREXHTRRfGVr3wljj766Dj22GOjqqoqrr766rwOCsDmsWjRohg1YkTs3717HLzNNrF/9+4xasSIWLRoUaFHa2BGKA6l8jxfPee/Hnhg3vedy1bf024T1dfXx0svvRTNmjWLnXbaKZo336RbWJecadOmRU1NTUydOjWqq6sLPQ5AkkWLFsWh++wTp02fHgPr6yMXEVlETCoriyt79Yo7n3wyKisrzbgFzAibqlSe55+ds2N9fewRkddeS3plep07KiuLb37zm9G7d+8mF9IAW4rLzzknTps+PQb93y/GiIhcRAyqr4+R06fHFeeeW8jxIsKMUCxK5Xm+rjnzaYNemX7ssceSdt6/f/+krytFXpkGtgT7d+8ef5o5c52/cLKIOKBbt/jTjBmbe6w1mBGKQ6k8zz8757SIqIn8vjK9QS8hDxgwYKMuKF99AfqqVauSBwNg88qyLLZasWK9r9zkIqJixYqCvsnIjFAcSuV5/mVz5sMGxfRf/vKXRhwBgGKQy+VicYsWkUWs95WmxS1aFPQXoxmhOJTK8/zL5syHDYrp/fbbr5G+PQDFpN9BB8Wka6+NQfX1a617qKws9h06tABTrcmMUBxK5Xn+RXPmwybfzWPevHnx3nvvRY8ePWKrrbbK11wlxzXTwJZg9bveR37mzTpZ/PMX4/gieXe+GaE4lMrz/LNzdiqmu3ncc889sdNOO8XXv/71qK6ujqeffjoiIubPnx+777573H333XkZEIDNp7KyMu588sl4+pRT4oBu3eIHXbvGAd26xdOnnFI0vxjNCMWhVJ7nn53z5M6d877/pFem//jHP8bBBx8c++yzTxxwwAFxwQUXxOTJk+M73/lOREQceOCB0axZs7jnnnvyPnCx8so0sCUq9JuHNoQZoTiUwvO8MXot6ZXp0aNHR//+/WPKlCnxk5/8ZK31++yzTzz33HObPBwAhVXsvxgjzAjFoqk+z5Ni+uWXX47DDjtsveu33nrreO+995KHAgCAUpAU0xUVFbF48eL1rn/rrbeiffv2yUMBAEApSIrpb3/723HrrbfGypUr11r3zjvvxE033RQHHHDAJg8HAADFLCmmx44dG7Nnz44999wzbrjhhsjlcjFp0qQ499xzY9ddd40sy2LUqFH5nhUAAIpKUkzvuOOOMWXKlGjfvn2cd955kWVZXHbZZXHxxRfHrrvuGo8//nh069Ytz6MCAEBx2aBPQFyXXXbZJSZPnhwfffRRvPnmm1FfXx/bbbdddOzYMZ/zAQBA0droV6Y//fTTqKmpieuvvz4iItq1axd77rln7L333kIaAIAmZaNjuqKiImbMmNFk7yUIAACrJV0zPWjQoJg0aVK+ZwEAgJKSFNPnnXde/O1vf4ujjz46pkyZEnPmzIkPP/xwrT8AALAlS3oD4i677BIREa+++mrcdttt691u1apVaVMBAEAJSIrp888/3zXTAAA0eUkxfcEFF+R5DAAAKD1J10wDAABiGgAAkolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABIJKYBACCRmAYAgERiGgAAEolpAABI1LzQA2xpRo4cGVVVVVFbWxu1tbWFHgcAoMmrq6uLurq6WLBgQd73ncuyLMv7XpugadOmRU1NTUydOjWqq6sLPQ4AAJ/TGL3mMg8AAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYZpNlWVbU+2ssTfVxw6Yoled5KcxZCjM2hsZ43KXw87xU9plvpTCjmCbJokWLYtSIEbF/9+5x8DbbxP7du8eoESNi0aJFRbG/xtJUHzdsilJ5npfCnKUwY2NojMddCj/PS2Wf+VYKM64hIy+mTp2aRUQ2derUQo/S6BYuXJh9b5ddsgfLyrL6iCyLyOojsgfLyrLv7bJLtnDhwoLur7E01ccNm6JUnuelMGcpzNgYGuNxl8LP81LZZ7419oyN0WtiOk+aUkyf/+//nj1YVpZl//ck/+yfB8rKslEjRhR0f42lqT5u2BSl8jwvhTlLYcbG0BiPuxR+npfKPvOtsWcU00WsKcX0d7t1a/ivxc//qY/I9u/WraD7ayxN9XHDpiiV53kpzFkKMzaGxnjcpfDzvFT2mW+NPWNj9JprptkoWZbFVitWRG4963MRUbFiRWRZVpD9NZam+rhhU5TK87wU5iyFGRtDYzzuUvh5Xir7zLdSmHFdxDQbJZfLxeIWLWJ9T+MsIha3aBG53PpOhcbdX2Npqo8bNkWpPM9LYc5SmLExNMbjLoWf56Wyz3wrhRnXRUyz0foddFBMKlv3U+ehsrLYd+jQgu6vsTTVxw2bolSe56UwZynM2Bga43GXws/zUtlnvpXCjGvJ2wUjTVxTumZ69TttH/jcO20f2MR3Qedrf42lqT5u2BSl8jwvhTlLYcbG0BiPuxR+npfKPvOtsWdsjF7LZVmRXXhSoqZNmxY1NTUxderUqK6uLvQ4jW7RokVxxbnnxv/ee29UrFgRn7ZoEf2GDo3Tx4yJysrKgu+vsTTVxw2bolSe56UwZynM2Bga43GXws/zUtlnvjXmjI3Ra2I6T5paTH9WlmV5vX4p3/trLE31ccOmKJXneSnMWQozNobGeNyl8PO8VPaZb/mesTF6zTXTbLJ8n4jFfmKv1lQfN2yKUnmel8KcpTBjY2iMx10KP89LZZ/5VgozimkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEjjm4A0AAATCUlEQVQkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARE06pq+//vqoqamJli1bxujRo9daf+mll8Y3vvGNaNu2bdTU1MTixYsLMCUAAMWqeaEHKKQuXbrEhRdeGLfddtta66699tp4+OGH48knn4yuXbvGyy+/HC1btizAlAAAFKsmHdNDhw6NiIj7779/jeX19fVx8cUXx5QpU6Jr164REdG7d+/NPh8AAMWtKC/zWLx4cYwaNSoGDx4c7du3j7KysvjNb36zzm2XL18eZ555ZnTt2jUqKiqib9++MXny5E36/rNnz45PP/00fv/738fXvva16NWrV/zyl7/cpH0CALDlKcqYnj9/flx00UXx2muvRZ8+fSKXy61322OPPTZ+/vOfx9FHHx1XX311NG/ePIYMGRJPPPFE8vefM2dOLFiwIN544414++2344477oizzz47/vd//zd5nxRWXV1doUdgPRyb4ub4FC/Hpng5Nk1LUcZ0ly5d4p133okZM2bEpZdeGlmWrXO7Z555Jm6//fYYN25cjBs3Lk444YR45JFHYtttt40zzjhjjW1vu+22qKysjLZt28bJJ5/8hd+/vLw8crlcjBo1Klq2bBm77rprHHHEEfHAAw/k7TGyefnBVrwcm+Lm+BQvx6Z4OTZNS1HGdIsWLaJTp05fut3EiROjefPmceKJJzYsa9WqVRx//PHx5JNPxpw5cxqWH3nkkbFo0aJYuHBhXHfddV+43549e671ZsMvenUcAICmqShjekM9//zz0bNnz2jTps0ay/faa6+G9V9k1apVsXTp0li1alWsWLEili1bFvX19VFRURHDhg2LsWPHxvLly2P69Olxxx13xJAhQxrtsQAAUHpKOqbnzZsXnTt3Xmt5586dI8uymDt37hd+/ZgxY6KioiJ+9atfxcUXXxwVFRUxYcKEiIi45ppr4v33348OHTrEgQceGGPGjIl+/fo1yuMAAKA0lfSt8ZYsWRKtWrVaa3nr1q0b1n+RUaNGxahRo9a5rqqqKiZOnLhRs0RETJ8+fYO/hs1nwYIFMW3atEKPwTo4NsXN8Slejk3xcmyK1+pO+7JG3BglHdPl5eWxbNmytZYvXbq0Yf3mMnPmzIiIOOqoozbb92Tj1NTUFHoE1sOxKW6OT/FybIqXY1PcZs6cmbcrDko6pjt37rzOSznmzZsXEf+8K8jmMnDgwJgwYUJ069Zts0Y8AAAbZsmSJTFz5swYOHBg3vZZ0jHdp0+fePTRR+OTTz5Z402ITz31VORyuejTp89mm6VDhw7xox/9aLN9PwAANl6+3wNX0m9AHDZsWKxcuTJuvPHGhmXLly+PW265Jfr27dvwUeAAANAYivaV6WuvvTY+/vjjhntF33vvvfGPf/wjIiJGjBgRlZWVsddee8Xw4cPjrLPOinfffTd69OgRt9xyS8yaNStuvvnmQo4PAEATkMvW9/GCBda9e/d4++2317luxowZ8Y1vfCMi/vlK9HnnnRcTJkyIjz76KHbbbbcYM2ZM7L///ptzXAAAmqCijWkAACh2JX3NdDFYvnx5nHnmmdG1a9eoqKiIvn37xuTJkws9VpP3P//zP1FWVrbWn2bNmsUzzzxT6PGalMWLF8eoUaNi8ODB0b59+ygrK4vf/OY369z2tddei0GDBkVlZWW0b98+jjnmmJg/f/5mnrjp2NBj8+Mf/3id59POO+9cgKmbhmeffTZOOeWU6N27d7Rp0ya23XbbOPzww+ONN95Ya1vnzea1ocfGebP5vfrqq3HYYYfF9ttvH1tttVV07Ngx9ttvv7jvvvvW2jaf503RXjNdKo499ti46667YuTIkQ3XbA8ZMiQeffTR+Jd/+ZdCj9fknXrqqbHHHnussaxHjx4FmqZpmj9/flx00UWx7bbbNtyBZ13mzJkT3/rWt6Jdu3Yxbty4WLRoUVx22WXx8ssvxzPPPBPNm/txlW8bemwi/vlhWL/61a/is/8zs6qqajNM2TRdcskl8cQTT8Tw4cNjt912i3feeSd+8YtfRHV1dTz99NMNQea82fw29NhEOG82t1mzZsUnn3wSxx13XHTp0iU+/fTTuPPOO2Po0KFx4403xgknnBARjXDeZCR7+umns1wul1155ZUNy5YuXZr16NEj69evXwEn49FHH81yuVx25513FnqUJm/58uXZu+++m2VZlj377LNZLpfLbr311rW2+7d/+7dsq622ymbPnt2wbPLkyVkul8tuuummzTZvU7Khx+a4447LKisrN/d4TdqTTz6ZrVixYo1lb7zxRta6devs6KOPbljmvNn8NvTYOG+KQ319fdanT5+sV69eDcvyfd64zGMTTJw4MZo3bx4nnnhiw7JWrVrF8ccfH08++WTDnUgorE8++SRWrVpV6DGarBYtWkSnTp2+dLu77rorDjzwwDVuafnd7343evbsGXfccUdjjthkbeixWa2+vj4WLVrUiBOxWt++fdd6daxHjx6xyy67NHwccoTzphA29Nis5rwprFwuF9tss018/PHHDcvyfd6I6U3w/PPPR8+ePdf4wJiIiL322qthPYX14x//ONq2bRutW7eO73znOzF16tRCj8Q6zJ07N9577721LsmJ+Of59NxzzxVgKj7r008/jbZt20ZVVVW0b98+TjnllFi8eHGhx2py3n333ejQoUNEOG+KzWePzWrOm8L49NNP44MPPoi33norxo8fHw8++GDDXd4a47xxMdUmmDdvXnTu3Hmt5Z07d44sy9b5UedsHi1btoxhw4bFkCFDokOHDvHqq6/G5ZdfHv37948nnngivvnNbxZ6RD5j3rx5ERHrPZ8+/PDDWLFiRbRo0WJzj0ZEdOnSJc4444yorq6O+vr6eOihh+K6666LF198MR599NEoK/O6zOYwYcKEmDNnTowZMyYinDfF5PPHJsJ5U0inn3563HDDDRERUVZWFoceemj84he/iIjGOW/E9CZYsmRJtGrVaq3lrVu3blhPYeyzzz6xzz77NPz9wAMPjEMPPTR22223OOuss+KBBx4o4HR83upz5cvOJ1FQGGPHjl3j74cddljssMMOce6558bEiRPjsMMOK9BkTcdrr70Wp5xySvTr1y+OOeaYiHDeFIt1HZsI500hjRw5MoYPHx5z586NO+64I1atWhXLli2LiMY5b/xn0SYoLy9vODiftXTp0ob1FI/tt98+fvCDH8Rf/vKXNd5ZTeGtPlecT6Vj5MiRkcvl3Ap0M3j33Xfj+9//frRr1y5+//vfRy6XiwjnTTFY37FZH+fN5tGzZ8/4zne+E0cddVTce++9sWjRohg6dGhENM55I6Y3QefOnRv+d8FnrV7WpUuXzT0SX2KbbbaJ5cuXu2atyKz+323rO5+++tWvenWtyLRu3Trat28fH374YaFH2aItXLgwBg0aFAsXLoyHHnoovva1rzWsc94U1hcdm/Vx3hTGsGHD4q9//Wu88cYbjXLeiOlN0KdPn/jb3/4Wn3zyyRrLn3rqqcjlctGnT58CTcb6/P3vf4/WrVuv9aZRCqtLly7RsWPHePbZZ9da98wzzziXitAnn3wS8+fPj44dOxZ6lC3WsmXL4sADD4w333wz7r///thxxx3XWO+8KZwvOzbr47wpjNWXdixYsKBRzhsxvQmGDRsWK1eujBtvvLFh2fLly+OWW26Jvn37rnHLFTavdX2K0QsvvBB//OMfY+DAgQWYiC9z6KGHxn333bfGLSUfeeSR+Nvf/ubawgJatmzZWi8YRESMHj06IiIGDx68uUdqEurr6+Owww6Lp59+OiZOnNhwl6jPc95sfhtybJw3hfH++++vtWzlypVx6623Rnl5ecMH6uT7vMllLh7dJIcffnjcfffdceqppzZ8AuKzzz4bf/7zn6Nfv36FHq/J+u53vxvl5eXxL//yL9GpU6d45ZVX4qabbopWrVrFE088scGvIpAf1157bXz88ccxZ86cuP766+OQQw6J3XffPSIiRowYEZWVlTF79uyorq6Oqqqq+OlPfxqLFi2Kyy+/PL7xjW/EM888439XN5IvOzYffvhh7L777lFbWxs77bRTREQ89NBD8eCDD8aQIUPW+TG9bLpTTz01rr766hg6dGgMHz58rfU/+tGPIiKcNwWwIcdm1qxZzpsCOOSQQ2LhwoXRv3//6Nq1a7zzzjvx3//93/H666/HlVdeGT/96U8johHOm03+aJkmbtmyZdkZZ5yRdenSJSsvL8/23nvv7E9/+lOhx2ryfvGLX2R9+/bNOnTokLVs2TLr2rVrduyxx2Z///vfCz1ak9StW7esrKxsnX9mzZrVsN2rr76aDRo0KGvTpk321a9+NTvmmGOy9957r4CTb/m+7Nh8/PHH2THHHJP17Nkza9OmTVZeXp7tuuuu2SWXXJKtXLmy0ONvsQYMGLDe41JWVrbGts6bzWtDjo3zpjBuv/327IADDsg6d+6ctWzZMmvfvn12wAEHZPfdd99a2+bzvPHKNAAAJHLNNAAAJBLTAACQSEwDAEAiMQ0AAInENAAAJBLTAACQSEwDAEAiMQ0AAInENAAAJBLTAACQSEwDEBdccEGUlfmVALCx/OQEIHK5XORyuUKPAVByxDQAACQS0wBNwKeffrpZv9+SJUs26/cDKBQxDVBCnnvuuRg8eHBUVVVFZWVl7L///vH000+vsc2tt94aZWVl8dhjj8XJJ58cW2+9dWyzzTYN66dMmRJ77rlnlJeXxw477BA33njjer/fhAkTYo899oiKiopo37591NbWxuzZs9fYZsCAAbHbbrvFtGnTon///rHVVlvFOeecs959HnfccVFZWRlz586Ngw8+OCorK6NTp07x//7f/4ssyxL/zQAURvNCDwDAhnn11Vejf//+UVVVFT/72c+iefPmccMNN8SAAQPiscceiz333HON7U8++eTo1KlTjBo1KhYvXhwRES+99FIMHDgwOnXqFKNHj44VK1bEBRdcEJ06dVrr+40dOzbOP//8OOKII+LEE0+M999/P66++urYb7/94rnnnou2bdtGxD+vt54/f34MGTIkjjjiiDjmmGNi6623Xu/jyOVyUV9fHwMHDoy+ffvGFVdcEZMnT44rr7wyevToESeddFIe/60BNLIMgJJw8MEHZ61bt85mzpzZsGzevHlZ27ZtswEDBjQsu+WWW7JcLpftt99+WX19/Vr7qKioyGbPnt2w7LXXXsuaN2+elZWVNSybNWtW1rx582zcuHFrfP0rr7yStWjRIvvP//zPhmUDBgzIysrKsptuummDHsdxxx2XlZWVZWPHjl1jeXV1dbbnnntu0D4AioXLPABKQH19ffzpT3+KH/7wh7Httts2LP/a174WRx55ZEyZMiU++eSThuW5XC5OPPHENe7QUV9fHw8//HD88Ic/jK5duzYs33HHHWPgwIFrfL8777wzsiyL4cOHxwcffNDwp1OnTrHDDjvEX/7ylzW2b9WqVRx33HEb9Zg+/wr0t771rXjrrbc2ah8AheYyD4AS8P7778enn34aPXv2XGtdr169or6+Pv7xj39Er169GpZ369ZtrX0sWbIkevTosdY+dtxxx3jwwQcb/v7mm29GfX39OrfN5XLRsmXLNZZ17do1mjff8F8prVu3jvbt26+xrF27dvHRRx9t8D4AioGYBthClZeXJ39tfX19lJWVxUMPPbTOD3Np06bNJn2vZs2aJc8GUEzENEAJ6NixY1RUVMTrr7++1rrp06dHWVnZGnfsWN8+ysvL44033lhr3WuvvbbG37fffvvIsiy6deu2zlenAfgn10wDlICysrI44IAD4p577om33367Yfm7774bdXV18a1vfWutV4vXtY+BAwfG3Xffvcbt7aZPnx4PP/zwGtsecsghUVZWFhdeeOE69/Xhhx9uwqMB2HJ4ZRqgRIwZMyYmT54c/fr1i5NPPjmaNWsWN954YyxfvjwuvfTSNbbN1nO/5gsvvDAeeuih2HfffePkk0+OFStWxDXXXBO9e/eOF198sWG77bbbLsaMGRNnn312zJgxo+F+0G+99VbcfffdcdJJJ8Vpp53WqI8XoBSIaYASsfPOO8fjjz8eZ511VowbNy7q6+ujb9++cdttt8Uee+yxxrafvYvHZ+26667x8MMPx2mnnRajRo2Kr3/96zF69OiYO3fuGjEdEXHmmWfGjjvuGOPHj4/Ro0dHRMQ222wTgwYNiqFDh27Q91uf9W2/sfsBKLRctr6XLwAAgC/kmmkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAASiWkAAEgkpgEAIJGYBgCARGIaAAAS/X+NTKMy/zqFAgAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "semilogy(0:30, [relerr(@eval(@E₁_cf64(3.0, $n)), E₁_cf(3.0, n)) for n in 0:30], \"ro\")\n", "xlabel(\"order n\")\n", "ylabel(\"relative error\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks good!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Taylor/continued-fraction crossover\n", "\n", "Let's do some benchmarking to figure out (roughly) at what $|z|$ it becomes cheaper to use a hard-coded continued-fraction expansion than a hard-coded Taylor expansion:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition time_taylor(Any) in module Main at In[23]:2 overwritten at In[29]:2.\n", "WARNING: Method definition time_cf(Any) in module Main at In[23]:9 overwritten at In[29]:9.\n" ] }, { "data": { "text/plain": [ "time_cf (generic function with 1 method)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function time_taylor(z)\n", " E₁, n = E₁_taylor(z)\n", " f = gensym() # generate a function name so that we can benchmark in a function\n", " @eval $f(z) = @E₁_taylor64 z $n\n", " b = @eval @benchmark $f($z)\n", " return time(minimum(b)) # time in ns\n", "end\n", "function time_cf(z)\n", " n = E₁_cf_nterms(z)\n", " f = gensym() # generate a function name so that we can benchmark in a function\n", " @eval $f(z) = @E₁_cf64 z $n\n", " b = @eval @benchmark $f($z)\n", " return time(minimum(b)) # time in ns\n", "end" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAAI6CAYAAAA+BG5ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4FNXXwPHvbBJIIWwIoYQASQAh9Ca9mAAiP0pAaUZKBOk9CK+AIEFAAUGkRKUoRTAgTUINUoJ0kKpIESQgTaUloYaQef8YN7DsphCSTMr5PM8+yszszJnZ2c3Zu+feq6iqqiKEEEIIIYQwY9A7ACGEEEIIITIjSZSFEEIIIYSwQhJlIYQQQgghrJBEWQghhBBCCCskURZCCCGEEMIKSZSFEEIIIYSwQhJlIYQQQgghrJBEWQghhBBCCCskURZCCCGEEMIKSZRFiu3cuRODwcDHH3+cbse4ePEiBoOB7t27p9sxRPpbuHAhBoOBxYsX6x1Kqs2cOZPy5cvj6OiIwWBg5syZGR6DwWCgUaNGL70fX19fDAbzj/uMeD+nxqJFi7L8vePm5kalSpX0DiNLunz5MgEBARQtWhQbGxtsbGyIj49P0XPff/99nJ2duXnzZjpH+WLu3buHwWDA398/zffduHFjKlasiEyynH4kURYJUpKkKoqCoijpGkdGHEOkr6z+Gi5btowhQ4bg4OBAUFAQwcHB1K5dO8PjSKvrmNh+MuvrlJKYTAl1Sh82NjYZELkmM17TrOLtt99m1apVNGnShI8++ojg4GCLL3nW/PHHH8yePZshQ4aQP3/+DIg0cxg/fjwnT55k3rx5eoeSbdnqHYDIOmrVqsWpU6dwc3NLt2N4eHhw6tQpjEZjuh1DpL+33nqLOnXq4O7urncoqbJhwwYURWHDhg0UKlRItzhOnTqFo6Njuuw7I97P6alKlSoEBwebLYuMjGThwoV4eXnx7rvvmq2T5DXzi4qKYu/evbRt25aFCxe+0HPHjh2LwWAgKCgofYLLpOrWrUuDBg0IDg6me/fu2NpKWpfW5IqKBMn9dGNvb0/p0qXTNQZbW9t0P4ZIf87Ozjg7O+sdRqpdvXoVQNckGUjX90JGvJ/TU+XKlalcubLZsp07dyYkyh999JFOkYnUunLlCsALf8H+559/WLVqFf7+/ri6uqZHaJlaYGAgPXv2ZPXq1XTo0EHvcLIdKb0QAIwbN44SJUqgKEpCfanpYaoVTKym0dfXFxsbG+Li4vj4448pVaoUDg4O+Pj4MH/+/ITtvv76aypVqoSjoyPFihWzaA2CxMs/3n33XQwGA5cuXWLOnDlUqlQJBwcHChcuTO/evYmOjrZ6XuHh4dSrV488efKQP39+3nzzTc6cOWO2v5S6ffs2H374IRUrVsTJyQkXFxeqVKnCyJEjefDggdm2586do2vXrhQtWpTcuXPj4eFBYGAg586ds9iv6afFn3/+mdDQUF599VWcnJzw8PDg/fffJzY2FoDt27fj5+eH0WjE1dWVrl27cuvWLYv9eXl5UaJECaKjoxkwYABFixbFwcGB8uXLM2vWLKvntnDhQtq1a0fJkiVxdHTEaDRSv359li5danV702v++PFjPv74Y3x8fLC3t0943RKrUf71118JCAjA29sbe3t7ChYsSPXq1QkKCuLJkydm20ZHRzNy5Eh8fHxwcHDA1dWVZs2asW3bNot4nr03jx8/TosWLciXLx9OTk74+vqyb98+q+fxvHHjxmEwGNixYweqqib6s/22bdto1qwZ+fPnx97enjJlyjBy5Eir92Fy1yop1mqUn71fVq5cSa1atXByciJ//vwEBAQkJPnJSe79HB8fzyeffELp0qWxt7enePHijBgxgsePH1vdn+l9Vbx4cXLnzk3hwoXp1KkTZ8+etbr9+fPnad++Pa6uruTJk4d69eqxceNGIPkv7S9r7ty5tGnThhIlSuDo6Ei+fPnw9fVl5cqVFttWrFiR3Llz8++//1rdl+memTt3brLHffDgAR9//DEVKlTA0dERFxcXGjVqRFhYmMW2J0+exGAwMGjQIH7//XfeeustChYsiI2NDUeOHEn0GGPGjMFgMLBgwQKr68+fP29xX925c4cxY8ZQvnx58ubNi9FopHTp0nTu3JmTJ08me17JiYuLY9asWdSpUwej0YiTkxNlypShT58+/PXXXwAUKFCAChUqoCgKs2fPTnjvDRo0KNn9L168mLi4OKtJYkqv440bNxg2bJjF583OnTst9nnr1i0mTZqEr68vHh4eCfd7u3btknxtUqpAgQJJlhE9f03atWuHwWDgm2++eeljC0vSoiwA8PPzIyoqii+++IIqVarQpk2bhHVVqlRJ8rmmnzTffvttDh48SPPmzbGzs2PlypX07t0bOzs7jh8/znfffUfLli1p0qQJYWFhfPzxxzg5OTF8+PBk4zPVUg4fPpwtW7bQqlUr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PDu7DEmS9+/fT+PGjXny5AmNGzemdevW5M2bF4PBwLFjx1i7di2PHj0ye46vry9ly5YlNDSUadOm4eTkxJw5c1AUhd69eyd7zKioKADc3d2trjctv3PnjsW6wlk46ZBEOZvLk0dLjPv100oyPv8c5s6FAQNg+HAoUEDvCIUQQojUqdeqFeEhITSzUg6x2WCgfvv2UK1a2h2vXbukj+fvn2bHSsqECRN4+PAhERERNGjQwGzdpEmTWLt2rdXn9enTh8GDB7N06VK6du3K0qVL8fDwoEWLFske02g0AnD9+nWr669du2a23bMy4stDepEa5Rwib1746CO4cEFraf7qK/D2hg8/hFu39I5OCCGEeHHDJk7k87Jl2WQwYBp1WAU2GQxML1uW9ydMyLLHs7GxAeDJkycW686fP4+rq6tFkgwQERGR6D4DAwNxdHRk7ty5LF++nDt37tCjR48UJbJlypTB0dGR48ePEx0dbbF++/btAFRLwy8mmYEkyjlMvnwwfryWMA8YoLUye3tDcDD896uKEEIIkSU4Ozuzat8+DgwYQFMvL1p7eNDUy4sDAwawat8+nJ2ds+zx8uXLh6IoVscb9vLy4tatW/z2229my7/55hu2bNmS6D7z5s3LO++8w5EjRxg9ejS2trYp7mRnZ2dHp06diI6OZsyYMWbrzp8/z8yZM8mVKxddunRJ0f6yCim9yKHc3LSOfkFBMHmy9pgxA4YNg0GDII0/W4QQQoh04ezsTPCMGTBjRoZ0pMuo4zk5OVGrVi127dpF586dKV26NDY2Nvj7+zNkyBDCw8OpV68eHTp0wGg08ssvv7Bnzx7at2/PihUrEt1vv379mD9/PlevXsXf39/q6BmJmTRpErt27WL27NkcPHgQPz8//v33X1asWMHdu3cJCQnB09MzLU4/05BEOYcrVEirWx42DD79FD7+GKZPh//7P+jfH958swsXLybe1OzpaWTLlu8yMGIhhBDCuoyuhU3v4y1ZsoSgoCDCw8NZtmwZqqpSrFgxunbtyvr165kwYQI//PADNjY21KpVix07dnD+/HlWrlyZ6D6rVKlClSpVOH78eJKd+BRFsTi/fPnysX//fj799FNWr17N9OnTcXBwoHbt2gwfPpzGjRunaD9ZiaKqMpm4NUeOHKF69eocPnw429XbJOWvv2DiRG2EDFdXUFV//v03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UAYAAABsEJQBAAAAG5X83YBAN3bsWIWHh2vw4MEaPHiwv5sDAABQ4S1atEiLFi1SSkqKT1/HYVmW5dNXKKMSExPVqVMnbdmyRdHR0f5uDgAAAC7g67xG6QUAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIA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VJs3b1alSuaf7Yceekjdu3fX448/nh2U27dvr127duV5rrvvvlutWrW66E16O3fuVK1atVS9evU82/v375/n+yVLligxMVHx8fFq27Ztnn3NmjXTwoULi/8DA0CAovQCAAKIw+HQyJEjs78/efKkVq1apUGDBiklJUVJSUnZjz59+uinn37S4cOHJUnBwcHZ57lcLp04cUKhoaFq1aqVEhMTC33dpKQk1axZs9Bjtm/frhEjRujWW2/VU089lW9/zZo1dfbsWaWnpxfnRwaAgMWIMgAEmKioqOw/7969W5Zl6emnn9akSZPyHetwOPTbb78pMjJSlmVp1qxZeuWVV7R3715lZWVlH1O7du2Lvq5lWQXuS01N1W233aZGjRrprbfeKvR8dwkJAJR1BGUACDAhISHZf3a5XJKk8ePHF7gQSIsWLSRJ06ZN01/+8hfdd999io+PV61ateR0OvXII49kP09BIiIitGnTpgL3Dx06VEeOHNHmzZvzlWe4nTx5UqGhoapSpUqhrwUAZQVBGQACWLNmzSSZsopevXoVeuzSpUvVq1cvvfbaa3m2Jycnq06dOoWee/nll+u9995TamqqwsLC8ux74YUXlJCQoA8//FCXXXZZgc+xd+9etW7dutDXAYCyhBplAAhgderUUVxcnObNm6cjR47k23/8+PHsPwcFBeUrn1iyZIkOHjx40dfp2rWrLMvSli1b8mxfsWJFdtnHzTffXOhzJCYmqlu3bhd9LQAoKxhRBoAAN2fOHF1zzTW64oordP/996tZs2Y6evSoNmzYoIMHD+qbb76RJPXr109Tp07V8OHD1a1bN23btk3vvvuumjdvftHX6N69u2rVqqUVK1YoLi4ue/vgwYNVt25dNW/eXO+++26ec/r06ZM9Ur1lyxadOHFCf/zjH733gwOAnxGUASDAtW7dWl9//bWeeeYZvfXWW0pKSlLdunV15ZVXavLkydnHPfXUU0pLS9N7772nf/3rX+rUqZP+85//6Iknnsh3g92F3wcHB2vIkCFasmSJ4uPjs7efOHFCkjRs2LB87Vq1alV2UF6yZImaNGmSJ2QDQFnnsAq7zRkAUGG4a4w/++wz9ezZs8jnnT9/Xk2bNtVTTz2lUaNG+bCFAFC6qFEGAEgy09KNGDFCL7zwQrHOmz9/vipXrpxn/mcAKA8YUQYAAABsMKIMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAIANgjIAAABgg6AMAAAA2CAoAwAAADYIygAAAICN/w/cgCPGlXWAJwAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(2,5, 10)\n", "semilogy(x, [time_taylor(x) for x in x], \"ro-\")\n", "semilogy(x, [time_cf(x) for x in x], \"bs-\")\n", "xlabel(\"real(z)\")\n", "ylabel(\"time (ns)\")\n", "legend([\"taylor\", \"cf\"])\n", "title(\"timing comparison for inlined Taylor vs. cf (real z)\")" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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mWtSubFFmYiIiCqkmjU1KGhINmV5xSxvxIgRWLhwIT777DOEhobCz89Pb/mNGzfYLaMMMCgTERFRhVTSN/coT+X5+flhwYIFGDFiBJ5//nl069YNdevWxd27d3H8+HFoNBrs3r27zOpTWTEoExEREZVDQ4cORePGjTFjxgzs27cPmzZtgqurK5o0aYKhQ4fqrcubjJQOBmUiIiKiciowMBBr164tcJ29e/eWUW0qH17MR0RERESkgkGZiIiIiEgFgzIRERERkQoGZSIiIiIiFQzKREREREQqGJSJiIiIiFQwKBMRERERqWBQJiIiIiJSwaBMRERERKSCd+YzITIyEhqNBuHh4QgPDzd3dYiIiIgqvaioKERFRSE5OblUy2FQNmHWrFnw9/c3dzWIiIgqlbi4OHNXgczI1POvbcCMjY1FQEBAqdWDQZmIiIjKDVdXV9ja2qJfv37mrgqZma2tLVxdXc1aBwZlIiIiKje8vLwQFxeHxMREc1eFzMzV1RVeXl5mrQODMhEREZUrXl5eZg9IRABHvSAiIiIiUsWgTERERESkgkGZiIiIiEgFgzIRERERkQoGZSIiIiIiFQzKREREREQqGJSJiIiIiFQwKBMRERERqWBQJiIiIiJSwaBMRERERKSCQZmIiIiISAWDMhERERGRCgZlIiIiIiIVDMpERERERCoYlImIiIiIVDAoExERERGpYFAmIiIiIlLBoExEREREpMLS3BUo7yIjI6HRaBAeHo7w8HBzV4eIiIio0ouKikJUVBSSk5NLtRxJCCFKtYQKKjY2FgEBATh58iT8/f3NXR0iIiIiyqe08xq7XhARERERqWBQJiIiIiJSwaBMRERERKSCQZmIiIiISAWDMhERERGRCgZlIiIiIiIVDMpERERERCoYlImIiIiIVDAoExERERGpYFAmIiIiIlLBoExEREREpIJBmYiIiIhIBYMyEREREZEKBmUiIiIiIhUMykREREREKhiUiYiIiIhUMCgTEREREalgUCYiIiIiUsGgTERERESkgkGZiIiIiEgFgzIRERERkQoGZSIiIiIiFQzKREREREQqGJSJiIiIiFQwKBMRERERqWBQJiIiIiJSwaBMRERERKSCQZmIiIiISIWluStQ3kVGRkKj0SA8PBzh4eHmrg4RERFRpRcVFYWoqCgkJyeXajmSEEKUagkVVGxs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T39kNFCTDsopKSlu0ysqFRQUSHKtntFYmZmZSkhw75gOh0MOh6PRnw0AAM5qClMILOvsg4/du9fvGtt2bZXuaUpI5dedO88G8PqE5L17pVGjzKuJeFplpCk+5Jidna3s7Gy3spKS2qel+ILXQbm8vFwrVqzQunXrdODAAT322GO65JJLVFJSog8++ECDBg3S9xqzVk09VK6xfOzYMbcH+j799FNZlqW+ffs2+h5PPfWU0tPTG/05AACgZbIs1zSLVq2kLl3qf11pqXTxxdKuXbWfExnpmnZSuRlN9ZVFPG1GExtbv1Dt6X1cXN1TR3ypcqCy+rzt0lLbr/f0KigXFxfruuuuU05OjuLj43X8+HHdfffdkqT4+HjNmDFDt99+u373u9/5tLLnGjt2rObPn6/nn39e9913nyTXTn3Lli3TgAED3Fa8AAAAaEpiYqSIOpJaSoq0enXNctt2BW1Pa2Gb3n/3nXv5sWO13zs83PMmM3VtQlP5vq6f8Vzu87adkjIa9gEN4FVQ/s1vfqOvv/5a7733nvr16+e25nF4eLjGjh2rt99+u1FB+dlnn1VxcbHy8/MlSWvWrNG3334rSZoxY4Zat26t/v37a9y4cXrooYe0f//+qp358vLytHTpUq/vDQAA0JRZlmvUODa2cZvRlJe75mTXti626X1+vrR5s3u56QHISnFxDRvRDuS8ba+C8t/+9jfdfffd+uEPf1i1hXV1aWlpWrZsWaMqNn/+fO3du1eSaxm3VatWadWqVZJcu+9Vbj398ssva/bs2crKylJRUZH69Omjt956iyXfAAAAGik8XDrvPNfLW5Wj255GtE1l//d/7uXBeLDRq6BcUlKi1NTUWo+XlZXpjKdfHeph9+7d9TovKipKTzzxhJ544olG3Q8AACDUNIeNaaqPbnfo4P3nnDnjGt3OyHCthx0IXgXlHj16yOl01nr8/fff10UXXeR1pQAAANA0VgIJlIgI11J+gVyxI8ybi+644w795S9/0fLly2XbrqcNLcvSqVOnNGvWLL377ru68847fVpRAAAAIJC8GlG+55579PXXX8vhcOi8/0xaufXWW1VYWKgzZ87ozjvv1NSpU31aUQAAACCQvArKlmVpyZIlmjRpkl577TVt375dFRUV6tGjh2655RYNGTLE1/UEAAAA3OZtl5YW6z9rP/hFo3bmGzx4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AAAYEJQBAAAAA4IyAAAAYEBQBgAAAAwIygAAAIABQRkAAAAwICgDQAuTl5ensLAwvfTSSzWO/eIXv9C1117boM9bvHixunbtqrKyMl9VEQBCAkEZACBJ2r17t1544QXNmjWrQddNnjxZp0+f1uLFi/1UMwAIDoIyAECS9PTTT6t79+4aMmRIg66Ljo7WpEmTtGDBAj/VDACCg6AMACHsxIkTAbnPmTNn9Oqrr2r8+PFeXX/LLbdoz549Wr9+vW8rBgBBRFAGgBDx29/+VmFhYfrmm2906623KjExUVdeeaUkacuWLRo7dqySkpIUGxuryy+/XG+88Ybb9UVFRbr//vvVp08ftW7dWgkJCRo5cqS+/PLLOu/9j3/8Q4WFhbr66qvdylNTUxUWFmZ8ffTRR1XnpaenKzExUatXr/bBvwQAhIaIYFcAAOBiWZYkady4cUpLS9Pvf/972batzZs3a9CgQfr+97+vhx56SK1atdJf//pX/fjHP9brr7+uG264QZK0a9curVmzRuPGjVNqaqr279+vxYsXa+jQodq8ebM6dOhQ6703btwoy7LUr18/t/Knn35ax44dcytbsGCB/vWvfykpKcmtPD09XZ988okv/ikAICQQlAEgxPTr108vv/xy1ffXXHONunXrpk2bNikiwvWf7bvuukuDBw/Wgw8+WBWU+/Tpo23btrl91sSJE3XBBRfU+ZDeli1blJiYqPj4eLfyMWPGuH2/YsUKOZ1OzZ07VxdffLHbse7duysrK6vhPzAAhCimXgBACLEsS3feeWfV90VFRVq3bp3GjRunkpISFRYWVr1GjBih7du3q6CgQJIUGRlZdV1FRYUOHz6suLg4XXDBBXI6nR7vW1hYqLZt23o8Z/PmzZo6dapuvPFGzZw5s8bxtm3b6uTJkyotLW3IjwwAIYsRZQAIMampqVXvd+zYIdu2NXv2bD388MM1zrUsSwcOHFBKSops29bChQv13HPPaffu3SovL686Jzk5uc772rZd67GjR4/qpptuUufOnfXiiy96vL5yCgkANHUEZQAIMbGxsVXvKyoqJEn3339/rRuB9OzZU5L0+OOP67/+6790xx13aO7cuUpMTFRYWJjuueeeqs+pTVJSknJycmo9PmnSJO3bt0+bNm2qMT2jUlFRkeLi4hQdHe3xXgDQVBCUASCEde/eXZJrWsXw4cM9nrty5UoNHz5czz//vFt5cXGx2rVr5/HaXr166dVXX9XRo0fVunVrt2Pz5s3TmjVrtGrVKp1//vm1fsbu3bt14YUXerwPADQlzFEGgBDWrl07DR06VIsXL9a+fftqHD906FDV+/Dw8BrTJ1asWKH8/Pw673PFFVfItm3l5ua6la9du7Zq2sfo0aM9fobT6dTAgQPrvBcANBWMKANAiHv22Wd15ZVX6pJLLtG0adPUvXt37d+/Xxs3blR+fr4+//xzSdKoUaM0Z84cTZkyRQMHDtRXX32lV155RT169KjzHoMHD1ZiYqLWrl2roUOHVpU7HA61b99ePXr00CuvvOJ2zYgRI6pGqnNzc3X48GH9+Mc/9t0PDgBBRlAGgBB34YUX6rPPPtOjjz6qF198UYWFhWrfvr369eunRx55pOq8mTNn6sSJE3r11Vf117/+VRkZGXr77bf1m9/8psYDdud+HxkZqQkTJmjFihWaO3duVfnhw4clSZMnT65Rr3Xr1lUF5RUrVqhr165uIRsAmjrL9vSYMwCgxaicY/zOO+9o2LBh9b7u9OnT6tatm2bOnKnp06f7sYYAEFjMUQYASHItSzd16lTNmzevQdctXbpUUVFRbus/A0BzwIgyAAAAYMCIMgAAAGBAUAYAAAAMCMoAAACAAUEZAAAAMCAoAwAAAAYEZQAAAMCAoAwAAAAYEJQBAAAAA4IyAAAAYEBQBgAAAAwIygAAAIDB/wP73d4FZ8FxJwAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(2,5, 10)\n", "semilogy(x, [time_taylor(x + 0im) for x in x], \"ro-\")\n", "semilogy(x, [time_cf(x + 0im) for x in x], \"bs-\")\n", "xlabel(\"real(z)\")\n", "ylabel(\"time (ns)\")\n", "legend([\"taylor\", \"cf\"])\n", "title(\"timing comparison for inlined Taylor vs. cf (complex z)\")" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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MXafSX379lX//v01c+ZM/fvf/7ZbV2JiombOnKmAgAB17tz5vtu9fv26QkNDtWfPHlWuXFkDBw5UXFycFi1apNatW+ujjz7SW2+95bDczz//rJCQEFWrVk0vvfSSrly5In9//2S3Ex4erg8//FBfffWV0z7Uc+bMkWEYtrbExEQ1bNhQBw4cUP369dWsWTPbRYL169ercePGqlix4n337X6uXbumxo0ba9u2bSpVqpTCw8Pl7++vEydOaNGiRWrcuLGKFy+uf//73zp58qQmT56smjVrqlmzZpKkmjVrPnAbSZ/99erVS3FdSe+j3r17a+vWrWrRooWaNGmib775Rm+88YZM09SNGzc0ZswYtWrVSg0aNNC3336rTz/9VB4eHhozZozd+l5//XXly5dPdevWVdGiRRUTE6PvvvtOffr00Y8//qhJkybZzZ/0esfHx6t169YqX768jh49qmbNmukf//hHsn36k9uX+fPn65tvvtHzzz+vvn376sCBA1q+fLn27t2rgwcPKnfu3Lb5//vf/2r27NkKDQ3VM888Iw8PD/3444+aMmWK1qxZo++//96hn7V05wLAW2+9pUaNGqlnz576888/5ePjo+7du2vs2LFaunSpOnbsaLdMXFycFi5cqNKlS6tx48b3PSYhISFOL5BFR0dr4sSJ8vb2dvhcq1u3rsaOHavvvvtOtWvXvu/6syUT2crJkydNwzDMbt26OW2PiooyDcMwR4wYYTc9NDTUNAzDrFmzphkXF2eb/ttvv5ne3t5m3rx5zVKlSpnnzp2ztcXExJgFChQwH3nkEfP27dsPrOGf//ynaRiGWbJkSfOPP/6wTb99+7b59NNPmxaLxdyzZ49t+pUrV8zAwEDT19fX/Omnn+zWNWTIENMwDNNisZinTp1K0WtTu3Zt02KxmGPGjHFou3jxonnjxg3b/8uXL29aLBYzIiLCbr6FCxeahmGYFSpUsJs+fPhw0zAMMzAw0Dxy5Iht+o0bN8yKFSuaHh4eZoECBcwtW7bYLffcc8+ZFovFPHDggN30oKAg02KxmE8//bR58+ZN2/TLly+bpUuXNi0Wi8O6fvvtN4f9unXrltmoUSPT29vbPHv2rF1b0jGvUqWKeenSJYdlZ8+ebVosFnPOnDm2aa+99pppsVjMlStXOswfExNj9/9XXnnFNAzD7NOnj930Y8eO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R//617/yTMGjYjtx4oSaNWum8ePH65FHHpEkde/enRphD/LHH3+odevW6tq1qz7//HOrh4My1LRpU+3Zs0ejRo1y6hIxatQozZkzRzt27FCTJk0sHCFc6a677tInn3yiw4cPq1atWlYPBy4QGxur2NhY9evXT7Vr19Znn32mt99+W6+99poefPDBYp+HIFwMvXr1UlJSkn766Serh4IyNGrUKK1evVqbN29WlSrmwxGCsOe566679Omnnyo1NVU2m83q4aCMXHnlldqyZYu+++47de7c+cL+H374QV27dtW7776ru+++28IRwlVSUlIUGhqqHj16aMmSJVYPBy7w4Ycfavjw4dq1a5dTR5Bhw4Zp0aJF2rdvX7F/AaJGuBj69eun9evXa+fOnVYPBWVk165deuuttzR69GgdPHhQ8fHx2rt3r86dO6f09HTFx8fr5MmTVg8T5aBhw4ZKS0tTSkqK1UNBGapXr54kKTQ01Gl/9id7/P2uvD799FOdPXuWsohK7I033lBUVFSetngxMTFKTU3VL7/8UuxzEYSLIbs5c1JSksUjQVk5ePCgHA6HRo8erYiICEVERCgyMlI///yztm/frsjISE2aNMnqYaIc/PHHH/L19aWHdCUTHR0tyfxdz+3QoUOSpODg4HIfE8pHbGysqlevrt69e1s9FLjIkSNH8u38k56eLslcLFlcXCyXy7Fjx/L845iRkaH58+erWrVquvzyyy0aGcraFVdckW/D7XHjxunMmTN69dVXFRkZacHI4CrHjx9XnTp1nPZt2rRJy5cv1y233GLRqOAqAwYM0LRp0zR37lx169btwv633npL3t7eTvtQeRw/flxff/21Bg8eLF9fX6uHAxdp1qyZvvzyS+3atctpQaQFCxaUeIVYgnAuDzzwgE6fPq0uXbqofv36SkhIUGxsrLZv364ZM2bIz8/P6iGijAQFBSkmJibP/pdfflk2m42ZhEpo4MCBqlatmjp27KiQkBBt3rxZb731lqpXr64XXnjB6uGhjLVt21bDhg3TvHnzlJ6erq5du+qbb77R4sWLNXbsWNWtW9fqIcIFPvzwQ2VmZlIWUck9/vjjWrFihTp37qyHHnpIQUFBWr58uVauXKmRI0eW6O83F8vlsnDhQs2dO1e///67EhMTFRAQoOjoaI0ePZoZIw/RvXt3nThxQps2bbJ6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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(3,8, 10)\n", "semilogy(x, [time_taylor(x*im) for x in x], \"ro-\")\n", "semilogy(x, [time_cf(x*im) for x in x], \"bs-\")\n", "xlabel(\"real(z)\")\n", "ylabel(\"time (ns)\")\n", "legend([\"taylor\", \"cf\"])\n", "title(\"timing comparison for inlined Taylor vs. cf (imaginary z)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, it looks like the inlined contined-fraction approach becomes better than Taylor at around $z \\approx 3$ on the real-$z$ and about $z \\approx 5$ on the imaginary-$z$ axis, where the number of terms in both the cf and Taylor expansions is about 30:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(26,33)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_cf_nterms(3.0), E₁_cf_nterms(5.0im)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(28,35)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_taylor(3.0)[2], E₁_taylor(5.0im)[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Putting it all together\n", "\n", "Let's put this all together into a single function that splits the (right-half) complex plane into different ellipses and uses hard-coded Taylor or continued-fraction expansions in each piece.\n", "\n", "First, let's figure out the dividing lines along the real and imaginary axes to use continued-fraction expansions with 30, 15, 8, and 4 terms:" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4×2 Array{Float64,2}:\n", " 2.8 5.8\n", " 7.6 12.0\n", " 23.2 28.8\n", " 199.0 203.6" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 1:0.2:1000\n", "cf_cutoffs = hcat([ x[findfirst(x -> E₁_cf_nterms(x) < n, x)] for n in (30,15,8,4) ],\n", " [ x[findfirst(x -> E₁_cf_nterms(x*im) < n, x)] for n in (30,15,8,4) ])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we approximate the cutoff in the complex plane $z=x + iy$ by an ellipse, then we want an equation $x^2 + ay^2 ≥ b^2$, where $a$ and $b$ are given by:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4×2 Array{Float64,2}:\n", " 0.233056 7.84\n", " 0.401111 57.76\n", " 0.64892 538.24\n", " 0.955324 39601.0 " ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hcat( (cf_cutoffs[:,1]./cf_cutoffs[:,2]).^2, cf_cutoffs[:,1].^2 )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly for the Taylor expansion, except that here we need to look for very small $x$, and we want the *largest* $x$ rather than the smallest:" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4×2 Array{Float64,2}:\n", " 3.36863 3.52578 \n", " 0.605589 0.633841 \n", " 0.0539229 0.0539229 \n", " 0.00045401 0.00045401" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = logspace(-8,1,10000)\n", "taylor_cutoffs = hcat([ x[findlast(x -> E₁_taylor(x)[2] < n, x)] for n in (30,15,8,4) ],\n", " [ x[findlast(x -> E₁_taylor(x*im)[2] < n, x)] for n in (30,15,8,4) ])" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4×2 Array{Float64,2}:\n", " 0.912843 11.3476 \n", " 0.912843 0.366738 \n", " 1.0 0.00290768\n", " 1.0 2.06125e-7" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hcat( (taylor_cutoffs[:,1]./taylor_cutoffs[:,2]).^2, taylor_cutoffs[:,1].^2 )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, this is not quite good enough along the imaginary axis: 30 terms in the Taylor series is fine up to $\\Im z ≤ 3.53$, but 30 terms in the cf expansion was good for $\\Im z ≥ 5.8$. We need to figure out how many terms in the Taylor series we need to go up to $\\Im z ≤ 5.8$:" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "37" ], "text/plain": [ "37" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_taylor(5.8*im)[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also, for large enough $\\Re z$, the E₁ function will **underflow**: give 0.0 because the result is smaller than the minimum representable floating-point number. This will happen quite quickly for large $\\Re z$ because of the $e^{-z}$ dependence. Let's find out when this occurs on the real axis:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "738.7047704770478" ], "text/plain": [ "738.7047704770478" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(1,2000,10000)\n", "x[findfirst(x -> E₁_cf(x,0) == 0.0, x)]" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "-0.0 - 0.0im" ], "text/plain": [ "-0.0 - 0.0im" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_cf(739 - 4im,0)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "546121" ], "text/plain": [ "546121" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "739^2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we'll hard-code our double-precision E₁ function using these dividing points, assuming that they describe the semi-axes of ellipses in the complex $z$ plane (as seems to be the case from our numerical experiments above):" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition E₁(Union{Float64, Base.Complex{Float64}}) in module Main at In[133]:3 overwritten at In[134]:3.\n" ] }, { "data": { "text/plain": [ "E₁ (generic function with 2 methods)" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SOLUTION:\n", "function E₁(z::Union{Float64,Complex{Float64}})\n", " x² = real(z)^2\n", " y² = imag(z)^2\n", " if x² + 0.233*y² ≥ 7.84 # use cf expansion, ≤ 30 terms\n", " if (x² ≥ 546121) & (real(z) > 0) # underflow\n", " return zero(z)\n", " elseif x² + 0.401*y² ≥ 58.0 # ≤ 15 terms\n", " if x² + 0.649*y² ≥ 540.0 # ≤ 8 terms\n", " x² + y² ≥ 4e4 && return @E₁_cf z 4\n", " return @E₁_cf64 z 8\n", " end\n", " return @E₁_cf64 z 15\n", " end\n", " return @E₁_cf64 z 30\n", " else # use Taylor expansion, ≤ 37 terms\n", " r² = x² + y²\n", " return r² ≤ 0.36 ? (r² ≤ 2.8e-3 ? (r² ≤ 2e-7 ? @E₁_taylor64(z,4) :\n", " @E₁_taylor64(z,8)) :\n", " @E₁_taylor64(z,15)) :\n", " @E₁_taylor64(z,37)\n", " end\n", "end\n", "E₁{T<:Integer}(z::Union{T,Complex{T},Rational{T},Complex{Rational{T}}}) = E₁(float(z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For accuracy-testing purposes, let's compare it to a function that uses 50 terms in Taylor or cf:" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition E₁_test(Union{Float64, Base.Complex{Float64}}) in module Main at In[114]:1 overwritten at In[122]:1.\n" ] }, { "data": { "text/plain": [ "E₁_test (generic function with 1 method)" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E₁_test(z::Union{Float64,Complex{Float64}}) =\n", " real(z)^2 + imag(z)^2 > 6 ? E₁_cf(z,100) : E₁_taylor(z)[1]" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqcAAAI8CAYAAADMRAKEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXl8VdXZtp9zmKcEwhgGE0ACkRmZwiREKogVqeKAFcWh2peqgFZB/YSqILRi7dtXpdqqgCKOWMUJQcAgswwKGJnDPCXMMibs7w9IJK4rYZ/AgYTc1+9nq/fZZ++1115rnZW1n3s9Ac/zPBNCCCGEECIfELzQBRBCCCGEECITTU6FEEIIIUS+QZNTIYQQQgiRb9DkVAghhBBC5Bs0ORVCCCGEEPkGTU6FEEIIIUS+QZNTIYQQQgiRb9DkVAghhBBC5Bs0ORVCCCGEEPkGTU6FEEIIIUS+QZNTIYQQIkwcP378QhdBiAKHJqdCABs2bLBgMGh33XXXRXEdUXjq+nzcZ36ry9jYWKtTp86FLobDO++8Y2+//XZI3xk2bJgtXbo0TCUSomCgyamwjz/+2Dp06GDx8fH2wgsvXOjiXFT4+REPBAIWCATOY6kKLxdDXeeXNpWf6jKv5ejZs6c1adLEgsGglStXzrp3725XX3219ejRw37zm99Yw4YNrUiRIhYMBm3x4sUhnfvrr7+2BQsW2B133BHS9x5//HF79NFHbf369SF9T4iLiaIXugDiwnPddddZ06ZNrVGjRnbgwIELXZxCRY0aNSw5OdkiIyMvdFEuegpLXZ+P+7xY6vKTTz6xpKQk69y5sz388MP2l7/8xTlm2bJllpCQYNHR0b7Pu2/fPnvsscds1qxZIZepRIkS9vLLL1vfvn1t1qxZ+eYPACHOJ5qcCjM7+VqscuXKF7oYFx2e5+X6edGiRS0uLu48laZwc7HUdX5oUxdLXZqZffPNNxYIBOzKK6/Ezxs3bmxdunQJaXI6YsQIu/32261EiRJ5KtOll15ql1xyiU2cONFuvfXWPJ1DiIKMXuuLi4LTX3WuXr3abr75ZqtataoVKVLEkpKSso6bP3++9e7d26Kjo61EiRJ2ySWX2B//+Efbtm2b72uNHTvWevfubXXr1rXSpUtbZGSkdejQwSZMmJDtuKeeesrq1KljgUDAxo4da8FgMOuf8ePHO+XOLF8wGLQbbrghx+vHx8dbqVKlbO/evdn0c3FvoZ7rTPXu97mYmb333nvWqVMnK1++vJUuXdqaNGlio0aNsmPHjoV0zZzI6XX46fqGDRvslltuscqVK1upUqWsVatW9tlnn4Vcf3m5l5UrV1qvXr2sYsWKVrZsWevYsaNNnTo12/F5aVO/1tatW2e9e/e2SpUqWUREhHXr1s1WrFhhZmapqal27733WvXq1a1UqVLWunVrmzlzpq+6rF27drby/PofCkMItc2++OKL1qhRIytVqpTVrFnTHnjgAdu/f7+/h5IDSUlJVrJkSWvbtm2WlpGRYYcPH8767xo1avg+36FDh+w///mP3XbbbWdVrgcffNCeffbZszqHEAUVrZyKi4o1a9ZYmzZtrH79+nbbbbfZ4cOHLSIiwszMXn/9dbvvvvusZMmS1rNnT6tVq5atXr3aXnvtNZs8ebLNnz/fatasecZr9O/f3xo1amRXXHGFRUdHW1pamn3++efWt29fW7VqlT311FNmZtalSxfbt2+f/eMf/7BmzZpZr169ss7RrFkzPHdm2T///HPbs2ePVahQIdvnCxcutJUrV9qNN95o5cuXz9LP1b3l9Vy51bufzx9//HEbNWqUVa5c2X7/+99b2bJl7YsvvrDHH3/cvvrqK/vqq6+saNGiIV0zVFJSUqx169ZWt25du/3222337t327rvvWq9evWzatGl2xRVX+DpPXu5l3bp1lpCQYE2aNMmanL377rt29dVX28SJE+3GG280s7y1qdNZv369tWnTxi677DK78847LSUlxSZNmmRdunSxOXPmWPfu3S0yMtJuueUW2717t02cONF69Ohhq1atOmP7GTRokPMHk9nJV+dLliyxMmXKZNNDbWcDBgyw//u//7Pq1avbfffdZ8WKFbOPP/7Y5s+fb8eOHcvTKmV6errNmzfP2rdvb8WKFcvS33//fatUqZJ17drVzMyuv/563+ecPHmy1a1bN1v/zAutW7e2zZs3248//miXXXbZWZ1LiAKHJ8QpYmNjvaeeeiqbNmfOHK9v377eI4884g0YMMDr16+ft3LlSue7L7/8snfLLbd4jz76qNenTx/vlVde8R566CGvc+fO3n/+85+wlz0lJcULBAJeMBj0/t//+3/O56tWrfKKFy/uxcXFedu2bcv22fTp070iRYp4119/vXO+O++80znXunXrHO348ePelVde6RUvXtzbunWrr/Pk9PnIkSO9YDDovfTSS87x/fv394LBoPfZ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61Z77733zPM8e+WVV6xs2bJZx55NmwoXO3bsyDLqXXbZZTZ8+HDnmGbNmtl1111nZqG3s3bt2tkDDzyQtQl/7969s/Y5jYqKCil7k9nJVeekpCSLj4/Hlcnt27fbY489Zrt3784WI+qHDh065Ng/Pv74Y1u4cKFdffXVdu+991psbKxt3rzZpk2bhqvCq1atynXyLMRFywXaJSBXDh486A0dOtTr3r27FxUV5QUCAdxCxPNObm3UrVs3r2zZsl5UVJTXt29fb9euXee5xAWbjz/+2Lv88su9YDDolS1b1uvcubN39OhRz/M879tvv/VuvfVW709/+pP3wAMPePfcc0/WvnyZpKamehUrVvSCwWDWP4FAwKtVq5Y3YcIEvGYgEPA2bNiQ9d8vv/yy171792zHREdHe1OnTvV1DykpKV4wGPTuuuuuXI9bvny5d+edd3qxsbFeyZIlvYoVK3qNGzf2/vjHP3ozZszwdb65c+d6V155pRcVFeVFRER4HTt29D755BNv5syZXjAY9J5++ulsx69du9br2bOnV6lSJa9IkSLZtsQ5U7mHDx/uBYNBr0iRIt5HH310Tu7ND+einvx8fjrvvvuu17FjRy8iIsIrVaqU16hRI2/kyJFZbTEv5/TzvTOdr3Pnzl6RIkVCulYo95K5JdNPP/3k9erVy4uKivLKlCnjdezYMcf2H2qbOtM9BoNBZ7uoTGJjY706deo45T79fJn/nds/tO1UqG32pZde8i677DKvZMmSXo0aNbwHHnjA279/P5aRWLVqlde1a1evXr16XjAY9MqXL+91797d6969u3f11Vd7Xbp08eLj472iRYt6wWDQe++99/A8vx6/Tmfq1Klew4YNHf3AgQPegAEDsv571KhRXmRkpNe+fXtnqy3P87wTJ054FSpU8BYsWHDG+xLiYiNfTk4zB+zY2FgvMTExx/3tNm/e7FWqVMmrV6+e9+KLL3ojR470oqKivObNm3vHjx+/ACUvfGzcuNGrX7++N3Xq1Kz9E48ePeqtX7/ee+GFF7ySJUt6q1evdr7368F9+vTpXrNmzbL+Oz093StRooS3atWq8N+EEBeIvOynKy48uU1Ojx496lWqVMlJLhAq3333nXfppZee1TmEKKjky5jT6tWr2/bt2239+vX2t7/9Lcfg8xEjRtjhw4dtxowZ9qc//cmGDBli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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = linspace(1e-10,10,100)\n", "pcolor(x',x, [log10(1e-16 + relerr(E₁(x+y*im),E₁_test(x+y*im))) for y in x, x in x], cmap=\"cool\")\n", "colorbar()\n", "xlabel(\"real(z)\")\n", "ylabel(\"imag(z)\")\n", "title(L\"$\\log_{10}$ relative error in optimized $E_1(z)$\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems to be achieving the required 13 digits of accuracy specified in the pset. However, if we were really serious about this, we should probably look at alternative expansions to get better accuracy in the purple regions of the plot above. (The simplest thing might be to do a Taylor expansion around, say, $z=2+4i$. There are also alternative forms of the continued-fraction expansion and other identities that we could try to exploit.)\n", "\n", "Now let's compare performance at a few points versus our original `quadgk` implementation:" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 193.599 ns (1 allocation: 32 bytes)\n", " 44.889 μs (425 allocations: 10.55 KiB)\n" ] }, { "data": { "text/html": [ "-0.033767089606562 - 0.01859941416975054im" ], "text/plain": [ "-0.033767089606562 - 0.01859941416975054im" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@btime E₁(2+2im)\n", "@btime E₁_slow(2+2im)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 139.873 ns (1 allocation: 32 bytes)\n", " 18.827 μs (183 allocations: 4.61 KiB)\n" ] }, { "data": { "text/html": [ "-2.3461694530923403e-6 - 3.347026042268865e-6im" ], "text/plain": [ "-2.3461694530923403e-6 - 3.347026042268865e-6im" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@btime E₁(10+2im)\n", "@btime E₁_slow(10+2im)" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 109.531 ns (1 allocation: 16 bytes)\n", " 8.282 μs (159 allocations: 3.45 KiB)\n" ] }, { "data": { "text/html": [ "0.001148295591275326" ], "text/plain": [ "0.001148295591275326" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@btime E₁(5)\n", "@btime E₁_slow(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is **almost a factor of 100 speedup** even in cases where the expansion requires a lot of terms, which seems pretty good.\n", "\n", "It would be good to also compare to a highly optimized implementation, e.g. the [exp1 function in SciPy](https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.exp1.html). Because that is a Python function, we need to benchmark it for a whole array of numbers in order to make a reasonable comparison:" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using PyCall\n", "exp1 = pyimport_conda(\"scipy.special\", \"scipy\")[\"exp1\"]" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "5.75981106819841e-15" ], "text/plain": [ "5.75981106819841e-15" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relerr(E₁(2+2im), exp1(2+2im))" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.282 s (12 allocations: 400 bytes)\n" ] } ], "source": [ "z = rand(10^6)*10 + rand(10^6)*10im\n", "@btime pycall($exp1, PyObject, $(PyObject(z))) evals=1;" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 209.063 ms (1000005 allocations: 45.78 MiB)\n" ] } ], "source": [ "E₁(z::AbstractVector) = map(E₁, z)\n", "@btime E₁($z) evals=1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What about for real arguments?" ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 503.554 ms (12 allocations: 400 bytes)\n", " 102.485 ms (1000005 allocations: 22.89 MiB)\n" ] } ], "source": [ "@btime pycall($exp1, PyObject, $(PyObject(real(z)))) evals=1;\n", "@btime E₁($(real(z))) evals=1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pretty good! We are **6 times faster** than the SciPy routine for complex arguments, and **5 times faster** for real arguments, even though SciPy internally calls an optimized Fortran routine.\n", "\n", "It's actually not unusual for special functions written in Julia to beat older optimized C and Fortran implementations. We've observed this for the [erfinv](https://github.com/JuliaLang/julia/pull/2987) and [polygamma](https://github.com/JuliaLang/julia/pull/7125) functions, for example. The reason is that the inlining performed by macros like `@evalpoly` and `@E₁_cf64` is hard to replicate in lower-level languages — hardly anyone bothers to write the code-generation programs that would be required — but it is fairly easy in Julia." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Problem 2: Parallel mapreduce\n", "\n", "Our task is to speed up the function `myreduce(⊕, n)` that computes\n", "$$\n", " 1 \\oplus 2 \\oplus 3 \\oplus \\cdots \\oplus n\n", "$$\n", "for $n \\ge 0$, where $\\oplus$ is a caller-supplied **commutative binary function** `⊕(x,y)`, and we are allowed to assume commutativity. \n", "\n", "A simple parallel solution for this is similar to the `pmap` function described in the [Julia manual](http://docs.julialang.org/en/stable/manual/parallel-computing/): we just ask the worker processes to \"add\" (`⊕`) terms one by one, giving it another term to add as soon as the worker becomes idle." ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition preduce(Any, AbstractArray{T<:Any, 1}) in module Main at In[149]:2 overwritten at In[164]:2.\n", "WARNING: Method definition preduce(Any, Integer) in module Main at In[149]:26 overwritten at In[164]:26.\n" ] }, { "data": { "text/plain": [ "preduce (generic function with 2 methods)" ] }, "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function preduce(⊕, lst::AbstractVector)\n", " if nprocs() == 1\n", " return reduce(⊕, lst)\n", " end\n", " n = length(lst)\n", " queue = Base.copymutable(lst)\n", " @sync begin\n", " for p in workers()\n", " @async begin\n", " while length(queue) > 1\n", " a = pop!(queue)\n", " b = pop!(queue)\n", " # compute results[p] = results[p] ⊕ lst[idx]\n", " push!(queue, remotecall_fetch(⊕, p, a, b))\n", " end\n", " end\n", " end\n", " end\n", " if isempty(queue)\n", " return ⊕() # return empty call if it is defined\n", " else\n", " assert(length(queue) == 1)\n", " return queue[1]\n", " end\n", "end\n", "preduce(⊕, n::Integer) = preduce(⊕, 1:n)" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "true" ], "text/plain": [ "true" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "preduce(+, 1000) == 500500" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition weirdplus(Any, Any) in module Main at In[168]:2 overwritten at In[171]:2.\n" ] }, { "data": { "text/html": [ "500500" ], "text/plain": [ "500500" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function weirdplus(x,y)\n", " sleep(1e-3 / (x+y)) # wait for some number of seconds\n", " return x + y\n", "end\n", "preduce(weirdplus, 1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's check how well this paralellizes:" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.376 s (6065 allocations: 377.69 KiB)\n" ] }, { "data": { "text/html": [ "500500" ], "text/plain": [ "500500" ] }, "execution_count": 172, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@btime preduce(weirdplus, 1000) evals=1" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4-element Array{Int64,1}:\n", " 14\n", " 15\n", " 16\n", " 17" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "addprocs(4) # parallelize over 4 workers\n", "workers()" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition weirdplus(Any, Any) in module Main at In[171]:2 overwritten at In[177]:2.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 434.293 ms (92426 allocations: 3.76 MiB)\n" ] }, { "data": { "text/html": [ "500500" ], "text/plain": [ "500500" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@everywhere function weirdplus(x,y)\n", " sleep(1e-3 / (x+y)) # wait for some number of seconds\n", " return x + y\n", "end\n", "@btime preduce(weirdplus, 1000) evals=1" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "3.1683678990911663" ], "text/plain": [ "3.1683678990911663" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1.376 / 0.434293" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not terrible, a 3x speedup.\n", "\n", "One limitation of the `preduce` solution above is that it assumes that evaluations of `⊕` are **individually quite expensive**, so that the overhead of one `remotecall_fetch` per call to `⊕` is not important.\n", "\n", "If `⊕` were a very cheap function, like `+`, this would be terrible! There are various approaches that we could pursue to improve this, like iteratively doubling the number of elements that are sent to the workers until the time per `remotecall_fetch` exceeds some threshold, but I won't attempt to implement them here." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Julia 0.5.0", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.0" } }, "nbformat": 4, "nbformat_minor": 1 }