@Lenciel

欧拉恒等式是啥意思(2)

上次我们主要说了数系的基本概念,以及 \(e\) 怎么被雅各布·伯努利在研究复利的过程中发现,又由欧拉在后续的研究中正式命名。

继续讲它跟三角函数、复平面的关系之前,有个不能绕过去的问题:大人们介绍 \(e\) 的时候总说它是自然常数,因为是自然对数的底。但发现它的过程里为啥没有出现对数呢?而且,这么个无限不循环的数,又自然在哪里呢?

目录

对数

知道 \(e\) 是算复利的时候发现的,就明白先有「自然对数」,然后它的底被叫做「自然常数」是错误的理解。

是人们先把 \(e\) 叫成了「自然常数」,然后它作底的对数才叫「自然对数」。

容易有这样的误会,是因为对数和指数是一对逆运算。很多人会觉得,它们应该是一起被发明,然后人们再研究里面包含了自然常数的特例。

实际上,对数先于指数,被独立发明。只不过像指数问题一样,\(e\) 的身影也穿插在对数问题的研究过程中,始终闪闪发亮。

对数的发明

对数大家公认是约翰.纳皮尔发明的,比指数来得早一百多年,目的是为了简化计算。

人类像今天一样计算设备触手可及的历史并不长:你爷爷年轻的时候在地质队还得用计算尺,好的计算器卖得很贵。

所以几百年前,有些如天文学家、航海家的职业,每天手搓 25325233*1.3235456 这样的计算很多次,非常崩溃。这时候已经有人(比如开普勒的老师第谷·布拉厄这兄弟据说是《哈姆雷特》的原型,八卦很多,有兴趣你可以看看)用一些公式把乘除法变成加减法然后直接查三角函数表来简化计算:

\[2\sin(A)\cos(B)=\sin(A+B) + \sin(A-B)\]

于是天文学家和数学家们就开始考虑更具普遍性的「乘除法变成加减法」。约翰.纳皮尔大概在 1594 年据传是从国王的御医那里了解到第谷的做法,二十年后,于 1614 年 6 月出版了《A Description of the Admirable Table of Logarithmes》(为什么用了二十年?我猜他想法形成很快,但手搓了数百万次超大数字的乘法计算,花掉了二十年)。

在这本书里,纳皮尔定义了所谓的「纳皮尔对数」从结构上不难猜到,这是滑动计算尺的祖先。

napier_log.png
图 1. 纳皮尔书里对数定义的插图

这张看起来有点不知所云的插图现代化一点的版本在这篇文章里面有:

napier_log_exp.png
图 2. 纳皮尔对数的现代化解释图

首先,纳皮尔构造了两个运动的粒子有人觉得纳皮尔这样用运动模型去研究数学问题实在是匪夷所思。但我觉得这是因为他同时也研究天文的原因:这个模型本质上不就很类似于在绕着太阳转的地球上会看太阳吗。 。上面那个粒子 \(b\) 在一条无穷长的射线上做匀速运动;下面那个粒子 \(\beta\) 和它同时以同样速度出发,然后在下面那条有限长度的线段 \(\vec{\alpha\omega}\) 上做变速运动,其运动速度取粒子到线段终点的距离 \(x\) 的数值。

然后纳皮尔定义 \(b\) 粒子距离起点 \(A\) 的数值 \(y\) ,就是 x 的纳皮尔对数:

\[NapLog(x) = y\]

为了制作对数表,纳皮尔需要 \(\vec{\alpha\omega}\) 的长度是个足够大的数字。参考当时的三角函数表是七位数字,纳皮尔最终把 \(\vec{\alpha\omega}\) 的长度定为 \(10^7\) (估计再大他这辈子也算不完了),得到:

\[NapLog(x) = 10^7\ln(\frac{10^7}{x})\]

于是一个纳皮尔对数求底是:

\[x = 10^7(1-10^{-7})^{NapLog(x)}\]

最终他给出的就是一张布满了密密麻麻数字可以正着查也可以反着查的对数表:

Napier's_Mirici_Logarithmorum_table_for_19_deg.agr.jpg
图 3. 纳皮尔二十年的心血主要就是这张表

下面我们来试试这个对数表有多厉害。

任选两个 100000-2000000 之间的大数,求它们的乘积的平方根。然后,我们对比一下直接用它们的纳皮尔对数求和后平均,再求底的结果。

看最后一行的红色误差可以看到,无论数字怎么变化,误差都不会超过 1

对数的发展

和纳皮尔几乎同时期,并且在很多地方被认为和纳皮尔是对数的共同发明人的约斯特·比尔吉,是一名瑞士钟表匠、天文仪器制作师和数学家。

他独立于纳皮尔发表了另一张对数表,两者实际上的区别是底数上的区别:纳皮尔使用了\(\textstyle (1-10^{-7})^{10^7}\),而他使用了\(\textstyle (1+10^{-4})^{10^4}\)。

同时,英国数学家亨利·布里格斯在纳皮尔的书出版了两年后,到爱丁堡拜访了他,然后于次年提出了一些改进意见,包括以 10 为底的对数的使用,也就是今天我们常说的标准对数\(\textstyle \log_{10}(x)\) 或者记作 \(\textstyle \lg(x)\)。

1624 年,亨利·布里格斯出版了对开本《Arithmetica Logarithmica》,其中包含三万个自然数的对数,精确到小数点后 14 位(\(\textstyle [1, 20000]\) 和 \(\textstyle [90001, 100000]\))。

荷兰数学家兼出版商佛拉哥在布里格斯的基础上加以改进(主要是补齐了 \(\textstyle [20001, 90000]\) 的部分),他的这张对数表在欧洲迅速普及开来。

但这项关于数字覆盖量和精度的比赛还没有结束,比如汤普森在 1652 年发表了一张和佛拉哥同样范围的对数表,但通过插值算到了小数点后 20 位。

自然常数与自然对数

对数发展到这里,大家对于大数乘除计算的需求基本被满足了,接下来事情的发展很有趣。

大约 1665 年,牛顿把 \(\textstyle {\frac {1}{1+x}}\) 展开并逐项积分,得到了自然对数的无穷级数,但是他没把这东西叫做「自然对数」的无穷级数。

这个叫法最早见于尼古拉斯·麦卡托在 1668 年出版的著作《Logarithmo-technia》,他独立发现了同样的级数,即自然对数的麦卡托级数,也称为牛顿-麦卡托级数

后来,在 1690-1691 年间,莱布尼兹给惠更斯的信中提到了自然对数的底,不过当时他用的字母是 \(b\),因为那时候就没有标准,大家都随意使用自己选择的字母来表示。

接下来,上篇提到的欧拉,从 1727 年开始频繁使用 \(e\) 来表示自然常数。

大约 1730 年,欧拉正式定义了互为逆函数的指数函数和自然对数但是今天这种 \(\ln(x)\) 形式的记号又要等到 1893 年皮亚诺提出才有了。

\[e^{x}=\lim _{n\rightarrow \infty }\left(1+{\frac {x}{n}}\right)^{n} \iff \ln(x)=\lim _{n\rightarrow \infty }n\left(x^{\frac {1}{n}}-1\right)\]

你看,完全是另外一条线的人,推导出了自然常数,然后最终定义了自然对数。理解这是怎么回事,也就理解了为什么 \(e\) 是「自然」的。

\(e\) 「自然」在哪里?

数学这个体系,从数字到运算,大部分是人类「定义」出来的。

哪怕是无理数,我们定义圆的周长比上直径是 \(\pi\) ,我们定义 2 的平方根是 \(\sqrt{2}\) 。

因为我们给了定义,所以它们很好理解——也所以,它们不是「自然」的。

