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;
 }














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