//求椭圆与两竖线相交形成的面积
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
double aa,bb,l,r;
double F(double x)
{
return sqrt(bb*bb-x*x*bb*bb/(aa*aa));//F(x)的公式
}
double Simpson(double a,double b)
{
double c=a+(b-a)/2;
return (F(a)+4*F(c)+F(b))*(b-a)/6;
}
double Asr(double a,double b,double eps,double A)
{
double c=a+(b-a)/2;
double L=Simpson(a,c),R=Simpson(c,b);
if(fabs(L+R-A)<=15*eps) return L+R+(L+R-A)/15;
return Asr(a,c,eps/2,L)+Asr(c,b,eps/2,R);
}
double Asr(double a,double b,double eps)
{
return Asr(a,b,eps,Simpson(a,b));
}
int main()
{
aa=2,bb=1,l=-2,r=2;
printf("%.3f\n",Asr(l,r,1e-6)*2);
}
自适应辛普森模板
最新推荐文章于 2021-03-30 10:02:23 发布