对应《具体数学》第 2 章 §2.7"无限和式"(书页 47---51)。本专栏沿用 2.1.1---2.1.7 的编号。本篇集中回答一个问题:有限和式中熟悉的操作,到了无限和式里还可以照做吗?
有限和式的换元、分组、换序,本质上是在重新安排有限个加数。无限和式还多了一道关口:必须说明"所有项加起来"是什么意思,并检查所用操作是否保留这个意义。
1. 先从部分和出发
对已经排好顺序的数列 a 0 , a 1 , ... a_0,a_1,\ldots a0,a1,...,通常把级数定义为部分和的极限:
∑ k = 0 ∞ a k = lim N → ∞ S N , S N = ∑ k = 0 N a k . \sum_{k=0}^{\infty}a_k =\lim_{N\to\infty}S_N, \qquad S_N=\sum_{k=0}^{N}a_k. k=0∑∞ak=N→∞limSN,SN=k=0∑Nak.
有限的每个 S N S_N SN 都有意义,并不保证右边存在有限极限。
例如,设想对 1 + 2 + 4 + ⋯ 1+2+4+\cdots 1+2+4+⋯ 写下 S = 1 + 2 S S=1+2S S=1+2S,然后得到 S = − 1 S=-1 S=−1。问题出在第一步就把发散的级数当成了普通实数。实际部分和为 2 N + 1 − 1 2^{N+1}-1 2N+1−1,随 N N N 增大而趋于正无穷。
可靠的做法是先写有限恒等式,再取极限。 比如 q ≠ 1 q\ne1 q=1 时,
∑ k = 0 N q k = 1 − q N + 1 1 − q . \sum_{k=0}^{N}q^k=\frac{1-q^{N+1}}{1-q}. k=0∑Nqk=1−q1−qN+1.
只有在 ∣ q ∣ < 1 |q|<1 ∣q∣<1 时, q N + 1 → 0 q^{N+1}\to0 qN+1→0,才能由此得到
∑ k = 0 ∞ q k = 1 1 − q ( ∣ q ∣ < 1 ) . \boxed{\sum_{k=0}^{\infty}q^k=\frac1{1-q}\qquad(|q|<1).} k=0∑∞qk=1−q1(∣q∣<1).
条件是公式的一部分。把 q = 2 q=2 q=2 代进右边,并不能给原来的无限级数赋值。
2. 非负项:用有限子集定义总和
书中不仅关心按 0 , 1 , 2 , ... 0,1,2,\ldots 0,1,2,... 排列的级数,还关心索引集合 K K K 上的和 ∑ k ∈ K a k \sum_{k\in K}a_k ∑k∈Kak。
若所有 a k ≥ 0 a_k\ge0 ak≥0,可以定义
∑ k ∈ K a k = sup { ∑ k ∈ F a k : F ⊆ K , F 有限 } . \sum_{k\in K}a_k =\sup\left\{\sum_{k\in F}a_k:F\subseteq K,\ F\text{ 有限}\right\}. k∈K∑ak=sup{k∈F∑ak:F⊆K, F 有限}.
如果这些有限和有统一上界,总和就是它们的最小上界;如果没有,总和记作 + ∞ +\infty +∞。这里不需要先给 K K K 规定一种遍历顺序。
这个定义也解释了为什么非负项比较容易处理:加入新项只能使有限和变大,不会出现正负项相互抵消而依赖次序的问题。对非负二重和,可以交换求和次序,结果允许是 + ∞ +\infty +∞。
但"允许结果为无穷"不等于"无穷可以当普通数字运算"。特别是 ∞ − ∞ \infty-\infty ∞−∞ 没有由此得到定义。
3. 有正有负时,分开检查两部分
对实数项,令
a k + = max ( a k , 0 ) , a k − = max ( − a k , 0 ) . a_k^+=\max(a_k,0),\qquad a_k^-=\max(-a_k,0). ak+=max(ak,0),ak−=max(−ak,0).
于是 a k = a k + − a k − a_k=a_k^+-a_k^- ak=ak+−ak−,而 ∣ a k ∣ = a k + + a k − |a_k|=a_k^++a_k^- ∣ak∣=ak++ak−。设非负项意义下的两个总和为
A + = ∑ k ∈ K a k + , A − = ∑ k ∈ K a k − . A^+=\sum_{k\in K}a_k^+, \qquad A^-=\sum_{k\in K}a_k^-. A+=k∈K∑ak+,A−=k∈K∑ak−.
这时有四种情况:
| A + A^+ A+ | A − A^- A− | 不依赖次序的和 |
|---|---|---|
| 有限 | 有限 | A + − A − A^+-A^- A+−A−,且绝对收敛 |
| + ∞ +\infty +∞ | 有限 | + ∞ +\infty +∞ |
| 有限 | + ∞ +\infty +∞ | − ∞ -\infty −∞ |
| + ∞ +\infty +∞ | + ∞ +\infty +∞ | 不能用两者相减定义 |
第一行等价于
∑ k ∈ K ∣ a k ∣ < ∞ . \sum_{k\in K}|a_k|<\infty. k∈K∑∣ak∣<∞.
这就是绝对收敛。在这一条件下,重排、分组,以及对绝对可求和的二重数组交换次序,都不会改变总和。
最后一行需要仔细区分:它不能定义与次序无关的总和,但某种特定排列的部分和仍可能收敛。 这种现象就是下一段的条件收敛。
4. 条件收敛:排列方式真的会改变答案
交错调和级数按原顺序满足
1 − 1 2 + 1 3 − 1 4 + ⋯ = log 2. 1-\frac12+\frac13-\frac14+\cdots=\log2. 1−21+31−41+⋯=log2.
这里 log \log log 表示自然对数。它的绝对值之和是调和级数,因而并不绝对收敛。
现在改为"取两个正项,再取一个负项":
1 + 1 3 − 1 2 + 1 5 + 1 7 − 1 4 + ⋯ . 1+\frac13-\frac12 +\frac15+\frac17-\frac14+\cdots. 1+31−21+51+71−41+⋯.
完成 m m m 组后的部分和为
T m = ∑ j = 1 2 m 1 2 j − 1 − ∑ j = 1 m 1 2 j = H 4 m − 1 2 H 2 m − 1 2 H m = ( H 4 m − H 2 m ) + 1 2 ( H 2 m − H m ) . \begin{aligned} T_m &=\sum_{j=1}^{2m}\frac1{2j-1} -\sum_{j=1}^{m}\frac1{2j}\\ &=H_{4m}-\frac12H_{2m}-\frac12H_m\\ &=(H_{4m}-H_{2m})+\frac12(H_{2m}-H_m). \end{aligned} Tm=j=1∑2m2j−11−j=1∑m2j1=H4m−21H2m−21Hm=(H4m−H2m)+21(H2m−Hm).
而
H 2 m − H m = 1 m ∑ j = 1 m 1 1 + j / m ⟶ ∫ 0 1 d t 1 + t = log 2. H_{2m}-H_m =\frac1m\sum_{j=1}^{m}\frac1{1+j/m} \longrightarrow\int_0^1\frac{dt}{1+t}=\log2. H2m−Hm=m1j=1∑m1+j/m1⟶∫011+tdt=log2.
因此 T m → 3 2 log 2 T_m\to\tfrac32\log2 Tm→23log2。一组内部额外的一两项也趋于零,所以整个新排列的部分和具有同样的极限。
同样的项,每项都恰好出现一次,次序变了,极限也变了。这不是有限换元规则出了问题,而是"取越来越大的有限部分"所采用的方式发生了变化。
另外, 1 − 1 + 1 − 1 + ⋯ 1-1+1-1+\cdots 1−1+1−1+⋯ 的部分和在 1 1 1 和 0 0 0 之间来回跳动,在通常的部分和极限意义下发散。本篇不采用其他广义求和约定,不能把它直接写成 1 / 2 1/2 1/2。
5. 二重和换序:先证明可以换
考虑
∑ j , k ≥ 0 r j s k . \sum_{j,k\ge0}r^js^k. j,k≥0∑rjsk.
当 ∣ r ∣ < 1 |r|<1 ∣r∣<1 且 ∣ s ∣ < 1 |s|<1 ∣s∣<1 时,绝对值的二重和为
∑ j , k ≥ 0 ∣ r ∣ j ∣ s ∣ k = 1 ( 1 − ∣ r ∣ ) ( 1 − ∣ s ∣ ) < ∞ . \sum_{j,k\ge0}|r|^j|s|^k =\frac1{(1-|r|)(1-|s|)}<\infty. j,k≥0∑∣r∣j∣s∣k=(1−∣r∣)(1−∣s∣)1<∞.
因此可以分别求和,得到
∑ j , k ≥ 0 r j s k = 1 ( 1 − r ) ( 1 − s ) . \sum_{j,k\ge0}r^js^k=\frac1{(1-r)(1-s)}. j,k≥0∑rjsk=(1−r)(1−s)1.
特别地,令 r = s = x r=s=x r=s=x,再按对角线 j + k = n j+k=n j+k=n 分组。每条对角线上有 n + 1 n+1 n+1 个格点,于是
∑ n = 0 ∞ ( n + 1 ) x n = 1 ( 1 − x ) 2 ( ∣ x ∣ < 1 ) . \boxed{\sum_{n=0}^{\infty}(n+1)x^n =\frac1{(1-x)^2}\qquad(|x|<1).} n=0∑∞(n+1)xn=(1−x)21(∣x∣<1).
这段推导同时用到了第 2.4 节的重数计数和本节的绝对收敛条件。缺少前者会漏掉 n + 1 n+1 n+1,缺少后者则无法直接保证分组合法。
6. 数值近似要带上尾项
无限和不可能靠循环把"全部项"逐个算完。程序算出的是有限部分和;如果希望知道误差,就需要尾项估计。
几何级数在 ∣ q ∣ < 1 |q|<1 ∣q∣<1 时有精确余项
1 1 − q − ∑ k = 0 N q k = q N + 1 1 − q , \frac1{1-q}-\sum_{k=0}^{N}q^k =\frac{q^{N+1}}{1-q}, 1−q1−k=0∑Nqk=1−qqN+1,
从而误差绝对值不超过 ∣ q ∣ N + 1 / ( 1 − ∣ q ∣ ) |q|^{N+1}/(1-|q|) ∣q∣N+1/(1−∣q∣)。
再看一个裂项例子:
∑ k = 0 N 1 ( k + 1 ) ( k + 2 ) = ∑ k = 0 N ( 1 k + 1 − 1 k + 2 ) = 1 − 1 N + 2 . \sum_{k=0}^{N}\frac1{(k+1)(k+2)} =\sum_{k=0}^{N}\left(\frac1{k+1}-\frac1{k+2}\right) =1-\frac1{N+2}. k=0∑N(k+1)(k+2)1=k=0∑N(k+11−k+21)=1−N+21.
因此无限和为 1 1 1,只取前 N + 1 N+1 N+1 项的误差恰好是 1 / ( N + 2 ) 1/(N+2) 1/(N+2)。它比几何级数的尾项衰减慢得多。
python
from fractions import Fraction
for q in (Fraction(1, 3), Fraction(-2, 3)):
for N in range(41):
partial = sum(q ** k for k in range(N + 1))
remainder = Fraction(1, 1 - q) - partial
assert remainder == q ** (N + 1) / (1 - q)
bound = abs(q) ** (N + 1) / (1 - abs(q))
assert abs(remainder) <= bound
for N in range(101):
partial = sum(Fraction(1, (k + 1) * (k + 2))
for k in range(N + 1))
assert 1 - partial == Fraction(1, N + 2)
print("有限部分和与余项公式检查通过")
这些断言检查的是推导中的有限恒等式,不能替代收敛证明。收敛来自前面已经说明的余项趋于零。
7. 本节的操作顺序
遇到无限和式时,先明确索引范围和求和顺序,再判断项是否非负、是否绝对收敛;涉及换序、重排或分组时,把合法性条件写出来。能先处理有限部分和的,就先完成有限计算,最后检查极限和尾项。
第二章从求和记号开始,到这里补上了它的边界:一个式子写得紧凑,并不意味着所有形式操作都合法。求和范围、重复次数和收敛条件,同样属于答案。
参考:Ronald L. Graham、Donald E. Knuth、Oren Patashnik 著,张明尧、张凡译,《具体数学:计算机科学基础(第 2 版)》,人民邮电出版社,§2.7。本文按本节主题重新组织解释与推导,并补充程序核验;不是原文摘录。