自适应Simpson

Simpson是什么呢?

就是如果我们要求一个积分,但是里面的f(x)十分麻烦,于是我们就需要用Simpson的抛物线来近似最后的答案。

加一个自适应就是适应精度,当精度很小的时候,就直接返回。

Simpson公式:

例题:Simpson例题


AC代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
//#define int long long
using namespace std;
double a,b,c,d,L,R;
inline double f(double x){return (c*x+d)/(a*x+b);}
inline double simpson(double l,double r){
	return (f(l)+4*f((l+r)/2)+f(r))*(r-l)/6.0;
}
double solve(double l,double r,double eps,double res){
	double mid=(l+r)/2,ls=simpson(l,mid),rs=simpson(mid,r);
	if(fabs(ls+rs-res)<=eps)	return res;
	return solve(l,mid,eps/2,ls)+solve(mid,r,eps/2,rs);
}
double res(double l,double r,double eps){
	return solve(l,r,eps,simpson(l,r));
}
signed main(){
	cin>>a>>b>>c>>d>>L>>R;
	printf("%.6lf\n",res(L,R,1e-7));
	return 0;
}
全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务