Finding Roots Using The Bisection Method

Problem

Devise a C program that seeks an approximate root of any function f(x), good to a tolerance of epsilon, on a prescribed interval [a,b] using the bisection method. Apply it to find an approximate root to the equation x^3 + 0.1x - 27 = 0, accurate to plus or minus 0.0001. You may use the pseudoprogram below as an outline.
Given: a function f, an interval [a,b], a tolerance epsilon

Variables: L, the left endpoint of the current interval
           M, the midpoint of the current interval
           R, the right endpoint of the current interval


L <- a
R <- b

if f(L) and f(R) have the same sign,
  then exit with error message

while R - L > epsilon:
   M <- (L+R)/2;           # compute midpoint
   if f(L) and f(M) have opposite signs, 
      then set current interval to [L,M]
      otherwise, set current interval to [M,R]

Below is an incomplete version of the program. Where you see "...", program text has been deleted. Note the way doubles are formatted for scanf. Note also the way the exit function is used. Note also the use of a very simple function, f(x) = x^3 - 27, for testing purposes.

#include <stdio.h> /* use for the "exit" function */
#include <stdlib.h>

double f( double x){
   return x*x*x  - 27.0; 
 }

main(){

double a, b, L, M, R, epsilon;

printf(" Enter a: "); scanf( "%le", &a );
printf(" Enter b: "); scanf( "%le", &b );
printf(" Enter epsilon: "); scanf( "%lf", &epsilon );
printf(" [%lf,%lf], epsilon = %lf\n", a, b, epsilon );

L = a;
R = b;

if ( f(a)*f(b) > 0 ) {
  printf("  No sign change ... exit!\n");
  exit(1);
    }

while( ... ) {
  ....
  ....
  }
printf("  [%lf,%lf]\n", L,R );
}


}

Back to syllabus
Back to Department of Mathematics, University of Utah
Last modified: Feb 21, 1995
Copyright © 1995 Department of Mathematics, University of Utah