二分法求方程根

用二分法求下面方程在区间(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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值