• UVa 10341


    原题:

    Solve the equation:
            p*e-x q*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

    分析:
    非线性方程求根问题, 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
    ");
    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
    ",mid);
    27     }
    28     return 0;
    29 }
  • 相关阅读:
    PHP语言结构
    时钟拖放
    CSS定位
    vi命令(转)
    数值转化Excel列字母的函数
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较
    数字转化罗马数字的函数
    在VB中如何打开“文件夹选项”对话框?
    纯VB代码取得硬盘的物理序列号 (转)
    项目经理应该做什么
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/7115424.html
Copyright © 2020-2023  润新知