Numerical Analysis Home

Bisection Method

    


In this chapter we will find roots of a given function \(f\), i.e., \(x^*\) for which \(f(x^*)=0\).

Bisection Method: Suppose \(f\) is a continuous function on \([a,b]\) and \(f(a)\) and \(f(b)\) have the opposite signs. Then by the IVT (Intermediate Value Theorem), there is at least one root \(x^*\) of \(f\) in \((a,b)\). For simplicity, let's assume the root \(x^*\) is unique. Set \(a_1=a\) and \(b_1=b\). Let \(x_1=\displaystyle\frac{a_1+b_1}{2}\) which breaks \([a_1,b_1]\) into two subintervals \([a_1,x_1]\) and \([x_1,b_1]\). Then there are three possibilities:

  1. \(x_1=x^*\): \(f(x_1)=0\) and we are done.

  2. \(x^*\in (a_1,x_1)\): \(f(x_1)\) and \(f(a_1)\) have the opposite signs and set \(a_2=a_1\), \(b_2=x_1\).

  3. \(x^*\in (x_1,b_1)\): \(f(x_1)\) and \(f(b_1)\) have the opposite signs and set \(a_2=x_1\), \(b_2=b_1\).

Set \(x_2=\displaystyle\frac{a_2+b_2}{2}\). We can continue this process of bisecting an interval \([a_n,b_n]\) containing \(x^*\) and getting an approximation \(x_n=\displaystyle\frac{a_n+b_n}{2}\) of \(x^*\). We will show that \(\{x_n\}\) converges to \(x^*\).

Example. Do five iterations by the Bisection Method to approximate the root \(x^*\) of \(f(x)=e^x-x-2\) on the interval \([0,2]\).
Solution. \[\begin{array}{|l|l|c|l|c|l|c|} \hline n & a_n & f(a_n) & b_n & f(b_n) & x_n=\frac{a_n+b_n}{2} & f(x_n)\\ \hline 1 & 0 & - & 2 & + & 1 & -\\ \hline 2 & 1 & - & 2 & + & 1.5 & +\\ \hline 3 & 1 & - & 1.5 & + & 1.25 & +\\ \hline 4 & 1 & - & 1.25 & + & 1.125 & -\\ \hline 5 & 1.125 & - & 1.25 & + & 1.1875 & +\\ \hline \end{array}\] Since \(|x_5-x_4|=|1.1875-1.125 |=0.0625<0.1=10^{-1}\), we can (roughly) say that the root is \(x_5=1.1875\) correct to one decimal place. But why roughly?

Observation. If \(x_n\) is correct to \(t\) decimal places, then \(|x^*-x_n|<10^{-t}\). But the converse is not true.

Example. \(x^*=1.146193\) is correct to \(6\) decimal places (believe me!). So \(x_{11}=1.145507\) is only correct to \(2\) decimal places but \(|x^*-x_{11}|<10^{-3}\). Similarly if \(x^*=1.000\) is approximated by \(x=0.999\), then \(|x^*-x|=0.001<10^{-2}\). But \(x=0.999\) is not correct to any decimal places of \(x^*=1.000\). Also note that we computed \(|x_5-x_4|\), not \(|x^*-x_5|\) (which is not known for \(x^*\)).

It would be useful to know the number of iteration that guarantees to achieve a certain accuracy of the root, say within \(10^{-3}\). That is to find \(n\) for which \(|x^*-x_n|<10^{-3}\), i.e., \(x^*-10^{-3}< x_n < x^*+10^{-3}\). So we have to find an upper bound of the absolute error for the \(n\)th iteration \(x_n\).

The Maximum Error: Let \(\varepsilon_n\) be the absolute error for the \(n\)th iteration \(x_n\). Then \[\varepsilon_n=|x^*-x_n|\leq \frac{b-a}{2^n}.\]

Since \(x^*\in [a_n,b_n]\) and \(b_n-a_n=(b_{n-1}-a_{n-1})/2\) for all \(n\), \[\varepsilon_n=|x^*-x_n|\leq \frac{b_n-a_n}{2}=\frac{b_{n-1}-a_{n-1}}{2^2}=\cdots=\frac{b_1-a_1}{2^n}=\frac{b-a}{2^n}.\; ◼\]

Example. Find the number of iteration by the Bisection Method that guarantees to approximate the root \(x^*\) of \(f(x)=e^x-x-2\) on \([0,2]\) with accuracy within \(10^{-3}\).
Solution. \[\begin{align*} & \varepsilon_n=|x^*-x_n|\leq \frac{2-0}{2^n}=\frac{2}{2^n}<10^{-3}\\ \implies & 2\cdot 10^3< 2^n\\ \implies & \ln(2\cdot 10^3) < \ln 2^n \\ \implies & \ln 2+ 3 \ln(10)< n\ln 2 \\ \implies & \frac{\ln 2+ 3\ln(10)}{\ln 2}< n\\ \implies & 10.97\approx\frac{\ln 2+ 3\ln(10)}{\ln 2} < n \end{align*}\] Thus 11th iteration guarantees to achieve accuracy of the root within \(10^{-3}\).

Note that the root is \(x^*=1.146193\) correct to \(6\) decimal places. So \(x_{10}=1.146484\) and \(x_{11}=1.145507\) both have accuracy within \(10^{-3}\) (check: \(|x^*-x_{10}|<10^{-3}\), \(|x^*-x_{11}|<10^{-3}\)). Thus accuracy within \(10^{-3}\) is reached even before 11th iteration.

It is interesting to note that \(x_{10}=1.{\bf 146}484\) is correct to \(3\) decimal places whereas \(x_{11}=1. {\bf 14}5507\) is only correct to \(2\) decimal places.

Convergence: The sequence \(\{x_n\}\) constructed by the bisection method converges to the solution \(x^*\) because \[\lim_{n\to \infty}|x^*-x_n|\leq \lim_{n\to \infty}\frac{b-a}{2^n}=0 \implies \lim_{n\to \infty}|x^*-x_n|=0.\] But it converges really slowly in comparison to other methods (See "Order of Convergence").

Algorithm Bisection-Method
Input: \(f(x)=e^x-x-2\), interval \([0,2]\), tolerance \(10^{-3}\), maximum number of iterations \(50\)
Output: an approximate root of \(f\) on \([0,2]\) within \(10^{-3}\) or a message of failure
set \(a=0\) and \(b=2\);
\(xold=a\);
for \(i=1\) to \(50\)
     \(x=(a+b)/2\);
     if \(|x-xold|<10^{-3}\)          \(\%\) checking required accuracy
         FoundSolution= true;      \(\%\) done
         break;                               \(\%\) leave for environment
     end if
     if \(f(a)f(x)<0\)
         a=a and b=x
     else
         a=x and b=b
     end if
     \(xold=x\);      \(\%\) update \(xold\) for the next iteration
end for
if FoundSolution
     return \(x\)
else
     print 'the required accuracy is not reached in 50 iterations'
end if


Last edited