【自適應辛普森】積分計算

Simpson 公式

\[\int_l^rf(x)dx\approx \frac{r-l}{6}[f(l)+4f(\frac{l+r}{2})+f(r)] \]

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}))\) 三點
積分求得

\[G(x)=\int_0^xg(x)dx= \frac{1}{3}ax^3+\frac{1}{2}bx^2+cx+d \]

那麼有

\[\begin{eqnarray*} &&\ \ \ \ \int_l^rg(x)dx=G(r)-G(l)\\ && = \frac{1}{3}a(r^3-l^3)+\frac{1}{2}b(r^2-l^2)+c(r-l)\\ && = \frac{r-l}{6}[2a(l^2+l\cdot r+r^2)+3b(l+r)+6c]\\ && = \frac{r-l}{6}\{(a\cdot l^2+b\cdot l+c)+(a\cdot r^2+b\cdot r+c)+4[a(\frac{l+r}{2})^2+b(\frac{l+r}{2})+c]\}\\ && = \frac{r-l}{6}[g(l)+4g(\frac{l+r}{2})+g(r)] \end{eqnarray*}\]

對於一個拋物線能取到等號,而將 \(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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章