数值积分编程基础-牛顿科特斯(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: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip