跳到主要内容

积分

参考资料

辛普森积分法

abf(x)dxba6[f(a)+4f(a+b2)+f(b)]\int_a^b f(x)\mathrm{d}x\approx\frac{b-a}{6}\left[f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right]

辛普森法用一段二次抛物线拟合被积函数,得到上面的近似式。自适应辛普森 递归地把区间二分:当左右两半的辛普森值之和与整段足够接近时停止,否则继续细分,从而在保证精度的同时控制计算量。下面的 f 为被积函数,调用 asr(l,r,eps,simpson(l,r)) 即得 [l,r][l,r] 上的积分。

318 Bcpp
double simpson(double l,double r)
{
double mid=(l+r)/2;
return (r-l)*(f(l)+4*f(mid)+f(r))/6;
}
double asr(double l,double r,double eps,double s)
{
double mid=(l+r)/2;
double sl=simpson(l,mid),sr=simpson(mid,r);
if(fabs(sl+sr-s)<=15*eps)return sl+sr+(sl+sr-s)/15;
return asr(l,mid,eps/2,sl)+asr(mid,r,eps/2,sr);
}

例题

试计算积分:

LRcx+dax+bdx\displaystyle{\int_L^R\frac{cx+d}{ax+b}\mathrm{d}x}

结果保留至小数点后 66 位。

给定实数 aa,计算积分 0xaxxdx\displaystyle{\int_0^\infty x^{\frac{a}{x}-x}\mathrm{d}x}。若积分发散,请输出 orz。(a50|a|\le 50