写一函数用二分法求方程的一个根。方程为ax(x的三次方)+bx(x的二次方)+cx+d=0,系数a、b、c、d由主函数输入。
#include
float value(float a,float b,float c,float d,float t){
t = a*t*t*t+b*t*t+c*t+d;
return t;
}
main(){
float a,b,c,d;
float v1,v2;
float jd,temp;
scanf("%f,%f,%f,%f,%f,%f,%f",&a,&b,&c,&d,&v1,&v2,&jd);
while(v1-v2>jd || v2-v1>jd){
temp = (v1+v2)/2;
if(value(a,b,c,d,temp)==0){
v1=v2=temp;
}else{
if(value(a,b,c,d,v1)<value(a,b,c,d,temp)){
v2 = temp;
}else{
v1 = temp;
}
}
}
printf("%f",(v1+v2)/2);
getch();
}
输入的参数分别为a,b,c,d和两个端值v1,v2以及精度jd。
有一个算法的图片,虽然不是解决本题的方程,但算法图式是通用的。