Leonardo Pisano · 约1170–约1250

斐波那契

他带回欧洲的不是一串数,是一套写数的办法

Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2}
兔子问题 · 书里只占一页,名气却盖过了他真正的功劳

列奥纳多·皮萨诺生于比萨。父亲在北非的布吉亚(今阿尔及利亚贝贾亚)替比萨商人管海关,少年时把他带在身边学算账——他就在那里跟着一位穆斯林老师学会了印度—阿拉伯数字。此后他沿地中海走了一圈:埃及、叙利亚、希腊、西西里、普罗旺斯,每到一处就比一比当地的算法,结论是印度人那套最好。1202 年他写下《计算之书》,开篇是九个数字加一个叫 zephirum 的符号 0,接着七百页全是怎么拿它们做生意:换汇、分账、合金配比、按股分红、单利与复利。这不是一本数学论文,是一本给商人的手册——而它要顶掉的,是欧洲用了一千多年的罗马数字。

「斐波那契」这个名字他自己从没用过。他签的是 Leonardus Pisanus,偶尔加一句 Bigollo,那大概是「走南闯北的人」,也可能是「游手好闲的人」;Fibonacci(波那契之子)是 1838 年一位数学史家替他起的,而「斐波那契数列」这个叫法出自 1870 年代的卢卡斯。他自己看得最重的是 1225 年的《平方数之书》:那年腓特烈二世的宫廷向他下了几道战书,一道要找一个平方数,加 5 与减 5 之后仍然都是平方数——他给出 (41/12)²,并说清了这类公差为什么必被 24 整除。同一批题里还有一个三次方程,他报出一个六十进制的数,换成十进制是 1.3688081078,与真值在小数点后十位上分毫不差,而他一个字也没交代自己是怎么算的。

斐波那契肖像
《计算之书》抄本 f.124r · 佛罗伦萨国家中央图书馆 Magliabechiano 抄本,公有领域

生平

  1. 约1170
    生于比萨

    当时比萨是地中海最忙的港口之一,商船北至法兰德斯、南至埃及。

  2. 约1185
    随父赴布吉亚

    父亲在北非替比萨商人管海关。他在那里跟一位穆斯林老师学会了印度数字。

  3. 约1190
    游历地中海

    埃及、叙利亚、希腊、西西里、普罗旺斯。每到一处比一比当地的算法,结论是印度那套最好。

  4. 1202
    《计算之书》

    开篇九个数字加一个 0,接着七百页的换汇、分账与利息。欧洲的账房从此开始换笔。

  5. 1220
    《几何实践》

    测量、求积与开方,写给量地和造屋的人——同样是一本能照着做的书。

  6. 1225
    《平方数之书》与《花》

    腓特烈二世宫廷的几道战书。他自认最得意的是这一本,而不是那道兔子题。

  7. 1240
    比萨授予年金

    褒奖他「为本市与市民核算账目」。这是他生前留下的唯一一份官方记载。

  8. 约1250
    卒于比萨

    没有确切日期,也没有画像。留下来的只有几本书,和书里那套数字。

展品厅

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

镇馆之宝 · 亲手玩

把罗马数字换掉

同一道加法,两种写法:一种能在纸上列竖式,一种不能。

MCCXLVIII1248\mathrm{MCCXLVIII} \quad \longrightarrow \quad 1248

罗马数字的毛病不是难看,是没法算。它没有零,也没有位置——MCCXLVIII 里那个 C 是一百,挪到哪儿还是一百,所以列不出竖式。中世纪欧洲的账房实际是这么干的:数摆在算板上拨,纸上只记结果;会拨算板是一门手艺,学徒要跟师傅学好几年。《计算之书》教的是另一件事——在纸上算。有了零和位置,加减乘除变成一套谁都能照着做的手续,不再需要师傅。这就是为什么这本书改掉的是整个欧洲的生意,而不只是数学:它把算术从一门手艺变成了一套规则。

拨两个数,看同一道加法在两种记数法下各要走多少步

罗马数字8

  1. 两个加数MCCXLVIII + DXCVII
  2. 摊平减法式(IV→IIII、XL→XXXX…)MCCXXXXVIII + DLXXXXVII
  3. 并成一堆MCCXXXXVIIIDLXXXXVII
  4. 按大小排好MDCCLXXXXXXXXVVIIIII
  5. 进位:IIIII → VMDCCLXXXXXXXXVVV
  6. 进位:VV → XMDCCLXXXXXXXXXV
  7. 进位:XXXXX → LMDCCLLXXXXV
  8. 进位:LL → CMDCCCXXXXV
  9. 缩回减法式MDCCCXLV

