积分(一)——复化梯形积分(C++)

news2024/11/28 20:58:16

梯形积分

设f(x)在[a,b]上连续,若要计算其积分,则
∫ a b f ( x ) d x = F ( b ) − F ( a ) \int_a^b f(x)dx = F(b) - F(a) abf(x)dx=F(b)F(a)
其中F(x)为f(x)的原函数,但是计算机直接计算出该积分函数比较困难,因此需要近似求解。梯形积分使用函数的区间边界点作梯形进行计算,即
∫ a b f ( x ) d x ≈ ( f ( a ) + f ( b ) ) ( b − a ) 2 \int_a^b f(x)dx \approx \frac{(f(a)+f(b))(b-a)}{2} abf(x)dx2(f(a)+f(b))(ba)
当[a,b]区间比较小时,这个误差就比较小,对于[a,b]区间比较大的情况,普通的梯形积分就不再适用,需要对梯形积分进行复化。

复化梯形积分

复化梯形积分就是在区间[a,b]上进行m次划分,每次划分得到n个子区间,然后计算每个子区间的梯形积分,最后将这m个梯形积分相加,得到整个区间的梯形积分。
假设[a,b]区间被划分为n个区间,h=(b-a)/n, x k = a + k h ( k = 0 , ⋯   , n ) x_k=a+kh(k=0,\cdots ,n) xk=a+kh(k=0,,n)
∫ a b f ( x ) d x ≈ ∑ k = 1 n h 2 [ f ( x k − 1 + f ( x k ) ) ] = h 2 [ f ( a ) + 2 ∑ k = 1 n − 1 f ( x k ) + f ( b ) ] \int_a^b f(x)dx \approx \sum_{k=1}^n \frac{h}{2}[f(x_{k-1}+f(x_k))]\\ =\frac{h}{2}[f(a)+2\sum_{k=1}^{n-1}f(x_k)+f(b)] abf(x)dxk=1n2h[f(xk1+f(xk))]=2h[f(a)+2k=1n1f(xk)+f(b)]

误差分析

复化梯形积分要划分为多少个区间才合适呢?显然需要做一个误差控制,但是问题就在于如何判断复化梯形积分与实际积分值的误差,使用梯形积分的原因就是因为原本的积分不容易求出来,所以直接比较是不可以的,此处需要使用到事后误差分析,即区间继续增加划分数量时,积分值变化小于某个值时即可认为此时的积分与实际的误差小于一定范围。
复化梯形积分的余项可以表示为:
R [ f ] = ∑ k = 1 n [ − h 3 12 f ′ ′ ( ξ k ) ] = − h 2 12 ( b − a ) ∑ k = 1 n f ′ ′ ( ξ k ) n = − h 2 12 ( b − a ) f ′ ′ ( ξ ) ( ξ ∈ ( a , b ) ) = − ( b − a ) 3 12 n 2 f ′ ′ ( ξ ) ( ξ ∈ [ a , b ] ) R[f]=\sum_{k=1}^n [-\frac{h^3}{12}f''(\xi_k)]\\ =-\frac{h^2}{12}(b-a)\frac{\sum_{k=1}^n f''(\xi_k)}{n}\\ =-\frac{h^2}{12}(b-a)f''(\xi)(\xi \in (a,b))\\ =-\frac{(b-a)^3}{12n^2}f''(\xi)(\xi \in [a,b]) R[f]=k=1n[12h3f′′(ξk)]=12h2(ba)nk=1nf′′(ξk)=12h2(ba)f′′(ξ)(ξ(a,b))=12n2(ba)3f′′(ξ)(ξ[a,b])
因此,要求梯形积分与实际积分值小于 ϵ \epsilon ϵ,则其余项小于 ϵ \epsilon ϵ
I ( f ) − T n ( f ) = − b − a 12 h 2 f ′ ′ ( ξ ) I ( f ) − T 2 n ( f ) = − b − a 12 ( h / 2 ) 2 f ′ ′ ( η ) I(f)-T_n(f)=-\frac{b-a}{12}h^2f''(\xi)\\ I(f)-T_{2n}(f)=-\frac{b-a}{12}(h/2)^2f''(\eta) I(f)Tn(f)=12bah2f′′(ξ)I(f)T2n(f)=12ba(h/2)2f′′(η)
两者可以近似为:
I ( f ) − T n ( f ) ≈ 4 [ I ( f ) − T 2 n ( f ) ] I(f)-T_n(f)\approx 4[I(f)-T_{2n}(f)]\\ I(f)Tn(f)4[I(f)T2n(f)]
因此若有
T 2 n ( f ) − T n ( f ) < 3 ϵ T_{2n}(f)-T_n(f)< 3\epsilon T2n(f)Tn(f)<3ϵ
即可等价为
I ( f ) − T 2 n ( f ) < ϵ I(f)-T_{2n}(f)< \epsilon I(f)T2n(f)<ϵ

代码实现

