数值积分编程基础-牛顿科特斯(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 FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2