数值方法求积分 详解+模板代码

什么是数值积分

  数值积分可以用来求定积分的近似值。对于很多函数来说,我们是可以使用初等函数来表示出其积分的,对于这种函数,只需要求出不定积分然后代入值就能得到定积分了。

  可是除此之外还有许多难求的函数和没法使用初等函数表示的函数。当我们想要求出它们的定积分的时候,需要使用数值积分来求解。

  在ACM中一些题目需要使用数值积分来求解,以下列出一些求数值积分的方法,由简单到难,而对ACMer来说最重要的是复合Simpson,其精度较高,且可调精度,是乱搞积分几何的利器

  我从这学的:网易公开课 MIT 数值积分

  学习的契机是想要A掉这题:ZOJ 3898我的题解

法一·黎曼和

黎曼和是用将区间等长分为n段,然后用矩形去逼近函数,每段的长为Δx

可以选择每段左侧的函数值作为矩形的高,也可以选择每段右侧的函数值作为矩形的高。

这里写图片描述

若设n+1个函数值从左至右为x0,x1xn,可得如下公式: 

Left Hand Riemann=Right Hand Riemann=Δxf(x0)+Δxf(x1)++Δxf(xn1)=Δxi=0n1f(xi)Δxf(x1)+Δxf(x2)++Δxf(xn)=Δxi=1nf(xi)
这种逼近比较粗糙,不过能比较好地传达数值积分的概念。

法二·梯形法

黎曼和虽然简单,但是精度堪忧,没法很好地模拟逼近函数,接下来介绍第二种方法。

可以看出用矩形逼近的时候有很多空缺,使用梯形去逼近,就能大大提高精度了,看上去很像了。 
这里写图片描述 
沿用之前的xi,由梯形公式我们可以得到如下公式: 

Trapezoid=Δx(f(x0)+f(x1))2+Δx(f(x1)+f(x2))2++Δx(f(xn1)+f(xn))2=Δx(f(x0)2+f(x1)++f(xn1)+f(xn)2)=Left Hand Riemann+Right Hand Riemann2

可以看出梯形法求出的就是左右黎曼和的平均值。

公式中第一个和最后一个需要除以2其他都能合出来1个。

法三·Simpson公式

前两种都比较简单,但是精度比较差,第三种方法是用抛物线去逼近

其实我并不知道是怎么计算的,是从公开课上学来的。

使用Simpson公式首先需要n为偶数。

将整个区间分为n2段,每段的底为2Δx,高比较难搞,但是是有公式的:Simpson height=f(xl)+4f(xm)+f(xr)6

于是有公式: 

Simpson=Δx3(f(x0)+4f(x1)+2f(x2)++2f(xn2)+4f(xn1)+f(xn))

这里写图片描述

法四·复合Simpson

Simpson公式的精度其实已经相当不错了,可是相对于ACM中所需的精度仍然有差距

为了提高精度,我们需要多次重复利用Simpson公式。

我们先定义被积函数为f(x),定义Simpson(l,r)=(rl)f(l)+4f(l+r2)+f(r)6

这也就是常规的Simpson公式,再定义函数RSimpson为复合Simpson

当我们要求RSimpson(l,r),先令m=l+r2

Simpson(l,r)Simpson(l,m)+Simpson(m,r)时我们就认为精度够了返回其中一个。

当不满足的时候我们就再分段去求RSimpson(l,m)+RSimpson(m,r)

这样得到的精度就比较高了,而且通过定义的范围可以调整精度。

总结公式如下: 

