二分法求函数零点

/*
二分法求函数的零点
 */

#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