码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-25 19:30:59      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

这题只是考你最后有没有(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 }

 

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

标签:

原文地址:http://www.cnblogs.com/KakagouLT/p/4995314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!