反观 \(e\),它无需人类定义,就躺在那里,等着人类去「发现」:数学史上这样的情况并不多,何况,这个发现过程是从对数和指数两个方向,不断靠近的。

对数里的「自然」

纳皮尔、比尔吉、布里格斯这些人,他们弄对数的出发点是解决大数计算,需求就是对数字的覆盖面大,精度高。

他们构建整个体系,根据的是自己的经验:长期弄天文对运动的理解,代数到几何的映射等等。里面数字的选择,就更是这样了。

为啥纳皮尔要用 \(10^7\) 这么大的数字作为 \(\vec{\alpha\omega}\) 的长度?因为他「发现」,这样做出来的对数表数字密度才够。

当时的纳皮尔没法理解的是,自己凭经验做的这些操作,实际上是选择了 \(\textstyle (1-10^{-7})^{10^7}\) 作为底数:它非常接近于 \(\frac {1}{e}\)。

同样的,比尔吉也不知道,他选择的 \(\textstyle (1+10^{-4})^{10^4}\),非常接近于 \(e\) 。

这个反过来想很好理解。 比如以 2 为底的对数,逆运算其实是 2 为底的指数:

\[y = log_2 x \iff 2^x =y\]

因为 \(2^x\) 增长很快,\(2^{10}\) 就 1024 了,那么要查比如 798 的对数,可能就会查不到,这就是前面说的数字密度不够的问题。

很显然,要增加对数这边数字密度,就需要指数那边增长别太快,于是底数只能选比 1 稍微大一点的数。

所以,大家其实是沿着 \(\textstyle 1+{\frac {1}{10^n}}\) 在找,只是 \(n\) 取多大,就看当时人类手搓的上限了。

当 \(n\) 变得足够大,人们会发现什么呢?人们「自然」会发现 \(e\)

\[e=\lim _{n\rightarrow \infty }\left(1+{\frac {1}{10^n}}\right)^{10^n}\]

指数里的「自然」

\(e\) 被雅各布·伯努利在研究复利的过程中发现。

被发现而不是被定义,仍然是称它「自然」的一个主要原因。

但因为研究的是增长而不是大数计算,所以指数领域的 \(e\) 有更自然的部分:

\[e=\lim _{n\rightarrow \infty }\left(1+{\frac {1}{n}}\right)^{n}\]

这个式子其实说明了,\(e\) 是单位时间内翻倍增长所能达到的上限。

正好,自然界的增长,比如细胞分裂等等,都是单位时间倍增的。

这大概就是为什么小到葵花籽排列,蜗牛或贝壳的花纹,大到低压气旋甚至星系旋臂都是对数螺线的原因。

所以,雅各布·伯努利对对数螺线非常着迷,甚至要把它刻在自己的墓碑上。

只不过,那个时候的石匠没有你学习数学的条件,给他刻错了。

bernoulli_tomb.png
图 5. 伯努利想要死后继续倍增,结果被整成了等速

添了点儿讲数学的装备

自上次手搓地图之后,这次因为要讲数学,开始研究有没有类似于 Python 下面的 Manim 库那样的东西,结果发现并没有。

那就再手搓呗,这次选了 p5js,结果,结果是我大概理解了为什么没有一个类似于 Manim 这样的前端库了:

  • 要让数学公式,各种控件字体以及 p5js(背后是 canvas)良好的协作在各种尺寸的屏幕上,是很难的;
  • 其实哪怕是我不想引入 JQuery 的前提下要有一个像样的可以控制好样式和行为的 rangeslider 都很难,所以只能自己 fork 出来改一个
  • 所以 Manim 的输出大部分时候都考虑直接走 ffmpeg 生成视频肯定也是仔细考虑过的;

但还是大概知道怎么搞点线面体了,可能写个几年,添砖加瓦,我也最后可以得到个完整的库,就来控制整个版面?这不就是 Knuth 当年的路吗…