积分(二)——复化Simpson(C++)

前言

前言

simpson积分

simpson积分公式
∫ a b f ( x ) d x ≈ b − a 6 [ f ( a ) + f ( b ) + 4 f ( a + b 2 ) ] \int_{a}^{b}f(x)dx \approx \frac{b-a}{6}[f(a)+f(b)+4f(\frac{a+b}{2})] abf(x)dx6ba[f(a)+f(b)+4f(2a+b)]
与梯形积分类似,当区间[a,b]较大时,积分与实际相差较大。

复化simpson积分

假设区间[a,b]被划分为n个小区间,则有区间间隔为 h = b − a n , x k = a + k h ( k = 0 , ⋯   , n ) h=\frac{b-a}{n},x_k=a+kh(k=0,\cdots,n) h=nba,xk=a+kh(k=0,,n),对于每一个小区间都有:
∫ x k x k + 1 f ( x ) d x ≈ h 6 [ f ( x k ) + f ( x k + 1 ) + 4 f ( x k + 1 2 ) ] \int _{x_k}^{x_{k+1}}f(x)dx \approx \frac{h}{6}[f(x_k)+f(x_{k+1})+4f(x_{k+\frac{1}{2}})] xkxk+1f(x)dx6h[f(xk)+f(xk+1)+4f(xk+21)]
在[a,b]区间内进行累加可以得到
∫ a b f ( x ) d x ≈ h 6 [ f ( a ) + f ( b ) + 2 ∑ k = 0 n − 1 f ( x k + 1 ) + 4 ∑ k = 0 n − 1 f ( x k + 1 2 ) ] = S n \int _{a}^{b}f(x)dx \approx \frac{h}{6}[f(a)+f(b)+2\sum_{k=0}^{n-1}f(x_{k+1})+4\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}})]=S_n abf(x)dx6h[f(a)+f(b)+2k=0n1f(xk+1)+4k=0n1f(xk+21)]=Sn

误差分析

复化simpson积分的余项为: R [ f ] = − b − a 180 ( h 2 ) 4 f ( 4 ) ( ξ ) = − ( b − a ) 5 2880 n 4 f ( 4 ) ( ξ ) R[f]=-\frac{b-a}{180}(\frac{h}{2})^4f^{(4)}(\xi)\\ =-\frac{(b-a)^5}{2880n^4}f^{(4)}(\xi) R[f]=180ba(2h)4f(4)(ξ)=2880n4(ba)5f(4)(ξ)
与梯形积分相似,对其加密一倍n,可以得到对应的事后误差估计公式:
S 2 n ( f ) − s n ( f ) < 15 ϵ S_{2n}(f)-s_n(f)< 15\epsilon S2n(f)sn(f)<15ϵ
可以等价于:
I ( f ) − S 2 n ( f ) < ϵ I(f)-S_{2n}(f)< \epsilon I(f)S2n(f)<ϵ

代码

#include<iostream>
#include<cmath>
#include<iomanip>//这个头文件仅仅是用来设置cout的输出精度
#define abs(x) (x>0?x:-x)
using namespace std;
double Simpson(int n,double a,double b,float(*f)(float x))
{
    double f_x=0.0f;
    double h=(b-a)/n;

    for(int i=0;i<n;i++)
    {
        f_x+=4*f(a+i*h+h/2);//算f(x_(k+1/2))
    }
    for(int i=1;i<n;i++)
    {
        f_x+=2*f(a+i*h);//算f(x_(k+1))
    }
    f_x+=f(a)+f(b);
    f_x=f_x*h/6;
    return f_x;
}
//直接在这里换函数,函数为sin(x)/x
float fx(float x)
{
    float result;
    float x_temp=((x==0)?1e-15:x);
    result=sin(x_temp)/x_temp;
    return result;
}
int main()
{
    double error=1e-6;//表示误差小于10^-6次方
    double a = 0.0, b = 2.0;
    int n=1;
    double f_x_n=(fx(a)+fx(b))*(b-a)/2;
    double f_x_2n;
    while(true)
    {
        f_x_2n=Simpson(n*2,a,b,fx);//算T2n
        if(fabs(f_x_n-f_x_2n)<(error*15))
        {
            // cout<<n<<":simposon error="<<fabs(f_x_n-f_x_2n)<<endl;
            // printf("%.8f,%.8f\n",f_x_n,f_x_2n);
            cout << "Simpson积分的误差为:" << fabs(f_x_n - f_x_2n) << endl;
            n*=2;
            break;
        }
        n+=1;
        f_x_n=Simpson(n,a,b,fx);
    }
    cout<<"区间划分数量:n="<<n<<",积分值为:"<<std::setprecision(10)<<f_x_2n<<endl;
    return 0;
}

结果分析

与梯形积分相比,在相同的被积函数和积分区间上,为了达到一样的误差范围,其迭代次数更少:
在这里插入图片描述

使用matlab进行对比可以得到:
在这里插入图片描述
可以看出其实际误差已经达到了期望。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/389617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样&#xff0c;卷积神经网络依然是一个层级网络&#xff0c;只不过层的功能和形式发生了变化。 典型的CNN结构包括&#xff1a; 数据输入层&#xff08;Input Layer&#xff09;卷积层&#xff08;Convolutional Layer&#x…

社区商铺开什么店最好?从商业计划书到实际运营

在社区商铺开店&#xff0c;选择适合的业态是成功的关键。作为一名开店 5 年的资深创业者&#xff0c;我想分享一些关于社区店的干货和见解。 这篇文章&#xff0c;我用我的项目给大家举例子&#xff01; 鲜奶吧作为一种新兴的业态&#xff0c;以提供新鲜、健康的乳制品为主&…

