UVA10341解方程(二分)
阅读原文时间:2023年07月08日阅读:3

**题意:

      给你一个方程 F[x] = pe^-x + qsin(x) + rcos(x) + stan(x) + tx^2 + u = 0(0<=p,r<=20,-20<=q,s,t<=0),给你pqrstu然后问你在定义域内的解是多少0<=x<=1。

思路:

      在定义域内,前面5个都是减函数,所以当F[0] >= 0 && F[1] <= 0时才有唯一解,否则无解,如果有解的话既然是单调的,那么我们就可以二分去求解,二分的时候一开始根据绝对值的大小判断一直得不出答案,最后按照函数小于零的时候就往左移才过。

#include

#include

#define eps 0.0000000001

double p ,q ,r ,s ,t ,u;

double Fun(double x)

{

    return p*exp(-x) + q*sin(x) + r*cos(x) + s * tan(x) + t * x * x + u;

}

double abss(double x)

{

    return x > 0 ? x : -x;

}

int main ()

{

    while(~scanf("%lf %lf %lf %lf %lf %lf" ,&p ,&q ,&r ,&s ,&t ,&u))

    {

        if(Fun(0) < -eps || Fun(1) > eps)

        {

            printf("No solution\n");

            continue;

        }

        double low ,up ,mid;

        low = 0 ,up = 1;

        for(int i = 1 ;i <= 50 ;i ++)

        {

            mid = low + (up - low) / 2;

            if(Fun(mid) < 0) up = mid;

            else low = mid;

        }

        printf("%.4lf\n" ,low);

    }

}

**