Openjudge NOI题库 ch0111/t6253 用二分法求方程的根

本文介绍了一种利用二分法求解特定多项式方程在指定区间内的根的方法。通过迭代过程逐步缩小搜索范围直至找到满足精度要求的近似解。文章提供了完整的C语言实现代码,展示了如何通过判断函数值的符号变化来定位根的位置。

这题只是考你最后有没有(r-l)/2而已……

总时间限制:
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 {
 5     x=2*pow(x,3)-4*pow(x,2)+3*x-6;
 6     return x;
 7 }
 8 int main()
 9 {
10     double e;
11     double mid,l=-10,r=10,fl,fr,fm;
12     scanf("%lf",&e);
13     fl=f(l);
14     fr=f(r);
15     while(!(r-l<=e))
16     {
17         mid=(l+r)/2;
18         fm=f(mid);
19         if(fm*fl<0)
20         {
21             r=mid;
22             fr=fm;
23         }
24         else
25         {
26             l=mid;
27             fl=fm;
28         }
29         if(r-l<0.000000001) break;
30     }
31     mid=(r+l)/2;
32 //    if(e>=1) printf("No Solution"); 经测试这项不需要写
33     printf("%.8lf",mid);
34     return 0;
35 }

 

转载于:https://www.cnblogs.com/KakagouLT/p/4995314.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值