前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数值积分|自适应梯形积分

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

作者头像
fem178
发布2020-06-02 16:13:46
3.1K0
发布2020-06-02 16:13:46
举报
文章被收录于专栏:数值分析与有限元编程

在区间

[a,b]

上,采用梯形公式计算

f(x)

的定积分

T_0=h_0[\frac{f(a)}{2}+\frac{f(b)}{2}] \quad (1)

如果将区间

[a,b]

二等分,采用梯形公式计算

f(x)

的定积分

T_1=h_1[\frac{f(a)}{2}+f(a+h_1)+\frac{f(b)}{2}] \quad (2)

其中

h_1=h_0/2

如果将区间

[a,b]

三等分,采用梯形公式计算

f(x)

的定积分

T_2=h_2[\frac{f(a)}{2}+f(a+h_2)+f(a+2h_2)+f(a+3h_2)+\frac{f(b)}{2}] \quad (3)

其中

h_2=h_1/2

由此可以得到递推式

\begin{cases} T_0=h_0[\frac{f(a)}{2}+\frac{f(b)}{2}] \\[3ex] T_k=\frac{1}{2}[T_{k-1}+h_{k-1}\sum_{k=1}^{n_{k-1}}f(a+(i-1/2)h_{k-1})]\end{cases}
h_k=(b-a)/n_k=h_{k-1}/2,n_k=2n_{k-1},k=1,2,3,\cdots
\epsilon

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

|T_k-T_{k-1}| < \epsilon |T_k|

\epsilon

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

代码语言:javascript
复制
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,精确值为:

\int_{0.6}^1 \frac{1}{1+x^2} dx = arctan(1)-arctan(0.6)=0.24497866

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数值分析与有限元编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档