P4525 【模板】自适应辛普森法 1

\(\text{Solution}\)

题目

\(\text{Simpson}\) 公式:

\[\int_l^r f(x) {\mathrm d}x = \frac{(r-l)(f(l)+f(r)+4f(\frac{l+r}2))} 6 \]

然后就是自适应的过程

\(\text{Code}\)

#include <cstdio>
#include <cmath>
#define IN inline
using namespace std;

double a, b, c, d, L, R;

IN double F(double x) {return (c * x + d) / (a * x + b);}
IN double Simpson(double l, double r) {return (r - l) * (F(l) + F(r) + F((l + r) / 2) * 4) / 6;}
IN double ASR(double l, double r, double eps, double ans) {
	double mid = (l + r) / 2, sl = Simpson(l, mid), sr = Simpson(mid, r);
	if (fabs(sl + sr - ans) < eps) return sl + sr;
	return ASR(l, mid, eps / 2, sl) + ASR(mid, r, eps / 2, sr);
}

int main() {
	scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &L, &R);
	printf("%.6lf\n", ASR(L, R, 1e-7, Simpson(L, R)));
}
posted @ 2022-07-13 22:08  leiyuanze  阅读(37)  评论(0编辑  收藏  举报