UVA10341解方程(二分)

题意:
      给你一个方程 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<math.h>
#include<stdio.h>


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


}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值