牛顿柯特斯公式及复合形式、龙贝格求积公式,高斯勒让德求积公式

article/2025/10/1 21:45:22

数值积分的研究实现

牛顿柯特斯公式

柯特斯系数在这里插入图片描述

在这里插入图片描述

各阶对应公式

当n = 1时,对应的牛顿-柯特斯公式就是是梯形公式

当n= 2时,对应的牛顿-柯特斯公式就是辛普森公式

当n =4时,对应的牛顿-柯特斯公式就是柯特斯公式

柯特斯系数表

在这里插入图片描述

核心代码实现

计算牛顿-柯特斯系数

def calu_xishu(self,index,number,array):# 判断(-1)^n-kif (index - number)%2 ==0:res = 1else:res = -1# 算柯特斯系数被积函数中的(t-j)多项式for i in range(index+1):if i!=number:res  =res*(self.x-i)# 采用sympy库来计算积分result = integrate(res,(self.x,0,index))# n! 和(n-k)!n_fac = self.jieCheng(number)n_k_fac = self.jieCheng(index-number)result = result/(index*n_fac*n_k_fac)array[index-1][number] = result

计算最后的积分值

def calu_Cotes(self):# 保存柯特斯系数,只算到n=8时,后面出现负值,一般不用array = np.zeros((8,9),dtype = float)for i in range(8):for j in range(i+2):self.calu_xishu(i+1,j,array)# 最后的积分值result = self.calu_final(array)return resultdef calu_final(self,array):Jianju = (self.Big-self.Small)/self.driveresult = 0for j in range(self.drive+1):# 算每一个的积分值,array里面为牛顿科特斯系数result += array[self.drive-1][j]*(self.function(self.Small+(Jianju*j)))# 乘于(b-a)result *=(self.Big-self.Small)return result

复化牛顿柯特斯公式

