Hero of Alexandria · 约10–约70

海伦

他让数学去干活:丈量土地、从两头挖隧道、造一辆自己会走的车

S=s(sa)(sb)(sc)S = \sqrt{s(s-a)(s-b)(s-c)}
海伦公式 · 约 60 年,亚历山大里亚 · 只用三条边,不用量高

关于海伦本人,能确定的几乎只有一个日子。他在《测量仪》里讲怎样用同一次月食测两地的经度差,举的例子是一次在亚历山大里亚看到的月食;今人算出那是公元 62 年 3 月 13 日。于是他大约活在一世纪中叶,在亚历山大里亚工作——此前的学者曾把他放在前后几百年里任意一处。他的书读起来像讲义,条理清楚、例题很多,很可能是给学生或工匠用的。他写的东西一半是几何,一半是机器:《度量论》教怎样量面积与体积,《测量仪》教测量与挖隧道,《气动学》讲用水、气、火驱动的装置,《自动装置》讲一台自己会演戏的小舞台,《力学》讲杠杆、轮轴、滑轮、尖劈、螺旋五种简单机械,《反射光学》讲镜子。

这些书的命运各不相同。《气动学》在文艺复兴时被译成拉丁文和意大利文,里面那个汽转球——一个空心球,水烧开后蒸汽从两根弯管喷出,球就转起来——常被说成最早的蒸汽机,其实他只把它当成一件奇物;同一本书里还有投币五个德拉克马就自动出一份圣水的机器,以及生火之后神庙大门自己打开的机关。《力学》的希腊文原本失传,靠九世纪的阿拉伯文译本传下来。《反射光学》只有拉丁文译本,还被当成托勒密的书流传了几百年。最曲折的是《度量论》:中世纪以来只在别人的书里见过零星引用,1896 年才在伊斯坦布尔的一部抄本里被找到全本,海伦公式与他开平方的办法原原本本都在里面。

海伦肖像
《自动装置》第十三章,抄本第 202 叶正面 · 威尼斯马尔恰那图书馆 Gr. 516,十四世纪,Wikimedia Commons,公有领域。他没有画像传世,后世书里那幅大胡子半身像是想象画。这一页画的是一座小神庙的剖面:里面的酒神像连着暗管,通到藏起来的酒桶和奶桶,到了时候自己往外倒酒倒奶。图下是希腊文说明,右上角的 202 是叶码。

生平

  1. 约10
    约生于此时

    地点多半是亚历山大里亚。生卒年都是由那次月食倒推的大概。

  2. 约60
    《度量论》三卷

    面积、体积与分割。第一卷第 8 题是只用三边求三角形面积,紧接着讲怎样给 720 开平方。

  3. 62
    《测量仪》里的月食

    3 月 13 日,亚历山大里亚。他用它讲怎样由两地看到同一次月食的时刻差求经度差。这是他生平唯一的确切日期。

  4. 约62
    《测量仪》

    测量仪器与测量术:测不可到达的距离、从两头挖隧道、定引水渠的坡度,还有一台计里程的车。

  5. 约65
    《气动学》两卷

    汽转球、投币出圣水的机器、生火开门的神庙、会唱歌的机械鸟。

  6. 约65
    《自动装置》

    一台自己会走、会演一出酒神戏的小舞台;动力是沙漏里下沉的重物,程序写在绕轴的绳子上。

  7. 约70
    约卒于此时

    同样没有记载。

  8. 约850
    《力学》的阿拉伯文译本

    古斯塔·伊本·卢卡译。希腊文原本失传,今天读到的就是这一支。

  9. 1269
    《反射光学》拉丁文译本

    穆尔贝克的威廉译。此后几百年一直被当成托勒密的作品。

  10. 1575
    《气动学》拉丁文版

    科曼迪诺译,乌尔比诺出版。文艺复兴的工程师们从这里读到了他的机器。

  11. 1896
    《度量论》在伊斯坦布尔重现

    理查德·舍内在一部抄本里找到全本,1903 年出版。海伦公式的原始出处这才看得到。

展品厅

绝大多数展品都可以亲手把玩——这是本馆的立馆之本;少数以叙述为主的,做成故事展签。

镇馆之宝 · 亲手玩

海伦公式:只用三条边

量地的人手里往往只有三条边的长度。他给了一条不用量高的面积公式。

S=s(sa)(sb)(sc),s=a+b+c2S = \sqrt{s(s-a)(s-b)(s-c)}, \quad s = \frac{a+b+c}{2}

三角形面积是底乘高除以二,可在一块真实的地上,高是最难量的:要从一个角往对边作垂线,还得保证真的垂直。三条边却好量,拉一根绳子就行。海伦在《度量论》第一卷里给出一条只用三边的公式:先算半周长 s,把 s、s−a、s−b、s−c 四个数乘起来,再开平方,就是面积。他的例子是边长 7、8、9 的三角形:s = 12,12 × 5 × 4 × 3 = 720,面积就是 720 的平方根。他给出了完整的几何证明,绕了好几步:用内切圆把面积写成 s 乘内切圆半径,再借一组相似三角形把半径换成边长。这条公式大概不是他第一个发现的——十一世纪的比鲁尼说它出自阿基米德——但最早完整写下来、能读到证明的,是《度量论》。它的推广也在馆里:六百年后婆罗摩笈多给出圆内接四边形的面积 √((s−a)(s−b)(s−c)(s−d)),让第四条边缩成零,就退回海伦公式。今天它仍是计算几何里常用的一条,只是算浮点数时要小心——三角形很扁时,s 减去最长边会丢掉精度,数值分析的教材专门拿它当例子。

调三条边,看公式怎样一步步代入,并与底乘高对照

丈量一块三角形的地,最容易量到的是三条边,高却不好量。海伦在《度量论》里给了一条只用三边的公式: 先算半周长 s,再把 s、s−a、s−b、s−c 乘起来开平方,就是面积。他举的例子是 7、8、9: s = 12,12 × 5 × 4 × 3 = 720,面积是 √720——720 不是平方数,他于是接着讲怎么开方。 拖滑块换三条边,右边用「底 × 高 ÷ 2」对照,两边永远相等;三边拼不成三角形时,根号下就不再是正数。 六百年后婆罗摩笈多把它推广到圆内接四边形,第四条边取 0 就退回这一条。

开平方:取平均,再取平均

√720 开不尽。从 27 起,取 27 与 720/27 的平均,得 26⅚——一步就只差 1/36。

xn+1=12(xn+axn)x_{n+1} = \frac{1}{2}\left(x_n + \frac{a}{x_n}\right)

《度量论》算出 7、8、9 三角形的面积是 √720 之后,海伦没有停在根号上——量地的人要的是一个数。他写道:720 没有有理的平方根,那就这样求一个近似值。取离它最近的平方数 729,根是 27;拿 720 除以 27,得 26⅔;把 27 和 26⅔ 相加再取一半,得 26⅚。26⅚ 自乘等于 720 又 1/36,只差三十六分之一。如果要差得更小,就拿 26⅚ 代替 27,把同样的事再做一遍。这就是今天说的「海伦法」或「巴比伦法」:x 换成 x 与 a/x 的平均。几何上看得很清楚——面积为 a 的矩形,一边 x 太长,另一边 a/x 就太短,取两边的平均当新的边长,矩形就更接近正方形。它收敛得极快:每做一步,正确的位数大约翻一倍,从 27 出发,第二步误差已经小到十亿分之五。这个办法很可能比海伦更早:耶鲁大学藏的一块巴比伦泥板上把 √2 写成六十进制的 1;24,51,10,误差不到百万分之一,很可能就是这样算出来的。但明明白白写成步骤、并说可以一直做下去的,最早见于《度量论》。一千六百年后,它被认出是牛顿法用在方程 x² = a 上的特例,今天不少数值软件开平方,走的还是这条路。

720 开不尽。海伦的办法:找最近的平方数 729,根是 27;720 除以 27 得 26⅔; 27 与 26⅔ 取平均,得 26⅚。它自乘是 720 又 1/36,只差一点点;嫌不够,就拿 26⅚ 代替 27 再做一遍。 左边是这件事的样子:面积 720 的矩形,一边太长、一边太短,取两边的平均当新边,矩形一下子就接近正方形。 每做一步,对的位数大约翻一倍。一千六百年后,这被认出是牛顿法的一个特例; 今天不少数值软件开平方,用的仍是这一招。

光走最短的那条路

镜面上可选的反射点有无数个,光挑的那一点让总路程最短——那里入射角恰好等于反射角。

AP+PBABi=rAP + PB \geq AB' \quad \Longrightarrow \quad \angle i = \angle r

入射角等于反射角,希腊人早就知道。海伦在《反射光学》里问的是:为什么?他的回答是,光走的是最短的路。从 A 点出发经镜面反射到 B 点,镜面上可以选的反射点有无数个,每一个都给出一条折线;其中总长最短的那一条,恰好让两个角相等。证明只用一个镜像:把 B 翻到镜子另一侧得到 B′,镜面上任何一点到 B 和到 B′ 一样远,于是 A 经镜面到 B 的路程,就等于 A 到 B′ 的某条折线;两点之间直线最短,直线与镜面的交点就是答案,而在那一点,两个角自然相等。他由此得出一个信念:自然不走冤枉路。这是物理学里第一个「极值原理」——用「某个量取最小」来解释一条定律。一千六百年后费马把它从反射推广到折射:光穿过水面时会拐弯,路程不再最短,但「时间」最短,折射定律由此推出。再往后,欧拉、拉格朗日、哈密顿把这个念头推成了整个力学的写法——馆里好几件展品都是它的后代。今天渲染一面镜子,按的仍是这一条:反射方向由法线镜像得出。

光从 A 射到镜面再反射到 B,镜面上可以选的点有无数个。海伦在《反射光学》里证明: 光挑的那一点,恰好让总路程最短,而那一点上入射角等于反射角。 证法只用一个镜像:把 B 翻到镜子背后得 B′,PB 就等于 PB′,于是 AP + PB 最短, 就是 A 到 B′ 走直线的时候——直线与镜面的交点,两个角自然相等。拖 P 看总长怎样变, 打开「镜像」看那条直线。他由此说自然不做无用功;一千六百年后,费马把「最短路程」换成「最短时间」, 连折射也一并解释了。

绳子绕成的程序

重物下沉拉动绳子,绳子怎么绕在车轴上,车就怎么走——程序写在绳子上。

《自动装置》讲怎样造两种会自己演戏的小舞台:一种是固定的,门开门合、人偶轮番出场;另一种会自己开到观众面前,演完再自己退回去。驱动后者的是一辆小车,里面的机关简单得出奇。车里立着一根管子,装满沙子或小米,上面压着一个重物;沙子从底部小孔慢慢漏出,重物匀速下沉,拉动一根绳子,绳子另一头绕在车的驱动轴上。关键在于绳子怎么绕:顺着绕的一段,放出时让轴正转,车前进;反着绕的一段让轴反转,车后退;中间留一段松松地挂在木钉上、不碰轴,这一段放出时车就停着。于是一出戏的走位——前进多远、停多久、后退多远——事先就全写在绳子的绕法上了。换一种绕法,就是另一出戏。今天有人把它称作最早的「可编程」机器:动作的顺序与机器本身分开,存在一个可以更换的介质里,这正是后来的提花织机、打孔卡片与程序的共同思路。同一本书里的固定舞台也靠同样的绳子与重物:一段一段地拉动机关,让神庙门开、火点着、雷声响,全部按顺序自动发生。他的《气动学》里还有更多:投进一枚五德拉克马的钱币,杠杆一沉,就流出一份圣水;祭坛上生起火,空气受热膨胀把水挤进桶里,桶一沉,神庙大门自己打开。

海伦的《自动装置》讲怎样造一台会自己演一出戏的小舞台。其中那辆自己走的小车,动力是一个压在沙桶上的重物: 沙子从桶底小孔漏出,重物匀速下沉,拉着一根绳子。绳子绕在车轴上,绕法就是程序—— 顺着绕的一段让车前进,反着绕的一段让车后退,松松地挂在木钉上、不碰轴的一段让车停住。 清空之后自己绕一根试试。今天有人把它称作最早的可编程机器; 同一本书里,靠同样的绳子与重物,还能让舞台上的人偶依次登场、敲打、点火。

从山的两头挖隧道

绕着山走一圈直角折线,东西、南北各自加一加、减一减,隧道的方向就定了。

tanθ=西\tan\theta = \frac{\sum \text{北} - \sum \text{南}}{\sum \text{东} - \sum \text{西}}

《测量仪》前半本讲一台测量仪器——带水准和可转动瞄准尺的「迪奥普特拉」,后半本是一道道实用题:隔着河量宽度、量一座够不着的塔有多高、定引水渠的坡度。第 15 题是最有名的一道:一座山挡在两个入口之间,要从两头同时开挖一条直隧道,怎样保证两队在山里碰头?他的办法全靠直角与加减法:从入口 A 出发,沿山脚走一串互相垂直的直线段——每走一段,用测量仪定出下一段的方向与它垂直——一路记下往东走了多少、往西走了多少、往北走了多少、往南走了多少,直到另一个入口 B。东减西,北减南,就得到 A 到 B 在两个方向上的净差。隧道的斜率由这两个数定死:在 A 按这个比例往山里挖,在 B 按同一比例反方向挖,两条隧道就在同一条直线上相向而行。这其实就是在用坐标:把一条弯弯曲曲的路,拆成东西、南北两个分量分别求和——比笛卡尔早一千六百年,只是没人这么称呼它。实际挖起来,误差是大敌:一千米长的隧道,方向算偏一度,两头就会平行错开十七米。早他六百年,萨摩斯岛上的欧帕里诺斯隧道长一千零三十多米,就是从两头挖通的,碰头处的偏差很小——当年用的办法没有记载,海伦这一题是最早留下文字的一种。