位值制(他带回来的那套)5

  1. 两个加数1248 + 597
  2. 个位8 + 7 = 15,写 5,进 1
  3. 十位4 + 9 + 1(进位) = 14,写 4,进 1
  4. 百位2 + 5 + 1(进位) = 8,写 8
  5. 千位1 + 0 = 1,写 1
  6. 读出来1845

右边那一列,每一步只跟一位数打交道,规则一共就十条加法口诀——记熟了谁都能做。 左边那一列要认十三个符号、要会摊平减法式、要记住哪几个逢几进一,而且换一道题步骤全变。 真正的账房其实两边都不用:数摆在算板上拨,纸上只记结果。《计算之书》教的是在纸上算—— 算术从一门手艺变成了一套规则。

兔子问题

一对兔子,一年之后有多少对?这道题在书里只占一页。

Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2}

第十二章的一道练习:一对刚出生的兔子,满两个月起开始生育,此后每月生一对,不死不病;一年之后有多少对?答案是 377,而逐月的数目是 1、2、3、5、8、13……每一项都是前两项之和。抄本那一页的右侧边栏,逐月列着的正是这串数。这道题他并没有当真——它夹在一堆换汇与分账题中间,是拿来练手的;「斐波那契数列」这个名字要等到 1870 年代才由卢卡斯给出。它真正的分量在别处:这是欧洲最早写下来的递推数列,用前面的项定义后面的项。今天的程序员第一次见到「递归」,多半也是从它开始的。

6 个月: 成年 13 当月新生 821

成年的那一堆,恰好是上个月的全部;新生的那一堆,恰好是上上个月的全部—— 因为只有上上个月就在的兔子,这个月才生得出来。

把滑块推到第十二个月,看看一年之后是多少对。这道题不现实——兔子不死、不病、每月准时生一对——他自己也没当真,它是第十二章里的一道练手题。

相邻两项之比

一项除以前一项,一上一下,越夹越紧。

limnFn+1Fn=φ=1+52\lim_{n \to \infty} \frac{F_{n+1}}{F_n} = \varphi = \frac{1+\sqrt{5}}{2}

1/1、2/1、3/2、5/3、8/5、13/8……这串比值忽大忽小地夹住同一个数:(1+√5)/2 ≈ 1.618,黄金分割。开普勒 1611 年第一个把这件事写下来。为什么?把递推式两边同除以前一项,比值 r 满足 r = 1 + 1/r,也就是 r² = r + 1,正根恰是 φ。换个说法:φ 的连分数展开全是 1,这让它成为最难用分数逼近的无理数,而斐波那契数正是它最好的那些分数逼近。向日葵与松果上的螺旋数常常是斐波那契数,这有生长上的解释——新叶按黄金角错开最省地方;至于「黄金比例等于美」,那多半是十九世纪以后才附会上去的。

34 ÷ 21 = 1.6190476190,与 φ 差 1.01e-3。为什么会收敛?把递推式两边同除以前一项, 比值 r 满足 r = 1 + 1/r,也就是 r² = r + 1——正根恰是 φ。换个说法:φ 的连分数全是 1, 它是最难用分数逼近的无理数,而斐波那契数正是它最好的那些分数逼近。

三个成等差的平方数

找一个平方数,加 5 和减 5 之后还都是平方数。

(m2+n2)2±4mn(m2n2)(m^2+n^2)^2 \pm 4mn(m^2-n^2)

1225 年腓特烈二世的宫廷出的题。它等于在问:三个平方数能不能排成等差数列,而公差是 5 的倍数?他的答案是 (41/12)²——减 5 得 (31/12)²,加 5 得 (49/12)²。更要紧的是《平方数之书》里那套一般办法:取两个整数 m > n,公差取 4mn(m²−n²),中间那项取 (m²+n²)²,三个数必然都是平方数;而这样的公差一定被 24 整除,所以公差取 1、2、3、4 时无解。他还断言这个公差本身永远不可能是平方数——四百年后费马用无穷递降法证明了它,那是费马留下的唯一一个完整证明。这本书他看得比《计算之书》还重,可几乎没人读。

