一、积分的概念
积分(integral)的几何意义是函数的曲线上 xx 的一段区间与 轴围成的曲边梯形的面积:
xx 的区间为 ,那么上图阴影面积为:
∫baf(x)dx∫abf(x)dx
计算方法一:分割成无穷多个小区间。
∫baf(x)dx=limn→∞∑i=1nb−anf(a+b−ani)∫abf(x)dx=limn→∞∑i=1nb−anf(a+b−ani)
计算方法二:牛顿-莱布尼茨公式。
若 F′(x)=f(x)F′(x)=f(x) ,那么
∫baf(x)dx=F(b)−F(a)∫abf(x)dx=F(b)−F(a)
如果容易求出 nn 趋近于无穷大时 的和,可以使用方法一,如 f(x)=x2f(x)=x2。
而这时 f(x)=1xf(x)=1x 就不适用。
如果容易求得 FF ,可以使用方法二,如 。
但如果两个特点都不满足,那么两种方法都无法使用。
于是,我们引入了数值积分。
最常用的就是自适应辛普森积分。
二、辛普森公式
基本思想就是把复杂的函数 ff 近似成二次函数。
=A3(b3−a3)+B2(b2−a2)+C(b−a)=A3(b3−a3)+B2(b2−a2)+C(b−a)
=2A(b3−a3)+3B(b2−a2)+6C(b−a)6=2A(b3−a3)+3B(b2−a2)+6C(b−a)6
=2A(b−a)(b2+ab+a2)+3B(b+a)(b−a)+6C(b−a)6=2A(b−a)(b2+ab+a2)+3B(b+a)(b−a)+6C(b−a)6
=(b−a)(2Ab2+2Aab+2Aa2+3Bb+3Ba+6C)6=(b−a)(2Ab2+2Aab+2Aa2+3Bb+3Ba+6C)6
=(b−a)(Aa2+Ba+C+Ab2+Bb+C+Aa2+2Aab+Ab2+2Bb+2Ba+4C)6=(b−a)(Aa2+Ba+C+Ab2+Bb+C+Aa2+2Aab+Ab2+2Bb+2Ba+4C)6
=(b−a)(f(a)+f(b)+A(a+b)2+2B(a+b)+4C)6=(b−a)(f(a)+f(b)+A(a+b)2+2B(a+b)+4C)6
=(b−a)(f(a)+f(b)+4(A(a+b2)2+B(a+b2)+C))6=(b−a)(f(a)+f(b)+4(A(a+b2)2+B(a+b2)+C))6
=(b−a)(f(a)+f(b)+4f(a+b2))6=(b−a)(f(a)+f(b)+4f(a+b2))6
我们得到辛普森公式:
∫baf(x)dx≈(b−a)(f(a)+f(b)+4f(a+b2))6∫abf(x)dx≈(b−a)(f(a)+f(b)+4f(a+b2))6
b−ab−a 的值越小,上式两边越接近。
三、处理精度问题
有了 Simpson 公式,一个自然的想法是把积分区间拆成多个小区间后求和。
但是分成区间的个数和长度因积分区间和精度要求甚至被积函数而异。
换句话说,分的区间数太少不满足精度要求,太多了会 TLE 。
「自适应」就是求积分时能够自动控制切割的区间大小和长度,使精度能满足要求。
具体地: solve(l,r,f)solve(l,r,f) 表示求 ∫rlf(x)dx∫lrf(x)dx 。
(1)取 mid=l+r2mid=l+r2 。
(2)用 Simpson 公式近似计算 f(x)f(x) 在区间 [l,mid][l,mid] 和区间 [mid,r][mid,r] 内的积分,分别为 lsls 和 rsrs ,及 [l,r][l,r] 的近似积分 sumsum 。
(3)如果 ls+rsls+rs 与 sumsum 的误差允许,则返回 sumsum 。
(4)否则递归 solve(l,mid)solve(l,mid) 和 solve(mid,r)solve(mid,r) ,返回这两个递归计算结果的和。
四、代码
很短。
double solve(double L, double R, double ans) {
double mid = (L + R) / 2, l = simpson(L, mid), r = simpson(mid, R);
if (fabs(l + r - ans) <= eps) return ans;
return solve(L, mid, l) + solve(mid, R, r);
}
五、应用
- 求平面几何图形的面积并
- 求正态分布概率
- etc.
本文介绍了积分的概念,重点讲解了辛普森公式,并探讨了处理积分精度问题的方法,提出自适应辛普森积分的思想。通过将区间动态划分以满足精度需求,避免了过多计算导致的时间过长问题。同时,给出了简洁的代码实现,并举例说明了该方法在求解平面几何图形面积和正态分布概率等领域的应用。
积分&spm=1001.2101.3001.5002&articleId=81392369&d=1&t=3&u=8c632d0afb9943249cc4f7278d789907)
1729

被折叠的 条评论
为什么被折叠?



