数值积分编程基础-牛顿科特斯(Newton-Cotes)(python)

2023-11-21 12:20

本文主要是介绍数值积分编程基础-牛顿科特斯(Newton-Cotes)(python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第三十九篇 数值积分-牛顿柯特斯

当以解析法去求代数积分时不便利或者根本求不出来时,就使用数值积分或“求积”的方式。数值积分方法可以应用在数学函数,或者针对工程实验中能够测量的离散数据。首先考虑一元函数的数值积分方法,即:
在这里插入图片描述
多个变量函数的面积和体积积分将在后面讨论。
本篇将介绍几种数值积分公式(也称为“法则”)。这些方法通常不依赖于被积分的函数类型,但一些“自定义”方法也会被讨论。
少数情况下数值积分有时会得到精确解,特别是如果处于计算的函数是一个简单的多项式,但通常最后的解是近似的。在积分是由超越函数所组合(如正弦、余弦、对数等)成时,函数在任何情况下都可能没有精确的解析解。一旦得到了近似解,那么就需要知道误差值的大小了。在某些情况下,数值积分规则可以具有自适应的特点去求出最精确的解。
数值积分方法的第一步是用一个简单的多项式Qn−1(x) (n - 1)次替换被积分的函数f(x),它在n个点处的xi和f(x)值一样,其中i = 1,2,…,n。
因此
在这里插入图片描述
其中
在这里插入图片描述
ai是常系数。
像Qn−1(x)这样的多项式很容易解析积分,也可以精确地进行数值积分。因此,如果像上面一样可以求出一个近似的形式,可以得到一个所需积分的合理估计。
数值积分的“法则”通常表示为求和的形式
在这里插入图片描述
因此
在这里插入图片描述
xi被称为“采样点”,即函数f(x)的取值点,wi是常数“加权系数”。上面方程构成了在单一变量中所有数值积分方法的基础。
虽然Qn−1(x)实际上是由方程积分的函数,但并不需要知道它的确切形式,因为样本点将会被代入f(x)中。
两个数值积分法则的区别在于样本点的数量和位置以及对应的加权系数。
首先考虑的方法为,将样本点在积分范围内取等间隔的“牛顿科特”法则。后来得到的方法“高斯”法则,其中样本点取最优的间隔,能显著地提高精度和效率
数值积分的其他需要在本篇中处理的有采取自适应方法去控制误差、特殊的包含一个指数衰减函数或某种类型的奇点的被积函数,和多个变量的多重积分函数在二维和三维情况下。
样本点一般在积分范围内,故a≤xi≤b。
然而还将有样本点在积分范围之外的情况,这将在之后讨论。

牛顿柯特法则

牛顿柯特法则的特点是在积分范围和限制之内等间隔的取样本点。在下面的小节中,我们将描述牛顿-科特斯家族的前几个成员,从只使用一个样本点的最简单的方法开始。

矩形法则,(n=1)

这种简单的方法也被称为“矩形法则”,积分的近似函数f(x)仅与第一个点的多项式Q0(x)一致,即积分下限如下图所示。
在这里插入图片描述
由于被积分的函数是常数,解是阴影矩形的面积,因此,矩形规则为
在这里插入图片描述

显然,这种方法不是特别精确,只有当f(x)本身是一个零阶多项式,即一条平行于x轴的线时,才会得到精确的解。

计算实例

使用矩形规则计算下面函数的值
在这里插入图片描述
解:
在这里插入图片描述
因此:
在这里插入图片描述
这种情况下的解是非常不准确的,因为在要积分的范围内,在第一个点取得函数完全没有代表性。
虽然这种方法对于常规函数不推荐使用,这种简单得方式还是有吸引力得,后面的一个求解常微分方程称为“显式”的算法就是基于此规则

梯形法则,(n=2)

这是一种很常用的方法,其中f(x)近似为一个一阶多项式Q1(x),它与f(x)在积分的 两侧重合。如下图所示,积分近似为梯形的面积。梯形法则:
在这里插入图片描述

在这里插入图片描述
这种算法对于f(x)的次数小于等于1时是准确的。

计算实例

使用梯形法则去计算下面积分的值
在这里插入图片描述
解:
在这里插入图片描述
因此
在这里插入图片描述
数值解虽然比矩形规则的结果好,但仍然和正确解有差距。通过使用“重复”法则可以找到更准确的估计,下一篇将详细介绍。

辛普森(simpson)法则

另一种著名的方法是将f(x)近似为一个二阶多项式Q2(x), Q2(x)在与f(x)有三个点重合,即积分的两端和积分的中间值。然而,与前面的例子不同的是,Q2(x)的面积不能用简单的几何推导出来,因此介绍了一种高效而通用的方法来推导数值积分规则,称为“多项式代换法”。
在这里插入图片描述

多项式替代方法

在这个例子中,我们将使用多项式替代法来推导一般形式的三点(n = 3)牛顿-柯特法则的加权系数
在这里插入图片描述
其中x2 = (x1 + x3)/2 x3−x2 = x2−x1 = h。
根据前两个牛顿科特法则所建立的形式,可以假定,当f(x)是一个0阶、1阶或2阶多项式时,方程中三个样本点的辛普森法则是准确的。这可以用未知的w1、w2和w3产生3个方程式。
然而,在开始推导之前,对问题做一个临时的变换,使积分范围的中点在原点,积分的上下限为±h,使得对未知数的求解更简单。为了实现上述过程,将所有的x值平移x2得到一个变换后的函数F(x),其中
在这里插入图片描述

在这里插入图片描述
让F(x)=1
在这里插入图片描述
让F(x)=x
在这里插入图片描述
让F(x)=x2
在这里插入图片描述
由上面方程得到
在这里插入图片描述
因此
在这里插入图片描述
回到原来的函数和上下限值,得到
在这里插入图片描述

计算实例

使用辛普森(simpson)法则计算下面的积分
在这里插入图片描述

在这里插入图片描述
因此
在这里插入图片描述
希望读者可以自己计算上面的推导过程,以验证多项式代换法的正确性。
结果证明辛普森法法则对于f(x)为3次多项式时是正确的。

高阶牛顿科特法则(n>3)

在牛顿-柯特法则中,对样本点的数量是没有限制的。四点法则可以适合于三次f(x)的积分,并且对于f(x)次数为3或者更小的情况是精确的。5点规则适用于f(x)的为四次式的积分,适用于f(x)为5次式或更小的情况,以此类推
然而,这些高阶规则在实践中很少使用,因为“重复的”低阶方法是优先选用的。

牛顿科特规则的精确性

偶数个样本点(即n = 2,4,…)可以精确地积分次数小于1的多项式(即n−1),奇数个样本点(即n = 3,5,…)的规则效率更高,这种差异的原因可以通过辛普森法则(n = 3)的图来证明,如果f(x)是三次式,它将被精确地积分,因为在近似多项式Q2(x)中上下出现的误差被抵消了。
为了更精确地评估牛顿-柯特法则的正确性,需要将该法则产生的结果与精确解写成的泰勒级数进行比较。级数中被近似解忽略的最大项称为“主要误差项”。

矩形法则的误差(n=1)

考虑f(x)关于下限x1的泰勒级数展开,即,
在这里插入图片描述
方程两边的积分得到
在这里插入图片描述
替换积分限h = x2−x1将变成
在这里插入图片描述

比较方程1之后,可以得出结论主导误差项为1/2h2f’ (x1)。

梯形法则的误差

再次取h = x2−x1,考虑f(x)关于积分下限x1的泰勒级数展开,得到f(x2),即
在这里插入图片描述
通过乘1/2h之后得到
在这里插入图片描述
将这个方程代入方程3后得到,
在这里插入图片描述
比较方程2之后得到,最大的主要误差项为-1/12h**3f’’(x1)

辛普森(simpson)法则的误差(n=3)

如果法则中多项式的最高阶数是已知的,则可以使用另一种方法来寻找主要误差项。
辛普森法则对三次幂精确积分,但只对四次幂近似积分,因此,主要误差项肯定包含四次导数,得到
在这里插入图片描述
令f(x) = x4
在这里插入图片描述
因此
在这里插入图片描述
所以辛普森法则的主要错误项为
在这里插入图片描述

牛顿科特法则的总结

所有牛顿-柯特定律都可以写成下面的形式
在这里插入图片描述
式中,h表示样本点之间的距离xi = a + (i−1)h, i = 1,2时系数Wi,…,n和C是一个常数。F k(x)表示F (x)的第K阶导数。上式中的值汇总在下表。
在这里插入图片描述
描述牛顿-柯特规则的另一种方法是考虑积分上下限为±1的正交化问题,从而便于与本篇后面将要介绍的高斯规则进行比较
在这里插入图片描述
在这种情况下,间隔h是已知的,因此它的数值直接包含在加权系数wi中。上面方程中的值总结了下表中,下面的表包括前5个正交化牛顿-柯特法则的样本点和权重值。
在这里插入图片描述
在这里插入图片描述

从上表可以,加权系数在积分范围的的中点两边是对称的,它们的和始终等于积分范围的值。
虽然主要误差项系数C对这些法则的准确性有很大影响,但实际的主要误差项既包括h的某次幂,也包括被积分的函数的导数。显然,当h变小时(当h < 1时),误差项也会变得很小,但对于某些函数应该注意如果具有高阶导数,值不应该太大。

这篇关于数值积分编程基础-牛顿科特斯(Newton-Cotes)(python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402323

相关文章

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

浅析Python中的绝对导入与相对导入

《浅析Python中的绝对导入与相对导入》这篇文章主要为大家详细介绍了Python中的绝对导入与相对导入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1 Imports快速介绍2 import语句的语法2.1 基本使用2.2 导入声明的样式3 绝对import和相对i

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应