自适应Simpson积分
自适应Simpson积分
作用
如标题所示,这玩意就是当你不会微积分的时候来求积分的。
总所周知,积分的定义就是函数的某一段与坐标轴之间的面积。
那么,自适应Simpson积分就是一种可以再某些精度下计算出较为平滑的函数的积分的比较简单优美的算法。
(PS:这玩意的时间复杂度?大概是O(玄学)吧)
引子
积分的定义是面积,那么我们可以通过最基本的切割法来求出一定精度下面积。
(ps:就是0.0000……01那样扫过去,把这个当做宽,把函数值当做高,然后乘起来当做面积)
然而这个耗费的时间太多,而且精度也不如人意,所以就出现了Simpson积分。
正文
依旧是总所周知,一条二次函数曲线由三个点确定,那么也意味着,我们确定三个点可以确定一条二次函数曲线。
还是总所周知,二次函数的积分是好求的,也就是牛顿科特斯的公式中n=2的情况。那么我们就可以通过二分取点来吧当前区间的积分拟成一个二次函数的积分。
来写份伪代码可能会清楚一点
double get(double l,double r){
mid=(l+r)/2;
return (横坐标为l,r,mid,纵坐标为他们在要积分的函数上的值)穿过这三个点的二次函数在l到r之间的积分。这一步具体可以表现为(r-l)(f(l)+f(r)+4*f(mid))/6(这个公式据说用导数求很方便,在这里会用就好,我也并不会证明(我太弱啦))
}
double Simpson(double l,double r){
double mid=(l+r)/2;
s1=get(l,mid)+get(mid,r);
s2=get(l,r);
if(abs(s1-s2)<eps(这玩意是精度误差))return s2;
return Simpson(l,mid)+Simpson(mid,r);
}
如代码所示,自适应Simpson积分就是不停地二分区间,然后把每一段函数看成两段二次函数,然后积分,再中间取点,若这个与继续分下去的差小于精度误差,那么这个区间再分下去也不会对答案的精度范围造成什么影响,那么就直接返回这一段区间的值。
然而据大佬yww讲,这玩意是假的自适应Simpson积分,因为没有精度保障,他的都是把eps也二分传下去。这样做确实能有精度保障(然而在bzoj的某道题目,yww的真丶自适应积分爆炸了,假的自适应积分过了),所以我还是写假的自适应Simpson积分吧。
某些注意事项
有许多根本积不了分的函数也照样可以被自适应Simpson积分摁在地上日,原因很显然,就是这玩意就一逼近算法,没太多数学上的限制。当然,越平滑的函数用Simpson积分所造成的误差会越小,如果有什么七次函数八次函数什么的倒是也可以用,不过效果怎么样就不知道了。
自适应Simpson积分的更多相关文章
- 【bzoj1502】[NOI2005]月下柠檬树 自适应Simpson积分
题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在月 ...
- HDU 1724 Ellipse 【自适应Simpson积分】
Ellipse Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- CSU 1806 Toll 自适应simpson积分+最短路
分析:根据这个题学了一发自适应simpson积分(原来积分还可以这么求),然后就是套模板了 学习自适应simpson积分:http://blog.csdn.net/greatwall1995/arti ...
- 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1017 Solved: 562[Submit][Status] ...
- HDU 1724 Ellipse 自适应simpson积分
simpson公式是用于积分求解的比较简单的方法(有模板都简单…… 下面是simpson公式(很明显 这个公式的证明我并不会…… (盗图…… 因为一段函数基本不可能很规则 所以我们要用自适应积分的方法 ...
- bzoj 2178 自适应Simpson积分
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...
- 【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
[BZOJ1502][NOI2005]月下柠檬树 Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树 ...
- [BZOJ1502]月下柠檬树(自适应辛普森积分)
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1387 Solved: 739[Submit][Status] ...
- HDU 1724 Ellipse (自适应辛普森积分)
题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...
随机推荐
- PGI Compiler for OpenACC Output Syntax Highlighting
PGI Compiler for OpenACC Output Syntax Highlighting When use the PGI compiler to compile codes with ...
- 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型
今天有时间了,继续<编写高质量代码改善程序的157个建议>的阅读,当我阅读到建议87的时候,里面的一些代码示例和文中所说的不一致了,是不是我现在用的是NetFramework 4.0的缘故 ...
- 在使用<script>嵌入JavaScript代码时,不要在代码中的任何地方出现"</script>"字符串
在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串.例如浏览器执行下面代码会报错: <s ...
- 原生ajax封装,数据初始化,
var ajaxTool = { setting : { method : 'get', url : location.href, data : '', callback : function(){a ...
- 角点检测和匹配——Harris算子
一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...
- 实现一个栈类,类似STL中的栈
1.思路讲解 stack集合类是一个简单的堆栈的实现. 这里有两个模板参数,T和size,T用于指定堆栈中的元素类型,my_size用于表示堆栈中项数的最大值. 类中添加方法isempty.isful ...
- TCP常见的定时器三次握手与四次挥手
1.TCP常见的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有七种定时器: 建立连接定时器(connecti ...
- ServerSocket与Socket类
ServerSocket与Socket类 TCP套接字协议: TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢.使用TCP进行连接的时候会有三次握手,之后才建立起 ...
- 一步一步学Vue(三)
接上篇,有同事看了我写的博客,觉得我这人不靠谱,文笔太白了,不够严肃,所以这次我一定要做一个严肃的人,写博客要有写博客的态度,第三篇开始我在考虑一个问题,会不会太着急了,要知道Vue的组件化时它的一个 ...
- Android - 读取XML文件中的数据
读取XML中存储的数据.将xmlfile.xml存放在assets文件夹中.在activity_main.xml中创建一个textview,用来显示读取到的数据. XML文件内容如下:xmlfile. ...