/*
二分法求函数的零点
*/
#include <bits/stdc++.h>
using namespace std;
double f(double x)
{
return pow(x, 2) + 3*x + 2; // f = x^2+3x+2
}
// 指定根区间范围为[a, b],根误差为eps
double root(double a, double b, double eps)
{
double mid = (a+b)/2.0;
//注释掉的部分是以值误差为小于eps情况下的求解
// while( 1 )
// {
// if(abs(f(mid)) < eps)
// break;
// else if(f(a)*f(mid) < 0)
// b = mid;
// else a = mid;
// mid = (a+b)/2.0;
// }
while(b-a>eps)
{
if(f(mid)==0)
break;
else if(f(a)*f(mid) < 0)
b = mid;
else a = mid;
mid = (a+b)/2.0;
}
return mid;
}
int main()
{
double res = root(-1.5, 0, 0.001);
cout << res << endl;
return 0;
}
二分法求函数零点
猜你喜欢
转载自blog.csdn.net/qq_40438165/article/details/83421978
今日推荐
周排行