算法小题二(求高次方程的一个实根2x^4-4x^3+6X^2-8x-8=0)

 求高次方程的一个实根2x^4-4x^3+6X^2-8x-8=0(精度要求10^-3) 

 算法分析如下:求高次方程的一个实根的算法有很多种,这里介绍一种二分法.

        设高次方程f(x)=0,则用二分法求其一个实根的算法如下

       1,输入初值x1和x2,计算它们对应的函数值y1 = f(x1), y2 = f(x2).若y1 和 y2同号,说明x1和x2之间没有实根转第一步重新输入;否则说明  x1,x2之间有实根,转为第二步.

       2,计算中间位置 x= (x1+x2)/2

       3,计算x1点x点函数值y1=f(x1),y=f(x)。若函数值y=0则算法结束,x就是这个高次方根的一个实根,否则转为4步

       4,若函数值y和y1同号,说明实根在x1和x2之间,则令x1=x,转为第2;否则,说明实根在x1到x之间,x2=x,转第2


#include<stdio.h>
#include <math.h>                       /*程序使用了求绝对值的函数fabs()*/
int main()
{
    float x1, x2, x , y1, y2, y;
    do
    {
        printf("进入do");
        scanf("%f,%f",&x1,&x2);          
        y1= 2*x1*x1*x1*x1-4*x1*x1*x1+6*x1*x1-8*x1-8;
        y2= 2*x2*x2*x2*x2-4*x2*x2*x2+6*x2*x2-8*x2-8;
        printf("y1*y2 = %d y1*y2>0为:%d",y1*y2,(y1*y2)>0);
    }while((y1*y2)>0);
    while(1)                           /*这是个条件恒真的死循环*/
    {
        x=(x1+x2)/2;
        y= 2*x*x*x*x-4*x*x*x+6*x*x-8*x-8;
        y1 = 2*x1*x1*x1*x1 -4 *x1*x1*x1+6*x1*x1-8*x1-8;
        if(fabs(y)<1e-5)break;        /*找到根后强迫退出*/
        else if(y*y>0)x1=x;
        else x2 =x;
    }
    printf("x=%f/n",x);               /*本方程在0-10间有个实根为2.0*/
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值