Let me show you. π \pi π . The ratio of the circumference of a circle to its diameter. And this is just the beginning. It keeps on going. Forever. Without ever repeating.
Which means that contained within this string of decimals is every single other number. Your birth date, combination to your locker, your social security number. It’s all in there somewhere.
And if you convert these decimals into letters, you would have every word that ever existed in every possible combination. The first syllable you spoke as a baby, the name of your latest crush, your entire life story from beginning to end.
Everything we ever say or do, all of the world’s infinite possibilities rest within this one simple circle.
Now what you do with that information, what it’s good for, well, that would be up to you.
— *Person of Interest, Season 2 Episode 11.
看看。π \pi π 是圆的周长与直径的比值,但这只是开始,它不断延伸,永无止境,从不重复。
这意味着在这串小数中,潜藏着所有的数字:你的生日,你储物柜的密码,你的社会安全号码,它们都在 π \pi π 的某个地方。
如果你把这些小数转换成字母,你会得到所有曾经存在过的词语,以及它们能组成的所有可能的组合。你婴儿时期发出的第一个音节,你暗恋之人的名字,以及,你的人生,从头到尾。
我们说过与做过的一切,世界的一切无限可能,都蕴含在这个简单的圆之中。
至于你如何理解这些信息,它能带来什么,那就取决于你自己了。
——《疑犯追踪》第二季第 11 集。
NOTE 当然,其实这句话是错误的 ,或者说,是未证实的 (详细会在后文展开说明),但是很浪漫不是吗?
我突然想起一个不知道从哪里看见过的科幻小故事(虽然其实没什么关联性):一天,一群外星人来到地球,它们被这里的风土人情所吸引,所以打算把地球上很多信息都记录下来带回去。于是,它们把信息编码成 n n n 进制数 a 1 a 2 … a n ‾ \overline{a_1 a_2 \dots a_n} a 1 a 2 … a n ,然后再变成 α = 0. a 1 a 2 … a n ‾ \alpha = \overline{0.a_1 a_2 \dots a_n} α = 0. a 1 a 2 … a n ,这是一个小于 1 1 1 的数,于是它们在一根木棍的 α \alpha α 比例位置处画了一条线,带走了地球上所有的信息。
接下来,我将首先针对一些在这个电视剧片段的视频的评论区中看到的有关圆周率的观点作出讨论,在这个过程中,我会忽略一些可能需要的前置知识,比如泰勒展开的推导 ,因为我认为这些知识对于讨论圆周率本身来说,并不是必要的。
1. 观点一:因为圆周率是无限不循环小数,所以它会出现所有数字组合# 这个观点是在初学者中非常常见的误区,纠正这个观点可以说几乎就是我当初进行关于圆周率的科普的初衷。
首先重新表述一下这个观点,他希望采用的经典三段论论证法:
前提:无限不循环小数中包含所有数字组合
条件:圆周率是无限不循环小数
结论:圆周率包含所有数字组合
那么,我们要说明他的论证方法有误,实际上只需要推翻前提即可。
1.1. 第一种反例# 显然,我们可以构造一个无限不循环小数:a = 0.1010010001000010 … a = 0.1010010001000010\ldots a = 0.1010010001000010 … ,它的规律是,相邻的两个 1 1 1 之间间隔的 0 0 0 的个数依次增加,即 a = ∑ i = 1 ∞ 1 10 i ( i + 1 ) 2 a = \sum\limits_{i=1}^{\infty} \frac{1}{10^{\frac{i(i + 1)}{2}}} a = i = 1 ∑ ∞ 1 0 2 i ( i + 1 ) 1 。很显然,a a a 不可能是循环小数,并且,a a a 中不包含 1 1 1 ,因此,a a a 不包含所有数字组合,所以,前提不成立,论证方法有误。
1.2. 拓展:刘维儿数# 事实上,刚才那个反例的构造完全是为了方便对方理解,它其实只需要稍加改造,就可以得到刘维儿数:
a = 0.110001000000000000000001000 … = ∑ i = 1 ∞ 1 10 i ! a = 0.110001000000000000000001000\ldots = \sum\limits_{i=1}^{\infty} \frac{1}{10^{i!}} a = 0.110001000000000000000001000 … = i = 1 ∑ ∞ 1 0 i ! 1 但是,这个数难道有什么特殊的吗?
事实上,这个数非常特殊,它是最早被证明出的超越数。
什么是超越数?简而言之,就是不能用整系数多项式表示的数,即不是代数数的数。譬如,任何有理数都可以表示为两个整数的比值,即 a = p q a = \frac{p}{q} a = q p ,那么,它就一定是方程 q ∗ x − p = 0 q * x - p = 0 q ∗ x − p = 0 的根,所以任意有理数都是代数数 。而反过来,方程 x 2 − 2 = 0 x^2 - 2 = 0 x 2 − 2 = 0 的根,即 2 \sqrt{2} 2 ,就不能表示为两个整数的比值,因此,2 \sqrt{2} 2 是代数数但不是有理数,代数数是一个比有理数更广泛的数集 。
1.3. 第二种反例# 看完第一个反例,许多人会觉得,这个数太特殊了,而且人工构造的痕迹太重,所以不能作为反例。事实上只需要找到一个反例,不管是什么,就可以否定一个全称命题了,但是无所谓,因为其他反例也非常容易构造:将 π \pi π 的十进制表示中,任意出现数码 9 9 9 的地方,替换为 0 0 0 ,得到一个新的数 b b b ,显然,9 9 9 一定不会出现在 b b b 中,因此,b b b 不包含所有数字组合。
你可能注意到了,我这里并没有说 b b b 是无理数 ,尽管这看似非常显然,因为只要把 b b b 写出来就发现它非常凌乱,但是,不能因为一个数看起来很乱,就断定它不是无理数。事实上,不断进行刚才的替换,继续把 8 8 8 换成 0 0 0 ,7 7 7 换成 0 0 0 ,几次之后,π \pi π 就变成了有理数 0 0 0 ,因此刚才的操作确实是有让无理数变成有理数的风险的。
那么 b b b 到底是有理数还是无理数呢?我的答案是:我不知道 !如果有人能证明或者推翻这个结论,也可以发给我让我观摩一下。
2. 观点二:根据无限猴子定律,圆周率总会出现所有数字组合# 这个观点实际上算的上“Not Even Wrong”了(原谅我用词可能比较重),因为无限猴子定律讲的是随机事件,而圆周率本身根本是一个确定的 数,这两个完全是不同的领域,所以,这个观点是错误的。
但是呢,这个观点其实也有迹可循,因为 π \pi π 表现的真的很像一个每一位都是从 0 0 0 到 9 9 9 随机分布的数,有关这种“看起来随机的确定数”,其实数学上还真的有专门的研究,叫做 Normal Number ,中文译文通常为“正规数 ”或者“正常数 ”,在后文 我会再次提到它,这里留个引子。但是这块内容的中文翻译其实十分混乱,比如另一个叫 Regular Number (正则数 )的概念,有时也会被翻译成“正规数”。因此我后文尽量用英文来描述,以减少歧义。
3. 观点三:圆周率的所有数码的出现频率是均匀的,所以必然出现所有数字组合# 这个观点非常有意思。因为这已经越来越接近 Normal Number 的定义了(事实上就是 Simply Normal Number 的定义),所以,我们有必要先了解一下 Normal Number。
不过,在此之前,请允许我说一下收集资料过程中发现的一个有趣的事情
3.1. 百度百科词条:合取数# 很多人会在这种话题下提到“合取数”这个概念,事实上我一开始在评论区的科普也提到了这个名词,借着这个机会我也想更加具体的了解它,比如它是在哪篇论文中提出的?它的英文名字是什么?等等。
然而,当我查询这个词条的时候,却遇到了让我非常惊讶的事情:在合取数的百度百科词条 中,我竟然没有找到任何关于这个词的英文名或者文献,甚至于,这个词条连一个参考文献都没有?
我在词条讨论区提问也没有收到任何回复,经查,这个词条最早由一名名为 zistrong 的用户于 2014-12-18 编辑,而我在中文互联网上找到比较早的一篇是来自π里包含了所有可能的数字组合吗? ,我写到这才发现,我正在做的内容十几年前就有人在干了(虽然本文还扩展了很多另外的东西)。它发布于 2014-12-17,和百度百科词条的创建时间只相差一天,不知道是不是巧合,另外,这篇文章声称自己转载自开源中国的一篇文章 ,但是这个链接我无法访问,于是考证到此结束了。
3.2. 拓展:Simply Normal Number 与 Normal Number# Simply Normal Number 是 Normal Number 的一个子集,它们的定义如下:
A real number is said to be simply normal in an integer base b b b if its infinite sequence of digits is distributed uniformly in the sense that each of the digit values has the same natural density 1 b \frac{1}{b} b 1 . A number is said to be normal in base b b b if, for every positive integer n n n , all possible strings n n n digits long have density b − n b^{-n} b − n .
来源:HandWiki - Normal number
值得注意的是 HandWiki 在学术上并不是一个非常权威的网站。但是既然是科普,那么学术权威性就不一定那么重要了。
简单来说:如果某个数在某个进制下,它的每一位数码的出现频率都是 1 b \frac{1}{b} b 1 ,那么这个数就是 Simply Normal Number,如果它满足对于任意正整数 n n n ,所有长度为 n n n 的字符串的出现频率都是 b − n b^{-n} b − n ,那么它就是 Normal Number。
用更加形式化的语言:
设 b b b 是大于 1 1 1 的整数,x x x 是实数。考虑以 b b b 为底的位值记数法中 x x x 的数字序列。若 s s s 是以 b b b 为底的有限数字序列,我们以 N ( s , n ) N(s, n) N ( s , n ) 表示字串 s s s 在 x x x 的开首 n n n 个数字出现次数。数 x x x 称为以 b b b 为底正规当且仅当对任意长度 k k k 的字串 s s s 有:lim n → ∞ N ( s , n ) n = 1 b k \lim_{n \to \infty} \frac{N(s, n)}{n} = \frac{1}{b^k} lim n → ∞ n N ( s , n ) = b k 1 。
来源:百度百科 - 正规数
不难看出,只要 π \pi π 是一个 Normal Number,那么它必然会出现所有数字组合。
但是,这个观点的意思是:Simply Normal Number 中必然出现每一种数字组合。那下面我们先来否定这一点。
3.3. Simply Normal Number 是否必然包含所有数字组合?# 先说结论:不一定 。仍然通过我惯用的举反例。令 c = 0.012345678900112233445566778899000 … c = 0.012345678900112233445566778899000\ldots c = 0.012345678900112233445566778899000 … ,显然,c c c 中不含有 10 10 10 这个连续数字组合,接下来我们证明 c c c 是 Simply Normal Number。
首先,我们计算 0 0 0 的出现概率的极限:
在前 n n n 位中,我们考虑最后一个完整的 0 0 0 到 9 9 9 的重复序列,假设这个序列中,每一个数码出现的次数都是 k k k ,那么,在截断到这一位后,0 0 0 出现了 ∑ i = 1 k i = k ( k + 1 ) 2 \sum\limits_{i=1}^{k} i = \frac{k(k + 1)}{2} i = 1 ∑ k i = 2 k ( k + 1 ) ,总共有 ∑ i = 1 k 10 ⋅ i = 5 k ( k + 1 ) \sum\limits_{i=1}^{k} 10 \cdot i = 5k(k + 1) i = 1 ∑ k 10 ⋅ i = 5 k ( k + 1 ) ,由于这是最后一个完整的序列,因此在这之后到下一次产生一个完整序列,0 0 0 的出现概率是先增加后减小的,并且两端都恰好是 1 10 \frac{1}{10} 10 1 ,因此出现概率 k ( k + 1 ) 2 + ( k + 1 ) 5 k ( k + 1 ) + ( k + 1 ) ≥ P 0 ≥ 1 10 \frac{\frac{k(k + 1)}{2} + (k + 1)}{5k(k + 1) + (k + 1)} \geq P_0 \geq \frac{1}{10} 5 k ( k + 1 ) + ( k + 1 ) 2 k ( k + 1 ) + ( k + 1 ) ≥ P 0 ≥ 10 1 ,考虑 lim k → ∞ k ( k + 1 ) 2 + ( k + 1 ) 5 k ( k + 1 ) + ( k + 1 ) = lim k → ∞ k + 1 10 k + 2 = 1 10 \lim_{k \to \infty} \frac{\frac{k(k + 1)}{2} + (k + 1)}{5k(k + 1) + (k + 1)} = \lim_{k \to \infty} \frac{k + 1}{10k + 2} = \frac{1}{10} lim k → ∞ 5 k ( k + 1 ) + ( k + 1 ) 2 k ( k + 1 ) + ( k + 1 ) = lim k → ∞ 10 k + 2 k + 1 = 10 1 ,根据夹逼定理,极限存在,并且 lim k → ∞ P 0 = 1 10 \lim_{k \to \infty} P_0 = \frac{1}{10} lim k → ∞ P 0 = 10 1 。
类似的,可以证明 1 1 1 到 9 9 9 的出现概率都是 1 10 \frac{1}{10} 10 1 。因此,c c c 是 Simply Normal Number,并且不包含 10 10 10 这个数字组合。
3.4. 圆周率是否是 Simply Normal Number?# 据前文所属,如果 π \pi π 是一个 Normal Number,那出现所有数字组合是必然的,这也是数学界正在努力的方向,然而,目前数学界还没有证明 π \pi π 是一个 Normal Number,甚至,据我所知,目前数学界还没有证明 π \pi π 是一个 Simply Normal Number。
但是我们可以做一个小实验看一下 π \pi π 的前 n n n 位的分布。
代码如下(后续有机会我会介绍这个算法,参考《数值计算方法》):
附录 A. 计算 pi 的前 n 位小数分布的 Python 代码
运行结果如下:
4. 观点四:圆周率无穷无尽是因为目前算力不足# 如果说观点二让我觉得“Not Even Wrong”,那么观点四就无语到让我都没法说是“Not Even Wrong”了,当然,我们并不能苛求普通人能够自主证明 π \pi π 为什么无限不循环。但是 π \pi π 作为无理数应该是在义务教育阶段就不断强调的,尽管义务教育阶段并不会给出证明,至少作为一个结论是应该被接受的。不过既然有人不知道,正好,我接下来就进行一个简要的证明。
4.1. 证明步骤 1:证明非零有理数正切值都是无理数# 如果已知 tan x \tan x tan x 的连分数展开(其证明我将在后文 给出,在本节中请默认为真)为:
tan x = x 1 − x 2 3 − x 2 5 − x 2 7 − ⋱ \tan x = \frac{x}{1 - \frac{x^2}{3 - \frac{x^2}{5 - \frac{x^2}{7 - \ddots}}}} tan x = 1 − 3 − 5 − 7 − ⋱ x 2 x 2 x 2 x 如果有理数 x = p q x = \frac{p}{q} x = q p ,那么:
tan p q = p q − p 2 3 q − p 2 5 q − p 2 7 q − ⋱ \tan \frac{p}{q} = \frac{p}{q - \frac{p^2}{3q - \frac{p^2}{5q - \frac{p^2}{7q - \ddots}}}} tan q p = q − 3 q − 5 q − 7 q − ⋱ p 2 p 2 p 2 p 令 f k = p 2 k q − p 2 ( k + 2 ) q − p 2 ( k + 4 ) q − ⋱ f_k = \frac{p^2}{kq - \frac{p^2}{(k + 2)q - \frac{p^2}{(k + 4)q - \ddots}}} f k = k q − ( k + 2 ) q − ( k + 4 ) q − ⋱ p 2 p 2 p 2 ,那么:tan p q = p q − p 2 3 q − p 2 5 q − ⋱ p 2 ( k − 2 ) q − f k \tan \frac{p}{q} = \frac{p}{q - \frac{p^2}{3q - \frac{p^2}{5q - \ddots \frac{p^2}{(k - 2)q - f_k}}}} tan q p = q − 3 q − 5 q − ⋱ ( k − 2 ) q − f k p 2 p 2 p 2 p 。
不难发现,当 k k k 足够大时,0 < f k < 1 0 < f_k < 1 0 < f k < 1 。令最小的让 0 < f k < 1 0 < f_k < 1 0 < f k < 1 的 k k k 为 k 0 k_0 k 0 ,那么显然,由于在表达式中除了 f k f_k f k 都是有限的有理式,因此 tan p q \tan \frac{p}{q} tan q p 是有理数的充分必要条件就是 f k f_k f k 是有理数。
接下来我们使用反证法,反设 f k f_k f k 是有理数 B A \frac{B}{A} A B ,其中 B > A > 0 B > A > 0 B > A > 0 ,那么有:
B A = f k = p 2 k q − p 2 ( k + 2 ) q − p 2 ( k + 4 ) q − ⋱ = p 2 k q − f k + 2 \frac{B}{A} = f_k = \frac{p^2}{kq - \frac{p^2}{(k + 2)q - \frac{p^2}{(k + 4)q - \ddots}}} = \frac{p^2}{kq - f_{k+2}} A B = f k = k q − ( k + 2 ) q − ( k + 4 ) q − ⋱ p 2 p 2 p 2 = k q − f k + 2 p 2 化简得到:
f k + 2 = B k q − A p 2 B f_{k+2} = \frac{Bkq - Ap^2}{B} f k + 2 = B B k q − A p 2 ,而类似的,也有 0 < f k + 2 < 1 0 < f_{k+2} < 1 0 < f k + 2 < 1 ,而这个表达式又说明了 f k + 2 f_{k+2} f k + 2 也是有理数,那么,令 C = B k q − A p 2 C = Bkq - Ap^2 C = B k q − A p 2 ,有 f k + 2 = C B f_{k+2} = \frac{C}{B} f k + 2 = B C ,于是有 A > B > C > 0 A > B > C > 0 A > B > C > 0 ,类似地,这个过程可以不断的进行下去,得到 A > B > C > D > ⋯ > 0 A > B > C > D > \cdots > 0 A > B > C > D > ⋯ > 0 ,但是,它们都是有限的正整数,而严格大于导致了每一次至少让分子变小 1 1 1 ,因此这个过程最多进行 A A A 次,这与之前的这个过程必须无限进行矛盾,因此,反证假设 f k f_k f k 是有理数是不成立的,因此 tan p q \tan \frac{p}{q} tan q p 的值都是无理数。
4.2. 证明步骤 2:证明圆周率是无理数# 由于在 1.4.1 节中,我们已经证明了,如果 x x x 是有理数,那么 tan x \tan x tan x 是无理数,而 tan π 4 = 1 \tan \frac{\pi}{4} = 1 tan 4 π = 1 ,这并不是无理数,因此 π 4 \frac{\pi}{4} 4 π 是无理数,由于 π = 4 × π 4 \pi = 4 \times \frac{\pi}{4} π = 4 × 4 π ,因此 π \pi π 是无理数。证毕。
这条证明思路最早由 Lambert 在 1768 年提出。
4.3. 补充 1:连分数展开的推导# TIP 受限于篇幅和阅读成本,这部分证明是不严谨的,仅作为参考,其收敛域不做讨论,尽管要在证明中用到实际上是需要说明收敛域的。此外,这里给出的 sin x \sin x sin x 和 cos x \cos x cos x 的泰勒展开也不做深入,因为有关这些是非常容易找到资料的。
首先,给出几个泰勒展开式:
{ sin x = x − x 3 3 ! + x 5 5 ! − x 7 7 ! + ⋯ = ∑ i = 0 ∞ ( − 1 ) i x 2 i + 1 ( 2 i + 1 ) ! cos x = 1 − x 2 2 ! + x 4 4 ! − x 6 6 ! + ⋯ = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i ) ! sin x x = 1 − x 2 3 ! + x 4 5 ! − x 6 7 ! + ⋯ = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! \begin{cases}
\sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i + 1}}{(2i + 1)!} \\
\cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \cdots = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i)!} \\
\frac{\sin x}{x} = 1 - \frac{x^2}{3!} + \frac{x^4}{5!} - \frac{x^6}{7!} + \cdots = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}
\end{cases} ⎩ ⎨ ⎧ sin x = x − 3 ! x 3 + 5 ! x 5 − 7 ! x 7 + ⋯ = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i + 1 cos x = 1 − 2 ! x 2 + 4 ! x 4 − 6 ! x 6 + ⋯ = i = 0 ∑ ∞ ( − 1 ) i ( 2 i )! x 2 i x s i n x = 1 − 3 ! x 2 + 5 ! x 4 − 7 ! x 6 + ⋯ = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i 于是,有:
tan x = x cos x sin x x = x ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i ) ! ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! \tan x = \frac{x}{\frac{\cos x}{\frac{\sin x}{x}}} = \frac{x}{\frac{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i)!}}{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}}} tan x = x s i n x c o s x x = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i i = 0 ∑ ∞ ( − 1 ) i ( 2 i )! x 2 i x 记:P 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i ) ! P_1(x) = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i)!} P 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i ( 2 i )! x 2 i ,Q 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! Q_1(x) = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!} Q 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i ,P k ( x ) Q k ( x ) = P k ( 0 ) Q k ( 0 ) + x 2 P k + 1 ( x ) Q k + 1 ( x ) \frac{P_k(x)}{Q_{k}(x)} = \frac{P_k(0)}{Q_k(0)} + \frac{x^2}{\frac{P_{k + 1}(x)}{Q_{k + 1}(x)}} Q k ( x ) P k ( x ) = Q k ( 0 ) P k ( 0 ) + Q k + 1 ( x ) P k + 1 ( x ) x 2 ,再令 λ k = P k ( 0 ) Q k ( 0 ) \lambda_{k} = \frac{P_k(0)}{Q_k(0)} λ k = Q k ( 0 ) P k ( 0 ) ,有:
{ P k + 1 ( x ) = Q k ( x ) Q k + 1 ( x ) = P k ( x ) − λ k Q k ( x ) x 2 λ k = P k ( 0 ) Q k ( 0 ) P 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i ) ! Q 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! \begin{cases}
P_{k + 1}(x) = Q_k(x) \\
Q_{k + 1}(x) = \frac{P_k(x) - \lambda_k Q_k(x)}{x^2} \\
\lambda_{k} = \frac{P_k(0)}{Q_k(0)} \\
P_1(x) = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i)!} \\
Q_1(x) = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}
\end{cases} ⎩ ⎨ ⎧ P k + 1 ( x ) = Q k ( x ) Q k + 1 ( x ) = x 2 P k ( x ) − λ k Q k ( x ) λ k = Q k ( 0 ) P k ( 0 ) P 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i ( 2 i )! x 2 i Q 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i P 1 ( x ) Q 1 ( x ) − 1 = ∑ i = 0 ∞ ( − 1 ) i x 2 i [ 1 ( 2 i ) ! − 1 ( 2 i + 1 ) ! ] ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! = ∑ i = 1 ∞ ( − 1 ) i x 2 i 2 i ( 2 i + 1 ) ! ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! = x 2 ∑ i = 0 ∞ ( − 1 ) ( i + 1 ) x 2 i 2 i + 2 ( 2 i + 3 ) ! ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! = x 2 ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! ∑ i = 0 ∞ ( − 1 ) ( i + 1 ) x 2 i 2 i + 2 ( 2 i + 3 ) ! \begin{aligned}
\frac{P_1(x)}{Q_1(x)} - 1 &= \frac{\sum\limits_{i=0}^{\infty} (-1)^i x^{2i} [\frac{1}{(2i)!} - \frac{1}{(2i + 1)!}]}{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}} \\
&= \frac{\sum\limits_{i=1}^{\infty} (-1)^i x^{2i} \frac{2i}{(2i + 1)!}}{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}} \\
&= x^2 \frac{\sum\limits_{i=0}^{\infty} (-1)^{(i + 1)} x^{2i} \frac{2i + 2}{(2i + 3)!}}{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}} \\
&= \frac{x^2}{\frac{\sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!}}{\sum\limits_{i=0}^{\infty} (-1)^{(i + 1)} x^{2i} \frac{2i + 2}{(2i + 3)!}}}
\end{aligned} Q 1 ( x ) P 1 ( x ) − 1 = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i i = 0 ∑ ∞ ( − 1 ) i x 2 i [ ( 2 i )! 1 − ( 2 i + 1 )! 1 ] = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i i = 1 ∑ ∞ ( − 1 ) i x 2 i ( 2 i + 1 )! 2 i = x 2 i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i i = 0 ∑ ∞ ( − 1 ) ( i + 1 ) x 2 i ( 2 i + 3 )! 2 i + 2 = i = 0 ∑ ∞ ( − 1 ) ( i + 1 ) x 2 i ( 2 i + 3 )! 2 i + 2 i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i x 2 故 P 2 ( x ) = ∑ i = 0 ∞ ( − 1 ) i x 2 i ( 2 i + 1 ) ! P_2(x) = \sum\limits_{i=0}^{\infty} (-1)^i \frac{x^{2i}}{(2i + 1)!} P 2 ( x ) = i = 0 ∑ ∞ ( − 1 ) i ( 2 i + 1 )! x 2 i ,Q 2 ( x ) = ∑ i = 0 ∞ ( − 1 ) ( i + 1 ) x 2 i 2 i + 2 ( 2 i + 3 ) ! Q_2(x) = \sum\limits_{i=0}^{\infty} (-1)^{(i + 1)} x^{2i} \frac{2i + 2}{(2i + 3)!} Q 2 ( x ) = i = 0 ∑ ∞ ( − 1 ) ( i + 1 ) x 2 i ( 2 i + 3 )! 2 i + 2 。显然 λ 1 = 1 \lambda_1 = 1 λ 1 = 1 ,λ 2 = − 3 \lambda_2 = -3 λ 2 = − 3
归纳假设:
{ P 2 m ( x ) = ∑ i = 0 ∞ ( − 1 ) i + m − 1 ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 4 ) ( 2 i + 4 m − 3 ) ! x 2 i Q 2 m ( x ) = ∑ i = 0 ∞ ( − 1 ) i + m ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 2 ) ( 2 i + 4 m − 1 ) ! x 2 i λ 2 m = − ( 4 m − 1 ) P 2 m + 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i + m ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 2 ) ( 2 i + 4 m − 1 ) ! x 2 i Q 2 m + 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i + m ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m ) ( 2 i + 4 m + 1 ) ! x 2 i λ 2 m + 1 = 4 m + 1 \begin{cases}
P_{2m}(x) = \sum\limits_{i=0}^{\infty} (-1)^{i + m - 1} \frac{(2i + 2)(2i + 4)\ldots(2i + 4m - 4)}{(2i + 4m - 3)!} x^{2i} \\
Q_{2m}(x) = \sum\limits_{i=0}^{\infty} (-1)^{i + m} \frac{(2i + 2)(2i + 4)\ldots(2i + 4m - 2)}{(2i + 4m - 1)!} x^{2i} \\
\lambda_{2m} = -(4m - 1) \\
P_{2m + 1}(x) = \sum\limits_{i=0}^{\infty} (-1)^{i + m} \frac{(2i + 2)(2i + 4)\ldots(2i + 4m - 2)}{(2i + 4m - 1)!} x^{2i} \\
Q_{2m + 1}(x) = \sum\limits_{i=0}^{\infty} (-1)^{i + m} \frac{(2i + 2)(2i + 4)\ldots(2i + 4m)}{(2i + 4m + 1)!} x^{2i} \\
\lambda_{2m + 1} = 4m + 1
\end{cases} ⎩ ⎨ ⎧ P 2 m ( x ) = i = 0 ∑ ∞ ( − 1 ) i + m − 1 ( 2 i + 4 m − 3 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 4 ) x 2 i Q 2 m ( x ) = i = 0 ∑ ∞ ( − 1 ) i + m ( 2 i + 4 m − 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 2 ) x 2 i λ 2 m = − ( 4 m − 1 ) P 2 m + 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i + m ( 2 i + 4 m − 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m − 2 ) x 2 i Q 2 m + 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i + m ( 2 i + 4 m + 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 m ) x 2 i λ 2 m + 1 = 4 m + 1 那么,有:
P 2 k + 2 ( x ) = Q 2 k + 1 ( x ) = ∑ i = 0 ∞ ( − 1 ) i + k ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k ) ( 2 i + 4 k + 1 ) ! x 2 i P_{2k + 2}(x) = Q_{2k + 1}(x) = \sum\limits_{i=0}^{\infty} (-1)^{i + k} \frac{(2i + 2)(2i + 4)\ldots(2i + 4k)}{(2i + 4k + 1)!} x^{2i} P 2 k + 2 ( x ) = Q 2 k + 1 ( x ) = i = 0 ∑ ∞ ( − 1 ) i + k ( 2 i + 4 k + 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k ) x 2 i Q 2 k + 2 ( x ) = P 2 k + 1 ( x ) − λ k Q 2 k + 1 ( x ) x 2 = ∑ i = 0 ∞ ( − 1 ) i + k ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k − 2 ) ( 2 i + 4 k − 1 ) ! x 2 i [ 1 − ( 4 k + 1 ) ( 2 i + 4 k ) ( 2 i + 4 k ) ( 2 i + 4 k + 1 ) ] x 2 = ∑ i = 1 ∞ ( − 1 ) i + k ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k − 2 ) ( 2 i + 4 k − 1 ) ! x 2 i 2 i 2 i + 4 k + 1 x 2 = ∑ i = 0 ∞ ( − 1 ) i + k + 1 ( 2 i + 2 ) ( 2 i + 4 ) ( 2 i + 6 ) … ( 2 i + 4 k ) ( 2 i + 4 k + 1 ) ! x 2 i 1 2 i + 4 k + 3 = ∑ i = 0 ∞ ( − 1 ) i + k + 1 ( 2 i + 2 ) ( 2 i + 4 ) ( 2 i + 6 ) … ( 2 i + 4 k + 2 ) ( 2 i + 4 k + 3 ) ! x 2 i \begin{aligned}
Q_{2k + 2}(x) &= \frac{P_{2k + 1}(x) - \lambda_k Q_{2k+ 1}(x)}{x^2} \\
&= \frac{\sum\limits_{i=0}^{\infty} (-1)^{i + k} \frac{(2i + 2)(2i + 4)\ldots(2i + 4k - 2)}{(2i + 4k - 1)!} x^{2i} [1 - \frac{(4k + 1)(2i + 4k)}{(2i + 4k)(2i + 4k + 1)}]}{x^2} \\
&= \frac{\sum\limits_{i=1}^{\infty} (-1)^{i + k} \frac{(2i + 2)(2i + 4)\ldots(2i + 4k - 2)}{(2i + 4k - 1)!} x^{2i} \frac{2i}{2i + 4k + 1}}{x^2} \\
&= \sum\limits_{i=0}^{\infty} (-1)^{i + k + 1} \frac{(2i + 2)(2i + 4)(2i + 6)\ldots(2i + 4k)}{(2i + 4k + 1)!} x^{2i} \frac{1}{2i + 4k + 3} \\
&= \sum\limits_{i=0}^{\infty} (-1)^{i + k + 1} \frac{(2i + 2)(2i + 4)(2i + 6)\ldots(2i + 4k + 2)}{(2i + 4k + 3)!} x^{2i}
\end{aligned} Q 2 k + 2 ( x ) = x 2 P 2 k + 1 ( x ) − λ k Q 2 k + 1 ( x ) = x 2 i = 0 ∑ ∞ ( − 1 ) i + k ( 2 i + 4 k − 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k − 2 ) x 2 i [ 1 − ( 2 i + 4 k ) ( 2 i + 4 k + 1 ) ( 4 k + 1 ) ( 2 i + 4 k ) ] = x 2 i = 1 ∑ ∞ ( − 1 ) i + k ( 2 i + 4 k − 1 )! ( 2 i + 2 ) ( 2 i + 4 ) … ( 2 i + 4 k − 2 ) x 2 i 2 i + 4 k + 1 2 i = i = 0 ∑ ∞ ( − 1 ) i + k + 1 ( 2 i + 4 k + 1 )! ( 2 i + 2 ) ( 2 i + 4 ) ( 2 i + 6 ) … ( 2 i + 4 k ) x 2 i 2 i + 4 k + 3 1 = i = 0 ∑ ∞ ( − 1 ) i + k + 1 ( 2 i + 4 k + 3 )! ( 2 i + 2 ) ( 2 i + 4 ) ( 2 i + 6 ) … ( 2 i + 4 k + 2 ) x 2 i P 2 k + 3 P_{2k + 3} P 2 k + 3 与 Q 2 k + 3 Q_{2k + 3} Q 2 k + 3 的推导类似,这里省略,最后,由数学归纳法,假设成立。
因此:
tan x = x P 1 ( x ) Q 1 ( x ) = x λ 1 + x 2 P 2 ( x ) Q 2 ( x ) = x λ 1 + x 2 λ 2 + x 2 P 3 ( x ) Q 3 ( x ) = ⋯ = x λ 1 + x 2 λ 2 + x 2 λ 3 + ⋯ = x 1 + x 2 − 3 + x 2 5 + x 2 − 7 + ⋯ = x 1 − x 2 3 − x 2 5 − x 2 7 − ⋯ \begin{aligned}
\tan x &= \frac{x}{\frac{P_1(x)}{Q_1(x)}} \\
&= \frac{x}{\lambda_1 + \frac{x^2}{\frac{P_2(x)}{Q_2(x)}}} \\
&= \frac{x}{\lambda_1 + \frac{x^2}{\lambda_2 + \frac{x^2}{\frac{P_3(x)}{Q_3(x)}}}} \\
&= \cdots \\
&= \frac{x}{\lambda_1 + \frac{x^2}{\lambda_2 + \frac{x^2}{\lambda_3 + \cdots}}} \\
&= \frac{x}{1 + \frac{x^2}{-3 + \frac{x^2}{5 + \frac{x^2}{-7 + \cdots}}}} \\
&= \frac{x}{1 - \frac{x^2}{3 - \frac{x^2}{5 - \frac{x^2}{7 - \cdots}}}} \\
\end{aligned} tan x = Q 1 ( x ) P 1 ( x ) x = λ 1 + Q 2 ( x ) P 2 ( x ) x 2 x = λ 1 + λ 2 + Q 3 ( x ) P 3 ( x ) x 2 x 2 x = ⋯ = λ 1 + λ 2 + λ 3 + ⋯ x 2 x 2 x = 1 + − 3 + 5 + − 7 + ⋯ x 2 x 2 x 2 x = 1 − 3 − 5 − 7 − ⋯ x 2 x 2 x 2 x 于是,我们得到了 tan x \tan x tan x 的连分数展开式。
附录 A. 计算 pi 的前 n 位小数分布的 Python 代码# from collections import Counter
from typing import Dict, List, Tuple
import matplotlib.pyplot as plt
def compute_pi (n_digits: int ) -> str :
n_terms = ceil(n_digits / digits_per_term)
mpmath.mp.dps = n_digits + 2 # 设置浮点精度防止舍入误差
C = 426880 * mpmath.sqrt( 10005 )
numerator = ( - 1 ) ** k * mpmath.factorial( 6 * k) * ( 13591409 + 545140134 * k)
mpmath.factorial( 3 * k) * (mpmath.factorial(k) ** 3 ) * ( 640320 ** ( 3 * k))
sum_term += numerator / denominator
return str (pi_val)[: 2 + n_digits]
def digit_frequency_over_k (
pi_str: str , step: int = 1000
) -> Tuple[List[ int ], Dict[ str , List[ float ]]]:
pi_digits = pi_str.replace( "." , "" )
freq_dict = { str (i): [] for i in range ( 10 )}
for k in range (step, len (pi_digits) + 1 , step):
counter = Counter(pi_digits[:k])
freq_dict[ str (d)].append(counter[ str (d)] / k)
if __name__ == "__main__" :
pi_digits = compute_pi(n)
k_list, freq_dict = digit_frequency_over_k(pi_digits, step)
# 跳过前 100 位频率波动过大的区域让图像容易观察
k_plot = k_list[start_index:]
freq_plot = {d: freq_dict[d][start_index:] for d in freq_dict}
plt.figure( figsize = ( 12 , 6 ))
plt.plot(k_plot, freq_plot[ str (d)], label = f "Digit { d } " )
plt.xlabel( "Number of digits" )
plt.title( "Digit frequency of π for first k digits (after first 100 digits)" )