這是一道二分查找的題
每次選定義域中間的點,求導可判斷出其單調性,F((x+y)/2)'>0說明其根落在x到(x+y)/2區間內反之則在其(x+y)/2到y區間,以此類推每次縮小一半直到定義域精度小於1e-6.
即可求出近似根的座標,代入原方程即可求解。
#include<stdio.h>
#include<math.h>
double hs(double x,double y)
{
return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*x*x-y*x;//函數
}
double ds(double x,double y)
{
return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;//導數
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
double x,y,x1,y1;//x和y是函數的定義域,x1y1是中間函數的座標
scanf("%lf",&y1);
x=0.0;
y=100.0;
while(y-x>1e-6)
{
x1=(x+y)/2;
if(ds(x1,y1)>0)
y=x1;
else
x=x1;
}
printf("%.4lf\n",hs(x1,y1));
}
return 0;
}