首页/文章/ 详情

数值积分|第二类反常积分

7月前浏览2944

1 概述

第二类反常积分是值积分区间包含奇异点(singular points)。常规计算方法是将积分积分区间在奇异点内收,然后按照定积分来处理,再将计算结果取极限。如图1所示:

2 算法实现

如图2所示:a为奇异点,在a附近划分一个子区间    ,长度为    ,将其一分为二,中点为    ,右半部分参与积分计算,再将左半部分    二等分,中点为    ,右半部分参与积分计算,如此下去,直到误差满足要求。

python代码如下:



































































import math
### 第二类反常积分数值分析### y = 1/sqrt(x) ### 积分区间(0, 1]
def Func(x):    return 1/ math.sqrt(x)    
def Improp2(Func, a, b, eps = 1e-6):### ### a为区间的左端点,是奇异点###子区间积分时,还要调用自适应梯形公式,这里可以任选方法。比如辛普森公式        h0 = 0.1e0 * (b-a)    #子区间长度    s = 0e0
   h = h0    s1 = 1e0    while(math.fabs(s1) > eps * math.fabs(s)):        h *= 0.5      # 半区间        x = a + h        s1 = AdaptiveTrapzCtrl(Func,x,x+h,eps)        s += s1            a += h0        s += AdaptiveTrapzCtrl(Func, a, b, eps )        return s            ### 自适应梯形公式求积分   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        s = Improp2(Func, 0, 1, eps = 1e-6)
print(s)

输出结果:

第二类反常积分的数值算法大致思路就是在奇异点附近划分一个子区间,将这个子区间二等分,将其中之一积分,剩下的再二等分,将其中之一积分,如此下去,不断扩展积分区间,若扩展前后的积分的相对误差满足要求,则停止计算。


★★★★往期相关★★★★

数值积分|第一类反常积分

数值积分|中点法则(Midpoint Rule)

数值积分|龙贝格公式

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

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

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

数值积分|高斯积分

数值积分|泰勒(Taylor)公式求积分

数值积分| 辛普森公式

Python实现辛普森公式



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

定积分的精确定义(重排版)

如图1所示,定积分 表示区域的面积R.绝大多数情况下,R是不规则几何图形,为了方便计算,用矩形来逼近不规则的区域。这样就会产生误差。采用更多的矩形使得误差尽可能小,如图2所示。如图3所示,若函数 在区间 上有定义,在 上任取 个分点 ,设 ,且 记, 并任取 .记,若极限 存在且与 的取值无关,则称函数 在区间 上可积,即 或者 【注】 (1)区间 长度可以是任意的,并不需要均匀划分,而 在子区间的取值也是任意的,可以在端点,也可以在区间内部。(2)若函数 ,曲边梯形在 轴下方,面积就是负的,即定积分的值是负的。(3)当我们说到“ 到 上的定积分”时,不要总认为 ,事实上, 的情形也是可以的,只不过注意 时, 。而 时, 。定积分的精确定义由德国数学家黎曼(Bernhard Riemann)给出,故这种积分又称黎曼积分。★★★★往期相关★★★★数值积分|中点法则(Midpoint Rule)数值积分|龙贝格公式数值积分|自适应辛普森积分公式数值积分|自适应梯形积分数值积分|牛顿-柯特斯公式数值积分|高斯积分数值积分|泰勒(Taylor)公式求积分数值积分| 辛普森公式Python实现辛普森公式来源:数值分析与有限元编程

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