Hi all,
I m new to C++ and very desperately looking for some help in my code.Im trying to write a program that uses bisection method to find the root of a function.Im having problems as my results are not accurate enough and my function (f) does not produce answers in required decimal points.
#include <iostream>
#include<cdtg>
#include<cstdlib>
using namespace std;
void readParameters(float& x1,float& x2,float& epsilon) {
cout << endl << endl << "The Bisection Method" << endl;
cout << "Please input x1, x2 and epsilon seperated by whitespace: ";
cin >> x1;
cin >> x2;
cin >> epsilon;
cout << endl << endl;
}
float f(float x) {
return (x*x*x)-(3.17*x*x)-(4.835*x)+11.01;
}
void findZero(float& x1,float& x2,float epsilon) {
float low, high, midpoint;
if (f(x1) <= 0) {
low = x1;
high = x2;
}
else {
low = x2;
high = x1;
}
midpoint = low + (high-low)/2;
while (abs(high - low) > epsilon) {
if (f(midpoint) <= 0) {
low = midpoint;
}
else{
high = midpoint;
}
midpoint = low + (high-low)/2;
}
if (low>high)
{
x2=low;
x1=high;
}else{
x1=low;
x2=high;
}
}
int main()
{
float x1 = 0.0;
float x2 = 0.0;
float epsilon = 0.0;
readParameters(x1,x2,epsilon);
if (x1 > x2)
{
cout<<"Empty interval"<<endl;
return 0;
}
findZero(x1,x2,epsilon);
cout << "Zero is in the interval [x1,x2] = [" << x1 << "," << x2 << "]" << endl;
cout << "f(x1) = " << f(x1) << endl;
cout << "f(x2) = " << f(x2) << endl;
}
Can anybody please
help me.
Thanks.
Sana