辛普森积分
建议对微积分有一些了解QAQ
求定积分近似值:
- 矩形法
- 梯形法
- 抛物线法,又称辛普森法
抛物线法原理是将曲线 (y=f(x)) 上的两个弧 (widehat{A_{i-1}A_i}) 与 (widehat{A_iA_{i+1}}) 用 过(A_{i-1},A_i,A_{i+1}) 的抛物线 (y=ax^2+bx+c) 代替。
辛普森公式 (int_a^bf(x)dxapproxfrac{(b-a)(f(a)+f(b)+4f(frac{a+b}{2}))}{6})
(int_a^bf(x)dx)
(approxint_a^bAx^2+Bx+C)
(=frac{A}{3}(b^3-a^3)+frac{B}{2}(b^2-a^2)+C(a-b))
(=frac{(b-a)}{6}(2A(b^2+ab+a^2)+3B(b+a)+6C))
(=frac{(b-a)}{6}(Aa^2+Ba+C+Ab^2+Bb+C+4A(frac{a+b}{2})^2+4B(frac{a+b}{2})+4C))
(=frac{(b-a)}{6}(f(a)+f(b)+4f(frac{a+b}{2})))
然后就得到了 辛普森公式 (int_a^bf(x)dxapproxfrac{(b-a)(f(a)+f(b)+4f(frac{a+b}{2}))}{6})
但是如果我们直接套式子,or 控制区间长度进行分治,精度会有问题。所以有了 (downarrow)
自适应辛普森法
想一想,发现如果我们单纯的向下分治,在曲线上十分平坦的部分就会浪费时间,但是在曲线变化陡峭的部分又无法保证精度。
自适应辛普森法的思路:如果在当前区间计算积分时,继续分治与不继续分治的计算结果差别不大,那就没必要继续了;否则就继续分治。
inline double f(double x) {}
inline double simpson(double l,double r)
{return (f(l)+4*f((l+r)/2)+f(r))*(r-l)/6;}
inline double integral(double l,double r,double ans) {
register double md=(l+r)/2;
register double LL=simpson(l,md),RR=simpson(md,r);
if(fabs(LL+RR-ans)<=15*eps) return LL+RR-(LL+RR-ans)/15;
return integral(l,md,LL)+integral(md,r,RR);
}
integral(l,r,simpson(l,r));
模板(雾我只会模板
2019.12.23