自适应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;
}