HDU 1724 Ellipse (自适应辛普森积分模板题)

来源:互联网 发布:股东人数 软件 编辑:程序博客网 时间:2024/06/04 18:57

数值计算方法上学到了辛普森积分,但是都是在讲非自适应的,包括实验做的龙贝格方法。ACM上用来求一段图形面积则是用自适应辛普森积分来求。找了一道模板题过过瘾。

选用了kuangbin的模版自适应simpson积分。

代码如下:

#include<bits/stdc++.h>using namespace std;double s, e;double F(double x){     //这里自定义函数    return sqrt((1 - x * x / s / s) * e * e);}double simpson(double a,double b){  //返回区间[a,b]的三点辛普森值    double c = a + (b - a) / 2.0;    return (F(a) + 4 * F(c) + F(b)) * (b - a) / 6.0;}double asr(double a,double b,double eps,double A){  //自适应辛普森递归过程    double c = a + (b - a) / 2.0;                   //A为区间[a,b]的三点辛普森值    double L = simpson(a,c), R = simpson(c,b);    if(fabs(L + R - A) <= 15 * eps) return L + R + (L + R - A) / 15.0;    return asr(a,c,eps/2.0,L) + asr(c,b,eps/2.0,R);}double asr(double a,double b,double eps){   //自适应辛普森主过程    return asr(a,b,eps,simpson(a,b));}int main(){int N;double l, r;cin >> N;while(N--){cin >> s >> e >> l >> r;printf("%.3lf\n", 2.0 * asr(l, r, 1e-6));}return 0;} 


原创粉丝点击