首页 > 其他分享 >辛普森积分学习笔记

辛普森积分学习笔记

时间:2025-01-23 15:21:16浏览次数:1  
标签:frac int 积分 笔记 辛普森 dx double 区间

辛普森积分学习笔记

定积分

定积分的定义

设函数 \(f(x)\) 在区间 \([a,b]\) 上有界,在 \([a,b]\) 中插入若干个分点

\[a=x_0<x_1<x_2<\cdots<x_{n-1}<x_n=b \]

把区间 \([a,b]\) 分成 \(n\) 个小区间,各小区间的长度依次为 \(\Delta x_i=x_i-x_{i-1}(1\le i\le n)\)。在各小区间上任取一点 \(\xi_i\)(\(\xi\in[x_{i-1},x_i]\)),作乘积 \(f(\xi_i)\Delta x_i\) 并求和

\[S=\sum_{i=1}^{n}f(\xi_i)\Delta_i \]

记 \(\lambda=\max(\Delta x_1,\Delta x_2,\cdots,\Delta x_n)\),如果不论对 \([a,b]\) 怎样分,也不论小区间 \([x_{i-1},x_i]\) 上点 \(\xi_i\) 怎样的取法,只要当 \(\lambda\to 0\) 时,和 \(S\) 总趋于确定的极限 \(I\),我们称这个极限 \(I\) 为函数 \(f(x)\) 在区间 \([a,b]\) 上的定积分,记作 \(\int_{a}^{b}f(x)dx\)。即

\[\int_{a}^{b}f(x)dx=I=\lim_{\lambda\to 0}\sum_{i=1}^{n}f(\xi_i)\Delta x_i \]

其中 \(f(x)\) 叫做被积函数,\(f(x)dx\) 叫做被积表达式, \(x\) 叫做积分变量,\(a\) 叫做积分下限,\(b\) 叫做积分上限,\([a,b]\) 叫做积分区间。积分值仅与被积函数与积分区间有关,与积分变量用什么字母无关,即

\[\int_{a}^{b}f(x)dx=\int_{a}^{b}f(t)dt=\int_{a}^{b}f(u)du \]

同时定义

  1. \(\int_{a}^{a}f(x)dx=0\)
  2. \(\int_{a}^{b}f(x)dx=-\int_{b}^{a}f(x)dx\)

定积分的几何意义即曲线 \(y=f(x)\) 和直线 \(x=a,x=b\) 以及 \(x\) 轴围成各部分中,\(x\) 轴上方图形面积之和减去 \(x\) 轴下方图形面积之和。

可积的定义

当函数 \(f(x)\) 在区间 \([a,b]\) 上的定积分存在时,称 \(f(x)\) 在区间 \([a,b]\) 上可积。若 \(f(x)\) 在区间 \([a,b]\) 上可积,则 \(f(x)\) 在 \([a,b],(a,b],[a,b),(a,b)\) 上均可积且定积分相等。

充分条件:当函数 \(f(x)\) 在区间 \([a,b]\) 上连续时,则 \(f(x)\) 在区间 \([a,b]\) 上可积;当函数 \(f(x)\) 在区间 \([a,b]\) 上有界,且只有有限个间断点,则 \(f(x)\) 在区间 \([a,b]\) 上可积。

必要条件:若函数 \(f(x)\) 在区间 \([a,b]\) 上可积,则 \(f(x)\) 在 \([a,b]\) 上必有界。

性质

  1. 定积分对函数有线性性,即若 \(\alpha,\beta\) 为常数,则

\[\int_{a}^{b}[\alpha f(x)+\beta g(x)]dx=\alpha\int_{a}^{b}f(x)dx+\beta\int_{a}^{b}g(x)dx \]

  1. 对区间有可加性,即对于任意三个常数 \(a,b,c\),都有

\[\int_{a}^{b}f(x)dx=\int_{a}^{c}f(x)dx+\int_{c}^{b}f(x)dx \]

  1. 同时具有保号性,即对于 \(a<b\),如果在区间 \([a,b]\) 上 \(f(x)\ge 0\),则

\[ \int_{a}^{b}f(x)dx\ge 0 \]

  1. 如果 \(a<b\) 且 \(M,m\) 分别是函数 \(f(x)\) 在 \([a,b]\) 上的最大值即最小值,则

\[m(b-a)\le\int_{a}^{b}f(x)dx\le M(b-a) \]

  1. 设 \(f(x)\) 在 \([a,b]\) 上连续,则至少存在一点 \(\xi\in[a,b]\) 使得

\[\int_{a}^{b}f(x)dx=f(\xi)(b-a) \]

其中 \(f(\xi)=\frac{1}{b-a}\int_{a}^{b}f(x)dx\) 称为函数 \(f(x)\) 在区间 \([a,b]\) 上的平均值。

辛普森积分

