{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Root Finding by Interval Halving (Bisection)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**References:**\n",
    "\n",
    "- Section 1.1 *The Bisection Method* of *Numerical Analysis* by [Sauer](../references.html#Sauer)\n",
    "- Section 2.1 *The Bisection Method* of *Numerical Analysis* by [Burden&Faires](../references.html#Burden-Faires)\n",
    "\n",
    "(See the [References](../references.ipynb).)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "\n",
    "One of the most basic tasks in numerical computing is finding the roots (or \"zeros\") of a function — solving the equation $f(x) = 0$ where $f:\\mathbb{R} \\to \\mathbb{R}$ is a continuous function from and to the real numbers.\n",
    "As with many topics in this course, there are multiple methods that work, and we will often start with the simplest and then seek improvement in several directions:\n",
    "- **reliability** or *robustness* — how good it is at avoiding problems in hard cases, such as division by zero.\n",
    "\n",
    "- *accuracy* and guarantees about accuracy like estimates of how large the error can be — since in most cases, the result cannot be computed exactly.\n",
    "\n",
    "- *speed* or *cost* — often measure by minimizing the amount of arithemtic involved, or the number of times that a function must be evaluated."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Example 1:** Solve $x = \\cos x$.\n",
    "This is a simple equation for which there is no exact formula for a solution, but we can easily ensure that there is a solution, and moreover, a unique one.\n",
    "It is convenient to put the equation into \"zero-finding\" form $f(x) = 0$, by defining\n",
    "\n",
    "$$f(x) := x - \\cos x.$$\n",
    "\n",
    "Also, note that $|\\cos x| \\leq 1$, so a solution to the original equation must have $|x| \\leq 1$.\n",
    "So we will start graphing the function on the interval\n",
    "$[a, b] = [-1, 1]$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Aside:** This is our first use of two Python packages that some of you might not have seen before: *Numpy* and *Matplotlib*.\n",
    "If you want to learn more about them, see for example the Python Review sections on\n",
    "[Python Variables, Lists, Tuples, and Numpy arrays](../python_tutorial/python-variables-lists-tuples-numpy-arrays.ipynb)\n",
    "and\n",
    "[Graphing with Matplotlib](../python_tutorial/graphing-with-matplotlib.ipynb)\n",
    "\n",
    "Or for now, just learn from the examples here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# We will often need resources from the modules numpy and pyplot:\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# We can also import items from a module individually, so they can be used by \"first name only\".\n",
    "# Here this is done for mathematical functions; in some later sections it will be done for all imports.\n",
    "from numpy import cos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = -1; b = 1\n",
    "x = np.linspace(a, b)  #50 equally sapce valued from a to b\n",
    "plt.figure(figsize=(12,6)) # Create an \"empty\" graph, 12 wide, 6 high\n",
    "plt.plot(x, x - cos(x))\n",
    "plt.plot([a, b], [0, 0], 'g')  # Mark the x-axis in green\n",
    "plt.grid(True)  # Add a graph paper background"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# If you want to see what `linspace` gives, run this cell\n",
    "print(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This shows that the zero lies between 0.5 and 0.75, so zoom in:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = 0.5; b = 0.75\n",
    "x = np.linspace(a, b)\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(x, x - cos(x))\n",
    "plt.plot([a, b], [0, 0], 'g')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And we could repeat, geting an approximation of any desired accuracy.\n",
    "\n",
    "However this has two weaknesses: it is very inefficient (the function is evaluated about fifty times at each step in order to draw the graph), and it requires lots of human intervention.\n",
    "\n",
    "To get a procedure that can be efficiently implemented in Python (or another programming language of your choice),\n",
    "we extract one key idea here: finding an interval in which the function changes sign, and then repeatedly find a smaller such interval within it.\n",
    "The simplest way to do this is to repeatedly divide an interval known to contain the root in half and check which half has the sign change in it.\n",
    "\n",
    "Graphically, let us start again with interval $[a, b] = [-1, 1]$, but this time focus on three points of interest: the two ends and the midpoint, where the interval will be bisected:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = -1\n",
    "b = 1\n",
    "c = (a+b)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acb = [a, c, b]\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(acb, acb - cos(acb), 'b*')\n",
    "# And just as a visual aid:\n",
    "x = np.linspace(a, b)\n",
    "plt.plot(x, x - cos(x), 'b-.')\n",
    "plt.plot([a, b], [0, 0], 'g')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Aside on Numpy's math functions:** note on line 3 above  that the function `cos` from Numpy (full name `numpy.cos`) can be evaluated simultaneously on a list of numbers; the version `math.cos` from module `math` can only handle one number at a time.\n",
    "This is one reason why we will avoid `math` in favor of `numpy`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$f(a)$ and $f(c)$ have the same sign, while $f(c)$ and $f(b)$ have opposite signs, so the root is in $[c, b]$;\n",
    "update the a, b, c values and plot again:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 1 0.5\n"
     ]
    }
   ],
   "source": [
    "a = c  # new left end is old center\n",
    "b = b  # redundant, as the right end is unchanged\n",
    "c = (a+b)/2\n",
    "print(a, b, c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acb = [a, c, b]\n",
    "x = np.linspace(a, b)\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(acb, acb - cos(acb), 'b*', x, x - cos(x), 'b-.')\n",
    "plt.plot([a, b], [0, 0], 'g')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Again $f(c)$ and $f(b)$ have opposite signs, so the root is in $[c, b]$, and ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = c  # new left end is old center again\n",
    "# skipping the redundant \"b = b\" this time\n",
    "c = (a+b)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acb = [a, c, b]\n",
    "x = np.linspace(a, b)\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(acb, acb - cos(acb), 'b*', x, x - cos(x), 'b-.')\n",
    "plt.plot([a, b], [0, 0], 'g')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This time $f(a)$ and $f(c)$ have opposite sign, so the root is at left, in $[a, c]$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# this time, the value of a does not need to be updated ...\n",
    "b = c  # ... and the new right end is the former center\n",
    "c = (a+b)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acb = [a, c, b]\n",
    "x = np.linspace(a, b)\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(acb, acb - cos(acb), 'b*', x, x - cos(x), 'b-.')\n",
    "plt.plot([a, b], [0, 0], 'g')\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## A first algorithm for the bisection method\n",
    "\n",
    "Now it is time to dispense with the graphs, and describe the procedure in mathematical terms:\n",
    "- if $f(a)$ and $f(c)$ have opposite signs, the root is in interval $[a, c]$, which becomes the new version of interval $[a, b]$.\n",
    "- otherwise, $f(c)$ and $f(b)$ have opposite signs, so the root is in interval $[c, b]$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Pseudo-code for describing algorithms\n",
    "\n",
    "As a useful bridge from the mathematical desciption of an algorithm with words and formulas to actual executable code,\n",
    "these notes will often describe algorithms in *pseudo-code* —\n",
    "a mix of words and mathematical formulas with notation that somewhat resembles code in a language like Python.\n",
    "\n",
    "This is also preferable to going straight to code in a particular language (such as Python) because it makes it easier if, later, you wish to implement algorithms in a different programming language.\n",
    "\n",
    "Note well one feature of the pseudo-code used here:\n",
    "**assignment** is denoted with a left arrow:\n",
    "\n",
    "$x \\leftarrow a$\n",
    "\n",
    "is the instruction to cause the value of variable `x` to become the current value of a.\n",
    "\n",
    "This is to distinguish from\n",
    "\n",
    "$x = a$\n",
    "\n",
    "which is a **comparison**: the true-or-false assertion that the two quantities _already_ have the same value.\n",
    "\n",
    "Unfortunately however, Python (like most programming languages) does not use this notation:\n",
    "instead assignment is done with `x = a` so that asserting equality needs a differnt notation:\n",
    "this is done with `x == a`; note well that double equal sign!\n",
    "\n",
    "Also, the pseudo-code marks the end of blocks like `if`, `for` and `while` with the lines `end if`, `end for`, `end while` and so on.\n",
    "Many programming languages do something like this (or just use `end` for all blocks) but Python does not:\n",
    "instead it uses only the end of indentation as the indication that a block is finished."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With those notational issues out of the way,\n",
    "the key step in the bisection strategy is the update of the interval:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>$\\displaystyle c \\leftarrow \\frac{a + b}{2}$\n",
    "<br>if $f(a) f(c) < 0$ then:\n",
    "<br>$\\quad$ $b \\leftarrow c$\n",
    "<br>else:\n",
    "<br>$\\quad$ $a \\leftarrow c$\n",
    "<br>end if"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This needs to be repeated a finite number of times, and the simplest way is to specify the number of iterations.\n",
    "(We will consider more refined methods soon.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Get an initial interval $[a, b]$ with a sign-change: $f(a) f(b) < 0$.\n",
    "\n",
    "- Choose $N$, the number of iterations.\n",
    "\n",
    "- for i from 1 to N:\n",
    "<br>$\\quad$ $\\displaystyle c \\leftarrow \\frac{a + b}{2}$\n",
    "<br>$\\quad$ if $f(a) f(c) < 0$ then:\n",
    "<br>$\\quad$$\\quad$ $b \\leftarrow c$\n",
    "<br>$\\quad$ else:\n",
    "<br>$\\quad$$\\quad$ $a \\leftarrow c$\n",
    "<br>$\\quad$ end if\n",
    "<br>end for\n",
    "\n",
    "- The approximate root is the final value of $c$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A Python version of the iteration is not a lot different:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    for i in range(N):\n",
    "        c = (a+b)/2\n",
    "        if f(a) * f(c) < 0:\n",
    "            b = c\n",
    "        else:\n",
    "            a = c"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(If you wish to review for loops in Python, see the Python Review section on\n",
    "[*Iteration with for*](../python_tutorial/iteration-with-for.ipynb))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise 1\n",
    "\n",
    "Create a Python function `bisection1` which implements the first algorithm for bisection abive,\n",
    "which performd a fixed number $N$ of iterations;\n",
    "the usage should be:\n",
    "`root = bisection1(f, a, b, N)`\n",
    " \n",
    "Test it with the above example:\n",
    "$f(x) = x - \\cos x = 0$, $[a, b] = [-1, 1]$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(If you wish to review the defining and use of functions in Python, see the Python Review section on\n",
    "[Defining and Using Python Functions](../python_tutorial/functions.ipynb))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Error bounds, and a more refined algorithm\n",
    "\n",
    "The above method of iteration for a fixed number of times is simple, but usually not what is wanted in practice.\n",
    "Instead, a better goal is to get an approximation with a guaranteed maximum possible error:\n",
    "a result consisting of an approximation $\\tilde{r}$ to the exact root $r$ and also a bound $E_{max}$ on the maximum possible error; a guarantee that $|r - \\tilde{r}| \\leq E_{max}$.\n",
    "To put it another way, a guarantee that the root $r$ lies in the interval $[\\tilde{r} - E_{max}, \\tilde{r} + E_{max}]$.\n",
    "\n",
    "In the above example, each iteration gives a new interval $[a, b]$ guaranteed to contain the root,\n",
    "and its midpoint $c = (a+b)/2$ is with a distance $(b-a)/2$ of any point in that interval, so at each iteration, we can have:\n",
    "- $\\tilde{r}$ is the current value of $c = (a+b)/2$\n",
    "- $E_{max} = (b-a)/2$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Error tolerances and stopping conditions\n",
    "\n",
    "The above algorthm can *passively* state an error bound, but it is better to be able to solve to a desired degree of accuracy;\n",
    "for example, if we want a result \"accurate to three decimal places\", we can specify $E_{max} \\leq 0.5 \\times 10^{-3}$.\n",
    "\n",
    "So our next goal is to *actively* set an accuracy target or *error tolerance* $E_{tol}$ and keep iterating until it is met.\n",
    "This can be achieved with a `while` loop; here is a suitable algorithm:\n",
    "\n",
    "- Input function $f$, interval endpoints $a$ and $b$, and an error tolerance $E_{tol}$\n",
    "\n",
    "- Evaluate $E_{max} = (b-a)/2$\n",
    "\n",
    "- while $E_{max} > E_{tol}$:\n",
    "<br>$\\quad c \\leftarrow (a+b)/2$\n",
    "<br>$\\quad$ if $f(a) f(c) < 0$ then:\n",
    "<br>$\\quad\\quad b \\leftarrow c$\n",
    "<br>$\\quad$ else:\n",
    "<br>$\\quad\\quad a \\leftarrow c$\n",
    "<br>$\\quad$ end if\n",
    "<br>$\\quad E_{max} \\leftarrow (b-a)/2$\n",
    "<br>end while\n",
    "\n",
    "- Output $\\tilde{r} = c$ as the approximate root and $E_{max}$ as a bound on its absolute error."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(If you wish to review while loops, see the Python Review section on\n",
    "[Iteration with while](../python_tutorial/iteration-with-while.ipynb))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise 2\n",
    "\n",
    "Create a Python function implementing this better algorithm, with usage\n",
    "`root = bisection2(f, a, b, E_tol)`\n",
    "\n",
    "Test it with the above example: $f(x) = x - \\cos x$, $[a, b] = [-1, 1]$,\n",
    "this time accurate to within $10^{-4}$.\n",
    "\n",
    "Use the fact that there is a solution in the interval $(-1, 1)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "This work is licensed under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
