首页 > 其他分享 >3074. 自适应辛普森积分

3074. 自适应辛普森积分

时间:2022-11-23 19:33:07浏览次数:67  
标签:return 积分 mid 辛普森 3074 double define

题目链接

3074. 自适应辛普森积分

给定两个整数 \(a,b\),请计算如下积分:

\(\int_a^b \frac{Sin(x)}{x}dx\)

输入格式

共一行,包含两个实数 \(a,b\)。

输出格式

输出一个实数,表示结果。

结果保留 \(6\) 位小数。

数据范围

\(1 \le a < b \le 100\)

输入样例:

1.0 2.0

输出样例:

0.659330

解题思路

自适应辛普森积分

辛普森积分主要用来求解任意一个连续函数在一段区间的积分(面积),类似于微积分的定义,即将区间分为很多微小的小段,将区间的高假定为某个值,然后用矩形的面积取代该段不规则的形状的面积,而辛普森积分则是用一个二次函数近似小段的曲线,其用到一个求解一次二次函数某个区间 \([l,r]\) 的面积公式:\(S=(r-l)\times \frac{f(l)+4\times f(mid)+f(r)}{6}\)

而自适应辛普森积分则是先用面积公式求出 \([l,r]\) 内的面积 \(S\),再分别求出左、右半边的面积 \(S_l,S_r\),然后拿 \(S\) 和 \(S_l+S_r\) 进行比较,如果其误差在允许的范围内说明该值可取,否则递归处理左右半边

自适应辛普森积分主要处理一些精度要求不高的问题,而且要求函数低阶

  • 时间复杂度:\((玄学)\)

代码

// Problem: 自适应辛普森积分
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/3077/
// Memory Limit: 64 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

// %%%Skyqwq
#include <bits/stdc++.h>
 
//#define int long long
#define help {cin.tie(NULL); cout.tie(NULL);}
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
using namespace std;
 
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
 
template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; }
template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; }
 
template <typename T> void inline read(T &x) {
    int f = 1; x = 0; char s = getchar();
    while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); }
    while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
    x *= f;
}

const double eps=1e-12;
double l,r;
double f(double x)
{
	return sin(x)/x;
}
double simpson(double l,double r)
{
	double mid=(l+r)/2;
	return (f(l)+f(mid)*4+f(r))/6*(r-l);
}
double asr(double l,double r,double s)
{
	double mid=(l+r)/2;
	double L=simpson(l,mid),R=simpson(mid,r);
	if(fabs(s-L-R)<eps)return L+R;
	return asr(l,mid,L)+asr(mid,r,R);
}
int main()
{
    scanf("%lf%lf",&l,&r);
    printf("%.6lf",asr(l,r,simpson(l,r)));
    return 0;
}

标签:return,积分,mid,辛普森,3074,double,define
From: https://www.cnblogs.com/zyyun/p/16919555.html

相关文章

  • 超市积分管理系统
    超市积分管理系统链接:https://pan.baidu.com/s/143X1AEynKvs0vlDT6uNdfg?pwd=0011提取码:0011超市会员积分管理系统主要用于实现了企业管理数据统计等。本系统结构如下:(1)......
  • 有关 Gauss 积分的一些证明和理解
    引言:总所周知,积分是一个比较需要启发式技巧的过程,这些技巧在某些情况下在我看来无关分析,甚至不是特别关乎组合和代数运算,主要关乎人类智慧(所以有些奇怪的积分技巧会......
  • 【洛谷 P4525】 【模板】自适应辛普森法 1
    自适应辛普森法,用于求定积分。原理是不断二分区间直到区间的积分和二次函数的积分拟合程度足够高,然后用二次函数的积分值来代替原积分值。#include<bits/stdc++.h>#def......
  • 微积分的一些重要公式/极限/求导过程
    一些约定:本文使用弧度制,即\(\pi=180^{°}\)。对于上图,我们讨论\(\alpha\)时,称\(AB\)为\(a\),\(BC\)为\(b\),\(AC\)为\(c\)。即邻边为\(a\),对边为\(b\),斜边为......
  • 自适应辛普森法
    积分积分是微积分学与数学分析里的一个核心概念。通常分为定积分和不定积分两种。定积分简单地说,若函数\(f(x)\)在区间\([l,r]\)上是连续的,其图像与\(x\)轴围成的......
  • 拓端tecdat|R语言可视化渐近正态性、收敛性:大数定律、中心极限定理、经验累积分布函数
    在我们的数理统计课程中,已经看到了大数定律(这在概率课程中已经被证明),证明 给出一组i.i.d.随机变量  ,其中有为了直观地看到这种收敛性,我们可以使用 >for(iin1:20)B[,i......
  • 不定积分(待续……)
    不定积分与“积分”并没有关系,它只是基于导数定义出来的“求导的逆运算”。从某种意义上,它没有涉及任何新的理论,只是通过导数的运算法则推出的一些逆运算的运算技巧。定义......
  • 累积分布函数CDF
    累积分布函数/分布函数:是概率密度函数的积分,能完整描述一个实随机变量X的概率分布。一般以大写“CDF”(CumulativeDistributionFunction)标记。定义:对于所有实数,累积分......
  • Matlab--多项式创建、计算、积分和微分
    分享一下在MATLAB中的多项式相关运算。表示多项式MATLAB将多项式表示为行向量,其中包含按降幂排序的系数。例如,三元素向量p=[p2p1p0];表示多项式p(x)=p2x2+p1x+p0.创建......
  • BZOJ 1502([NOI2005]月下柠檬树-Simpson积分)
    1502:[NOI2005]月下柠檬树TimeLimit: 5Sec  MemoryLimit: 64MBSubmit: 250  Solved: 148[​​Submit​​][​​Status​​][​​Discuss​​]Descr......