**题意:
给你一个方程 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);
}
}
**
手机扫一扫
移动阅读更方便
你可能感兴趣的文章