#include<iostream>
#include<cmath>
#include<iomanip>//这个头文件仅仅是用来设置cout的输出精度
#define abs(x) (x>0?x:-x)
using namespace std;
//梯形积分,传入参数为分段的n,积分下限a,积分上限b,对应的积分函数
double trapezium(int n,double a,double b,float(*f)(float x))
{
    double f_x=0.0f;
    double h=(b-a)/n;
    for (int i = 1; i < n; i++)
    {
        f_x+=f(a+i*h);//梯形公式的f(x_k)的累加和
    }
    f_x*=h;
    f_x+=(f(a)+f(b))*h/2;//根据n算出对应的复化梯形积分
    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=trapezium(n*2,a,b,fx);//算T2n
        if(fabs(f_x_n-f_x_2n)<(error*3))
        {
            //cout<<n<<":trapezium error="<<fabs(f_x_n-f_x_2n)<<endl;
            cout << "梯形积分的误差为:" << fabs(f_x_n - f_x_2n) << endl;
            n*=2;
            break;
        }
        n+=1;
        f_x_n=trapezium(n,a,b,fx);//算Tn
    }
    cout<<"区间划分数量:n="<<n<<",积分值为:"<<std::setprecision(10)<<f_x_2n<<endl;
    return 0;
}

结果分析

运行程序后,被积函数为sin(x)/x,积分区间为[0,2],为了达到 I ( f ) − T 2 n ( f ) < 1 0 − 6 I(f)-T_{2n}(f)< 10^{-6} I(f)T2n(f)<106,需要将区间划分为382个小区间,此时采用事后误差估计法求得的 T 2 n ( f ) − T n ( f ) = 2.98242 × 1 0 − 6 T_{2n}(f)-T_n(f)=2.98242\times 10^{-6} T2n(f)Tn(f)=2.98242×106
在这里插入图片描述
为了验证事后误差估计法,采用Matlab进行计算, I ( f ) I(f) I(f)如下:
在这里插入图片描述

计算 T 2 n ( f ) − I ( f ) T_{2n}(f)-I(f) T2n(f)I(f)如下:
在这里插入图片描述
可以看出事后误差估计得到的结果符合期望。

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

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

相关文章

六、Datax通过json字符串运行

Datax通过json字符串运行 一、场景二、代码实现 一、场景 制作一个web应用&#xff0c;在页面上配置一个json字符串&#xff0c;保存在数据库里面。在执行json的时候&#xff0c;动态在本地创建一个json文件后执行&#xff0c;并识别是否成功&#xff0c;将执行过程保存在数据…

fgets的使用方法详解

fgets的使用 文章目录 fgets的使用前言&#xff08;吹水&#xff0c;不看也罢&#xff09;fgets 的基本语法使用示例fgets() 对输入的处理的特点gets() 与 fgets() 的主要区别 总结 前言&#xff08;吹水&#xff0c;不看也罢&#xff09; 鼠鼠今天在B站上大学的时候&#xff…

离散傅里叶变换

目标 我们将寻求以下问题的答案&#xff1a; 什么是傅里叶变换&#xff0c;为什么要使用它&#xff1f;如何在OpenCV中做到这一点&#xff1f;使用以下函数&#xff1a;copyMakeBorder&#xff08;&#xff09; &#xff0c; merge&#xff08;&#xff09; &#xff0c; dft…

蓝桥杯:C++排列与组合

排列是暴力枚举时的常见操作。有以下两种情况。 C的 next_permutation()是全排列函数&#xff0c;只能输出序列中所有元素的全排列。 本节将给出手写排列和组合的代码。因为在很多场合中不能使用系统自带的排列函数&#xff0c;所以需要自己编写。 全排列函数&#xff1a;nex…

Lag-Llama:第一个时间序列预测的开源基础模型介绍和性能测试

2023年10月&#xff0c;我们发表了一篇关于TimeGPT的文章&#xff0c;TimeGPT是时间序列预测的第一个基础模型之一&#xff0c;具有零样本推理、异常检测和共形预测能力。 虽然TimeGPT是一个专有模型&#xff0c;只能通过API访问。但是它还是引发了对时间序列基础模型的更多研…

读十堂极简人工智能课笔记03_遗传算法与进化

1. 寻找正确答案 1.1. 卡尔西姆斯 1.1.1. 计算机图形艺术家和研究者 1.1.2. 演示过数字进化之创造性和新颖性的先驱 1.1.3. 1994年 1.1.3.1. 创造一批能游泳、走路、跳跃&#xff0c;甚至互相竞争的虚拟动物震惊了整个科学界 1.1.3.2. 它们的人工大脑却是个极其复杂的网络…

公需课考试怎么搜题找答案?推荐你使用这5个公众号和工具 #知识分享#其他#知识分享

大学生必备&#xff0c;这条笔记大数据一定定要推给刚上大学的学弟学妹&#xff01;&#xff01; 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试…

