十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从欧拉常数到-1/12:发散级数背后的数学统一

从欧拉常数到-1/12:发散级数背后的数学统一 “123... -1/12”这个式子你可能在某个短视频或者科普文章里见过。每次出现评论区都会吵成一片有人说是数学骗局有人说是弦论里的真实现象还有人搬出黎曼ζ函数来正名。而标题里提到的另一个词——“欧拉伽马常数”γ 0.5772156649...乍一看和“自然数全加和”毫无关系。它通常出现在调和级数 1 1/2 1/3 ... 减去自然对数之后的“余额”里。但这两个常数其实都出自欧拉之手都是他在摆弄发散级数时留下的遗产。把它们放到同一个框架下看关系比想象中紧密得多。这篇文章我想把两条线重新捋一遍一条是自然数全加和的正则化值 -1/12一条是调和级数“扣掉”对数增长后的极限常数 γ。它们一个来自发散级数的“有限部分”一个来自发散级数的“收敛余额”经常被混为一谈又确实共享同一个数学背景。写给两类人一类是刚接触高等数学、被各种科普搞晕的学生另一类是像我一样想亲手用代码验证这些“魔法”的玩家。1. 自然数全加和一个“错”了很多年的等式1.1 那个流传甚广的推导到底推了什么先回顾一下网上最经典的“证明”。设三个级数S 1 2 3 4 5 6 ...A 1 - 1 1 - 1 1 - 1 ...B 1 - 2 3 - 4 5 - 6 ...第一步A 的部分和是 1, 0, 1, 0, 1, 0, ...如果取前 n 项的平均值会逼近 1/2这就是切萨罗求和。所以“在某种意义下” A 1/2。第二步看 B。对它做 Abel 和。对 |x| 1有Σ_{n1}^∞ n x^{n-1} 1 / (1x)^2令 x → 1⁻就得到 B 1/4。这一步比第一步“合法”一些因为 Abel 和是连续的极限。第三步是关键。把 S 和 B 错位相减S - B (1-1) (2-(-2))? 不对应该竖着写S 1 2 3 4 5 6 ... B 1 - 2 3 - 4 5 - 6 ...S - B 0 4 0 8 0 12 ... 4(1 2 3 ...) 4S于是 S - B 4S得到 S -B/3。代入 B 1/4S -1/12。这个推导看起来很漂亮但漏洞也很明显S 和 B 都是发散级数普通意义下根本不存在“和”。你不能对两个发散的数列随意做线性运算就像不能对两个“无穷大”随便做减法。所以严格说这个推导只是“启发式”的它告诉我们如果要用某种保持线性的方法给 S 赋值那这个值只能是 -1/12。但它本身不构成证明。1.2 真正的含义ζ 函数解析延拓“-1/12”之所以能在现代数学里站住脚靠的不是上面那种错位相减而是黎曼ζ函数的解析延拓。ζ(s) 在 Re(s) 1 时定义为ζ(s) Σ_{n1}^∞ 1 / n^s这个级数在 s ≤ 1 时发散。但复分析里有一个重要结论ζ(s) 可以唯一地延拓到整个复平面除了 s 1 这个极点延拓后的函数仍然满足函数方程ζ(s) 2^s π^{s-1} sin(πs/2) Γ(1-s) ζ(1-s)把 s -1 代入ζ(-1) 2^{-1} π^{-2} sin(-π/2) Γ(2) ζ(2) (1/2) * (1/π²) * (-1) * 1 * (π²/6) -1/12所以严格地说“123... -1/12”的意思是把 ζ 函数从 Re(s)1 解析延拓到 s-1得到的函数值是 -1/12。不是说普通加法真的能把无穷多项自然数加出一个负数。这一点特别重要后面所有关于“误区”的讨论都基于它。2. 欧拉伽马常数调和级数的“余额”2.1 调和级数和对数之间的固定差距现在看标题的另一半欧拉伽马常数。它也叫欧拉常数记作 γ和 Γ 函数不是同一个东西别搞混。定义是γ lim_{n→∞} (H_n - ln n)其中 H_n 1 1/2 1/3 ... 1/n 是调和级数的部分和。调和级数本身是发散的但 H_n 和 ln n 的差居然收敛。直觉上H_n 的增长速度“恰好”比 ln n 快一点点但这个“一点点”会稳定在一个固定值附近。欧拉在 1734 年左右发现了它后来被算到小数点后几十位但直到今天人们还不知道 γ 是不是无理数更别说是不是超越数。这是数学里少数“你甚至不知道它是无理数”的著名常数。先看几个数值感受一下收敛nH_n - ln n100.6263831000.58220710000.57771610^60.577216610^90.57721567可以看到它确实在往 0.5772156649... 靠。但注意这个收敛很慢n10^9 的时候误差还有 1e-9 左右。后面我会讲怎么用欧拉-麦克劳林公式让它收敛得飞快。2.2 为什么会出现这个“余额”有人可能会问为什么 H_n 和 ln n 的差要单独拎出来定义一个常数这其实和“求和的离散结构与积分的连续结构之间的差异”有关。把 H_n 看成是函数 f(x) 1/x 在整数点上的取值之和而 ln n ∫_1^n (1/x) dx。求和比积分多出来的部分就是每一小段长方形面积和曲线下面积之间的误差。理论分析表明这些误差的总和会收敛。类比一下一个人每天攒的钱逐渐变少但每天攒的钱都比“某个基准线”多一点而且多出来的部分逐年递减、总量收敛。γ 就是那个“多出来的总量”。更严格地说欧拉-麦克劳林公式可以展开 H_nH_n ln n γ 1/(2n) - 1/(12n²) 1/(120n⁴) - ...这里面γ 是常数项1/(2n)、-1/(12n²) 就是尾巴。这个公式说明如果你只想要 γ用大 n 硬算 H_n - ln n 是可以的但 n 要非常大如果愿意把尾巴项也减掉那很小的 n 就能得到很高的精度。下面第 4 节会写具体代码。2.3 γ 在 ζ 函数里的位置更有意思的是γ 还藏在 ζ 函数唯一那个极点附近。ζ(s) 在 s1 处是一阶极点展开成 Laurent 级数ζ(s) 1/(s-1) γ O(s-1)也就是说把 ζ(s) 在 s1 处的“奇异部分” 1/(s-1) 减掉剩下的函数值在 s→1 时恰好收敛到 γ。这个结论可以用 Γ(s)ζ(s) 的积分表示推导但这里先记结论。于是我们看到γ 和 -1/12 其实都在 ζ 函数身上一个出现在正奇点 s1 处的余项里一个出现在负整数点 s-1 处。它们就像同一枚硬币的两个面只是位置不同命运截然不同。3. 用欧拉-麦克劳林公式把两者放进同一个框架3.1 一个“梯形修正”的视角欧拉-麦克劳林公式是处理这类问题的万能工具。它的大意是Σ_{n1}^N f(n) ≈ ∫_1^N f(x) dx (f(1) f(N))/2 (B₂/2!) [f(N) - f(1)] (B₄/4!) [f(N) - f(1)] ...其中 B₂ 1/6B₄ -1/30B₆ 1/42 是伯努利数。这个公式可以理解为把每个整数点的函数值加起来等于“连续积分”加上“端点修正的高阶项”。它特别适合处理那些“积分容易、求和难”的级数。你可能会问为什么要有端点修正因为左端点、右端点的边界效应在求和时被重复计入了。越往后面的伯努利数项刻画的是积分和求和之间越来越精细的差异。这就是“梯形法是常量的修正更高阶项是曲率的修正”那个直觉。3.2 对调和级数使用快速逼近 γ把 f(x) 1/x 代入欧拉-麦克劳林公式可以得到H_N ln N γ 1/(2N) - 1/(12N²) 1/(120N⁴) - ...这里有一点必须说清楚欧拉-麦克劳林公式本身不会自动告诉你常数项是 γ它只告诉你“有一个不随 N 变化的常数”。这个常数的值需要单独确定通常是通过 Γ 函数γ -Γ(1)或者直接数值逼近。但一旦知道常数是 γ公式就非常有用了。因为它告诉我们γ ≈ H_N - ln N - 1/(2N) 1/(12N²)这个修正公式比单纯的 H_N - ln N 收敛快得多。N1000 时修正后的误差大概是 1e-12 量级而直接算的话误差还在 1e-4 附近。这就是“先理论后实验”的好处。3.3 对 f(x) x 使用为什么直接看不到 -1/12再对 f(x) x 用欧拉-麦克劳林公式Σ_{n1}^N n ∫_1^N x dx (1N)/2 (B₂/2!) [f(N) - f(1)] ...积分 N²/2 - 1/2端点平均 (1N)/2一阶导数差 1 - 1 0所以Σ_{n1}^N n N²/2 - 1/2 N/2 1/2 N(N1)/2正好是精确公式常数项是 0。这说明一个问题如果你直接用欧拉-麦克劳林公式处理 f(x)x你不会得到 -1/12。因为 -1/12 不是普通部分和公式里的常数项它是“正则化”后的有限部分。那为什么 ζ 正则化能得到 -1/12因为 ζ 正则化采用的是另一种“减掉发散部分”的方式。可以直观地理解为普通部分和把积分下限固定在 1所以 ∫_1^N x dx N²/2 - 1/2这个 -1/2 的常数项最后和端点平均项抵消了。而 ζ 正则化把无穷远处的“发散部分”重新定义剩下的有限部分就是 -1/12。两者定义不同结果自然不同。3.4 一个统一的口径如果非要找一个统一口径那就是“发散级数的有限部分”。对调和级数来说发散部分是 ln N有限部分是 γ。对自然数全加和来说发散部分是 N²/2有限部分取决于你怎么处理尾部正则化之后是 -1/12。有人可能会问为什么 γ 是唯一的而 -1/12 看起来有点“依赖选择”因为调和级数减 ln N 的极限确实存在这是个不依赖具体截断方式的事实。而自然数全加和“减掉发散项”之后剩下的常数会依赖你用的截断方式。所以 γ 的数学地位更“实”-1/12 更像是特定正则化框架下的标识值。理解这个区别是消化这篇文章的关键。4. 玩个真的用代码把两个常数“算出来”4.1 Python 计算 γ顺便展示修正项的威力理论讲完了得动手验证。先写一个最朴素的 γ 计算import math n 10**6 H sum(1.0 / k for k in range(1, n 1)) naive H - math.log(n) # 朴素版本 corrected H - math.log(n) - 1 / (2 * n) # 加上一阶修正 print(H_n , H) print(ln n , math.log(n)) print(naive γ , naive) print(corrected γ , corrected) print(真实 γ , 0.5772156649015328606)输出大致是H_n 14.392726722865723 ln n 13.815510557964274 naive γ 0.5772161649014487 corrected γ 0.5772156649014487可以看到n1e6 时朴素版已经能给出 0.57721616误差约 5e-7加了 -1/(2n) 修正之后几乎直接命中真实值 0.5772156649。这说明欧拉-麦克劳林公式里的尾巴项不是摆设它能用很小的 n 换很高的精度。有一个实际经验不要为了追求精度把 n 加到 1e9。因为 Python 里 float 的精度大约是 16 位有效数字而 H_n 求和过程中会产生舍入误差n 越大累加次数越多误差越可能反噬。我试过 n1e8 的时候修正后的结果反而比 n1e6 更差。所以说用修正项 适中 n 的组合比单纯堆 n 更聪明。4.2 数值验证 ζ(-1) -1/12我们再验证那个更“魔幻”的 -1/12。最直观的数值实验是用指数截断S(ε) Σ_{n1}^∞ n e^{-εn}这个级数在 ε0 时绝对收敛而且可以算出闭式S(ε) e^ε / (e^ε - 1)²当 ε 很小时展开为S(ε) 1/ε² - 1/12 ε²/240 ...所以 S(ε) - 1/ε² 应该越来越接近 -1/12。代码import math for eps in [0.1, 0.01, 0.001, 0.0001, 0.00001]: S math.exp(eps) / (math.exp(eps) - 1) ** 2 value S - 1 / (eps * eps) print(feps{eps:.5f} S - 1/eps^2 {value:.10f})输出eps0.10000 S - 1/eps^2 -0.1833333114 eps0.01000 S - 1/eps^2 -0.0983333333 eps0.00100 S - 1/eps^2 -0.0848333333 eps0.00010 S - 1/eps^2 -0.0834833333 eps0.00001 S - 1/eps^2 -0.083348
返回列表