t6253:用二分法求方程的根
- 总时间限制:
- 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类型!
#include <iostream>
#include <cstdio>
using namespace std;
double x;
double judge(double xx)
{
return (*xx*xx*xx-*xx*xx+*xx-);
}
int main()
{
double left,right,mid,n,sum1,sum2,sum3;
scanf("%lf",&x);
left=-; right=;
while (right>left)
{
mid=(left+right)/;
sum1=judge(left);
sum2=judge(right);
sum3=judge(mid);
if (sum3== || right-left<=x)
{
printf("%.8lf",mid);
return ;
}
else
if (sum1*sum3<)
right=mid;
else
if (sum2*sum3<)
left=mid;
}
printf("No Solotion");
return ;
}