RSimpson(l,r)={Simpson(l,r)                                              approximateRSimpson(l,m)+RSimpson(m,r)       else

复合Simpson的实现

inline double getAppr(double fl, double fm, double fr, double l, double r) {return (fl+4*fm+fr)*(r-l)/6.0;
}double Simpson(double l, double r, double fl, double fr) {double m = (l+r)/2, lm = (l+m)/2, rm = (r+m)/2;double fm = f(m), flm = f(lm), frm = f(rm);double vlr = getAppr(fl, fm, fr, l, r);double vlm = getAppr(fl, flm, fm, l, m);double vrm = getAppr(fm, frm, fr, m, r);return fabs(vlr-vlm-vrm) < EPS ? vlr : Simpson(l, m, fl, fm)+Simpson(m, r, fm, fr);
}

复合Simpson的实现2(Natureal的代码)

inline double getAppr(double l,double r){return (f(l) + 4.0*f((l+r)/2) + f(r)) * (r - l) / 6.0;
}double Simpson(double l,double r){double sum = getAppr(l,r);double mid = (l+r)/2;double suml = getAppr(l,mid);double sumr = getAppr(mid,r);return (fabs(sum - suml - sumr) < EPS) ? sum : Simpson(l, mid) + Simpson(mid, r);
}


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

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

相关文章

用积木讲运维,这样的IT人太会了

积木的拼搭&#xff0c;是件细致工作。用不同的积木&#xff0c;进行组合变换&#xff0c;小孩子可能会用积木搭高楼、搭汽车、搭公路&#xff0c;而IT人则选择通过搭建小积木&#xff0c;讲解可观测的大乾坤。 大家所熟知的日志服务SLS不只是“日志存储”&#xff0c;更是一个…

再谈数据湖3.0:降本增效背后的创新原动力

前言&#xff1a;2022年3月 31 日&#xff0c;阿里云全球数据湖峰会上&#xff0c;阿里云从“湖管理、湖存储和湖计算“这三个方面&#xff0c;为观众带来了“数据湖 3.0” 的重磅升级方案。在时隔两百多天的云栖大会上&#xff0c;阿里云存储对数据湖的能力&#xff0c;进行了…

原码 反码 补码 详解

一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的&#xff0c;在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如&#xff0c;十进制中的数 3 &…

谈谈 PolarDB-X 在读写分离场景的实践

在数据库使用过程中经常会遇到一些场景&#xff1a; 业务写流量一直相对比较稳定&#xff0c;但随着时间&#xff0c;数据不断增加&#xff0c;数据库的压力也会越来越大&#xff0c;写操作会影响到读请求的性能&#xff0c;做任何优化可能都达不到最终的效果&#xff1b;在应…

开源数据库 PolarDB 为什么能捕获娃哈哈的心?

一、娃哈哈的需求 娃哈哈已经使用PostgreSQL多年&#xff0c;使用了大量逻辑复制&#xff0c;且备库仅提供一些业务的只读服务。同时&#xff0c;其重要业务的数据库运行在共享SAN存储上。因此&#xff0c;它存在主备库延迟较大、逻辑复制不稳定且延迟大的痛点。 二、使用Pola…

数据库 PolarDB 开源之路该如何走?听听他们怎么说

阿里巴巴集团副总裁、阿里云数据库事业部负责人李飞飞出席了沙龙并致开场辞&#xff1a;PolarDB 是阿里云的明星产品&#xff0c;做出将PolarDB 开源的决策需要非常大的勇气。将最核心的数据库产品对外开源&#xff0c;且使用了最友好的协议&#xff0c;阿里云是全球头部云厂商…

通过定时 SQL 提取阿里云API 网关访问日志指标

背景 阿里云API网关服务提供API托管服务&#xff0c;提供了强大的适配和集成能力&#xff0c;可以将各种不同的业务系统API实现统一管理。API网关同时支持将API访问日志一键存储到日志服务&#xff0c;通过日志服务强大的查询分析能力&#xff0c;用户可以针对访问日志自定义计…

2022云栖现场|体验阿里巴巴工作数字化实践

越来越多的企业主动拥抱数字化转型&#xff0c;借助数字化工具提高企业运营效率&#xff0c;实现企业目标落地、帮助员工成长。 2022云栖大会&#xff0c;阿里巴巴企业智能带来阿里数字化工作方法与企业IT解决方案&#xff0c;展示着阿里内部在办公协同与IT管理上的实际应用场…

K8s 场景下 Logtail 组件可观测方案升级-Logtail 事件监控发布

背景 随着K8s和云的普及&#xff0c;越来越多的公司将业务系统部署到云上&#xff0c;并且使用K8s来部署应用。Logtail是SLS提供的日志采集Agent&#xff0c;能够非常好的适应K8s下各种场景的日志采集&#xff0c;支持通过DaemonSet方式和Sidecar方式采集Kubernetes集群的容器…

一图看懂,阿里云飞天企业版如何支持政企数智创新

杭州&#xff0c;2022年11月5日 – 今日&#xff0c;在云栖大会专有云技术和应用实践论坛&#xff0c;阿里云重磅发布飞天企业版在建云、管云、用云方面的全面升级&#xff0c;并邀请行业专家、政企客户代表和合作伙伴面向未来十年共话新一代政企IT发展趋势&#xff0c;分享阿里…

关于HTTPDNS,你知道多少?

什么是HTTPDNS&#xff1f; HTTPDNS是面向多端应用&#xff08;移动端APP&#xff0c;PC客户端应用&#xff09;的域名解析服务&#xff0c;具有域名防劫持、精准调度、实时解析生效的特性。 HTTPDNS工作流程 客户端直接访问HTTPDNS接口&#xff0c;获取业务在域名配置管理系…

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

导读 用户生成内容&#xff08;User Generated Content&#xff0c;UGC&#xff09;是互联网上多模态内容的重要组成部分&#xff0c;UGC数据级的不断增长促进了各大多模态内容平台的繁荣。在海量多模态数据和深度学习大模型的加持下&#xff0c;AI生成内容&#xff08;AI Gen…

使用 EasyCV Mask2Former 轻松实现图像分割

导言 图像分割(Image Segmentation)是指对图片进行像素级的分类&#xff0c;根据分类粒度的不同可以分为语义分割(Semantic Segmentation)、实例分割(Instance Segmentation)、全景分割(Panoptic Segmentation)三类。图像分割是计算机视觉中的主要研究方向之一&#xff0c;在医…

八皇后问题详解(最短代码)

八皇后问题算法分析&#xff1a; 分析1&#xff1a;八皇后由一个64格的方块组成&#xff0c;那么把八个皇后放入不考虑其他情况利用穷举法&#xff0c;有8^64种 可能。 分析2&#xff1a;显然任意一行有且仅有1个皇后&#xff0c;使用数组queen[0->7]表示第i行的皇后位于哪一…

5个编写技巧,有效提高单元测试实践

1. 什么是单元测试 “在计算机编程中&#xff0c;单元测试又称为模块测试&#xff0c;是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中&#xff0c;一个单元就是单个程序、函数、过程等&#xff1b;对于面向对象编程&#xff0c;最…

谈谈我工作中的23个设计模式

序 从基础的角度看&#xff0c;设计模式是研究类本身或者类与类之间的协作模式&#xff0c;是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后&#xff0c;为了加深理解&#xff0c;对相关图片进行了描绘和微调。 从技术的角度已经有很多好的总结&#xff0c;本文会换…

OpenSergo 流量路由:从场景到标准化的探索

流量路由&#xff0c;顾名思义就是将具有某些属性特征的流量&#xff0c;路由到指定的目标。流量路由是流量治理中重要的一环&#xff0c;多个路由如同流水线一样&#xff0c;形成一条路由链&#xff0c;从所有的地址表中筛选出最终目的地址集合&#xff0c;再通过负载均衡策略…

传统 Web 框架部署与迁移

与其说 Serverless 架构是一个新的概念&#xff0c;不如说它是一种全新的思路&#xff0c;一种新的编程范式。 但是原生的 Serverless 开发框架却非常少。以 Web 框架为例&#xff0c;目前主流的 Web 框架“均不支持 Serverless 模式部署”&#xff0c;因此我们一方面要尝试接…

三款“非主流”日志查询分析产品初探

前言 近些年在开源领域&#xff0c;用于构建日志系统的软件有两类典型&#xff1a; Elasticsearch&#xff1a;基于 Lucene 构建倒排索引提供搜索功能&#xff0c;DocValue 存储支持了其统计分析能力。Clickhouse&#xff1a;列式存储是其优秀 OLAP 性能的保障。 这里把上述系…

CIPU落地专有云:是“小众需求”还是“机会之门”?

引言&#xff1a;2022年11月&#xff0c;云栖大会主论坛&#xff0c;阿里巴巴集团副总裁、阿里云智能基础产品事业部负责人蒋江伟分享了阿里云专有云的一项新进展 —— CIPU落地飞天企业版。在分析师峰会上&#xff0c;阿里巴巴集团研究员、阿里云专有云总经理刘国华也向分析师…