关闭

辛普森积分(自适应辛普森公式求积分)

2014人阅读 评论(3) 收藏 举报
分类:

自适应辛普森公式求积分

第一回接触辛普森积分,至于这个辛普森是干嘛的呢,在这里就有必要好好地讲一讲了。

来源:辛普森(Simpson)公式是牛顿-科特斯公式当n=2时的情形,也称为三点公式。利用区间二等分的三个点来进行积分插值。其科特斯系数分别为1/6,4/6,1/6。

应用:立体几何中用来求拟柱体体积的公式。

这里就不详细说辛普森公式了,有需要的朋友可以看这里https://baike.baidu.com/item/%E8%BE%9B%E6%99%AE%E6%A3%AE%E5%85%AC%E5%BC%8F/9255085?fr=aladdin

接下来我们好好的说说自适应辛普森公式求积分自适应辛普森公式求积分是很重要的一个知识点,弄懂了自适应辛普森公式求积分就能明白辛普森积分是干嘛的了,

下面的内容是重点!!!:

假设我们求以下积分:

这里写图片描述

比较特殊的情况,就是可以推导出来最后的形式。但是比较一般的情况是,我们只能大致得到一个XY坐标系里的曲线,我们求的就是曲线和X轴所围成的面积。

因此我们有自适应辛普森公式,他会根据实际情况来自动的调整精度。

它的大致过程就是,给定一个要求达到的精度eps,算法就会根据实际情况递归的划分区间。容易近似的地方少划分,不容易近似的地方多划分几份。

具体来讲,我们在以下情况下直接返回结果,否则递归划分区间:

这里写图片描述

具体参考博客:http://blog.csdn.net/frosero/article/details/45799135

下面举个例题:hdu-1724

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1724

题目大意:题目就是求两条线所夹的椭圆的面积。这是个标准的椭圆,其中心在原点。我好像看到了题目连椭圆面积公式都给了,然而并没有任何用,直接上辛普森!

根据椭圆的对称性,我们求x轴上方的面积然后乘以2就是答案。根据椭圆方程x2a2+y2b2=1,构造函数y=。。。其中y>0,然后对此函数进行自适应辛普森积分就可以了。

写完程序过了样例后立马交,TLE,1000ms。结果发现是Eps取的太小了,取了1e-10,随着递归下去,Eps不断除以2,导致不断递归划分,做的次数很多就超时了。这题只要求保留3位小数,所以精度没有太大问题,将Eps改为1e-5立马就AC了,109ms。

ac代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#define ri(n) scanf("%d",&n)
#define oi(n) printf("%d\n",n)
#define rl(n) scanf("%lld",&n)
#define ol(n) printf("%lld\n",n)
#define rep(i,l,r) for(i=l;i<=r;i++)
#define rep1(i,l,r) for(i=l;i<r;i++)
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double eps=1e-5;//这里的eps是整个辛普森应用的关键,至于取多大,得依题目而定
double a,b,l,r;
double f(double x)//这里的f函数是自己根据题目推导出来的,主要还是x有关y的函数
{
    double y=b*sqrt(1.0-(x*x)/(a*a));
    return y;
}
double simpson(double a,double b)//这里是辛普森公式
{
    double c=(a+b)/2.0;
    return (f(a)+f(b)+4.0*f(c))*(b-a)/6.0;
}
double ars(double a,double b,double eps)//这里就是递归求辛普森最重要的一段函数了,
{
    double c=(a+b)/2.0;
    double mid=simpson(a,b),l=simpson(a,c),r=simpson(c,b);
    if(fabs(l+r-mid)<=15*eps)
        return l+r+(l+r-mid)/15.0;
    return ars(a,c,eps/2.0)+ars(c,b,eps/2.0);
}
int main()
{
    int t;
    ri(t);
    while(t--)
    {
        scanf("%lf%lf%lf%lf",&a,&b,&l,&r);
        printf("%.3lf\n",2.0*ars(l,r,eps));//递归求辛普森
    }
    return 0;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

数值问题专题小结:自适应辛普森算法求定积分

三点辛普森公式 该公式要求f(x)必须是一个全局函数,用它可以近似的来求解一个定积分,但精度不够高。因此衍生出一个重要的“变种”,称为“自适应辛普森法”。 自适应辛普森法 (1)概述:自...
  • u014800748
  • u014800748
  • 2015-03-17 16:41
  • 3440

Two Cylinders (辛普森公式处理积分)

Two Cylinders (辛普森公式处理积分):http://acm.hust.edu.cn/vjudge/contest/view.action?cid=120113#problem/I   传...
  • PNAN222
  • PNAN222
  • 2016-06-26 18:23
  • 1636

【数值分析】复化积分公式

对于积分: 只要找到被积公式的原函数F(x),利用牛顿莱普利兹公式有: 但是,实际使用这种求积分的方法往往是有困难的,因为大量的被积函数的原函数是不能用初等函数表示的;另外,当f(x)是由测...
  • tengweitw
  • tengweitw
  • 2015-02-02 11:00
  • 4238

La3485 利用自适应辛普森公式 求积分的和

#include #include #include #include #include #include #include #define maxn 10005 #define INF 0xffff...
  • qq415200973
  • qq415200973
  • 2013-08-23 13:57
  • 1308

自适应辛普森公式求积分

辛普森公式求积分假设我们求一下积分: ∫baf(x)dx\int_{a}^b f(x) dx 比较特殊的情况,就是可以推导出来最后的形式。但是比较一般的情况是,我们只能大致得到一个XYXY坐标系...
  • Frosero
  • Frosero
  • 2015-05-17 22:46
  • 2386

自适应辛普森(近似求积分模板)

1261: 地狱飞龙 时间限制: 1 秒 内存限制: 64 MB 提交: 255 解决: 54 提交 状态 题目描述 最近clover迷上了皇室战争,他抽到了一种地狱飞龙,很开心。假设...
  • xiaosshhaa
  • xiaosshhaa
  • 2017-04-26 13:58
  • 355

数值积分-自适应辛普森法

自适应辛普森法模板题 UVAlive3485;
  • zyjhtutu
  • zyjhtutu
  • 2014-07-31 13:39
  • 591

Acdream 1234 Two Cylinders(自适应辛普森积分法)

传送门 Two Cylinders Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB...
  • qingshui23
  • qingshui23
  • 2016-06-26 19:11
  • 1789

HDU1724[辛普森公式求积分]Ellipse

Description Math is important!! Many students failed in 2+2’s mathematical test, so let's AC this...
  • YJEthan
  • YJEthan
  • 2017-08-05 09:30
  • 231

UVALive-3485 Bridge(二分答案+自适应辛普森积分)

前言本题是我在《训练指南》上发现的一道有趣的题目,有两种做法,一种是直接运用数学方法求积分,对这题而言较为繁琐;另一种则是运用自适应辛普森积分算法,简洁地求解此题。《训练指南》一书中还有很多比较好的题...
  • Ab_Ever
  • Ab_Ever
  • 2017-08-03 09:02
  • 218
    个人资料
    • 访问:12273次
    • 积分:868
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条