数值积分心得
来源:互联网 发布:怎么恢复sd卡数据 编辑:程序博客网 时间:2024/06/04 00:34
数值积分在科学计算中具有十分重要的地位,许多复杂函数的不定积分并没有闭合形式或难以求解,比如高斯函数。这类问题均可以表示成黎曼积分的形式 – 即数值积分。考虑如下定积分 ,我们将其分成N小段(不一定均匀),即 [x0,x1], [x1,x2], [x2,x3] … [x_(n-1),x_n],再对每一个区间进行采样,得到c0,c1,…,c_(n-1)。这样的即称为黎曼和。若定义最长的小段,黎曼积分告诉我们,如过最长的小段趋近于零,黎曼和的值也趋近于定积分的值。可见,黎曼积分是我们学过的对区间进行等宽分割的近似积分的推广,其好处是,能让我们对不同的子区间定义不同的积分函数,并采取不同的步长。这也就是数值积分的一般形式。例如,一个函数在一部分十分平滑,另一部分波动极大。由于更精确的积分方法往往需要更大的计算量,对于平滑的部分我们可以采取中点法,对于波动大的部分可采用更精确的cubic spline进行拟合。根据拉格朗日中值定理,对于定积分,一定存在使得。如何选取一个更合理的,(这里的不一定是一个值,也可以等效为一个过程,因为我们的拟合可以推广到二次以上), 使得尽量接近 就是数值积分控制误差的关键。
直觉上来说,取区间中点比取区间两端误差要更小。为了证明这一点,我们可以在[x_i,x_(i+1)]段上对积分函数关于进行泰勒级数展开。很容易得到 . 代入积分公式并令小段的长度为h, 可得=()我们希望尽可能的减小误差,即尽量使低阶项的系数为0。观察上式,如果取, 则可使, 得到误差项, 即O的误差。如果取 或 ,只能得到O误差。需注意,这只是小段误差,对于整段区间,段数N=(b-a)/h, N个小段累计误差就会升一个档次。对于取中点的情况,合成误差仍为O.
另外,与其取一个点,我们可以用插值的方法来近似小段上的函数值。若为线性,即能得到梯形法则(trapezoidal rule),即. 可以证明,梯形法则的合成误差也是O, 但是常数为中点法的两倍。可以尝试如此理解,如果函数是单调凹函数或凸函数,梯形法则会一直低估或高估积分值。但是,在周期函数如正弦波的情况下,梯形法则的误差极小。所以还是要具体情况具体分析,选择最佳的积分方法。
增加插值点,我们就会得到Simpson法则 – 将函数拟合为二次曲线。根据拉格朗日插值公式,就可以推出。可见Simpson法则的误差极小,合成之后仅为O。但是,Simpson法则要求等宽区间,一定程度上限制了我们的应用范围。而且,Simpson法则把函数当作二次曲线来拟合。如果原函数不光滑,甚至在一些点上不可导,Simpson法则的结果就会呈现极大的不稳定性。 Simpson和梯形法则其实是Newton-Cotes 系积分法在二次和一次上的形式。往上推广,还有三次的Simpson 3/8 法则和四次的Boole法则。它们的误差更小,但是运算量也随之增加。
前面说到求黎曼积分可以分段用不同的方法,其实,还有一种更方便更精确的Romberg积分, 其核心思想就是“插空”。例如,我们把中点法写作, 其中就是中点法在取n段时的积分值。假设我们刚好又得到了一组采样密度是原函数两倍的数据,同样运用中点法,得到 如果有这样两组结果,我们便可以对两个式子进行线性组合,把低阶项消去 - 将二式乘上四倍减去一式,就能得到, 一下子把误差降了一个数量级。通过Romberg积分,我们不仅能把不同的积分方法结合起来,还能在运算的过程中得到误差估计 (如果被积函数的高阶导数难以求出)。例如,在每一遍迭代中都将采样密度增加一倍,这样我们不仅能够结合通过上一遍的积分值迅速减少误差,又能通过计算两遍Romberg积分的差值来判断是否满足停止条件。
以上讲的数值积分方法,在微分方程的数值求解上也是一个很重要的方法。下面几篇文章中,我们还会讲到一些数值求解微分方程和矩阵方程的方法,以便我们更好的求解金融工程里的Black-Scholes公式。
- 数值积分心得
- 数值积分
- 数值积分
- 数值积分
- 数值积分
- 数值积分
- 数值积分
- 数值积分
- 数值积分-龙贝格(Romberg)积分
- 数值积分之龙贝格积分
- 数值计算数值积分实现
- 数值积分(转载)
- Matlab数值积分
- 数值积分之复化求积法
- 编程实现数值积分
- GSL数值积分例子
- hdu4498 数值积分
- 数值积分-自适应辛普森法
- C# abstract的一点理解
- hdu5384 Danganronpa (AC自动机)
- Linux创建文件命令总结
- 关于Linux的rear命令
- UCOSII 多任务中断跑飞HardFault_Handler
- 数值积分心得
- TensorFlow Object Detection API
- 程序猿专属的国庆中秋放假通知!
- 苹果在GitHub上公布macOS和iOS内核源码
- top和ps取长补短续篇之进程时间实例对比
- python中形参与实参的拆包问题
- java static执行顺序
- Java for Web学习笔记(八十):RESTful和SOAP:一般性了解
- Longest Substring Without Repeating Characters(算法分析week4)