码迷,mamicode.com
首页 > 其他好文 > 详细

【Learning】辛普森积分

时间:2018-06-24 13:14:13      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:区间   div   深度   learning   spl   复杂   辛普森积分   决定   splay   

辛普森积分

  
  这种积分法很暴力:只要求你实现出函数求值\(f(x)\)
  
  使用辛普森积分,我们可以求出函数一段区间\([l,r]\)的近似积分。记\(mid=\frac{l+r}2\),有:
\[ \int_l^rf(x)\;dx\approx\ simpson(l,r)=\frac{f(l)+4f(mid)+f(r)}6*(r-l) \]  
  
  
  其中1,4,1称作科特斯系数。
  
?  如果
\[ simpson(l,r)\approx simpson(l,mid)+simpson(mid,r) \]
  那么我们认为函数在\([l,r]\)的近似积分已经足够精确,可以直接返回\(simpson(l,r)\)
  
  否则,我们需要递归计算\([l,mid]\)\([mid,r]\)的积分,相加并返回。
  
  伪代码如下:
  

double simpson(double l,double r){
    double mid=(l+r)*0.5;
    return (f(l)+4*f(mid)+f(r))*(r-l)/6;
}
double solve(double l,double r){
    double mid=(l+r)*0.5,midl=(l+mid)*0.5,midr=(mid+r)*0.5;
    if(fabs(simpson(l,r)-simpson(l,mid)+simpson(mid,r))<EPS) 
        return simpson(l,r);
    return solve(l,mid)+solve(mid+1,r);
}

  
  整体算法的耗时,一在于\(f(x)\)的求值,应实现得尽量够快;二在于\(EPS\)的设置,这决定了程序递归的深度,因为\(EPS\)是程序判断当前计算精度是否足够高的决策标准。\(EPS\)越小,精度越大,但耗时也相应越高。
  
  总体的时间复杂度是非常玄学。辛普森积分在应用到某一些十分平滑的函数上时效率一般非常高,可是不排除有丧心病狂出题人专门卡哦。

【Learning】辛普森积分

标签:区间   div   深度   learning   spl   复杂   辛普森积分   决定   splay   

原文地址:https://www.cnblogs.com/RogerDTZ/p/9219894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!