公差 C = 4mn(m²−n²) = 720
是这个数也就是
中间那个 − C961312
中间那个1681412 = (m²+n²)2
中间那个 + C2401492

三个都是平方数,不是巧合:4m²n² + (m²−n²)² = (m²+n²)²,所以 (m²+n²)² ± 4mn(m²−n²) = (2mn ± (m²−n²))²。

C ÷ 24 = 30这样的公差一定被 24 整除,所以公差取 1、2、3、4 时无解——他在《平方数之书》里证了这一条。

C 还被 12² 整除:三个数同除以 144,就成了 (41/12)25——加 5 和减 5 之后仍然都是平方数((31/12)² 与 (49/12)²)。 这正是 1225 年腓特烈二世宫廷那道题的答案。

题面是:找一个平方数,加 5 和减 5 之后还都是平方数。它等于在问,三个平方数能不能排成等差数列。 斐波那契不但给出了 (41/12)²,还给出了造出全部这类三元组的办法,并断言这个公差本身永远不可能是平方数—— 四百年后费马用无穷递降法证明了它,那是费马留下的唯一一个完整证明。

那道三次方程

x³+2x²+10x=20。他报出的数,小数点后十位一位不差。

x3+2x2+10x=20x^3 + 2x^2 + 10x = 20

同一批战书里的另一道。他先证明这个根不是有理数,也不是欧几里得《原本》第十卷列出的任何一种无理数——换句话说,尺规作不出来,当时没有任何公式写得出它。然后他给了一个六十进制的数:1;22,7,42,33,4,40。换成十进制是 1.3688081078…,与真值在小数点后第十位之内完全一致,到第十一位才差开。这个精度放在 1225 年是骇人的,而他一个字也没说自己怎么算的。今天一般认为他用的是某种逐位逼近——与八百年后计算机上跑的求根法,是同一条路子。

夹出来的11.000000000000

他 1225 年报的1;22,7,42,33,4,401.368808107853

区间宽 1.00e+0

每定下一位,夹住根的区间就缩到原来的六十分之一。他先证明了这个根既不是有理数, 也不是《原本》第十卷列出的任何一种无理数——尺规作不出来,当时没有公式写得出它; 然后他报出了上面那六位。

佛罗伦萨禁止过阿拉伯数字

好用是一回事,被接受是另一回事——这中间隔了三百年。

1299 年,佛罗伦萨的钱币兑换商行会立下章程:账簿一律用罗马数字或者把数字写成文字,不得使用那些「新数字」。理由很实在——0 添两笔就成了 6 或 9,1 前面加一道就成了 7,而罗马数字改不动。银行家要的从来不是算得快,是账改不了。此后两百多年,欧洲的算学书里并存着两派:算盘派在板子上拨算筹,算法派在纸上列竖式,互相看不起。1503 年那本《哲学珍宝》里有一幅著名的木刻,画的正是两人隔桌比试,中间站着算术女神——而她裙子上绣的是印度数字。真正让位值制赢下来的是印刷术与复式记账:书便宜了,账目要逐笔核对了,纸上算才终于比板上拨划算。斐波那契写下那本书时,离这一天还有三百年。

故事展签故事展签:一套明显更好用的东西,为什么会被抵制三百年。

传承

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

《计算之书》与位值制欧洲的账房与复式记账今天每一台计算器上的十个键
兔子问题递推数列算法里的递归与动态规划
相邻两项之比趋于黄金分割连分数与最难逼近的无理数叶序:发育生物学里的另一种图案
《平方数之书》同余数问题与费马的无穷递降椭圆曲线上的有理点
《花》里的逐位逼近数值求根今天求解器里的迭代法

语录

这九个印度数字是:9 8 7 6 5 4 3 2 1。用它们,再加上阿拉伯人称为 zephirum 的那个符号 0,任何数都写得出来。

—— 《计算之书》开篇第一句,1202;他是从大到小列的

在那里,通过印度人的九个数字,我受到一种绝妙的教导;这门学问让我喜欢得胜过一切。

—— 《计算之书》序言,忆及少年时在布吉亚学算,1202

兹念及列奥纳多·比戈洛之博学与勤勉,其为本市与市民核算账目多有劳绩……

—— 1240 年比萨共和国授予年金的法令;这是他生前留下的唯一一份官方记载