Python数值计算(32)——simpson 1/3积分公式

news/2024/10/25 9:16:07/

1. 背景知识

前面我们通过用矩形和梯形的数值算法,近似实现了数值积分,那么,和之前插值类似,是否可以使用多项式来拟合曲线,然后将该多项式作为被积函数求积分呢?当然是可行的,如果以最简单的二次多项式为例,如果给出三个点及对应的函数值,一般就可以构造出一个二次多项式,然后以此进行积分,这就是Simpson(辛普森)积分公式的思想。

通过已知的三对数(x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)),采用Lagrange插值法,可以得到如下公式:

\int_{a}^{b}f(x)dx=\int_{a}^{b}\sum_{i=0}^{n}\prod_{j=0,j\neq i}^{n}\frac{x-x_j}{x_i-x_j}f(x_i)dx

简化一下形式可以写成:

\int_{a}^{b}f(x)dx=\int_{a}^{b}(px^2+qx+r)dx=(px^3/3+qx^2/2+rx)|_{a}^{b}

其中p,q,r是待定系数,如果我们取均匀的点,例如x_0=a,x_1=(a+b)/2,x_2=b,则

可得上式为:

(\frac{px^3}{3}+\frac{qx^2}{2}+rx)|_{a}^{b}=\frac{h}{3}(f(x_0)+4f(x_1)+f(x_2))

其中:

h=\frac{b-a}{2}

由于前面的系数是1/3,因此得名辛普森1/3积分公式。

2. Simpson 1/3积分

掌握了上述原理以后,实现Simpson 1/3积分公式将十分容易:

python"># Simpson's 1/3 Rule for Numerical Integration
import numpy as np
def simpson13(f,a,b):"""Simpson's 1/3 Rule for Numerical Integration"""h=(b-a)/2x=np.array([a,a+h,b])y=np.vectorize(f)(x)return h/3*(y[0]+4*y[1]+y[2])

和前面的算法类似,单个区间的误差还是比较大的:

3. 复合Simpson 1/3积分公式

同样的,单个区间的误差较大,我们可以将一个大的区间划分为多个小区间,然后分别在[x_0,x_2],[x_2,x_4],...,[x_{2i},x_{2i+2}],...,[x_{n-2},x_n]的小区间上进行Simpson 1/3积分公式,这也就是复合Simpson 1/3积分公式。

算法实现为:

python">import numpy as npdef comp_simpson13(f,a,b,n):h=(b-a)/nx=np.linspace(a,b,n+1)y=np.vectorize(f)(x)    return h/3*(y[0]+4*sum(y[1:n:2])+2*sum(y[2:n:2])+y[n])

多个区间的效果如下:

 


http://www.ppmy.cn/news/1541799.html

相关文章

【Docker系列】深入理解`docker export`与`docker import`

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【某农业大学计算机网络实验报告】实验五 TCP 运输连接管理

实验目的: 熟悉 TCP 通信的三个阶段:通过此次实验,结合理论课知识深入理解并熟悉 TCP 通信的三个主要阶段,即连接建立(SYN-SYN),数据传输(DATA),以及连接释放…

Python异步编程:使用`asyncio`和`aiofiles`进行高效的文件批量写入

Python异步编程:使用asyncio和aiofiles进行高效的文件批量写入 1. 异步编程基础1.1 asyncio和await1.2 aiofiles 2. 异步文件批量写入示例2.1 代码结构2.2 代码实现2.3 代码解释2.3.1 BatchWriter类2.3.2 main函数 3. 其他示例代码3.1 简单的异步文件写入3.2 异步文…

构建effet.js人脸识别交互系统的实战之路

文章目录 前言一、什么是effet.js二、为什么需要使用effet.js四、effet.js能做什么五、使用步骤1.引入库2.main.js中注册全局2.使用3.效果图 六、其他模式讲解人脸打卡人脸添加睡眠检测 在h5中的使用总结 前言 在当今数字化的时代,用户体验变得尤为重要&#xff0c…

软考:缓存分片和一致性哈希

缓存分片技术是一种将数据分散存储在多个节点上的方法,它在分布式缓存系统中尤为重要。这项技术的核心目的是提高系统的性能和可扩展性,同时确保数据的高可用性。以下是缓存分片技术的一些关键点: 数据分片:缓存分片涉及将数据分成…

多个版本的GCC(GNU编译器集合)可以同时安装并存

在Ubuntu系统中,多个版本的GCC(GNU编译器集合)可以同时安装并存。GCC是编译C、C以及其他编程语言程序的重要工具,不同的项目可能需要不同版本的GCC来确保兼容性。 为什么需要多个GCC版本 项目依赖:不同的软件项目可能…

Python RabbitMQ 消息队列监听

Python RabbitMQ 消息队列监听 # coding: utf-8 # 测试消息消费import datetime import logging as log import os from pathlib import Path from typing import Listimport pika# 设置日志格式 Path("./logs").mkdir(parentsTrue, exist_okTrue) os.chdir("./…

74页PPT智能工厂整体规划方案

▲关注智慧方案文库,学习9000多份最新解决方案,其中 PPT、WORD超过7000多份 ,覆盖智慧城市多数领域的深度知识社区,稳定更新4年,日积月累,更懂行业需求。 智能工厂的定义 根据《智能工厂通用技术要求》的…