山挡在两个入口之间,从两头同时挖能快一倍,可怎么保证在山肚子里碰上?海伦在《测量仪》里给的办法是绕着山走一圈直角折线:用测量仪定出直角,只走正东西、正南北的直线段,一路记下每段多长。 到了另一个入口,东西、南北各自一加一减,就知道两个入口之间往东差多少、往北差多少,隧道的方向随之定死: 两头都按这个比例往里挖。早他六百年,萨摩斯岛的欧帕里诺斯隧道长一千多米,就是从两头挖通的。 点「方向偏 1°」看误差:一千米长的隧道,方向算偏一度,两头挖出来就会平行错开十七米——测量仪上的刻度要多准,由此可见。

根号底下出现了一个负数

一道截头棱锥的题,算到最后要开 81 − 144 的平方。书上写的是 √(144 − 81)。

传到今天、挂在海伦名下的书里,有一部《体积论》,讲各种立体的体积怎么算(今人多认为它是后人据他的书汇编的)。其中一道题是截头的正四棱锥:下底边长 28,上底边长 4,侧棱长 15,求高与体积。按正常的算法,高的平方等于侧棱的平方减去上下底对角线一半之差的平方,数字代进去,是 81 减 144——负数。书上并没有停下来,而是写成 144 减 81,得 63,开平方后接着往下算。有人说这是人类第一次在纸面上碰到负数的平方根,比卡尔达诺早了一千五百年;也有人说,这不过是抄写者或作者顺手把减法的次序颠倒了,谁也没有意识到自己碰上了什么。两种说法都讲得通,因为这道题本身就不成立:侧棱 15 太短,上下底差得太多,这样的棱锥根本拼不起来——根号下的负数,正是在报告这件事。放在当时的数学里看,这个处理其实毫不奇怪。希腊人的数是线段的长度与面积的大小,没有负的长度,也就没有「负数的平方根」这种东西可以想;两百年后丢番图在《算术》里解出 4x + 20 = 4,也直接说这个解荒谬。负数要等到七世纪的婆罗摩笈多才有了运算法则,负数的平方根要等到十六世纪的卡尔达诺和邦贝利,才被当成可以一起算的东西——而那两个人碰上它的方式,和这道题几乎一样:公式算到一半,根号底下冒出一个负数,而最后的答案却是实实在在的。

故事展签故事展签:一道拼不起来的棱锥题,和一个没被认出来的虚数。

传承

他的工作没有留在十八世纪——每条链的终点,都是你今天正在使用的东西。

海伦公式婆罗摩笈多:圆内接四边形的面积计算几何与数值稳定的写法
取平均,再取平均牛顿法今天的数值求根
反射走最短的路费马:光走最省时间的路变分原理与整个分析力学
绕在轴上的绳子:顺序写在介质里提花织机与打孔卡片存储程序的计算机
绕山的直角折线把位移拆成两个分量求和坐标与今天的测量平差

语录

720 没有有理的平方根,我们就这样求一个极接近的根:离 720 最近的平方数是 729,它的根是 27。用 27 去除 720,得 26⅔;加上 27,得 53⅔;取一半,得 26⅚。26⅚ 自乘得 720 又 1/36,只差 1/36。若要差得更小,就用 26⅚ 代替 27,照样再做。

—— 《度量论》第一卷第 8 题 · 希思英译本转译。这是古希腊留下的少数几段手把手的数值计算

对空气与水的研究,一向为哲学家与工匠所看重:前者从理论上推究其力,后者从实际上运用其效。把气、土、火、水几种元素合在一起,有的装置满足了人生最迫切的需要,有的则只让人惊奇。

—— 《气动学》序 · 伍德克罗夫特英译本转译,大意

哲学研究里最大、最必需的部分是关于安宁的……而研究如何造投石器,恰恰能让人得到安宁:有了它,敌人来犯时不必害怕,没有来犯时也不必担心。

—— 《投石器》序 · 马斯登英译本转译,大意。一位写几何与玩具的人,也要替造兵器找一个哲学上的理由