首页/文章/ 详情

数值积分|自适应梯形积分

7月前浏览4999

在区间    上,采用梯形公式计算    的定积分

 

如果将区间    二等分,采用梯形公式计算    的定积分

 

其中    

如果将区间    三等分,采用梯形公式计算    的定积分

 

其中    

由此可以得到递推式

 
 

   表示两次迭代的相对误差,即

 

若    满足要求,则停止迭代。python代码







































import math###自适应梯形公式求积分### y = 1/( 1+x^2 )

def Func(x):    return 1/( 1+pow(x,2) )
def AdaptiveTrapzCtrl(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)            if (k > 1):            if (math.fabs(t-t0) <= eps*math.fabs(t)): break            if (math.fabs(t) <= eps and math.fabs(t) <=  math.fabs(t-t0)): break                h *= 0.5        n *= 2        t0 = t        if (k >= kmax): print("已经达到最大迭代步数!")        return t        T = AdaptiveTrapzCtrl(Func, 0.6, 1, eps = 1e-6)
print(T)

计算结果是0.24497869339807107,精确值为:

 


算法基本原理:把原区间分为一系列小区间(n份),在每个小区间上都用小的梯形面积来近似代替原函数的积分,当小区间足够小时,就可以得到原来积分的近似值,直到求得的积分结果满足要求的精度为止。但是这个过程中有一个问题是步长的取值,步长太大精度难以保证,步长太小会导致计算量的增加。

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

数值积分|牛顿-柯特斯公式

牛顿-柯特斯(Newton-Cotes )公式也叫插值型求积公式。已知 的值。以这n+1个点进行拉格朗日插值,得到n次多项式,再对该n次的多项式求积分。将积分区间 等分, 则n次拉格朗日插值多项式为: 其中 那么 记 由 可得 这就是牛顿-柯特斯公式。其中, 称为柯特斯系数。由 式可知,柯特斯系数 与被积函数以及积分区间都无关,只要给出积分区间的等分数n,就可以算出柯特斯系数 。例如,当n=2时 对应的牛顿-柯特斯公式为: 此即为辛普森(Simpson)公式。为了便于应用,将柯特斯系数列出,可以快速写出牛顿-柯特斯公式。牛顿-柯特斯公式的缺点:对于次数较高的多项式而有很大误差(龙格现象),一般取低阶公式计算。[算例]用牛顿--柯特斯公式计算积分 时 时 时 精确值为 ★★★★往期相关★★★★数值积分|二元函数的高斯积分数值积分|高斯积分数值积分|泰勒(Taylor)公式求积分Python实现辛普森公式建模| 利用辛普森公式计算湖泊面积数值积分| 辛普森公式来源:数值分析与有限元编程

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