数值积分,自适应辛普森算法
#include<bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define fastIO ios::sync_with_stdio(false);cin.tie(0);
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const double EPS = 1e-8;
const int maxn = 1e3+2000;
const int inf = 1 << 28;
double f(double x){
return cos(x);
}
/*
自适应辛普森算法
被积函数f(x) 积分区间[a,b]
n区间划分数,积分精度
*/
template<class T>
double simpson(const T&f,double a,double b,int n){
const double h = (b-a)/n;
double ans = f(a)+f(b);
for(int i=1;i<n;i+=2)ans+=4*f(a+i*h);
for(int i=2;i<n;i+=2)ans+=2*f(a+i*h);
return ans*h/3;
}
int main(){
double pi = acos(-1.0);
cout<<pi<<endl;
printf("%lf\n",simpson(f,0,pi/2,10));
return 0;
}