积分
针对
黎曼和
记得我第一次看 黎曼和/黎曼积分 的时候觉得真是有意思,觉得这个东西很不言自明,我们推推导积分的时候从有限小到无限小,而当我们为了计算机计算,又从无穷小到可衡量的有限小。有意思。
积分也就是求和。而且觉得这一切都和 中值定理 有着千丝万缕的联系,o(╯□╰)o :
对一个在闭区间 [a,b]有定义的实值函数f, f关于取样分割的黎曼和(积分和)定义为以下和
和式中的每一项是子区间长度与在 $t_{i}$ 处的函数值的乘积。直观地说,就是以标记点到 X轴 的距离为高,以分割的子区间为长的矩形的面积。
在上图中,
梯形法则
在一个‘小区间’我们就能玩出很多花样:
比如我们如果取两端来估算 面积 的话:
我们也可以取区间中点的高度来估计 面积:
以上都被称为 梯形法则(Trapezoidal rule),这里可以是整个函数,也可以只是一个小区间,我们可以用黎曼和来对待小区间:
- 分割许多小区间
- 把小区间加起来
辛普森法则
辛普森法则(Simpson's rule)是一种数值积分方法,是牛顿-寇次公式的特殊形式,以二次曲线逼近的方式取代矩形或梯形积分公式,以求得定积分的数值近似解。其近似值如下:
辛普森法则可以令
同样也可以分割小区间然后求和。
实际上上面两种无非是采取了不不同的近似,梯形法则 使用直线来近似原函数, 辛普森法则 使用二次曲线来 近似原函数。它们都是 牛顿-柯特斯公式(Newton-Cotes rule / Newton-Cotes formula) 的特殊形式。
牛顿-柯特斯公式
还有一些有趣的看法,比如我们始终是利用 n 个离散的点的值来得到积分结果 - 一个数字,那么积分总可以写成这样:
这种看法的原理是:
- 假设已知
的值。
- 以n+1点进行插值,求得对应 f(x)的拉格朗日多项式。
- 对该n次的多项式求积。
该积分便可以作为
或者就这样写:
然后我们就可以写出方程组:
然后也就是一个解线性方程组的问题。
这个方法明显会有 高阶多项式震荡的厉害的 龙格现象, 我还是更喜欢拆小区间,然后再组合小区间的做法。
精确度
用 拆小区间再复合 梯形法则的精确度是
针对
微分
关于微分,我们首先也可以用插值类似的思想来看
这是有限元的思想。
当然更简单的就是我们直接从定义入手:
选择比较小的h, 得到 前向差分公式:
也可以从 x 向后 得到 后向差分公式:
以上两个式子本质都是用的泰勒展开:
精度为 O(h):
或者我们可以用下面的办法展开:
上下两式相减:
这叫做 中点差分公式, 精度是
我们也可以用(1),(2)式得到二阶导数的 O(h) 中点差分公式:
我们可以利用 理查德森外推法 来提高 二阶导的精度:
对于任意
写成矩阵形式:
这样可以以解出精度为
参考:
- 差分
- 理查德森外推法
- 牛顿-柯特斯公式
- Taylor series
- Riemann_sum
- Trapezoidal rule
- Simpson's rule
数值积分和微分当然非常有用,中文翻译的 差分 也很合适,其实数值积分和微分就是 求和 和 差分。这当然很重要,有了 积分和微分(求和和差分)才能帮我们把一些数学方程/模型方便的用到计算机上。
比如渲染领域的蒙特卡洛积分。
然后发现 Scipy 也提供 integrate, 例子可以查看: SciPy求函数的积分