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;
}