Leetcode-1572. 矩阵对角线元素的和

题目&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线…

解决ucore实验qemu不断重启问题

解决 ucore 实验 qemu 不断重启问题 做清华大学操作系统 ucore 实验 (x86版本)&#xff0c;实验一编译后运行 qemu 发现系统不断重启&#xff0c;无法正常运行 kernel。实验环境是 ubuntu 22.04&#xff0c;gcc 11.4.0&#xff0c;ld 2.38。最终查证是链接脚本 kernel.ld 导致…

Docker 在window 2024版笔记 下载 安装 操作 配置

---Docker 前言--- Docker windows版官方版是一款专业开源的应用容器引擎&#xff0c;可以加快用户构建、共享和运行现代应用程序的速度&#xff0c;支持运行Linux和Windows Docker容器。 Docker 在容器的基础上&#xff0c;进行了进一步的封装&#xff0c;从文件系统、网络互…

[office] excel2016怎么求最大值和最小值 #职场发展#知识分享

excel2016怎么求最大值和最小值 excel求最大值最小值步骤&#xff1a; 1、鼠标左键双击计算机桌面Excel2016程序图标&#xff0c;将其打开运行。在打开的Excel2016程序窗口&#xff0c;点击“打开其他工作簿”选项&#xff0c;打开需要进行编辑的Excel工作表。如图所示; 2、在打…

SpringCloud-搭建Nacos配置中心

一、Nacos 功能介绍 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一个分布式服务注册、配置管理&#xff0c;以及服务健康管理平台。在微服务架构中&#xff0c;配置管理是至关重要的一环&#xff0c;Nacos 提供了可靠、动态的配置…

python-分享篇-GUI界面开发-PyQt5-禁止窗体显示最大化按钮及调整窗体大小

代码 # -*- coding: utf-8 -*-# Form implementation generated from reading ui file nochange.ui # # Created by: PyQt5 UI code generator 5.11.3 # # WARNING! All changes made in this file will be lost! 禁止窗体显示最大化按钮及调整窗体大小from PyQt5 import QtCo…

开局托儿所

一&#xff0c;游戏规则 示例&#xff1a; 9549366345591582732535371762455786747469134955224161766515693255444341522757146691483635716392362557418825198461525396798798225943422864547928724689891326449758 二&#xff0c;贪心算法 我们先用贪心算法试一下&#xf…

wordpress好的网站主题

有什么好的网站主题&#xff0c;都分享在这里了。 蓝色风格的wordpress模板&#xff0c;好的wordpress网站主题&#xff0c;需要既好看&#xff0c;又好用。 https://www.zhanyes.com/qiye/6305.html 血红色的好看的wordpress主题&#xff0c;布局经典&#xff0c;设计好的&am…

Vue2学习第二天

Vue2 学习第二天 1. 数据绑定 Vue 中有 2 种数据绑定的方式&#xff1a; 单向绑定(v-bind)&#xff1a;数据只能从 data 流向页面。双向绑定(v-model)&#xff1a;数据不仅能从 data 流向页面&#xff0c;还可以从页面流向 data。 备注&#xff1a; 双向绑定一般都应用在表单…

大学生画图搜题答案神器?一键查询完备大学题库 #知识分享#经验分享#学习方法

大学生必备的搜题工具&#xff0c;专业课本习题、电子版教材、考研资料、英语四六级等考试题目也能一并搜索&#xff0c;每道题目都有详细的讲解&#xff0c;每个都堪称大学神器。 1.试题易 这是一个网站 涵盖初高中&#xff0f;大学&#xff0f;专升本&#xff0f;考研&…

python视频播放列表信息库之m3u8使用详解

m3u8库是什么&#xff1f; m3u8是一个用于解析和操作M3U8文件的Python库。M3U8文件&#xff0c;是指使用UTF-8编码格式的M3U文件&#xff0c;它们通常用于播放列表文件&#xff0c;尤其是在HTTP Live Streaming&#xff08;HLS&#xff09;中。简单来说&#xff0c;m3u8库能帮…

嵌入式中I2C 相关的硬件问题汇总及死锁解决办法

本文主要介绍如何解决I2C设备硬件设计上的各种问题&#xff0c;希望对大家有所帮助&#xff01; 关于I2C协议详细的讲解&#xff0c;可以参考之前的推文&#xff1a;全面解析 I2C 通信协议 一般情况下&#xff0c; i2c 设备焊接没什么问题&#xff0c;按照设备手册一步步来&a…

<网络安全>《33 网络信息安全基础(4)网络安全工程师进阶体系(一)》

1 图谱 1 基础入门 1.1 网络安全导论 网络安全行业简介&#xff1a; 行业前景 历史 重要事件 网络安全意识与法律法规 安全意识 法律法规 案例 网络安全管理概述 安全运营、运维、模型 等保测评 等保简介、等保规定、流程和规范 1.2 渗透测试基础 渗透测试概述 - 流程、分…