求高次方程的一个实根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*/
}