{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical Solution of Ordinary Differential Equations: Part I\n", "\n", "This notebook and its companion illustrate some basic ideas in numerical solution of ODEs. We will first demonstrate the methods, then use the python library implementations, and finally discuss problems that go beyond the libraries. The first notebook deals with initial value problems, and the second with boundary value problems." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial Value Problems\n", "\n", "As a first step, let us distinguish initial value problems from boundary value problems. Recall that an ODE requires some number of boundary conditions -- as many boundary conditions as the order of the ODE system. An initial value problem is one where all of the boundary conditions are specified at the same value of the independent variable. For example, if we are considering an ODE describing orbital motion of point masses, an initial value problem would be one where the positions and velocities of all the point masses are specified at some time. The second part of the notebook will deal with boundary value problems, which is the class of ODEs where the boundary conditions are specified at different values of the independent variable." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import some useful stuff\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "plt.rcParams[\"figure.figsize\"] = (7,5) # Make default figure size bigger" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Forward Differencing\n", "\n", "As a first example to work with, we will conisder a very simple ODE for which we can obtain an analytic solution: the logistic equation\n", "\\begin{equation*}\n", "\\frac{dx}{dt} = r x (1 - x).\n", "\\end{equation*}\n", "This equation can be used to model the growth of a population in an environment with a carrying capacity, i.e., a maximum population it can support. Here $x$ is the fraction of the carrying capacity, and $r$ is the rate of population growth. This equation has the analytic solution\n", "\\begin{equation*}\n", "x(t) = \\frac{1}{1+(1/x_0 - 1)e^{-r t}},\n", "\\end{equation*}\n", "where $x(0) = x_0$ is the initial condition.\n", "\n", "Suppose that we did not know the analytic solution, and wanted to integrate this equation numerically. The simplest and most basic method one could come up with is called forwards Euler differencing. The idea is to approximate the differential equation as a series of finite-sized steps. That is, consider some time step $\\Delta t$. We approximate the solution to the problem via a finite series of steps\n", "\\begin{eqnarray*}\n", "x_1 & = & x_0 + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_0} \\\\\n", "x_2 & = & x_1 + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_1} \\\\\n", "& \\ldots & \\\\\n", "x_{i+1} & = & x(i\\Delta t) + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_2},\n", "\\end{eqnarray*}\n", "where we have introduced the shorthand $x_i = x(t_i)$ and $t_i = i\\Delta t$.\n", "\n", "Note that, at every step, everything on the right hand side is a known quantity, so it is straightforward to implement this algorithm. Below is an implementation for the logistic equation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAFCCAYAAABl6gOIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VOXdxvHvbzLZE3ZkC8iiqCgIGnFXFBe0VutSt1or\nLlSrlLrUqrXF9S1WK0il+lp3FAQVARFlUUBxBWQRwhb2sCUkIQtZZ+Z5/0jKSzEIYiZnJnN/LnNl\nzpkzMzdHyJ3nzJnzmHMOERGRWODzOoCIiEhDUemJiEjMUOmJiEjMUOmJiEjMUOmJiEjMUOmJiEjM\nUOmJiEjMUOmJiEjMUOmJiEjM8Hsd4Mdq1aqV69y5s9cxREQkgixYsGCHc671/raLutLr3Lkz8+fP\n9zqGiIhEEDPbcCDb6fCmiIjEDJWeiIjEDJWeiIjEDJWeiIjEDJWeiIjEDJWeiIjEDJWeiIjEjLCV\nnpm9bGa5ZrZ0H/ebmY00s2wzW2Jmx4Uri4iICIR3pPcqMOAH7r8AOLz2axDwXBiziIiIhO+KLM65\nT82s8w9scgnwunPOAV+ZWTMza+ec2xquTCIiUSEUAheEUABCwdrbNV8uFCAYDBAIBnGhIMFgABcM\nEQwFCQVr7g+FQoRCwZr1LoQLBSEU+v/1LgTO4UJBQs7VLIdC4EI1y6HQ7m1wIZxzuP/chu+t4z+3\noXadA/a4v+ae2v/+s33NuuTWXelx+i8abNd6eRmyDsCmPZZzatd9r/TMbBA1o0E6derUIOFEJAYE\nqqC6rParHKrLCFTuoqp8F1WVZVRXlBOoLCNQWU6wqpxgdQWuupxQoBJXXYELVkOgEgJVWKgKglVY\nqBoLVuMLVWMugC9Ujc9V4wsFiXMBfC5Q853g7u8+FyKOIHHUfPfVVEudjJof3FF3Dcl9+DbtDIiR\n0rM61tX5f9o59wLwAkBmZua+/zaISGwIBaGiCMoLoWInrqyQ8tICKkoKqSotJFC2k1B5MaGKYqyq\nBF/VLuICu/AHdhEfLCMhVE5iqAI/ge899X8KJeUHXj7ojCriqcJPFfFUEk+V8xPAT8D8BM1PgHiC\nPj9BSyJkaYTMj/P5Cfr8uNrbIfODLw5nfvDV3vb5MV8cmB98PvDFgcWBLw7z+cHiau73+TBf7W2r\nuU2cH5/5di+bz4eZ1dy2msf4zGrXx4EZPl/N9vh8GIbPFwc+MHy198dhBmaGw4fPZ5jVvDPm89U8\nB/zneWoWDR/mM8wM8NV+B6xm3e4vjE7JqfX8l+OHeVl6OUDHPZYzgC0eZRERLzkHlSVQsg1KtxMq\nzWVX/mYqdm6juiQPSvPwleeTUFVIYnURycGS/xoNGTUl9Z+iCjgfpSRT4lIoJYlSkqmwZCp97amO\nSyYQn0LAn0IoPgUXnwL+FCwhBV9CMr6EFOISU4hLSMGfmIw/MYWEpBTiE5KJT0ohPjGZpMQEEuLi\nSIr3keiPI83vI8HvI85X1+/yEkm8LL3JwB1m9hZwIlCk9/NEGqnqcijKgZ0bCORvYFfeBioLNkLR\nZuLLtpFSmUdiqHz35j4gHUhycRSSTr5rQoFLZ6dlUO4/mqqkZgQTmxJKbo4vuTlxKc2JT2tBUlpz\nktJbkJqWTpPkBJokxdM2yU96kh9/nD6hJWEsPTMbC/QDWplZDjAUiAdwzj0PTAUuBLKBMmBguLKI\nSAOoroCCNbBjNRXbVlK2bTWhgrUklWwgrWrH7s38QKrzUUpztrqWbHPtKPL3pDy5DcGUQ/A1aYu/\naVtSmrejaYvWtEpPplVaIr3SEkhL9P//oTKRgxDOszev2c/9Drg9XK8vImESrIYdq2DbUso2L6Vi\n8zL8BStJK9+8+5BjElDkmrHetWVjqAeFie2pTOuINT+UxFaH0qxNJzo0T6N9s2SOaZpEUnyct38m\niRmN5QQgEQmHYDVsX0Zo87eUrv2G0JbFpBWvxu+qAYh3cWxy7VjtMsiJO5nypl3xtepOWocj6dim\nFV1apXJsixSVmkQMlZ6I/L/SPNj0NeVrv6Bi3Zek5y/F76rwAUGXxnehLqxkADubHoGvbU+ad+pB\n93YtOLFtOj9LS9ChR4l4Kj2RWFZWAOs/Y9fKWQTXfkqTkjUA+Jyfta4Li9w57GjaE3/H4+jYtQc9\nM5px8iFpxOukEIlSKj2RWBIKQs58KldMo3z5DJoUflfzPpxLZGHoCBbFXUt5u760OOxE+nRry686\nNNWhSWlUVHoijV1VGW7Nx5Qsfp/4NdNJri7E74y1rhtf2hUUtz+NNkedwomHtWFw2yb49FkzacRU\neiKNUXU5bvV0iuaNJ2XDTBJCFeBSmB7qzfImp5J61Ln07XEYgw5trkOVElNUeiKNRSgEGz5n55ev\nkZz9AYmhMgKuCW+HTmNTu3PJOLY/Zx+dwSXNkr1OKuIZlZ5ItCvKYdeXLxNaNIb0iq3EuWQmh05k\nXbsL6Jp5Phcdk0HTlHivU4pEBJWeSDQKhQhmf0zBnOdpufkTkp1jbugY5je7jrYnXs4FfbrRPDXB\n65QiEUelJxJNqsoom/cGVXOfpVn5BnBNeNV3CZXHXs/5p/XljNZpXicUiWgqPZFoUFZAwScjSFz4\nKqnBIlaHujK65X0c1u9arju6Iwl+nYwiciBUeiKRrDSX3Gn/oMnS12jhypkZyiT7sBvod+7FDG7X\n1Ot0IlFHpScSicoK2PrB32iR9RotQ1VMs1PI6zOYi/qfzTlpiV6nE4laKj2RSFJVxtbpI2iyYBRt\nQrv40HcGJSf9gYvOPoO0RP1zFfmp9K9IJBI4R+7no4mf9TDtgjuYw/HknngvF51zLskJugyYSH1R\n6Yl4rGTtPArfvYtOu5aw1HVlZq+/MeBnl5KepM/WidQ3lZ6IR4JlO8keey+HbxpPpUvnnY73ceaV\nf+CYJrpiiki4qPREPLB+7jjSP7mfw4IFTE+7hC6/fIwrOnf0OpZIo6fSE2lAuwq2sv71Wzl652xW\ncShL+/2L8/udr8lXRRqISk+kgWR9MpZ2n97LYa6cGe1v5cTrhtI9NcXrWCIxRaUnEmYlRQWsfO0O\nMgs+YLWvC1UXP8+5vU/yOpZITFLpiYTR8m8/I/39m+kT2s7n7X/D8b95gqQknagi4hWVnkgYBIMh\nPnvrCU5e9RRF1pTVF47j1BPP9zqWSMxT6YnUs7wd+ax6aSD9yueQldaXjBtHc2TLtl7HEhFUeiL1\natHiRaS+92tOcpv47qghHHPlUMynK6qIRAqVnkg9cM4xdfJ4Tv72LvwGW3/+Jj0zf+Z1LBHZi0pP\n5CeqqA4y6d+Pcvn2Z8hNyKDJje+Q0e4Ir2OJSB1UeiI/QW5RGXOfv4Oryt9lXcvT6TzoTSxJ89yJ\nRCqVnshBytqUS84rA7ksNJeN3a6ly6+eBb1/JxLRVHoiB+GzJdkkvvtrzrMstvW9n04X/Al0KTGR\niKfSE/mR3v9iCV0/uo7uvs0UXfgcbfte63UkETlAKj2RH2H09C85ae5NdIrbQfUvx9C0hz5wLhJN\nVHoiB8A5x78mfsJFC2/lEH8p9qt3Sel2utexRORHUumJ7Eco5Bjx9nSuzrqVZvHVJN4wBV/H472O\nJSIHQaUn8gNCIcffx83guhW/o3l8gKSbpmLtenkdS0QOks/rACKRKhhyPDp2Btcsv51W/kqSbpys\nwhOJchrpidQhFHI8MvYTfrNyMG3jd5F44/vQvo/XsUTkJ1LpiezFOcdj737BNSuHkBFfTMINk6CD\n3sMTaQxUeiJ7cM4x7P2FDPjuTg6L20bcte9Ax75exxKReqLSE9nD8OlZZM67mxPiVsHlr2Dd+nkd\nSUTqkU5kEan1yty1ZHx2P+fGfQsXPokdc6nXkUSknqn0RIApS7ZQ8NH/cKV/DqHT/4j1vcXrSCIS\nBjq8KTHvyzX5fDz+Xwz3v02w51XEnf1nryOJSJio9CSmrdhWzKjX3+Rl//MEMk7Gf8k/NVuCSCOm\n0pOYlVtSwYMvv8+/7Ul8zTLwXzsG/IlexxKRMNJ7ehKTKqqD/P61ufxP5d9ITzT8170DKS28jiUi\nYRbW0jOzAWa20syyzey+Ou7vZGazzGyhmS0xswvDmUcEaj6L98e3F/Pr7U9wuG3Gf+Vr0Oowr2OJ\nSAMIW+mZWRwwCrgA6AFcY2Y99trsQWC8c64PcDXwr3DlEfmPZz5eTcdlz/OzuG+wcx+Gbmd5HUlE\nGkg4R3p9gWzn3FrnXBXwFnDJXts4oEnt7abAljDmEeGjpVtZ9Mnb3BM/HnfMFXDKYK8jiUgDCueJ\nLB2ATXss5wAn7rXNQ8B0MxsMpALn1PVEZjYIGATQqVOneg8qsSE7t4Th46czIXEUHHIMdrHO1BSJ\nNeEc6dX108TttXwN8KpzLgO4EBhtZt/L5Jx7wTmX6ZzLbN26dRiiSmNXUlHN7a9/xXDfCJIT/Piu\nfgMSUryOJSINLJwjvRyg4x7LGXz/8OVNwAAA59yXZpYEtAJyw5hLYkwo5Lhr/GJ+VfQCPeLWwqVj\noXlnr2OJiAfCOdKbBxxuZl3MLIGaE1Um77XNRqA/gJkdBSQBeWHMJDHoX7OzSVgxievjpsPJd8CR\nOklYJFaFbaTnnAuY2R3ANCAOeNk5t8zMHgHmO+cmA3cD/zazO6k59HmDc27vQ6AiB+2rtflMmDmH\nqUkv4tr3xc55yOtIIuKhsF6RxTk3FZi617q/7nE7Czg1nBkkdu0oreSuMd/watK/SExIxH75CsTF\nex1LRDyky5BJoxQKOe4ct4iBVW/S3bcGfjEWmmZ4HUtEPKbLkEmj9NycNQTXzOYW3/uQeaPexxMR\nQCM9aYTmry/gpenz+ST1BVyz7th5j3sdSUQihEpPGpXiimr+8NZCRqS8TNNQEXb5BH0eT0R2U+lJ\no/LQpGWcUjqNM/xfw3mPQbtjvY4kIhFEpSeNxuTFW/h64SI+SX0DMk6Dk273OpKIRBiVnjQKm3eW\n8+B7i3kj/WUSAH4xCnw6T0tE/ptKT6JeKOS4Z/xirgxNp1f1YrhohC4zJiJ1UulJ1Hv9y/VsWbeM\n0SljoXN/OP4GryOJSIRS6UlUW7djF098lMWkJi8TRzxouiAR+QEqPYlawZDjj28v5rq4j+leuRQu\nGQVNO3gdS0QimEpPotbLc9exeUM2Y1PHwqH9oPevvI4kIhFOpSdRKTu3lCenr+CdFm/grwZ+/owO\na4rIfumcbok6oZDj/glLuMz/Jb3KvsbO/ovO1hSRA6KRnkSdN7/eQPb6DbzRZDS0zoQTf+t1JBGJ\nEio9iSpbdpYz7MMVPN/iXRIqSmrO1vTFeR1LRKKEDm9K1HDO8eDEpRzvlnF62QzslN9Dmx5exxKR\nKKKRnkSN95ds5bMVW5jXYjQkdIIz/uh1JBGJMio9iQpFZdU88v4yhraYQbOydfCLtzVlkIj8aCo9\niQpPTFtB2q5NXOvGQ49LoPt5XkcSkSik0pOIt2BDIWO+3sDMQ8bhq0iAAcO8jiQiUUonskhECwRD\n/Pm977gybQmHFX8FZz0ATdp7HUtEopRGehLRXv1iPeu25fNei9HQogf0HeR1JBGJYhrpScTasrOc\np2es4u9tPia5bAtc+CTE6fc0ETl4Kj2JWI9/sJx2oW1cXDoejrkCOp/mdSQRiXL6tVki0ufZO/jg\nu6180v5drDQeznvU60gi0ghopCcRpzoYYujkZfyy6XK6FnwKZ96rk1dEpF5opCcR57Uv1rM+dyeT\nWr8BaYfBibd5HUlEGgmVnkSU3OIKRsxczaPtviS1cB1cOx78CV7HEpFGQoc3JaIM+3AFqYGdXLXr\nTejWHw7XlVdEpP5opCcR49uNhUxYuJmJh36EL3cXDPibZkMXkXqlkZ5EhFDI8fD7WZyStpVjcydC\n31ug9RFexxKRRkYjPYkI7y3czOJNhXyTMR7b1RTO/JPXkUSkEdJITzy3qzLAEx+t4OZDVnHIjq+h\n3wOQ0sLrWCLSCKn0xHPPzV5DQcku7rHR0PJwyBzodSQRaaR0eFM8tamgjBc+W8uwQxeQtH0tXPMW\nxMV7HUtEGimN9MRTT3y0giZWxqXFo6Hz6dB9gNeRRKQRU+mJZ77dWMiUJVt5rtNs4soL4fzH9REF\nEQkrlZ54wjnHY1Oy6JVWROa2t+DYq6HdsV7HEpFGTu/piSc+XLqNbzfuZHbX97HcODj7L15HEpEY\noJGeNLjKQJBhH67golbb6bxlKpz8O2jawetYIhIDNNKTBjf6yw1sLNjFpEPfhmALOHWI15FEJEZo\npCcNamdZFSM/Xs3tHTfQfPsXNXPlJTX1OpaIxAiVnjSoUbOyKa2sYnDoDWjeGTJv8jqSiMQQHd6U\nBpNTWMZrX2zgsa7LSdqcBZe/pLnyRKRBaaQnDebp6atItCquLH4V2vWGoy/zOpKIxJiwlp6ZDTCz\nlWaWbWb37WObK80sy8yWmdmYcOYR7yzbUsR7izYzouu3+Es2w7kPg0+/c4lIwwrb4U0ziwNGAecC\nOcA8M5vsnMvaY5vDgfuBU51zhWZ2SLjyiLeGfbiCDklVnJX3OnQ9C7r28zqSiMSgcP6q3RfIds6t\ndc5VAW8Bl+y1zS3AKOdcIYBzLjeMecQjc1fv4LPVOxh56Of4ygvgnKFeRxKRGBXO0usAbNpjOad2\n3Z66A93N7HMz+8rM6rzasJkNMrP5ZjY/Ly8vTHElHEIhx7CPlnNM00r6bB4DR18K7ft4HUtEYlQ4\nS6+uKwe7vZb9wOFAP+Aa4EUza/a9Bzn3gnMu0zmX2bp163oPKuEzdelWlm4u5pn2M7BAhS43JiKe\nCmfp5QAd91jOALbUsc0k51y1c24dsJKaEpRGoDoY4qlpKzmz9S66bngbjrseWnbzOpaIxLBwlt48\n4HAz62JmCcDVwOS9tpkInAVgZq2oOdy5NoyZpAGNn7+J9fllDGvxPubzw5l/8jqSiMS4sJWecy4A\n3AFMA5YD451zy8zsETO7uHazaUC+mWUBs4A/Oufyw5VJGk55VZBnZq7m8g47abvhfTjxt9Ckndex\nRCTGhfWKLM65qcDUvdb9dY/bDrir9ksakVe+WEduSSUPtp2AlTbRRaVFJCLo08FS73aWVfHc7DUM\n6rKD5ptmwqmDIaWF17FERFR6Uv+en7OW0spqhthYSG0NJ97mdSQREUClJ/Ust7iCV79Yx72HbSV1\ny5dwxh8hMc3rWCIigEpP6tk/P8kmEAxxY+VoaNoJjr/B60giIrup9KTebMwvY+w3G3m4+zoScxdD\nvz+BP9HrWCIiu6n0pN6MmLmKhDjHVSWvQ8vDodfVXkcSEfkvKj2pFyu3lfDeos0M674Sf/5KOOsB\niNMcxSISWfZbemY2wszquo6myG7/mL6SZgnwsx2vQZue0OMXXkcSEfmeAxnplQKTzSwVwMzOM7PP\nwxtLosmiTTuZnrWdpw5fSlzRejj7QU0QKyIRab/Hn5xzD5rZtcBsM6sEdgF1zoIusekf01fSNgXO\n2v4qZJwA3c/3OpKISJ32W3pm1p+ayV53Ae2Am5xzK8MdTKLDV2vz+Wz1Dsb2/Bbf6i1w6fOgo+Ei\nEqEO5BjUn4G/OOf6AVcA48zs7LCmkqjgnOOpaSvpnB7ipM2vQpczoOuZXscSEdmnAzm8efYet78z\nswuAd4FTwhlMIt/sVXnM31DIez2/wVbvgLP/uv8HiYh46EefbeCc2wr0D0MWiSLOOf4xfSVHNQ/R\ne9Nr0H0AdDzB61giIj/ooE6xc86V13cQiS4fLd3G0s3FPJ0xF6sogrP+7HUkEZH90nnl8qMFQ45/\nzFhFn5ZBjtzwRs1n8tr18jqWiMh+qfTkR5u8eDPZuaU81X4WVl1Wc/UVEZEooNKTH6U6GGL4jNWc\n2iZA13VjoNdV0PoIr2OJiBwQlZ78KO8syGFjQRnDWk/DQgE4816vI4mIHDCVnhywiuogIz9ezXkd\nKslYOx76/BpadPU6lojIAdNl8OWAjf1mI1uLKpiYMRXb6auZFV1EJIpopCcHpKwqwKhZa7i0Uzlt\n1k6AE26Cph28jiUi8qOo9OSAvPbFBnaUVvKXtEk1s6GfdqfXkUREfjSVnuxXcUU1z89Zw6+7lNJi\n7ftw4m8h7RCvY4mI/GgqPdmvlz5bR1F5NX9MeBcS0+GU33sdSUTkoKj05AcV7qripbnruPWwnTTZ\nMA1OvgNSWngdS0TkoKj05Ac9/+kadlUFGGzjIKUlnPw7ryOJiBw0lZ7sU25JBa99sZ57Ds8jddOc\nmpNXEtO9jiUictBUerJPoz7JJhAMcVP1G5DeDk642etIIiI/iUpP6pRTWMaYbzby5+6bSdo6D864\nB+KTvY4lIvKTqPSkTiM/Xo0ZXFc2Gpp1gj7Xex1JROQnU+nJ96zJK+WdBTk81n0d8blLoN8D4E/w\nOpaIyE+m0pPvGT5jFSnxxmU7X4FWR0CvK72OJCJSL3TBafkvWVuKmbJkK88dvQL/mtVw5WjwxXkd\nS0SkXmikJ//l6RkraZnkOD/vFWjXG476udeRRETqjUpPdluwoZCZy3MZftgifMWboP9fwczrWCIi\n9UalJwA453hy2goyUkOcvuVV6Hw6dDvb61giIvVK7+kJAHOzd/DV2gLePeYrLDsP+o/RKE9EGh2N\n9KR2lLeSI5sGOG7T69B9AHTs63UsEZF6p9ITpi3bxpKcIkZkzMYqS2reyxMRaYRUejEuGHI8NX0V\nJ7Ys54gNY6DXVdDmaK9jiYiEhUovxk34Nofs3FKebP0RFgrCWfd7HUlEJGxUejGsojrIiJmrGdC2\nhI4bJsAJN0Hzzl7HEhEJG529GcPe/Hojm3eWM6n7RKwsGU6/x+tIIiJhpZFejCqpqGbUrGyu65RP\nq40fwsl3QFprr2OJiISVSi9G/fuzdRTsquRPcWMgpSWcfLvXkUREwi6spWdmA8xspZllm9l9P7Dd\nFWbmzCwznHmkxo7SSl78bC33dN1I+tYv4cw/QVITr2OJiIRd2ErPzOKAUcAFQA/gGjPrUcd26cDv\nga/DlUX+27OfZFMdCHBL5evQvAscP9DrSCIiDSKcI72+QLZzbq1zrgp4C7ikju0eBf4OVIQxi9Ta\nVFDGm19v4H+6LiMxfzn0/4smiBWRmBHO0usAbNpjOad23W5m1gfo6Jyb8kNPZGaDzGy+mc3Py8ur\n/6Qx5MlpK0n2VXNZ0WvQvg/0uNTrSCIiDSacpVfX1Yrd7jvNfMBw4O79PZFz7gXnXKZzLrN1a51h\neLC+yyli8uItjOzyDXElm+HcR8Cnc5lEJHaE8ydeDtBxj+UMYMsey+nAMcBsM1sPnARM1sks4eGc\n428fLqdzcgVnbh8Nh50LXc7wOpaISIMKZ+nNAw43sy5mlgBcDUz+z53OuSLnXCvnXGfnXGfgK+Bi\n59z8MGaKWXNW5fHFmnxGdfwYqyqpGeWJiMSYsJWecy4A3AFMA5YD451zy8zsETO7OFyvK98XDDmG\nfbiCk5sV0SNnPPT5NbT53om0IiKNXlgvQ+acmwpM3WtdnfPWOOf6hTNLLJu4cDMrtpXwRdf3sLwE\nOOsBryOJiHhCZzE0cuVVQZ6avpKr2mym/ZbpcOoQSG/rdSwREU+o9Bq5lz9fx9aicv4S/yakt4NT\n7vA6koiIZzTLQiOWV1LJv2Zl80Cn5aTlLoJLRkFCqtexREQ8o5FeIzZi5ioIVDCw7BVo0xOOvcbr\nSCIintJIr5Favb2Esd9s5N+dPyd+62a4/H/BF+d1LBERT2mk10j97cMVdE4s5uwdb8BRP4cup3sd\nSUTEcxrpNUKfrc7jkxW5TOs8BcsLwLmPeh1JRCQiaKTXyASCIR6dksV5TTdzxLYpcNLvoEUXr2OJ\niEQEjfQamTHfbGTV9hLGdRgD/kPg9P1ez1tEJGao9BqRorJqnp6xinvaLqF5/kK4+J+aEV1EZA86\nvNmIjPh4FcHyYn5b9Qq0Pw56X+d1JBGRiKKRXiORnVvK6C838HLGx8Tn5cK1YzVXnojIXvRTsRFw\nzvHolCx6xG/j9Pzx0Oc6yNC0hCIie9NIrxGYkbWdOaty+bz9OGxXKvR/yOtIIiIRSSO9KFdRHeSR\nKVkMbLGUDgVf1UwblNba61giIhFJpRfl/nfOWvILC7nPXoNDesAJN3sdSUQkYunwZhTbVFDGv2Zn\n82y76SQWboErX4Y4/S8VEdkXjfSi2GMfZHGEbeKcondqPp5w6MleRxIRiWgaFkSp2StzmbZsG1+0\nGYNVpcO5j3gdSUQk4qn0olBFdZC/TlrGbc2+pn3RQvj5SEht6XUsEZGIp8ObUWjUrGyKC7Zzl3sD\nMvpCn197HUlEJCpopBdlsnNLeX7OGt5s8x7xJcVw0XBdeUVE5ADpp2UUcc7xl4lL6Re/jL5FH8Gp\nQ6DtMV7HEhGJGhrpRZGJizazcO0W5jV/FVIOgzPu9TqSiEhUUelFiYJdVTw6ZTl/az6F9PIcuOoD\niE/yOpaISFRR6UWJx6Zk0bFiFb8IvQfH/QY6n+Z1JBGRqKPSiwJzVuUxeeEGvmj5Kmat9Zk8EZGD\npNKLcLsqAzww4TsebPIhh+xaBVePgeRmXscSEYlKOnszwv1j+iqaFi3n+uq3oeeVcOTPvI4kIhK1\nNNKLYAs3FvLGF6uZ0/QlfP6WcMETXkcSEYlqKr0IVVEd5J63F/OnlCm0q1gDV4+FlBZexxIRiWo6\nvBmhnp6xiqQdSxkYmgC9roIjL/Q6kohI1NNILwIt2FDA6M+WM6fJC/gSWsOAYV5HEhFpFFR6Eaa8\nKsg9by/h0ZS3OaRyA1w5UYc1RUTqiQ5vRpgnp62kU8EXXBGcCif9Drqd5XUkEZFGQyO9CDJ39Q7e\n+3wxn6a9CM2Pgv5DvY4kItKoqPQiROGuKu4ev5CRaa+S5krg8km6tqaISD1T6UUA5xwPvPcdAyo+\n4PS4r+C8x6BtT69jiYg0Oiq9CPD2ghw2LPuKfya/CV3PhZNu9zqSiEijpNLz2Podu/j75AVMThlF\nXEpLuPR5zYQuIhImKj0PVQaC3DH2W4b6XqJdaCt2+fuQ2srrWCIijZaGFB7629QVHLVtMj/nU+zM\nP2mOPBGfn0hSAAAOrklEQVSRMNNIzyMfLd3KvC9nMSnpVeh8BpzxR68jiYg0eio9D2wqKOPRd75g\nQvJI4lJbwRWvgC/O61giIo2eSq+BVQaCDB6zgGH8k0MoxK76SO/jiYg0EJVeA3v4/SzO3PoKp8cv\nhAuHQ8bxXkcSEYkZYT2RxcwGmNlKM8s2s/vquP8uM8sysyVm9rGZHRrOPF4bN28j+fPe5c74d6H3\nr+D4gV5HEhGJKWErPTOLA0YBFwA9gGvMrMdemy0EMp1zvYB3gL+HK4/XFm/ayZuTpvJM4nO4Dpnw\ns6fBzOtYIiIxJZwjvb5AtnNurXOuCngLuGTPDZxzs5xzZbWLXwEZYczjmfzSSh4Y/TEv+J8iIbU5\ndvWbuq6miIgHwll6HYBNeyzn1K7bl5uAD+u6w8wGmdl8M5ufl5dXjxHDryoQYvAbX/FI5RMcEleC\n79qxkN7W61giIjEpnKVX17E7V+eGZtcBmcCTdd3vnHvBOZfpnMts3bp1PUYML+ccf56whMs3/53j\nbSW+S5+D9n28jiUiErPCefZmDtBxj+UMYMveG5nZOcCfgTOdc5VhzNPgXvh0LZ2WDOdy/1w460E4\n5jKvI4lIA6muriYnJ4eKigqvozQqSUlJZGRkEB8ff1CPD2fpzQMON7MuwGbgauDaPTcwsz7A/wID\nnHO5YczS4GZkbWfD9FH8T/xEXJ/rsTPu8TqSiDSgnJwc0tPT6dy5M6aT1uqFc478/HxycnLo0qXL\nQT1H2A5vOucCwB3ANGA5MN45t8zMHjGzi2s3exJIA942s0VmNjlceRrSkpydvPvWyzwa/wrBrv2x\ni4brTE2RGFNRUUHLli1VePXIzGjZsuVPGj2H9cPpzrmpwNS91v11j9vnhPP1vbAhfxdPv/Im//KN\nIHTI0cRf9RrE6RoAIrFIhVf/fuo+1SwL9Si/tJKHXxzPyODjxDdpS/yv34XEdK9jiUiMiouLo3fv\n3ru/hg0bVm/PvWjRIqZOnbr/DSOMhiD1pKwqwAMvTeKJsqEkpaYTP3AypLfxOpaIxLDk5GQWLVoU\nludetGgR8+fP58ILLwzL84eLRnr1oDIQ5P5Xp/GXgvtpmmgkDJwMzRv1FdVEJEoVFRVxxBFHsHLl\nSgCuueYa/v3vfwNw2223kZmZydFHH83QoUN3P2bevHmccsopHHvssfTt25eioiL++te/Mm7cOHr3\n7s24ceM8+bMcDI30fqLqYIgHX5/BkJy7aJNQTvwNH0DrI7yOJSIR5OH3l5G1pbhen7NH+yYM/fnR\nP7hNeXk5vXv33r18//33c9VVV/Hss89yww03MGTIEAoLC7nlllsAePzxx2nRogXBYJD+/fuzZMkS\njjzySK666irGjRvHCSecQHFxMSkpKTzyyCPMnz+fZ599tl7/XOGm0vsJgiHHI2M+5rb1Q+gYX0z8\n9e/pw+ciEjH2dXjz3HPP5e233+b2229n8eLFu9ePHz+eF154gUAgwNatW8nKysLMaNeuHSeccAIA\nTZo0abD84aDSO0ihkGPY+FkMXH0HGfHFxP9mInQ60etYIhKB9jcia2ihUIjly5eTnJxMQUEBGRkZ\nrFu3jqeeeop58+bRvHlzbrjhBioqKnDONaqzUPWe3kEIhRx/Hz+Ta7JuI8NfTIIKT0SiyPDhwznq\nqKMYO3YsN954I9XV1RQXF5OamkrTpk3Zvn07H35YcynkI488ki1btjBv3jwASkpKCAQCpKenU1JS\n4uUf46BopPcjBUOOJ8d8wHWrh9A6vpz437ynwhORiLT3e3oDBgzgxhtv5MUXX+Sbb74hPT2dM844\ng8cee4yHH36YPn36cPTRR9O1a1dOPfVUABISEhg3bhyDBw+mvLyc5ORkZs6cyVlnncWwYcPo3bv3\n7vcKo4E5V+c1oCNWZmammz9/vievHQiGeHr0OwxcdzepCXGkDJwI7Xvv/4EiEnOWL1/OUUcd5XWM\nRqmufWtmC5xzmft7rEZ6B6gyEOTZV0dz66b7saR0Um75AFod7nUsERH5EVR6B6CkopqXXxjOHfl/\npzy1Pc0GfQDNOu7/gSIiElFUevuRV1zB5OfvZ0jZy+S36E3LmydAakuvY4mIyEFQ6f2A9blFLHzh\nVm4KTCW34wUccv0rEJ/sdSwRETlIKr19mLd8DYFxN3ApS9je87e0uXQY+PQJDxGRaKbSq8NHn3xC\njzm/pa0VsKP/P2hz+s1eRxIRkXqg0ttDIBhi8tjnOH/1w1THpVJ17fu0OuwUr2OJiEg90fG6WvlF\nJcwYPpDLsh+gILUrqYM/I02FJyJRzMy4++67dy8/9dRTPPTQQw2aYf78+fz+978/qMf269eP+v5c\ntkoPyMr6jm0jzuKC0oms6vwrOt41h/jmGV7HEhH5SRITE5kwYQI7duzw5PUDgQCZmZmMHDnSk9ev\nS0wf3nTOMWfii/RZNBSfOTb0/1+6n36117FEpLH58D7Y9l39PmfbnnDBD8+E7vf7GTRoEMOHD+fx\nxx//r/tuuOEGLrroIq644goA0tLSKC0tZfbs2QwdOpQ2bdqwaNEiLrvsMnr27MkzzzxDeXk5EydO\npFu3buTl5XHrrbeyceNGAEaMGMGpp57KQw89xJYtW1i/fj2tWrVi0KBBPPXUU0yZMoXS0lIGDx7M\n/PnzMTOGDh3K5Zdfzm233ca8efMoLy/niiuu4OGHH67ffbXnPgnbM0e4woIdLH/5VvqVzmBt4hG0\n/M0bHNqhu9exRETq1e23306vXr249957D/gxixcvZvny5bRo0YKuXbty880388033/DMM8/wz3/+\nkxEjRjBkyBDuvPNOTjvtNDZu3Mj555/P8uXLAViwYAFz584lOTmZ2bNn737eRx99lKZNm/LddzW/\nABQWFgJ1z+PXq1ev+tsJe4jJ0ls6dwqtZg6hryvg22630ufaRzF/gtexRKSx2s+ILJyaNGnC9ddf\nz8iRI0lOPrDPGZ9wwgm0a9cOgG7dunHeeecB0LNnT2bNmgXAzJkzycrK2v2Y4uLi3bMuXHzxxXW+\n1syZM3nrrbd2Lzdv3hyoex4/lV49KS0upOPMQRRbUzZcMpHj+pzpdSQRkbD6wx/+wHHHHcfAgQN3\nr/P7/YRCIaDmrZ6qqqrd9yUmJu6+7fP5di/7fD4CgQBQMyffl19+WWe5paam1pmjrrn59jWPX7jE\n3IksaU2as+2iN2h591d0U+GJSAxo0aIFV155JS+99NLudZ07d2bBggUATJo0ierq6h/1nOeddx7P\nPvvs7uW6Zmjf32MKCwv3OY9fuMRc6QEckXk2KWlNvY4hItJg7r777v86i/OWW25hzpw59O3bl6+/\n/nqfo7N9GTlyJPPnz6dXr1706NGD559/fr+PefDBByksLOSYY47h2GOPZdasWRx77LG75/G78cYb\nd8/jFy6aT09EJAw0n174/JT59GJypCciIrFJpSciIjFDpSciEibR9vZRNPip+1SlJyISBklJSeTn\n56v46pFzjvz8fJKSkg76OWLuc3oiIg0hIyODnJwc8vLyvI7SqCQlJZGRcfDXRlbpiYiEQXx8PF26\ndPE6huxFhzdFRCRmqPRERCRmqPRERCRmRN0VWcwsD9hQD0/VCvBmZsXIp32zb9o3+6Z9s2/aN/tW\nX/vmUOdc6/1tFHWlV1/MbP6BXLImFmnf7Jv2zb5p3+yb9s2+NfS+0eFNERGJGSo9ERGJGbFcei94\nHSCCad/sm/bNvmnf7Jv2zb416L6J2ff0REQk9sTySE9ERGKMSk9ERGJGzJWemQ0ws5Vmlm1m93md\nJ1KYWUczm2Vmy81smZkN8TpTpDGzODNbaGZTvM4SScysmZm9Y2Yrav/+nOx1pkhhZnfW/ntaamZj\nzezgpwdoBMzsZTPLNbOle6xrYWYzzGx17ffm4cwQU6VnZnHAKOACoAdwjZn18DZVxAgAdzvnjgJO\nAm7XvvmeIcByr0NEoGeAj5xzRwLHon0EgJl1AH4PZDrnjgHigKu9TeW5V4EBe627D/jYOXc48HHt\nctjEVOkBfYFs59xa51wV8BZwiceZIoJzbqtz7tva2yXU/ODq4G2qyGFmGcDPgBe9zhJJzKwJcAbw\nEoBzrso5t9PbVBHFDySbmR9IAbZ4nMdTzrlPgYK9Vl8CvFZ7+zXgF+HMEGul1wHYtMdyDvrB/j1m\n1hnoA3ztbZKIMgK4Fwh5HSTCdAXygFdqD/2+aGapXoeKBM65zcBTwEZgK1DknJvubaqI1MY5txVq\nfvkGDgnni8Va6Vkd6/SZjT2YWRrwLvAH51yx13kigZldBOQ65xZ4nSUC+YHjgOecc32AXYT58FS0\nqH1v6hKgC9AeSDWz67xNJbFWejlAxz2WM4jxww17MrN4agrvTefcBK/zRJBTgYvNbD01h8TPNrM3\nvI0UMXKAHOfcf44KvENNCQqcA6xzzuU556qBCcApHmeKRNvNrB1A7ffccL5YrJXePOBwM+tiZgnU\nvKk82eNMEcHMjJr3ZZY75572Ok8kcc7d75zLcM51pubvzCfOOf3GDjjntgGbzOyI2lX9gSwPI0WS\njcBJZpZS+++rPzrJpy6Tgd/U3v4NMCmcL+YP55NHGudcwMzuAKZRcybVy865ZR7HihSnAr8GvjOz\nRbXrHnDOTfUwk0SHwcCbtb9IrgUGepwnIjjnvjazd4BvqTk7eiExfjkyMxsL9ANamVkOMBQYBow3\ns5uo+UXhl2HNoMuQiYhIrIi1w5siIhLDVHoiIhIzVHoiIhIzVHoiIhIzVHoiIhIzVHoiIhIzVHoi\nIhIzVHoiUcjMMszsKq9ziEQblZ5IdOqPrnEp8qPpiiwiUcbMTqPm+oQ7gRLgUufcOm9TiUQHlZ5I\nFDKzj4B7nHNLvc4iEk10eFMkOh0BrPQ6hEi0UemJRBkza0nNLNzVXmcRiTYqPZHo0wVNfixyUFR6\nItFnBTXzkS01M83ELfIj6EQWERGJGRrpiYhIzFDpiYhIzFDpiYhIzFDpiYhIzFDpiYhIzFDpiYhI\nzFDpiYhIzPg/KG4SaerKnE4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# For this exmaple, we'll use r = 1, x0 = 0.1, Delta t = 0.1\n", "r = 1.0\n", "x0 = 0.1\n", "dt = 0.1\n", "\n", "# Define the function dxdt\n", "def dxdt(x):\n", " return r*x*(1-x)\n", "\n", "# Here is the exact solution\n", "def xsol(t):\n", " return 1.0 / (1.0+(1.0/x0-1)*np.exp(-r*t))\n", "\n", "# We'll integrate for 100 steps\n", "t = np.arange(101)*dt\n", "x = np.zeros(101)\n", "x[0] = x0\n", "for i in range(100):\n", " # Here is the update step\n", " x[i+1] = x[i] + dt*dxdt(x[i])\n", " \n", "# Plot the numerical and exact solutions on top of each other\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label='Numerical')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This looks reasonably good, but of course that depends on the choice of step size. Suppose instead of $\\Delta t = 0.1$ we chose $\\Delta t = 0.5$. Then things look a lot worse..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Change to dt = 0.5, then integrate for 20 steps to the same final time\n", "dt = 0.5\n", "t1 = np.arange(21)*dt\n", "x1 = np.zeros(21)\n", "x1[0] = x0\n", "for i in range(20):\n", " x1[i+1] = x1[i] + dt*dxdt(x1[i])\n", "\n", "# Plot this case\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label=r'Numerical, $\\Delta t = 0.1$')\n", "plt.plot(t1, x1, label=r'Numerical, $\\Delta t = 0.5$')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example above, the numerical solution grows too slowly compared to the analytic one. This is because the derivative is underestimated near the beginning of the calculation, when $x\\ll 1$. Specifically, when we do the first update step\n", "\\begin{equation}\n", "x_1 = x_0 + \\left(\\frac{dx}{dt}\\right)_{t_0},\n", "\\end{equation}\n", "the derivative $dx/dt$ evaluates to 0.09, since it is evaluated at $x=0.1$. We assume the solution looks like a straight line until the next time we evaluate the derivative at $t=\\Delta t$, so we are assuming that the slope is constant between $t=0$ and $t=\\Delta t$. This is clearly incorrect, however, which we can verify by plotting the true slope from $t=0$ to $t=\\Delta t$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcsAAAFCCAYAAACevfZXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4XXWd7/H3N9c2zaX3XEsv9pJLm1ZICyoUoYLlItVj\nhYIzXMfOOODgg3pGHxUHBAedjigPeM70COcoYlvkiFYHRBD1DAjSFNvSewutNEkv6S2Xtmma5Hv+\n2Cu7aZqydtJk7yT9vJ4nT/fe67fW/nY9oR9+a/1+v2XujoiIiJxZUqILEBER6e8UliIiIiEUliIi\nIiEUliIiIiEUliIiIiEUliIiIiEUliIiIiEUliIiIiEUliIiIiFSEl1AXxg9erRPmDAh0WWIiEg/\nsnr16v3uPqYn+w7KsJwwYQKVlZWJLkNERPoRM/trT/fVZVgREZEQCksREZEQCksREZEQCksREZEQ\nCksREZEQCksREZEQCksREZEQCksREZEQCksREZEQCksREZEQCksREZEQCksREZEQCksREZEQcQtL\nM5tvZlvMbLuZfbmL7XPN7E0zazGzhV1szzazajN7ND4Vi4iIRMQlLM0sGXgMuAooBW40s9JOzd4F\nbgV+eobDfBP4Y1/VKCIicibx6lnOAba7+zvu3gwsBxZ0bODuO919HdDWeWczuwDIBX4bj2JFREQ6\nildYFgK7OryvCj4LZWZJwL8DXwppt9jMKs2ssra2tseFioiIdBavsLQuPvMY9/1H4Dl33/Vejdx9\nqbtXuHvFmDFjul2giIjImaTE6XuqgHEd3hcBNTHu+wHgEjP7RyATSDOzRnc/bZCQiIhIX4hXWK4C\nppjZRKAaWATcFMuO7v7p9tdmditQoaAUEZF4istlWHdvAe4CXgA2AU+7+wYzu9/MrgMws9lmVgV8\nCvgPM9sQj9pERETCmHustw4HjoqKCq+srEx0GSIi0o+Y2Wp3r+jJvlrBR0REJITCUkREJITCUkRE\nJITCUkREJITCUkREJITCUkREJITCUkREJITCUkREJITCUkREJITCUkREBr3WtrNbrS5eC6mLiIjE\nhbtTdegYa6sOs3bXYdZW1bG+uu6sjqmwFBGRAW1/43HWVR1m7a461lYdZl1VHQePNAOQlpJEWUE2\n11eM476z+A6FpYiIDBiNx1t4q6qOdUEortl1mOrDxwBIMpgyNot5xWOZOW44M4uGMy0vi7SUyB1H\n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\nW5aIiEj/ERqW7v4PAGZWTGRt1/9jZjnA74mE56vu3tqnVYqIiCRQzAN83H2zuz/s7vOBy4FXiCxy\n/ue+Kk5ERKQ/6M5TR74XLGyOux9z9+fc/XM9HYYrIiIyUHRn6kgjsDJYRQczuzJYek5ERGRQi3nq\niLt/zcxuAv5gZseJPAnktIc4i4iIDDYxh6WZzQM+QyQk84E73H1LXxUmIiLSX3TnMuxXgXvd/cNE\nFjpfYWaX90lVIiIi/Uhoz9LMrgLWuns0GN39reDz/0tkoQIREZFBK5bLsJ8EvmlmuUQejbUGWBv8\n+dE+rE1ERKRfiGVRgr8DMLPPA1M4+YiupUQezlzUlwWKiIgkWncWUr+t0yO6fgB8qfdLEhER6V/0\niC4REZEQ3elZ3g78RI/oEhGRc0131obdhh7RJSIi56Du9CwJni7ys+BHRETknNCde5YiIiLnJIWl\niIhICIWliIhICIWliIhICIWliIhICIWliIhICIWliIhICIWliIhIiLiFpZnNN7MtZrbdzL7cxfZ0\nM1sRbP+zmU3osK3czF4zsw1m9paZDYlX3SIiInEJSzNLBh4DrgJKgRvNrLRTszuAQ+4+GXgY+Haw\nbwrwE+Af3L0M+DBak1ZEROIoXj3LOcB2d3/H3ZuB5cCCTm0WAD8KXj8DzDMzA64E1rn7WgB3PxAs\nuyciIhIX8QrLQmBXh/dVwWddtnH3FqAOGEXkMWBuZi+Y2Ztm9t+7+gIzW2xmlWZWWVtb2+t/ARER\nOXfFKyyti888xjYpwMXAp4M/P2Fm805r6L7U3SvcvWLMmDFnW6+IiEhUvMKyChjX4X0RUHOmNsF9\nyhzgYPD5H919v7sfJfKIsPP7vGIREZFAvMJyFTDFzCaaWRqwCFjZqc1K4Jbg9ULgZXd34AWg3Mwy\nghC9FNgYp7pFRES69zzLnnL3FjO7i0jwJQNPuPsGM7sfqHT3lcDjwJNmtp1Ij3JRsO8hM/sukcB1\n4Dl3/8941C0iIgJgkc7b4FJRUeGVlZWJLkNERPoRM1vt7hU92Vcr+IiIiIRQWIqIiIRQWIqIiIRQ\nWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqI\niIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQWIqIiIRQ\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Points between 0 and dt\n", "tplot = np.linspace(0, dt, 100)\n", "\n", "# Plot dx/dt evaluated using the true solution\n", "plt.plot(tplot, dxdt(xsol(tplot)), label='Exact')\n", "plt.plot(tplot, dxdt(x0)*np.ones(100), 'r', label=r'Numerical, $\\Delta t=0.5$')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$dx/dt$')\n", "xlim=plt.xlim([0,dt])\n", "ylim=plt.ylim([0,0.15])\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Second Order Differencing: The Midpoint Method\n", "\n", "Formally, we can understand how the error depends on this size of the time step via series expansion. The true solution at $t = \\Delta t$ can be written as a series expansion of the solution at $t=0$:\n", "\\begin{equation}\n", "x(\\Delta t) = x(0) + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_0} + \\frac{\\Delta t^2}{2}\\left(\\frac{d^2x}{dt^2}\\right)_{t_0} + O(\\Delta t^3).\n", "\\end{equation}\n", "So our forwards Euler difference just amounts to throwing out all the terms in the series expansion higher than $\\Delta t$ to the first power. The size of the error per time step vis therefore clearly proportional to $\\Delta t^2$. Since we will require twice as many time steps to advance the same total amount of time, the error in our solution after a fixed amount of time thus scales as $\\Delta t$. Since the error for fixed time scales as the first power of the time step, this is said to be a first order method.\n", "\n", "Suppose we want more accuracy in our solution. How can we get it? One solution is to use a smaller time step, since the error scales as $\\Delta t$, but of course that costs more CPU time. If the cost is linear in the number of steps, then for every doubling of the CPU time (corresponding to taking twice as many steps of half the size), the error will go down by a factor of 2. That's not a great tradeoff, and we can do much better.\n", "\n", "Here's one way, called the midpoint method: we take a trial step of half of $\\Delta t$, evaluate the derivative at that trial point, and use that derivative for our advance. To be precise, we do the following steps:\n", "\\begin{eqnarray*}\n", "x_{1/2} & = & x_0 + \\frac{\\Delta t}{2} \\left(\\frac{dx}{dt}\\right)_{t_0} \\\\\n", "x_{1} & = & x_0 + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{1/2}} \\\\\n", "& \\cdots & \\\\\n", "x_{i+1/2} & = & x_i + \\frac{\\Delta t}{2} \\left(\\frac{dx}{dt}\\right)_{t_i} \\\\\n", "x_i & = & x_i + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1/2}}.\n", "\\end{eqnarray*}\n", "Here we have introduced the notational shorthand that $t_{1/2} = (1/2)\\Delta t$, and so forth.\n", "In this update, there are two steps. In the first, we compute $x$ at half a step past where we are currently located. In the second, we evaluate the derivative at the new point, and use that for the full advance.\n", "\n", "We can code this up as follows:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAFCCAYAAABl6gOIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd0VNXax/HvnsmkJ4T0kARCJwFCCKGINAkgoOLlqiio\nV0XF3rBcLC+C7XIF0Ysg0hHRAIIFUVBAUYp0QguEXkJLCBBIn7LfPwKREJBihpPyfNaalZmz95x5\nxsT5sc+cs7fSWiOEEEJUBSajCxBCCCGuFwk9IYQQVYaEnhBCiCpDQk8IIUSVIaEnhBCiypDQE0II\nUWVI6AkhhKgyJPSEEEJUGRJ6QgghqgwXowu4WoGBgToqKsroMoQQQpQj69atO661DrpcvwoXelFR\nUaxdu9boMoQQQpQjSqn9V9JPDm8KIYSoMiT0hBBCVBkSekIIIaoMCT0hhBBVhoSeEEKIKkNCTwgh\nRJUhoSeEEKLKcFroKaUmK6XSlVJbLtGulFKjlFK7lFKblFLxzqpFCCGEAOeO9KYC3f+ivQdQ/+xt\nADDWibUIIYQQzpuRRWv9u1Iq6i+63A5M01prYKVSyk8pFaa1PuKsmoQQ4u9waAd2hx27tuPQDmza\nhsPhwK7/3GbX9pJ9HDY0Gq01DhxofcF9NA59wf2LbENrHA4baAfaYUdrO1o74OzrOOx2HA4HDoe9\nuE6HdqDtDrR2FPVx2NF2W9E2u0ZrO9jO7sfuAIcdtAZb0XOVw4F2aHAUtWvtQGnAbkdrjdJn2zVF\n9zUoR9H7U+iifTk0oNEOjdIX9NXgX6MOt/YbfN1+h0ZOQxYOHDzvcdrZbaVCTyk1gKLRIDVr1rwu\nxQkhyh+tNXm2PHJtueRYc8i2ZpNrLbp/7pZrzSXPlkeho5BCeyFWh7X4p9VupdDx57ZCeyE2h5VC\newFWe+HZn9azz7ViKw43Ow70+YXgYgdX29mbtein5dxjmy6x3cV+9uYo+ml2gItdn3f/vLYL75/X\n3+wAk6b4p8lRdHM5b5v57Lbi9vO2mfWl/9saJbX+Oqgioacusu2ivxKt9XhgPEBCQkI5/LUJIa6G\n1ppTBadIz00nIy+DjNyM4p/Z1uzi8Mqx5pBj+zPMcm25RaOeK2BGYcGERYObXeNTAD55Gq8CjXeB\ng4ACB175DrwKNB6FGo9ChXsBuBWAWyG4FoKLFVxsCrMdTDYw2xSms/fVRT/Cro7DBA6zQpv+vBU/\nNpvQZoXDZCq6b1LgUnQfpdAmE5jObjeZ0GdvVrMJlAnMRe2YTGA2F/cvelzUR5lMYFJgMqNV0X6U\n6dz2s33MJrRSxdu1yQznPUZR9Hpnt2FSgEKpc/suaituV6pov0qBSdGgxvUdyBgZemlA5HmPI4DD\nBtUihCgD58LsXICl56ZzPO/4n+F2XsDZHLZSz/exeOPr4oGXsuCBCS+7xt9ux8PqwMOm8LK64FOQ\nR8CZfPyzC/HKA49ccMs1YckHc54JU55CF5hwWE3YrSYcNgX2SwXUn6c1aAUON9ezN3ccHu5oL3dw\ncwM3d7S7O3Z3T7SHJ9rTE5OHFy5eXpg9PHDxcMfVs+inxdMDV08PTO4emNxcUe7uKFc3lMUFZbGg\nXIp+YjYXffCL68rI0JsLPK2UmgG0BrLk+zwhKgabw8aerD1sP7GdbZnb2H5iO4ezD5ORl4HVYS3V\n39fVl2B3fwJdvEhwC8bfHIRvfgHVc84QmJdFaM4JIk6dwJwNtjwz9gITtnwT9nwzhfku5BdYsOWb\n0PkKk1UDbmdvf7K6uJDn44ujmh861B+TbzVcfH1w9fXFrZoP7tWKfpq8vTF7e2Py9sbk5Y3J2wuz\ntzfKw0NCqApwWugppZKATkCgUioNeBOwAGitPwV+BHoCu4Bc4CFn1SKEuHb5tnx2ntzJthPb2HZi\nG9szt7Pj5A4KHYUAuJvdaeDfgBYh8QSZPQm22/HPz8E76xR+J48SdCoN/7xdWGz52PLMFGabKTzj\nQk62G9lnPLBmm3Fku5BmL70Ums3LG+3njzksANfAADxCgnELCsDFPwCXwADM5/00eXlKaInLUkUn\nT1YcCQkJWtbTE8I5zhSeKTF623ZiG3uz9mLXdgB8XH2I9m9EtHdNGuFG/bw8Ao4exJyRiteZPVis\neRTmmLFmu5Bzxo0T2T7kZbtCNrjlWDE5/vw+TrtYICwM11q18IqqhVutWlgiI7CEhBSFmX/1osOA\nQlwBpdQ6rXXC5fpVuEVkhRBlQ2vNluNbWHlkZdEoLnMbadlpxe3BHsE08m9E5+AWRNsg6uRxqh/a\njueexXhYT2EvVORlupKR6UvWcU84HYxrnrXolPZzr+HujndkJB5NauFWqyaWyJq41qqJa2QkLqGh\nKLPZgHcuqjIJPSGqmAOnD/DDnh+Yt2ceB84cACDSJ5LogGjuqNuLRg4z9U4ew23vetx3zsPDegrt\ngDOn3DmQGUzW8VBcTwbhfToHAK0UblE18Y5viHtULSw1a+J69mYOCJBDjqJckdATogo4kX+Cn/b9\nxLw989iUsQmFolVoKx6JeYDOyhv3/WvJ27IEn8zPMGsbtjwTe46HcuR4OOZTkVQ7cRoXqxUzNgL9\nzHjGx+MR1wyPZs1wb9oUs7e30W9RiCsioSdEJZVny2PJwSXM2zOPFYdWYNM2GlRvwMBG99Mt34FX\n6nK8Vj6N2VZA7glXDmaGcTKzIV4nrXhmZwMQbD6De0w0Hl174NGsGR5xzbBERMjoTVRYEnpCVCJ2\nh53VR1czb888Fu1fRK4tlxDPEP4V0ZnErFxqb1+Kz/pF2AoUew6GknmgFj7HczE7HLhgJTTMHc92\nrYsCrlkz3GOiMbm7G/22hCgzEnpCVHBaa7af2M68PfOYv3c+GXkZeFu86R7QjM6ncknYsRQv6xry\nCixsTKtDwaFmBB7NxORwEBjpj++DffBoHodHbDMsIcFGvx0hnEpCT4gK6nD2YX7c+yPzds9jd9Zu\nXEwudAiMo7OqQYcdK6i+I4XsQjdWH2qAPtqQkLQjVLOfwaWGD9X6P4RPjx64x8TIoUpRpUjoCVHB\nZBVkMXLdSL7e+TUA8YFNeTWwHe1S11Bz99fkW82sPhSN7VgDQtKOEGrNxCXEBd/77sW3Zw/cY2Ml\n6ESVJaEnRAWhtebHvT/y/pr3ySrI4l+RN9Pj0BEarv0Zs62QLYdrsetQAsGHMwkqPIE50ITvXXfi\ne0tPPJo3L5rsV4gqTkJPiAog7Uwa76x8h+WHl9PYswb/PVVA650TOH7Uh9UH6uJzNB9LQQERfrn4\n/ON2fHv2wLNlS7n4W4gLSOgJUY5ZHVY+T/mcscmfoBx2nj9l4/7UVezbHsrmXbWwFFoJ8HHge8st\n+PbogVeb1jJ1lxB/QUJPiHJqc8ZmhiwfzI6sXXTItfLG0XSOpNRi+44oLAUFVO/SEb87/on3jTei\nXF2NLleICkFCT4hyJseaw6i1I0naMYtAm4OP0jPx2RxJ+g4fPLKz8erYgeDnnsM9JsboUoWocCT0\nhChHFu/7mXeWDSbTlk3fU9m0Wx+Mzw5f3E6dwjMhgaCBL+AZH290mUJUWBJ6QpQDx3KOMfTnZ1l6\nOoUGBYUMWutOcEoE7sczcW/ShKARI/C6sa1caiDE3yShJ4SB7A4709eMYsy2KTgcNl7apGmyPhjP\n9OO41a9O4Jtv4tOli4SdEGVEQk8Ig6Qe28irPz3FTp3FP3cW0nN5dXyPZmGp6UnQ8Pfx7dlTLjkQ\nooxJ6AlxneXZ8hjx87+Zk/4LsYfsjPnFjaBDJlxC3AkcOhC/f/aWyw6EcBIJPSGuo11HtvD4ggdw\nPV7Af36xE7UXzNU9CRj0PNX79sXk5mZ0iUJUahJ6Qlwny5ZN57/J73HvL5rWKWDy9ibwuf5Uv/9f\nmL29jC5PiCpBQk8IJ8vPy+GXaU8z+/hKXvkO/HPNBD7an4CH+2P28zO6PCGqFAk9IZxoz/Zk0uf8\ni1XHrDy/GMz+/tSZOBaP2FijSxOiSpJp14VwAq01v389FseXPdi2wco9P4NLfCwN586TwBPCQDLS\nE6KMnTp9mo0THqd++s9s+SOINungeOAOYl4ZKpcgCGEwCT0hytD2nTuwf3kvdY8c5PDKIAI02Ia9\nQtN/PGR0aUIIJPSEKDOLFv5Ik9+fJHu7ImtzdTJDTIR8NJKmzW82ujQhxFnynZ4Qf5PV7mDm5A9o\nu/gBTi53x7rZneWxLgR9Pok4CTwhyhUZ6QnxN5zKKeCnT1+m1/4v2bsiBHueg897utHn5QnEh7U0\nujwhxAUk9IS4RnuOnSJl/CN027GcveuDOeVj4qMH3Hj5X+NICJXAE6I8ktAT4hqsST1I3uf3Eb9u\nH0f3+rGrgScjb9UMu20MLSXwhCi3JPSEuEqLNuzEf3pfIlacIuukJ0sSg5jUKptRXUbTJqyN0eUJ\nIf6ChJ4QV2HO0o00/Ow+LKsKKbD4ML1/CPPD0hnVeRRtw9saXZ4Q4jIk9IS4AlprpvywnLaTH0Wn\ngIoK5399q7HatJ+PbvqIduHtjC5RCHEFJPSEuAytNWO/+ZXEj5/EcUThkdiKN7sWsunMdj7s9CEd\nIjoYXaIQ4gpJ6AnxF7TWfPj179wyrijw/J64m5fr7WRr5nY+6PQBnSI7GV2iEOIqyMXpQlyCw6H5\n71dL6fnZ4zgOKKo9cDv/brCHLZlbGd5xOJ1rdja6RCHEVZLQE+IitNb89+vl3D77cfQOqNbrJgY3\nz2BTxibe7/A+XWp1MbpEIcQ1kNAT4gJaa0bMW88tc5+ETRqf9i2Yf288q46t5s0b3qRbVDejSxRC\nXCMJPSEuMOrnFNrNfQLLmkI8m9Yj++1BjN40hq61uvKPev8wujwhxN8gJ7IIcZ5Pl+yk4dxnqP5H\nFq41QwmeOJV+Sx7Bz82PwW0Go5QyukQhxN8goSfEWbPWHKDaNy9RZ1kapmp+RH7+FaN2TmXXqV18\nkvgJfu5+RpcohPib5PCmEMAv24+xb+bbtFyWAi4eRH4+k2THfj7b+hl9GvShfUR7o0sUQpQBCT1R\n5W04cJLvpo7hzmW/Yit0JXLyNKwRQbyx7A0ifSJ5MeFFo0sUQpQRObwpqrQ9Gdl8MPEL3l7xJfmn\nLUSO/h8ezZrxxrI3OJp7lGk9puFp8TS6TCFEGZHQE1XWyZxCBk36gf/8MYr8dAs1hr6Gd+cuLN6/\nmO92f8eA2AE0C2pmdJlCiDIkhzdFlVRoc/DMtOW8ufxtCg+aCX78fqrdfT/H844z9I+hRPtH83iz\nx40uUwhRxpwaekqp7kqpVKXULqXUoIu011RK/aqU2qCU2qSU6unMeoSAoovP/++bzTzyy/9h2mnH\nv1cH/J97Fa01Q1YMIdeWy3/a/weLyWJ0qUKIMua00FNKmYExQA8gBuirlIq5oNsbwCytdXPgHuAT\nZ9UjxDkTl+4l+tu3CNmciW/L2gQPG4tSijk75/Bb2m88H/88df3qGl2mEMIJnDnSawXs0lrv0VoX\nAjOA2y/oowHfs/erAYedWI8QLElNZ//Uj2i9fiuedbypMeFrlMnEwdMHeX/N+7QOa02/6H5GlymE\ncBJnhl44cPC8x2lnt51vCHCfUioN+BF45mI7UkoNUEqtVUqtzcjIcEatogrYn5nD9NGfcd+qn3EL\nNBPx+VyUuzt2h53Xlr2Gi3LhnRvfwaTkq24hKitn/t99sfma9AWP+wJTtdYRQE/gc6VKf+Jorcdr\nrRO01glBQUFOKFVUdrmFNt4cNZeBv03BxdNBzUlTMAeEATBl6xSSM5J5rc1rhHqFGlypEMKZnBl6\naUDkeY8jKH348mFgFoDW+g/AHQh0Yk2iCtJaM3Tq7zz3/TBclI2a772ES4NWAGzL3MaY5DHcHHUz\nt9S+xeBKhRDO5szQWwPUV0rVVkq5UnSiytwL+hwAEgGUUtEUhZ4cvxRlaurPW+g56XU8C/OJfKI9\nrl0HAFBgL+DVpa9S3a06/9fm/2QyaSGqAKddnK61timlngZ+AszAZK31VqXUW8BarfVc4EVgglLq\nBYoOfT6otb7wEKgQ12z9/hN4/udVgs+cJPx2PzweHlPcNmr9KHZn7WZsl7FUc6tmYJVCiOvFqTOy\naK1/pOgElfO3DT7vfgpwozNrEFXXqdxCZg0dwwNHdxOcUID3y0lgcQdg9ZHVfJ7yOXc3vJt24e0M\nrlQIcb3IaWqiUtJaM3TSr9y7eiaeQQX4v/I++NcB4EzhGV5f/jo1fWsysMVAgysVQlxPMvemqJQm\nL9tL56+GY8FK2IMdULF3FbcNWz2MjNwMmUxaiCpIRnqi0tmclsX2Tz6lXvohgttacL3v4+K2hfsX\nMnf3XB6NfZTYoFgDqxRCGEFCT1QquYU23hr3Mw9unodnaAHV/28KuPkAkJGbwVt/vEXjgMYMiB1g\ncKVCCCNI6IlK5e25W3ns11G4KDs1nrsfFdkSKPqO780Vb5Jny+O99u/JZNJCVFESeqLS+HnrUUwz\nJxF+/Dghnf2x9Pq/4rbZO2ez9NBSXmjxAnWq1TGwSiGEkST0RKWQfjqfDycv5N6URXjVKKTaG5+B\nueg8rQOnDzB8zXDahLWhb6O+BlcqhDCShJ6o8LTWvDIrmUErx2I22wl7+XFUUIPitrf+eAsXkwtv\n3/i2TCYtRBUnnwCiwpu55iB15n9GcOZJQruFYLn5xeK239N+Z9XRVTwV95RMJi2EkNATFVvayVym\nfvkLd25bgnekFd/XPgNT0Z+11WHlg3UfEOUbRZ+GfQyuVAhRHkjoiQrL4dD8e9YG3lg1DheLnbB/\nP4Pyr13cPmfHHPZm7eWFFi/I2ZpCCEBCT1Rg01ftp9GCzwk4eYrQ7qG4dP5zDeIzhWf4JPkTEkIS\nuCnyJgOrFEKUJxJ6okLan5lD0peLuSP1N3xqFeD78qTiw5oAEzdP5GTBSV5q+ZIsGSSEKCahJyoc\nrTWvf7WB11dPxMXVTujzD0Ng/eL2Q9mHmJ4yndvq3EbjgMYGViqEKG8k9ESF89XaNBr9+DkBWacI\n6+aHS7dXSrT/b/3/UErxbPyzBlUohCivJPREhZJ+Op+kaQv4587f8a2dh8/z48H850kqmzM2M3/v\nfP4V8y+5REEIUYqEnqhQ3vp6A8+vmoLF3U7oo3dCjbjiNq01w9cOJ8A9gIebPmxglUKI8kpCT1QY\nC7YcJWTOZwSfPklYJzPmW94s0b7owCI2pG/gqeZP4WXxMqhKIUR5JqEnKoQz+VamTfqeO3b9hl+d\nHLwHvF+8ZBCA1W7lw3UfUs+vHr3r9TawUiFEeSYrp4sK4aN5m3n09ylYPO0E39UKGt1aoj1pexIH\nzxxkbJexuJjkz1oIcXEy0hPl3ua0LFymfEpozklqtM3D3HsknHftXVZBFuM2jaNtjba0C29nYKVC\niPJOQk+Ua3aHZuKY2fxj91Kq18/Gq88L4FezRJ9PN35KtjWbFxNevMRehBCiiISeKNeSftvOP36a\nhIsvBN8UBDc8XaL9wOkDzEidQe96vWlQvYFBVQohKgoJPVFupZ/OJ3PECEJyTxLe8jimXsPBxbVE\nnw/XfYjFZOHp5k9fYi9CCPEnCT1Rbk39ZA7ddq/APzoPzw43Q73EEu3rjq1j0YFF9G/Sn0CPQIOq\nFEJUJBJ6olxavSuDxl9PAl8Lwc3y4eb3SrQ7tIMRa0YQ7BnMA40fMKhKIURFI6Enyh2b3cG8EROp\nc/oI4U2OYbrpxVInr8zfO58tmVt4tvmzeLh4GFSpEKKikdAT5c6MpTvotvIbXINN+DQNhrbPlGjP\nt+Xzv/X/I9o/mtvq3mZQlUKIikhCT5QrmdkF7Bk9joD8M4TFHkPd/C5Y3Ev0mb5tOkdyjvBSwkuY\nlPwJCyGunHxiiHLl469Wctu2xXhH2fBMaAPRJUdymXmZTNw8kU4RnWgV1sqgKoUQFZWEnig3Nqdl\n4TdjMm7aRkiTk9B9WImZVwDGbhxLvi2fFxJeMKhKIURFJqEnygWtNZ9OXkDX/avxr5+Na8f7ILRJ\niT57Tu1h9o7Z3NXgLupUq2NQpUKIikxCT5QL8zYd4YZFX2J2MxHUHOj8Rqk+H6z7AA8XD56Ie+L6\nFyiEqBQk9ITh8grtfD9hDi3SdxAccxJzt5fBq+TF5iuPrOT3tN95NPZR/N39DapUCFHRSegJw034\ndSe9V83BxVdRvWUgtBpQot3usDNizQhqeNXg3uh7DapSCFEZSOgJQx3JymPntCSizhwjpGkm6ua3\nwMWtRJ+5u+eSejKV51s8j5vZ7RJ7EkKIy5PQE4b66Ltk+m35EfdgBz43NIOY20u051pz+XjDx8QG\nxtI9qrtBVQohKgtZYloYZnNaFq5zvsSvIJvQZpmo7l+UukThs62fkZGXwchOI1EXtAkhxNWSkZ4w\nhNaaUTOWceeuJfjUKsSjYy+ISCjRJz03nSlbp9CtVjfiguMMqlQIUZlI6AlDLEw5RpOfZ+CKneC4\nbEh8s1SfcRvHYXVYeb7F8wZUKISojCT0xHVntTuYPn0hXQ+sxb/+GVwTH4XqtUr0OXjmIF/v/Jo7\n6t9BpE+kQZUKISobCT1x3X25cj89ls7C5G4isLmCdgNL9fl046eYTWYGxA64yB6EEOLaSOiJ6+p0\nvpUl074l7viuogvRu7wEniUvNt9zag/z9szjnob3EOwZbFClQojKSEJPXFfjFu/gnvXf4uJnpnp8\n9VIXogN8svET3M3u9G/a34AKhRCVmYSeuG6OZOVxcPoMap5JJ7RJBqrLG6XWytt+Yjs/7fuJ+2Lu\nk+nGhBBlTkJPXDejv0+mX8p8PMIU3vH1ILZPqT5jNozBx9WHBxo/YECFQojKzqmhp5TqrpRKVUrt\nUkoNukSfPkqpFKXUVqXUl86sRxgn9egZLLOmU60gh5Cm6aiuQ8FkLtFnY8ZGlqQt4aHGD+Hr6mtQ\npUKIysxpM7IopczAGKArkAasUUrN1VqnnNenPvAqcKPW+qRSSs5aqKQ+mbmM/rt/x6euA4/4NlAv\nsVSf0RtG4+/uL5NKCyGcxpkjvVbALq31Hq11ITADuP2CPo8CY7TWJwG01ulOrEcYZOWeTOp/Px2L\nchASkwFdhpSabmzN0TWsPLKSh5s8jKfF05A6hRCVnzNDLxw4eN7jtLPbztcAaKCUWq6UWqmUuuiM\nwkqpAUqptUqptRkZGU4qVziD1pppny0gMW09gY3ysLToUWq6Ma01H2/4mGCPYPo0LP09nxBClBVn\nht7FZgfWFzx2AeoDnYC+wESllF+pJ2k9XmudoLVOCAoKKvNChfP8tOUIHRd9CZ4WAhqdgsTBpfos\nP7ycDekbeKzZY7i7uF9kL0IIUTacGXppwPnzR0UAhy/S5zuttVVrvRdIpSgERSVgsztYMP4rYjP3\nENL4JOaWfSGoYYk+50Z54d7h9K7X26BKhRBVhTNDbw1QXylVWynlCtwDzL2gz7fATQBKqUCKDnfu\ncWJN4jqas3oft/wxB5O/O9XrFUCnV0v1+eXAL6RkpvBEsyewmC0GVCmEqEqcFnpaaxvwNPATsA2Y\npbXeqpR6SynV62y3n4BMpVQK8CvwstY601k1iesn32pn09ipRGRnUKPJEVSbR6FaRIk+doed0cmj\nifKN4pY6txhUqRCiKnHqIrJa6x+BHy/YNvi8+xoYePYmKpEvFm/ltuQfsNT0wrvW6YtOKr1g3wJ2\nndrF8I7DcTHJesZCCOeTTxpR5k7nWzk+bjy+hblERKej2r4EXgEl+lgdVj5J/oSG1RvSrVY3gyoV\nQlQ1Mg2ZKHOff7uK7qm/4dXYB/cavnDDU6X6fL/7ew6cOcDTzZ/GpOTPUAhxfcinjShTGWcKsH82\nCRelqVFnF7R/EdxLTilWaC/k042f0jSwKR0jOhpUqRCiKpLQE2Vq2ldL6bxvNX5N3bCEhkDLh0v1\nmb1jNkdyjvBM82dQ6mKXcwohhHPId3qizKSdzMUzaQq4mAiptQc6fQgWjxJ98mx5TNg8gYSQBNqE\ntTGoUiFEVSUjPVFmPvviFzoc3EBAUzMuNWpBXOmJo2dsn8HxvOMyyhNCGEJGeqJM7ErPJuTraWg3\nC8G19sFN4+GCi82zC7OZtGUSN4bfSHxIvDGFCiGqtMuO9JRSHyn5J7m4jM+nLeDGw5sJburAHNEI\nmtxRus+2z8kqyOKZuGcMqFAIIa7s8GY2MFcp5QWglOqmlFru3LJERbLlUBZ1v/8Cu4cbAbUOQuc3\nSi0Qm1WQxbSt00ismUjjwMYGVSqEqOoue3hTa/2GUqofsEQpVQDkABddBV1UTTMmf8+9x7YT2Eph\nrtUcGpWeUmzKlinkWHN4Kq70NXtCCHG9XDb0lFKJFC32mgOEAQ9rrVOdXZioGNbuzaTpgiQcXu4E\n1NwLnT8utUDs8bzjfLn9S3rU7kH96rKIhhDCOFdyePN14P+01p2AO4GZSqnOTq1KVAhaa+ZM+IbY\nzD2ENs3FVLct1C39pzFp8yQK7YU8GfekAVUKIcSfruTwZufz7m9WSvUA5gBtnVmYKP+W7cyg1a9f\n4fD1pHrkLug8pdQo72jOUWamzuT2erdTy7eWQZUKIUSRq75OT2t9BEh0Qi2iAtFaM2/cVzQ6eYAa\nTbMwNUiEWqX/HTRu0zg0msdiHzOgSiGEKOmaLk7XWueVdSGiYlm45Qjtl36Nru6FX3gGdH69VJ+D\npw/y7c5vuavBXdTwrmFAlUIIUZLMyCKumsOhWTx+JnVPH6ZGk+OomFshvEWpfmM3jsXF5MKjTR81\noEohhChNQk9ctXkb0+j8x7cQ6E21sFNw02ul+uw+tZt5e+bRt1FfgjyDDKhSCCFKk9ATV8Vmd7Di\n0y+omZ1OeONjqNg7IKT0xeZjksfgafHkoSYPGVClEEJcnISeuCrfrNlHtzXfo0J98AnLhk6vluqT\nkpnCwv0LuS/6Pqq7VzegSiGEuDgJPXHFCmx21o/7nLDcE4Q3SkM17wuB9Ur00Vozct1I/Nz8eKDx\nAwZVKoQQFyehJ67YVyt203PDfMwRvniHFULHf5fqs+LwClYdWcVjsY/h4+pjQJVCCHFpEnriiuRb\n7Wwf/xlvmIb0AAAgAElEQVSB+VnUaLgflfAg+NUs0cehHXy47kPCvcPp07CPMYUKIcRfkNATV+SL\nX7dzy6afsET54h2mocNLpfr8sOcHUk+m8mzzZ3E1uxpQpRBC/DUJPXFZ2QU2Dk6ail9hDuH19kCr\nR8EntESfAnsBH2/4mJiAGLrX7m5QpUII8dck9MRlff7zZnqmLMatri8eNVzhxhdK9ZmxfQZHco7w\nQosXMCn5sxJClE/y6ST+UlauleNTp+JjzaNGvV3Q5knwCijZpyCL8ZvGc2ONG2kT1sagSoUQ4vIu\nu8qCqNqmzN9Az9Tf8Gjog3tYLrR9ulSfSVsmcabwDC+0KD0CFEKI8kRGeuKSjmcXkD9tKh72QsLq\n7IZ2z4N7tRJ9juYc5YuUL7i1zq009G9oUKVCCHFlJPTEJU3+bi3ddy7FO9oTtxr+0GpAqT6jN4xG\no3m6eekRoBBClDcSeuKijmTlYfpyChYchNbZU3SJgqtXiT47Tu5g7u659GvUT5YOEkJUCBJ64qIm\nzf6DbntW4hfjimt4DWjxYKk+H637CG9Xbx6NlaWDhBAVg4SeKGXf8Rx8Zn2G2QTBdfYVTTfm4lai\nz5qja1h6aCmPNH2Eam7VLr4jIYQoZyT0RClTZvxG4oG1+DcxYYmsA836lmjXWjNy7UhCPEPo16if\nQVUKIcTVk9ATJaQePUPot9NRLiaCah+Em14Hc8krW37a/xNbMrfwdPOncXdxN6hSIYS4ehJ6ooTP\nvlhEh7RkAhs7cIlqAjH/KNFutVsZtX4U9avX57Y6txlUpRBCXBu5OF0USz54irrzvgQ3FwJrH4DE\nj8BU8t9FX+34ioNnDjImcQxmk9mgSoUQ4trISE8US5ryA22PbCGoSQHm+m2gXpcS7dmF2YzbNI6W\noS1pH97eoCqFEOLayUhPALBiZwYtF0zH4e1OYO29kDgFlCrRZ+rWqZzIP8Ho+NGoC9qEEKIikJGe\nQGvNvLEzaXxiHzViszA16gK12pboczzvONNSptGtVjeaBjU1qFIhhPh7JPQECzcd4qbfZ6EDvfGL\nyITEwaX6jE0ei9Vu5bn45wyoUAghyoaEXhVnd2j+GD2FiOwMIpocRcXeCWGxJfrszdrLnJ1zuLPB\nndT0rWlQpUII8fdJ6FVx81bupOvquZgiffEJy4XOr5fqM2r9KNzMbjze7HEDKhRCiLIjoVeFFdoc\nbB81juoF2URG70UlPAj+dUr0SU5PZtGBRTzY5EECPAIuviMhhKggJPSqsNk/J9N18yJcG/nhGWKG\nDq+UaNda8+G6DwlwD+CBmAcMqlIIIcqOhF4VlVNg48TYT3DVNiLrpkKbJ8EnpESfJQeXsD59PU/G\nPYmnxdOgSoUQouzIdXpV1IzZv9Np1x/4NvPBNTgHbny2RLvNYeOj9R8R5RtF7/q9DapSCCHKllNH\nekqp7kqpVKXULqXUoL/od6dSSiulEpxZjyiSmV2Ay+SxaIsLNaJSiw5rupdcHui7Xd+xJ2sPz8U/\nh8VkMahSIYQoW04LPaWUGRgD9ABigL5KqZiL9PMBngVWOasWUdKsyd/T6tAWguJNuIRGQMuHS7Tn\n2fL4JPkTmgU1I7FmokFVCiFE2XPmSK8VsEtrvUdrXQjMAG6/SL+3gfeBfCfWIs46eCKHsBkTKPT2\nJDhiL3QeXGqB2Okp00nPS2dgi4Ey3ZgQolJxZuiFAwfPe5x2dlsxpVRzIFJrPe+vdqSUGqCUWquU\nWpuRkVH2lVYh33w0nYYnDhARn4cpMhaa3FGi/WT+SSZvmUynyE7Eh8QbVKUQQjiHM0PvYkMEXdyo\nlAn4EHjxcjvSWo/XWidorROCgoLKsMSqZev+48T8MB1roC/+oYegy9BSSweN3zSeXFsuz8c/b1CV\nQgjhPM4MvTQg8rzHEcDh8x77AE2AJUqpfUAbYK6czOI8C98fR3jOcaLiMlD1E6HuTSXad5zcwYzt\nM+hdrzd1/eoaVKUQQjiPM0NvDVBfKVVbKeUK3APMPdeotc7SWgdqraO01lHASqCX1nqtE2uqspZv\n3E+bpd/gqFkdn4AT0HVoiXaHdvDWH2/h7eotk0oLISotp4We1toGPA38BGwDZmmttyql3lJK9XLW\n64rSHA7N+vdHUa0wh9oxe1Hx90JoyeWBvkr9io0ZG3ml5StUd69uUKVCCOFcTr04XWv9I/DjBdtK\nr1tTtL2TM2upyn78dRPtkhfi0tAPz6BTcNMbJdrTc9P5aP1HtA5rza11bjWoSiGEcD6ZhqySy7fa\nOfzRKCzaTq36qdD2WfANK9Fn2OphWB1WBrcZLJcoCCEqNQm9Sm7WrCW03fkHvrHuuIYGQttnSrQv\nObiEhfsX8ljsY7JWnhCi0pO5NyuxzOwCTBM/QbtaqFF7N3QeBW7exe251lzeXfUu9fzq8WDjB40r\nVAghrhMJvUosafy3JB5JIaCVwiUyBuLuLdH+8YaPOZpzlM97fI7FLPNrCiEqPwm9Smrn0dNEzpqE\nzcedwJp7oPtYMJmL27dmbuXL7V/Sp0Ef4oLjDKxUCCGuH/lOr5L69sNpNDh1kMimJzA1vgXqdCxu\nszlsDF0xFH93f55rIdfkCSGqDgm9SmjFtsO0WJgEgR5Uq5kD3d4u0f7Fti/YdmIbg1oNwtfV16Aq\nhRDi+pPQq2RsdgdLho8jLPcEkY3TUG0fh4A/pxQ7nH2YMclj6BjRkW61uhlYqRBCXH8SepXMV0u2\n0XntPFwj3fCu6wMdXi5u01rz7qp3AXi99etyTZ4QosqR0KtEsvKsHBjzKb6FuYTHHITOb5RYEf3n\n/T/ze9rvPB33NGHeYX+xJyGEqJwk9CqRCXP+4ObtS/Ct68A9pjHE/6u47XThaYatHka0fzT9ovsZ\nWKUQQhhHLlmoJHZnZOM2bSKu2AmJyYCen5e4ROF/6/7HifwTjEkcg4tJfu2icrBaraSlpZGfn290\nKeI6cXd3JyIiAovl2q4tlk+/SmLc5AU8cGANAdG5WNreDZGtits2pG9g1o5Z3B9zPzEBMQZWKUTZ\nSktLw8fHh6ioKPmOugrQWpOZmUlaWhq1a9e+pn3I4c1KYHHKUeK/n4rJzURgMwd0GVLcZrVbGbpi\nKGFeYTwd97RhNQrhDPn5+QQEBEjgVRFKKQICAv7WyF5Cr4LLt9r5ZcQEmh3fTWjsCcw3vwo+IcXt\nU7ZOYXfWbl5v/TqeFk8DKxXCOSTwqpa/+/uW0Kvgpn23mt6r5+AeBn6tI6HVo8Vt+0/vZ9zGcXSr\n1Y2OkR3/Yi9CiGtlNpuJi4srvg0bNqzM9p2cnMyPP/54+Y7iisl3ehXYwRM5uI8ZgQdWwuOPoW6d\nCGcnjtZa8/Yfb+NmdmNQq0EGVypE5eXh4UFycrJT9p2cnMzatWvp2bOnU/ZfFclIrwKb/f5kWh5J\nITQ2C9d2d0PUjcVt3+/5nlVHV/F8i+cJ8gwysEohqp6srCwaNmxIamoqAH379mXChAkAPPHEEyQk\nJNC4cWPefPPN4uesWbOGtm3b0qxZM1q1akVWVhaDBw9m5syZxMXFMXPmTEPeS2UjI70Kaumandzw\n42eYgy34NzGXmF/zZP5Jhq8ZTlxQHHc2uNPAKoW4foZ+v5WUw6fLdJ8xNXx587bGf9knLy+PuLg/\nVyp59dVXufvuuxk9ejQPPvggzz33HCdPnuTRR4u+enj33Xfx9/fHbreTmJjIpk2baNSoEXfffTcz\nZ86kZcuWnD59Gk9PT9566y3Wrl3L6NGjy/R9VWUSehVQvtXO3jffooUtl1otjqG6jQCvwOL2EWtH\nkF2YzeAbBmNSMpgXwpkudXiza9eufPXVVzz11FNs3LixePusWbMYP348NpuNI0eOkJKSglKKsLAw\nWrZsCYCvr0wE7ywSehXQ7I+TaLlnLdXjrLg1bg7xDxS3rTqyirm75/Jo00epX72+gVUKcX1dbkR2\nvTkcDrZt24aHhwcnTpwgIiKCvXv3MmLECNasWUP16tV58MEHyc/PR2stZ6FeJzIMqGB27z1K1LSP\nsfu7E9LgBNwyEkxFv8YCewFvr3ybmj41GRA7wOBKhajaPvzwQ6Kjo0lKSqJ///5YrVZOnz6Nl5cX\n1apV49ixY8yfPx+ARo0acfjwYdasWQPAmTNnsNls+Pj4cObMGSPfRqUjI70KRGvNyn8PIa7gDHXa\np6PaPwNhscXt4zeNZ//p/UzoNgF3F3cDKxWi6rjwO73u3bvTv39/Jk6cyOrVq/Hx8aFDhw688847\nDB06lObNm9O4cWPq1KnDjTcWnXzm6urKzJkzeeaZZ8jLy8PDw4NFixZx0003MWzYMOLi4oq/KxR/\nj9JaG13DVUlISNBr1641ugxD/Dx9HpHvvIx3E0Vke1d48g+weACw6+Qu7pp3Fz2ievBe+/cMrlSI\n62Pbtm1ER0cbXYa4zi72e1dKrdNaJ1zuuTLSqyAyj5/C9aNhFPi407DRXug1tzjw8m35vLbsNbwt\n3rzU8iWDKxVCiPJLQq+C+OWVt2mSnUnNxBOYWt4HtTsAZy9CX/k2205sY3Tn0fi7+xtcqRBClF9y\nIksFsPL734hZMR+3Rha8onxLXJM3K3UWc3fP5YlmT8hUY0IIcRky0ivncrJzyXl3CO6erjRqvA9u\n/Rw8qgOQnJ7MsDXDaB/ensebPW5soUIIUQHISK+c++nVYdQ4dZQ6LY9hbn4HRN8GwPG847y45EVC\nPUP5T/v/yEXoQghxBWSkV45t+m0t9RfNwVLHjG89b+g5HACrw8qLS17kdOFppvecTjW3agZXKoQQ\nFYOEXjmVl1fA4TfeIMzVTFSzA3DrdPAsOkll5NqRrE9fz7D2w2jo39DgSoUQouKQY2Ll1LzBI6mV\nsZ9aCcdxSbgTom8F4Ic9PzB923Tui76PW+rcYnCVQghRsUjolUPrV2yi/g9fYolUVGvkAz3eByD1\nRCpDVgwhPjiegQkDDa5SCHHO1S4k6+3tXeY1fPPNNyil2L59e/G2tLS0v70k0YIFC2jYsCH16tW7\n5Pvq378/wcHBNGnS5G+91vUgoVfO5BVYSXvtDVzMmlrxR1C9PwFPf7IKsnj+1+fxdfXlg04fYDFZ\njC5VCHHWuZUWzt0GDSq7hZu11jgcjsv2S0pKIiEhgRkzZhRvW7x4MevXr7/m17bb7Tz11FPMnz+f\nlJQUkpKSSElJKdXvwQcfZMGCBdf8OteThF458/XQ0dQ/upOI5sexdBoA9RJxaAevLn2Vo7lH+aDT\nBwR6BF5+R0IIQ+3bt6/EyGfEiBEMGTKkVL/p06fTqlUr4uLieOyxx7Db7ezbt4/o6GiefPJJ4uPj\nOXjw4F++VnZ2Nr/99huTJk0iKSkJgGXLljFw4EBmz55NXFwce/fuver3sHr1aurVq0edOnVwdXXl\nnnvu4bvvvivVr0OHDvj7V4yJMeRElnLkjz+20mjuVNxCHVRrVRO6DAHg042fsvTQUt5o/QZxwXF/\nuQ8hqqz5g+Do5rLdZ2hT6PHXhyrh4gvJtm7d+rLP27ZtGzNnzmT58uVYLBaefPJJvvjiCzp06EBq\naipTpkzhk08+uex+vv32W7p06UJsbCxeXl6sX7+edu3a0bJlS0aMGFHqsGP79u0vunrDiBEj6NKl\nS/HjQ4cOERkZWfw4IiKCVatWXbae8kxCr5w4mVPAgdcH01RbCW91EnXHLLB48NvB3xi7cSy3172d\nPg37GF2mEOIiLraQ7L59+y77vMWLF7Nu3brixWPz8vIIDg6mQ4cO1KpVizZt2lzR6yclJTFgQNFy\nYn369CEpKYn4+HhSU1Np2LD0Gd5Lly69ov1ebEGCir7un4ReOaC1Ztpbn9LtcAohzbNw6/UahDXj\nwOkDvLr0VaL9o3mjzRsV/o9NCKe6ghHZ9eTi4lLiu7j8/PxSfbTWPPDAA/znP/8psX3fvn14eXld\n0etkZmayevVqvv76awDuvvtuOnbsyKBBg6hWrRoWS+nv/690pBcREVHi0GpaWho1atS4orrKKwm9\ncuCbXzZz449TcQ+0Ur17a2j7LLnWXJ779TlMJhMf3vShrI8nRAUTEhJCeno6mZmZeHt7M2/ePLp3\n716iT2JiIrfffjsvvPACwcHBnDhx4pKLxiYmJjJt2jTCw8NLbJ89ezY9e/bEzc0NgNq1axMaGkpK\nSsolA+pKR3otW7Zk586d7N27l/DwcGbMmMGXX355Rc8tr+REFoPtz8zh9LB38LLnE9bRjLpjPFop\nhqwYwp6sPbzf4X3CvcMvvyMhhGHOfad37jZo0CAsFguDBw+mdevW3HrrrTRq1KjU82JiYnjnnXfo\n1q0bsbGxdO3alSNHjpTq53A42LVr10VPFklKSuL7778nKiqq+LZt2zYmT57M8ePHadKkCStWrLim\n9+Xi4sLo0aO5+eabiY6Opk+fPjRu3BiAnj17cvjwYQD69u3LDTfcQGpqKhEREUyaNOmaXu96kEVk\nDVRgs/POwP/R7+cJBDY9Q9B/v4A6HZm2dRrD1w7nufjneKTpI0aXKUS5VVUWkd2yZQuTJ09m5MiR\nRpdSLvydRWRlpGeg8Z/Opc+iSXgEFhL42ONQpyNrjq5h5LqRJNZM5OEmDxtdohCiHGjSpIkEXhmR\n0DPIol+TaT3hbdw9rUT0a4C6aRBHc47y0m8vEekTyTs3viMnrgghRBmTE1kMcODAMRj0HL6OXCJ7\nmHD51zQKcfDikhfJt+Uz5eYpeLuW/TRFQghR1UnoXWcFeQVsePhJ6p9OJ+KmLNwHzAXvIIb98Rab\njm9iZKeR1PGrY3SZQghRKcnhzetIa81Pj79Eg4Mp1Eg4hfdDb0NkS77Z+Q1f7fiK/k3607VWV6PL\nFEKISsupoaeU6q6USlVK7VJKlZqBVSk1UCmVopTapJRarJSq5cx6jPbr2x9Rf9UiAqLP4PfP2yHh\nYZLTk3ln5Tu0CWvDM82fMbpEIYSo1JwWekopMzAG6AHEAH2VUjEXdNsAJGitY4HZwPvOqsdoW2Z+\nT8iX4/GMLCSwe3249UPWHFvLYwsfI8QrhPc7vI+LSY42CyGEMzlzpNcK2KW13qO1LgRmALef30Fr\n/avWOvfsw5VAhBPrMcyxtcnY334di7+D8EQXTP2SWJ6+nicWPUGoVyhTu0+lunt1o8sUQohKz5mh\nFw6cvx5G2tltl/IwMP9iDUqpAUqptUqptRkZGWVYovPlph1m/2OP4+JqI6rTKVzuT+KXkyk888sz\n1K5WmyndpxDsGWx0mUIIUSU4M/QudpHZRad/UUrdByQAwy/WrrUer7VO0FonBAUFlWGJzmXLzmbD\nff3xLDhN3Q7HcO33CfMLjzFwyUCi/aOZ2G0i/u4VYw0qIcSlVfWV06OiomjatClxcXEkJFx2UhRD\nOfNLpDQg8rzHEcDhCzsppboArwMdtdYFTqznutJ2O6seehK/Y/up1SET93+8wjduJt78/d/Eh8Qz\nJnEMXpYrm0VdCFG+XWxpobKitUZrjcn012OU81dOP7dY7eLFi0lJSeHuu+++ptc+t3L6woULiYiI\noGXLlvTq1YuYmAtPz4Bff/2VwMDyv8C1M0d6a4D6SqnaSilX4B5g7vkdlFLNgXFAL611uhNrue7W\nvvIm/pvXUCP+FF49+5AUUpPBKwZzQ40bGNtlrASeEJVcVVo5vSJx2khPa21TSj0N/ASYgcla661K\nqbeAtVrruRQdzvQGvjo75dYBrXUvZ9V0vWwdMxHvH+bg1yAH35vbMKV2Mz5c/R6dIjvxQccPcDW7\nGl2iEJXOf1f/l+0ntl++41Vo5N+If7f692X7VfWV05VSdOvWDaUUjz32WPGCtuWRU8+R11r/CPx4\nwbbB593vUupJFdye73+G0SPxqFGIf7cIxsV0YOyGUXSP6s577d/DYiq9oKMQomKr6iunL1++nBo1\napCenk7Xrl1p1KgRHTp0uKLXuN7kwrAydGzDZs68+jJefjZCb/ZgdHx3pm6dzD/q/YMhNwzBbDIb\nXaIQldaVjMiup6q0cvq5bcHBwfTu3ZvVq1eX29CTacjKyOlDR9j36KO4WfIJ7QYj2tzC1J1fcU/D\nexjadqgEnhBVzPkrpxcUFDBv3rxSfRITE5k9ezbp6UWnNJw4cYL9+/dfdH+JiYkcOnSo1PZrXTk9\nOTm51O38wIOSK6cXFhYyY8YMevUq+Q1UTk5OcYDm5OTw888/lzqcWp7ISK8M5J0+w4Z+DxCcd4rQ\n7gUMa38b3+37kYcaP8QLLV6QJYKEqOQu/E6ve/fuDBs2rHjl9Nq1a1925XSHw4HFYmHMmDGEhoaW\n6He5ldM3bdpEVFRU8bbMzMwSK6ePHz+etm3bXvX7On/ldLvdTv/+/UusnD5x4kTy8/Pp3bs3ADab\njX79+tG9e/erfq3rRVZO/5usVhuL7+hHrR2bCOqYy397d2PBsVU82exJHm/2uASeEE4kK6dXTX9n\n5XQZ6f0Ndodm7qPPE7NjM34t8nnrtg78emwVA1sM5KEmDxldnhCikpCV08uOhN41cjg0M//9Ds1X\nLsazQQFD+rRiReZGXmv9Gn0b9TW6PCGEEBchoXcNHA7NjH+/TfN5X+IaZmPIA81Yd2o7b7V9i971\nextdnhBCiEuQ0LtKtkIrCx55kuarl2EJs/H2ow1JztnLsPbD6Fmnp9HlCSGE+AsSeleh4FQWK/ve\nR929uzBF23i9XwN25h/hg04fkFgz0ejyhBBCXIaE3hXK3rOXbffdT/DJ4xzoAIM7+KGsJxjVeRTt\nwtsZXZ4QQogrIKF3BY7/vpzDzzyJj85nzp0WZtRTtAhszHvt3qOG98Uv/hRCCFH+SOhdxsGpn3P6\nv/9BVbPx2t1u7Au08GLzZ7k/5n6ZZUUIISoYCb1L0DYbOwcPxf71bI7VsjPoDlciQuqR1H4YDf1L\nT+AqhBCi/JPQuwh7VhYpA57AZeMGliRoPk105YEmD/F0/DOyLJAQQlRgMuH0BQr27mXLbb0wbd7A\nuB6KOd39mdhjCgNbviiBJ4S4KKUU999/f/Fjm81GUFAQt956K8Al570cMmQII0aMuObXvdx8mqdO\nnbqi9fjO+eabb1BKsX17yXUJ09LSmDlz5jXVCLBgwQIaNmxIvXr1GDZs2CX7RUVF0bRpU+Li4khI\nuOyMYtdEQu88p5ctJ7X3P7CeOcaQfmbcurbjmz4/0TK0pdGlCSHKMS8vL7Zs2UJeXh4ACxcuJDw8\nvLh9xYoVTnndy+33akMvKSmJhIQEZsyYUWL74sWLWb9+/TXVaLfbeeqpp5g/fz4pKSkkJSWRkpJy\nyf6//vorycnJOGuOZTm8edbBiZM5/cFwjgbAmDtceOLm/6N7zN1GlyWEuEJH33uPgm1lu3K6W3Qj\nQl977Yr69ujRgx9++IE777yTpKQk+vbtW7xYq7e3N9nZ2QC8++67TJs2jcjISIKCgmjRogX79u2j\ne/futG7dmg0bNtCgQQOmTZuGp6cnACNHjmTy5MkAPPLIIzz//PPF+92yZQs9evSgXbt2rFixgvDw\ncL777js8PDwYNGgQu3fvJi4ujq5duzJ8+PBL1p+dnc1vv/3GwoULueuuuxgyZAgAy5YtY+DAgfj5\n+fHTTz/xzTffULt27Sv+b7h69Wrq1atHnTp1ALjnnnv47rvviImJueJ9lKUqP9LTVisbnnmc7BHD\nWV9XMev+ACY+8pMEnhDiqtxzzz3MmDGD/Px8Nm3aROvWrUv1WbduHTNmzGDDhg18/fXXrFmzprgt\nNTWVAQMGsGnTJnx9fYtHaOvWrWPKlCmsWrWKlStXMmHCBDZs2FBivzt37uSpp55i69at+Pn5MWfO\nHACGDRtG3bp1SU5O/svAA/j222/p0qULsbGxeHl5FY/s2rVrR8uWLfnuu+9ITk4uEXjt27cnLi6u\n1G3RokXFfQ4dOkRkZGTx44iIiIuuCwhFh4m7detGixYtGD9+/F/We62q9EjPdvIkf9zbi8A9x5nX\nWuF9Z08m3DpclgMSogK60hGZs8TGxrJv3z6SkpLo2fPiUxIuXbqU3r17F4/gzl+QNTIykhtvvBGA\n++67j1GjRvHSSy+xbNkyevfuXbyS+j//+U+WLl1K8+bNi59bu3bt4vX8zo0cr1ZSUhIDBgwAoE+f\nPiQlJREfHw8UBXLDhqXPWj83kv0rF1u+7lKfscuXL6dGjRqkp6fTtWtXGjVqVOYrsFfZkd6+1UtZ\n3aMd1fYfZ3Z3M91f/4QnbhshgSeEuGa9evXipZdeom/fS6+0cqnPmAu3n3t8JWuenls1HcBsNmOz\n2a6k3GKZmZmsXr26ePHXu+++m5kzZ6K1JjMzk2rVqmGxWEo970pGehERERw8eLD4cVpa2iVXdD+3\nPTg4+P/bu//Yqu46jOPvRwqpQxaFbeK4y1qTOTouPwNlSiGLRZmFiIQIumhARBPij2oUnS5B/zEx\nxhg1GBMzq00cEFNXXJcFMXOJkBDQbSR2dhOyYldhUMBpU0i6hY9/3EsDg+vKj3LO5fu8kqb3nvvr\n6be3fe753nPPYdWqVRw4cOCKfo7RSLL0nvrpZk597vO8bfgczzx0N9/8wX5mvu+BrGOZWZXbsGED\nW7ZsYebMmZe9fMmSJXR2dnL27FkGBwfp6uoauayvr499+/YBpbWupqamkdvs3LmTM2fOMDQ0RGdn\nJ4sXLx5VnkmTJjE4OHjRsubm5kumFzs6OmhpaRkpz/r6eqZOncrevXvp7e2tWFJ79uzh4MGDl3wt\nXbp05DoLFizg0KFD9Pb2Mjw8zI4dOy5awz1vaGhoJOvQ0BC7d++mWCyO6ue8EsmV3qt9/+COtif5\n960w+N1NtD6yiwkTJmYdy8xuAoVCgdbW1oqXz5s3j7Vr1zJnzhxWr159UXk1NDTQ3t7OrFmzOH36\nNJs2bRq5zfr162lsbGThwoVs3LjxoqnN/2fKlCksWrSIYrHI5s2bOXfuHIcPH2by5MkXXW/79u10\ndeZU12kAAAUwSURBVHVRV1c38tXT08O2bduYPn06J0+epFgsXtVWqDU1NWzdupVly5bR0NDAmjVr\nmDFjxsjlLS0tHD16lOPHj9PU1MTs2bNpbGxk+fLlI2ue15NGs+qcJ/Pnz49r3ZR1d/v3mPuhh7j9\nztFvgWRm+dPT00NDQ0PWMa7ZkSNHWLFiBd3d3WP6ON3d3bS1tVX9Udgv93uX9GxEvOWH+5LckOXD\n6x7JOoKZ2Q1XLBarvvCuVXLTm2ZmeVNXVzfma3lW4tIzM7NkuPTMzCwZLj0zq2rVtjGeXZtr/X27\n9MysatXW1nLq1CkXXyLOf1i+trb2qu8jya03zezmUCgU6O/vZ2BgIOsodoPU1tZSKBSu+vYuPTOr\nWuPHj7+iPf6beXrTzMyS4dIzM7NkuPTMzCwZVbfvTUkDwD+vw13dBpy8DvdzM/LYVOaxqcxjU5nH\nprLrNTZ3R8Ttb3Wlqiu960XSX0ezc9IUeWwq89hU5rGpzGNT2Y0eG09vmplZMlx6ZmaWjJRL7xdZ\nB8gxj01lHpvKPDaVeWwqu6Fjk+x7emZmlp6U1/TMzCwxLj0zM0tGcqUn6UFJL0k6LOnhrPPkhaS7\nJD0jqUfSC5Jas86UN5LGSXpe0pNZZ8kTSe+U1CHpxfLz5/1ZZ8oLSV8t/z11S9ou6eoPD3ATkNQm\n6YSk7guWTZb0R0mHyt/fNZYZkio9SeOAnwEfAe4DPinpvmxT5cYbwNciogG4H/iCx+YSrUBP1iFy\n6CfAroiYDszGYwSApGnAl4H5EVEExgGfyDZV5n4NPPimZQ8DT0fEPcDT5fNjJqnSAxqBwxHxckQM\nAzuAlRlnyoWIOBYRz5VPD1L6xzUt21T5IakALAcezTpLnki6FVgC/BIgIoYj4rVsU+VKDfB2STXA\nLcDRjPNkKiL+DJx+0+KVQHv5dDvwsbHMkFrpTQNeueB8P/7HfglJdcBcYH+2SXLlx8A3gHNZB8mZ\n9wIDwK/KU7+PSpqYdag8iIh/AT8E+oBjwH8iYne2qXLp3RFxDEovvoE7xvLBUis9XWaZP7NxAUnv\nAH4HfCUi/pt1njyQtAI4ERHPZp0lh2qAecDPI2IuMMQYT09Vi/J7UyuBeuBOYKKkT2WbylIrvX7g\nrgvOF0h8uuFCksZTKrzHIuLxrPPkyCLgo5KOUJoS/6Ck32QbKTf6gf6IOD8r0EGpBA2WAr0RMRAR\nrwOPAx/IOFMeHZf0HoDy9xNj+WCpld5fgHsk1UuaQOlN5ScyzpQLkkTpfZmeiPhR1nnyJCK+FRGF\niKij9Jz5U0T4FTsQEa8Cr0i6t7yoGfh7hpHypA+4X9It5b+vZryRz+U8Aawrn14H/H4sH6xmLO88\nbyLiDUlfBP5AaUuqtoh4IeNYebEI+DTwN0kHy8u+HRFPZZjJqsOXgMfKLyRfBj6TcZ5ciIj9kjqA\n5yhtHf08ie+OTNJ24AHgNkn9wHeA7wO/lfRZSi8UPj6mGbwbMjMzS0Vq05tmZpYwl56ZmSXDpWdm\nZslw6ZmZWTJcemZmlgyXnpmZJcOlZ2ZmyXDpmVUhSQVJa7POYVZtXHpm1akZ7+PS7Ip5jyxmVUZS\nE6X9E74GDAKrIqI321Rm1cGlZ1aFJO0Cvh4R3VlnMasmnt40q073Ai9lHcKs2rj0zKqMpCmUjsL9\netZZzKqNS8+s+tTjgx+bXRWXnln1eZHS8ci6JflI3GZXwBuymJlZMrymZ2ZmyXDpmZlZMlx6ZmaW\nDJeemZklw6VnZmbJcOmZmVkyXHpmZpaM/wHO8JGq8PP77wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We'll keep dt at 0.5, but use a higher order method\n", "t2 = np.arange(21)*dt\n", "x2 = np.zeros(21)\n", "x2[0] = x0\n", "for i in range(20):\n", " # Advance half a step\n", " xmid = x2[i] + (dt/2)*dxdt(x2[i])\n", " # Now advance whole step using derivative evaluated at halfway point\n", " x2[i+1] = x2[i] + dt*dxdt(xmid)\n", " \n", "# Now plot the solution we've gotten\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label=r'Euler, $\\Delta t = 0.1$')\n", "plt.plot(t1, x1, label=r'Euler, $\\Delta t = 0.5$')\n", "plt.plot(t2, x2, label=r'Midpoint, $\\Delta t = 0.5$')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As the plot shows, even though we used a big time step, $\\Delta t = 0.5$, the midpoint method produced a solution whose accuracy is about as good as the Euler method using $\\Delta t = 0.1$. We can understand why the midpoint method is more accurate if we go back to thinking about Taylor expansions. The exact solution at $t=\\Delta t$ is given by\n", "\\begin{equation*}\n", "x(\\Delta t) = x_0 + \\Delta t\\left(\\frac{dx}{dt}\\right)_{t_0} + \\frac{\\Delta t^2}{2}\\left(\\frac{d^2x}{dt^2}\\right)_{t_0} + O(\\Delta t^3).\n", "\\end{equation*}\n", "To see why it is useful to evaluate the derivative at the midpoint, $t=\\Delta t/2$, rather than $t=0$, let us Taylor expand the derivative term:\n", "\\begin{equation*}\n", "\\left(\\frac{dx}{dt}\\right)_{t_{1/2}} = \\left(\\frac{dx}{dt}\\right)_{t_0} + \\frac{\\Delta t}{2}\\left(\\frac{d^2x}{dt^2}\\right)_{t_0} + O(\\Delta t^2).\n", "\\end{equation*}\n", "If we solve this for $(dx/dt)_{t_0}$ and substitute back into the first equation, we have\n", "\\begin{equation*}\n", "x(\\Delta t) = x_0 + \\Delta t\\left(\\frac{dx}{dt}\\right)_{t_{1/2}} + O(\\Delta t^3).\n", "\\end{equation*}\n", "The $\\Delta t^2$ term cancels completely! Thus by using the derivative evaluated at the midpoint, we analytically cancel out the second order error term, leaving only a third order term. (We've glossed over something a little here, because we didn't use the true derivative at the midpoint, we used the derivative evaluated at our numerical estimate of the midpoint; however, one can show that this does not introduce any additional error up to order $\\Delta t^3$.) This shows that the midpoint method is second order accurate, meaning that the error involved in integrating forward a fixed amount of time scales as the square of $\\Delta t$, rather than linearly in it.\n", "\n", "The price for this is that we required twice as many evaluations of $dx/dt$ for each step as for the simple forward Euler method. However, this price is generally worth it for the faster reduction in error. A useful way of thinking about this is that we want to \"buy\" a solution at a certain level of accuracy by spending as few CPU cycles as possible, where the cost in CPU cycles is roughly proportional to the cost of evaluating the function $dx/dt$. Suppose that the simple Euler method produces an error $e_0$ for a calculation with $n_0$ steps. In this case the formula for the error as a function of the number of evaluations, which is equal to the number of steps, is\n", "\\begin{equation}\n", "e(n) = e_0 \\frac{n_0}{n}.\n", "\\end{equation}\n", "For the midpoint method, which requires $2n_0$ function evaluations per step, the corresponding error versus $n$ is\n", "\\begin{equation}\n", "e_m(n) = e_{0,m} \\left(\\frac{2 n_0}{n}\\right)^2.\n", "\\end{equation}\n", "Which method requires a lower value of $n$ to produce a certain error will depend on the normalisation constants $e_0$ and $e_{0,m}$. However, it is clear that in the limit of large $n$, the midpoint method will eventually be better. In practice, we are usually in that large $n$ limit.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Higher Order Differencing Methods: Runge-Kutta\n", "\n", "One can generalise the midpoint method by picking additional points spaced about the interval $\\Delta t$, strategically chosen to cancel out additional terms in the Taylor expansion. Methods of this type are generally called Runge-Kutta methods, and are characterised by the number of midpoints, which correlates with the number of terms in the Taylor expansion that can be cancelled. A particularly famous example is the fourth-order Runge-Kutta method, which has four points in the interval:\n", "\\begin{eqnarray*}\n", "k_1 & = & \\left(\\frac{dx}{dt}\\right)_{t_i,\\, x_i} \\\\\n", "k_2 & = & \\left(\\frac{dx}{dt}\\right)_{t_{i+1/2},\\, x_i+\\Delta t k_1/2} \\\\\n", "k_3 & = & \\left(\\frac{dx}{dt}\\right)_{t_{i+1/2},\\, x_i+\\Delta t k_2/2} \\\\\n", "k_4 & = & \\left(\\frac{dx}{dt}\\right)_{t_{i+1}, \\, x_i+\\Delta t k_3} \\\\\n", "x_{i+1} & = & x_i + \\frac{\\Delta t}{6} \\left(k_1 + 2 k_2 + 2 k_3 + k_4\\right) \\\\\n", "\\end{eqnarray*}\n", "One can show that this cancels all error terms up to the 5th, and thus the error diminishes as $\\Delta t^4$. We can implement this easily:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAFCCAYAAABl6gOIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VFX6x/HPmZJeIIEQSAIBAiQQQgihSJMuYlvWXRB/\n7uqi4trr7mJZ7LusIigCKigqloCCSJGOIk1IKKElhF4CgYQkpJcp5/dHMBISqhkm5Xm/XvPKzD1P\n7nxHYp6cO3PvUVprhBBCiPrA4OwAQgghxPUiTU8IIUS9IU1PCCFEvSFNTwghRL0hTU8IIUS9IU1P\nCCFEvSFNTwghRL0hTU8IIUS9IU1PCCFEvWFydoCr1ahRIx0aGursGEIIIWqQrVu3ntFaN75cXa1r\neqGhoWzZssXZMYQQQtQgSqmjV1InhzeFEELUG9L0hBBC1BvS9IQQQtQb0vSEEELUG9L0hBBC1BvS\n9IQQQtQb0vSEEELUGw5rekqpmUqpdKXU7ouMK6XUZKXUAaXUTqVUjKOyCCGEEODYmd5nwNBLjN8M\ntDl3GwN84MAsQgghhOOuyKK1XquUCr1EyR3ALK21BjYppRoopZpqrdMclUkIIX4Pu7Zjs9uwaRt2\nbceqrdjtdmz6t202batYY7ei0WitsWNH6wvuo7HrC+5XsQ2tsdutoO1ouw2tbWhth3PPY7fZsNns\n2K027HY7Vpsdu92Otmq03Y7drrHbbGirDW3TZTe7HW21l+3TpsFuB7sGW1m9smu0XZ/bVpZbaQU2\n+7n7Gm0HNGX3tQKtQVP2FcAOUFantAatztWCQuEb6MedDz1z3f4NnXkZsiDg+HmPU89tq9T0lFJj\nKJsN0rx58+sSTghR82itKbIWUWgtpMBSQL4ln0JL2f1fb4WWQoqsRZTaSym1lWKxW8q/WmwWSu2/\nbSu1lWK1Wyi1lWCxlZ77eq7GYkPZjGAzgN2Aspsw2k2Yzn11sZpxtZpwtZpwsZhxsZpwsZkw28yY\nbSbMNhMmmwmT3YxRGzHYjRgwYtBGlDZg0AaUNqIwlt2n7D7aiKLsMRgBA6hf7ytQBjSG8u0aV1CG\nslstpA9th4eu3/M5s+mpKrbpqgq11tOB6QCxsbFV1gghag+tNWdLzpJemE5GUQYZhRnlX/Mt+eXN\nq8BSQIH1t2ZWaC0sm/VchMFuxM3qiZvFE1e7G+42d9ysrrhbXfAqccOjxAUfiztuFl9crK6YbS4Y\n7a4Y7G4YcAXthlZuaOWKVubf+SLtGOzWspu2ouw2lC67GbQdpW2gbShtR1H2WGEBzj3GXn6//KsC\nlEaVTaVQ5x6XTbX47fF595UCDOq8bZT1S6XOPVbl45zbpgzq3H2FMij0uW2qvPa3sbL9nvtqMJz7\nzf5r7XnbVBXfr8AnqM3v++98lZzZ9FKBkPMeBwMnnZRFCFENfm1mvzaw9MJ0zhSd+a25ndfgrHZr\npe/3NnvhY3LHU5lx1wa8S800KXbFs8gb9xIX3EpccC92wa3IHXOJB8rqjd3ujVX7YMULq8HjshmV\n3YbRVozRVoLJVlJ231qM0Z6HUVswYMWgbBiMNgznJlkGkwGD2YDRbMLoasboasbk5orZwxWTuysu\n7mbcPN1w8XDF1csNd293jO7uGN1cUW5uKBdXlNmEMptRprKvGI1lTUBcV85seguBx5RSs4HuQI68\nnydE7WC1WzmUc4i9WXtJzkxmb9ZeTuafJKMoA4vdUqnex8WHADc/Gpk8iXUNwM/QGO988M424ZHn\ngmu+G8ZCLwosARTZfSnWPpQob+wXmW2V2i3o0nzMljzMlgI8LUcx2QoxKgsms8bkbsTk7oKLpwtu\nXm54+Ljj2cATTz9PTN5emLwbYfDywuDphcHLE6OXF8rdXZpQPeCwpqeUigP6AY2UUqnAy4AZQGv9\nIbAEGAYcAAqBvzkqixDi2hVbi9mfvZ/krGSSs5LZm7mXfdn7KLWXAuBmdKOtX1u6NImhsdGDAJsN\nv+ICPLJycUsvwjXTgi4yUlDqR46lKTnWJuTrACzKg2wg+9zzmEvzcCvOxLU0lwaWk5gt+RiVBbMZ\nXD2NePi44d3IC+8Ab9wa+WFu7I/RrxWmRv4Y/fwxeHpI0xKX5chPb466zLgGHnXU8wshrl5eaV6F\n2VtyVjKHcw5j0zYAvF28ifALZ1Sr2wjHlbDCItyOZJOdUEpxXi4FFhNnLYGcsnWgUPlX2LfBVopb\ncSbuxWdoUnQEt9Js3Nzt+DT2wL+5H14tQzCHtMLcpAlGP39Mfg3LDgMKUY1q3SKyQojqobVm95nd\nbErbVDaLy0wmNT+1fDzAPYBwv3AGBHQhwgqh2WdwP3qUgj0ZnC0ycaq0DetLYyhRPud2aMe1JAf3\n4jP4FO2jSXEmbrZcvHxNNGzqjU/rJrg0b45Li+64hIRgCgxEGY1OevWivpKmJ0Q9cyz3GD8c+oHF\nhxZzLO8YACHeIUT4R3Bn69sJtxsJyz6N8cBO8nenkFOUy+nSMDaUdCef28t2ou14FqThl7cLn7xj\n+HhZCWjdCM8OIZibN8eleVdcmjfH6O8vhxxFjSJNT4h6IKs4i+VHlrP40GJ2ZuxEoegW2I0H2t/L\nAOWFy5EtnNqyh4KM42SUtmJNSVuybD3Qqmwm5lqchW/uEQLzNuBrz6JJGz+8e0fi3mkQbh07YvTy\ncvIrFOLKSNMToo4qshax5vgaFh9azMYTG7FqK20btuWZ8L8wpNiObUcSaSt/ZHVJBzIssVjpDYDR\nWohv7hFa5K7Ap+A4jZu60iCqLe6dOuEePRJzcLDM3kStJU1PiDrEZrcRfyqexYcWs+roKgqthTTx\naMJfgwcwMKcQ/517STubwtqiXmTZuoG24513nMDcX/DJPUoDtwIaRTTHo1cn3DvdjVv7CAxubs5+\nWUJUG2l6QtRyWmv2Zu1l8aHFLD28lIyiDLzMXgz178SAs4W03ZPCifxs9hT1Jsv2ZwB8cw7SJv0b\nmpozCBjQA/fOfXGP6oS5SYCTX40QjiVNT4ha6mT+SZYcXsLig4s5mHMQk8FE30bRDFDN6Jy0n4w8\nC/uK+rPbNhoAn5xDtEn/lqbGNJoM6Y33zY/j1r69HKoU9Yo0PSFqmZySHCZunch3+78DIKZRR55v\n1JuY3Qco3GFnf9GNLPq10eUeISx9Ls10KgGDeuIz7O+4RUVJoxP1ljQ9IWoJrTVLDi/hrYS3yCnJ\n4a8hN9H/YB6ssXCoKJrV1rJDl955Rwk7/R2BtiM06d8dn2fvx71z57IL/wpRz0nTE6IWSM1L5Y1N\nb7Dh5AY6uDfjX0fbURAfxmZrWwC88o+VNbqSgwT064bP4/fg0bWrnPwtxAWk6QlRg1nsFr5I+oIP\nEqehbDYePx6Od9rNHLaF4lGYRuu0+TQp3EeTG2PxeeguPHt0l0t3CXEJ0vSEqKF2ZezilQ3j2Jdz\ngKHpLYk5djNZlnYUFmXQ/vBMWndsSMO//RGvXr1QLi7OjitErSBNT4gapsBSwOQtE4nb9w1tzobw\nzOEHKSyOJL/0LOGHv6J1WzOBH76AW/v2zo4qRK0jTU+IGmT1kRW8sX4cOseH0Yfvw5zfGYslnzZH\n5xIWWEjgO0/gERPj7JhC1FrS9ISoAU4XnObVFU+w83QG/Y8OJzCrC0Z7CS2OLiTM5zRNX3kMz149\n5VQDIX4naXpCOJHNbuPLhMl8mjifqNTBjMrogcFuI+T4StqYD9L0Hw/hPWiQNDshqok0PSGcJOX0\nDl5e9E98U7vzp1MvYrArgk6uJcy2m+BHRuMz7D9yyoEQ1UyanhDXWZG1iHcWv8SRnSZ6pj2F0W6i\n6alNhOUnEDLmHhr8cZycdiCEg0jTE+I62pe6i3c/+5y2J/vT2e5BwOkthGWto/nf7qThqH9icHV1\ndkQh6jRpekJcJz+t/Jr1S/PoUDgM/zO7aH16NS3vvpmGf5mN0cvT2fGEqBek6QnhYMVFBSyZ9ipH\nD/XA3+JHu/2z6HhrFP73z8LYoIGz4wlRr0jTE8KBDiZvZ8/nMzh5djg+RVlEnphB1Hsv4x4V5exo\nQtRL0vSEcACtNT/P/Yis9emklfyJRmd2EeG+hQ7ffoypYUNnxxOi3pKmJ0Q1O5ubS/zUf3L6eDdy\nbT1peWQRzW/0pMO/PpNTEIRwMml6QlSjvfv3cXrm6xzOHoG2Qvj+Dwh4+lYi//A3Z0cTQiBNT4hq\ns3LFEgzLVrC38G945R3D//RM/N99kY6db3J2NCHEOdL0hPidLDY7cz+ZjPtOGyestxOY9gtnXOfR\nbOY0opv3cHY8IcR5pOkJ8TucLSjhh3ffwHq8A9l2P8IOxrE6KoER/5xBTNOuzo4nhLiAND0hrtGh\n02eJn/Q2edl9MJUW0OboZGYMPck//jqD2EBpeELURNL0hLgGm/cc5dCMOWQVD6TB2RQ8Smbz5l35\njL9tGl2l4QlRY0nTE+IqLV2XTHrcZvLtsTQ/toLjoZuY1D2PyYOm0KOpvIcnRE0mTU+Iq/D1t1vI\nX3UCuz2AyEOfseKmdJY2zWXygMn0DOrp7HhCiMuQpifEFdBaM+P9tVj2WPAozCf67Pd89Fcr8YZ0\n3u3/Lr2Dejs7ohDiCkjTE+IytNZMm/wTJEPjMzuIaZLE63ea2Jl3gEn9JtE3uK+zIwohrpA0PSEu\nQWvNex/+jDnJjn/WHnr1yeNfbYrZk7mXd/q9Q7+Qfs6OKIS4CtL0hLgIu13zzsdr8UosxivvBD2j\n03m+3XF2Z+xhwo0TGNB8gLMjCiGukjQ9IaqgtebtWetpsCUXl+J8ejfbxWtd8tiZvpO3+r7FoBaD\nnB1RCHENDM4OIERNo7Xmnblb8N+YjsFipafrz/z4l0g2n47n5RteZkjoEGdHFEJcI2l6Qlxg8uLd\nNFy1H6vdje5Fi9CvP8aUnVMZ3GIwfwj7g7PjCSF+Bzm8KcR5Pli9D68ftlCig4jN+Jo2s97h7jUP\n0MC1AeN6jEMp5eyIQojfQZqeEOfM2XwU47yfKKYNUalxdP7sLSbv/4wDZw8wbeA0Grg1cHZEIcTv\nJIc3hQBWJ58i7cslWOxtaHvse7pNeYFE+1E+3/M5I9qOoE9wH2dHFEJUA2l6ot7bfiybdR8twmxp\nR/MTP9L7v/djCW7MS+tfIsQ7hGdjn3V2RCFENZHDm6JeO5SRz+fvL6ZNcWuapCfQ76l+uHfqxEvr\nX+JU4Slm3TwLD7OHs2MKIaqJzPREvZVdUMr/3l9B29xAGmbvZcCfm+E9cBCrj65mwcEFPNDxATo1\n7uTsmEKIaiRNT9RLpVY7Yz9cT/QpdzzzTzKgWx5+o/7CmaIzvPrLq0T4RfD3Tn93dkwhRDVzaNNT\nSg1VSqUopQ4opcZWMd5cKfWTUmq7UmqnUmqYI/MIAWUnn7/6VSKdU/JxKcnjxqbbaPLMP9Fa88rG\nVyi0FvLfPv/FbDA7O6oQopo5rOkppYzAVOBmoD0wSinV/oKyl4BvtNadgbuAaY7KI8SvZqw4QNCG\noxhs0FsvoMVbk1BKMW//PH5O/ZmnYp6idYPWzo4phHAAR870ugEHtNaHtNalwGzgjgtqNOBz7r4v\ncNKBeYRg9a40CubtRGl3umV+Rtvpn6AMBo7nHuethLfo3rQ7d0fc7eyYQggHcWTTCwKOn/c49dy2\n870C3KOUSgWWAI9XtSOl1Bil1Bal1JaMjAxHZBX1wOHTecRP24Sr8qFz6kw6fjIV5eaGzW7jhfUv\nYFIm3uj1BgYlb3ULUVc58v/uqq7XpC94PAr4TGsdDAwDvlCq8m8crfV0rXWs1jq2cePGDogq6rqC\nEguz/rsWH+1L+6NfEfvecxj9mwLw6Z5PScxI5IUeLxDoGejkpEIIR3Jk00sFQs57HEzlw5f3A98A\naK1/AdyARg7MJOohrTXv/WcdjYrdaX1sIT2f7YmpbTcAkjOTmZo4lZtCb+KWlrc4OakQwtEc2fQS\ngDZKqZZKKRfKPqiy8IKaY8BAAKVUBGVNT45fimo146MEfE9DUNpa+t6Wh8vgMQCU2Ep4ft3zNHRt\nyL97/FsuJi1EPeCwK7Jora1KqceA5YARmKm13qOUeg3YorVeCDwLzFBKPU3Zoc/7tNYXHgIV4ppt\n2HYSy7az+J1NYUDEMjweWFM+NnnbZA7mHOSDQR/g6+rrvJBCiOvGoZch01ovoewDKudvG3fe/SSg\nlyMziPorK6+EzR8m4Gkz0Mf1E3z++R2Y3QCIT4vni6QvGNluJL2Dejs5qRDiepGPqYk6SWvN+2+v\nxdXgTcdTXxH0jxfBrxUAeaV5vLjhRZr7NOeZLs84OakQ4nqSC06LOunjxSk0OqVpnLWNLsPdUFF/\nLh8bHz+ejMIMuZi0EPWQND1R5+w4epa8hcl42Qz09puL619Wlo+tPLqShQcX8vdOfyeqcZQTUwoh\nnEEOb4o6pbDUyhfvrcfV6EtU+hc0/ff74OoNQEZhBq/98hod/DswJmqMk5MKIZxBZnqiThn/5Q5a\nFrgSeCaeLvd3QIV0Bcre43t548sUWYv4T5//yMWkhainpOmJOmPZzpP4bTyGi03TO2gF5ttXlI/N\n3T+XdSfWMbbbWFr5tnJiSiGEM8nhTVEnpOcWs2xGAmaTL9FnZhHw7w/BWPY33bHcY7yd8DY9mvZg\nVPgoJycVQjiTND1R62mteXXmVtqUetL09EaiH+mFaty2fOy1X17DZDDxeq/X5WLSQtRzcnhT1Hqz\nfzlK290ZuFpt9Gn1M+ablpePrU1dy+ZTmxnbbaxcTFoIITM9UbulZheS8FUiJpMPnbM+p9GL08FQ\n9mNtsVt4Z+s7hPqEMqLdCCcnFULUBNL0RK1lt2vemLmV1lYvgk6tpdMTA1F+LcvH5+2bx+Gcwzzd\n5Wn5tKYQApDDm6IW+2L9YdonZ+FmKaFP2/WYBvz2ac280jymJU4jtkks/UP6OzGlEKImkZmeqJWO\nZhawa/YOjCZvupz9FP9/flB+WBPg410fk12SzXNdn5Mlg4QQ5aTpiVpHa83/Zm6lpd2XkLQfifx7\nb2jUpnz8RP4Jvkz6ktta3UYH/w5OTCqEqGnk8KaodeZsPEZ4ylncSwvo0/YnTEPWVBh/b9t7KKV4\nIuYJp+QTQtRcMtMTtUp6bjE7vtqG0ehBbO7HNHx6Khh/+5DKroxdLD28lL+2/6ucoiCEqESanqhV\n3pm5hWC7L6Fpq+jw187QLLp8TGvN21vext/Nn/s73u/ElEKImkoOb4pa44etJwjecxbP4hx6t/oB\n4y0bK4yvOraK7enbGXfDODzNnk5KKYSoyWSmJ2qFvGILm2cmYDS40i3vI3wf+k/5kkEAFpuFSVsn\nEdYgjOFhw52YVAhRk0nTE7XC1E+30cTmQ8u0ZbS7IwDCb60wHrc3juN5x3k29llMBjmAIYSomvx2\nEDXetn2ZeG47g1dRJr2az8M4fC2cd+5dTkkOH+38iJ7NetI7qLcTkwohajqZ6YkazWbXLH9/A0bl\nQvfCj/AZ+QQ0aF6h5sMdH5JvyefZ2GedlFIIUVtI0xM12qwvt+Nj8aLVqSW07V0ENzxWYfxY7jFm\np8xmeNhw2jZs66SUQojaQg5vihrr2MlcCtadwqfwNL2D4zDc/hWYXCrUTNo6CbPBzGOdH7vIXoQQ\n4jcy0xM11ncT12JQJnqUzMDrxkEQNrDC+NbTW1l1bBWjI0fTyL2Rk1IKIWoTmemJGmnNxmOY89wJ\nzlhDWKdDcNPsCuN2bWdCwgQCPAK4t8O9TkophKhtZKYnahyL1ca2WVsxWQu4oeFXGPo/W+nDK0sP\nL2V35m6e6PwE7iZ3JyUVQtQ20vREjfPlN7twxZewzGU06ugJPR+vMF5sLea9be8R4RfBba1vc1JK\nIURtJIc3RY2SkVNM7o9H8S4tpFvQPNRNM8DsVqHmy+QvSStI441eb2BQ8nebEOLKyW8MUaN88sEv\nmEzeRObPw7trV4ioOJPLLMrk410f0y+4H92adnNSSiFEbSUzPVFjbD+QhdfBQhrkpdKp5RoYuqbC\nlVcAPtjxAcXWYp6OfdopGYUQtZvM9ESNoLVm4YcbUUZ3Yixf4trvHgiMrFBz6Owh5u6by5/b/plW\nvq2clFQIUZvJTE/UCN+vP0qjXBcCz2ymbdRRGDC/Us07W9/B3eTOw9EPOyGhEKIukJmecLqiUht7\nvt6GQdvp7vYVxiH/AM+KJ5tvStvE2tS1PBj1IH5ufk5KKoSo7aTpCaebMW8PDXUDQtNXExRrgG5j\nKozb7DYmJEygmWcz/i/i/5yUUghRF8jhTeFUJ88WUvLjQRpYoVujOaibJoPJtULNwoMLSclO4a2+\nb+FqdL3InoQQ4vJkpiecavrMbXgYfWmXuQi/G8Kh/R0Vxgsthby//X2iGkUxNHSok1IKIeoKmekJ\np9lxJJuGSdl4Fp+lS/NFqKFLK52i8Pmez8koymBiv4moC8aEEOJqyUxPOIXWmjkz4jGZPInKm4Nn\nv9sgOLZCTXphOp/u+ZQhLYYQHRDtpKRCiLpEZnrCKZZtPUGzdDv+OXuIDE+AgfGVaj7a8REWu4Wn\nujzlhIRCiLpIZnriurPY7Gz8YhsGg4kuti9xGfggNGxRoeZ43nG+2/8dd7a5kxDvECclFULUNdL0\nxHX35fL9BBa70yx9I62i0qD3M5VqPtzxIUaDkTFRY6rYgxBCXBtpeuK6yi22cGJBEkZbKd084jAO\neg48Kp5sfujsIRYfWsxd7e4iwCPASUmFEHWRND1xXc2Ys5uGypdW6Stp2tlY6UR0gGk7puFmdGN0\nx9FOSCiEqMuk6Ynr5mR2Iaw/hmtxFt0C5qIGvVRprby9WXtZfmQ597S/Ry43JoSodtL0xHUzc+ZW\n3IzeRGQtxDemBUSNqFQzdftUvF28ubfDvU5IKISo6xza9JRSQ5VSKUqpA0qpsRepGaGUSlJK7VFK\nfe3IPMJ5ko6dxWdvLj65R+jcYilq8KtgMFao2ZGxgzWpa/hbh7/h4+LjpKRCiLrMYefpKaWMwFRg\nMJAKJCilFmqtk86raQM8D/TSWmcrpeRTC3XUt9PjaWR0J6roWzy6dIewgZVqpmyfgp+bn1xUWgjh\nMI6c6XUDDmitD2mtS4HZwB0X1DwITNVaZwNordMdmEc4ydodp/BP1zQ+s532YZth0CuVLjeWcCqB\nTWmbuD/yfjzMHk7JKYSo+xzZ9IKA4+c9Tj237XxtgbZKqQ1KqU1KqSqvKKyUGqOU2qKU2pKRkeGg\nuMIRtNas/XQLBhSxhm8wd7m50uXGtNa8v/19AtwDGNGu8vt8QghRXRzZ9Kq6OrC+4LEJaAP0A0YB\nHyulGlT6Jq2na61jtdaxjRs3rvagwnEWrjlMwyJ3gk+vo0Xb/TBwXKWaDSc3sD19Ow91egg3k1sV\nexFCiOrhyKaXCpx//ahg4GQVNQu01hat9WEghbImKOoAi9XGvm92Y7IW0M3nG4xdR0HjdhVqfp3l\nBXkFMTxsuJOSCiHqC0c2vQSgjVKqpVLKBbgLWHhBzfdAfwClVCPKDncecmAmcR3Nnp+Mh/aiVfpK\nmoRlQ7/nK9X8eOxHkjKTeLjTw5iNZiekFELUJw5relprK/AYsBxIBr7RWu9RSr2mlLr9XNlyIFMp\nlQT8BPxDa53pqEzi+ikstpC58jAehafp1vQ7VI8HwTe4Qo3NbmNK4hRCfUK5pdUtTkoqhKhPHLq0\nkNZ6CbDkgm3jzruvgWfO3UQd8sXMbZgNnrTL/RafdlR5UellR5Zx4OwB3r7xbUwGWeVKCOF4ckUW\nUe3OnC3CkphFg7P76Nz8B1TPx8DTv0KNxW5hWuI02jVsx5AWQ5yUVAhR30jTE9VuzgebUQZXIvVy\n3IN84IZHK9UsOriIY3nHeKzzYxiU/BgKIa4P+W0jqlXqqXz04WIanUmkffOfoc+z4FbxkmKltlI+\n3PEhHRt15MbgG52UVAhRH0nTE9Vq3oebUcpElMtKzIFNoOv9lWrm7ptLWkEaj3d+HKWqOp1TCCEc\nQz49IKrN/qNnMZ200eTMNtq02QT9JoHZvUJNkbWIGbtmENsklh5NezgpqRCivpKZnqg2iz7ajEIR\n7b4CU7MWEF35wtGz987mTNEZmeUJIZxCZnqiWuxMycQ100Bg+mZaRmyD/tPhgpPN80vz+WT3J/QK\n6kVMkxgnJRVC1GeXnekppd5V8ie5uIwVH8dj0Ha6eC/DGBwOkXdWqvki+QtySnJ4PPpxJyQUQogr\nO7yZDyxUSnkCKKWGKKU2ODaWqE02J57CPddMs9MbCG6+Gwa8VGmB2JySHGbtmcXA5gPp0KiDk5IK\nIeq7yx7e1Fq/pJS6G1ijlCoBCoAqV0EX9dO6z7fiZVPE+C7D2KIzhFe+pNinuz+lwFLAo9GVz9kT\nQojr5bJNTyk1kLLFXguApsD9WusURwcTtcPPm47jXuROcPpKgqL2wYB5lRaIPVN0hq/3fs3NLW+m\nTUNZREMI4TxXcnjzReDfWut+wJ+AOUqpAQ5NJWoFrTUJXyVishTQxW8phtY9oXXlH41Pdn1Cqa2U\nR6IfcUJKIYT4zZUc3hxw3v1dSqmbgXlAT0cGEzXf8p+P4m7xJCR9CU2iD8OAaZVmeacKTjEnZQ53\nhN1BC58WTkoqhBBlrvo8Pa11GjDQAVlELWK329nzzS5cSnPpGrAEQ9uB0KLy30Ef7fwIjeahqIec\nkFIIISq6ppPTtdZF1R1E1C4Llx3Eze5Ji4yfaBR0Aga8WKnmeO5xvt//PX9u+2eaeTVzQkohhKhI\nTk4XV81ms3No0V58ikvoEvgDqv2tENSlUt0HOz7AZDDxYMcHnZBSCCEqk8uQias2d2EKrtqTlpk/\n4tf0DPR/oVLNwbMHWXxoMaPCR9HYo7ETUgohRGUy0xNXxWKxcXLZQXyL8ujSbAkq6k5oUvlk86mJ\nU/Ewe/C3yL85IaUQQlRNZnriqsz+dg8uyoNW2T/i2zQX+j1fqSYpM4mVR1dyT8Q9NHRr6ISUQghR\nNZnpiStWVGIlc80xGhRmExO0BNV5FDQKq1CjtWbi1ok0cG3AvR3udVJSIYSomsz0xBWL+3oXZoMH\nYbmr8W4NVi6VAAAgAElEQVRaAjf+q1LNxpMb2Zy2mYeiHsLbxdsJKYUQ4uJkpieuSEGhhfxf0miY\nf4pOwctQsfdBg+YVauzazqStkwjyCmJEuxHOCSqEEJcgMz1xRb78LBGjwY22havwbqah73OVan44\n9AMp2Sk80fkJXIwuTkgphBCXJjM9cVnZuSWUJp7BL+coHYNWQreHwDuwQk2JrYT3t79Pe//2DG05\n1ElJhRDi0mSmJy4r7pNtGAyuhJeuxiPIBXo9Xalm9t7ZpBWk8XSXpzEo+bESQtRM8ttJXFJGZhG2\n5Bz8M3fRofmP0OMR8PSvUJNTksP0ndPp1awXPZr2cFJSIYS4PGl64pLiPt6CweBChP1H3Jp6Qc/H\nKtV8svsT8krzeLpL5RmgEELUJNL0xEWlnsrHcLCQxunbCG++Hno/BW6+FWpOFZziq6SvuLXVrbTz\na+ekpEIIcWWk6YmLmjtjK0oZ6WBcjWszP+g2plLNlO1T0Gge61x5BiiEEDWNND1RpUPHzmJKLSXw\ndDxtWmwuO0XBxbNCzb7sfSw8uJC7w++WpYOEELWCND1Rpe9nbMOgNR1dVuES1Ay63Fep5t2t7+Ll\n4sWDUbJ0kBCidpCmJypJ2peJS7qdpqd+oWXo9rLLjZlcK9QknEpg3Yl1PNDxAXxdfS+yJyGEqFmk\n6YlKlszchtFupZPHSswhraDTqArjWmsmbplIE48m3B1+t5NSCiHE1ZOmJyrYujMd92wDQWnraB66\nB/q/CMaKF+5ZfnQ5uzN381jnx3AzuTkpqRBCXD1peqKCn2Ztx2grJtp7BabQSGj/hwrjFpuFydsm\n06ZhG25rdZuTUgohxLWRa2+Kcus2ncA930xI2iqCovbDwG/BUPHvom/3fcvxvONMHTgVo8HopKRC\nCHFtZKYngLL36eK/3olLaS6dGyzH2KYHhA2qUJNfms9HOz+ia2BX+gT1cVJSIYS4djLTEwAsW34I\nt1JXWqQtIrDLMRj4IShVoeazPZ+RVZzFlJgpqAvGhBCiNpCmJ7BZbaQs2IdvYTZdmq7EED4IWvSs\nUHOm6AyzkmYxpMUQOjbu6KSkQgjx+8jhTcF33yZj1q60yliOX3A6DBxXqeaDxA+w2Cw8GfOkExIK\nIUT1kJlePVdcZOXUmlQa5h4nusWPqKg/QdOoCjWHcw4zb/88/tz2zzT3ae6kpEII8fvJTK+e+/bz\nRAzKhTZ5K/BpWggDXqxUM3nbZFyNrvy909+dkFAIIaqPNL16LCe7mJztWTTO2E7HVj+jYu8Dv1YV\nahLTE1l1bBX3Rd6Hv7t/1TsSQohaQppePfbtR1tQKML5CY8mRuj7zwrjWmsmbZ2Ev5s/97a/10kp\nhRCi+kjTq6dOHs+l+HAxzdI2EB66EXo8At5NKtSsOb6GbenbeCT6ETzMHk5KKoQQ1UeaXj214MMt\nmGylRHquxyXAB3o9UWHcarfy7rZ3CfUJZXib4U5KKYQQ1cuhTU8pNVQplaKUOqCUGnuJuj8ppbRS\nKtaReUSZlN0Z2DMh+ORPtGyxteywplvF5YEWHFjAoZxDPBnzJGaD2UlJhRCiejms6SmljMBU4Gag\nPTBKKdW+ijpv4Algs6OyiN9orVn1yTZcSnKIDliLKTAYut5foabIWsS0xGl0atyJgc0HOimpEEJU\nP0eep9cNOKC1PgSglJoN3AEkXVD3OvAW8JwDs4hzEjakQpGZ5mkraRabAgNmVFog9sukL0kvSuft\nG9+Wy42JGs1isZCamkpxcbGzo4jrxM3NjeDgYMzmazsC5cimFwQcP+9xKtD9/AKlVGcgRGu9WCl1\n0aanlBoDjAFo3lxOjr5Wdpud+Lg9eBZkEdN8LYaQKIi8s0JNdnE2M3fPpF9IP2KaxDgpqRBXJjU1\nFW9vb0JDQ+UPtHpAa01mZiapqam0bNnymvbhyPf0qvoJ1OWDShmAScCzl9uR1nq61jpWax3buHHj\naoxYv6xetB9lcyH0zAoaBR6HQa9WWjpo+s7pFFoLeSrmKSelFOLKFRcX4+/vLw2vnlBK4e/v/7tm\n9o5seqlAyHmPg4GT5z32BiKBNUqpI0APYKF8mMUxSoutpCw7jO/ZA8S0WotqMxBa969Qsy97H7P3\nzmZ42HBaN2jtpKRCXB1pePXL7/33dmTTSwDaKKVaKqVcgLuAhb8Oaq1ztNaNtNahWutQYBNwu9Z6\niwMz1VuLvtqFwoVWBavwaZQFg1+tMG7Xdl775TW8XLzkotJCXAWj0Uh0dHT5bfz48dW278TERJYs\nWVJt+xMOfE9Pa21VSj0GLAeMwEyt9R6l1GvAFq31wkvvQVSX/LMlpMVnEJCxk+jW61Ax/weBFZcH\n+jblW3Zk7OA/vf9DQ7eGTkoqRO3j7u5OYmKiQ/admJjIli1bGDZsmEP2Xx859Dw9rfUSrXVbrXVr\nrfWb57aNq6rhaa37ySzPMebN2IJBK9qyBo/GQP+XKoynF6bz7rZ36d60O7e2utU5IYWoQ3JycmjX\nrh0pKSkAjBo1ihkzZgDw8MMPExsbS4cOHXj55ZfLvychIYGePXvSqVMnunXrRk5ODuPGjWPOnDlE\nR0czZ84cp7yWukaWFqrjTqXmkX+giGZpG2jfbiP0/Af4NK1QMz5+PBa7hXE9xsn7I6LWenXRHpJO\n5lbrPts38+Hl2zpcsqaoqIjo6Ojyx88//zwjR45kypQp3HfffTz55JNkZ2fz4IMPAvDmm2/i5+eH\nzWZj4MCB7Ny5k/DwcEaOHMmcOXPo2rUrubm5eHh48Nprr7FlyxamTJlSra+rPpOmV8ct+CAeo62U\nSK8fcQlsBD0frzC+5vgaVh5dyROdn5C18oS4Bhc7vDl48GC+/fZbHn30UXbs2FG+/ZtvvmH69OlY\nrVbS0tJISkpCKUXTpk3p2rUrAD4+Ptctf30jTa8OS9mdgTVT0eLkj7TstBMGTAZXr/LxQkshb25+\nk7AGYdzX4T7nBRWiGlxuRna92e12kpOTcXd3Jysri+DgYA4fPsyECRNISEigYcOG3HfffRQXF6O1\nlqMs14lccLqO0lqz8uNtuJScJabRKkwh7SH6/yrUvL/9fU4VnOLlG17GbJTrawpRnSZNmkRERARx\ncXGMHj0ai8VCbm4unp6e+Pr6cvr0aZYuXQpAeHg4J0+eJCEhAYC8vDysVive3t7k5eU582XUOTLT\nq6M2rDmGKjbT4tQKArschqELwWAsH9+TuYev937NiLYjiA6IvsSehBCXcuF7ekOHDmX06NF8/PHH\nxMfH4+3tTd++fXnjjTd49dVX6dy5Mx06dKBVq1b06tULABcXF+bMmcPjjz9OUVER7u7urFq1iv79\n+zN+/Hiio6PL3ysUv4/SWl++qgaJjY3VW7bIhzwvxWazM+3x5XjlZXGH+SX8Bt8Ao74uH7fardz9\nw91kFGWw4A8L8HGR9w9E7ZScnExERISzY4jrrKp/d6XUVq31ZS9uIoc366DFc5Mx2F0JO7OUhs3z\nYMjrFca/Sv6K5KxkxnYbKw1PCFGvyOHNOqawoJRjPx7HL+co0c1XoHr+Hfx/u6TYyfyTTE2cyo3B\nNzKkxRAnJhVCiOtPZnp1TNwn2zEoF8Lzf8C7tTf0/Uf5mNaaNze/CcCL3V+UT4sJIeodaXp1SNqp\nAop259A4fRsdWm+AAS9VWBF9xdEVrE1dy2PRj9HUq+kl9iSEEHWTNL065JsP4zGgiLJ9j1v7DhDz\n1/Kx3NJcxsePJ8Ivgrsj7nZiSiGEcB55T6+O2JGUgTHNRrO0dbQOT4JhyyqcovDe1vfIKs5i6sCp\nmAzyzy6EqJ9kplcHaK1ZOWMrJlsJMebvMPccCSHdyse3p2/nm33f8H8R/0d7//ZOTCqEEM4lTa8O\nmD9/H+5FLrQ6/gNBUTkw6JXyMYvNwqsbX6WpZ1Mei37MaRmFEKImkKZXy2VnFZG6/Ag+uYfpEvA9\nxpueB+8m5eOf7vmUgzkHebH7i3iYPZyYVIi662oXkvXy8rrk+LWYP38+Sin27t1bvi01NfV3L0m0\nbNky2rVrR1hY2EVf1+jRowkICCAyMvJ3Pdf1IE2vloubHI9JKzplfoVf92Do9mD52NHco3y04yOG\ntBjCjSE3OjGlEHXbryst/HobO3Zste1ba43dbr9sXVxcHLGxscyePbt82+rVq9m2bds1P7fNZuPR\nRx9l6dKlJCUlERcXR1JSUqW6++67j2XLll3z81xP0vRqsS2/nECfstE8dSXhkYmoWyfBuQtHa615\n/ZfXcTW6MrZb9f0PKIS4MkeOHKkw85kwYQKvvPJKpbovv/ySbt26ER0dzUMPPYTNZuPIkSNERETw\nyCOPEBMTw/Hjxy/5XPn5+fz888988sknxMXFAbB+/XqeeeYZ5s6dS3R0NIcPH77q1xAfH09YWBit\nWrXCxcWFu+66iwULFlSq69u3L35+fle9f2eQj/HVUqXFVjbN2oVnQSbdGnyLS++RENqrfHzRoUVs\nPrWZf/f4N409GjsxqRDXydKxcGpX9e4zsCPcfOlDlVD1QrLdu3e/7PclJyczZ84cNmzYgNls5pFH\nHuGrr76ib9++pKSk8OmnnzJt2rTL7uf7779n0KBBREVF4enpybZt2+jduzddu3ZlwoQJlQ479unT\np8rVGyZMmMCgQYPKH584cYKQkJDyx8HBwWzevPmyeWoyaXq11HfTt6HsJjqkz6HxjbrC9TWzi7N5\nO+FtohtH86e2f3JiSiHqh6oWkj1y5Mhlv2/16tVs3bq1fPHYoqIiAgIC6Nu3Ly1atKBHjx5X9Pxx\ncXGMGTMGgBEjRhAXF0dMTAwpKSm0a9euUv26deuuaL9VLUhQ26/kJE2vFjqakkXmnjyCTq6lU/sN\nqCETwLNR+fiELRPIL81n3A3jMCg5gi3qiSuYkV1PJpOpwntxxcXFlWq01tx7773897//rbD9yJEj\neHp6XtHzZGZmEh8fz3fffQfAyJEjufHGGxk7diy+vr6YzZXXyrzSmV5wcHCFQ6upqak0a9bsinLV\nVNL0ahmbxc6SqQm4luQR6zkP1w6dIebe8vHNaZtZeHAhD3Z8kDYN2zgxqRD1W5MmTUhPTyczMxMv\nLy8WL17M0KFDK9QMHDiQO+64g6effpqAgACysrIuumjswIEDmTVrFkFBQRW2z507l2HDhuHq6gpA\ny5YtCQwMJCkp6aIN6kpnel27dmX//v0cPnyYoKAgZs+ezddff335b6zBZBpQy6yM24291EybtHkE\ntU2DWyaCoeyfscRWwuubXqe5d3PGRI1xclIh6o9f39P79TZ27FjMZjPjxo2je/fu3HrrrYSHh1f6\nvvbt2/PGG28wZMgQoqKiGDx4MGlpaZXq7HY7Bw4cqPLDInFxcSxatIjQ0NDyW3JyMjNnzuTMmTNE\nRkaycePGa3pdJpOJKVOmcNNNNxEREcGIESPo0KEDAMOGDePkyZMAjBo1ihtuuIGUlBSCg4P55JNP\nrun5rgdZRLYWOZOax5zXNxGQvpVbgyfgfvujMPjV8vH3t7/P9J3TmTFkBj2aXtl7AULUZvVlEdnd\nu3czc+ZMJk6c6OwoNYIsIlsP2O2aBe9twmwppLNpHu5hwdDvt1MRDmQfYObumdzW6jZpeELUMZGR\nkdLwqom8p1dLbFq8n+I8I21TF9Cq2364fSGY3QEothbzwvoX8DJ78VzX55ycVAghai5perVA7pki\ntv9wBP+svdwQ9gOGrvdAy77AuZPQN71OclYyUwZMwc+tdpwgKoQQziCHN2s4rTUL3v0Fo81KR9tc\nvFr6VDgn75uUb1h4cCEPd3pYLjUmhBCXITO9Gm7nz8fIPQOtUn8gvMtOuPULcG8IQGJ6IuMTxtMn\nqA9/7/R3JycVQoiaT5peDVaYW8qG2XvxzTlGzxbzMXa+EyJuA+BM0RmeXfMsgR6B/LfPf+UkdCGE\nuALS9GqwRVM2gR0iC2bjG+MJw94GwGK38OyaZ8ktzeXLYV/i6+rr5KRCCFE7SNOroVIS0jhzzErz\n1JVEdtoKt34JHmUfUpm4ZSLb0rcxvs942vlVvq6eEEKIqknTq4FKi6z8OHMHnvkZ9Gw6B1PsnyDi\nVgB+OPQDXyZ/yT0R93BLq1ucnFQIIWoXeSOoBlr4QTx2u4nIs1/jF+4BN78FQEpWCq9sfIWYgBie\niX3GySmFEL+q7yunh4aG0rFjR6Kjo4mNvexFUZxKZno1zOGkM5zeV0zQyZ/p1GETavhc8PAjpySH\np356Ch8XH97p9w5mQ+UrpwshnKOqpYWqi9YarTUGw6XnKOevnP7rYrWrV68mKSmJkSNHXtNz/7py\n+sqVKwkODqZr167cfvvttG/fvlLtTz/9RKNGjarYS80iM70axGqxsWxKPG5FZ+jdcBbmfmMgbCB2\nbef5dc9zqvAU7/R7h0buNf8HS4j6rj6tnF6byEyvBvl++hbsdjciM6bjP6wJDHoFgA93fMi6E+t4\nqftLRAdEX3IfQtRX/4v/H3uz9l6+8CqE+4Xzr27/umxdfV85XSnFkCFDUErx0EMPlS9oWxNJ06sh\nDu3P4vTOXALTE4iO3Ii6cyWY3fn5+M98sOMD7mh9ByPajXB2TCFEFer7yukbNmygWbNmpKenM3jw\nYMLDw+nbt+8VPcf1Jk2vBrBZbSx5dyMuFis93T/F9fYXoGknjuUe4/l1zxPhF8FLPV6q8odNCFHm\nSmZk11N9Wjn9120BAQEMHz6c+Pj4Gtv05D29GuCr6QkomweRp+IIvCkSej5BoaWQJ396EoPBwKT+\nk3AzuTk7phDiKpy/cnpJSQmLFy+uVDNw4EDmzp1Leno6AFlZWRw9erTK/Q0cOJATJ05U2n6tK6cn\nJiZWup3f8KDiyumlpaXMnj2b22+/vUJNQUFBeQMtKChgxYoVlQ6n1iQy03OypH2Z5CXm0Cgrmc7R\niag716OV4pWNr3Ao5xAfDPqAIK8gZ8cUQlzChe/pDR06lPHjx5evnN6yZcvLrpxut9sxm81MnTqV\nwMDACnWXWzl9586dhIaGlm/LzMyssHL69OnT6dmz51W/rvNXTrfZbIwePbrCyukff/wxxcXFDB8+\nHACr1crdd9/N0KFDr/q5rhdZOd2J8vJK+OSfq3Av1QzNf54W/50CrW5k1p5ZvL3lbZ6MeZIHOj7g\n7JhC1Fiycnr9JCun10J2u+bzV9dgtrvQJfVDmj84ElrdSMKpBCZuncjA5gO5P/J+Z8cUQtQAsnJ6\n9ZGm5ySz392IyjcTcWw20XfYUP3HcqrgFM/9/Bwh3iG80esN+eCKEEJUM3lPzwnWLUgme18JwSd/\nomfsBkx/XUcpdp5d8yzF1mI+velTvFyq/zJFQghR30nTu84O7zzNziWp+GWn0D9oJm5jvgevxoz/\n5TV2ntnJxH4TadWglbNjCiFEnSRN7zrKPl3Asqnb8SjMZKDrRHxGvwohXZm/fz7f7vuW0ZGjGdxi\nsLNjCiFEneXQ9/SUUkOVUilKqQNKqbFVjD+jlEpSSu1USq1WSrVwZB5nKi6wMPe1nzFaS7mx6B0C\n/jgEYu8nMT2RNza9QY+mPXi88+POjimEEHWaw5qeUsoITAVuBtoDo5RSF16aezsQq7WOAuYCbzkq\njzPZbHbmvbEGi8VEbPo0Qgf7wq2TSDi9hYdWPkQTzya81fctTAaZeAshhCM5cqbXDTigtT6ktS4F\nZgN3nF+gtf5Ja1147uEmINiBeZxCa82KKb9wNttI+xNfEdXrMIa749iQvo2HVz1MoGcgnw39jIZu\nDZ0dVQgh6jxHNr0g4Pz1MFLPbbuY+4GlVQ0opcYopbYopbZkZGRUY0TH2/r9Hg4llxCStpKenZZh\n+kscP2Yn8fiPj9PStyWfDv2UAI8AZ8cUQoh6wZFNr6qTzKq8/ItS6h4gFni7qnGt9XStdazWOrZx\n48bVGNGxDm1JZfOyU/hn7mRQ6Me43D2NpaWneWbNM0T4RfDxkI/xc6t8WSEhhBCO4cimlwqEnPc4\nGDh5YZFSahDwInC71rrEgXmuq8zUXJZP341nwUlu8nsHj+HPMd/VwL/W/ovogGimD5mOr6uvs2MK\nIaqBUoq//OUv5Y+tViuNGzfm1ltvBbjodS9feeUVJkyYcM3Pe7nraZ49e/aK1uP71fz581FKsXdv\nxXUJU1NTmTNnzjVlBFi2bBnt2rUjLCyM8ePHX7QuNDSUjh07Eh0dTWzsZa8odk0c2fQSgDZKqZZK\nKRfgLmDh+QVKqc7AR5Q1vHQHZrmuivJLmf/mOkzWYgbxFg2G3UFck+aM2ziOG5rdwAeDPsDTfGXL\nhgghaj5PT092795NUVERACtXriQo6Ld3czZu3OiQ573cfq+26cXFxREbG8vs2bMrbF+9ejXbtm27\npow2m41HH32UpUuXkpSURFxcHElJSRet/+mnn0hMTMRR11h22McFtdZWpdRjwHLACMzUWu9RSr0G\nbNFaL6TscKYX8O25S24d01rfftGd1gI2q51541ZisZnomzOBpne04dOWnZgU/x/6hfTjnRvfwcXo\n4uyYQtQ5p/7zH0qSq3fldNeIcAJfeOGKam+++WZ++OEH/vSnPxEXF8eoUaPKF2v18vIiPz8fgDff\nfJNZs2YREhJC48aN6dKlC0eOHGHo0KF0796d7du307ZtW2bNmoWHhwcAEydOZObMmQA88MADPPXU\nU+X73b17NzfffDO9e/dm48aNBAUFsWDBAtzd3Rk7diwHDx4kOjqawYMH8/bbVb6DBEB+fj4///wz\nK1eu5M9//jOvvPIKAOvXr+eZZ56hQYMGLF++nPnz59OyZcsr/m8YHx9PWFgYrVqVXXTjrrvuYsGC\nBbRvf+GH+a8Ph56np7VeorVuq7VurbV+89y2cecaHlrrQVrrJlrr6HO3Wt3wtNYsGv8jOYXuRJ3+\njLD+JXzUvi+Ttk9maOhQJvabKA1PiDrqrrvuYvbs2RQXF7Nz5066d+9eqWbr1q3Mnj2b7du38913\n35GQkFA+lpKSwpgxY9i5cyc+Pj7lM7StW7fy6aefsnnzZjZt2sSMGTPYvn17hf3u37+fRx99lD17\n9tCgQQPmzZsHwPjx42ndujWJiYmXbHgA33//PYMGDSIqKgpPT8/ymV3v3r3p2rUrCxYsIDExsULD\n69OnD9HR0ZVuq1atKq85ceIEISG/vdMVHBxc5bqAUHaYeMiQIXTp0oXp06dfMu+1khPDqtG6z+I5\nkWqg1akf6NJzF1NiRvDZnpn8IewPvHLDKxgNRmdHFKLOutIZmaNERUVx5MgR4uLiGDZsWJU169at\nY/jw4eUzuPMXZA0JCaFXr14A3HPPPUyePJnnnnuO9evXM3z48PKV1P/4xz+ybt06OnfuXP69LVu2\nLF/P79eZ49WKi4tjzJgxAIwYMYK4uDhiYmKAsobcrl27Kl/P5VS1fN3FLqa/YcMGmjVrRnp6OoMH\nDyY8PLzaV2CXVRaqyZ4f97FrUx4BmVvpHbWYCT1u4bP933JXu7t4teer0vCEqAduv/12nnvuOUaN\nGnXRmov9wr9w+6+Pr2TN019XTQcwGo1YrdYriVsuMzOT+Pj48sVfR44cyZw5c9Bak5mZia+vL2az\nudL3XclMLzg4mOPHfzt7LTU19aIruv+6PSAggOHDhxMfH39Vr+NKSNOrBql7T7N29iG884/TP2QG\n/+s7hDlHlvC3Dn/jhe4vYFDyn1mI+mD06NGMGzeOjh07Vjnet29f5s+fT1FREXl5eSxatKh87Nix\nY/zyyy9A2ayrd+/e5d/z/fffU1hYSEFBAfPnz6dPnz5XlMfb25u8vLwK2wYOHFjp8OLcuXMZNmxY\nefNs2bIlgYGBrF+/nsOHD1+0Sa1bt47ExMRKt0GDBpXXdO3alf3793P48GFKS0uZPXt2hRnurwoK\nCsqzFhQUsGLFCiIjI6/odV4N+W38O+VkFvLDhE2YLQX095rE/4b0ZcGJNTzS6RGe7vK0rIknRD0S\nHBzMk08+edHxmJgYRo4cSXR0NHfeeWeF5hUREcHnn39OVFQUWVlZPPzww+Xfc99999GtWze6d+/O\nAw88UOHQ5qX4+/vTq1cvIiMj+cc//oHdbufAgQP4+VU8PzguLo5FixYRGhpafktOTubrr78mPDyc\nM2fOEBkZeU2fQjWZTEyZMoWbbrqJiIgIRowYQYcOHcrHhw0bxsmTJzl9+jS9e/emU6dOdOvWjVtu\nuaV85lmd1JVMnWuS2NhY7aiPsl6tkhIrnz/+PTbtxf+3d/fBVdV3HsffXyBuLLi6ESlCggGhQYyY\nkLBbKFCXBx8Al2V2AGVRRx3HnbFsXXB2Wp3Zdf2DpYrM0sGWRaDLVg0g5WkwhCKCIN0SCkV6TcQy\niOFSKyFdHgXy9N0/bsgSk5gHiOdcz+c1k8m9h/Pw5XeTfO79nXN+v+9emMOiaX3YVvE+s/Jm8Wj2\no0GXJ/K1V1paym233RZ0GVfsyJEjTJw4kVgs1qHHicViLFu2LOlnYW/qdTezve7e4s19upClnWqq\na/nv2b+gqtNN5P3pJyz4+578quJ9nv2rZ3lwYPP9+SIiQcnOzk76wLtSCr12uHihmuXPrKGq+iYG\nlK/lP6fXsPfkR7ww/AUmD5gcdHkikmQyMzM7/FOeJCj02uhU+TlWPVtIVac0ssrf5LW/K2P/uWPM\nHTmX8f2avkxZRETCQaHXBn8o+ZSN83dTY90YfGoRCx/8nN9f+CMv3/UyY/qMCbo8ERFpgUKvlUp/\n+QHb3ywjpaaGnikv88zEU1hVZ348+seM6D0i6PJERKQVFHotcHd+9eoO9u+t4rrznxHv8yoLsk6T\n1z2POSPm0Ktb0/eviIhI+Cj0vkRtTS2bXtjIkc+6ceOpA6we+jqHezizc2fz0KCHNMqKiEiSUeg1\n48KZC6z74UYqqtO48eRm5v91Iek9+1Mwci5ZaY3HoBMRkfBT6DXhfz8+zro5Ozlv12OVr/Hv9xTz\nSGZviLsAAAm3SURBVPajfG/ITM2SICKSxBR6X1C2s5Si5Ydwv4ajXReyZ1Q5S8b+jKE9hwZdmoiI\nXCGNvXmZ93++g40/L6NT9Tl2pc+n9t5vsnbqZgWeiHypzp07k5OTQ3Z2Nvfffz8nT54EEpO8XlJY\nWMiAAQMoKyurX1ZTU0Nubi4TJ05s9bHWrl2LmfHhhw0nzI3H46xcubLd/4eioiKysrLo378/c+fO\nbXKdzMxM7rjjDnJycsjPb3HEr1BS6JG4QnPLv63hvV3VpJ4/QlH2fKZP+wd+NH4x111zXdDliUjI\nXXvttezfv59YLEZaWhqvvPJKg3/funUrM2fOpKioiD59+tQvX7BgQZvHDi0oKCA/P58VK1Y0Osal\niV/bqqamhqeeeopNmzZRUlJCQUEBJSUlTa67bds29u/fT1jGQG6ryHdvVn1+kTWz3+CE30LKuV/z\nP8M389MZa7nput5BlyYibbBz1UecOHr2qu6ze0Y3Rk79Vpu2GTZsGAcOHPj/unbu5IknnqCwsJBb\nb721fnk8Huett97iueeea/V4mGfPnuXdd99ly5YtTJkyheeffx6A9957j1mzZnHDDTewefNm1q5d\n22CG85YUFxfTv39/+vXrByRmgV+/fj2DBg1q9T6SRaRD78zR46z+l0I+/7NbqKxaj01JYfH92zUd\nkIi0S01NDVu3buXxxx8H4OLFi0yaNInt27czcODABus+/fTTvPjii43mu/sy69atY+zYsQwePJiu\nXbuyb98+hgwZwogRIxg6dCjz5s1rMAfdyJEjm9z/vHnzGsx5d+zYMTIyMuqfp6ens3v37kbbmRl3\n3303ZsaTTz5ZP9N6Mols6P1u8w5+veIzqrv05EzKUibMeoI7vnVX0GWJSDu19RPZ1XT+/HlycnI4\ncuQIeXl5jBs3DoCUlBSGDx/O0qVLWbBgQf36GzdupEePHuTl5bF9+/ZWH6egoKA+aKZOnUpBQQFD\nhgwB4ODBg2RlNbydaufOna3ab1NTzDX15n/Xrl306tWL48ePM27cOAYOHMioUaNaXX8YRPKc3uo5\nP2LXm2eotS5U3ryCWS8vVuCJSLtdOqf3ySefUFlZWX9Or1OnTqxatYo9e/YwZ86c+vV37drFhg0b\nyMzM5IEHHuCdd95hxowZX3qMiooKiouL6ydWnTZtGitXrsTdqaio4PrrryclJaXBNiNHjiQnJ6fR\n19tvv91gvfT0dI4ePVr/PB6PNzlb+qVlPXr0YPLkyRQXF7ehlULC3ZPqKy8vz69E2Uelvuix9f7q\nw8v9rRU/uaJ9iUiwSkpKgi7B3d27du1a/3jfvn2ekZHhlZWV9csrKip80KBBvmTJkkbbbtu2zSdM\nmFD/fPTo0R6Pxxutt2jRIn/44YcbLBs6dKjv2LHD9+zZ4/fdd1+766+qqvK+ffv64cOH/eLFiz54\n8GCPxWIN1jl79qyfPn26/vGwYcN806ZN7T7mlWjqdQd+463IkMh1b2YMGMjNuZvJnzCRXn1vbXkD\nEZE2yM3N5c4772xwdWVaWhpFRUWMGjWK7t27M2nSpCa3ra2t5dChQ6SlpTX6t4KCAg4cOEBmZmb9\nsoqKCt544w1eeuklTpw4QXZ2NosXL2b48OFtqrlLly4sXLiQe+65h5qaGh577DFuv/12AMaPH8+S\nJUu4cOECkycn5gutrq5m+vTp9Z86k4l5E325YZafn+/JeqmsiFxdpaWlbb7kP8xisRjLli2L/Ozm\nLWnqdTezve7e4s2DkTynJyISRtnZ2Qq8DqbQExGRyFDoiYhIZCj0RCSpJdt1CXJlrvT1VuiJSNJK\nTU2loqJCwRcRXndPYmpqarv3EblbFkTk6yM9PZ14PE55eXnQpchXJDU1lfT09HZvr9ATkaSVkpLS\npoGVRdS9KSIikaHQExGRyFDoiYhIZCTdMGRmVg58chV21R04cRX283Wktmme2qZ5apvmqW2ad7Xa\n5hZ3v6mllZIu9K4WM/tNa8ZpiyK1TfPUNs1T2zRPbdO8r7pt1L0pIiKRodATEZHIiHLoLQ66gBBT\n2zRPbdM8tU3z1DbN+0rbJrLn9EREJHqi/ElPREQiRqEnIiKREbnQM7N7zeygmR0ysx8EXU9YmFmG\nmW0zs1Iz+8DMvh90TWFjZp3N7LdmtjHoWsLEzG4ws9Vm9mHdz8+woGsKCzP7p7rfp5iZFZhZ+6cH\n+Bows2VmdtzMYpctSzOzLWb2+7rvf9GRNUQq9MysM/AKcB8wCHjQzAYFW1VoVAOz3f024NvAU2qb\nRr4PlAZdRAgtAIrcfSBwJ2ojAMysN/CPQL67ZwOdgQeCrSpw/wXc+4VlPwC2uvsAYGvd8w4TqdAD\n/hI45O6H3b0SWAFMCrimUHD3T919X93jMyT+cPUOtqrwMLN0YAKwJOhawsTM/hwYBSwFcPdKdz8Z\nbFWh0gW41sy6AN8A/hBwPYFy9x3An76weBKwvO7xcuBvO7KGqIVeb+DoZc/j6A97I2aWCeQCu4Ot\nJFT+A/hnoDboQkKmH1AO/Kyu63eJmXUNuqgwcPdjwDygDPgUOOXuvwy2qlD6prt/Cok330CPjjxY\n1ELPmlimezYuY2bdgF8AT7v76aDrCQMzmwgcd/e9QdcSQl2AIcBP3T0XOEcHd08li7pzU5OAvkAv\noKuZzQi2Kola6MWBjMuepxPx7obLmVkKicB73d3XBF1PiHwH+BszO0KiS3y0mb0WbEmhEQfi7n6p\nV2A1iRAUGAt87O7l7l4FrAGGB1xTGH1mZjcD1H0/3pEHi1ro7QEGmFlfM7uGxEnlDQHXFApmZiTO\ny5S6+/yg6wkTd/+hu6e7eyaJn5l33F3v2AF3/yNw1Myy6haNAUoCLClMyoBvm9k36n6/xqCLfJqy\nAXik7vEjwPqOPFiXjtx52Lh7tZl9D9hM4kqqZe7+QcBlhcV3gIeA35nZ/rplz7p7YYA1SXKYCbxe\n90byMPBowPWEgrvvNrPVwD4SV0f/logPR2ZmBcBdQHcziwP/CswFVpnZ4yTeKEzp0Bo0DJmIiERF\n1Lo3RUQkwhR6IiISGQo9ERGJDIWeiIhEhkJPREQiQ6EnIiKRodATEZHIUOiJJCEzSzezaUHXIZJs\nFHoiyWkMGuNSpM00IotIkjGzESTGJzwJnAEmu/vHwVYlkhwUeiJJyMyKgGfcPRZ0LSLJRN2bIskp\nCzgYdBEiyUahJ5JkzOxGErNwVwVdi0iyUeiJJJ++aPJjkXZR6Ikknw9JzEcWMzPNxC3SBrqQRURE\nIkOf9EREJDIUeiIiEhkKPRERiQyFnoiIRIZCT0REIkOhJyIikaHQExGRyPg/JMsdmeN1Zh4AAAAA\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We'll keep dt at 0.5, use 4th order Runge-Kutta\n", "t3 = np.arange(21)*dt\n", "x3 = np.zeros(21)\n", "x3[0] = x0\n", "for i in range(20):\n", " # Compute the k's\n", " k1 = dxdt(x3[i])\n", " k2 = dxdt(x3[i]+dt*k1/2)\n", " k3 = dxdt(x3[i]+dt*k2/2)\n", " k4 = dxdt(x3[i]+dt*k3)\n", " x3[i+1] = x3[i] + dt/6 * (k1+2*k2+2*k3+k4)\n", " \n", "# Plot\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label=r'Euler, $\\Delta t = 0.1$')\n", "plt.plot(t1, x1, label=r'Euler, $\\Delta t = 0.5$')\n", "plt.plot(t2, x2, label=r'Midpoint, $\\Delta t = 0.5$')\n", "plt.plot(t3, x3, label=r'RK4, $\\Delta t = 0.5$')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fourth order RK is a good general-purpose method for many applications. One can use even higher order methods, e.g., there is an 8th order method due to Dormand and Prince. Whether the extra function evaluations are worth it depends mostly on the properties of the function being integrated. The smoother the function, the better higher order methods do, because they can take very big time steps and still maintain small errors due to the large number of terms in the Taylor expansion they retain. For very non-smooth or rapidly-varying functions, lower order integrators are often preferable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Multistep Methods\n", "\n", "Another level of sophistication comes from using multistep methods, which we distinguish from RK methods as follows. RK methods use a series of midpoints within a step to approximate the solution, but once they have advanced, they discard all the previous information and begin anew. Multistep methods attempt to make use of the information from previous steps to improve their accuracy. There are a number of classes of methods, many of which go by the general heading of Adams methods, after John Couch Adams, who first explored them. (Adams is best known for correctly predicting the existence of Neptune, based on its perturbations to Uranus's orbit.) The simplest Adams method is as follows:\n", "\\begin{equation}\n", "x_{i+2} = x_{i+1} + \\frac{3}{2} \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}} - \\frac{1}{2} \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_i}\n", "\\end{equation}\n", "\n", "We can derive this update procedure as follows. As before, we begin by writing out the series expansion of $x(t)$ evaluated at $t = t_{i+2}$, which is what we want to obtain. We will expand about $t_{i+1}$. This gives\n", "\\begin{equation}\n", "x_{i+2} = x_{i+1} + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}} + \\frac{\\Delta t^2}{2} \\left(\\frac{d^2x}{dt^2}\\right)_{t_{i+1}} + O(\\Delta t^3).\n", "\\end{equation}\n", "\n", "Now we want to write an approximation for $x_{i+2}$ in terms of the derivatives at times $t_i$ and $t_{i+1}$, i.e., using the previous two points, that will be accurate as possible. Let us write this out as\n", "\\begin{equation}\n", "x_{i+2} = x_{i+1} + \\Delta t \\left[(1-\\lambda)\\left(\\frac{dx}{dt}\\right)_{t_{i+1}} + \\lambda \\left(\\frac{dx}{dt}\\right)_{t_i}\\right],\n", "\\end{equation}\n", "where the coefficient $\\lambda$ is to be determined. Now let us Taylor expand $(dx/dt)$ at $t=t_i$ about $t_{i+1}$. Doing so gives\n", "\\begin{eqnarray*}\n", "x_{i+2} & = & x_{i+1} + \\Delta t \\left\\{(1-\\lambda)\\left(\\frac{dx}{dt}\\right)_{t_{i+1}} + \\lambda \\left[\\left(\\frac{dx}{dt}\\right)_{t_{i+1}} - \\Delta t \\left(\\frac{d^2x}{dt^2}\\right)_{t_{i+1}}+ O(\\Delta t^2)\\right]\\right\\} \\\\\n", "& = & x_{i+1} + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}} - \\lambda \\Delta t^2 \\left(\\frac{d^2x}{dt^2}\\right)_{t_{i+1}} + O(\\Delta t^3)\n", "\\end{eqnarray*}\n", "Comparing this expression to the true Taylor expansion derived above, it is clear that if we choose $\\lambda = -1/2$, we will properly recover the first two terms in the Taylor expansion, and thus our approximation will be accurate to order $\\Delta t^3$. Plugging in this value of $\\lambda$, we conclude that the update step\n", "\\begin{equation}\n", "x_{i+2} = x_{i+1} + \\frac{3}{2} \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}} - \\frac{1}{2} \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_i}\n", "\\end{equation}\n", "is accurate to $O(\\Delta t^3)$, and thus produces a second order accurate update scheme.\n", "\n", "As with the midpoint method, this procedure can be generalised to higher orders by using more than the previous two time steps. For each extra time step kept, one gets to cancel out another order in the Taylor series, and thus gain an order of accuracy. The fourth order Adams method, which is analogous to the 4th order RK method we wrote down previously, is\n", "\\begin{equation}\n", "x_{i+4} = x_{i+3} + \\Delta t\\left[\n", "\\frac{55}{24}\\left(\\frac{dx}{dt}\\right)_{t+3} -\n", "\\frac{59}{24}\\left(\\frac{dx}{dt}\\right)_{t+2} +\n", "\\frac{37}{24}\\left(\\frac{dx}{dt}\\right)_{t+1} +\n", "\\frac{3}{8}\\left(\\frac{dx}{dt}\\right)_{t}\\right]\n", "\\end{equation}\n", "\n", "Compared to RK methods of the same order, the Adams method achieves the same accuracy with fewer function evaluations. In the Adams method we only need to compute $dx/dt$ at whole time steps, not at intermediate times as in the midpoint method. The price for this efficiency is that the bookkeeping and memory requirements of the Adams method are greater, because need to keep track of not just the value of the derivative at the current point, but at some number of previous points. In addition, with the Adams method we need to worry about how to start off the integration, because for the $n$th order accurate Adams method, we need at least $n$ previous points before we can use it. One common method for handling this is to use Runge-Kutta to get the first points needed, then switch to the Adams method.\n", "\n", "Here is an example of the Adams method applied to our sample problem." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# We'll keep dt at 0.5, use Adams 4th order method\n", "dt = 0.5\n", "t4 = np.arange(21)*dt\n", "x4 = np.zeros(21)\n", "dxdt4 = np.zeros(4)\n", "\n", "# Note that we need to copy the first 4 points and derivatives from the RK method\n", "for i in range(4):\n", " x4[i] = x3[i]\n", "for i in range(3):\n", " dxdt4[i+1] = dxdt(x4[i])\n", " \n", "# We can now proceed with the Adams method for the remaining steps\n", "for i in range(3, 20):\n", " # Shuffle the stored derivatives\n", " for j in range(3):\n", " dxdt4[j] = dxdt4[j+1]\n", " # Compute the derivative at the current point\n", " dxdt4[3] = dxdt(x4[i])\n", " # Compute the next point\n", " x4[i+1] = x4[i] + dt * \\\n", " (55./24.*dxdt4[3] - 59./24*dxdt4[2] + 37./24.*dxdt4[1] - 3./8.*dxdt4[0])\n", " \n", "# Plot\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label=r'Euler, $\\Delta t = 0.1$')\n", "plt.plot(t1, x1, label=r'Euler, $\\Delta t = 0.5$')\n", "plt.plot(t2, x2, label=r'Midpoint, $\\Delta t = 0.5$')\n", "plt.plot(t3, x3, label=r'RK4, $\\Delta t = 0.5$')\n", "plt.plot(t4, x4, label=r'Adams4, $\\Delta t = 0.5$')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is somewhat instructive to compare the errors more directly:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Make a plot comparing the accuracy of the methods\n", "plt.plot(t, (x-xsol(t))/xsol(t), label=r'Euler, $\\Delta t = 0.1$')\n", "plt.plot(t1, (x1-xsol(t1))/xsol(t1), label=r'Euler, $\\Delta t = 0.5$')\n", "plt.plot(t2, (x2-xsol(t2))/xsol(t2), label=r'Midpoint, $\\Delta t = 0.5$')\n", "plt.plot(t3, (x3-xsol(t3))/xsol(t3), label=r'RK4, $\\Delta t = 0.5$')\n", "plt.plot(t4, (x4-xsol(t4))/xsol(t4), label=r'Adams4, $\\Delta t = 0.5$')\n", "plt.ylim([-0.06, 0.02])\n", "plt.xlabel('$t$')\n", "plt.ylabel('Fractional Error')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clearly RK4 is the most accurate on this graph, but it requires 4 times as many function evaluations at Adams4. Thus a fairer comparison would be between RK4 using a time step of $\\Delta t = 2$ and Adams with $\\Delta t = 0.5$, so both perform the same number of function evaluations. Here's how that looks:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# RK method with a bigger time step, so the number of function evaluations matches Adams4\n", "dt = 2.0\n", "t5 = np.arange(6)*dt\n", "x5 = np.zeros(6)\n", "x5[0] = x0\n", "for i in range(5):\n", " # Compute the k's\n", " k1 = dxdt(x5[i])\n", " k2 = dxdt(x5[i]+dt*k1/2)\n", " k3 = dxdt(x5[i]+dt*k2/2)\n", " k4 = dxdt(x5[i]+dt*k3)\n", " x5[i+1] = x5[i] + dt/6 * (k1+2*k2+2*k3+k4)\n", " \n", "# Plot comparison\n", "plt.plot(t4, (x4-xsol(t4))/xsol(t4), label=r'Adams4, $\\Delta t = 0.5$')\n", "plt.plot(t5, (x5-xsol(t5))/xsol(t5), label=r'RK4, $\\Delta t = 2.0$')\n", "plt.ylim([-0.035, 0.005])\n", "plt.xlabel('$t$')\n", "plt.ylabel('Fractional Error')\n", "leg=plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Stiff Systems\n", "-------------\n", "\n", "Thus far the ODE we have been playing with is a relatively friendly one. Not all ODEs play so nicely. Here is a toy example:\n", "\\begin{equation}\n", "\\frac{dx}{dt} = 99 e^{-t} - 100 x\n", "\\end{equation}\n", "with initial condition $x=2$ at $t=0$. One can immediately verify by calculation that this has the exact solution\n", "\\begin{equation}\n", "x = e^{-t} + e^{-100 t}.\n", "\\end{equation}\n", "\n", "While this is a somewhat contrived example meant to demonstrate the topic, real problems like this occur all the time. The defining characteristic of this system is that there are effectively two solutions that are changing on wildly different time scales. At times $t\\sim 1$, only the $e^{-t}$ term is significant. However, let us see what happens if we try to integrate it with our simple Euler method, even out to $t=1$." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcUAAAFKCAYAAABsJ0SJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuYnHV99/H3dzdHICdCVCSEROsBUAl2QQRFBDnWQiv4\niH0UUdr4ULBo1euCHkDtQezjo9ViS4NStAcNHqqpF4iCUNRyWmxASErNLgLboIQZsgk5kc1+nz9m\nJizLbrJJduaenXm/rmuuue+Z38793ZuQT373/H73LzITSZIEHUUXIElSszAUJUmqMhQlSaoyFCVJ\nqjIUJUmqMhQlSapq2VCMiGsj4omIeGAMbQ+JiFsi4v6IuC0i5jeiRklSc2nZUASuA04bY9tPA1/J\nzNcAnwA+Wa+iJEnNq2VDMTNvB8pDX4uIl0bE9yLi3oj4UUS8svrWYcAt1e1bgbMaWKokqUm0bCiO\nYinwgcz8deAjwN9WX78POLu6/dvAjIiYW0B9kqQCTSq6gEaJiP2AY4GvR0Tt5anV548AV0XE+cDt\nwP8AA42uUZJUrLYJRSq94nWZuXj4G5m5Bngb7AjPszOzv8H1SZIK1jaXTzNzPfBwRLwdICqOqG4f\nEBG1c3EZcG1BZUqSCtSyoRgRXwXuAF4REX0RcQHwv4ELIuI+4EGeHVBzAvBQRPw38ELgLwooWZJU\nsHDpKEmSKlq2pyhJ0u4yFCVJqmq50acHHHBALly4sOgyJElN5N57730yM+ftql3LheLChQvp7u4u\nugxJUhOJiEfG0s7Lp5IkVRmKkiRVGYqSJFW13HeKI9m2bRt9fX1s2bKl6FIabtq0acyfP5/JkycX\nXYokNb22CMW+vj5mzJjBwoULGXIz8JaXmZRKJfr6+li0aFHR5UhS02uLy6dbtmxh7ty5bRWIABHB\n3Llz27KHLEl7orBQjIhpEXF3RNwXEQ9GxMdHaHN+RKyNiBXVx+/uxfH2ruAJql1/b0naE0VePt0K\nnJiZT0fEZODHEXFjZt45rN2yzLy4gPrGVWdnJ69+9at37J977rlceuml4/LZK1asYM2aNZxxxhnj\n8nmS1K4KC8Ws3In86eru5OqjZe9OPn36dFasWFGXz16xYgXd3d2GoiTtpUK/U4yIzohYATwB/CAz\n7xqh2dkRcX9EfCMiDm5wiXXV39/PK17xCh566CEA3vnOd3LNNdcAcOGFF9LV1cXhhx/OFVdcseNn\n7rnnHo499liOOOIIjj76aPr7+7n88stZtmwZixcvZtmyZYX8LpI07n75APznP8Ezmxp3zMws/AHM\nBm4FXjXs9bnA1Or2/wF+OMrPLwG6ge4FCxbkcCtXrnzea43W0dGRRxxxxI7H1772tczM/P73v5/H\nHHNMfvWrX81TTz11R/tSqZSZmQMDA/mmN70p77vvvty6dWsuWrQo77777szM7O/vz23btuU//MM/\n5EUXXTTqsZvh95ek3XbbpzKvmJm5deNefxTQnWPIo6aYkpGZ6yLiNuA04IEhr5eGNLsG+NQoP78U\nWArQ1dW100uwH/+3B1m5Zv3elvwch714Jlf85uE7bTPa5dOTTz6Zr3/961x00UXcd999O16//vrr\nWbp0KQMDAzz++OOsXLmSiODAAw/kqKOOAmDmzJnj+ntIUlMp98LMg2DKPg07ZJGjT+dFxOzq9nTg\nLcB/DWtz4JDdM4FVjauwMQYHB1m1ahXTp0+nXC4D8PDDD/PpT3+aW265hfvvv5/f+I3fYMuWLWSm\no0kltY9SD+z/koYessie4oHAlyOik0o4X5+Z342IT1Dp5i4H/iAizgQGgDJw/t4edFc9ukb77Gc/\ny6GHHspf/uVf8r73vY877riD9evXs++++zJr1ix+9atfceONN3LCCSfwyle+kjVr1nDPPfdw1FFH\nsWHDBqZPn86MGTPYsGFD0b+KJI2vcg+88q0NPWSRo0/vB44c4fXLh2xfBlzWyLrqZfPmzSxevHjH\n/mmnncb73vc+vvjFL3L33XczY8YMjj/+eP78z/+cj3/84xx55JEcfvjhvOQlL+G4444DYMqUKSxb\ntowPfOADbN68menTp3PzzTfz5je/mSuvvJLFixdz2WWX8Y53vKOoX1OSxsfmdbCpBHNf2tDDNsV3\niu1g+/btI76+atWzV4Q/85nP7Ni+7rrrRmx/1FFHceedw6dyVkalSlLLKPdWnvdvbCi2xW3eJEkT\nTC0UG9xTNBQlSc2n1FN5nrOwoYc1FCVJzafcAzPnw+TpDT2soShJaj6lHpjb2OkYYChKkppRubfh\ng2zAUJQkNZvNT8HmcsMH2YCh2DCdnZ0sXrx4x+PKK6/cafvrrruOiy+e8CtmSdLuK9WmYzT+8qnz\nFBuknktHAQwMDDBpkv85JbWAcnXkqZdP28/ChQt58sknAeju7uaEE054Xpu1a9dy9tlnc9RRR3HU\nUUfxk5/8BICPfexjLFmyhFNOOYXzzjuvkWVLUv2UeoBo+HQMsKfYMMNv87Y7t2O75JJL+NCHPsQb\n3vAGHn30UU499dQdd8K59957+fGPf8z06Y0dtixJdVPuhVkHw+RpDT90+4XijZfCL382vp/5olfD\n6Tv/jnBvLp/efPPNrFy5csf++vXrd9wA/MwzzzQQJbWWcjHTMaAdQ7HJTJo0icHBQQC2bNkyYpvB\nwUHuuOOOEcNv3333rWt9ktRwpR541dsKOXT7heIuenSNtnDhQu69915OP/10vvnNb47Y5pRTTuGq\nq67iox/9KAArVqx4zqVYSWoZm8qwZV0hg2zAgTYNU/tOsfa49NJLAbjiiiu45JJLeOMb30hnZ+eI\nP/v5z3+e7u5uXvOa13DYYYdx9dVXN7J0SWqc2j1PC5ijCBCZWciB66Wrqyu7u7uf89qqVas49NBD\nC6qoeO3++0uaQO5bBv+6BC66B+a9fNw+NiLuzcyuXbWzpyhJah7lHogOmHNIIYc3FCVJzaPUA7Pm\nw6SphRzeUJQkNY9yT2GDbKCNQrHVvjsdq3b9vSVNQJmV+54WNMgG2iQUp02bRqlUaruAyExKpRLT\npjX+rhCStNs2lWFrf6E9xbaYpzh//nz6+vpYu3Zt0aU03LRp05g/f37RZUjSru24EXgxd7OBNgnF\nyZMns2jRoqLLkCTtTMFzFKHAy6cRMS0i7o6I+yLiwYj4+AhtpkbEsohYHRF3RcTCxlcqSWqI2nSM\n2cVMx4Biv1PcCpyYmUcAi4HTIuKYYW0uAJ7KzF8DPgt8qsE1SpIapdwLsxfApCmFlVBYKGbF09Xd\nydXH8JEwZwFfrm5/AzgpIqJBJUqSGqlU7HQMKHj0aUR0RsQK4AngB5l517AmBwGPAWTmANAPzB3h\nc5ZERHdEdLfjYBpJmvAyKz3FAgfZQMGhmJnbM3MxMB84OiJeNazJSL3C582ryMylmdmVmV3z5s2r\nR6mSpHra+CRsXV/oIBtoknmKmbkOuA04bdhbfcDBABExCZgFlBtanCSp/nZMx2jTUIyIeRExu7o9\nHXgL8F/Dmi0H3lPdPgf4YbbbDHxJagfl3spzwT3FIucpHgh8OSI6qYTz9Zn53Yj4BNCdmcuBLwH/\nGBGrqfQQzy2uXElS3ZR6IDoro08LVFgoZub9wJEjvH75kO0twNsbWZckqQDlnkogdk4utIym+E5R\nktTmSj2FXzoFQ1GSVLQd0zEMRUlSu9u4Fp552p6iJEk7bgRe8MR9MBQlSUVrgiWjagxFSVKxSj3Q\nManQ1TFqDEVJUrHKPZVA7Cx+iV9DUZJUrHJvUwyyAUNRklSkTCgVvzpGjaEoSSrO07+CbRubYo4i\nGIqSpCLVpmPMtacoSWp3tdUx7ClKktpeuQc6JsOsg4uuBDAUJUlFKvXAnOaYjgGGoiSpSE1yI/Aa\nQ1GSVIza6hhNMkcRDEVJUlE2/BK2bWqaOYpgKEqSilK7Ebg9RUlS22uiJaNqDEVJUjHKPdA5pWmm\nY4ChKEkqSqkH5iyEjs6iK9nBUJQkFaP8cFNNxwBDUZJUhMHBppuOAQWGYkQcHBG3RsSqiHgwIi4Z\noc0JEdEfESuqj8uLqFWSNM42PA4Dm2H/RUVX8hxF3ldnAPhwZv40ImYA90bEDzJz5bB2P8rMtxZQ\nnySpXmrTMbx8WpGZj2fmT6vbG4BVwEFF1SNJaqBS881RhCb5TjEiFgJHAneN8PbrI+K+iLgxIg4f\n5eeXRER3RHSvXbu2jpVKksZFuRc6p8LM+UVX8hyFh2JE7Ad8E/hgZq4f9vZPgUMy8wjgb4Bvj/QZ\nmbk0M7sys2vevHn1LViStPfKvdXpGIXH0HMUWk1ETKYSiP+cmd8a/n5mrs/Mp6vbNwCTI+KABpcp\nSRpvpZ6mu3QKxY4+DeBLwKrM/MwobV5UbUdEHE2l3lLjqpQkjbvBQXjq4aa6vVtNkaNPjwPeDfws\nIlZUX/sjYAFAZl4NnANcGBEDwGbg3MzMIoqVJI2TDWtgYEtT9hQLC8XM/DEQu2hzFXBVYyqSJDVE\nqTmnY0ATDLSRJLWZcvOtjlFjKEqSGqvUA5Omwczmm5puKEqSGqvcC3MWNd10DDAUJUmN1oQ3Aq8x\nFCVJjTM4WF0yqvm+TwRDUZLUSOv7YPtWQ1GSpGa9EXiNoShJapwmXTKqxlCUJDVO+WGYNB1mHFh0\nJSMyFCVJjVPqqXyf2ITTMcBQlCQ1UrkH9l9UdBWjMhQlSY0xuB2e+kXTDrIBQ1GS1Cj9j8H2Z5p2\nkA0YipKkRin3Vp7tKUqS2l4TLxlVYyhKkhqj3AuT94EZLyq6klEZipKkxqhNx4idri9fKENRktQY\n5d6mvedpjaEoSaq/7QNNPx0DDEVJUiP0PwaD2+wpSpLU7DcCrzEUJUn1V2r+OYpQYChGxMERcWtE\nrIqIByPikhHaRER8PiJWR8T9EfHaImqVJO2lci9M2Q/2e2HRlezUpAKPPQB8ODN/GhEzgHsj4geZ\nuXJIm9OBl1UfrwP+rvosSZpIajcCb+LpGFBgTzEzH8/Mn1a3NwCrgIOGNTsL+EpW3AnMjojmXIRL\nkjS62hzFJtcU3ylGxELgSOCuYW8dBDw2ZL+P5wenJKmZbR+AdY80/SAbaIJQjIj9gG8CH8zM9cPf\nHuFHcoTPWBIR3RHRvXbt2nqUKUnaU+segcGBph9kAwWHYkRMphKI/5yZ3xqhSR9w8JD9+cCa4Y0y\nc2lmdmVm17x58+pTrCRpz5QfrjzbUxxdRATwJWBVZn5mlGbLgfOqo1CPAfoz8/GGFSlJ2nu1OYoT\noKdY5OjT44B3Az+LiBXV1/4IWACQmVcDNwBnAKuBTcB7C6hTkrQ3Sj2V6Rj7Nv+VvMJCMTN/zMjf\nGQ5tk8BFjalIklQX5eZfHaOm8IE2kqQWV+qZEJdOwVCUJNXT9m2w7tEJMcgGDEVJUj2texRyuz1F\nSZIo1VbHaP672YChKEmqpwmyZFSNoShJqp9yL0ydCfseUHQlY2IoSpLqpzRxpmOAoShJqqfyxFgd\no8ZQlCTVx8AzldGnE2TkKRiKkqR6WfcI5OCEGWQDhqIkqV7KvZVne4qSpLZXmljTMcBQlCTVS7kH\nps6CffYvupIxMxQlSfVR6oG5E2c6BhiKkqR6KfdMqEunYChKkuphYCv0902oQTZgKEqS6uGpiTcd\nAwxFSVI9lCfW6hg1hqIkafzVpmN4+VSS1PbKPTBt9oSajgGGoiSpHsq9E66XCIaiJKkeSr0TbpAN\njCEUI+KvIybQzEtJUrG2bYH+xybcIBsYW0/xaWB5ROwLEBGnRMRPxuPgEXFtRDwREQ+M8v4JEdEf\nESuqj8vH47iSpDp66hdATsjLp5N21SAz/yQifge4LSK2AhuBS8fp+NcBVwFf2UmbH2XmW8fpeJKk\nequtjjEBL5/uMhQj4iTg96iE4YHABZn50HgcPDNvj4iF4/FZkqQmUZujOLc1L5/+MfCnmXkCcA6w\nLCJOrGtVz/X6iLgvIm6MiMMbeFxJ0p4o9cD0/WH6nKIr2W1juXx64pDtn0XE6cA3gWPrWVjVT4FD\nMvPpiDgD+DbwsuGNImIJsARgwYIFDShLkjSqcs+EHGQDezAlIzMfB06qQy0jHWt9Zj5d3b4BmBwR\nB4zQbmlmdmVm17x58xpRmiRpNKWJOUcR9nCeYmZuHu9CRhIRL6pNB4mIo6nUW2rEsSVJe2DbZljf\nNyEH2cAYLp/WU0R8FTgBOCAi+oArgMkAmXk1le8wL4yIAWAzcG5mZkHlSpJ25alfVJ4naE+x0FDM\nzHfu4v2rqEzZkCRNBLUbge+/qNg69pC3eZMkjZ8dS0ZNzJ6ioShJGj+lHthnLkyfXXQle8RQlCSN\nn/LEvBF4jaEoSRo/E3TJqBpDUZI0Pp7ZBOv/Z8JO3AdDUZI0Xp56uPJsKEqS2l5tOoaXTyVJbW8C\nLxlVYyhKksZHuQf2nQfTZhZdyR4zFCVJ46PUO6G/TwRDUZI0Xso9E/rSKRiKkqTx8MxG2PA4zLWn\nKElqd+XadAx7ipKkdlee+NMxwFCUJI2HHUtGeflUktTuyj2w7wtg6oyiK9krhqIkae+VH57wl07B\nUJQkjYfSxJ+OAYaiJGlvbX0anv7lhJ+OAYaiJGlv7bjnqaEoSWp3tekYXj6VJLU9e4qSJFWVemG/\nF8HU/YquZK8VGooRcW1EPBERD4zyfkTE5yNidUTcHxGvbXSNkqRdKPe0RC8Riu8pXgectpP3Twde\nVn0sAf6uATVJknZHqaclRp5CwaGYmbcD5Z00OQv4SlbcCcyOiAMbU50kaZe2rIeNT7TEIBsovqe4\nKwcBjw3Z76u+JklqBk9VV8dogbvZQPOHYozwWj6vUcSSiOiOiO61a9c2oCxJEjDkRuCGYiP0AQcP\n2Z8PrBneKDOXZmZXZnbNmzevYcVJUtvbMUdxUbF1jJNmD8XlwHnVUajHAP2Z+XjRRUmSqkq9MONA\nmLJv0ZWMi0lFHjwivgqcABwQEX3AFcBkgMy8GrgBOANYDWwC3ltMpZKkEZV7W+bSKRQcipn5zl28\nn8BFDSpHkrS7yj3witOLrmLcNPvlU0lSs9qyHjaubameoqEoSdozOwbZtMbEfTAUJUl7qjYdo0Xm\nKIKhKEnaU+XqxP05rTEdAwxFSdKeKvfAzINgyj5FVzJuDEVJ0p4ptc7qGDWGoiRpz7TQklE1hqIk\nafdtXgebSi01yAYMRUnSnij3Vp5baI4iGIqSpD1RC0V7ipKktlebozhnYaFljDdDUZK0+8o9MHM+\nTJ5edCXjylCUJO2+Ug/Mba2Rp2AoSpL2RIstGVVjKEqSds/mp2BzueUG2YChKEnaXaXadAwvn0qS\n2t2OJaPsKUqS2l2pB4iWm44BhqIkaXeVe2HWwTB5WtGVjDtDUZK0e8qtOR0DDEVJ0u5qwSWjagxF\nSdLYbSrDlnUtOcgGDEVJ0u5o0RuB1xQaihFxWkQ8FBGrI+LSEd4/PyLWRsSK6uN3i6hTklRVat3p\nGACTijpwRHQCXwBOBvqAeyJieWauHNZ0WWZe3PACJUnPV+6B6IA5hxRdSV0U2VM8Glidmb2Z+Qzw\nNeCsAuuRJO1KqQdmzYdJU4uupC6KDMWDgMeG7PdVXxvu7Ii4PyK+EREHN6Y0SdKIyj0te+kUig3F\nGOG1HLb/b8DCzHwNcDPw5RE/KGJJRHRHRPfatWvHuUxJEgCZlfuetuggGyg2FPuAoT2/+cCaoQ0y\ns5SZW6u71wC/PtIHZebSzOzKzK558+bVpVhJanubyrC1355indwDvCwiFkXEFOBcYPnQBhFx4JDd\nM4FVDaxPkjRU7UbgLdxTLGz0aWYORMTFwE1AJ3BtZj4YEZ8AujNzOfAHEXEmMACUgfOLqleS2t6O\n6RiteTcbKDAUATLzBuCGYa9dPmT7MuCyRtclSRpBbTrG7NacjgHe0UaSNFblXpi9ACZNKbqSujEU\nJUljU2rt6RhgKEqSxiKz0lNs4e8TwVCUJI3Fxidh6/qWHnkKhqIkaSzKrX0j8BpDUZK0ay2+ZFSN\noShJ2rVSD0RnZfRpCzMUJUm7Vu6pBGLn5KIrqStDUZK0a6Welr90CoaiJGlXMqH8cMsPsgFDUZK0\nKxvXwjMb7ClKkvTsjcANRUlSu9sxR3FRsXU0gKEoSdq5Ug90TGrp1TFqDEVJ0s6VeyuB2FnoaoMN\nYShKknau3B7TMcBQlCTtTCaUettikA0YipKknXn6V7BtY8svGVVjKEqSRlebjjHXUJQktbva6hhe\nPpUktb1yD3RMhlkHF11JQxiKkqTRlXpgzsK2mI4BhqIkaWfKvW0zyAag0OiPiNOAzwGdwBcz88ph\n708FvgL8OlAC3pGZv2h0nZK0x7Zvg02lyk21N66FjU8O2a7uT9kPTvkzmPnioqt9rsxKKC46vuhK\nGqawUIyITuALwMlAH3BPRCzPzJVDml0APJWZvxYR5wKfAt7R+GolqSoTtqwbOdxG2t781Mif0zEJ\n9p0H+x5QmQf48L/DOdc2VwBt+CVs22RPsUGOBlZnZi9ARHwNOAsYGopnAR+rbn8DuCoiIjOzrpUN\nDgL1PYTGSZ3/KLSWYefqeeeu3u8D0QEdnZXn6ISIyqNo2zYPCbIxhN3gtpE/Z/qcatDNgxccCvse\n/2zw1V6v7U+b/ezvvvYhWPYu+MpZcNLlcNwHm+O81G4E3iZ3s4FiQ/Eg4LEh+33A60Zrk5kDEdEP\nzAWerGdh//H3v8+xv/pqPQ8hqWqQDgYJkg4G6SAjqq89d7/2/mAMaUswGJ2V5x3vd+zYz+pnV14b\n+jMd7DO4kVmD65g52M8+uWnE2rYylf7O2fR3zGZ9x2z6O17F+unV/ee8PosNHbPYHtW/Up+pPkbs\nJD7JSH+FTeu8kvdP/RzH3vwx7vnRTfzt7A+zqWO/cTrLe+bETd/n/cDF3+tn7aQ7CqnhsBfP5Irf\nPLxhxysyFEf6Z9Dwf1qOpQ0RsQRYArBgwYK9Lqxn5ut4bGN7jLRqDU3wL+qmlAw/Nzl8fxe9kee1\nf965Hv7+6D8f5LPRl8/GYDBIZA6Jwep7uX1IVD77MzviL5/9+Y4dn1H7mef+fDBIZw4wubafg2yK\nfVk9+ZX0d85mfccs+juGhlzleWvHtJ2en/G0pWMfPjf7Uh7adBjvXr+UTz75AT4z5095ZHJxly5f\nNLCGbUzmyc55hdXQaFHvK5GjHjji9cDHMvPU6v5lAJn5ySFtbqq2uSMiJgG/BObt7PJpV1dXdnd3\n17d4SaqnR++Cr58Pm8vw1s/C4t8ppo5l76pc2r34nmKOP44i4t7M7NpVuyKnZNwDvCwiFkXEFOBc\nYPmwNsuB91S3zwF+WPfvEyWpaAteB++/HQ4+Gr59IfzbJbBtS+PraKMbgdcUFoqZOQBcDNwErAKu\nz8wHI+ITEXFmtdmXgLkRsRr4Q+DSYqqVpAbbbx68+9vwxg/DvdfBtafCU4807viDg5XpGG00yAYK\nnqeYmTcANwx77fIh21uAtze6LklqCh2dldGo84+Cb70f/v54eNs18PJT6n/sDY/DwGbYf1H9j9VE\nvKONJDW7V5wO778NZh8M//J2+OFfwOD2+h6zNh3Dy6eSpKaz/0vggh/A4nfB7X8F/3Q2bCzV73i1\n1THa7PKpoShJE8Xk6fBbX4Az/wYe+Y/K5dS+Oo22L/VA51SYOb8+n9+kDEVJmmheex5c8H3o6IBr\nT4O7rxn/uzuVeyvfJ3a0V0y0128rSa3ixYthyb/DS0+EGz4C31oCz2wcv88v9bTVPU9rDEVJmqj2\n2R/e+TU48U/gZ1+Ha06CJ1fv/ecODsJTDxuKkqQJpqMDjv8ovPtbsPEJWHoCrPzO3n3mhjUwsKXt\nBtmAoShJreGlJ1bugvOCV8L158FNf1xZy3FPlNpzOgYYipLUOmbNh/NvgKPfD3dcBV8+s7Im4u5q\nwyWjagxFSWolk6bAGX8FZ38JHl8BV78RfvHj3fuMUg9MmgYzXlyfGpuYoShJrejV58Dv/RCmzar0\nGH/yubFP2yj3wpz2m44BhqIkta4XHApLboVD3wo/uLyyFNSW/l3/XBveCLzGUJSkVjZ1Brz9y3Dq\nJ+G/v1cZnfrLB0ZvPzgI5facjgGGoiS1vgh4/e/De74Lz2yCL74F7vvayG3X98H2rYaiJKnFHfL6\nyrSN+V3wr++H734IBrY+t02pfUeegqEoSe1lxgsrixcf90HovrZy79R1jz77fm11jDacowiGoiS1\nn85JcPLH4R3/DKXVldU2Vt9cea/cC5Omw4wDi62xIIaiJLWrQ98KS26DmQfBP50Dt10JT/688n1i\nG07HAENRktrb3JdWFi8+4ly47ZPw85sqS0a1KUNRktrdlH3gt/4O3vrX0DkFDnpt0RUVZlLRBUiS\nmkAEdL0XXvU2mLxP0dUUxlCUJD1r2qyiKyiUl08lSaoqJBQjYv+I+EFE/Lz6PGeUdtsjYkX1sbzR\ndUqS2ktRPcVLgVsy82XALdX9kWzOzMXVx5mNK0+S1I6KCsWzgC9Xt78M/FZBdUiStENRofjCzHwc\noPr8glHaTYuI7oi4MyIMTklSXdVt9GlE3Ay8aIS3/ng3PmZBZq6JiJcAP4yIn2VmzwjHWgIsAViw\nYMEe1StJUt1CMTPfMtp7EfGriDgwMx+PiAOBJ0b5jDXV596IuA04EnheKGbmUmApQFdX1xiXlpYk\n6bmKuny6HHhPdfs9wHeGN4iIORExtbp9AHAcsLJhFUqS2k5RoXglcHJE/Bw4ubpPRHRFxBerbQ4F\nuiPiPuBW4MrMNBQlSXVTyB1tMrMEnDTC693A71a3/wN4dYNLkyS1schsra/gImIt8Mg4fNQBwJPj\n8DmtyHMzOs/N6Dw3o/PcjG68zs0hmTlvV41aLhTHS0R0Z2ZX0XU0I8/N6Dw3o/PcjM5zM7pGnxvv\nfSpJUpWhKElSlaE4uqVFF9DEPDej89yMznMzOs/N6Bp6bvxOUZKkKnuKkiRVtX0oRsRpEfFQRKyO\niOctYRURUyNiWfX9uyJiYeOrLMYYzs0fRsTKiLg/Im6JiEOKqLMIuzo3Q9qdExEZEW0zsnAs5yYi\n/lf1z85ugfdaAAAD/klEQVSDEfEvja6xKGP4f2pBRNwaEf9Z/f/qjCLqbLSIuDYinoiIB0Z5PyLi\n89Xzdn9EvLZuxWRm2z6ATir3Un0JMAW4DzhsWJvfB66ubp8LLCu67iY6N28G9qluX+i5eV67GcDt\nwJ1AV9F1N8u5AV4G/Ccwp7r/gqLrbqJzsxS4sLp9GPCLoutu0Lk5Hngt8MAo758B3AgEcAxwV71q\nafee4tHA6szszcxngK9RWetxqKFrP34DOCkiooE1FmWX5yYzb83MTdXdO4H5Da6xKGP5cwPwZ8Bf\nAVsaWVzBxnJufg/4QmY+BZCZIy4I0ILGcm4SmFndngWsaWB9hcnM24HyTpqcBXwlK+4EZlcXkxh3\n7R6KBwGPDdnvq742YpvMHAD6gbkNqa5YYzk3Q11A5V9y7WCX5yYijgQOzszvNrKwJjCWPzcvB14e\nET+prpV6WsOqK9ZYzs3HgHdFRB9wA/CBxpTW9Hb376M9Vsi9T5vISD2+4cNxx9KmFY35946IdwFd\nwJvqWlHz2Om5iYgO4LPA+Y0qqImM5c/NJCqXUE+gcnXhRxHxqsxcV+faijaWc/NO4LrM/H8R8Xrg\nH6vnZrD+5TW1hv093O49xT7g4CH783n+5YodbSJiEpVLGjvr5reKsZwbIuItVBaOPjMztzaotqLt\n6tzMAF4F3BYRv6DyHcjyNhlsM9b/p76Tmdsy82HgISoh2erGcm4uAK4HyMw7gGlU7v3Z7sb099F4\naPdQvAd4WUQsiogpVAbSLB/WZujaj+cAP8zqN78tbpfnpnqJ8O+pBGK7fC8Euzg3mdmfmQdk5sLM\nXEjl+9Yzs7IKTKsby/9T36YySKu2VurLgd6GVlmMsZybR6muIBQRh1IJxbUNrbI5LQfOq45CPQbo\nz8zH63Ggtr58mpkDEXExcBOVkWHXZuaDEfEJoDszlwNfonIJYzWVHuK5xVXcOGM8N/8X2A/4enXs\n0aOZeWZhRTfIGM9NWxrjubkJOCUiVgLbgY9mZTm5ljbGc/Nh4JqI+BCVy4Pnt8M/wiPiq1Qupx9Q\n/T71CmAyQGZeTeX71TOA1cAm4L11q6UNzrckSWPS7pdPJUnawVCUJKnKUJQkqcpQlCSpylCUJKnK\nUJQkqcpQlCSpylCUWlREzI+IdxRdhzSRGIpS6zqJyhp1ksbIO9pILSgi3gB8B1gHbAB+u3rzbUk7\nYShKLSoivgd8JDMfKLoWaaLw8qnUul5BZVkmSWNkKEotKCLmUlleZ1vRtUgTiaEotaZF1GkRVqmV\nGYpSa/ovKmvTPRARxxZdjDRRONBGkqQqe4qSJFUZipIkVRmKkiRVGYqSJFUZipIkVRmKkiRVGYqS\nJFUZipIkVf1/mA3tzLR88kwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define the ODE\n", "def dxdt(t, x):\n", " return 99.0*np.exp(-t) - 100.0*x\n", "\n", "# Here's the exact solution\n", "def xsol(t):\n", " return np.exp(-t) + np.exp(-100.0*t)\n", "\n", "# Integrate using a simple Euler method with dt = 0.1\n", "dt = 0.1\n", "x0 = 2.0\n", "t = np.arange(11)*dt\n", "x = np.zeros(11)\n", "x[0] = x0\n", "for i in range(10):\n", " x[i+1] = x[i] + dt*dxdt(i*dt, x[i])\n", " \n", "# Plot the numerical and exact solutions on top of each other\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label='Euler')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='upper left')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Disaster! Do we do any better with something more sophisticated like RK4?" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbMAAAFKCAYAAACXcLFWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG1pJREFUeJzt3X2QXXWd5/H3N92dR5KQh57hIYSOUw4o7DZgwo44KoqM\nDI5QW+UuuuPuulBShQ/FMg9bWO7KjiMW5YC6ilsaHIsd15WAu7UTLdBQjK4zs8CmGUMMYbC4nQSa\nBxPuzSMhJN392z9u3yZPndzu9LnnnnPfr6que/re0/d8+1dJPvmd872/EyklJEkqshl5FyBJ0qky\nzCRJhWeYSZIKzzCTJBWeYSZJKjzDTJJUeG0XZhHxnYjYHhGbmtj3jyJic0RsjIhHIuLco15fEBEv\nRMTd2VUsScpb24UZcC9wVZP7/gJYmVL6p8APgC8d9fqfA/9n+kqTJLWjtguzlNLPgdrhz0XEb0XE\njyPiiYj424g4f2zfn6aU9o/t9hiw7LCfeRvwm8C6FpUuScpJ24XZBFYDn04pvQ34E+C/HmefG4CH\nACJiBnAX8Kctq1CSlJvuvAs4mYg4DbgMeCAiGk/POmqfjwIrgXePPfUJ4MGU0vOH/YwkqaTaPsyo\nzx53pZQuOt6LEfE+4LPAu1NKr489/XbgnRHxCeA0YGZE7Esp3dqSiiVJLdX2pxlTSnuALRHxLwCi\nrn9s+2LgW8A1KaXth/3MH6aUlqeU+qiflvwrg0ySyqvtwiwivg88CpwXEUMRcQPwh8ANEfEk8BRw\n7djuf0F95vVARGyIiLW5FC1JylV4CxhJUtG13cxMkqTJMswkSYXXVt2MS5cuTX19fXmXIUlqE088\n8cQrKaXek+3XVmHW19fHwMBA3mVIktpERGxrZj9PM0qSCs8wkyQVnmEmSSq8trpmdjyHDh1iaGiI\nAwcO5F1KS82ePZtly5bR09OTdymS1PbaPsyGhoaYP38+fX19dMqiwSklqtUqQ0NDrFixIu9yJKnt\ntf1pxgMHDrBkyZKOCTKAiGDJkiUdNxuVpKlq+zADOirIGjrxd5akqSpEmOWtq6uLiy66aPzrjjvu\nmLb33rBhAw8++OC0vZ8kdaK2v2bWDubMmcOGDRsyee8NGzYwMDDA1Vdfncn7S1IncGY2Rbt37+a8\n887jmWeeAeAjH/kI99xzDwA33XQTK1eu5IILLuC2224b/5n169dz2WWX0d/fz6WXXsru3bv53Oc+\nx5o1a7joootYs2ZNLr+LJE2rndvgiXvh1WrLDunMrAmvvfYaF130xo2uP/OZz3Dddddx991387GP\nfYybb76ZnTt38vGPfxyA22+/ncWLFzMyMsIVV1zBxo0bOf/887nuuutYs2YNq1atYs+ePcydO5fP\nf/7zDAwMcPfdd+f160nS9HruUfjhzbD8Mpi3pCWHLFSY/dkPn2Lzi3um9T3fetYCbvvgBSfcZ6LT\njFdeeSUPPPAAn/zkJ3nyySfHn7///vtZvXo1w8PDvPTSS2zevJmI4Mwzz2TVqlUALFiwYFp/D0lq\nG9UKxAxY1NeyQ3qa8RSMjo7y9NNPM2fOHGq1GgBbtmzhzjvv5JFHHmHjxo184AMf4MCBA6SU7FCU\n1BlqFVh4DnTPbNkhCzUzO9kMqtW+8pWv8Ja3vIUvfvGLXH/99Tz66KPs2bOHefPmsXDhQn7961/z\n0EMPcfnll3P++efz4osvsn79elatWsXevXuZM2cO8+fPZ+/evXn/KpI0fWqDsOS3WnpIZ2ZNaFwz\na3zdeuut/OpXv+Lb3/42d911F+985zt517vexRe+8AX6+/u5+OKLueCCC7j++ut5xzveAcDMmTNZ\ns2YNn/70p+nv7+fKK6/kwIEDvOc972Hz5s02gEgqh5SgOgiLWxtmhZqZ5WVkZOS4zz/99NPj21/+\n8pfHt++9997j7r9q1Soee+yxY55fv379qRUoSe1ifxVe3w2L39TSwzozkyRNn2ql/uhpRklSYdXG\nwqzFpxkNM0nS9KlWILpg0bktPaxhJkmaPrUKnL4culp7L0bDTJI0faqVll8vA8NMkjRdUqp/xqzF\n18vAMGtK4xYwF154IR/84AfZtWsXAFu3buXCCy8c3++ee+7hkksuYefOnePP3XnnnUQEr7zySsvr\nlqSW2rcdDu5zZtauGmszbtq0icWLF/ONb3zjmH2++93v8vWvf51169axaNEiAJ5//nkefvhhli9f\n3uqSJan1cupkBMNs0t7+9rfzwgsvHPHc/fffzx133MG6detYunTp+PO33HILX/rSl1yTUVJnGP+M\nWWs/MA2G2aSMjIzwyCOPcM0114w/t23bNj71qU+xbt06zjjjjPHn165dy9lnn01/f38epUpS69UG\nYUY3LGz92ahiLWf10K3w8i+n9z3P+Cfw+3eccJfG2oxbt27lbW97G1deeeX4a729vSxevJj777+f\n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\nZ5hJkgrv/wPtEDAttLX8iQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Same problem, using 4th order Runge-Kutta\n", "xrk = np.zeros(11)\n", "xrk[0] = x0\n", "for i in range(10):\n", " k1 = dxdt(i*dt, xrk[i])\n", " k2 = dxdt((i+0.5)*dt, xrk[i]+dt*k1/2)\n", " k3 = dxdt((i+0.5)*dt, xrk[i]+dt*k2/2)\n", " k4 = dxdt(i+dt, xrk[i]+dt*k3)\n", " xrk[i+1] = xrk[i] + dt/6 * (k1+2*k2+2*k3+k4)\n", "\n", "# Plot\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, xrk, label='RK4')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='upper left')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Even worse!\n", "\n", "The problem is that this system is what is called stiff. The natural timescale for the $e^{-100t}$ part of the solution is $0.01$, and attempting to take a time step much bigger than these results in numerical junk. The problem is that the part of the solution that we actually care about near $t=1$ is changing on a vastly different time scale than the part that is causing our numerical problems. This is the chief characteristic of stiff systems: they mix together a very wide range of scales. Using a method like Euler or RK4, the time step is dictated by the shortest time scale, which may make it impossible to explore the behaviour on longer time scales.\n", "\n", "To come up with a strategy for dealing with this, let us first understand why our simple Euler method and its more sophisticated cousin failed. For simplicitly, let us consider one of the easiest ODEs to solve:\n", "\\begin{equation}\n", "\\frac{dx}{dt} = -c x\n", "\\end{equation}\n", "for some constant $c$. With a simple Euler method, the update step is\n", "\\begin{equation}\n", "x_{i+1} = x_i + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_i} = (1 - c\\Delta t) x_i.\n", "\\end{equation}\n", "Thus every iteration just multiplies by $(1 - c\\Delta t)$. If we take $N = t / \\Delta t$ steps to advance up to time $t$, starting with $x_0 = 1$, then the solution is\n", "\\begin{equation}\n", "x_N = (1 - c\\Delta t)^N = (1 - c\\Delta t)^{t/\\Delta t}.\n", "\\end{equation}\n", "In the limit $\\Delta t \\rightarrow 0$, this limits to\n", "\\begin{equation}\n", "x(t) = e^{-c t},\n", "\\end{equation}\n", "which is the correct answer. However, for finite $\\Delta t$, we can see that the behaviour is going to depend critically on whether $\\Delta t > 1/c$ or $\\Delta t < 1/c$. If $\\Delta t > 1/c$, then the quantity in parentheses is negative, and the solution will oscillate between positive and negative every time step. If $\\Delta t > 2/c$, then the quantity in parentheses is negative and has an amplitude $>1$, so the amplitude gets larger every time step. This is the basic reason that our solution blew up, and it is a classic example of numerical instability." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implicit Methods for Stiff Problems\n", "\n", "Now that we understand why the Euler method fails, can we do better? The answer is that we can, by using an implicit rather than an explicit method. The methods we have used thus far are explicit, in that they are defined in terms of an explicit formula for $x_{i+1}$ in terms of $x_i$ and $(dx/dt)_{t_i}$, things that are known at the previous time step. However, that's not the only possible choice. Here is an alternative differencing scheme for our trivial problem:\n", "\\begin{equation}\n", "x_{i+1} = x_i + \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}}.\n", "\\end{equation}\n", "This is called the backwards Euler difference formula. It differs from the standard forwards Euler we have been using only in that we have chosen to evaluate the derivative at time $t_{i+1}$ instead of $t_i$. Of course we don't know this derivative in advance, which is why this method is called implicit: it gives $x_{i+1}$ only implicitly rather than explicitly.\n", "\n", "In this very simple case, we can in fact manipulate the expression above analytically to get an explicit formula for $x_{i+1}$:\n", "\\begin{eqnarray*}\n", "x_{i+1} & = & x_i - c \\Delta t \\, x_{i+1} \\\\\n", "x_{i+1} & = & \\frac{x_i}{1 + c \\Delta t}\n", "\\end{eqnarray*}\n", "If we use this scheme $N$ times to advance to time $t$, the solution we obtain will be\n", "\\begin{equation}\n", "x_N = \\left(\\frac{1}{1+c\\Delta t}\\right)^{t/\\Delta t}.\n", "\\end{equation}\n", "\n", "In the limit $\\Delta t \\rightarrow 0$, this is completely identical to our forwards Euler formula, but for finite $\\Delta t$ is has a crucial difference. Here the quantity in parenthesis is strictly bounded between 0 and 1, and thus no matter what power we raise it to, we are guaranteed that the solution will not blow up. That is not to say that we are guaranteed it will be accurate. There may still be error compared to the exact solution, and if we choose $\\Delta t$ too large it can be fairly bad, but at least we are guaranteed that the solution remains bounded and does not run away to infinity.\n", "\n", "The backwards Euler method is the simplest example of a class of methods called backward difference methods. It is first order accurate, and by using the same trick of Taylor expansion, one can use the Adams-type approach to derive backward difference methods of higher order. Our first-order method is\n", "\\begin{equation}\n", "x_{i+1} - x_i = \\Delta t \\left(\\frac{dx}{dt}\\right)_{t_{i+1}},\n", "\\end{equation}\n", "and here is the fourth order backward difference method:\n", "\\begin{equation}\n", "x_{i+4} - \\frac{48}{25} x_{i+3} + \\frac{36}{25} x_{i+2} - \\frac{16}{25} x_{i+1} +\n", "\\frac{3}{25} x_i = \\frac{12}{25}\\Delta t\\left(\\frac{dx}{dt}\\right)_{t_{i+4}}\n", "\\end{equation}\n", "As with Adams4, this requires 4 starting points to begin. One way of getting them, since we cannot use RK for stiff problems, is to use 1st order (backwards Euler) to generate the first point, then the 2nd order formula for the next point, and so on, until we have enough points to use the order we want.\n", "\n", "There is one more important point to make about implicit methods like this: unlike in our trivial example, one cannot usually substitute in for $dx/dt$ at the new time and invert the problem analytically to get an explicit formula for $x$ at the new time. This is certainly the case for our original motivating example, where substituting in the right hand side produces a transcendental equation. Instead, one usually has to solve the algebraic equation in the backwards difference formula numerically, using a method like Brent's method. Here is an example of applying the 1st order backward difference method to our stiff system." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nB4g/EvJsmn/6AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set up is the same as for forward Euler\n", "t = np.arange(11)*dt\n", "x = np.zeros(11)\n", "x[0] = x0\n", "\n", "# We'll need Brent's method here, so import it, \n", "# and define the function whose roots we need to find\n", "from scipy.optimize import brentq\n", "def backdiff(xnew, xlast, t):\n", " return xnew - xlast - dt*dxdt(t, xnew)\n", "\n", "# Now we integrate\n", "for i in range(10):\n", " # Use brent's method to get the new value of x\n", " x[i+1] = brentq(backdiff, 0, x[i], args=(x[i], (i+1)*dt))\n", " \n", "# Plot the numerical and exact solutions on top of each other\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, x, label='Backwards Euler')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$x$')\n", "leg=plt.legend(loc='upper right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The backwards Euler method successfully deals with this problem. The price is that there are many more function evaluations involved than for an explicit method, since we need to perform lots of function calls in order to solve the implicit step." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Error Control and Adaptivity\n", "\n", "Thus far all the methods we have used have employed fixed time steps. However, this presents an obvious problem: how we pick the time step? The answer is that we shouldn't. We should let the computer pick it for us.\n", "\n", "Here is a very simple way of doing this, called step doubling: using a method like Runge-Kutta, take a step of size $\\Delta t$, and then take two steps of size $\\Delta t/2$, and compare the results. If they differ by less than some tolerance that is considered acceptable, accept the result of the two steps of size $\\Delta t/2$ and go on. If not, go back to the beginning and try two time steps of size $\\Delta t/4$, and compare them to the results of one time step of size $\\Delta t/2$. If the error is acceptable, advance the solution by $\\Delta t/2$, and repeat. If not, try again with an even smaller time step, and so on until an acceptable step is found. To prevent this from being a one-way ratchet that only ever decreases the time step, if the first attempt at size $\\Delta t$ is successful, increase the time step by some small amount, say 10%. For a method like Adams, you can do much the same thing, but the bookkeeping is quite a bit more of a nuisance due to the need for some number of time steps of the same size for the magical error cancellations to work out.\n", "\n", "One can also be quite a bit more sophisticated about this. For RK, an interesting thing to note is that for some higher order RK formulae, if you evaluate the derivative at exactly the same points, but use different weighting coefficients, you get a lower order RK formula. Why would you want to do that? The reason is that the difference between the higher and lower order RK formula is an excellent estimate of the error, one that can be computed without needing to evaluate the derivatives at any additional points. RK formulae of this type are called embedded RK formulae.\n", "\n", "We will not implement our own error control here, because it is a bunch of tedious bookkeeping. Fortunately, many methods of this sort have been implemented in python in the standard scipy library. Essentially all the available methods have adaptive time stepping, and many have automatic detection of unstable behaviour; if such behaviour is detected, the algorithm automatically switches to an implicit method suitable for stiff problems." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solving ODEs in Python\n", "\n", "ODEs in python can be solved via the ODE class. Usage proceeds in a few steps. One first provides the function to be integrated, and sets the integration method. Then one sets the initial value. Finally, one can integrate. Here is an example using our logistic equation." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nu/lUK0pKfbcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define the function dxdt for the logistic equation; note that\n", "# the function has to take two arguments, t and x\n", "r = 1.0\n", "def dxdt(t, x):\n", " return r*x*(1-x)\n", "\n", "# Here is the exact solution\n", "def xsol(t):\n", " return 1.0 / (1.0+(1.0/x0-1)*np.exp(-r*t))\n", "\n", "# Set up the integrator, using the method 'lsoda' -- an Adams-type method\n", "from scipy.integrate import ode\n", "integrator = ode(dxdt).set_integrator('lsoda')\n", "\n", "# Set the initial conditions\n", "x0 = 0.1\n", "t0 = 0\n", "integrator.set_initial_value(x0, t0)\n", "\n", "# Now integrate\n", "dt = 0.5\n", "t = np.arange(21)*dt\n", "xlsoda = np.zeros(21)\n", "xlsoda[0] = x0\n", "for i in range(20):\n", " xlsoda[i+1] = integrator.integrate(integrator.t+dt)\n", " \n", "# Plot solution versus exact solution\n", "plt.plot(t, xsol(t), label='Exact')\n", "plt.plot(t, xlsoda, label='LSODA')\n", "plt.xlabel(r'$t$')\n", "plt.ylabel(r'$x$')\n", "leg = plt.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The accuracy of the method is very good:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot error\n", "plt.plot(t, (xlsoda-xsol(t))/xsol(t))\n", "plt.xlabel(r'$x$')\n", "lab=plt.ylabel('Fractional error')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Beyond the Library\n", "\n", "A method like LSODA should usually be your first go-to, but it's not the end of the story. There are plenty of problems where more specialised integrators are desirable. We won't go over all of them, but one application that is particularly important in astrophysics is orbits, or more generally conservative systems. To see why, let's consider another simple ODE, one that describes the orbit of a point mass in a point gravitational potential.\n", "\n", "To be precise, suppose we have an object of mass $M_0$ at the origin, and a second test mass located at a position $\\mathbf{x}_0$ traveling with velocity $\\mathbf{v}_0$ at time 0. The test mass accelerates in the gravitational potential of the first mass, so its equation of motion is\n", "\\begin{equation}\n", "\\frac{d^2}{dt^2} \\mathbf{x} = -\\frac{G M_0}{|\\mathbf{x}|^3} \\mathbf{x}.\n", "\\end{equation}\n", "To make life easy, we will choose units such that $G M_0 = 1$, so the equation we want to solve is\n", "\\begin{equation}\n", "\\frac{d^2}{dt^2} \\mathbf{x} = -\\frac{\\mathbf{x}}{|\\mathbf{x}|^3},\n", "\\end{equation}\n", "subject to the initial conditions $\\mathbf{x} = \\mathbf{x_0}$, $(d/dt)\\mathbf{x} = \\mathbf{v}_0$ at $t = 0$. Without loss of generality we can choose our coordinate system so that the orbit is entirely in the $x-y$ plane.\n", "\n", "Let us first solve this equation with the standard library. To do this, we must first rewrite it as a system of first-order ODEs:\n", "\\begin{equation}\n", "\\frac{d}{dt} \\left(\n", "\\begin{array}{c}\n", "x \\\\\n", "y \\\\\n", "v_x \\\\\n", "v_y \n", "\\end{array}\n", "\\right) =\n", "\\left(\n", "\\begin{array}{c}\n", "v_x \\\\\n", "v_y \\\\\n", "-\\frac{x}{(x^2+y^2)^{3/2}} \\\\\n", "-\\frac{y}{(x^2+y^2)^{3/2}}\n", "\\end{array}\n", "\\right).\n", "\\end{equation}\n", "We can now define a function that returns the derivatives." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Define a fucntion that returns the derivatives; it takes t and an array of 4 quantities\n", "# as inputs, and returns an array of 4 derivatives as outputs.\n", "def f(t, q):\n", " # q[0] = x, q[1] = y, q[2] = v_x, q[3] = v_y\n", " dqdt = np.zeros(4)\n", " dqdt[0] = q[2]\n", " dqdt[1] = q[3]\n", " dqdt[2] = -q[0] / (q[0]**2 + q[1]**2)**(3./2.)\n", " dqdt[3] = -q[1] / (q[0]**2 + q[1]**2)**(3./2.)\n", " return dqdt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are in a position to integrate." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc4AAAFACAYAAAA1XJwYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VfX9x/HXJ5swwgp7bxmCkoIVxC2gVWyrVqvW1VJX\nrbW2tbWt1lHt9FertaXuUXErVlERcaEIAUGWQAgrskIYCdnj+/vjHtIAIcmFe++5uff9fDzuI+ee\ne+7N+3JJ3jnre8w5h4iIiDRNgt8BREREmhMVp4iISBBUnCIiIkFQcYqIiARBxSkiIhIEFaeIiEgQ\nVJwiIiJBUHGKiIgEQcUpIiIShCS/A/ihY8eOrk+fPn7HEBGRKLFw4cIdzrnMpiwbl8XZp08fsrOz\n/Y4hIiJRwsw2NHVZbaoVEREJgopTREQkCCpOERGRIKg4RUREgqDiFBERCYKKU0REJAgqThERkSBE\nRXGa2aNmtt3Mlh3icTOz+80sx8y+MLNj6zx2mZmt8W6XRS61iIjEo6goTuBxYFIDj08GBnq3qcBD\nAGbWHrgNGAuMAW4zs3ZhTSoiInEtKkYOcs59aGZ9GlhkCvCkc84B88ysrZl1BU4CZjnndgKY2SwC\nBfxseBOLRLfyqmq27ilj085S8naVsHl3KQXFFewpraS8qobKau9W5UhMMFKSEshokUy79GQy0lNo\nn55Ml4wW9GjXgr4dW9IyNSp+VYhEheby09Ad2FTnfp4371DzD2JmUwmsrdKrV6/wpBSJgMrqGrLX\n7+LDNfl8uraAxZt2+5KjX2ZLJgzM5MRBmYzt1570lOby60TkyDSX/+lWzzzXwPyDZzo3DZgGkJWV\nVe8yItHEOceijbt4fkEery35irLKmqCe37N9C3q0TadHuxZ0bduCjq1SyGiRTGpSIilJRkpiIkmJ\nRnWNo6KqhsKySnYVV7CzpJLdJRVs2VPGpp0l5OYXU1F98PfOzS8mN7+Yxz9Zf9Bjk4d34bzRPThx\nUCZJidGyR0gkNJpLceYBPevc7wFs9uafdMD89yOWSiSEtu4p4/FP1vPY3HWUVzVckiN7tuXEQZmM\n69+Bo3u0pUVKYoRSBtTUOFZuLeTD1Tv4aE0+n6wt2O/xmcu2MnPZ1v3mnT2yG9ed3J8hXdpEMqpI\nyFlgt6H/vH2c/3XODa/nsbOA64EzCRwIdL9zbox3cNBCYN9RtouA0fv2eR5KVlaW09VRxG+7iit4\ncE4OD3+87pDLDOzUiguyejJlVDc6tUmLYLrDt7e8ijeXbuHF7Dzmrz/0j+LJgzP5+aQhHNVVRSr+\nM7OFzrmsJi0bDcVpZs8SWHPsCGwjcKRsMoBz7p9mZsADBA78KQGucM5le8+9EviV91J3O+cea+z7\nqTjFD845Zi7byq2vLGVXSWW9y0yd0I/vfb03PdqlRzhdeBWXV/Hcgk08MCeHncUV9S5z65lHcfm4\nPiRr0674oNkVZ6SpOCVSamocT83bwG0zltf7+FXj+3LdyQNo3zIlwsn8VVldwwvZedwzcyVFZVUH\nPf6drJ786syjyEhP9iGdxCMVZyNUnBJOzjn+M38jt75y8Hgew7q14a5zh3NML51uXNfGghLufGMF\ns1ZsO+ix74/vy80TB5OWHNn9uBJfVJyNUHFKOCz7ag/fe3T+QZsiTxjYkd9/cwQ928fW5tdwKamo\n4q/vrK533++fzx/Jt4/tTmDvjUjoqDgboeKUUKmoquG3ry1j+oJN+80f2bMtf7/wGHp1UFkeicKy\nSm5/bTkvf/7VfvOP7dWWf38viw6tUn1KJrFGxdkIFaccqfU7ijnngY8pPGD/3COXZXHqUZ19ShXb\n1u0o5qrHF5C7o3i/+f/+XhanD9W/uRwZFWcjVJxyuN5evpUfPrVwv3nfPKY793xrhPbBRYhzjoc+\nWMsf31q13/wfnTKAm04fpM24clhUnI1QcUqwHv14HXf8d8V+8/524SimjKp3hEeJkFVbi/jG3z+i\nsvp/v8fOHdWNP50/Uqe1SFBUnI1QcUpTPfxRLne9sXK/ebN+MoGBnVv7lEjqs6e0kosfnseyrwpr\n500YlMm/vzea1CRtCZDGqTgboeKUxhy4htmxVQozfzyBzNY6GCWaVVTV8OPpn+833N83ju7K/Rce\nQ0KCNuHKoak4G6HilEM5cB9mx1apvHXjCXTU0ZvNSnWN46fPL+bVxZtr5/1wQj9umTxE+0ClXirO\nRqg45UA52/dy2l8/qL2fkpTAx784mU6tm8f4sFK/iqoaLn9s/n6D0GvftNRHxdkIFafsU1JRxUl/\nep/tReW18975yQQGaR9mTCkqq2Ty3z4ib1dp7bwPfnYSvTu09DGVRBMVZyNUnALw57dX8cCcnNr7\nD118LJNHdPUxkYTbhoJiTvzT+7X3R/Zsy0tXf13XDBUVZ2NUnPHtwM2ylxzXizunDNe+rzjyyud5\n/OS5JbX3/3L+SL49uoePicRvKs5GqDjjU02N49JHP2Nuzv/2dy357Rm6AkecqqlxXPH4Aj5YnV87\n74vbz6BNmv4/xKNgilPbJyQuLNywi36/erO2NB/47jGsv/cslWYcS0gwnrhyDB/87KTaeUff/g5P\nfLLet0zSPGiNU2LelY8v4L0vtwPQL7Ml79w4Qfu05CB3vL6CR+f+74osy343kVapST4mkkjSptpG\nqDjjw6adJZzwxzm195+6agwnDMz0MZFEu692lzLu3vdq7z/43WM562gdMBYPtKlW4t6Dc3JqSzMt\nOYFVd01SaUqjurdtwfp7z+KiMb0AuO4/i/jmP+YSjysYcmha45SYUlVdw7Db3qa8qgaAO88dzqXH\n9fY5lTRHKzYXcub9H9Xen/fLU+mSoQExYpXWOCUubSwoYcCtM2tL87NfnarSlMM2tFsb1tw9mbTk\nwK/J4+6ZzasHXFBb4pOKU2LC89mbmPCnwKbZIV1as+6eM+ncRmsHcmSSExP48s7J/GziYABufG4x\nVz6+wOdU4jcVpzR7Vz2+gJ+/+AUAv/nGUN66cYIGM5CQuu7kAbx5wwkAvPfldvrc8gaV1TU+pxK/\nREVxmtkkM1tlZjlmdks9j99nZou922oz213nseo6j82IbHLxU3WNo88tbzDbO9Xk7RsncNX4vj6n\nklg1tFsbVtwxsfb+wFtnsmVPaQPPkFjle3GaWSLwIDAZGApcZGZD6y7jnPuJc26Uc24U8Hfg5ToP\nl+57zDl3TsSCi6/2lFTS/1dv1t5fccdEBnfRwOwSXukpSay/9yyGeP/Xvn7Pe8zLLWjkWRJrfC9O\nYAyQ45zLdc5VANOBKQ0sfxHwbESSSVTK2V7EyDveAQLXy1x3z5mkp+hEdYmct26cwA2nDADgwmnz\neOazDT4nkkiKhuLsDmyqcz/Pm3cQM+sN9AXeqzM7zcyyzWyemZ17qG9iZlO95bLz8/MPtZhEuY/W\n5HPaXz8E4OyR3cj+9Wnanym+uOmMwfzzktEA3PrKMu6d+aXPiSRSoqE46/utd6iTSy8EXnTOVdeZ\n18s79+a7wP+ZWf/6nuicm+acy3LOZWVm6kT45uilhXlc+sh8AH591lH8/aJjfE4k8W7S8C68fv14\nAP75wVp++JTOD48H0VCceUDPOvd7AJsPseyFHLCZ1jm32fuaC7wP6LdpDHps7jp++kLgMlD/vGQ0\n3z+hn8+JRAJG9Mjgo5+fDMDby7cx8b4PfU4k4RYNxbkAGGhmfc0shUA5HnR0rJkNBtoBn9aZ187M\nUr3pjsA4YEVEUkvE/O3dNfzu9cDH+tzU45g0vIvPiUT217N9Okt+ewYAq7YVkXXXLJ8TSTj5XpzO\nuSrgeuBtYCXwvHNuuZndYWZ1j5K9CJju9h8j8Cgg28yWAHOAe51zKs4Ycs+bK7nv3dUAvH79eMb2\n6+BzIpH6ZaQns/KOSQDs2FvBKO8ANok9GqtWotY9M1fyrw9yAXj3pgkM6KTTTST6lVdVM/jXbwHQ\nvmUKi35zus+JpCk0Vq00e3+fvaa2NGf/9ESVpjQbqUmJrLorsOa5s7iCrLve9TmRhJqKU6LOU/M2\n8JdZgc2zs34ygf6ZrXxOJBKc1KREvrxz32bbch0wFGNUnBJVZizZzG9eXQbAa9eNY2BnrWlK85SW\nnFi7z3PVtiKu0uDwMUPFKVFjXm4BNzz7OQDPfH8sI3u29TmRyJFpkZLIktsCR9vO/nI798xc6XMi\nCQUVp0SFdTuKuXDaPAD+ftExjBvQ0edEIqGR0SKZj38ROM/zXx/k8uz8jT4nkiOl4hTf7S2v4uQ/\nvw/AzyYO5uyR3fwNJBJiPdqlM+P6cQD88uWlfLpWA8M3ZypO8VVNjWP4bW8DcOqQTlx38gCfE4mE\nx9E92vKvSwNj217073nk7SrxOZEcLhWn+GrIbwLnuyUnGo9c/jWf04iE18RhXWqvqjL+D3OoqNLF\nsJsjFaf45qbnF1NRHfjFserOyT6nEYmMm84YzNCubQAY9OuZPqeRw6HiFF/MXLqFlxd9BcCS284g\nIUGXBpP48cYN42unr9RpKs2OilMibnthGdc8swgInKuZ0SLZ50QikWVmrLhjIgDvfbmdlxbm+ZxI\ngqHilIhyzjHm97MBuOGUATpXU+JWekoSM398AgA/fWEJX+0u9TmRNJWKUyLqlL98AECbtCRuOmOw\nz2lE/HVU1zbcMnkIAOPufY94vOhGc6TilIiZPn8j63YUA/C5d+1CkXh39Yn9aZ2aBMC5//jE5zTS\nFCpOiYiCveXc8vJSAN776Ykk6mAgkVqf/zZw6bElm3bzxhdbfE4jjVFxSkSM9i6tdMMpA+inq52I\n7CcpMaH2SNvr/rOIorJKnxNJQ1ScEna3z1heO639miL1G9Ytg0uO6wXAiNvf8TmNNETFKWGVm7+X\nxz9ZD8AXt2u/pkhD7jp3RO30Ix+v8zGJNETFKWG17yjav5w/kjZpOl9TpDHzfnkqAHf+dwV7SrXJ\nNhqpOCVsfv3q0trpb4/u4WMSkeajS0YaPzihLwAjf6dNttFIxSlhsWNvOU/PC1x3cPnvJvqcRqR5\nufWsobXTzy3Q9TujjYpTwiLLO4r2lslDaOmdoyYiTffRzwMXv/7FS0t1FZUoExXFaWaTzGyVmeWY\n2S31PH65meWb2WLv9v06j11mZmu822WRTS71ebHOuJtXn9jfxyQizVfP9umcPrQzAFMenOtzGqnL\n9+I0s0TgQWAyMBS4yMyG1rPoc865Ud7tYe+57YHbgLHAGOA2M2sXoehSj5oax80vLAHgw5+d7HMa\nkeZtmnfh65VbCmtH3RL/+V6cBAovxzmX65yrAKYDU5r43InALOfcTufcLmAWMClMOaUJrvAukZTV\nux29OqT7nEakeTMz7r/oGABO/vP7/oaRWtFQnN2BTXXu53nzDvRtM/vCzF40s55BPhczm2pm2WaW\nnZ+fH4rccoBdxRV8sDrwbzt96nE+pxGJDeeM7FY7/aIuPxYVoqE46xu09MBLBLwO9HHOHQ28CzwR\nxHMDM52b5pzLcs5lZWZmHnZYObTj730PgJvPGERSYjT81xKJDfsOFLr5hSW6gkoUiIbfbnlAzzr3\newCb6y7gnCtwzpV7d/8NjG7qcyUyVm4ppLSyGoDrTxnocxqR2NKzfTp9vF0fv3t9hc9pJBqKcwEw\n0Mz6mlkKcCEwo+4CZta1zt1zgJXe9NvAGWbWzjso6AxvnkTY5L99BMAjl2X5nEQkNr3pXfT68U/W\nU12jtU4/+V6czrkq4HoChbcSeN45t9zM7jCzc7zFbjCz5Wa2BLgBuNx77k7gTgLluwC4w5snETQ3\nZ0ft9KlHdfYxiUjsSk9JYsKgwG6m6/+zyOc08c3icXt5VlaWy87O9jtGzOhzyxsAzLh+HEf3aOtz\nGpHYVVldw8BbZwLw5Z2TSEtO9DlR7DCzhc65Jm0y832NU5q3j9f8b21TpSkSXsmJCZznjft8pXfq\nl0SeilOOyCWPfAbA69eP9zmJSHz447ePBuCTtQWUV1X7nCY+qTjlsH2WW1A7PaJHho9JROJHQoJx\n7qjAuZ03Tl/sc5r4pOKUw/adafMAePna431OIhJf/nz+SABmLtuq8zp9oOKUw5Kbv7d2+theGh5Y\nJJKSEhMY1TNwTMGf3l7lc5r4o+KUwzLlgcDVGv7ujaMpIpH15FVjAPjH+2t9ThJ/VJwStLLKaorK\nqwA4u844miISOW3SkklPCZyO8ubSLT6niS8qTgnaT54LHJBw0ZhePicRiW8zvKPZr31GAyJEkopT\ngjZz2VYA7pwyzOckIvFtQKdWtdPbC8t8TBJfVJwSlBlLAmPod26TqiugiESB33xjKABXPqEBESJF\nv/kkKDc8+zkAz/5A19sUiQZXjusDwLKvCnVqSoSoOKXJir0DggD6ZbZqYEkRiRQzY3Dn1gA8O3+T\nz2nig4pTmuzWV5YCcPnxffwNIiL7edi7nN+vvJ9RCS8VpzTZq4sD+zd/eeYQn5OISF0926fXTpdU\nVDWwpISCilOaJGd7Ue10apIuZSQSbfadHvb7N1f6nCT2qTilSX70bODczb9eMNLnJCJSn1+fdRQA\nT8/b6HOS2KfilCZZuaUQgG8e093nJCJSn5apSbXTu4orfEwS+1Sc0qic7f8b0N3MfEwiIg257uT+\nANz++nKfk8Q2Fac06paXvgDgD98e4XMSEWnIDacOBOA170A+CQ8VpzQqe8MuAC7I6ulzEhFpSN0D\n98oqq31MEttUnNKg/KLy2mltphWJfud4Vyz694e5PieJXSpOadCfvYvk7tt3IiLRbd951n+Ztdrn\nJLErKorTzCaZ2SozyzGzW+p5/CYzW2FmX5jZbDPrXeexajNb7N1mRDZ57HsuOzCE17UnDfA5iYg0\nRdeMFn5HiHm+F6eZJQIPApOBocBFZjb0gMU+B7Kcc0cDLwJ/rPNYqXNulHc7JyKh41DdQ91FJLpl\ntk4F4PONu3xOEpt8L05gDJDjnMt1zlUA04EpdRdwzs1xzpV4d+cBPSKcMS4t3LATgO5t9ResSHPy\ni0mBzbV/8na1SGhFQ3F2B+oO6Z/nzTuUq4CZde6nmVm2mc0zs3MP9SQzm+otl52fn39kiePEH94K\n/ND9fNJgn5OISDD2DVTyydoCn5PEpmjY/lbfoZr1XlTOzC4BsoAT68zu5ZzbbGb9gPfMbKlzbu1B\nL+jcNGAaQFZWli5a1wTz1wXWOL9xdDefk4hIMBITdAR8OEXDGmceUPcEwR7AQWfvmtlpwK3AOc65\n2nMknHObva+5wPvAMeEMG4/0QyjS/HTNSAPgi7zdPieJPdFQnAuAgWbW18xSgAuB/Y6ONbNjgH8R\nKM3tdea3M7NUb7ojMA5YEbHkMWxp3h5A+zdFmqtrTwqcQvbQ+wdtgJMj5HtxOueqgOuBt4GVwPPO\nueVmdoeZ7TtK9k9AK+CFA047OQrINrMlwBzgXuecijMEHv9kPQBXjOvjaw4ROTzneyN9zVy21eck\nsSca9nHinHsTePOAeb+tM33aIZ73CaABVMPgpUV5AJw/WsPsiTRHacm6bm64+L7GKdEtIz3Z7wgi\ncoQ0bm1oqTjlIDU1OuhYJBZMGJQJwLsrt/mcJLaoOOUg89cHTkMZ1q2Nz0lE5Eh8+9jA+ZwvLczz\nOUlsUXHKQV79/CvgfydRi0jzNHFYFwDmrNKgL6Gk4pSDvLU8cBTe5BFdfU4iIkdCBwiFh4pTDrK7\npBLQOZwiIvVRcYqIxLCUpMCv+YK95Y0sKU2l4pT9OKcjakViyYSBHQH4NFcDvoeKilP2s74gcPW2\nfeNcikjzNn5AoDg/XrPD5ySxQ8Up+/lkbeCH6/j+HX1OIiKhMN5b4/w4R8UZKipO2c+iDYErKWT1\naedzEhEJhf6ZrQDI21Xqc5LYoeKU/SzetAuAUT3b+pxERELBTJcFDDUVp+xnbX4xAIM6t/Y5iYhI\ndFJxSr108WoRkfqpOEVERIKg4hQRiXGtUwOXXt5VXOFzktig4hQRiXEDOgeOrM3J3+tzktig4hQR\niXE926UDkLerxOcksUHFKbV0AWuR2NS1bWAksM27y3xOEhtUnFJrV0lg/0fb9GSfk4hIKHVsmQrA\nTu3jDAkVp9Ta90PVoWWKz0lEJJQyWgT+GN5TWulzktig4pRahWWBH6p9P2QiEhvaqDhDKiqK08wm\nmdkqM8sxs1vqeTzVzJ7zHv/MzPrUeeyX3vxVZjYxkrljTVllDaCrxovEmto1zhIVZyj4Xpxmlgg8\nCEwGhgIXmdnQAxa7CtjlnBsA3Af8wXvuUOBCYBgwCfiH93pyGKq8g4M0apBIbElLDvyqL6+q9jlJ\nbGi0OM3sXTMbGcYMY4Ac51yuc64CmA5MOWCZKcAT3vSLwKkWGLl4CjDdOVfunFsH5HivJ4ehuiaw\nxpmk4hSJKcmJgV/1VTpyPiSassb5c+A+M3vMzLqGIUN3YFOd+3nevHqXcc5VAXuADk18LgBmNtXM\nss0sOz8/P0TRY0tl9b41Tt83RIhICKUmBX6m+3Ro6XOS2NDob0jn3CLn3CnAf4G3zOw2M2sRwgz1\nrd4c+GfRoZZpynMDM52b5pzLcs5lZWZmBhkxPiR6lx+qcfqrVCSW7Dtu4aTB+t0XCk1atfA2i64C\nHgJ+BKwxs0tDlCEP6Fnnfg9g86GWMbMkIAPY2cTnShPt++HSfhCR2LLvb+EEXZszJJqyj/Nj4CsC\nB+V0By4HTgLGmNm0EGRYAAw0s75mlkLgYJ8ZBywzA7jMmz4PeM8557z5F3pH3fYFBgLzQ5ApLrVO\nCwwEXVha5XMSEQmlaq85tRcmNJKasMzVwHKvqOr6kZmtPNIAzrkqM7seeBtIBB51zi03szuAbOfc\nDOAR4CkzyyGwpnmh99zlZvY8sAKoAq5zzml16TC19wY+0OgiIrGlrDLwazE1SScdhEKjxemcW9bA\nw2eFIoRz7k3gzQPm/bbOdBlw/iGeezdwdyhyxLsOrQLFuWNvuc9JRCSU9pYHtiLt26okR+aIVtyd\nc7mhCiL+a1G7j7PG5yQiEkpF3qhgrdM0KlgoaIu31DIdOCASk4rKtMYZSipOEZEYV6jiDCkVp4hI\njNu3qbaNNtWGhIpTRCTG7SquIC05oXYEITky+lcUEYlxWwvL6dImTccxhIiKU+pVoSNrRWLG1j2l\ndMlI8ztGzFBxyn4GdW4FwOptRT4nEZFQ2bKnjK4ZoRxiPL6pOGU/o3u3ByB7/U6fk4hIKNTUOLYV\nltG5jdY4Q0XFKfsZ2zdQnPNyVZwisaCguILKakdXbaoNGRWn7Gf8wI4AvL96u89JRCQU8naVANCt\nrTbVhoqKU/bTsVUqAGWVOjhIJBbkbN8LQP9MXcQ6VFScIiIxLCd/L8mJRq/26X5HiRkqTjmkg68k\nJyLNzdrtxfTp0JKkRP26DxX9S8pBunkHEazxNvGISPO1Nn8vAzq18jtGTFFxykG+MbIbADMWb/Y5\niYgcifKqajYUFKs4Q0zFKQc5f3QPAJ7L3uRzEhE5Ejnb91LjUHGGmIpTDjKwc2sA8ovKfU4iIkfi\ni7w9AIzs0dbnJLFFxSkiEqOWbNpNRotkenfQEbWhpOKUeu27iMK2wjJ/g4jIYVu8aTcje7bVVVFC\nTMUp9br8+D4APPXpBn+DiMhhKamoYvW2Ikb1yPA7SszxtTjNrL2ZzTKzNd7XdvUsM8rMPjWz5Wb2\nhZl9p85jj5vZOjNb7N1GRfYdxK4rju8LwLSPcn1OIiKHY9lXhdQ4GNlT+zdDze81zluA2c65gcBs\n7/6BSoDvOeeGAZOA/zOzuv8TfuacG+XdFoc/cnzo5e0T0XU5RZqnhRt2ASrOcPC7OKcAT3jTTwDn\nHriAc261c26NN70Z2A5kRiyhUFpR7XcEEQnSJ2t3MKhzq9rxpyV0/C7Ozs65LQDe104NLWxmY4AU\nYG2d2Xd7m3DvMzP9Dwmhc7yBEJ75TPs5RZqTsspq5q/bybgBHf2OEpPCXpxm9q6ZLavnNiXI1+kK\nPAVc4Zzbt/3wl8AQ4GtAe+AXDTx/qpllm1l2fn7+Yb6b+PKjUwYA8Jd3VvucRESCsWjjLsqrahjX\nX8UZDknh/gbOudMO9ZiZbTOzrs65LV4x1nsRSDNrA7wB/No5N6/Oa2/xJsvN7DHg5gZyTAOmAWRl\nZWn08ibYNxBCaaU21Yo0J3NzdpCYYIzt197vKDHJ7021M4DLvOnLgNcOXMDMUoBXgCedcy8c8FhX\n76sR2D+6LKxp49iWPaV+RxCRJpqbU8DIHhm0Tkv2O0pM8rs47wVON7M1wOnefcwsy8we9pa5AJgA\nXF7PaSfPmNlSYCnQEbgrsvFj381nDALg7jdW+pxERJpiZ3EFX+TtZrz2b4ZN2DfVNsQ5VwCcWs/8\nbOD73vTTwNOHeP4pYQ0o/GBCP/78zmr++8UWHviu32lEpDHvrtxGjYMzhnXxO0rM8nuNU6JcalJi\n7bTO6RSJfm8v20r3ti0Y1q2N31FilopTGjV5eOAv139rFCGRqLa3vIqPcnYwcVgXjU8bRipOadTv\nzhkGwJ/eXuVzEhFpyPurtlNRVcPEYZ39jhLTVJzSqE5t0mqnK6u1uVYkWr21bCsdWqaQ1UenoYST\nilOa5KwRXQH4v3c1GIJINCour+K9L7dzxrDOJCZoM204qTilSe7+5nAAHpyztpElRcQPM5dtpaSi\nmm8d28PvKDFPxSlN0jY9pXZ6T0mlj0lEpD4vLtxE7w7pZPU+6OqMEmIqTmmya0/qD8DNLy7xOYmI\n1LVpZwnzcndy3rE9dDRtBKg4pcluOj0witCsFdt8TiIidb286CvM4FujtZk2ElSc0mRJiQnsO+bg\nw9W6woxINKipcby0KI+v9+tA97Yt/I4TF1ScEpRXrh0HwPcene9zEhEB+GBNPht3lnBBVk+/o8QN\nFacEZWTPtrXTe0p1kJCI3x6fu57M1qmc6Z0yJuGn4pSg7bvA9TVPL/Q5iUh8y9m+lw9W53PJ2N6k\nJOnXeaToX1qC9pPTAgcJfbK2AOd0TXARvzzxyXpSEhP47thefkeJKypOCVpCgjGyRwYA9727xuc0\nIvFpT2lVtOE+AAAYhElEQVQlLy3K4+yR3chsnep3nLii4pTD8uSVYwG4f7aKU8QPzy3YSElFNVeM\n6+N3lLij4pTDkpGeTOu0wHXQp8/f6HMakfhSWlHNtA/XcXz/DgzvnuF3nLij4pTD9vaNEwC45eWl\nPicRiS/Pzt/Ijr3l/PjUgX5HiUsqTjls3eqcbP3Wsi0+JhGJH2WV1fzzg7Uc1689Y/t18DtOXFJx\nyhF596bAWufVTy/yOYlIfHhuwSa2F5Vzg9Y2faPilCMyoFPr2ulXP//KxyQisa+8qpqH3l/L1/q0\n4+ta2/SNilOO2Ic/OxmAG59b7HMSkdj21Kcb2FpYxo9PHaSroPjI1+I0s/ZmNsvM1nhf672QnJlV\nm9li7zajzvy+ZvaZ9/znzCylvudLePXqkE5Gi2QAHnhPp6eIhMPukgr+/l4OEwZlMn5gR7/jxDW/\n1zhvAWY75wYCs7379Sl1zo3ybufUmf8H4D7v+buAq8IbVw7l/ZtPAuDP76ympkajCYmE2v2zcygq\nq+RXZw7xO0rc87s4pwBPeNNPAOc29YkW2E5xCvDi4TxfQqtdyxSO6RUYAP7aZ3SgkEgord9RzFPz\n1nNBVk+GdGnjd5y453dxdnbObQHwvnY6xHJpZpZtZvPMbF85dgB2O+eqvPt5QPfwxpWGPP/DrwPw\n1vKt7Cqu8DmNSOz4w1tfkpyYUHsxefFX2IvTzN41s2X13KYE8TK9nHNZwHeB/zOz/kB9e8YPuY3Q\nzKZ65Zudn6+LMIdDcmJC7QDwx9w5y+c0IrFhXm4BM5dt5YcT+tOpTZrfcYQIFKdz7jTn3PB6bq8B\n28ysK4D3dfshXmOz9zUXeB84BtgBtDWzJG+xHsDmBnJMc85lOeeyMjMzQ/b+ZH8/Pu1/55bNWVXv\nxykiTVReVc2tryylR7sWTJ3Qz+844vF7U+0M4DJv+jLgtQMXMLN2ZpbqTXcExgErXOB6VnOA8xp6\nvkTef380HoArHlugy46JHIF/fZDL2vxi7jx3OC1SEv2OIx6/i/Ne4HQzWwOc7t3HzLLM7GFvmaOA\nbDNbQqAo73XOrfAe+wVwk5nlENjn+UhE00u9hnfPoEe7wHB81/1HBwqJHI51O4p5YE4OZx3dlZMH\nH+rwD/GDxeMaQVZWlsvOzvY7Rkwrr6pm8K/fAgIDJPTqkO5zIpHmwznHJY98xheb9jD7pydq32YE\nmNlC71iaRvm9xikxKjUpkT+edzQAlz76mc9pRJqXlxd9xdycAn4+eYhKMwqpOCVsLsjqybUn9WdD\nQQmzVmzzO45Is/DV7lJuf305Wb3bcfGYXn7HkXqoOCWsbjxtEEO6tObWV5ayp6TS7zgiUa2mxnHz\n80uoqXH89YJRJCRoPNpopOKUsEpJSuDP54+koLiCX726VEfZijTg0bnr+DS3gNvOHqbjAqKYilPC\nbnj3DG46fRBvfLGF5xZs8juOSFRatbWIP761itOHdub8rB5+x5EGqDglIq45sT/jB3Tk9teXs2Zb\nkd9xRKJKWWU1P57+OW1aJHHPt0bokmFRTsUpEZGQYPz1OyNplZrE9f/5nLLKar8jiUSN22cs58ut\nRfzxvKPp2CrV7zjSCBWnREyn1mn85YJRrNpWxJ3/XdH4E0TiwPMLNjF9wSauO7k/pwzp7HccaQIV\np0TUiYMy+eGJ/Xjms428tDDP7zgivlr21R5+89oyxg3owE2nD/Y7jjSRilMi7uYzBvP1fh345StL\nWbxpt99xRHyxp7SSa59ZRPuWKdx/4TEk6tSTZkPFKRGXnJjAgxcfS6fWqfzwqWy2F5b5HUkkoqpr\nHDc9t5gte0p58OJj6aD9ms2KilN80b5lCg9flkVRWRVTn1qog4Ukrtz9xkpmf7md3549jGN7tfM7\njgRJxSm+GdKlDX+9YCSLN+3m1leWaXAEiQtPfrqeR+eu48pxfbn0uN5+x5HDoOIUX00a3pUbTxvI\nS4vy+NvsNX7HEQmrOV9u5/YZyzntqM7cetZRfseRw5TkdwCRH586kLxdpfzfu2vIbJ3KxWP1V7jE\nnhWbC7n+P4s4qmsb/nbhKB0M1IypOMV3ZsY93xpBwd5yfvPqMjq2SmXisC5+xxIJmY0FJVzx+Hxa\npyXzyGVfo2WqfvU2Z9pUK1Fh35G2R/doy4+e/Zz563b6HUkkJLbuKePiR+ZRXlXD41d+jS4Zur5m\nc6filKiRnpLEo5d/jR7tWvD9Jxaw7Ks9fkcSOSIFe8u5+OF57Cqu5IkrxjCkSxu/I0kIqDglqrRv\nmcKTV46hdVoylzzyGcs3qzyledpTWsn3Hp1P3q5SHrksi5E92/odSUJExSlRp0e7dJ79wXGkJydy\n8cOfsWJzod+RRIJSVFbJlY8vYPW2Iv516WjG9uvgdyQJIRWnRKVeHdJ5dupxtEhO5OKH56k8pdnY\nXVLBJY/MZ8mm3dx/4TGcNLiT35EkxFScErV6d2jJ9KnHkabylGYiv6icC6fNY+XmQh66ZDSTR3T1\nO5KEga/FaWbtzWyWma3xvh409pSZnWxmi+vcyszsXO+xx81sXZ3HRkX+XUg49e7Qkmd/ECjP70z7\nlM9yC/yOJFKvLXtK+c60T9lQUMIjl2dx+lBdIixW+b3GeQsw2zk3EJjt3d+Pc26Oc26Uc24UcApQ\nArxTZ5Gf7XvcObc4Iqklovp0bMmL1xxPZutULn10Pm8v3+p3JJH9bCwo4YJ/fcr2wnKevGoMJwzM\n9DuShJHfxTkFeMKbfgI4t5HlzwNmOudKwppKok73ti148erjGdq1Ddc8vZDp8zf6HUkEgM837uJb\nD82lsLSKZ74/lq/1ae93JAkzv4uzs3NuC4D3tbG96BcCzx4w724z+8LM7jMzXZsnhrVvmcJ/fjCW\nCYMyueXlpfx99hoNDC++emvZFi6cNo/0lCRevvZ4nXISJ8JenGb2rpktq+c2JcjX6QqMAN6uM/uX\nwBDga0B74BcNPH+qmWWbWXZ+fv5hvBOJBukpSfz7e1l865ju/GXWam5+4QtdkkwizjnHwx/lcs0z\nixjarQ2vXHs8/TNb+R1LIiTsAyY650471GNmts3MujrntnjFuL2Bl7oAeMU5V1nntbd4k+Vm9hhw\ncwM5pgHTALKysrSa0owlJybwlwtG0qdjS/46azW5O/byr0tG06mNhjKT8KuqruGO/67gyU83MHl4\nF+77zijSkhP9jiUR5Pem2hnAZd70ZcBrDSx7EQdspvXKFjMzAvtHl4Uho0QhM+OGUwfyz0tGs2pr\nEec8MJcv8nb7HUtiXH5RORc//BlPfrqBqRP68eB3j1VpxiG/i/Ne4HQzWwOc7t3HzLLM7OF9C5lZ\nH6An8MEBz3/GzJYCS4GOwF0RyCxRZNLwLrx0zfEkJhjn//NTXv38K78jSYxauGEn3/j7RyzJ281f\nLxjJr848igRdGiwuWTweXJGVleWys7P9jiEhVLC3nGueWcT8dTu5aEwvbjt7qNYEJCScczz56Qbu\n/O8KurdrwUMXj2ZoNw3WHmvMbKFzLqspy/q9xikSEh1apfLM98dyzUn9eXb+RqY8MJc124r8jiXN\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Pick some initial conditions: x = 1, y = 0, vx = 0, vy = 1, \n", "# which produces a nice circular orbit with a period of 1\n", "q0 = np.array([1.0, 0.0, 0.0, 1.0])\n", "t0 = 0.0\n", "\n", "# Set up the integrator\n", "integrator = ode(f).set_integrator('lsoda')\n", "\n", "# Set the initial conditions\n", "integrator.set_initial_value(q0, t0)\n", "\n", "# Integrate\n", "dt = 0.05\n", "nstep = 200\n", "t = np.arange(1+nstep)*dt\n", "qsol = np.zeros((1+nstep,4))\n", "qsol[0,:] = q0\n", "for i in range(nstep):\n", " qsol[i+1,:] = integrator.integrate(integrator.t+dt)\n", " \n", "# Plot\n", "plt.plot(qsol[:,0], qsol[:,1])\n", "plt.axis('equal')\n", "plt.xlabel(r'$x$')\n", "lab=plt.ylabel(r'$y$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far, so good. But what if we pick an orbit that is much more elliptical, and we run for a significantly longer time?" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAccAAAFACAYAAADJSbfSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVOXdxvHvjy4dpEhfFEQRRGAFQVEQUEoUNWosSTTR\nWFDzGjWIokaxQEw01pgYjbF3DESKCoICCrIgvVdZQIpIl7Y87x87DLPD7O4szMwz5f5cF9eec+Yw\ncx8X997TnmPOOUREROSQUr4DiIiIJBuVo4iISBiVo4iISBiVo4iISBiVo4iISBiVo4iISBiVo4iI\nSBiVo4iISBiVo4iISJgyvgPES61atVxWVpbvGCIikkSmT5++yTlXu7j10rYcs7KyyMnJ8R1DRESS\niJmtimY9HVYVEREJo3IUEREJo3IUEREJo3IUEREJo3IUEREJo3IUEREJkxTlaGa9zGyRmS01s4FF\nrHepmTkzy05kPhERySzey9HMSgPPA72BlsCVZtYywnpVgN8DUxObUEREMo33cgQ6AEudc8udc3uB\nd4B+EdZ7GHgc2J3IcCIiknmSoRwbAKtD5nMDy4LMrC3QyDn3cSKDiYhIZkqGcrQIy1zwRbNSwN+A\nO4t9I7MbzCzHzHI2btwYw4giIpJJkqEcc4FGIfMNgbUh81WAVsAEM1sJnAGMiHRRjnPuRedctnMu\nu3btYseVFRERiSgZynEa0NzMmppZOeAKYMTBF51zW51ztZxzWc65LGAKcKFzTqOKi4hIXHgvR+fc\nfuBW4BNgAfCec26emQ02swv9phMRkUyUFI+scs6NAkaFLXugkHW7JiKTiIhkLu97jiIiIskmKfYc\nRQQOHHAs2bCDqSt+YOqKzcxfu40Vm3b6jhVUsVxpTm1YjdMa1eC0RtVp16Q6dapU8B1LJC5UjiJx\n5pxjdu5Whs9cy4hZa9i0Y6/vSEdk1948pizfzJTlm6Nav13j6lzUtgF9W9fj2Mrl45xOJLbMOVf8\nWikoOzvb5eToglZJjK279vHG1FX8e9IKfth59OXX5NiKtG5QjZPrVeWk46rQ4rgq1K92DKVKRbot\nOH727M9j2YadzF+3jflrtzE7dwszV29h/4Gj/7nRrUVtrjvreM5sdixmid0uyVxmNt05V+z43CpH\nkRLI/XEXz32+lHemrS5+5TDlSpfiwtPqc0Gb+pxxfE3Klykdh4T+rdnyE+MWrOd/s9YybeWPJf77\n1Y4py13nt+AX2Y0oV0aXRUhsqRxVjnIUnHP8e/JKHv54fon+3iVtG3Blx8ZkN6mhvaFC7Nyzn2Hf\nruGVyStYvjH6c6rdWtTmwQtPocmxleKYTtKdylHlKFFyzvHOtNXcM2xOVOtXKFuKO3qeyNUdm1Cp\nvE7bx9KKTTt5euxi/jtzbfErAxe0qc8DP2tJ7So6pynRUTmqHKUQm3bsod9zk1mz5adi1z2uagXe\nuL4DzepUSUAyicQ5x6fz1/PQiHms3Vr0Q3lKGbx0TTbnnlQ3Qekk1agcVY4SsHrzLro8Pr7Y9Y6t\nVI53bzxDRZgCnHN8Mm89d70/ix179he57pOXt+GSdg0TlEySncpR5Zixtu3eR6+/fVnsXsYTl7Xh\n5+31QzNdbP1pHw+NmMewb9cUud7bvzuDTiccm6BUkmxUjirHjPLGlFXc99+5Ra4z/JYzadOoeoIS\niW/78w7w9LglPPv50kLXOefE2jx/dTsq69xxxlA5qhzT2p79efR48gtWby78vOGLv2rPeaccl8BU\nksx278vj3o/mMGxG4XuWH97cifZNaiYwlSSaylHlmHbWbf2JTkM+L/T1ri1q8/I1p1M6wTfKS2pa\n+P02+j03mT37D0R8XYfd05PKUeWYFtZu+YnOQwsvxLeu70jnZrUSmEjS0f68A9w/fC5vfxN5cIfB\n/U7h152yEhtK4kLlqHJMWZt27CH7kbGFvv7VwHOpX/2YBCaSTPP6lFXcX8g57OeuasvPTq2f4EQS\nKypHlWNKcc7R/YkvWF7IUyhmPtCT6hXLJTiVCIyYtZbfv/1txNfG3nEOzepUTnAiORoqR5VjSnhp\n4nIeGbkg4mvfDOquRyJJUnn965XcP3zeYcvbNa7Ouzd2omxpjQWb7FSOKsektXXXPtoM/jTiax/c\n1InsLF0tKMntwAHH7e/OZMSsw4e506ADyU3lqHJMOs99voS/frr4sOU3nnM89/Q+2UMikaO3fttu\nOj427rDltSqXY9Ld51KhbHo+fSVVqRxVjklhX94Bmg8aHfG1uQ+dr5uvJa189G0uf3h31mHLP7y5\nM+2b1PCQSMKpHFWOXi3dsJ0eT3552PIBvVrQv2szD4lEEmfHnv20Hfwp+/IK/nz97ZlNeeCClp5S\nCagcVY6evDxpRcRnIObc14NalfVYIck8T3y66LAh7I6rWoFJd3ejjC7gSTiVo8oxof74/izen55b\nYFn1imX59v6eeuivCDBv7Vb6PjPpsOVzHjyPKhXKekiUmVKqHM2sF/A0UBp4yTk3NOz1m4BbgDxg\nB3CDc67IR7SrHBPj5y98xfRVPxZYdnuP5tze40RPiUSS2/bd+2j94OFXa2twi8RImXI0s9LAYqAn\nkAtMA64MLT8zq+qc2xaYvhDo75zrVdT7qhzj67TBn7Jl174Cy164uh29W9fzlEgkteQdcJz9+PjD\nHro9/q6uNK1VyVOq9BdtOSbDpYIdgKXOueUAZvYO0A8IluPBYgyoBPjf3c1QvZ76koXfby+wTPcm\nipRc6VLG5IHn4pzjt/+ZxvhFGwHo9tcJAEy9tzt1q2oQDF+SoRwbAKGj/eYCHcNXMrNbgDuAcsC5\nkd7IzG4AbgBo3LhxzINmsv5vTmfUnO8LLNPQWSJHz8x45TcdAPjDuzP5KPCw5oP3TmroRD+S4bDq\nZcD5zrnrA/O/Ajo4524rZP2rAutfU9T76rBqbAwZvYB/frG8wDI9NFgkvq5+aQqTl/5QYNmiR3pR\nvowGFDhaqXRYNRdoFDLfEDh8TKZD3gFeiGsi4atlm7jqX1MLLHvl2tPpdlIdT4lEMseb15+Bc46e\nf/uSpRt2ANDivjG0aViN4bee5TldZkiGcpwGNDezpsAa4ArgqtAVzKy5c25JYLYvsASJi22793Fq\n2JV0Qy5pzZUddJhaJJHMjLF3nMP+vAM0C4wyNSt3K1kDR3L/z1py3VlNPSdMb94PqwKYWR/gKfJv\n5fi3c+5RMxsM5DjnRpjZ00APYB/wI3Crc+7wofFD6LBqyWUNHFlg/sxmx/Lm9Wd4SiMioTZu38Pp\njxZ8zunI35/FKfWreUqUmlLmVo54UTlGb+johfzji2UFlq0Y0kc374skoYlLNvKrl78psGzJo731\nuKwoqRxVjsXavHMv7R7+rMCyKfd057hqunxcJNn9afhcXv16VXD+lm4n8MfzT/KYKDWoHFWOReo0\nZBzrtu4Ozg/udwq/7pTlL5CIlFjeAccJ944qsEwj7RRN5ahyjOibFZu5/J9fF1i2cmhfT2lEJBam\nr9rMz1849P/1yfWqMvr/unhMlLxUjirHw4RfcPPxbWfRqoFO5ouki6v+NYWvlh26P1IX7Bwu2nLU\nGdwMMGv1lgLF2LpBNVYO7atiFEkzb/3uDKYN6hGc7/vMJPo8PdFjotSlPcc0d8oDY9i5Ny84r+cq\nimSGAR/M4r2cQ4+RmzigG41qVvSYKDlozzHDfb91N1kDRwaLsXaV8qwc2lfFKJIhHr+0Dd/c2z04\n3+Xx8dz+zrceE6UW7TmmoRtfz+GTeeuD86N+34WW9at6TCQiPoWP1br4kd6UK5OZ+0bac8xQWQNH\nFijGlUP7qhhFMtyb159R4OrVE+8bzVdLN3lMlPxUjmki98ddBS66+dsv2ugWDREJOrleVVYM6ROc\nv+qlqYfd1iWHqBzTwF8/WcRZfx4fnJ/70Plc3Lahx0QikozMjJVD+3LjOccD+fc9Zw0cyb68A56T\nJR+VY4rLGjiS58YvDc6vHNqXyuWT4WErIpKs7ul9MhPu6hqcbz5oNEs3bPcXKAmpHFPU3v0HChxG\n7d/1BB1GFZGoZdWqVOAwa48nv+S1r1d6y5NsVI4p6LsfdnHifaOD8xMHdGNALw04LCIlc/Awa3aT\nGgA8MHweFzw7yXOq5KByTDGj5qzj7L8cOr+4Ykgf3dgrIkflg5s7M+SS1gDMWZP/QOV0vc0vWirH\nFDLgg1n0f3NGcH7l0L565qKIxMSVHRozPuQ8ZNN7RrF3f+ZeqKNyTBEn3DsqOBRU01qVdH5RRGKu\naa1KLHy4V3D+xPtG88OOPR4T+aNyTAFZA0eSdyD/EMdt5zYr8NudiEgsVShbusCFOu0fGcv8tds8\nJvJD5ZjkQq9Ifev6jtx5XguPaUQkExy8UOegPs9MZPyiDR4TJZ7KMYmFFuPUe7vTuVktj2lEJNPk\nP9ouf/jJ37wyjWEzcov5G+lD5ZikQotxxv09qVu1gsc0IpKpPr6tC5e0bQDAHe/N4u1vvvOcKDFU\njknGOVegGGc/eB41K5XzmEhEMt2TvziNX3dqAsA9w+bwyuQVnhPFX1KUo5n1MrNFZrbUzAZGeP0O\nM5tvZrPNbJyZNfGRM96cczS9Z1Rwft5D51O1QlmPiURE8g3u14obz84fk/Wh/83n5UnpXZDey9HM\nSgPPA72BlsCVZtYybLVvgWzn3KnAB8DjiU0Zf+HFuPDhXlTSGKkikkTu6XMyvz+3GQAPfzyfN6eu\n8pwofryXI9ABWOqcW+6c2wu8A/QLXcE5N945tyswOwVIu0dOhBbj4kd6U6FsaY9pREQiu+O8FvTv\negIAgz6ay7gF64v5G6kpGcqxAbA6ZD43sKww1wGjI71gZjeYWY6Z5WzcuDGGEeMr9Bzjkkcz9wnd\nIpIaBvQ6iZ+3y99Hue7VHGat3uI5Uewlw0/hSOOfRRzUz8x+CWQDf4n0unPuRedctnMuu3bt2jGM\nGD+hxThtUA/Klk6Gb4mISNGeuLwN7QMDlvd7fjKrN+8q5m+klmT4SZwLNAqZbwisDV/JzHoAg4AL\nnXNpMZ7RJX+fHJwe1r8ztauU95hGRKRkPry5M1Uq5F8b0eXx8ezcs99zothJhnKcBjQ3s6ZmVg64\nAhgRuoKZtQX+SX4xpsUwDU9+uogZ3+Ufinj04la0a1zDcyIRkZKb8+D5welT/vRJ2jzNw3s5Ouf2\nA7cCnwALgPecc/PMbLCZXRhY7S9AZeB9M5tpZiMKebuUMG7Bep75fCkAF51Wn6s7puWdKSKSIUKH\nmgu9uDCVWbq0fLjs7GyXk5PjO8Zh1m/bTcfHxgFQpUKZAr91iYikqr37DwQfwt60VqWkfUCCmU13\nzmUXt573PcdMc7AYARWjiKSNcmVKMXFANwBWbNrJCxOWeU50dFSOCRR6Zaqexygi6aZRzYo8fcVp\nAPx5zEJWbNrpOdGRUzkmyEP/mxecnn5fD49JRETip99pDejYtCYA3f46IWUv0FE5JsDqzbt4ZfJK\nAAb0asGxlXXLhoikr3dv7BScTtULdFSOCdDl8fHB6f5dm3lMIiKSGEse7R2cHvTRHI9JjozKMc50\nnlFEMlHZ0qX48ObOALw59TtW/ZBa5x9VjnE08MPZwelZD5znMYmISOK1b1KDLs1rAXDOXyb4DVNC\nKsc4+WlvHu9Myx9P/cELWlKtop7LKCKZ5/XrOganz31igr8gJaRyjJOTHxgTnL72zKYek4iI+DVt\nUP4V+ss37mRO7lbPaaKjcoyDd775Lji9/LE+HpOIiPhXu0p5fnVG/jCZFzw3yXOa6Kgc42DgsPwr\ns67tnEWpUpGeyCUiklkevqhVcDr0iUTJSuUYY6FXpz544Skek4iIJJdv7u0OwIzvtrB5517PaYqm\ncoyh0KGSpgb+EYiISL46VSvQrE5lANo9/JnnNEVTOcZQt79OCE7XrVrBXxARkSQ19o5zgtPDZuR6\nTFI0lWOM3PLWjOC0bvYXESncs1e2BeCO92Z5TlI4lWOMjJy9DoB//LKd5yQiIsntgjb1g9N3vDvT\nY5LCqRxjoMOjY4PTvVrV85hERCQ1fH5n/uHVYd+uScond6gcY2DD9j0AfPqHsz0nERFJDcfXrhyc\nTsah5VSOR+mCZw/d0Hpi3Soek4iIpJbZD+aPOf3d5l3szzvgOU1BKsejNGdN/lBIH/Xv7DmJiEhq\nqVrh0JjTZ/75c49JDqdyPArXvzotON22cQ2PSUREUtPch84HYP22PUl17lHleBTGLtgAwGu/7eA5\niYhIaqpcvkxwuuk9ozwmKSgpytHMepnZIjNbamYDI7x+tpnNMLP9Znapj4zhQp/VePaJtT0mERFJ\nbZPu7uY7wmG8l6OZlQaeB3oDLYErzaxl2GrfAdcCbyU2XeEOPqvx4M2sIiJyZBrWqBicvu3tbz0m\nOcR7OQIdgKXOueXOub3AO0C/0BWccyudc7OBpLic6fWvVwanQ29mFRGRI/PC1fkDqPxv1lrPSfIl\nQzk2AFaHzOcGlpWYmd1gZjlmlrNx48aYhIvk/uHzgPxHUomIyNHr3frQACpLN+zwmCRfMpRjpAce\nHtElS865F51z2c657Nq1438eUI+kEhGJnWPKlgagx5NfeE6SHOWYCzQKmW8IJMd+dQQDPkjegXJF\nRFLZvMBtHckgGcpxGtDczJqaWTngCmCE50yFei8n/xErQy5p7TmJiEh6KVXq0IHEwf+b7zFJEpSj\nc24/cCvwCbAAeM85N8/MBpvZhQBmdrqZ5QKXAf80s3mesganr+zQ2EcEEZG0dk/vkwD49+QVXnOU\nKX6V+HPOjQJGhS17IGR6GvmHW7268LnJviOIiKS1G885gSGjFwL5OyRmkS5LiT/ve46p5OA4qm9c\n19FzEhGR9HfX+7OLXylOVI5R2r0vLzh9VvNaHpOIiKS3wf3y7wT4cEautwwqxyi1fGCM7wgiIhnh\n152yfEdQOUbrQOBaHD3QWEQkcaYu/8HL56ocS0gPNBYRib8qgad1/OLFKV4+X+UYhbVbfvIdQUQk\no0y6+1yvn69yjMIvX5rqO4KISEapVrGs189XOUZh+aadANzX92TPSUREMs9XyzYl/DNVjiVw3VlN\nfUcQEck4V/0r8UfvVI4l4GukBhGRTDSsf2dvn61yLIavy4hFRDJdu8Y1vH22yrEYvi4jFhERf1SO\nUXrreo2nKiLiS+6PuxL6eSrHKHVupvFURUR8+dPwxD6pUOUoIiJJq32T/POO4xZuSOjnqhxFRCRp\n+bq/XOVYBOec7wgiIhnttEbVvXyuyrEIuT9qTFUREZ983V+ucizCxCWJH7JIRET8UzkW4YvFiT0B\nLCIiyUHlWIQvFm/0HUFERDxQORZh974DwKFLiUVEJDMkRTmaWS8zW2RmS81sYITXy5vZu4HXp5pZ\nViLznd28diI/TkREIkjkHQTey9HMSgPPA72BlsCVZtYybLXrgB+dc82AvwF/TmTGc1qoHEVEfNuz\n/0DCPqvYcjSzsWbWJo4ZOgBLnXPLnXN7gXeAfmHr9ANeDUx/AHS3BF7fe0r9qon6KBERKcSWXfsS\n9lnR7DkOAP5mZq+YWb04ZGgArA6Zzw0si7iOc24/sBU4NvyNzOwGM8sxs5yNG2N3Mc2+vMT9tiIi\nIpFVKJu4g53FfpJzboZz7lzgY2CMmf3JzI6JYYZIe4DhB5ajWQfn3IvOuWznXHbt2rE7FDpj1ZaY\nvZeIiByZaseUTdhnRVXDgUOYi4AXgNuAJWb2qxhlyAUahcw3BNYWto6ZlQGqAZtj9PnF0v2OIiL+\nJXK0nGjOOU4C1pB/IUwD4FqgK9DBzF6MQYZpQHMza2pm5YArgBFh64wArglMXwp87hJ42ZLudxQR\nySxloljnJmBehDK6zcwWHG0A59x+M7sV+AQoDfzbOTfPzAYDOc65EcDLwOtmtpT8PcYrjvZzo1G7\nSnk2bt/D4vU7EvFxIiKSJIotR+fc3CJe7huLEM65UcCosGUPhEzvBi6LxWeVxNnNa/PhjNxEf6yI\niHh2VJf+OOeWxypIMtL9jSIimcn7IADJ7KxmtXxHEBERD1SORahZqZzvCCIiGe3AAT8PnVc5iohI\n0ho993svn6tyFBGRpPXA8KKuCY0flWOUEjkavIiI5Pth514Aru2cldDPVTlG6Y0pq3xHEBHJWLf3\naJ7Qz1M5FqNB9fxhZO8fPs9zEhGRzFW9YmIvkFQ5FuOdG87wHUFERBJM5ViMRjUr+o4gIpKRPpju\nb4QylWMJ7E3gU6hFRDLdXe/PAhL7qKqDVI4lMOijOb4jiIhknA9v7pzwz1Q5RqF3q+MAeN/jLr6I\nSKZqVqdywj9T5RiFJy8/zXcEEZGMMn/tNq+fr3KMwjHlSvuOICKSUfo8M9Hr56scS2jk7HW+I4iI\nZIyJA7p5+VyVY5TOPakOALe8NcNzEhGR9BY6XKev2+lUjlF6+Zps3xFERDJC/zf974SoHKNkZsHp\nv09Y6jGJiEh6O/iYqr9e1sZbBpVjCdzc9QQAHh+zyHMSEZH0FHpI9dL2Db3lUDmWwN29TvIdQUQk\nrd38hv9DqqByPGK3v/Ot7wgiImlnzLz8Q6pPX+H3/nKv5WhmNc3sMzNbEvhao5D1xpjZFjP7ONEZ\nw/3l0lMB+O/MtZ6TiIikl82BBxsD9Dutgcck/vccBwLjnHPNgXGB+Uj+AvwqYamKcFl2o+D0gQOu\niDVFRKQk2j38me8IQb7LsR/wamD6VeCiSCs558YB2xMVKlpd/zrBdwQRkbQz76HzfUfwXo51nXPr\nAAJf6xzNm5nZDWaWY2Y5GzdujEnASIb1zx8h/rvNu+L2GSIimeThj+cHpyuVL+MxSb64l6OZjTWz\nuRH+9Iv1ZznnXnTOZTvnsmvXrh3rtw9q1/jQqdG7P5gdt88REckUL09aAcDQS1p7TpIv7uXonOvh\nnGsV4c9wYL2Z1QMIfN0Q7zyx8vxV7QB4N2e15yQiIqltzNxDY1Zf0aGxxySH+D6sOgK4JjB9DTDc\nY5YS6XtqveD042MWekwiIpLabgrc23hJW79XqIbyXY5DgZ5mtgToGZjHzLLN7KWDK5nZROB9oLuZ\n5ZqZ/7O1wKMXtwLg7xOWeU4iIpKa5q7ZGpx+8hfJ8+xcr+XonPvBOdfdOdc88HVzYHmOc+76kPW6\nOOdqO+eOcc41dM594i/1IVd3bBKcfmnico9JRERS08+enQRA1rF+nr5RGN97jinvj+e3AOCRkQs8\nJxERSS1fLdsUnJ7wRz/PbSyMyvEo3dKtWXD6g+m5HpOIiKSWq/41FYCzmtXynORwKscY+M2ZWQDc\n9f4sv0FERFLEm1NXBaffuL6jxySRqRxj4E8XnBKcvvM9FaSISHEGfTQXgJvOOcFzkshUjjHyzJVt\nAfhwRi778w54TiMikrx6Pz0xOD2wd3I+ClDlGCMXtqkfnG42aLTHJCIiyWv3vjwWrNsGwIc3d/ac\npnAqxxha9Eiv4PTnC9d7TCIikpxOun9McLp9k4hPKUwKKscYKl+mND1Ozh87/bf/yfGcRkQkuYyZ\n+31weumjvT0mKZ7KMcZeuub04PTJIb8hiYhkupvemA7kD79ZpnRy109yp0tRY+84G4Cf9uWxcfse\nz2lERPzLGjgyOH3wwQ3JTOUYB83qVAlOn/7oWI9JRET8Cz2cOvOBnh6TRE/lGCcrh/YNTodetiwi\nkkmcc8HDqT1Orkv1iuU8J4qOyjGOXvlN/vnHBeu2FRhDUEQkUzS9Z1Rw+qVrsj0mKRmVYxx1a1GH\nhjWOAfLHEMw74DwnEhFJnD+8OzM4PX9wUjxpMGoqxzibdPe5wekT7h1VxJoiIulj2cYdfPTtGgAe\nu7g1FcuV8ZyoZFSOCbDssT7B6S6Pf+4xiYhIYnR/4ovg9FUdG3tMcmRUjglQupTx1u/yR51fvfkn\nxi/c4DmRiEj8hN62EXpxYipROSZI5xNqcXK9qgD85j/T2KfByUUkDXV87NDta6l2njGUyjGBRv9f\nl+B0cw1OLiJp5h9fLGP9tvyBT/7zm9NT7jxjKJVjgq0Ycuj8Y+ihBxGRVLbw+20MHb0QgEvaNaBr\nizqeEx0dlWOCmRnf3n9ohAgVpIikut378uj11KHBTp68/DSPaWJD5ehBjUrl+Pi2s4LzvZ760mMa\nEZEj55wr8BiqVL0AJ5zXcjSzmmb2mZktCXw97OFeZnaamX1tZvPMbLaZ/cJH1lhr1aAaT1zWBoCF\n32/nsVELPCcSESm50BFwQk8bpTrfe44DgXHOuebAuMB8uF3Ar51zpwC9gKfMrHoCM8bNz9s35MoO\n+ff/vPjlckbPWec5kYhI9EJPCy19tDdm5jFNbPkux37Aq4HpV4GLwldwzi12zi0JTK8FNgC1E5Yw\nzoZc0pp61SoAcPObM1iwbpvnRCIixQstxlkPnJf0z2csKd9bU9c5tw4g8LXIy5vMrANQDlhWyOs3\nmFmOmeVs3Lgx5mHj5et7ugenez89kblrtnpMIyJStNBinHBXV6pVLOsxTXzEvRzNbKyZzY3wp18J\n36ce8DrwG+dcxDvonXMvOueynXPZtWun1s5l6Ensnz07iemrfvSYRkQkstBiHNa/M1m1KnlMEz9x\nL0fnXA/nXKsIf4YD6wOld7D8Io6rZmZVgZHAfc65KfHO7EtoQf78ha/4etkPHtOIiBQUWowf3tyZ\ndo0Pu4Yybfg+rDoCuCYwfQ0wPHwFMysHfAS85px7P4HZvAgtyCv/NYXxizQOq4j4F77H2L5J+hYj\n+C/HoUBPM1sC9AzMY2bZZvZSYJ3LgbOBa81sZuBP6t9hWoTQgvzNK9MYM1dXsYqIP6HF+FH/9N5j\nPMicS88H8GZnZ7ucnBzfMY5K6D/Ix39+Kpef3shjGhHJNM65Avcxjv6/LsEHKKQqM5vunMsubj3f\ne45ShNA9yAEfzuaWN2d4TCMimWRf3oECxTj13u4pX4wloXJMciuH9uXUhtUAGDlnncZiFZG427Rj\nT4EnBy18uBd1q1bwmCjxVI4pYMStZzGgV4vgvApSROLlq2WbyH7k0DMZVwzpQ4WypT0m8kPlmCL6\nd23GhzexrhvpAAAQW0lEQVR3Ds5nDRypByaLSEzd9985XPWvqcH5lUP7ptWQcCWhckwh7ZvUYOYD\nhx531XzQaNZs+cljIhFJF1kDR/LGlO8AqFK+TNo8XeNIqRxTTPWK5QqMfH/m0M95YULE0fRERIrl\nnCtwqub33Zsz56HzPSZKDirHFGRmBX6r+/OYhToPKSIltnzjjgJXpI649Uzu6Hmix0TJQ+WYwlYO\n7cuvOzUJzmcNHMnufXkeE4lIqrj3ozmc+8QXwflFj/Ti1IZp8TTAmFA5prjB/Vox7s5zgvMn3T+G\nT+d97zGRiCS7rIEjeWvqd8H5lUP7Ur5M5l2RWhSVYxo4oXblAuchb3h9Omf9+XOPiUQkGeX+uKvA\nKZj7+p6c8RfeFEblmCYOnods0yj/sEjujz+RNXAkW3ft85xMRJLBDa/lcNafxwfnZ9zfk+u7HO8x\nUXJTOaaZ4becybs3nBGcbzP4U+4ZNttjIhHxac/+PLIGjuTT+euDy1YO7UvNSuU8pkp+Ksc01PH4\nYwscKnn7m9VkDRzJfg0aIJJR/j5hKS3uGxOcf/6qdjqMGiWVYxpbObQvj13cOjjfbNBoXv96pbc8\nIpIYBw7k37v4+JhFwWUrhvSh76n1PKZKLXpkVQbIO+A44d5RBZYtebQ3ZUvrdyORdPPkZ4t5ZtyS\n4Pyt3Zpx1/ktivgbmSXaR1apHDPIA8Pn8trXq4Lz/U6rz9NXtPWYSERiZfvufbR+8NMCyxY+3Csj\nBw0vispR5RjR/rwDNAt5FA3ApLu70bBGRU+JRORo9Xt+MrNWbwnOD+pzMr87W1eiRqJyVDkW6ePZ\na7n1rW8LLNOJepHUkrNyM5f+4+sCy1YM6ZOxT9KIhspR5RiV8DFZb+/RnNt7aGxFkWS2e18eJ90/\npsCy927sRIemNT0lSh0qR5Vj1Fb9sJNz/jKhwLKPbzuLVg2q+QkkIoVq/eAnbN+9PzjfplF1ht9y\npsdEqUXlqHIssZcnreDhj+cXWKYT+iLJ4amxi3lq7JICy5Y91ofSpXQItSRUjirHI3b24+P5bvOu\nAst0HkPEj3EL1nPdqwV/ln32h7NpXreKp0SpLSXK0cxqAu8CWcBK4HLn3I9h6zQBhgGlgbLAs865\nfxT33irHoxPpqtYG1Y9h8sBzPSUSySxz12zlZ89OKrDs/p+15LqzmnpKlB5SpRwfBzY754aa2UCg\nhnPu7rB1ypGfc4+ZVQbmAp2dc2uLem+VY2ys2/oTnYYUfMJHl+a1eP26jp4SiaS31Zt30eXx8QWW\n9Wl9HH+/ur2nROklVcpxEdDVObfOzOoBE5xzhQ7lYGbHAt8CZ6gcE2vh99vo9dTEAssubFOfZ67U\nIAIisbB2y090HlrwF9Hja1Xi87u6+gmUplKlHLc456qHzP/onKsRYb1GwEigGfBH59zzhbzfDcAN\nAI0bN26/atWqSKvJUfhq2Sau+tfUAstaNajKx7d18ZRIJLXNX7uNPs9MPGy5zvPHR9KUo5mNBY6L\n8NIg4NVoyjHk9frAf4ELnHPrC1sPtOcYb5/NX8/vXiv437dcmVIseriX/ocWicKXizfy639/c9hy\nlWJ8JU05FvnhJTysGvg7rwAjnXMfFLWeyjExZq7ewkXPTz5s+YLBvTimnG4BEQn30sTlPDJyQYFl\njWoew8QButgtEVKlHP8C/BByQU5N59yAsHUaBtb5ycxqAFOBnzvn5hT13irHxIo0kADAR/0707Zx\noQcDRDKCc47THx3Hph17CizvflIdXr72dE+pMlOqlOOxwHtAY+A74DLn3GYzywZucs5db2Y9gScA\nBxjwnHPuxeLeW+XoR6QnAwDc3PUE7u51kodEIv5Eutob4M6eJ3Jb9+YeEklKlGM8qRz96/30RBas\n23bY8tkPnkfVCmU9JBJJjH9+sYwhoxcetvyT28+mxXG6ed8nlaPKMWm8PmUV9/937mHL7+l9Ejee\nc4KHRCKx98OOPbR/ZGzE15Y+2psyerh4UlA5qhyTzrbd+zg1wiFX0DMlJXX1f3M6o+Z8f9jyO3qe\nyO916DTpqBxVjknt6bFL+NvYxYctr1OlPF/f012DKUtSK+w2DIC5D51P5fJlEpxIoqVyVDmmhJ/2\n5nHyA2MivtbvtPo8fYVG4JHkMCd3Kxc8Nynia3+/uh19WtdLcCI5EipHlWPKKeqHzzWdmvBQv1YJ\nTiSZbumGHfR48ouIr52eVYP3buykG/ZTjMpR5ZjS3pu2mgEfzo74WpfmtXjttx30Q0niItLTMA6q\nUbEsU+/tQbkyurgmVakcVY5pI9JDmEPN+tN5VDtGt4bIkYs0ak2o+YPPp2I5nUdMBypHlWNaGjYj\nlzvem1Xo649e3IqrOzZJYCJJRVt27eXMoZ+zc29exNfLljZmPnAelXRhTdpROaoc015hTzMINfaO\ns2lWRzddZzrnHA/9bz7/+Wploetc3LYBT17eRofr05zKUeWYUfIOOH77n2l8sXhjoetULFeaT24/\nm0Y1dT9lunPO8cSni3lu/NIi13v3hjPoePyxCUolyUDlqHLMaIu+3875T31Z7HpDLmnNlR0aJyCR\nxNPOPfu56Y3pTFyyqcj1ru2cxZ8uaKm9wwymclQ5SojJSzdx9UtTi12vfrUKvH9zZxpUPyYBqeRI\nOOcYNmMNd75f+Lnng3qdchzPXtWWshq6TQJUjipHKcKG7bu57B9fs+qHXcWuW6FsKV77bUc6NK2Z\ngGQSKu+A45lxS3h63JKo1r/pnBMYcH4LSmmEJSmEylHlKCX09jffcc+wIh8TWsB5LevyUL9TqFdN\ne5lHqyR7gwfVrFSOYTd3JqtWpTgmk3SjclQ5ylFyzvH2N6u596PoC/Ogy9o35M7zWnBctQpxSJaa\nnHN8sXgjQ0cvZOH320v0d5scW5GXr8nWlcdy1FSOKkeJkw3bdzPgg9lMWFT4lbHFaVG3Cr88ozEX\ntW1AlTR5tuXKTTt5fcoqXv96FXvzDhzx+zx6cSuu6tBYF81IXKgcVY6SYHkHHKPmrOPRkQv4ftvu\nmL53tWPK0qFpTVrUrULzupU5sW4VmtaqRIWypWP2Gc45du7NY8G6bcxds5U5a7Yyc/UWlm/cGbPP\nOOi8lnUZ2Pskjq9dOebvLVIUlaPKUZLMnv15jJy9jn9PXsHcNdt8x4mri9s24LqzmtKqQTXfUUQK\niLYcNTaSSIKUL1OaS9o15JJ2DYtdd8ee/eSs3MykJZuYtHRTic/RxVLl8mVo27g67RrX4NyT6tC6\nQTVdDSppT+UokoQqly9D1xZ16Nqiju8oIhlJd8aKiIiEUTmKiIiE8VqOZlbTzD4zsyWBrzWKWLeq\nma0xs+cSmVFERDKP7z3HgcA451xzYFxgvjAPA18kJJWIiGQ03+XYD3g1MP0qcFGklcysPVAX+DRB\nuUREJIP5Lse6zrl1AIGvh12aZ2algCeAPxb3ZmZ2g5nlmFnOxo1HPnqJiIhktrjfymFmY4HjIrw0\nKMq36A+Mcs6tLm44Kefci8CLkD8IQElyioiIHBT3cnTO9SjsNTNbb2b1nHPrzKwesCHCap2ALmbW\nH6gMlDOzHc65os5PioiIHDHfgwCMAK4Bhga+Dg9fwTl39cFpM7sWyFYxiohIPPk+5zgU6GlmS4Ce\ngXnMLNvMXvKaTEREMpYGHhcRkYwR7cDjvvccRUREko7KUUREJIzKUUREJIzKUUREJIzKUUREJIzK\nUUREJEza3sphZtuBRb5zeFAL2OQ7hAfa7syi7c48sdr2Js652sWt5HuEnHhaFM29LOnGzHK03ZlD\n251ZMnW7IfHbrsOqIiIiYVSOIiIiYdK5HF/0HcATbXdm0XZnlkzdbkjwtqftBTkiIiJHKp33HEVE\nRI6IylFERCRM2pSjmdU0s8/MbEnga40I65xmZl+b2Twzm21mv/CRNRbMrJeZLTKzpWZ22MOfzay8\nmb0beH2qmWUlPmXsRbHdd5jZ/MD3d5yZNfGRM9aK2+6Q9S41M2dmaXG5fzTbbWaXB77n88zsrURn\njIco/p03NrPxZvZt4N96Hx85Y83M/m1mG8xsbiGvm5k9E/jvMtvM2sUtjHMuLf4AjwMDA9MDgT9H\nWOdEoHlguj6wDqjuO/sRbGtpYBlwPFAOmAW0DFunP/CPwPQVwLu+cydou7sBFQPTN2fKdgfWqwJ8\nCUwBsn3nTtD3uznwLVAjMF/Hd+4EbfeLwM2B6ZbASt+5Y7TtZwPtgLmFvN4HGA0YcAYwNV5Z0mbP\nEegHvBqYfhW4KHwF59xi59ySwPRaYANQ7EgJSagDsNQ5t9w5txd4h/ztDxX63+MDoLuZWQIzxkOx\n2+2cG++c2xWYnQI0THDGeIjm+w3wMPm/JO5OZLg4ima7fwc875z7EcA5tyHBGeMhmu12QNXAdDVg\nbQLzxY1z7ktgcxGr9ANec/mmANXNrF48sqRTOdZ1zq0DCHytU9TKZtaB/N/KliUgW6w1AFaHzOcG\nlkVcxzm3H9gKHJuQdPETzXaHuo783zJTXbHbbWZtgUbOuY8TGSzOovl+nwicaGaTzWyKmfVKWLr4\niWa7HwR+aWa5wCjgtsRE866kPwOOWEoNH2dmY4HjIrw0qITvUw94HbjGOXcgFtkSLNIeYPg9OdGs\nk2qi3iYz+yWQDZwT10SJUeR2m1kp4G/AtYkKlCDRfL/LkH9otSv5Rwkmmlkr59yWOGeLp2i2+0rg\nP865J8ysE/B6YLtT8edZSSTs51pKlaNzrkdhr5nZejOr55xbFyi/iIdXzKwqMBK4L7BbnopygUYh\n8w05/LDKwXVyzawM+YdeijpckQqi2W7MrAf5vzCd45zbk6Bs8VTcdlcBWgETAkfOjwNGmNmFzrmc\nhKWMvWj/nU9xzu0DVpjZIvLLclpiIsZFNNt9HdALwDn3tZlVIH9g7nQ4rFyUqH4GxEI6HVYdAVwT\nmL4GGB6+gpmVAz4i/5j1+wnMFmvTgOZm1jSwTVeQv/2hQv97XAp87gJntFNYsdsdOLz4T+DCNDn/\nBMVst3Nuq3OulnMuyzmXRf651lQvRoju3/l/yb8ICzOrRf5h1uUJTRl70Wz3d0B3ADM7GagAbExo\nSj9GAL8OXLV6BrD14Om0mPN9dVIMr3I6FhgHLAl8rRlYng28FJj+JbAPmBny5zTf2Y9we/sAi8k/\nZzoosGww+T8UIf9/lveBpcA3wPG+Mydou8cC60O+vyN8Z07EdoetO4E0uFo1yu+3AU8C84E5wBW+\nMydou1sCk8m/knUmcJ7vzDHa7rfJv4tgH/l7idcBNwE3hXy/nw/8d5kTz3/nGj5OREQkTDodVhUR\nEYkJlaOIiEgYlaOIiEgYlaOIiEgYlaOIiEgYlaOIiEgYlaOIiEgYlaNIGgs8869nYPoRM3vGdyaR\nVJBSY6uKSIn9CRhsZnWAtsCFnvOIpASNkCOS5szsC6Ay0NU5t913HpFUoMOqImnMzFoD9YA9KkaR\n6KkcRdJU4NFtb5L/9PSdZna+50giKUPlKJKGzKwiMAy40zm3AHiY/KfHi0gUdM5RREQkjPYcRURE\nwqgcRUREwqgcRUREwqgcRUREwqgcRUREwqgcRUREwqgcRUREwvw/uDLbwEM6ErEAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# These produce an elliptical orbit: x = 1, y = 0, vx = 0, vy = 0.5\n", "q0 = np.array([1.0, 0.0, 0.0, 0.5])\n", "\n", "# Set initial conditions\n", "integrator.set_initial_value(q0, t0)\n", "\n", "# Integrate; note 100x as long an integration; we also use a somewhat smaller\n", "# output time, to see the orbit better\n", "dt = 0.01\n", "nstep = 100000\n", "t = np.arange(1+nstep)*dt\n", "qsol = np.zeros((1+nstep,4))\n", "qsol[0,:] = q0\n", "for i in range(nstep):\n", " qsol[i+1,:] = integrator.integrate(integrator.t+dt)\n", " \n", "# Plot late time behaviour\n", "plt.plot(qsol[-1000:,0], qsol[-1000:,1])\n", "plt.axis('equal')\n", "plt.xlabel(r'$x$')\n", "lab=plt.ylabel(r'$y$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This still looks pretty good, but it is interesting to plot the time evolution of the total energy per unit mass of the test particle,\n", "\\begin{equation}\n", "E = \\frac{1}{2}\\left(v_x^2 + v_y^2\\right) - \\frac{1}{\\sqrt{x^2 + y^2}},\n", "\\end{equation}\n", "which should be conserved." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Compute energy\n", "E = 0.5*(qsol[:,2]**2+qsol[:,3]**2) - 1.0/np.sqrt(qsol[:,0]**2+qsol[:,1]**2)\n", "\n", "# Plot\n", "plt.plot(t, E)\n", "plt.xlabel(r'$t$')\n", "lab=plt.ylabel(r'$E$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clearly LSODA, as nice as it is, is not conserving total energy. Instead, the energy is, over many orbits, increasing. There is a secular expansion of the orbit. In retrospect, this is not surprising. Nothing we have done in setting up our methods knows anything at all about energy, or about conservation laws in general. However, it is also potentially disastrous for long-term integration. We integrated for $\\sim 1000$ orbits, and gained a few tenths of a percent of our total energy. This means that if we want to integrate for a million orbits, a method like LSODA will encounter severe difficulties.\n", "\n", "To handle problems like this, it is possible to write ODE integrators that do respect conservation laws. Integrators of this type are called symplectic integrators. The simplest syplectic integrator is called the staggered leapfrog, or sometimes kick-drift. The idea behind it is simple. Let us suppose that we know the position $\\mathbf{x}_i$ at time $t_i$, and the velocity $\\mathbf{v}_{i+1/2}$ at time $t_{i+1/2}$, half a time step later. Here is a very, very simple integration algorithm:\n", "\\begin{eqnarray}\n", "\\mathbf{x}_{i+1} & = & \\mathbf{x}_i + \\mathbf{v}_{i+1/2} \\Delta t \\\\\n", "\\mathbf{v}_{i+3/2} & = & \\mathbf{v}_{i+1/2} - \\frac{x_{i+1}}{|\\mathbf{x}_{i+1}|^3} \\Delta t\n", "\\end{eqnarray}\n", "The reason it is called leapfrog is clear: the position and velocity leapfrog over each other in the advance. Let us code that up and see how it does." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Trivial symplectic integration; note that we need to use a smaller time step,\n", "# since we're doing something dumb and non-adaptive, but we'll integrate for the\n", "# same total time\n", "q0 = np.array([1.0, 0.0, 0.0, 0.5])\n", "dt = 0.001\n", "nstep = 1000000\n", "tsymp = np.arange(nstep+1)*dt\n", "qsymp = np.zeros((1+nstep,4))\n", "\n", "# Note that we will understand q[i,0] and q[i,1] as containing x, y, at time t_i, \n", "# and q[i,2] and q[i,3] as containing vx, vy at time t_i+1/2\n", "qsymp[0,:] = q0\n", "for i in range(nstep):\n", " qsymp[i+1,0:2] = qsymp[i,0:2] + qsymp[i,2:4]*dt\n", " qsymp[i+1,2:4] = qsymp[i,2:4] - qsymp[i+1,0:2]*dt / \\\n", " (qsymp[i+1,0]**2 + qsymp[i+1,1]**2)**(3./2.)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the last orbit produced by the symplectic integrator\n", "plt.plot(qsymp[-10000:,0], qsymp[-10000:,1])\n", "plt.axis('equal')\n", "plt.xlabel(r'$x$')\n", "lab=plt.ylabel(r'$y$')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n45k3z/eMKqWUCuDEr9aW7Lr34N92l7T3kNoCrloGDTvD+JdhzD8hqX7FxBkiVftvQmVRii3PUGrY\nsCGXXXYZl112Ge3bt2fNmjW0a9eO3NxcRowY4Sq3cuVK2rZtG7Ceb7/91nWDgXnz5rFnzx7XHXt2\n7tzJpk2baNGicnbVKKUqkUeaQGZ32PF10eWaD4Lfv+EeT0yD9qNDG1sF0C3aaubDDz903dR99+7d\n5OXl0ahRI6677jpefPFF123z8vLyuOOOO7j99ttt63njjTf4+OOPmTBhAhs2bODYsWP88ssvbN26\nla1bt3LXXXfxyiuvVNh6KaWqmEM74KjHVXWLS7JgnYZTDekWbRXmvE2e080338yOHTu48cYbiYuL\nA2D27Nk0aGDd0+Gll17iyiuv5MiRIxhjuOmmmzj//PNdyz/++OO89NJLHDt2jPbt2/Ppp5+Snp7O\n008/zahRo7zaHj16NOPHj+e+++6rgDVVSoXcts8hozPEJJRPfY87znMdPiu48jmXQXyQd9+pYsJ6\nm7yqIicnx/heKF9v81Y2+vopVYlsXmztO217AYybW3z5YMwo4X2ob9lY5fbFBnubPO06VkqpmuzU\nEfcBStu/CE8MVy2tckm2JDTRKqVUTXb6lHv46B5r32pZHd4ZXLn2o+HuXZDRqextVmK6j7YMAp0y\no4qmuyuUqiS2fQ4vDPee9stKqJNpXz4YC/8PPnsi8PxRf7OuU5zWCqJiSt9OFaKJtpTi4uLIy8sj\nNTVVk20JGGPIy8tzHayllAqT3Wv8kyzAb8dLX+fmxUUnWYBO40tffxWlibaUMjMz2bFjB/v27Qt3\nKFVOXFyc19HSSqkKtPp1WPcu/PC2/fy3r7Yu3t9+tPdt5XavgY/vhQmvQHSAP8rFXYyiv/3phNWd\nJtpSio6OpmnTpuEOQymlSuaNy4Mrs/NbGPpH97T/3modLLXzG+saw74Obi26zvHzoPW5JQq1utBE\nq5RSNcF3r8D384Mv/8VT0LCL+xZzzusNf/4ULJgGTXrDxo8grSU06Qv/C3CFvDbnw0UvlS32Kk4T\nrVJK1QRvFXFry7hkuHObtRU75yz39Dcut7qQTx0GcZyksuF96zlvk/V8dA9sXWZfb+OeNT7JgiZa\npZSq/vI2Fz2/z/XWc7rNRWQW/xGWzi55m/2mw6AZJV+uGtLzaJVSqjpb/Tr8tWvg+RmdoP9t1nB0\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Compute energy; note that we use the average positions between two time steps in order\n", "# to ensure that we're evaluating at the same time as the velocity\n", "x = 0.5*(qsymp[:-1,0]+qsymp[1:,0])\n", "y = 0.5*(qsymp[:-1,1]+qsymp[1:,1])\n", "Esymp = 0.5*(qsymp[:-1,2]**2+qsymp[:-1,3]**2) - 1.0/np.sqrt(x**2+y**2)\n", "\n", "# Plot LSODA vs. leapfrog\n", "plt.plot(tsymp[1::1000], Esymp[::1000], label='Leapfrog')\n", "plt.plot(t, E, label='LSODA')\n", "plt.xlabel(r'$t$')\n", "plt.legend(loc='upper left')\n", "lab=plt.ylabel(r'$E$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a fascinating result. The leapfrog integrator is incredibly dumb and unsophisticated compared to LSODA, and if you look carefully at the plot of the last orbit, you will see that the orbit has precessed a noticeable abmount. However, for all its faults, leapfrog conserves energy nearly perfectly, much better than LSODA. The orbit may precess, but it does not decay. This is a fundamental property of symplectic integrators: they are constructed so as to respect conserved quantities. For this reason, long orbit integrations tend to use specialised symplectic integrators, which are higher-order members of the same family as the leapfrog.\n", "\n", "Why does leapfrog have this property? It's a bit complex to prove it, but a basic reason has to do with the fact that it is manifestly time reversible. That is, given the current state of the integrator, you can run it backwards or forwards, and always recover (to machine precision, at least) your previous state. That is not true of other integrators we've used, and it's important, something we know because of this person:\n", "\n", "![Emmy Noether](https://upload.wikimedia.org/wikipedia/commons/e/e5/Noether.jpg)\n", "\n", "Emmy Noether showed that conservation laws are equivalent to symmetries; conservation of energy is equivalent to the symmetry of the laws of physics under reparameterisation in time, including time reversibility. To conserve energy, and integrator must be time reversible, though that by itself is not sufficient. Leapfrog is time reversible, while LSODA is not." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 1 }