{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Stiffness in Initial Value Problems"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as pt"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Consider $y'=-100y+100t + 101$.\n",
        "\n",
        "Exact solution: $y(t)=1+t+ce^{-100t}$.\n",
        "\n",
        "Exact solution derivative: $y'(t)=1-100ce^{-100t}$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "def f(t, y):\n",
        "    return -100*y+100*t + 101"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "t_end = 0.2\n",
        "\n",
        "def plot_solution(t0, y0):\n",
        "    c = (y0-1-t0)/np.exp(-100*t0)\n",
        "    t_mesh = np.linspace(t0, t_end, 1000)\n",
        "    solution = 1+t_mesh+c*np.exp(-100*t_mesh)\n",
        "    \n",
        "    pt.plot(t_mesh, solution, label=\"exact\")\n",
        "    pt.plot(t0, y0, \"ko\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.5/dist-packages/IPython/core/formatters.py:92: DeprecationWarning: DisplayFormatter._ipython_display_formatter_default is deprecated: use @default decorator instead.\n",
            "  def _ipython_display_formatter_default(self):\n",
            "/usr/local/lib/python3.5/dist-packages/IPython/core/formatters.py:669: DeprecationWarning: PlainTextFormatter._singleton_printers_default is deprecated: use @default decorator instead.\n",
            "  def _singleton_printers_default(self):\n"
          ]
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f3551e468d0>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "plot_solution(t0=0, y0=1)\n",
        "plot_solution(t0=0, y0=1.2)\n",
        "plot_solution(t0=0, y0=-0.5)\n",
        "plot_solution(t0=0.05, y0=-0.5)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Here's a helper function that uses a time stepper in the form of a `step_function` to numerically solve an ODE and plot the numerical solution:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 38,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "def integrate_ode(step_function, t0, y0, h):\n",
        "    times = [t0]\n",
        "    ys = [y0]\n",
        "\n",
        "    while times[-1] <= t_end + 1e-14:\n",
        "        t = times[-1]\n",
        "        ys.append(step_function(t, ys[-1], h))\n",
        "        times.append(t + h)\n",
        "\n",
        "    pt.plot(times, ys, label=step_function.__name__)\n",
        "    pt.xlim([t0, t_end])\n",
        "    pt.ylim([-1, 2])\n",
        "    pt.legend(loc=\"best\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Using an Explicit Method"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "First, implement `forward_euler_step(tk, yk, h)`:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 44,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "def forward_euler_step(tk, yk, h):\n",
        "    return yk + h*f(tk, yk)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 45,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nNJ6XX36Zo446iqysLIYNG8bvfvc7SktLOfPMM9m8eTO9evUiKyuLwsJC3J0777yT0aNHc9BBBzFj\nxgx27dpVJ/5HH32UoUOHMnToUH73u9816ztpK3FJCO7+N2BnE8WSO3WKJIE33niDSZMm8dBDD1FU\nVMQ999xDcXExX375Jbm5uTz++OM89thjNeXfeecdRo8ezVdffcWtt95KTk5OTWO4dOlSRo0axZtv\nvgnAkiVLmDJlCgCpqance++97Nixg7feeovFixfz0EMP1YnlhRdeYMWKFXzyySds376dCy+8kDvu\nuINt27YxatQoli1b1uTnWbhwIXfeeScLFy5k69atTJo0iYsvvrhmfnO3yEtLSzn99NO59NJL2bZt\nG0899RQzZ87k008/rSnz1FNP8Ytf/ILi4mImTpzYaF1XXXUVjz76KEVFRaxatYpTTjmFzMxMXnnl\nFYYMGUJxcTFFRUUMHjyY++67j0WLFrF06VI2b95M3759mTlzZp36cnNz+fzzz3n11Ve58847Wbx4\ncbM+U5uIx23Xopk+G/iokXlTgK1AHvA/wJGNlGv5PeVEOkBTv1VmE5dHa+Tk5PicOXM8Eol49+7d\nfc2aNTXzHn74YT/55JPdPbj1Zf1bbc6ZM8enTZvm7u5HHHGEz5kzxy+++GJ3d8/Ozva8vLwG13nv\nvff6+eefX/PazDw3N7fm9eOPP+4nnHBCnWUOOeQQnzNnzgE/y9SpU33u3Lk1ryORiGdmZvr69ev9\nyy+/9JSUlDq39az+7NWfr/rWnk8//bRPnjy5Tt1XX321//u//7u7u19xxRV++eWXHzCWatnZ2f7I\nI494UVFRnfdzc3N92LBhdd474ogjfPHixTWvN2/e7Onp6R6JRPzLL790M/O1a9fWzP/pT3/qV111\nVaPrbux3R5LdQvN9INvdS81sKrAQOKyd1i3S7vy2jr809rZt2wiHwwwfPrzmvezsbDZt2lTzuv4g\n6JQpU/jJT37Cli1bqKqq4qKLLmL27Nnk5+dTVFTEscceC8C6deu46aabeO+99ygrK6OyspLjjjuu\nTl2HHHJIzfTmzZv3W1dzBmDz8/O58cYb+dGPfgTs66fftGkTBx98cDO/iaCet99+u85tRSORCJdd\ndlmL4gF4/vnnuf3227n55pv5+te/zq9//WsmTJjQ6HrPO++8mluPujvp6els2bIFCPZwan9P2dnZ\nrFq1qtmfK97aJSG4+55a06+Y2UNm1s/dd9QvO3v27JrpnJwccnJy2iNEkU5nwIABpKWlkZ+fz5gx\nY4CggRo6dGhNmfpdLqNGjSIUCnH//fczefJkevToweDBg3nkkUfqdKNcc801jBs3jqeffprMzEzu\nu+8+nn/++Tp11a774IMPrun7r7Zhw4YmP8Pw4cP5+c9/XqebqNq2bduAoDuoZ8+eABQWFjZYz7Bh\nw8jJyeHVV19tdF3N7X467rjjWLhwIZFIhN///vdMnz6d9evXN7j88OHDmTt3bp17V1fLz8/H3dmw\nYUPNOMv69esZMmRIkzHk5uYecJyjteJ52KnRyDiBmQ2qNT2e4MY8+yUDCBJC9UPJQKT1UlJSmD59\nOrfeeit79uwhPz+f//iP/+C73/3uAZebMmUKDzzwQM14QU5OTp3XENxuMysri8zMTNasWcN//ud/\nHrDOs846i08++aSmIb3vvvtqtpIP5Oqrr+aOO+7gk08+AWD37t0899xzQJDwhg4dyvz586mqqmLu\n3Ll8/vnnDdZz9tlns3btWubPn09lZSXhcJj33nuPzz77rMkYaguHw/zpT3+iqKiI1NRUevXqRVpa\nsF09aNAgtm/fTlFRUZ34b7nllppkuHXrVhYtWlSnzttvv52ysjJWr17NY489xowZM5qMIycnp05b\nGS/xOuz0T8By4DAzW29mV5rZ1Wb2f6JFLjSzVWaWB9wLXBSP9YrI/mpvqf7+978nMzOTkSNHMnny\nZC699NKaW2Y2ZsqUKezZs4fJkyc3+Brgnnvu4cknnyQrK4urr756v0as/tZy//79efbZZ7n55psZ\nMGAAn3/+OSeddFKTn+Xb3/42s2bNYsaMGfTp04djjjmGv/zlLzXzH330Ue6++24GDBjAp59+2mid\nPXv25LXXXmPBggUMGTKEIUOGMGvWLCoqKpqMob4nnniCESNG0KdPHx555BHmz58PwOGHH87FF1/M\nyJEj6devH4WFhdx4441MmzaN008/nd69e3PiiSfy7rvv1qlvypQpjB49mtNOO42f/vSnnHrqqS2O\nKV50C02RVtAtNCVW+fn5jBw5knA4XDPG0BTdQlNEpJNKtI0KJQQR6VDXXHNNzclcWVlZNdP1j9dv\nT0cffXRNPLVjeuqpp+K6nkQ7s1ldRiKtoC4j6QjqMhIRkXahhCAiIoASgoiIRLXXpStEOpXs7OyE\nGxCUzi87O7tN69egsohIktOgsoiIxJUSgoiIAEoIIiISpYQgIiKAEoKIiEQpIYiICKCEICIiUUoI\nIiICKCGIiEiULl0hIpJgqqqc0oowO4rLKCopZ1dJGUWl5ewuLaO4rJzisjL2lJezp7yMkr3lcVuv\nEoKISCOqqpyS8r3s3FPO7pIydkcb5+KycopKy2oa5uLyMkr3llNSUUZpuJzSvWWUV5ZTVllGRWU5\n5ZEy9laVs7eqjLCXs9fLqKScSisjYuVErIyqlHI8tQxPLYe0cvBUqMzAIiFSqjJIrQqe0wiR5hmk\nW4g0MuiWEorb59W1jEQk4bk7ZXuDLeZde4KGeXe0Yd5duq9R3lMeNMole4NGuWxvOaXRRrmssoyK\nSDkVVWXsjZQT9qBxDlsZlQQNc1VK8Nx0wxw0xmkeIt2CxjndMuieEqJ7agbdU0NkpGUQSgsRSs8g\nMz1EZvcMenQL0aN7Bj0zQvTKyKBXKERWZoisUAZ9eobIysygb88QvXt2p3t687fX43UtIyUEEWk2\nd6c8HGbnnjJ21dpqLioro7g0eK7dlVHdOJeFyygL19piriwLGuaqYGs57OVUEmw1R6yMSEqwxVxV\n3TCn1muYIxmkeNA4p3rQOKcTNMrdLES31H2Nc0ZaaF/D3C1EZnoGPboHDXOvjBA9Q8FzVmYGWZkh\nemcGjXOfniF69+hORrfE70hRQhDpwtydisowu0r2NczV/cxF0X7mPeVl7KmobpyDLo3S6oY5HGwt\nl1cGjXJFtCujequ50sqIUN68hrkqRKpnBA1ztHHuZiHSU4JGuVtKBhmpITLSQmSkZxBKq26Yg0a5\nR/cQPTOCRrlXKGiUe4Uy6NMjRO8eQePct2cG3buloiuON0wJQSQBuDt7I3spC5fXNM679pSxO9ow\nF9Xfaq6o1c8cLqM8HPQvV1QGjXJFJNq/7OWEqd3PfICGuTKE1e5j9hCpNVvMIbpZ0M/cLTWDjJQQ\n3dMyCKWHahrmUHoGPaNbzD2777/FnJW5r3Hu2yuDzIw0NcwJRglBpBZ3J1wVpiy8bzCvdG/QQO+s\n7nOudYRGSUXQ51xSEWwxl+6t1aURiQ4CRvZ1Z4RrDQJWpQRbzjX9zFVpUJkBlSEskkFKpNYWc61+\n5vpdGaG0aD9zetAo9+gWIrNb0L9c3Z3RKxRsLffODNGrun+5RwZ9embQI5RGig4cF5QQJEG5O5VV\nlZRVRhvmWg107ena80rDQXfH7pJa3R0V0S6OvWU15au7N6qP1AhTVnOURlVKOXgKVhmCyhCEM/Bw\n0ECnVgVbzNXdGcFWc9CVUaefOT1onGu6MrqF6JERNNBZoegAYHTwr3ePYKu5T88MevVMJSMDUlM7\n+tuXrkoJQZrF3amIVFAaLqVkbwml4VJKw6U1DXRLnms37LUb+Lr90mUYKaRZtAH2oDsjJRKCyqCR\nrqoIUbU3g8ryEJVlGYTLgq6NfQOAGXUHAbtF+5m7Vx+VUX/wL9hi7t0rjR49qHlkZqqRlq5BCaET\nC0fCbC/bzvbS7XWeiyqKahr1knBJMF0ZNPQl4ZKaRr/2dGm4lNSUVDLTM+mR3oPM9Ewy0zOjfcih\n/Z4z0oKujkh5iHBZiIqSEBXFIUqKQpTsDFGyO3js2RmieEeI3dtDeDiDvr1C9MvKYEDvEP37ptGv\nH/TpA717Q1bWgR89e6rhFomFEkKSCEfCbCretF/jXv28rXTbfu+XVZbRL9SP/qH+9M/sHzyH+tM7\no3edhr1Htx5NTmemZ5Keml4Tz549kJ8P69cHj9rTmzbBli0QicDgwfsegwbtez7oIOjfH/r12/fI\nzESDjCIdSAkhQZWGS3l749sszV/KkvVLeHfTu/TJ6MOAzAF1Gvj6r2u/n9U9C4uhhS0pgXXrYO3a\nuo9166C8HIYP3/fIzt43PWRI0PD36qUGXiSZJFRCMLM5wNnAFnc/ppEy9wNTgRLgCnf/oIEySZcQ\ndpbtZNmGZSzJX8LS9Uv5aMtHfH3Q15k0fBKTsidx0rCT6Bvq2ybrdod//AM+/HDf44MPoLAQRo+G\nww7b/zFggBp7kc4m0RLCRGAP8HhDCcHMpgLXuftZZnY8cJ+7T2igXMInhILiApauX1qTAL7Y+QXH\nDz2eScMnMTl7MscfcjyZ6Zltsu7du+Gdd2D5cnjrrWC6Z0849lj4+tf3PUaPVp+8SFeSUAkBwMyy\ngRcbSQh/AP7q7k9HX38K5Lj7lnrlEiohuDtf7PyipvFfkr+EHWU7mDh8IpOzJzNp+CTGHTyuTh99\nPJWUwJIl8Npr8MYb8MUXcNxxcOKJwWPChKBPX0S6tnglhPa6SMdQYEOt15ui721puHjHe2b1M/zw\n1R8C1DT+N51wE0cedCQp1nZnA33+Ofz3f8Mrr8CKFUECOO00ePRRGDcO0tsm94iItFtCaChzNbgr\nMHv27JrpnJwccnJy2iaiA3hp7Uvc8MoNLLp4Ed8c8s2YBnibY80aeO654FFYCOedBz/6EUyZEnQJ\niYjUlpubS25ubtzr7aguozXAlETsMsr9Mpfpz07npX95ifFDx7fZenbvhgULYM6c4HDPCy+ECy6A\nk05S/7+ItEwidhkZDe8JACwCrgWeNrMJwK76ySARrNi0gunPTufpC59us2Tw/vtw//3wwgtBV9Av\nfwmnn64kICIdLy4Jwcz+BOQA/c1sPXAb0A1wd3/E3V82szPN7O8Eh51eGY/1xtPqr1ZzzlPn8F/n\n/hcnjzg5rnVXVcHLL8NvfxuMEdxwA9xzjwaERSSx6MQ04IudXzDlj1O489Q7ueSYS+JWrzv8+c/w\nb/8G3bsH4wLf+Y4GhkUkvhKxyygpbS7ezGlPnMbPJv4srsngtdfglluCvYO774apU3VCmIgkti6d\nELaXbuf0J07nqrFXMfObM+NS5xdfwI03wmefwa9+FQwU65r1IpIMumxTVVxRzNQnp3LW185i1sRZ\nMddXXh4MEI8fDxMnwqpVQfeQkoGIJIsuuYdQFi7j3AXnMnbwWO785ztjPs/g/ffhu9+FMWNg5crg\nQnEiIsmmyw0qhyNhLnjmAnp068H88+aTmtL64z0rK+GOO+DBB+G++2DGjDgGKiLSTBpUboUqr+KK\nF66gyqt4/NuPx5QMCgpg+nQIhYK9gqFD4xioiEgH6DI93O7OdS9fx8aijTz7nWdjuiDdsmXwzW8G\nJ5b95S9KBiLSOXSZPYRbF9/Ku5veZfHliwmlh1pdz8MPB+cVPPYYnHlmHAMUEelgXSIh3PW3u1i4\nZiFLrlxCVvesVtXhDrfeGlyAbtmy4J4DIiKdSadPCA+/9zAPv/8wS69cyoDMAa2qIxyG738/uA3l\nsmW65ISIdE6dOiE89fFT3L7kdt684k2GZrWuo3/v3uDoob17YfHi4IbyIiKdUadNCC+tfYkfvvpD\n/vey/2VUv1GtqmPvXrjoIohE4Pnng+sRiYh0Vp0yIeR+mcv3XvgeL/3LSxw98OhW1VFZGewZVFUF\n4wbdusU5SBGRBNPpEsLGoo1Mf3Y6Cy5c0Op7GrjDzJnBPY1ffFHJQES6hk6XEJbmL2Vy9mROGXFK\nq+v45S+Dk83++lclAxHpOjpdQlhZsJJxB49r9fJz58ITT8Dy5dCrVxwDExFJcJ3uTOW8wjzGDh7b\nqmXffhtmzQrubjZoUJwDExFJcJ0qIbh7kBAObnlCKCwMLlc9Zw4cfngbBCcikuA6VULYULSBbqnd\nGNxzcIuWC4eDZHDVVXDOOW0UnIhIgutUCaG14wf/9m+QlQW/+EUbBCUikiQ61aByXkHLxw/efBPm\nzYMPPtDdzUSka+tUTWBLB5R37YLLLgvGDQYObMPARESSQOdLCC0YUJ45E849F6ZObcOgRESSRKfp\nMtpaspXiimJG9BnRrPKLFsF778GHH7ZxYCIiSaLTJITqvQOzpm8rWlwM110Hjz8e3AJTREQ6UZdR\nSwaUb701uP1lTk7bxiQikkw61R7CWV87q8lyK1bAs8/C6tXtEJSISBLpPHsIzRhQdocbb4Q77oB+\n/dopMBGRJBGXhGBmZ5jZGjNba2Y3NzD/cjP7ysxWRh/fi8d6qxVXFLOxaCNjBow5YLkFC6CiAi6/\nPJ5rFxHpHGLuMjKzFOAB4FRgM7DCzF5w9zX1ii5w9xtiXV9DPtzyIUcPPJq0lMY/Tmkp3HwzPPmk\nTkATEWlIPJrG8cA6d8939zCwAJjWQLmmD/9ppeYMKP/2t3DCCTBpUltFISKS3OIxqDwU2FDr9UaC\nJFHf+WY2CVgL3OTuG+OwbiAYPzh+6PGNzt++He67D955J15rFBHpfOKREBra8vd6rxcBf3L3sJld\nDcwj6GLaz+zZs2umc3JyyGnGsaErC1ZyzTeuaXT+PffABRfAqFFNViUikvByc3PJzc2Ne73mXr/t\nbmEFZhOA2e5+RvT1LMDd/a5GyqcAO9y9TwPzvKXxVFRW0Peuvuy4eQcZaRn7zd+yBY48Mrh43bBh\nLapaRCQpmBnuHnO3fDzGEFYAo80s28y6ATMI9ghqmFntGxRMAz6Jw3oBWL11NaP6jWowGQDceSdc\neqmSgYhIU2LuMnL3iJldB7xGkGDmuPunZvZLYIW7vwTcYGbnAmFgB3BFrOutdqAB5S1bgktbfxK3\n9CMi0nnF3GUUT63pMrr2f67la/2/xg8m/GC/ebfcArt3w4MPxitCEZHEE68uo6S/dEVeYR7Tj5q+\n3/tFRfDII/Duux0QlIhIEkrqU7QiVRE+/upjjh187H7zHnkkuIDdyJEdEJiISBJK6j2EdTvWMbDH\nQHpn9K7zfkUF3HsvvPhiBwUmIpKEknoPYWXBygYHlJ9+OjjUdGzLbq8sItKlJXVCyCvIY9zB4/Z7\n/4EH4IY2uWqSiEjnldwJoXD/Q07ffRe2btV9kkVEWippE4K7N3gPhAcfhJkzITW1gwITEUlSSZsQ\nNhRtoFtqNwb33HcS9NatsGgRfC+ud1sQEekakjYhrCxYud/4wZw5cN550L9/BwUlIpLEkvaw0/qX\nrHAPEsL8+R0YlIhIEkvaPYT6A8p/+xt06wbjG7oTg4iINCm5E0KtAeXHHoMrrgBrs/uyiYh0bkmZ\nELaWbKW4opgRfUYAsGcP/PnP8N3vdnBgIiJJLCkTQvXegUV3B557DiZOhMGDm1hQREQalZwJod6A\n8mOPwZVXdmBAIiKdQHImhFoDyuvXw6pVcPbZHRyUiEiSS8qEsLJgZc2A8jPPwPnnB0cYiYhI6yVd\nQiiuKGZT8SbGDBgDBFc2veiiDg5KRKQTSLqE8OGWDzl64NGkpaTx978HXUY5OR0dlYhI8ku6hFB7\nQPmZZ+CCCyAtac+3FhFJHEmXEFYW7rspztNPw4wZHRyQiEgnkXQJofqmOGvWwLZtwfkHIiISu6RK\nCBWVFazdvpZ/GvRPPP98cHRRSlJ9AhGRxJVUzenqrasZ1W8UGWkZLFoE06Z1dEQiIp1HUiWE6gHl\nzZth3TqYMqWjIxIR6TySKiGsLAgGlF96Cc44A9LTOzoiEZHOI6kSQl5hMKD8wgvqLhIRibekSQiR\nqggff/Uxo3sdy9KlwR6CiIjET1wSgpmdYWZrzGytmd3cwPxuZrbAzNaZ2VtmNryl61i3Yx0Dewzk\nnTd7M2EC9O4dj8hFRKRazAnBzFKAB4BvAUcBF5vZmHrFvg/scPevAfcCd7d0PdXjB4sWwbnnxhq1\niIjUF489hPHAOnfPd/cwsACo38M/DZgXnX4OOLWlKwmOMBrHq6/CmWfGFK+IiDQgHglhKLCh1uuN\n0fcaLOPuEWCXmfVryUryCvPoUz6Wnj1h5MhYwhURkYbE47JwDd3W3psoYw2UAWD27Nk10zk5OeTk\n5ODu5BXmcULBWL71rVhCFRFJfrm5ueTm5sa9XnNvsF1ufgVmE4DZ7n5G9PUswN39rlplXomWecfM\nUoECdx/YQF3eUDz5u/KZMGcCR75cwA9+AOecE1PIIiKdipnh7g1tnLdIPLqMVgCjzSzbzLoBM4BF\n9cq8CFwenf4OsLglK8grzOOYg8by7rtw8skxxysiIg2IucvI3SNmdh3wGkGCmePun5rZL4EV7v4S\nMAd4wszWAdsJkkaz5RXk0bd8HMcdBz17xhqxiIg0JC63lnH3vwCH13vvtlrTFcD01tafV5hH5drL\nNX4gItJS1/9UAAAKAElEQVSGkuJM5ZUFK/l0sQaURUTaUsLffHJryVaKK/aQvmEExx7b0dGIiHRe\nCZ8Q8grzGJoyliOnmG6GIyLShhK+ic0ryCNl61hycjo6EhGRzi3xE0JhHls/VEIQEWlrCZ8Q3t2w\nkor8sRx5ZEdHIiLSuSV0QiiuKGZz8SZO/qcxGj8QEWljCd3MfrjlQ7IqjuaUnIQf+xYRSXoJnRDy\nCvKo+FLjByIi7SGhE8LSz1cS2TiWo47q6EhERDq/hE4I7+Tn8Y1Dxmr8QESkHSRsU1tRWcHmirVM\nHfdPHR2KiEiXkLAJYfXW1aQVj2LyiaGODkVEpEtI2ISw/B8rCa8fy7hxHR2JiEjXkLAJ4X9X5XFI\n2li6d+/oSEREuoaETQh5hXkcP1y7ByIi7SUhE0KkKsKmyo846zhd71pEpL0kZEL4bNtafM8g/nli\n744ORUSky0jIhPByXh4ZO8cyZEhHRyIi0nUkZEJ4Y3Ueo3uM7egwRES6lIRMCB9tzePEkRpQFhFp\nTwmXENydLSl5nPtN7SGIiLSnhEsIa7esJ7K3G6eMH9zRoYiIdCkJlxAWvpNHVolOSBMRaW8JlxBy\nP8tjVKbGD0RE2lvCJYRV2/IYP1zjByIi7S3hEkKhreTMsUoIIiLtLeESQmXKHr41fkRHhyEi0uXE\nlBDMrK+ZvWZmn5nZq2bW4LUmzCxiZivNLM/MFh6ozl4lY+ne3WIJS0REWiHWPYRZwP+6++HAYuBn\njZQrcfdx7j7W3b99oApHZKi7SESkI8SaEKYB86LT84DGGvtmb/Lv+fvb/OMf/4gxLBERaalYE8JA\nd98C4O6FwEGNlOtuZu+a2XIzm3agCr9Y9hannXaakoKISDszdz9wAbPXgUG13wIc+DnwR3fvV6vs\ndnfv30Adg9290MxGEHQtneLu+7X4ZuakAFVwySWXMH/+/FZ9KBGRrsTMcPeYB1/Tmirg7qcdIIgt\nZjbI3beY2WDgq0bqKIw+/8PMcoGxQMO7AFXB07Jly8jNzSUnJ6epEEVEupTc3Fxyc3PjXm+TewgH\nXNjsLmCHu99lZjcDfd19Vr0yfYBSd99rZgOAZcA0d1/TQH01wWgPQUSkeeK1hxBrQugHPAMMA9YD\n33H3XWZ2HHC1u/8fMzsBeBiIEIxZ/Ie7/7GR+hxg1KhRvP7664wYofMRRESakhAJId7MzC+55BJu\nv/12JQMRkWbqtAkhkeIREUkG8UoICXfpChER6RhKCCIiAighiIhIlBKCiIgASggiIhKlhCAiIoAS\ngoiIRCkhiIgIoIQgIiJRSggiIgIoIYiISJQSgoiIAEoIIiISpYQgIiKAEoKIiEQpIYiICKCEICIi\nUUoIIiICKCGIiEiUEoKIiABKCCIiEqWEICIigBKCiIhEKSGIiAighCAiIlFKCCIiAighiIhIVEwJ\nwcwuNLNVZhYxs3EHKHeGma0xs7VmdnMs6xQRkbYR6x7Cx8B5wJuNFTCzFOAB4FvAUcDFZjYmxvW2\nWG5ubnuvMibJFi8o5vaQbPGCYk4mMSUEd//M3dcBdoBi44F17p7v7mFgATAtlvW2RrL9gZMtXlDM\n7SHZ4gXFnEzaYwxhKLCh1uuN0fdERCSBpDVVwMxeBwbVfgtw4FZ3f7EZ62ho78GbF56IiLQXc4+9\nbTazvwI/cveVDcybAMx29zOir2cB7u53NVBWiUJEpBXc/UBd983S5B5CCzQWzApgtJllAwXADODi\nhgrG4wOJiEjrxHrY6bfNbAMwAXjJzF6Jvn+wmb0E4O4R4DrgNWA1sMDdP40tbBERibe4dBmJiEjy\nS/ozlZs66c3MupnZAjNbZ2ZvmdnwWvOOMbPl0ZPrPjSzbokcs5mlmdkfzewjM1sdHY9pF82IeZKZ\nvW9mYTM7v968y6PLfWZmlyVyvGb29ehv4mMz+8DMprdHvLHEXGt+LzPbaGb3J3q8ZjbMzF41s0+i\n/3/D6y+fgDHfFY11tZnd2x7xNjPmH0Zj+sDMXjezYbXmtex/z92T9kGQ0P4OZAPpwAfAmHplrgEe\nik5fRNBlBZAKfAgcHX3dl+geUwLHfDHwp+h0CPgHMDxBYh4OHA38ETi/1vt9gc+B3kCf6ukEjnc0\nMCo6fTCwGchK5O+41vx7gfnA/YkeL/BX4JTodCaQkcgxAycAS6PTBiwHJidIzFOqvz/g/9ZqL1r8\nv5fsewjNOeltGjAvOv0ccEp0+nTgQ3dfBeDuOz36LSZwzA70MLNUgn+iCqCo7UNuOmZ3Xx/9Lut/\nh98CXnP33e6+i2As6YxEjdfd/+7un0enC4CvgIPaON6YYgYws+OAgQTfb3todbxmdgSQ6u6Lo+VK\n3b08kWOOvs4wswyCjbE0YEuCxPxmre/vbfad59Xi/71kTwjNOemtpowHA9y7zawfcBiAmf3FzN4z\ns5+0Q7x14olqSczPAaUER2t9CdwT/UO3tVhOLqy/7KYWLNtacTkZ0szGA+nVCaKNtTpmMzPgHuAn\nHPiqAfEUy3d8GMFv+vlo98xd0c/Q1lods7u/DeQS/O9tAl5198/iHWADWhrz94FXGlm2yf+9ZE8I\nzTnprX6Z6hPr0oCTCLphJgHnmdnJcY9wf7HEPB6oBAYDI4Efm9mhcY6vIbGcXNgRJybGvE4zOxh4\nHLgiHgE1Z5UNvNfcmGcC/+Pumw5QV7zFEm8aMBG4CfgmMIr2+Z5bHbOZjQLGAEMIGtVTzWxiHGNr\ndNUNvNdgzGZ2KXAc8JuWLlst2RPCRoI+v2qHEPT51rYBGAYQ7WrJcved0WXfjHYVlQEvA41esTWO\nYon5X4C/uHuVu28FlgHfaPuQmxVzWyzbWjGt08x6AS8Bt7j7ijjH1phYYj4BuM7MviDYU/iumd0R\n5/jqi/U3kRftBqkCFpI4/3uNOQ94293L3L2UYCt8Qpzja0izYjazfwZ+BpwT7Vpq9rK1JXtCqDnp\nLXqE0AxgUb0yLwKXR6e/AyyOTr8KHGNmGWaWRjAw80mCx7ye6HiCmfUg+EGuafOImxdzbbW3TF4F\nTjOz3mbWFzgt+l5banW8ZpZO0EDNc/f/btsw62h1zO5+qbsf6u4jgR8Dj7v7LW0bbky/iRVAXzPr\nH319Conzv1db7ZjXA1PMLDX6G5kCtMf5VE3GbGZjgT8A57r79lqzWv6/19aj5O0wCn8G8BmwDpgV\nfe+XwNnR6e7AM9H5bwOH1lr2X4BVwEfArxM9ZqBH9P1V0cdNCRTzNwj2bIqBrcDHtZa9IrrcWuCy\nRI4XuIRgsH4lkBd9PiaRY65Xx+W0w1FGcfhNnEpwlN+HwFwgLZFjJth4/gNB4loF/KY94m1mzK8T\njG1U/2YX1lq2Rf97OjFNRESA5O8yEhGROFFCEBERQAlBRESilBBERARQQhARkSglBBERAZQQREQk\nSglBREQA+P/snpdVPbLHRwAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f35508f54a8>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "t0 = 0.05\n",
        "y0 = -0.5\n",
        "h = 0.008  # start this at 0.001, then grow\n",
        "\n",
        "plot_solution(t0=t0, y0=y0)\n",
        "integrate_ode(forward_euler_step, t0=t0, y0=y0, h=h)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "* What's the main challenge here?"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Using an Implicit Method"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Next, implement `backward_euler_step(tk, yk, h)`:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 46,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "def backward_euler_step(tk, yk, h):\n",
        "    tkp1 = tk+h\n",
        "    return (yk + h*(100*tkp1 + 101))/(1+100*h)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 48,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f35508265c0>"
            ]
          },
          "execution_count": 48,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\nQmCC\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f3550a99080>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "t0 = 0.05\n",
        "y0 = -0.5\n",
        "h = 0.05  # start this at 0.001, then grow\n",
        "\n",
        "plot_solution(t0=t0, y0=y0)\n",
        "integrate_ode(backward_euler_step, t0=t0, y0=y0, h=h)\n",
        "pt.xlim([t0, t_end])\n",
        "pt.ylim([-1, 2])\n",
        "pt.legend()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.5.1+"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}