自适应辛普森积分法

推荐博客:浅谈自适应Simpson法

今天做比赛时遇到一道题,就是求两个球的体积并,在XHM的指导下,我临时学习了这个方法并AC掉了这题(我知道可以百度到公式)。

既然这玩意儿有公式,那么我们不妨换个题面:
求平面上若干个圆的并的面积,这总没有公式了吧。

我们想一下积分中最正常的思想,即把整个x轴划分成若干(->∞)段,然后每一段用左边的点的值去替代整一段的值。

划分为无限段的时候,那就是答案了,但是现在我们要积分的并不是一个规则的多项式函数或什么可以化简的东西,比如说就是现在这个题面。

也就说我们只能划分有限段,那么每一段只用左端点替代显然是非常劣的。

如果用一个一次函数替代,显然也还是比较劣。

注意到圆弧和二次函数图像比较接近,所以每一段不如直接用二次函数去接近。

取左端点、中点、右端点三点来搞定这个二次函数即可,写成式子的话:
∫ a b f ( x ) d x ≈ g ( a , b ) = ( b − a ) / 6 ∗ ( f ( a ) + 4 ∗ f ( ( a + b ) / 2 ) + f ( b ) ) ∫_a^bf(x)dx≈g(a,b)=(b-a)/6*(f(a)+4*f((a+b)/2)+f(b)) abf(x)dxg(a,b)=(ba)/6(f(a)+4f((a+b)/2)+f(b))

这玩意儿比较难推,但是思路很简单,这里就不展开了。

现在的问题是:
如果我们把x轴均匀地分成若干段,每一段都用这个求,到底优不优呢?

观察一个圆,我们可以发现有些地方比较陡,有些地方比较平。

平的地方显然分的段数不用这么多。

那么我们可以设一个估价函数:

h ( a , b ) = ∣ f ( a , ( a + b ) / 2 ) + f ( ( a + b ) / 2 , b ) − f ( a , b ) ∣ h(a,b)=|f(a,(a+b)/2)+f((a+b)/2,b)-f(a,b)| h(a,b)=f(a,(a+b)/2)+f((a+b)/2,b)f(a,b)

h ( a , b ) > e p s h(a,b)>eps h(a,b)>eps时,就继续分,否则直接返回 g ( a , b ) g(a,b) g(a,b)

eps的取值取决于题目要求的精度,嗯,就是这么简单。

你可能感兴趣的:(计算几何)