用二分法求方程的根

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 总时间限制: 1000ms    内存限制: 65536kB描述 用二分法求下面方程在(-10, 10)之间的一个根。 2x3- 4x2+ 3x- 6 = 0 输入一个小于1的非负实数e,它的值表示所能允许的误差输出一个实数,其值为求得的一个根,要求精确到小数点后8位。
总时间限制: 1000ms      内存限制:  65536kB
描述

用二分法求下面方程在(-10, 10)之间的一个根。 
2x3- 4x2+ 3x- 6 = 0

输入
一个小于1的非负实数e,它的值表示所能允许的误差
输出
一个实数,其值为求得的一个根,要求精确到小数点后8位。
若该区间上没有根,则输出“No Solution”
样例输入
0
样例输出
2.00000000
提示对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a, b]内至少有一个根。
特别的,对于一个单调的连续函数,上述定理得逆定理也成立
若[a, b]上有根,则可进一步考察根是否在 [a, (a+b)/2]内,或者在[(a+b)/2, b]内。

若b-a <= e 则可终止迭代,并认为(a+b)/2是一个近似解,将它输出

请使用double类型!
 1 #include<stdio.h>
 2 #include<math.h>
 3 double f(double x);
 4 double fun(double a,double b,double e);
 5 int main()
 6 {
 7     double e,x1,x2,x;
 8     x1=-10;x2=10;
 9     scanf("%lf",&e);
10     x=fun(x1,x2,e);
11     printf("%.8lf\n",x);
12     return 0;
13 }
14 double f(double x)
15 {
16     double y;
17     y=2*x*x*x-4*x*x+3*x-6;
18     return y;
19 }
20 double fun(double a,double b,double e)
21 {
22     double fa,fb,fc,c;
23     fa=f(a);
24     fb=f(b);
25     c=(a+b)/2;
26     while(fabs(b-a)>e)
27     {
28         fc=f(c);
29         if(fc==0)
30         {
31             break;
32         }
33         else if(fc*fa<0)
34         {
35             b=c;
36             fb=fc;
37         }
38         else
39         {
40             a=c;
41             fa=fc;
42         }
43         c=(a+b)/2;
44     }
45     return c;
46 }

这个题目要用while语句实现才可以通过。下面的代码不能通过。(一直没懂什么原因……)下面这段是不行的。

 1 #include<stdio.h>
 2 #include<math.h>
 3 double f(double x);
 4 double fun(double a,double b,double e);
 5 int main()
 6 {
 7     double e,x1,x2,x;
 8     x1=-10;x2=10;
 9     scanf("%lf",&e);
10     x=fun(x1,x2,e);
11     printf("%.8lf\n",x);
12     return 0;
13 }
14 double f(double x)
15 {
16     double y;
17     y=2*x*x*x-4*x*x+3*x-6;
18     return y;
19 }
20 double fun(double a,double b,double e)
21 {
22     double fa,fb,fc,c;
23     fa=f(a);
24     fb=f(b);
25     c=(a+b)/2;
26     do
27     {
28         c=(a+b)/2;
29         fc=f(c);
30         if(fc==0)
31         {
32             break;
33         }
34         else if(fc*fa<0)
35         {
36             b=c;
37             fb=fc;
38         }
39         else
40         {
41             a=c;
42             fa=fc;
43         }
44     }while(fabs(b-a)>e);
45     return c;
46 }

 

下面的代码是通过了的。
 1 #include<iostream>
 2 #include<cmath>
 3 #include<iomanip>
 4 using namespace std;
 5 double f(double x);
 6 double fun(double a,double b,double e);
 7 int main()
 8 {
 9     double e,x1,x2,x;
10     x1=-10;x2=10;
11     cin>>e;    
12     x=fun(x1,x2,e);
13     cout<<setprecision(8)<<setiosflags(ios::fixed)<<x<<endl; 
14     return 0;
15 }
16 double f(double x) 
17 {
18     double y;
19     y=2*x*x*x-4*x*x+3*x-6;
20     return y;
21 }
22 double fun(double a,double b,double e)
23 {
24     double xm,y1,y2,ym;
25     y1=f(a);
26     y2=f(b);
27     xm=(a+b)/2;
28     while(fabs(a-b)>e)
29     {
30         ym=f(xm);
31         if (ym==0) return xm;
32         else  if(y1*ym<=0)
33         {
34                b=xm;
35                y2=ym;
36         }
37         else
38         {
39                a=xm;
40                y1=ym;
41         }
42         xm=(a+b)/2;                
43     }
44     return xm;
45 }

 

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
4月前
|
算法 机器人 测试技术
【动态规划】【前缀和】【推荐】2463. 最小移动总距离
【动态规划】【前缀和】【推荐】2463. 最小移动总距离
|
4月前
|
算法 测试技术
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
|
4月前
|
人工智能 测试技术 Windows
【深度优先搜索】【树】【状态压缩】2791. 树中可以形成回文的路径数
【深度优先搜索】【树】【状态压缩】2791. 树中可以形成回文的路径数
|
4月前
|
测试技术
【动态规划】【组合数学】1866. 恰有 K 根木棍可以看到的排列数目
【动态规划】【组合数学】1866. 恰有 K 根木棍可以看到的排列数目
|
4月前
|
人工智能 算法 BI
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
|
4月前
|
Python
平方根,又叫二次方根,表示为〔√ ̄〕
平方根,又叫二次方根,表示为〔√ ̄〕
|
11月前
|
算法 索引
算法:二分查找算法/朴素二分/查找区间左右端点二分
算法:二分查找算法/朴素二分/查找区间左右端点二分
Leetcode1302–层数最深叶子结点的和(深搜/递归)
Leetcode1302–层数最深叶子结点的和(深搜/递归)
leetcode160–相交链表(最优解/双指针)
leetcode160–相交链表(最优解/双指针)
每日三题-验证二叉搜索树、二叉树的直径、把二叉搜索树转换为累加树
每日三题-验证二叉搜索树、二叉树的直径、把二叉搜索树转换为累加树验证二叉搜索树验证二叉搜索树v
59 2
每日三题-验证二叉搜索树、二叉树的直径、把二叉搜索树转换为累加树