算法作业打卡

7-2 二分法求函数的零点 pintia

  • 有函数:f(x)=x5−15x4+85x3−225x2+274x−121
    已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。
    提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7

输入格式:

无。

输出格式:x

该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位

代码:
    #include <iostream>  

    #include <cmath> // 包含fabs函数  

    #include <iomanip> // 用于设置输出精度  

    using namespace std;  

      double f(double x) {  

        return x*x*x*x*x - 15*x*x*x*x + 85*x*x*x - 225*x*x + 274*x - 121;  

    }   double binary_search(double a, double b, double tol = 1e-7) {  

        if (f(a) * f(b) >= 0) {  

            cout << "二分法失败,因为f(a)和f(b)同号" << endl;  

            return 0.0;  

        }  

        while ((b - a) / 2 > tol) {  

            double c = (a + b) / 2;  

            if (fabs(f(c)) < tol) {  

                return round(c * 1e6) / 1e6; // 四舍五入到小数点后6位  

            } else if (f(c) * f(a) < 0) {  

                b = c;  

            } else {  

                a = c;  

            }  

        }  

        // 如果循环结束还没有找到精确到tol的根,返回区间的中点作为近似解  

        return round((a + b) / 2 * 1e6) / 1e6; // 注意这里也要除以2  

    }  

      

    int main() { // 注意这里修改了括号  

        double root = binary_search(1.5, 2.4);  

        cout << fixed << setprecision(6) << root << endl; // 设置输出精度为6位小数  

        return 0;  

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值