m0_56618335 2022-06-16 20:11 采纳率: 100%
浏览 88
已结题

使用C++求解区间二分法求根这一问题

区间二分法求根
用区间二分法求方程x^5+3x-1=0的最小正根,要求误差不超过1/2×10^(-2),x^3-2x^2-4x-7=0在[3,4]的近似根,要求精度|x^*-x_k |<10^(-3)
运行结果及报错内容
使用C++语言解决
完整可运行代码
  • 写回答

1条回答 默认 最新

  • 下坠丷 2022-06-16 20:54
    关注
    
    
    #include<iostream>
    using namespace std;
    float erfen1(float a, float b);
    float erfen2(float a, float b);
    float  f1(float x);
    float  f2(float x);
    int main()
    {
        cout << erfen1(0, 10000) << endl;
        cout << erfen2(3, 4);
    }
    
    float erfen1(float a, float b)
    {
        float m;
        //解位于(a,b)区间内,如果两者距离小于1.0*(1e-2)/2。那么a,b已经满足所需精度
        for (; fabs(a - b) > 1e-2;)
        {
            m = (a + b) / 2;
            //结果<1.0*(1e-2)/2,满足精度,直接输出
            if (fabs(f1(m)) < 1e-2)return m;
            //根据零点定理,若区间[a,b]内,有f1(a)*f1(b)<0,则解位于此区间
            //解位于(a,m)
            if (f1(a) * f1(m) < 0)b = m;
            //解位于(m,b)
            if (f1(m) * f1(b) < 0)a = m;
        }
        return a;
    }
    
    float erfen2(float a, float b)
    {
        float m;
        for (; fabs(a - b) > 1e-3;)
        {
            m = (a + b) / 2;
            if (fabs(f2(m)) < 1e-6)return m;
            if (f2(a) * f2(m) < 0)b = m;
            if (f2(m) * f2(b) < 0)a = m;
        }
        return a;
    }
    
    float  f1(float x)
    {
        return x * x * x * x * x + 3 * x - 1;
    }
    
    float  f2(float x)
    {
        return x * x * x - 2 * x * x - 4 * x - 7;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月16日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?