自适应辛普森积分的相关概念
我们知道求平面上一些图形的面积并可以用扫面线来做。如求若干个矩形的面积并,用扫描线分割开,每个区域中都是宽度相同的矩形;求若干个三角形的面积并,用扫描线分割开,每个区域中都是高度相同的梯形。
那么扫描线可以求其他更复杂的图形的面积并吗,如果要求若干个圆形的面积并,那么用扫描线分割开,每个区域中都是若干条弧线,我们要求这些弧线的面积并,显然并不是那么好求。
就可以用辛普森积分法来求这些弧线的面积。辛普森积分法求的其实不是面积,而是一个函数 $f(x)$ 的积分,但是我们可以用这个积分去模拟我们要求的面积。
我们知道,如果将函数 $f(x)$ 的头和尾对于 $x$ 轴做垂线,此时 $f(x)$、$x$ 轴和两条垂线会围成一个封闭图形,这个封闭图形的面积就是函数 $f(x)$的积分。如果函数 $f(x)$ 的头和尾的 $x$ 值固定,则这个封闭图形的面积就是函数 $f(x)$ 的一个定积分。
那么这个定积分该怎么去求呢,这里采用一个近似的思想来求,假设我们要求函数 $f(x)$在 $[a,b]$ 区间内的积分,那么我们将 $[a,b]$ 切分成无数个小区间,此时每个小区间的宽度 $dx$ 应该无限趋近于 $0$,此时每个小区间中的图形应该是一个曲面梯形,我们将这个曲面梯形近似成一个 $x \times f(x)$ 的矩形,由于每个曲面梯形的宽度都非常的小,因此此时矩形的面积应该是无限趋近于曲面梯形的面积的,那么我们将所有的矩形加在一起得到的面积就是函数 $f(x)$ 在 $[a, b]$ 区间内的积分的近似值。
由于每个小区间都是一个曲面梯形,顶部是一个弧线,而矩形的顶部是一条直线,因此我们还可以进一步向真实值靠近,我们将不把曲面梯形近似成一个矩形,我们去近似成一个斜面梯形,顶部是一条斜线,此时等于是用一条直线去向弧线近似,显然此时会更趋近于真实值。
如果我们不近似成一个斜面梯形,我们同样去近似成一个曲面梯形,顶部不是一条随意的弧线,而是用一个二次函数(抛物线)去模拟曲面梯形顶部的弧线,这样我们用弧线去近似弧线,近似值和真实值的差距会大大减小。
对于某一个小区间 $u, v$,如果用矩形去近似,如果用左端点对应的函数值近似,则面积应该是 $f(u)(v-u)$,如果用右端点对应的函数值近似,则面积应该是 $f(v)(v-u)$,如果用斜面梯形近似,则面积应该是 $\frac{f(u)+f(v)}{2}(v-u)$,如果用曲面梯形近似,则面积应该是 $\frac{f(u)+4f(\frac{u+v}{2})+f(v)}{6}(v-u)$(这是一个固定公式,求一下二次函数的一般式在 $[u,v]$ 区间内的积分就能推出以上公式,可以自行推导),然后我们求一下每个小区间的面积,加在一起就是整个函数的积分。
以上就是辛普森积分的大致原理,而我们这里用到的是自适应辛普森积分,自适应辛普森积分就是在求积分的时候根据目前的精度自适应的去细分区间,假设我们现在要求一段函数的积分,我们先用上面的方法求一下将这一整段函数近似成抛物线后的面积,记为 $S$,然后将整段函数平分成两段,每一段分别求一下近似后的面积 $L, R$,如果此时 $\vert S - (L+R) \vert < eps$,也就是误差在我们规定的误差范围之内,说明我们此时计算出的面积已经非常近似了,此时近似出的面积就是我们最终的答案,如果误差不在我们规定的误差范围之内,那么我们就通过递归的方式分别求一下左半部分和右半部分的面积,对于每个部分,再将它分成两部分,分别近似,看一下误差是多少,以此类推。我们这样一直细分下去,递归的越深,区间分的越多,精度就越高,最终我们一定能得到一个比较精确的近似值。这就是自适应辛普森积分的思路。
有了自适应辛普森积分法,我们就能搭配扫描线来求圆的面积并,甚至能求一些其他图形的面积并。
注意,这里有一个小细节,就是用自适应辛普森积分来求面积的时候,有没有可能存在 $S$ 和 $L+R$ 的近似值非常接近,但是和函数的真实面积却差的很远呢,答案是有可能的,比如在 $L$ 和 $R$ 的内部函数可能会有很多波动,这样可能导致我们在求 $S$ 和$L+R$ 时,误差非常小,但是实际上函数的真实面积却和我们近似出来的面积差很多。因此我们的自适应辛普森积分法其实是有限制的,一般在求一次函数、二次函数的积分时,是不会出现这样的问题的,因为一次函数是一条直线,二次函数只有一个起伏,此时不会存在我们说的那种可能,我们再进一步考虑,三次函数是有三个起伏的,所以按照这个思路,如果一个函数内部有很多波动,那么这个函数的次数一定很多,不会只是一个简单的二次函数,可能是七次、八次等等,这种时候我们显然是无法用自适应辛普森积分得到正确结果的。但是我们在求二次函数以内的函数面积时,是可以得到结果的,实际上问题中我们遇到的常见的函数,都是能用自适应辛普森积分法来求的,所以一般不需要有方面的担心。
好长啊,可以做个简述吗拜托了
好哒~有空的话我写一个简述