微积分数值计算(01):简单的微积分方法
本节给出一些相当trivial的微积分的数值计算方法.
数值微分
差分法
从定义出发即可, 与数学不同的是, 我们无法做到计算"无穷小", 它压根不是个数, 只能尽量给出较小的差分长度: \[ f'(x)\approx\frac{f(x+h)-f(x)}{h} \] 对\(f(x)\)作展开, 即\(f(x+h)=f(x)+c_1h+c_2h^2+\cdots\), 得到 \[ f'(x)\approx c_1+c_2h+o(h) \] 这给出\(\sim h\)的误差. 不难想到一个改进方案 \[ f'(x)\approx\frac{f(x+h)-f(x-h)}{2h} \] 同样代入展开式, 得到 \[ f'(x)\approx c_1+c_3h^2+o(h^2) \] 它给出\(\sim h^2\)的误差.
基函数法
当然还有相对复杂的计算方法, 比如, 如果已经有\(f(x)\)的 Chebyshev 展开 \[ f(x)\approx\sum_{k=0}^Nc_kT_k(x) \] 那么它的导数可以表示为 \[ f'(x)\approx\sum_{k=0}^Nc_k'T_k(x) \] 其中, \(c_{k-1}'=c_{k+1}'+2kc_k\), 并且\(c_{N}'=c_{N-1}'=0\).
数值积分的 Newton-Cortes 方法
微元法
微元法实际上不是这里的 Newton - Cortes 方法, 它只是从定积分定义出发的方案. 考虑一个函数\(f(x)\)在闭区间\([a,b]\)上可积, 它的定积分为 \[ \int_a^bf(x)dx=\lim_{\lambda\to0^+}\sum_{l=1}^Nf(\xi_l)\Delta x_l \] 其中将区间\([a,b]\)分割为\(N\)个子区间\((x_{l-1},x_l)\ ,\ l=1,2,\cdots,N\), \(\Delta x_l=x_l-x_{l-1}\), \(\xi_l\in(x_{l-1},x_l)\). 而\(\lambda\)则是最大的区间长度, 即 \[ \lambda=\max\{\Delta x_1,\Delta x_2,\cdots,\Delta x_N\} \] 和差分法类似, 我们实现不了\(\lambda\to0^+(N\to\infty)\)的无穷细致, 那就足够细致. 取分割方案为\(N\)等分, 即 \[ x_k=a+\frac{b-a}{N}\times k \newline \Delta x_l=\lambda=\frac{b-a}{N} \] 并对每一个区间使用梯形法则, 得到 \[ \int_a^bf(x)dx\approx\frac{b-a}{N}\times(\frac{f(x_0)}{2}+\sum_{j=1}^{N-1}f(x_j)+\frac{f(x_N)}{2}) \]
Newton-Cortes 方法
这个方法同样是具有上述样本点\((x_k,f(x_k))\ ,\ k=0,1,\cdots,N\). 不同的是, 我们先进行 Lagrange 插值 \[ P_N(x)=\sum_{k=0}^Nf(x_k)L_k(x) \] 用插值函数的定积分近似替代真实定积分, 有 \[ \int_a^bf(x)dx=\sum_{k=0}^Nf(x_k)\int_a^bL_k(x)dx \] 其中 \[ L_k(x)=\prod_{m\ne k}\frac{x-x_m}{x_k-x_m}=\Lambda_k(t)=\prod_{m\ne k}\frac{t-m}{k-m}\ ,\ t=\frac{x-a}{b-a}\times N \] 于是得到著名的 Newton-Cortes 公式: \[ \boxed{\int_a^bf(x)dx\approx\frac{b-a}{N}\sum_{k=0}^N\alpha_kf(x_k)} \] 其中 \[ \alpha_k=\int_0^N\prod_{m\ne k}^{0\sim N}\frac{t-m}{k-m}dt \]
Newton-Cortes 方法的应用
我们给出一些常用的公式:
\(N=1\), 梯形法则 \[ I=\displaystyle\frac{b-a}{2}[f(x_0)+f(x_1)] \]
\(N=2\), Simpson 公式 \[ I=\displaystyle\frac{b-a}{6}[f(x_0)+4f(x_1)+f(x_2)] \]
\(N=3\), \(\displaystyle\frac{3}{8}\)规则 \[ I=\displaystyle\frac{b-a}{8}[f(x_0)+3f(x_1)+3f(x_2)+f(x_3)] \]
\(N=4\), Milne 规则 \[ I=\displaystyle\frac{b-a}{90}[7f(x_0)+32f(x_1)+12f(x_2)+32f(x_3)+7f(x_4)] \]
\(N=6\), Weddle 规则 \[ I=\displaystyle\frac{b-a}{840}[41f(x_0)+216f(x_1)+27f(x_2)+272f(x_3)+27f(x_4)+216f(x_5)+41f(x_6)] \]
\(N>6\)由于正负相消, 不太有效, 此处不表.
需要注意的是, 这些公式并不代表我们真的只进行\(N\)次分割. 例如Simpson公式, 绝不意味着我们只对\([a,b]\)进行一次分割, 完全可以先细致地分为多个子区间, 再在每个子区间上单独使用Simpson公式.