0% found this document useful (0 votes)
31 views

Bisection 1

The document describes using the bisection method to find the root of an equation. It provides the algorithm, flowchart, sample C++ program, and output for finding the root of equations like f(x)=x^2-4 and f(x)=3x+sinx-e^x using this numerical method. The bisection method works by repeatedly bisecting the interval between two values, a and b, where f(a) and f(b) have opposite signs, to converge on the root.

Uploaded by

Mirajoy Tardio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

Bisection 1

The document describes using the bisection method to find the root of an equation. It provides the algorithm, flowchart, sample C++ program, and output for finding the root of equations like f(x)=x^2-4 and f(x)=3x+sinx-e^x using this numerical method. The bisection method works by repeatedly bisecting the interval between two values, a and b, where f(a) and f(b) have opposite signs, to converge on the root.

Uploaded by

Mirajoy Tardio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Aim: To find the root of an equation using Bisection Method.

Algorithm:

1. Enter the initial guesses: a and b.


2. Enter the accuracy, eps.
3. If f(a)*f(b)<0,
then continue,
else
ask the user to enter different values of a and b.
4. While (|a-b|<eps)
Calculate c= (a+b)/2.
If f(a)*f(c)>0
b=c
Else
a=c

End While.

5. Print ‘c’ which is the required root between a & b.


6. End.

Flow Chart:

Start

Enter a,b

Enter eps.

Is No
f(a)*f(b)<0

Yes

c=(a+b)/2

A B
A B

No Is
f(a)*f(c)<0
?

a=c
Yes

b=c

Is No
|a-b|<eps?

?
Yes

Print c

End

Program:
//bisection method
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double f(double x); //declare the function for the given equation
double f(double x) //define the function here, ie give the equation
{
double a=x*x-4.0; //write the equation whose root is to be determined
return a;
}
int main()
{
cout.precision(5); //set the precision
cout.setf(ios::fixed);
double a,b,c,e,fa,fb,fc; //declare some needed variables
a:cout<<"Enter the initial guesses:\na="; //Enter the value of a(set a label('a:') for later use with
goto)
cin>>a;
cout<<"\nb="; //Enter the value of b
cin>>b;
cout<<"\nEnter the degree of accuracy desired"<<endl; //Enter the accuracy
cin>>e; //e stands for accuracy
int iter=0;
if (f(a)*f(b)>0) //Check if a root exists between a and b
{ //If f(a)*f(b)>0 then the root does not exist between a and b
cout<<"Please enter a different intial guess"<<endl;
goto a; //go back to 'a' ie 17 and ask for different values of a and b
}
else //else a root exists between a and b
{
cout<<"Iter"<<setw(14)<<"a"<<setw(18)<<"b"<<setw(18)<<"c"<<setw(18)<<"f(c)"<<setw(18)<<"|a-
b|"<<endl;
cout<<"-----------------------------------------------------------------------------------------------\n";
while (fabs(a-b)>=e) /*if the mod of a-b is greater than the accuracy desired
keep bisecting the interval*/
{
c=(a+b)/2.0; //bisect the interval and find the value of c
fa=f(a);
fb=f(b);
fc=f(c);
iter++;
cout<<iter<<setw(18)<<a<<setw(18)<<b<<setw(18)<<c<<setw(18)<<fc<<setw(18)<<fabs(a-
b)<<endl;/*print the values of a,b,c and fc after each iteration*/
if (fc==0) //if f(c)=0, that means we have found the root of the equation
{
cout<<"The root of the equation is "<<c<<endl;; /*print the root of the
equation and end program*/
return 0;
}

if (fa*fc>0) //if f(a)xf(c)>0, that means no root exist between a and c


{
a=c; /*hence make a=c, ie make c the starting point of the interval and b
the end point*/
}
else if (fa*fc<0)
{
b=c; /*this means that a root exist between a and c therfore make c the
end point of the interval*/
}

}
} //The loop ends when the difference between a and b becomes less than the desired
accuracy ie now the value stored in 'c' can be called the approximate root of the equation
cout<<"The root of the equation is "<<c<<endl;; //print the root
return 0;
}
Output:

For f(x)=x^2-4:

For f(x)= 3x+sinx-e^x

You might also like