对于朴素的积分计算,有牛顿-莱布尼茨公式,即

\[\int_{a}^{b}f(x)dx=F(b)-F(a) \]

其中 \(F(x)\) 是 \(f(x)\) 的原函数,即 \(f(x)=F'(x)\)。

但对于没有原函数或不好求解原函数的函数,我们可以采取梯形法则,即考虑用 \([a,b]\) 两点连线得到的直线代替曲线 \(y=f(x)\) 从而得到一个近似值,也叫做一阶牛顿-柯特斯闭型积分公式

\[I=\int_{a}^{b}f(x)dx\cong \int_{a}^{b}f_n(x)dx \]

其中 \(f_n(x)=a_0+a_1x+\cdots+a_{n-1}x^{n-1}+a_nx^n\)。一阶指的就是 \(n=1\) 的情况。而一个 \(n\) 次多项式的原函数是好求的,\(f_n(x)\) 对应的原函数即为 \(F_n(x)=C+a_0x+\frac{a_1}{2}x^2+\cdots+\frac{a_{n-1}}{n}x^n+\frac{a_n}{n+1}x^{n+1}\),其中 \(C\) 为常数。那么在这个近似于原函数的积分下,我们可以得到原函数积分的近似值。

而辛普森积分法就是二阶牛顿-柯特斯闭型积分公式,即利用一个二次函数去适配原函数,但众所周知,三个点才能确定一个二次函数,那么我们需要在区间内再取一个点,我们取 \(c=\frac{a+b}{2}\) 作为第三个点,那么有

\[\int_{a}^{b}f(x)dx\cong\int_{a}^{b}f_2(x)dx=\frac{b-a}{6}[f(a)+4f(c)+f(b)] \]

下面给出证明:

设由 \((a,f(a)),(b,f(b)),(c,f(c))\) 三点得到的二次函数为 \(f_2(x)=Ax^2+Bx+C\),所以 \(F_2(x)=\frac{A}{3}x^3+\frac{B}{2}x^2+Cx+\alpha\),由牛顿-莱布尼茨公式得

\[\begin{aligned}\int_{a}^{b}f(x)dx&\cong\int_{a}^{b}f_2(x)dx\\&=F_2(b)-F_2(a)\\&=\frac{A}{3}(b^3-a^3)+\frac{B}{2}(b^2-a^2)+C(b-a)\\&=\frac{b-a}{6}[2A(a^2+ab+b^2)+3B(a+b)+6C]\\&=\frac{b-a}{6}[(Aa^2+Ba+C)+4(A(\frac{a+b}{2})^2+B(\frac{a+b}{2})+C)+(Ab^2+Bb+C)]\\&=\frac{b-a}{6}[(Aa^2+Ba+C)+4(Ac^2+Bc+C)+(Ab^2+Bb+C)]\\&=\frac{b-a}{6}[f(a)+4f(c)+f(b)] \end{aligned} \]

那么,在已知 \(f(x)\) 的情况下我们可以得到原函数定积分的近似值。

自适应辛普森积分法

但是,我们考虑对于一个不解近二次函数的函数图像,进行这样的逼近还是过于粗糙了。为了避免误差过大,也是为了利用计算机实现,我们需要学习自适应辛普森积分法。

为了减少误差,我们显然可以将区间不断细化,这样一定可以逼近准确值,但是,计算机的运行速度限制了我们,我们不能将原区间拆分得过于细致,并且我们不能接受较大的误差,那么我们不妨对于区间 \([a,b]\) 先行给出一个估算值 \(A\),接着对区间 \([a,c],[c,b]\) 分别算出其估算值 \(A_1,A_2\)。由积分的区间可加性,那么 \(I\cong A_1+A_2\cong A\),只要 \(A\) 与 \(A_1+A_2\) 的差值不至于过大,那么我们就可以认为当前区间的求解已经足够。反之则利用区间的可加性具体求解两侧区间的积分后相加得到答案。

但是,不难考虑到如果 \(A,A_1,A_2\) 的误差均较大,但其差值恰好较小,我们依旧会认为其合理,为了避免这种情况,我们可以人为设定一个递归层数,只有超过这个层数我们才会考虑是否直接退出的问题。同时为了防止小误差相加得到大误差,我们在递归时需要将误差逐次减小。

并且我们发现,我们可能会重复调用许多次 f 函数,因此可以采用记忆化的方式进行卡常。

代码

double f(double x){
    //利用高超的算法求解已知的 f
}

double Simpson(double l,double r){
	double mid=(l+r)/2;
	return (f(l)+f(r)+4*f(mid))*(r-l)/6;//辛普森积分
}

double asr(double l,double r,double ans,double eps){
	double mid=(l+r)/2;
	double l_=Simpson(l,mid),r_=Simpson(mid,r);//估算左右两个区间的积分
	if(fabs(l_+r_-ans)<=15*eps)return l_+r_+(l_+r_-ans)/15;//判断误差
	return asr(l,mid,l_,eps/2)+asr(mid,r,r_,eps/2);//递归求解
    //事实上,这里的 15,2 都是可以自己改变的参数,根据经验和题目限制选择合适的参数即可
}

double asr(double l,double r,double eps){
	return asr(l,r,Simpson(l,r),eps);
}

int main(){
	double ans=asr(L,R,1e-6);
    //这里的 L,R 是积分区间,但是对于一个收敛于 0 的函数可以自己二分出一个合理的上限避免积分区间过大
    //对代码的时间复杂度造成影响的因素有:区间 [L,R],误差,误差参数。
	return 0;
}

标签:frac,int,积分,笔记,辛普森,dx,double,区间
From: https://www.cnblogs.com/DycBlog/p/18687832

相关文章

  • Golang笔记——静态强类型、编译型、并发型语言
    大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Go语言的基础知识,包括数据类型,深浅拷贝,编程范式,Go语言是一种静态(静态类型语言和静态语言)强类型、编译型、并发型,并具有垃圾回收功能的编程语言。文章目录1.Go语言基础知识数据类型......
  • 折腾笔记[11]-使用rust进行直接法视觉里程计估计
    摘要使用rust实现了一个完整的直接法视觉里程计系统,能够通过比较两幅图像中的像素强度来估计相机的运动。它通过单层和多层的优化策略,结合图像金字塔和并行计算,提高了位姿估计的精度和效率。最终,代码输出了优化后的相机位姿变换矩阵,并可视化了投影点的位置。Thisisacomplete......
  • 联想 ThinkPad 笔记本T14 CPU 降频解决方案
    原因:在工作中,打开多个IDE的情况下,会出现卡顿问题,发现是由于CPU降频到0.5GHz导致的。环境:笔记本是联想ThinkPadT14CPU:12thGenInterlCorei7-1260P系统为Window10专业版解决办法经过搜索后,适合的方案如下:打开电源的卓越性能模式在WindowsPowershell中......
  • 读书笔记:高性能架构之道
    高性能架构之道,分布式、并发编程、数据库调优、缓存设计、IO模型、前端优化、高可用第1章高性能架构0011.1软件架构001理念层面:如研究软件的开发模型、评价指标、架构风格等。架构层面:研究如何协调和组织软件系统、子系统、模块之间的关系。类比于规划和设计建筑物的承......
  • 202511读书笔记|《山中与诸道友夜坐闻》——风翻荷叶一向白,雨湿蓼花千穗红
    202511读书笔记|《山中与诸道友夜坐闻》——风翻荷叶一向白,雨湿蓼花千穗红《山中与诸道友夜坐闻》温庭筠,还不错,可以轻松的读的小诗词。上学学过他的一些词,喜欢是缘于后来看花间集和飞花令。半小时可读完的一本书......
  • 洛谷OI_树的刷题笔记
    整个笔记注意力惊人,慎入......持续更新。P2700逐个击破能卡住我的黄题已经很少见了,但这道题确实又是一个。唉,只能说自己依然是蒟蒻吧。不过,由于题目很容易理解,加上自己因为刷难题身心俱疲,“玩”一下这种简单的题目也算是种放松。不能因为刷题,把自己学算法的乐趣搞没了。先......
  • 《人月神话》读书笔记:探寻软件开发的真理与智慧
    阅读《人月神话》,仿佛开启了一场与软件开发领域先辈的深度对话,书中对软件开发过程中诸多复杂问题鞭辟入里的剖析,为我带来了前所未有的启发与思考。书中提出的“人月神话”概念,彻底颠覆了我以往对软件开发人力与时间关系的简单认知。它指出,在软件开发项目中,人力和时间并非可以随......
  • 《构建之法》读书笔记
    知识启迪与实践反思翻开《构建之法》,宛如踏入软件开发的知识殿堂,它不仅让我了解软件开发的流程和理念,更引发我对生活、学习和工作的深入思考。书中提到的需求分析环节,让我明白在做任何事情前,都要精准把握核心需求。就像策划一场校园心理健康讲座,不能只凭主观想法确定内容,而是要......
  • Java初学者笔记-11、反射注解动态代理
    Junit单元测试针对最小的功能单元:方法,编写测试代码对其进行正确性测试。Junit单元测试框架:可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA)。可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各......
  • 「2025 - 寒假 - Day-2 提高笔记-反悔贪心」
    反悔贪心贪心是按照一定顺序进行选择的思想,但是局部最优不等于全局最优,有的时候我们需要用到反悔贪心,看一道例题。BuyLowSellHigh思路我们发现不能简单的通过最小的股票或者最大的股票,又或是次大的股票进行操作。这时,我们考虑一个问题,在\(i<j<k\)中,利润分别是什么?......