Strange fuction

这是一道二分查找的题


每次选定义域中间的点,求导可判断出其单调性,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;
 }














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章