牛顿-柯特斯公式在 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bc27S1C5-1638719876420)(https://www.zhihu.com/equation?tex=n%5Cge+8)] 时近似程度并不好,故不能通过提高阶数的方法来提高求积精度。因此考虑把积分区间划分成固定宽度的子区间,在每个小区间用低阶的牛顿-柯特斯公式,最后再把每个小区间的近似结果加起来。这种方法称为复合求积法。下面讨论复合梯形公式、复合辛普森公式和复合柯特斯公式。

复合辛普森求积公式

牛顿-柯特斯公式在 时近似程度并不好,故不能通过提高阶数的方法来提高求积精度。因此考虑把积分区间划分成固定宽度
的子区间,在每个小区间用低阶的牛顿-柯特斯公式,最后再把每个小区间的近似结果加起来。这种方法称为复合求积法。下面讨论复
合梯形公式、复合辛普森公式和复合柯特斯公式。
在这里插入图片描述

核心代码实现

复化牛顿柯特斯系数和上述的牛顿柯特斯公式求积的一样

计算结果

    def calu_Cotes(self):# 计算牛顿柯特斯求积公式的系数array = np.zeros((8,9),dtype = float)for i in range(self.n_drgee):for j in range(i+2):self.calu_xishu(i+1,j,array)# 最后的积分值result = self.calu_final(array)return resultdef calu_final(self,array):result =0   #结果Jianju = (self.Big-self.Small)/self.drive/self.n_drgeetemp = self.Smallfor i in range(self.drive):for j in range(self.n_drgee+1):# 算每一个的积分值,array里面为牛顿科特斯系数f_val = self.function(temp)result += array[self.n_drgee-1][j]*(f_val)temp+=Jianjutemp -=Jianju# 乘于hresult *=(self.Big-self.Small)/self.drivereturn result

龙贝格求积公式

由复化梯形求积公式

在这里插入图片描述

又梯形推出辛普森的积分值

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

核心代码和测试数据

计算第一个T^(0)
def calu_first(self):# 算第一个T^0T_0 = (self.Big - self.Small)/2*(self.function(self.Small)+self.function(self.Big))return T_0
递推部分
def final_calu(self):result = np.zeros((10,10),dtype = float)# print(result)final_judge = Truei = 0while final_judge:if(i ==0):res =self.calu_first()result[i][i] = reselse:for j in range(0,i+1):if(j ==0):next_val = 0next_val = self.getSumMiddle(i)# 递推公式next_val +=1/2*result[i-1][j]result[i][j] = next_valelse:# 计算4^m/4^m-1value_fenmu = math.pow(4,j)-1# 递推公式result[i][j] = (math.pow(4,j)/value_fenmu)*result[i][j-1] - (1/value_fenmu)*result[i-1][j-1]# 判断是否已经达到精确值if i>=1 and math.fabs(result[i][i] - result[i-1][i-1]) < self.accurancy:print(f"最后的结果是:{result[i][i]}")final_judge =False# 判断是否需要加大矩阵if (i+1)%len(result) == 0:print("哈哈")array = np.zeros((2*(i+1),2*(i+1)),dtype = float)for j in range(len(result)):for k in range(len(result[i])):array[j][k] = result[j][k]result = arrayi+=1def getSumMiddle(self,n):time = self.calculate_h(n)JianJu = (self.Big-self.Small)/(time)# sumf(x k+1/2)的值sum =0# 记录已经第几个xk+1count = 0while count<time:# 1/2;1/4,3/4;1/8,3/8,5/8,7/8;scale = ((2*count)+1)/(time*2)sum+=self.function(self.Small+scale*(self.Big-self.Small))count+=1sum = 1/2*JianJu*sumreturn sum

高斯公式

在这里插入图片描述
在这里插入图片描述

只计算权函数p(x) = 1的情况

高斯勒让德求积公式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

高斯勒让德求积公式核心代码

计算高斯勒让德公式的零点

def calu_intergration(self):# 计算积分result = []             #存放上一个积分计算的结果for i in range(10):# 进行解方程biaoDaShi = solve(self.calu_xishu(i))         #求得零点解集res = self.calu_n_intergration(i,biaoDaShi)result.append(res)if(i>=1 and i<10 and math.fabs(result[i]-result[i-1])<self.accurancy):# print(result[i])1breakprint(result[len(result)-1])def judgements(self,x_oringal):# 对x不属于[-1,1]进行变换if self.Small ==-1 and self.Big == 1:return x_oringalelse:X_new = (self.Big - self.Small)/2 *(x_oringal)+(self.Small+self.Big)/2return X_new

得到AK系数

def calu_n_intergration(self,n,biaoDaShi):# 算n=1,2,3,4,5,6,7,8,9的对应积分值All_Ak = []for val in biaoDaShi:# subs()通过替换x ,令x =系数A = 2/(1-val**2)/(diff(self.calu_xishu(n),self.x,1).subs(self.x,val))**2All_Ak.append(A)length = len(All_Ak)temp =0# 对上界和下界不为1,-1的进行处理for index in range(length):# 用evalf函数传入变量的值,对表达式进行求值X_location =self.judgements(biaoDaShi[index])temp += (self.Big-self.Small)/2*(All_Ak[index]*self.function(X_location)).evalf()return temp

完整代码在下面链接

链接:https://pan.baidu.com/s/1FPaw_IxdLGcu0sJu4anNBA 
提取码:1314

http://chatgpt.dhexx.cn/article/YsHXYNke.shtml

相关文章

勒贝格测度?

勒贝格测度&#xff1f; 今天读论文&#xff0c;读到了勒贝格测度&#xff08;Lebesgue measure&#xff09;&#xff0c;不明所以故百度&#xff0c;稍做笔记以记之。 定义 数学上&#xff0c;勒贝格测度是赋予欧几里得空间的子集一个长度、面积、或者体积的标准方法。它广…

Romberg(龙贝格)求积公式求解数值积分时的注意事项

《数值分析》第5版&#xff08;李庆扬编著&#xff09;的第四章课后习题第8-(2)题中&#xff0c;要求使用Romberg(龙贝格)求积公式求解f(x)xsinx在区间[0,2pi]上的积分&#xff0c;要求误差小于10^(-5)。 针对此问题&#xff0c;套用计算公式求解即可。在第一步计算梯形公式时…

勒贝格测度(转)

数学上&#xff0c;勒贝格测度是赋予欧几里得空间的子集一个长度、面积、或者体积的标准方法。它广泛应用于实分析&#xff0c;特别是用于定义勒贝格积分。可以赋予一个体积的集合被称为勒贝格可测&#xff1b;勒贝格可测集A的体积或者说测度记作λ(A)。一个值为∞的勒贝格测度…

利用Matlab编写龙贝格算法(romberg)求函数积分

这次是我初次接触matlab&#xff0c;源于数学老师布置的一个作业&#xff1a;用龙贝格算法来计算函数的积分。 具体的计算原理&#xff0c;由于是数学的东西&#xff0c;不好打印&#xff0c;就不写了。主要把自己的代码贴下来慢慢理解。 一共写了两个文件。一个是romberg.m主要…

数值计算笔记之数值积分(二)龙贝格算法

龙贝格求积公式也称为逐次分半加速法。它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上&#xff0c;构造出一种加速计算积分的方法。 作为一种外推算法&#xff0c;它在不增加计算量的前提下提高了误差的精度。 在等距基点的情况下&#xff0c;用计算机计算积分值通…

高斯-勒让德积分学习

高斯-勒让德积分求解函数积分 前言高斯-勒让德积分一般积分区间的归一化Exponential Integral实验参考 前言 梯度和辛普森是经典的几何求积分方法&#xff0c;简单易懂&#xff0c;那如果要更加高档&#xff08;复杂难懂&#xff09;的求积分方法找哪家了&#xff1f;高斯-勒让…

数值积分公式及龙贝格(Romberg)算法实现matlab

一、数值积分方法得基本思想 二、复化求积公式 三、基于复化梯形求积公式的高精度求积算法——Richardson外推法和Romberg算法 四、Romberg算法的matlab程序&#xff1a; function Romberg % 龙贝格(Romberg数值求解公式) % inputs: % -fun&#xff1a;积分函数句柄 % -a/…

数值积分:龙贝格求积

一、数学原理 在变步长的复化梯形计算过程中运用&#xff1a; 就能将粗糙的梯形值Tn逐步加工成精度较高的辛普森值Sn、柯特斯值Cn和龙贝格值Rn。或者说&#xff0c;将收敛缓慢的梯形值序列Tn加工成收敛迅速的龙贝格值序列Rn&#xff0c;这种线性外推的加速方法称为龙贝格算法&…

数值积分之龙贝格积分

除了复化求积外&#xff0c;这里用龙贝格积分法进行近似求积&#xff0c;其原理与埃特金插值有些类似&#xff0c;进行线性整合后使结果具有高精度的求积效果。在实际过程中&#xff0c;由于对于评判合理步长的困难&#xff0c;我们常采取变步长的办法进行计算&#xff0c;使结…

积分极限定理+勒贝格控制收敛定理+高数

在处理积分与极限的交换顺序问题上&#xff0c;勒贝格积分比黎曼积分要求的条件要弱的多&#xff08;并且条件更易于验证&#xff09; 积分与极限交换顺序的定理&#xff1a; 控制收敛定理 { f n ( x ) } 为 E 上 的 一 列 可 测 函 数 \{ f_n(x)\}为E上的一列可测函数 {fn​(…

[转]勒贝格积分的框架与通俗理解

为什么会出现勒贝格积分 这个问题等价于勒贝格积分和黎曼积分有什么区别。其实这个区别没有那么玄&#xff0c;反而很好解释。问题的根源在于黎曼积分的定义上。黎曼积分&#xff1a;.黎曼积分是在轴上做的分割&#xff0c;虽然可以分割得很细&#xff0c;但只要被积函数在这个…

实变函数自制笔记9:勒贝格积分的极限定理

1、非负可测函数积分的极限&#xff1a; 背景&#xff1a;在数学分析里&#xff0c;函数列极限函数黎曼可积性有这样的表述&#xff1a;&#xff0c;且每个均在上可积函数列的极限函数也在上可积&#xff1b;从而有这样的公式&#xff1a;&#xff1b;那我们会想&#xff0c;勒…

实变函数自制笔记8:初识勒贝格积分

1、勒贝格&#xff08;Lebesgue&#xff09;积分&#xff1a; 背景&#xff1a;勒贝格积分是在勒贝格测度论的基础上建立起来的&#xff0c;这一理论可以统一处理函数有界、无界的情形&#xff0c;且函数也可以定义在更一般的点集&#xff08;不一定是&#xff09;上&#xff…

python三阶魔方_三阶魔方还原公式

1. 第二层棱块归位&#xff1a; 2. 顶层十字 3. 顶层棱中间块归位 这一步的目的是使顶层的4个棱中间块全部归位。 转动顶层(U)&#xff0c;若可以使一个棱中间块归位(如下图左&#xff0c;这里以[红-黄]块为例)&#xff0c;而其他3个都不能归位&#xff0c;则将[红-黄]所在这一…

QA和QC到底是什么区别?

QA和QC到底是什么区别? 发现迄今为止,仍然有很多工程师,甚至很多的企业对QA和QC的概念仍然非常的模糊不清.两个概念也经常性的混淆,特别是在互联网公司,那么今天小编这里就对QA和QC到底有什么区别,展开一下讨论. 在讲到软件工程体系中的时候,我们不仅要延伸到从最早通过简单…

生产追溯系统-IQC来料检验

相信大家都知道&#xff0c;任何一家工厂都有自己的仓库&#xff0c;用来存储采购回来的物料&#xff0c;那么在供应商将我们采购的物料送到工厂之后&#xff0c;我们都需要一个检验动作&#xff0c;也就是>IQC来料检验&#xff0c;这个检验动作是非常重要的一个环节&#x…

质量控制之室内质控(IQC)和室间质评(EQA)

检验医学——中华检验医学网旗下微信公众平台。您的随身微杂志。 很多人都有过这样的经历&#xff1a;拿着做过的医疗检查单换一家医院看病&#xff0c;所有的检查还得重做。对患者来说&#xff0c;过多的医疗检查也是造成看病难、看病贵的因素之一。为贯彻落实国务院办公厅《关…

ERP的IQC检验

ERP IQC检验是一种全面的物料质量控制机制&#xff0c;旨在保证入库前货物都能够符合质量要求。它涉及及时检验物料的质量以及根据检验的结果判断是否需要发货或回退。 ERP中的IQC检验内容 IQC模块使企业能够进行质量检查&#xff0c;确保产品质量&#xff0c;以满足客户的需…

工厂里常说的QC, IQC, IPQC, QA 简介

一、QC与QA QC&#xff1a;Quality Control&#xff0c;品质控制&#xff0c;产品的质量检验&#xff0c;发现质量问题后的分析、改善和不合格品控制相关人员的总称。 IQC&#xff1a;意思是来料的质量控制 IPQC&#xff1a;过程质量控制。 FQC&#xff1a;成品质量检验 O…

【spring】Spring是什么?

一.Spring的简介 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。 然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分Java应用都可以从Spring中…