Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2857280
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-08-06 11:10:49

 

 

nHDOJ-2899

给出函数:

   F(x) = 6*x7 + 8*x6 + 7*x3 + 5*x2 - y*x

其中,实数y满足 (0

请输出x在区间[0,100]时函数F(x)的最小值,

结果精确到小数点后4位。

指定区间内是否满足单调性?
显然不满足->不能直接二分
满足凸性?
如何证明?
极值点的特点?求导数,为0得出x值,代入原方程,即可求到最大值
是否可以二分?

y只是一个输入,在题目中,它影响到了最值求导

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;

  4. double y;
  5. double low, high, mid;
  6. const double eps = 1e-8;

  7. double cal(double x){
  8.     return 42.0*pow(x,6.0)+48.0*pow(x,5.0)+21.0*pow(x,2.0)+10.0*x;
  9. }
  10. double ans(double x){
  11.     return 6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x;
  12. }

  13. int main()
  14. {
  15.     int T;
  16.     scanf("%d", &T);
  17.     while(T--)
  18.     {
  19.         scanf("%lf", &y);
  20.         if(cal(100)-y <= 0.0)//导数那里没减y
  21.         {
  22.             printf("%.4lf\n", ans(100.0));
  23.         }
  24.         else
  25.         {
  26.             low = 0.0;
  27.             high = 100.0;
  28.             while((high - low)>eps) //low 与high不要求相等,所以后面的移动不要求判断相等
  29.             {
  30.                 mid = (low + high) / 2;
  31.                 double temp = cal(mid)-y;
  32.                 if(temp>0.0)
  33.                 {
  34.                     high = mid - eps;
  35.                 }
  36.                 else
  37.                     low = mid + eps;
  38.             }
  39.             printf("%.4lf\n",ans((low+high)/2) );
  40.         }
  41.     
  42.     }
  43.     return 0;
  44. }


 

阅读(1179) | 评论(0) | 转发(0) |
0

上一篇:求解方程逼近区间

下一篇:二分匹配定义

给主人留下些什么吧!~~