Simpson 公式
Simpson 公式將 \((l,f(l)),(r,f(r)),(\frac{l+r}{2},f(\frac{l+r}{2}))\) 看作一個拋物線,求得近似解
具體過程如下:
令 \(g(x)=ax^2+bx+c\) 過 \((l,f(l)),(r,f(r)),(\frac{l+r}{2},f(\frac{l+r}{2}))\) 三點
積分求得
那麼有
對於一個拋物線能取到等號,而將 \(f(x)\) 在區間 \([l,r]\) 的端點和中點近似看作一個拋物線,就能取到一個近似值
double f(double x) { return ...; }
double simpson(double x) { return (r-l)*(f(l)+4*f((l+r)/2)+f(r))/6; }
自適應辛普森法
求出對區間 \([l,r]\) 使用 Simpson 公式的結果,再求出對區間 \([l,mid]\) 和 \([mid,r]\) 使用的結果之和,若兩者誤差在精度要求範圍內,就直接返回結果,否則遞歸求解兩個子區間
double asr(double l,double r,double ans) {
double mid = (l+r)/2,L = simpson(l,mid),R = simpson(mid,r);
if (fabs(L+R-ans) <= eps) return L+R;
return asr(l,mid,L)+asr(mid,r,R);
}