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

news2024/11/28 13:48:36

前言

前言

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进行对比可以得到:
在这里插入图片描述
可以看出其实际误差已经达到了期望。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件上传漏洞:upload-labs靶场通关

目录 什么是文件上传漏洞&#xff1f; 第1关&#xff08;客户端验证-前端&#xff09; 第2关&#xff08;文件类型校验-MIME校验 &#xff09; 第3关&#xff08;文件名校验-黑名单绕过&#xff09; 第4关&#xff08;文件后缀校验-.htacess绕过&#xff09; 第5关&#…

GPIO八种工作模式

目录 一、推挽输出 二、开漏输出 三、复用推挽输出 四、复用开漏输出 五、浮空输入 六、上拉输入 七、下拉输入 八、模拟输入 GPIO八种配置模式&#xff0c;原理和使用场景&#xff0c;硬件原理如下图&#xff1a; 一、推挽输出 1、 原理 当控制栅极为低电平时&#x…

随机过程及应用学习笔记(四) 马尔可夫过程

马尔可夫过程是理论上和实际应用中都十分重要的一类随机过程。 目录 前言 一、马尔可夫过程的概念 二、离散参数马氏链 1 定义 2 齐次马尔可夫链 3 齐次马尔可夫链的性质 三、齐次马尔可夫链状态的分类 四、有限马尔可夫链 五、状态的周期性 六、极限定理 七、生灭过…

找不到目标和方向,怎么办?

现代社会里&#xff0c;许多人常见的症状&#xff0c;就是「空心病」。 什么是空心病呢&#xff1f;类似这样&#xff1a; 我知道要有目标&#xff0c;但我就是不知道想做什么&#xff0c;感觉对一切事物都提不起兴趣&#xff0c;没有动力&#xff0c;怎么办&#xff1f; 这个…

Mysql第一关之常规用法

简介 介绍Mysql常规概念&#xff0c;用法。包括DDL、DCL、DML、DQL&#xff0c;关键字、分组、连表、函数、排序、分页等。 一、 SQL DCMQ&#xff0c;分别代表DDL、DCL、DML、DQL。 模糊简记为DCMQ&#xff0c;看起来像一个消息队列。 D&#xff1a;Definition 定义语句 M…

[UI5 常用控件] 09.IconTabBar,IconTabHeader,TabContainer

文章目录 前言1. IconTabBar1.1 简介1.2 基本结构1.3 用法1.3.1 颜色&#xff0c;拖放&#xff0c;溢出1.3.2 Icons Only , Inner Contents1.3.3 showAll,Count,key,IconTabSeparator 1.3.4 Only Text1.3.5 headerMode-Inline1.3.6 design,IconTabSeparator-icon1.3.7 DensityM…

当下时代,什么样的人赚钱最容易

如果你问&#xff0c;今天什么样的人赚钱最容易 答案是那些有大量粉丝、有个人IP的人 微信里面&#xff0c;要获取到流量&#xff0c;就必须有粉丝&#xff0c;而在抖音、快手里面&#xff0c;即使你没有任何粉丝 只要能输出平台和用户喜欢的优质内容&#xff0c;一样可以获取巨…

一条 SQL 查询语句是如何执行的

MySQL 的基本架构示意图 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分 Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等…

基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ECG信号的特点与噪声 4.2 FPGA在ECG信号处理中的应用 4.3 ECG信号滤波原理 4.4 心率计算原理 4.5 FPGA在ECG信号处理中的优势 5.算法完整程序工程 1.算法运行效果图预览 其RTL结构如…

探索设计模式的魅力:创建型设计模式的比较与决策

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、设计模式概览 1.1 创建型模式 二、比较创建型设计模式 1.1 适用场景典型用例 1.2 关键要素与差异对比 1.3 结构图 三、模式选择指南 3.1 场景分析 3.2 决策流程图 四、结语 4.1 优势 4.2 考量因素 一、…

【Java多线程】Thread类的基本用法

目录 Thread类 1、创建线程 1.1、继承 Thread&#xff0c;重写run 1.2、实现 Runnable&#xff0c;重写run 1.3、使用匿名内部类&#xff0c;继承 Thread&#xff0c;重写run 1.4、使用匿名内部类&#xff0c;实现 Runnable&#xff0c;重写run 1.5、使用 lambda 表达式…

问题:总离差平方和为变形观测值与变形观测值的平均值之差的平方和。() #微信#其他

问题&#xff1a;总离差平方和为变形观测值与变形观测值的平均值之差的平方和。&#xff08;) 是 否 参考答案如图所示

html的表格标签

html的表格标签 table标签:表示整个表格tr:表示表格的一行td:表示一个单元格th:表示表头单元格.会居中加粗thead:表格的头部区域 (注意和th区分,范围是比th要大的).tbody:表格得到主体区域. table包含tr , tr包含td或者th. 表格标签有一些属性&#xff0c;可以用于设置大小边…

ChatGPT高效提问—prompt实践(健康助手)

ChatGPT高效提问—prompt实践&#xff08;健康助手&#xff09; ​ 随着社会经济的发展&#xff0c;人们的生活条件不断改善&#xff0c;人们对身体健康也日益重现。让ChatGPT作为健康助手也是一件不错的事。开始之前&#xff0c;还是老样子&#xff0c;先设置角色。 ​ 输入…

Typora+PicGO+腾讯云COS做图床教程

文章目录 Typora&#xff0b;PicGO&#xff0b;腾讯云COS做图床教程一、为什么使用图床二、Typora、PicGO和腾讯云COS介绍三、下载Typora和PicGOTyporaPicGO 四、配置Typora、PicGO和腾讯云COS腾讯云COS配置PicGO配置Typora配置 Typora&#xff0b;PicGO&#xff0b;腾讯云COS做…

【MySQL】操作库 —— 表的操作 -- 详解

一、增加表 1、创建表 mysql> create database [if not exists] table_name ( -> field1 datatype, -> field2 datatype, -> field3 datatype -> ) character set 字符集 collate 校验规则 engine 存储引擎; 注意 &#xff1a;最后一行也可以写成&#x…

中国电子学会2023年12月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)

2023-12 Scratch一级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1.观察下列每个圆形中的四个数&#xff0c;找出规律&#xff0c;在括号里填上适当的数&#xff1f;&#xff08;C&#xff09;&#xf…

C语言操作符练习

练习开胃菜 曾经有一道面试题&#xff0c;要求不能创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换。 这道题如果没有前半句的修饰&#xff0c;就只是简单的一道基础题。 法一&#xff1a; #include <stdio.h> int main() {int a 0;i…

网络安全威胁,如何解决缓冲区溢出攻击

目录 一、什么是网络安全 二、什么是缓冲区 三、缓冲区溢出 四、缓冲区溢出攻击的类型 一、什么是网络安全 网络安全&#xff08;Network Security&#xff09;指的是保护计算机网络及其相关设备、系统和数据免受未经授权访问、破坏、篡改、窃取或滥用的威胁和攻击。随着网…

生成式AI相关知识记录

一、简述开发步骤 开发一个生成式AI模型通常涉及以下步骤&#xff1a; 1. **需求分析与目标设定**&#xff1a; - 确定应用领域和目标&#xff0c;例如文本生成、图像生成、音乐创作等。 - 分析应用场景的具体需求&#xff0c;包括输出质量、速度、多样性、可控性等因素…