首页/文章/ 详情

数值积分|龙贝格公式

7月前浏览5065

本篇需要熟悉复合梯形公式,辛普森公式,牛顿-科特斯公式以及自适应积分。

在积分区间    使用梯形公式有

 

将积分区间    2等分,使用复合梯形公式有

 

由    可得辛普森公式

 

将积分区间    4等分,使用复合梯形公式有

 

由    可得辛普森公式

 

若以    表示积分子区间数目为n时的复合梯形公式,例如当积分区间    2等分,即有2个子区间时,

 

若以    表示积分子区间数目为2n时的复合梯形公式,例如当积分区间    4等分,即有4个子区间时,

 

于是可得到辛普森公式的递推式为

 

在推导牛顿-科特斯公式时,至少4个子区间起步,且牛顿-科特斯公式与辛普森公式的关系为

 

以此类推,如果一种计算公式至少8个子区间起步,且与牛顿-科特斯公式的关系为

 

   就是龙贝格求积公式(Romberg's method)。

如图所示

辛普森公式可由复合梯形公式得到

 

牛顿-科特斯公式可由辛普森公式得到

 

龙贝格公式可由牛顿-科特斯公式得到

 

龙贝格公式的计算过程如图所示

 

重复以上过程,直到相邻两个R的相对误差满足要求时,停止计算。

[算例]求    ,误差为    

 

附python代码

来源:数值分析与有限元编程
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:7月前
太白金星
本科 慢慢来
获赞 5粉丝 10文章 321课程 0
点赞
收藏
作者推荐

数值积分|自适应辛普森积分公式

在数值积分| 辛普森公式提到,辛普森积分最简单的形式是 也就是说至少要三个积分点,两个积分子区间。所以,自适应辛普森积分公式要从S1起步,即 将 式与自适应梯形公式 比较,可得 由此可以得到递推式 若以 表示前后两次计算结果的相对误差,即 若满足要求,则停止计算。python代码import math###自适应辛普森公式求积分### y = 1/( 1+x^2 )def Func(x): return 1/( 1+pow(x,2) ) def AdaptiveSimpsonCtrl(Func, a, b, eps = 1e-6): kmax = 9000 #最大迭代步数 h = b-a # 积分区间 n = 1 t0 = 0.5*h*(Func(a) + Func(b)) for k in range(1,kmax+1): sumf = 0 for i in range(1,n+1): sumf += Func(a+(i-0.5)*h) t = 0.5*(t0 + h*sumf) s = (4*t - t0)/3 if (k > 1): if (math.fabs(s-s0) <= eps * math.fabs(s)): break if (math.fabs(s) <= eps and math.fabs(s) <= math.fabs(s-s0)): break h *= 0.5 n *= 2 s0 = s t0 = t if (k >= kmax): print("已经达到最大迭代步数!") return s S = AdaptiveSimpsonCtrl(Func, 0, 1, eps = 1e-6)print(S) 计算结果是0.7853981628062056,精确值为 算法基本原理:把原区间分为一系列小区间(n份),在每个小区间上都用小的梯形面积来近似代替原函数的积分,当小区间足够小时,就可以得到原来积分的近似值,直到求得的积分结果满足要求的精度为止。但是这个过程中有一个问题是步长的取值,步长太大精度难以保证,步长太小会导致计算量的增加。★★★★往期相关★★★★数值积分|自适应梯形积分数值积分| 辛普森公式Python实现辛普森公式建模| 利用辛普森公式计算湖泊面积数值积分|牛顿-柯特斯公式数值积分|二元函数的高斯积分数值积分|高斯积分数值积分|泰勒(Taylor)公式求积分来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