找极值点求最大值 最小值 ( 牛顿迭代法 和 二分)
2014-12-02 15:12
218 查看
hdu 5105 Math Problem
题意:
f ( X) = | a x^3+b x^2 + c x + d |; 给定a, b, c , d的值,和 x 的范围,求函数值的最大值。
分析: 1,当然要求导,并判断 b^2 - 4*a*c d 的范围。
2,注意a=0,b=0的时候。
3,判断极值的点和边界点作比较,找最大值。
注意点: 避免精度误差。
hdu 2899 strange fuction
题意: 求极值点,找最小值:
解法: 牛顿迭代法,X = X — F(X) \ F1(X) ( F1(X) 为 F(X)的导数 )
hdu 2289 cup
题意和分析: 用到圆台的体积公式。 经过转换之后就是求杯中热水的高度的一元二次方程,求极值。
注意点: 函数的频繁调用会造成精度损失
hdu 2141 can you find it ?
注意点: (runtime error) ACCESS VIOLATION 访问冲突,超内存,可能是数组开小。 另外3个for 循环易超时。
对于 A+B+C ==X 的一类问题,注意转化为 A+B == X - C
题意:
f ( X) = | a x^3+b x^2 + c x + d |; 给定a, b, c , d的值,和 x 的范围,求函数值的最大值。
分析: 1,当然要求导,并判断 b^2 - 4*a*c d 的范围。
2,注意a=0,b=0的时候。
3,判断极值的点和边界点作比较,找最大值。
注意点: 避免精度误差。
const double eps=1e-9; double a,b,c,d,L,R; double fun(double x ) { if(x>=L&&x<=R) { return fabs(a*x*x*x+b*x*x+c*x+d); } return -1; } double solve(double a,double b,double c) { if(fabs(a)<eps) { if(fabs(b)<eps) return -1; else return fun(-c/b); } double sum=b*b-4*a*c; if(sum>0) { sum=sqrt(sum); return max(fun((-b+sum)/2.0/a),fun((-b-sum)/2.0/a)); } return -1; } int main() { while(scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&L,&R)!=EOF) { double ant=max(fun(L),fun(R)); ant=max(ant,solve(3*a,2*b,c)); printf("%0.2lf\n",ant); } return 0; }
hdu 2899 strange fuction
题意: 求极值点,找最小值:
解法: 牛顿迭代法,X = X — F(X) \ F1(X) ( F1(X) 为 F(X)的导数 )
#include<iostream> # include<cstdio> #include<cmath> using namespace std; #define f(x) 6*x*x*x*x*x*x*x + 8*x*x*x*x*x*x + 7*x*x*x +5*x*x -Y*x #define f1(x) 42*x*x*x*x*x*x + 48*x*x*x*x*x + 21*x*x + 10*x - Y # define f2(x) 252*x*x*x*x*x + 240*x*x*x*x + 42*x + 10 #define G(x) x - (f1(x))/(f2(x)) double Y; #define exp 1e-6 double New_iteration(double x) { int k=1; while(fabs(f1(x))>exp) // 注意取绝对值 { x = G(x); k++; if(k>10) return -1; //注意迭代次数,最多大于30 } return x; } int main() { int t; cin>>t; while(t--) { double l=0; double r=100; double m; scanf("%lf",&Y); if(f1(l)>0) printf("%0.4lf\n",f(l)); else if(f1(r)<0) printf("%0.4lf\n",f(r)); else { for(double i=0;i<100;i++) //按照范围遍历查找 { m = New_iteration(i); if(m>=l&&m<=r) { printf("%0.4lf\n",f(m)); break;} } } } return 0; }
hdu 2289 cup
题意和分析: 用到圆台的体积公式。 经过转换之后就是求杯中热水的高度的一元二次方程,求极值。
注意点: 函数的频繁调用会造成精度损失
#define pi acos(-1.0) #define g(h) h/H*(R-r)+r #define V(h) pi/3 * h * ( ss*ss+ss*r+r*r) - v //注意点:函数的频繁调用会造成精度损失 #define eps 1e-10
hdu 2141 can you find it ?
注意点: (runtime error) ACCESS VIOLATION 访问冲突,超内存,可能是数组开小。 另外3个for 循环易超时。
对于 A+B+C ==X 的一类问题,注意转化为 A+B == X - C
相关文章推荐
- 牛顿迭代法代替二分 pku2728高度和除以距离和最小的生成树
- [bzoj2654]tree 二分+最小生成树
- Light oj 1138 - Trailing Zeroes (III) 【二分查找好题】【 给出N!末尾有连续的Q个0,让你求最小的N】
- #1127 : 二分图三·二分图最小点覆盖和最大独立集
- 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
- 【HDU3829】【二分匹配】【最小独立集】【问啥建啥】
- LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
- poj 3662 二分+最短路,求第k大最小权值
- LuoguP2323 [HNOI2006]公路修建问题 【最小生成树+二分】By cellur925
- 二分贪心 E 找距离最大的最小值
- 【二分+最小生成树】bzoj2654 tree
- UVALive 3971-Assemble- 最小值最大化(二分)
- Poj 1325 Machine Schedule【二分匹配-------最小点覆盖】
- 【二分匹配入门专题1】G - Asteroids poj3041【最小顶点覆盖】
- HDU 2199 Can you solve this equation? 牛顿迭代法 || 二分
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
- bzoj2285: [Sdoi2011]保密 二分答案 分数规划 最小割
- 二分匹配总结(匈牙利算法+最大权+最小权)
- UVa live6492Welcome Party(二分最大匹配之最小点覆盖)
- poj 3258 二分最小值最大