前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UVa 10341 - Solve It【经典二分,单调性求解】

UVa 10341 - Solve It【经典二分,单调性求解】

作者头像
Angel_Kitty
发布2018-04-09 14:55:19
5750
发布2018-04-09 14:55:19
举报

原题:

Solve the equation: p*e-xq*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0         where 0 <= x <= 1.

Input

Input consists of multiple test cases and terminated by an EOF. Each test case consists of 6 integers in a single line: pqrst and u(where 0 <= p,r <= 20 and -20 <= q,s,t <= 0). There will be maximum 2100 lines in the input file.

Output

For each set of input, there should be a line containing the value of x, correct upto 4 decimal places, or the string "No solution", whichever is applicable.

Sample Input

0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1

Sample Output

0.7071
No solution
0.7554

题目链接:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=1282

分析:

非线性方程求根问题, LRJ《算法入门经典》p150有类似的问题。  要求的跟是0~1之间, 而且这个方程是单调递减的,所以可以用二分来求根。

实在不行的话你也可以这样做,用高中求导的方法进行求解,对函数进行求一阶导数,易得出该函数是个单调的函数,所以就可以采用二分求解!

二分怎么做呢,我们看,如果是直接去找点,或许问题会变得非常复杂,我们可以换种思路考虑,这个单调函数一定会在某一点使得f(x)=0,所以

我们可以去找f(l)*f(mid)的值大于0还是小于0的操作,这是研究单调函数常用的方法,于是这题就变得非常简单了

二分判断条件为f(l)*f(mid)>0?l=mid:r=mid;

然后你就能AC了?不,此题还有坑点啊!

此题坑点在循环输入,还有就是精度问题,注意这两点就AC了!

下面给出AC代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const double eps=1e-8;
 4 double p,q,r,s,t,u;
 5 double gcd(double x)
 6 {
 7     return p*exp(-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*pow(x,2)+u;
 8 }
 9 int main()
10 {
11     while(scanf("%lf%lf%lf%lf%lf%lf",&p,&q,&r,&s,&t,&u)!=EOF)
12     {
13         double l=0.0,r=1.0,mid;
14         if(gcd(l)*gcd(r)>0)
15         {
16         printf("No solution\n");
17         continue;
18         }
19     while(l+eps<=r)
20     {
21         mid=(l+r)/2;
22         if(gcd(l)*gcd(mid)>0)
23             l=mid;
24         else r=mid;
25     }
26       printf("%.4lf\n",mid);
27     }
28     return 0;
29 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Input
  • Output
  • Sample Input
  • Sample Output
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档