C++ Program for Bisection Method

C++Server Side ProgrammingProgramming

Given with the function f(x) with the numbers a and b where, f(a) * f(b) > 0 and the function f(x) should lie between a and b i.e. f(x) = [a, b]. The task is to find the value of root that lies between interval a and b in function f(x) using bisection method.

What is bisection method?

Bisection method is used to find the value of a root in the function f(x) within the given limits defined by ‘a’ and ‘b’. The root of the function can be defined as the value a such that f(a) = 0.

Example

Quadratic equation F(x) =  - 8
This equation is equals to 0 when the value of x will be 2 i.e.  - 8 = 0
So, root of this quadratic function F(x) will be 2.

Now, If a function f(x) is continuous in the given interval [a..b] and also, sign of f(a) ≠ sign of f(b) then there will be a value m which belongs to the interval a and b such that f(m) = 0

Value m [a..b] Such that f(m) = 0

I.e. m is the value of root which can be multiple

Given below is the figure which is showing the intervals f(a) and f(b). To find the root between these intervals the limit is divided into parts and stored in the variable m i.e.

m = (a + b) / 2

After the division of limits new interval will be generated as shown in the figure given below

Example

Input-: x^3 - x^2 + 2 ; a =-500 and b = 100
Output-: The value of root is : -0.991821
Input-: x^3 - x^2 + 2 ; a =-200 and b = 300
Output-: The value of root is : -1.0025

 Approach that we are using in the below program is as follow −

  • Input the equation and the value of intervals a and b
  • Divide the intervals as : m = (a + b) / 2
    • Print m is the root
  • If f(m) ≠ 0
    • Check if f(a) * f(m) < 0
    • Then root will lie between a and m
    • Check if f(b) * f(m) < 0
    • Then root will lie between b and m

Algorithm

Start
Step 1-> In function double solution(double x)
   Return x*x*x - x*x + 2
Step 2-> In function bisection(double a, double b)
   If solution(a) * solution(b) >= 0 then,
      Print "You have not assumed right a and b "
      Return
   End If
   Set c = a
   Loop While (b-a) >= EP
      Set c = (a+b)/2
      If solution(c) == 0.0
         Break
      End If
      Else if solution(c)*solution(a) < 0
         Set b = c
      End Else If
      Else
         Set a = c
      End Else
   End
   Print "The value of root”
Step 3-> In function int main()
   Declare and Initialize inputs  a =-500, b = 100
   Call function bisection(a, b)
Stop

Example

 Live Demo

#include <iostream>
using namespace std;
#define EP 0.01
// An example function whose solution is determined using
// Bisection Method. The function is x^3 - x^2 + 2
double solution(double x) {
   return x*x*x - x*x + 2;
}
// Prints root of solution(x) with error in EPSILON
void bisection(double a, double b) {
   if (solution(a) * solution(b) >= 0) {
      cout << "You have not assumed right a and b\n";
      return;
   }
   double c = a;
   while ((b-a) >= EP) {
      // Find middle point
      c = (a+b)/2;
      // Check if middle point is root
      if (solution(c) == 0.0)
         break;
       // Decide the side to repeat the steps
      else if (solution(c)*solution(a) < 0)
         b = c;
      else
         a = c;
   }
   cout << "The value of root is : " << c;
}
 // main function
int main() {
   double a =-500, b = 100;
   bisection(a, b);
   return 0;
}

Output

The value of root is : -0.991821
raja
Published on 20-Dec-2019 13:01:02
Advertisements