vue3 之 倒计时函数封装

理解需求 编写一个函数useCountDown可以把秒数格式化为倒计时的显示xx分钟xx秒 1️⃣formatTime为显示的倒计时时间 2️⃣start是倒计时启动函数&#xff0c;调用时可以设置初始值并且开始倒计时 实现思路分析 安装插件 dayjs npm i dayjs倒计时逻辑函数封装 // 封装倒计时…

C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

#include<iostream> using namespace std; //多态 //动物类 class Animal { public: //Speak函数就是虚函数 //函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;那么编译器在编译的时候就不能确定函数调用了。 virtual void speak() { …

流量主小程序/公众号h5开源代码 源码分享

小程序开源代码合集 1、网课搜题小程序源码/小猿题库多接口微信小程序源码自带流量主 搭建教程 1、微信公众平台注册自己的小程序 2、下载微信开发者工具和小程序的源码 3、上传代码到自己的小程序 界面截图&#xff1a; 开源项目地址&#xff1a;https://ms3.ishenglu.com…

python 人脸检测器

import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…

php基础学习之函数

基本概念 是一种语法结构&#xff0c;将实现某一个功能的代码块封装到一个结构中&#xff0c;从而实现代码的重复利用 php函数的定义语法 &#xff08;与C/Java很类似&#xff0c;区别在于没有数据类型&#xff0c;因为php是弱类型语言&#xff09; function 函数名(参数){ //…

波奇学Linux:文件系统打开文件

从文件系统来看打开文件 计算机系统和磁盘交互的大小是4kb 物理内存的4kb&#xff0c;磁盘的4kb文件叫做页帧 磁盘数据块的以4kb为单位。 减少IO的次数&#xff0c;减少访问外设的次数--硬件 基于局部性的原理&#xff0c;预加载机制--软件 操作系统管理内存 操作系统对…

leetcode hot 100最小花费爬楼梯

本题和之前的爬楼梯类似&#xff0c;但是需要考虑到花费的问题&#xff01;**注意&#xff0c;只有在爬的时候&#xff0c;才花费体力&#xff01;**那么&#xff0c;我们还是按照动态规划的五部曲来思考。 首先我们要确定dp数组的含义&#xff0c;那么就是我们爬到第i层所花费…

[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

DDR简单了解

DDR全称为 double data rate Synchronous Dynamic Random Access Memory 既DDR SDRAM。 顾名思义需要依次了解这些名词DRAM, SDRAM, DDR, DDR2, DDR3, DDR4。因为这些名词代表DRAM发展的不同阶段&#xff0c;它们是内存的同一条技术路线&#xff0c;核心都是使用一个晶体管和一…

debug - 打补丁 - 浮点数加法

文章目录 debug - 打补丁 - 浮点数加法概述笔记demo用CE查看汇编(x64debug)main()update_info()快捷键 - CE中查看代码时的导航打补丁的时机 - 浮点数加法补丁代码补丁效果浮点数寄存器组的保存END debug - 打补丁 - 浮点数加法 概述 在cm中, UI上显示的数值仅仅用来显示, 改…

开启AI新篇章:全新GPT-4订阅方案! ChatGPTPlus(GPT4)支付渠道! 付费充值!

1. GPT-4订阅价格 以每月仅20美元的价格&#xff0c;引领您进入GPT-4的强大数字体验世界。作为前沿的语言模型&#xff0c;GPT-4为您的工作和创造带来了无与伦比的生产力提升&#xff0c;彻底改变您的工作和创造方式。 GPT-4不仅具有卓越的自然语言处理能力&#xff0c;还引入…

kafka如何保证消息不丢?

概述 我们知道Kafka架构如下&#xff0c;主要由 Producer、Broker、Consumer 三部分组成。一条消息从生产到消费完成这个过程&#xff0c;可以划分三个阶段&#xff0c;生产阶段、存储阶段、消费阶段。 产阶段: 在这个阶段&#xff0c;从消息在 Producer 创建出来&#xff0c;…

【汇总】解决IndexedDB报Failed to execute ‘transaction‘ on ‘IDBDatabase‘

问题发现 再学习HTML5中&#xff0c;有介绍到 Web 存储&#xff0c;当代码编写完成后&#xff0c;运行报错 Failed to execute ‘transaction’ on ‘IDBDatabase’: One of the specified object stores was not found. 示例代码如下&#xff1a; <!DOCTYPE html> <…

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为…

HC05蓝牙模块

简介 HC-05 蓝牙串口通信模块&#xff0c;是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的 数传模块。无线工作频段为 2.4GHz ISM&#xff0c;调制方式是 GFSK。模块最大发射功率为 4dBm&#xff0c;接收灵敏度-85dBm&#xff0c;板载 PCB 天线&#xff0c;可以实现 1…

HTTP协议-响应报文详解(Respond)

目录 前言&#xff1a; 1.Respond报文 1.1报文格式 1.2格式图解 2.状态行&#xff08;首行&#xff09; 2.1状态码/状态码解释 &#xff08;1&#xff09;200 OK &#xff08;2&#xff09;404 Not Found &#xff08;3&#xff09;403 Forbidden &#xff08;4&#…

【机器学习笔记】 6 机器学习库Scikit-learn

Scikit-learn概述 Scikit-learn是基于NumPy、 SciPy和 Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。 自2007年发布以来&#xff0c;scikit-learn已经成为Python重要的机器学习库了&#xff…