用二分法求下面方程在区间(a,b)之间的根:
2x3-4x2+3x-6=0
区间端点a, b由键盘输入,确保输入区间内有根。
计算至误差小于10-6为止。
程序中,浮点型数据请定义为双精度double类型。
提示:二分法求方程根的步骤如下:
先将方程写成f(x)=0的形式,再按照如下步骤计算:
1.求出给出的两个端点之间的值fx1,fx2,当fx1*fx2<0,则表明x1和x2之间必存在一根。
2.一旦fx1*fx2<0,就表明在x1和x2之间有根,继续判断,求的x1和x2的中点值x0,求出fx0。
3.再判断fx0*fx1>0,则在x0和x2中间去找根,此时x1不起作用,用x0代替x1,用fx0代替fx1。
要么就在x0和x1中去找根,此时x2不起作用,用x0代替x2,用fx0代替fx2。
在一行中输入以空格分隔的区间端点值 m 和 n(m<n),并确保输入的区间内存在方程的根。
二分法求得的方程根,小数点后保留6位小数,末尾换行。
#include<stdio.h>
#include<math.h>
int main()
{double x1,x2,y1,y2,x0,y0;
scanf("%lf%lf",&x1,&x2);
x0=(x1+x2)/2;
do{
y1=2*pow(x1,3)-4*pow(x1,2)+3*x1-6;
y2=2*pow(x2,3)-4*pow(x2,2)+3*x2-6;
y0=2*pow(x0,3)-4*pow(x0,2)+3*x0-6;
if((y0*y1)<0){
x0=(x1+x0)/2;
}
else if(y0==0){
break;
}
else if((y0*y1)>0){
x0=(x2+x0)/2;
}
}
while(fabs(y0)>0.000001);
printf("%.6lf",x0);
return 0;
}