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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效