数值积分|第二类反常积分
时间:2022-07-22
本文章向大家介绍数值积分|第二类反常积分,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 概述
第二类反常积分是值积分区间包含奇异点(singular points)。常规计算方法是将积分积分区间在奇异点内收,然后按照定积分来处理,再将计算结果取极限。如图1所示:
2 算法实现
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)
输出结果:
第二类反常积分的数值算法大致思路就是在奇异点附近划分一个子区间,将这个子区间二等分,将其中之一积分,剩下的再二等分,将其中之一积分,如此下去,不断扩展积分区间,若扩展前后的积分的相对误差满足要求,则停止计算。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 图片缓存机制的深入理解
- Ubuntu18.04安装Nvidia显卡驱动教程(图文)
- Android控件Spinner的使用方法(1)
- 学习使用Material Design控件(四)Android实现标题栏自动缩放、放大效果
- Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)
- Android开发之基于DialogFragment创建对话框的方法示例
- Android图片压缩的实例详解
- Android编程之手机壁纸WallPaper设置方法示例
- 手把手教你在腾讯云上搭建hadoop3.x伪集群的方法
- Android从网络中获得一张图片并显示在屏幕上的实例详解
- Android ListView中headerview的动态显示和隐藏的实现方法
- Android编程使用Service实现Notification定时发送功能示例
- Android基于ViewFilpper实现文字LED显示效果示例
- Android ViewPager导航小圆点实现无限循环效果
- ViewPager打造轮播图Banner/引导页Guide