码迷,mamicode.com
首页 > 其他好文 > 详细

辛普森积分

时间:2018-07-20 00:22:43      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:math   show   ref   eps   hdu   \n   计算几何   计算   can   

引例

计算积分:\[\int_{L}^{R} \frac{cx+d}{ax+b} dx\]

题解

其实可以直接求导然后做,然而太弱根本推不出来.

于是就可以使用自适应辛普森积分。

辛普森(Simpson)公式是牛顿-科特斯公式当n=2时的情形。

\[\int_{L}^{R} f(x) dx\approx\frac{(R-L)[f(L)+f(R)+4f(mid)]}{6}\],其中\(mid = \frac{L+R}{2}\)

这样每次求一个区间的积分,先求左右两段积分,如果不满足精度就递归下去,满足就直接返回.

本题代码:

#include <cstdio>
#include <cmath>

const double EPS = 1e-11;

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

double F(double x) {
    return (c * x + d) / (a * x + b);
}

double Simpson(double a, double b) {
    double c = (a + b) / 2;
    return (b - a) * (F(a) + F(b) + 4 * (F(c))) / 6;
}

double integral(double L, double R) {
    double mid = (L + R) / 2;
    double S = Simpson(L, R), Sl = Simpson(L, mid), Sr = Simpson(mid, R);
    if(fabs(Sl + Sr - S) < EPS) return Sl + Sr;
    return integral(L, mid) + integral(mid, R);
}

int main() {
    scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &L, &R);
    printf("%.6f\n", integral(L, R));
    return 0;
}

练习

HDU 1724 求椭圆部分面积

辛普森还可以骗一些计算几何题的分.

辛普森积分

标签:math   show   ref   eps   hdu   \n   计算几何   计算   can   

原文地址:https://www.cnblogs.com/cute-hzy/p/9339018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!