利用Romberg求积算法计算积分$\int_2^5 \frac{10}{x^2}sin\frac{10}{x}dx$,使误差不超过$10^{-4}$.
- 设n代表等分的区间个数,且$n=2^{k}$,$h=\frac{b-a}{n}$,$h_k=\frac{b-a}{2^k}$下标$0$代表梯形积分公式,利用梯形算法得到如下递推公式:
$$T_0^{0}=\frac{b-a}{2}[f(a)+f(b)]$$ $$T_0^{k}=\frac{1}{2}T_0(k-1)+h_k\sum_{j=0}^{2^{k-1}-1}f(a+(2j+1)h_k)$$ - 根据计算出的$T_0^k$可以依次计算出对应的Simpson公式、Cptes公式和Romberg公式:
$$T_1^{k-1}=\frac{1}{3}[4T_0(k)-T_0(k-1)]$$ $$T_2^{k-1}=\frac{1}{15}[16T_1(k)-T_1(k-1)]$$ $$T_3^{k-1}=\frac{1}{63}[64T_2(k)-T_2(k-1)]$$ $$k=1,2,3......$$ - 计算过程如下:
$$T_0(0),T_0(1),T_1(0),T_0(2),T_1(1),T2(0),T_0(3),T_1(2),T_2(1),T_3(0)$$
逐次分半加速法:
- 设置待积分函数,积分上下限$[a,b]$,精度要求;
- 计算出$T_0(0)$;
- 将区间$[a,b]$分半,计算出$T_0(1),T_1(0)$;
- 将区间再分半,计算出$T_0(2),T_1(1),T2(0)$;
- 将区间再分半,计算出$T_0(3),T_1(2),T_2(1),T_3(0)$;
- 将区间在分半,重复第5步工作,计算出$T_0(4),T_1(3),T_2(2),T_3(1)$
- 计算$\frac{T_3(1)-T_3(0)}{3}$精度是否满足给定的精度要求,满足返回打印T表,不满足重复步骤6-7.
python romberg.py