朱世杰,字汉卿,号松庭,燕山(今北京一带)人。关于他,史书里没有传——没有籍贯考、没有师承记、没有官职录。今人知道的一切,几乎全来自他自己两本书卷首的几篇序。
序里留下两句要紧的话。一句说他「周游湖海二十余年」,即以数学游学各地,靠授徒为生;一句说他讲学时「踵门而学者云集」,上门求学的人多得挤不开。这两句合起来,就是一个以教书为业、走遍南北的布衣算学家。
他留下两本书。《算学启蒙》(1299)三卷二十门二百五十九问,从九九歌诀一路教到天元术,是一本从零开始的教科书;《四元玉鉴》(1303)三卷二十四门二百八十八问,讲四元术、垛积与招差,是他一生的顶点。
本册分五幕:第一幕讲「一个未知数怎么写在纸上」(p.6—p.12);第二幕讲从一元到四元(p.13—p.19);第三幕讲数一堆东西——垛积(p.20—p.26);第四幕讲差分表——招差(p.27—p.33);第五幕讲这本书的身后(p.34—p.40)。暗线一句:没有符号的代数,靠位置记幂次。
三层读法照旧:故事层无需预备知识;数学层用到平方、开方与多项式乘法(p.7—p.9、p.14—p.16、p.21—p.23、p.28—p.30);注疏层给出卷次、门名与版本,逐页可查。
元代的燕山,是旧金的中都、新元的都城。城里有官学、有书院、有算学,也有大量替衙门算钱粮、替商号算账目的识字人。算学在这座城里不是清高的东西,是一门手艺。
朱世杰从这里出发,往南往北走了二十多年。序里那句「周游湖海」,用今天的话说,是带着一本书和一肚子题,从一个城走到另一个城,收学生、讲算法、换盘缠。这种身份在元代有个名字,叫「游士」。
游士的学问有一个特点:必须能当场讲清、当场演算、当场让人学会。讲不清的,学生下一站就走了;算不出的,主家下次不请了。这种压力塑造了他的写法——他的书里题多、步骤细、口诀密,几乎每一门都从最笨的算法开始讲起。
也正因如此,他的两本书分工极清楚:一本给初学的人,一本给已经会算的人。前者是门槛,后者是屋顶。
《算学启蒙》成于 1299 年。全书三卷二十门,从「九九八十一」的歌诀开始,经过乘除、开方、面积体积、比例、堆垛,一直讲到天元术。这是一条完整的坡道:一个只认得字、不会算的人,跟着做完二百五十九道题,就能列方程。
《四元玉鉴》成于 1303 年,四年之后。三卷二十四门二百八十八问,开篇就是「四元细草」,直接上四个未知数。这两本书之间的落差极大——不是从浅到深,是从地到天。
为什么四年能跨这么远?因为他把二十年的游学所得,分成两份装:能教人的放前一本,自己想通的放后一本。教科书的写法是「把路修平」,专著的写法是「把路走到头」。同一个人,两种笔法。
《四元玉鉴》这个书名也有讲究。「玉鉴」是玉制的镜子,取「照见」之意;「四元」指天元、地元、人元、物元四个未知数。用四面镜子照一道题——这是他对这套方法的自我形容。
先看这张方阵。它是本册的枢纽,也是全书最难解释、又最容易看懂的一样东西。
把纸画成方格。正中一格写常数项,四个方向各管一个未知数:天元、地元、人元、物元。从中心往外走一格,幂次升一次;走两格,升两次。同一个方向上的一串格子,就是同一个未知数的各次幂。
换句话说:幂次不写在符号上,写在位置上。今天写 x2y,靠右上角一个小数字和两个字母并排;他那里没有字母、没有上标,只有一张方格纸上离中心两格、向东一格的那么一个空位。
这套办法的代价是:一张纸最多管四个未知数——因为纸只有四方。四个以上,位置就不够用了。这是四元术的天花板,也是它后来失传的原因之一。第一幕先从一个未知数讲起。
十三世纪的中国算书里,几乎每一道列方程的题都从一个句子开头:「立天元一为某某。」
这句话的意思是:现在假定所求的那个量为未知,把它记作「天元」。「立」是设立,「一」是一个,「为」是作为。合起来是一句宣告——不是计算,是给一个还没算出来的东西先起个名字。
它的位置在整道题的最前面,甚至在写已知条件之前。这个次序很有意思:先有名字,再有条件。今天写「设所求为 x」,也是这个次序。八百年过去,这一步没变。
但名字只是名字,真正的问题是:这个名字写在纸上,长什么样?没有字母,没有上标,没有等号——「x2 加三倍的 x」这一串,要用什么形式落笔?
答案不是画一个符号,而是摆一个位置。下一面开始讲这件事。
天元术的写法和今天完全不同:它把一个多项式写成一叠横条,从下往上排,每一层管一个幂次。
以 2x3−3x2+4x−5 为例。它在一张纸上占四层:
最下一层记 −5,这一层叫「太」,即常数项。上一层记 4,这一层旁注一个「元」字,因为它管 x 的一次方。再上一层记 −3,管 x2。最上一层记 2,管 x3。
注意那个「元」字。它只在一层出现一次,标出「一次项在这里」,其余各层靠距离推算:往上走一格,幂次加一。所以整叠条子只需要一个标记,就能读懂全部幂次。
这套写法有个好处:乘一个 x,就是把整叠条子往上挪一格;除以 x,往下挪一格。多项式乘法变成「挪位置 + 逐层相加」,两步都能用手做,不需要记任何公式。
列方程的全过程,可以只用一道题看明白。原题是这样的:「今有直田,积八百六十四步,只云长阔共六十步,问长阔各几何。」
第一步,立天元。「立天元一为长。」——设长为 x。
第二步,把另一量用天元表示。长阔共六十,故阔为 60−x。在这一步,古人不用「代数式」这个词,只说「以减六十,余为阔」。
第三步,按题意写积。x(60−x)=864。乘开:60x−x2=864。
第四步,归于一边。把右边搬到左边,使一边为零:「x2−60x+864=0」。这一步古书叫「开方式」——不是「方程」,而是「可以开方的一个式子」。
答数:x=36 或 24。取长为 36,阔为 24。验:36×24=864,36+24=60。两道条件都对。
四步里最要紧的是第四步。把一切搬到一边、令另一边为零,这一步把「两个式子相等」变成「一个式子等于零」,从此只需要处理一个对象。今天的「移项归零」写法,源头就在这里。
式子列出来了,还得把根算出来。古法叫「开方」,宋元算书里的做法是「增乘开方法」——一层一层往下剥。
拿刚才的 x2−60x+864=0 试。先估十位:三十。代入得 900−1800+864=−36,小于零,说明根比三十大。四十:1600−2400+864=64,大于零,说明根在三十与四十之间。
再估个位。逐个试:三十一得 961−1860+864=−35;三十五得 1225−2100+864=−11;三十六得 1296−2160+864=0。正好为零,根是三十六。
这套「估值—代入—修正」的循环,和今天的竖式开方是同一件事,只是古人把它写成一列竖排的筹式,每一步减掉一层,剥到最后一层只剩一个数,那个数就是根。「增乘」二字,指每一步都在乘一个「从」数(即估出的那一位)。
开不尽怎么办?古人另有办法:不写小数,写「不尽」。比如 x2+5x=100,正根是 (−5+√425)/2≈7.81,古书会记作「七步八分有奇」——承认它开不尽,给出一个够用的近似,然后收笔。这不是偷懒,是对「答案要到什么精度」这件事有清醒的判断。
为什么中国算学家宁可摆位置,也不发明符号?这个问题看似已经有答案,其实还差一半。
上一个答案关于「读者」:符号对算账的人是门槛。这一册要补上第二个答案,关于手。
宋元算学家做运算,用的不是笔,是筹——一根根小竹棍摆在案上或纸上。摆筹这件事本身就是「用位置表数」:一根筹在个位是 1,挪到十位就是 10。位置表数,是他们从小学会的第一个动作。既然如此,位置表幂次就是顺水推舟:反正手已经在挪了。
而符号是另一路。写 x2,靠的是把一个小数字抬到右上角——这是笔的动作,不是手的动作。要用这套办法,先得有一张好纸、一支好笔、一种对「上标」的共识。这三样在十三世纪的中国都不缺,但都不在算学家的案头。
所以这不是聪明与否的差别,是工具路径的差别。走位置这条路的,运算快、上手快、但装不下太多未知数;走符号那条路的,起手慢、但可以无限延长。两条路各有各的尽头。
把上一面的话推到底,会得到一个不太直观的结论:一个记法系统,就是一种语法。
「2x3−3x2+4x−5」这一串,之所以能读,是因为有两条规则:字母表未知量,上标表幂次,加减号表连接。规则一改,这串就散架。它不是一个「东西」,是一句话。
天元式的四层横条也一样:位置表幂次,一个「元」字定基准,层间空白表「这一层没有」。规则同样严格,只是规则写在版面上,不写在字里。
两种语法的差别,可以一句话说清:字母记号是一维的,可以向左向右无限延长;位置记号是二维的,受纸的四边限制。一维可以写一百个未知数,二维最多写四个。
这就解释了本册后半的一切:为什么四元术止于四元,为什么它会失传,为什么后来的数学走回了符号那条路。不是位置记法不好,是它的版面用完了。
第一幕讲起点:一个还没算出来的量,怎样先有一个名字、再有一个位置。
起句。「立天元一为某某」——先起名,后列条件。
记法。一叠横条,最下为常数(「太」),上一层标一个「元」字;往上走一格,幂次加一。
列式。立元、表示、写积、归零,四步得开方式 x2−60x+864=0。
求根。增乘开方,估值、代入、剥层,得 36;开不尽则记「有奇」。
暗线。符号是笔的动作,位置是手的动作;位置装得下四个未知数,装不下第五个。
天元式:把 2x3−3x2+4x−5 写成四层,自下而上为 −5|4|−3|2,第二层标「元」。
直田题:x(60−x)=864 ⟹ x2−60x+864=0 ⟹ x=36,阔 24。
验:36×24=864;36+24=60。
天元术管一个未知数。一个问题里有两个、三个、四个未知数,怎么办?
朱世杰的答案是:给它们各起一个名字,各占一个方向。天元、地元、人元、物元——四元。这四个名字不是随便凑的:「天、地、人」是古书里现成的三才,「物」补上第四,凑成「万物」。一套宇宙论的名目,被借来当四个变量的标签。
《四元玉鉴》开篇就是四道示范题,编者称之为「四元细草」——细草是「详细演算过程」的意思。第一道叫「一气混元」,题面极短:「今有黄方乘直积得二十四步,只云股弦和九步,问勾几何。」
短到几乎看不懂。但把它翻成今天的语言,就是三个未知数、三个条件的方程组——一道真正的三元题,藏在一句二十九个字的古文里。这一册第三面会把它彻底拆开。
先要弄清的是:四个名字摆在纸上,究竟怎么摆。
四元术的全部机关,可以一句话说完:把一张方格纸当成坐标系,格子的坐标就是各项的幂次。
中心一格写常数项。向东走一格,x 的幂次加一;向西走一格,减一。向北走一格,y 的幂次加一;向南走一格,减一。斜着走,两个幂次同时变。
于是每个格子有一个「坐标」,这个坐标就是一项的幂次对;格子里的数,就是这一项的系数。整个多项式不是写出来的,是「占地方」占出来的。
举一个二元的例子:x2y+3xy−2y+5。五个项,五个格子:5 在中心;−2 在中心正北一格(y 的一次);3 在东北斜一格(xy);1 在再往东两格、往北一格的交叉处(x2y)。
这就是为什么它装不下第五个未知数:一张纸只有四个方向,第五个元无方向可去。不是算法不够,是版面不够。
一个方程里有两个未知数,解不出来;要解,必须先把它变成只有一个未知数的方程。这个「变」的过程,朱世杰叫「互隐通分,剔而消之」——两句都是行话,意思是:让一个元在两式之间隐去,剩下的式子通分对齐,再剃掉一层。
最简单的做法是直接相减。看这两式:
x2+y=7 与 x+y=5。
两式都含一个 y,一减就没了:x2−x=2,即 x2−x−2=0,得 x=2 或 −1。取 x=2,代回第二式得 y=3。验:4+3=7,2+3=5。都对。
难处在于:两式里 y 的次数往往不一样。这时不能直接减,得先乘一个因子把它对齐。比如一式含 y2、二式含 y,就把二式乘一个 y,让两边都出现 y2,再相减——一次减掉一层,剩下的式子次数低了一级。反复减,直到 y 彻底消失。
四个元也是这样,只是要消三次:先消物元,再消人元,再消地元,最后剩一个天元的一元高次式。这就是「四元术」的全貌——一条把四个未知数逐个剃光的流水线。
把这道题拆开。「黄方乘直积得二十四步,只云股弦和九步,问勾几何。」
设勾 a、股 b、弦 c。「黄方」是勾股形内切圆的直径,等于 a+b−c;「直积」是勾股相乘 ab。两条条件写成式子:
(a+b−c)·ab=24, b+c=9。再加上勾股关系 a2+b2=c2。
消元。由 b+c=9 知 c−b 与 b 同由 b 定;而勾股关系可写成 a2=(c−b)(c+b)=9(c−b)。令黄方为 k,则 c−b=a−k,故 k=a−a2/9。
再把 b 用 a 表示:b=(9−(a−k))/2=(81−a2)/18。代入 k·ab=24:
a2(81−a2)(9−a)=3888,去括号得开方式 a5−9a4−81a3+729a2−3888=0。
五次。开之得 a=3(代回验:243−729−2187+6561−3888=0)。于是 b=4,c=5。验题:黄方 3+4−5=2,直积 12,相乘 24;股弦和 9。全对。
二十七个字,消出一元五次式,答案是最小的那组勾股数。这道题是全书的第一道,也是全书的名片。
四元术为什么停在四元?这个问题有两层答案,一层是技术的,一层是处境的。
技术的:一张纸有上下左右四方,每个方向对应一个未知数,于是最多四元。要五元,得再找一个方向——纸是平的,没有第五个方向。除非把纸折起来,或者叠成两层,而那就不是当时能操作的筹式了。
处境的:四元已经够用。宋元算学遇到的问题——田亩、赋役、营建、堆垛、测量——最多牵涉三四个量。为一个用不上的第五元去改造整套记法,不划算。
这两个答案放在一起,正好说明了本册的暗线:一套记法的形状,决定了它能装多少东西。位置记法的形状是二维的,所以它的容量是四;字母记法的形状是一维的,所以它可以一直往后排——今天的方程里有几十个未知数,靠的不是更聪明的脑袋,是更长的纸。
这不是说古人输了。一维记法写起来慢、读起来要靠约定;二维记法一眼就能看出各项的次数分布,看整式的「形状」比看一列符号快得多。两种记法各有所长,只是其中一个能长大,另一个长不大。
《四元玉鉴》成书于 1303 年。此后一百多年,它还有读者;再往后,读者就没了。
明代最畅销的算书是《算法统宗》(1592),作者程大位。这本书把日用算题编成歌诀,销路极好,但天元术的细草被整段略去——因为编者看不懂,也因为买家不需要。同时代的顾应祥给《测圆海镜》作「分类释术」,干脆把「立天元一」那部分删掉,只留题目与答数。他不是删错了,他是诚实地承认:这一层我读不进去。
于是出现一个奇特的现象:书在,题在,答案在,方法没了。四元术成了一门「有答案没解法」的学问。清代学者后来把这段叫「绝学」。
恢复要到十九世纪。李锐、沈钦裴先后钻研,罗士琳在 1836 年完成《四元玉鉴细草》,把二百八十八问逐一补出演算过程。他靠的不是新发现的抄本,而是拿仅存的题目和答案反推方法——像看着一座空屋的梁柱痕迹,重新把屋顶架起来。
这就带出一个不太好受的结论:一门学问能不能传下去,不取决于它有多深,取决于有没有人能把它的「怎么算」复述一遍。
第二幕讲扩充:从一个未知数到四个未知数,靠的不是新算法,是新版面。
四元。天、地、人、物,各据一方;常数居中。
布算。格子的坐标就是幂次对;系数写在格子里,幂次靠距离。
消元。互隐通分、剔而消之:对齐次数,相减降层,逐个剃光。
一气混元。二十七个字的三元题,消出五次开方式,勾三步。
天花板。四方之限,故止于四元;明代失传,清代反推复原。
布算:x2y+3xy−2y+5 占四格,坐标为 (2,1),(1,1),(0,1),(0,0)。
消元小例:x2+y=7、x+y=5 ⟹ x2−x−2=0 ⟹ (2,3)。
一气混元:(a+b−c)ab=24、b+c=9、a2+b2=c2 ⟹ a5−9a4−81a3+729a2−3888=0 ⟹ a=3。
元代北方有一种常见的活计,叫「垛」。草要垛起来防雨,果子要码起来待售,箭要捆成束入库,粮要囤成堆点数。垛的形状有讲究:堆得太陡会塌,太缓占地方。
于是出现一类极实际的问题:给定底层的数目,这一垛一共有多少?
不许一个一个数——数起来太慢,而且垛里面数不到。必须从底层数目直接算出总数。这就是垛积术。
它看上去是一道算术题,实际上是一件更微妙的事:把「一层一层」的加法,压缩成「一步到位」的乘法。一垛十层,逐层加要加十次;有了公式,乘三次就完。
这类题在《四元玉鉴》里占了好几门:「茭草形段」讲草垛,「果垛叠藏」讲果垛,还有讲箭捆的、讲圆坛的。一个以「四元」闻名的人,花了大量篇幅讲堆东西——这本身就很说明他的兴趣在哪里。
先看两种最简单的垛。
一、茭草垛。草束一层层往上码,每层比下一层少一束,最上一层一束。第 k 层(自上往下数)有 k 束,共 n 层。总数是
1+2+…+n=n(n+1)/2。
十层得 55 束;六层得 21 束。这个公式中学生都认识,古书叫「茭草垛」,是全部垛积的起点。
二、三角垛。果子码成三角形:第 k 层排成一个边长 k 的正三角,共 k(k+1)/2 枚。总 n 层为
Σk(k+1)/2=n(n+1)(n+2)/6。
十层逐层是 1, 3, 6, 10, 15, 21, 28, 36, 45, 55,相加得 220;用公式:10×11×12/6=220。六层:6×7×8/6=56。
这里藏着一个很要紧的对应。茭草垛十层的总数是 55;而三角垛第十层恰好也是 55 枚。这不是巧合——三角垛的第 n 层,正是茭草垛前 n 层的总数。
换成一句话说:把茭草垛每一层的累计值,当成另一垛的一层,就得到三角垛。这个动作,古书里叫「垛上垛」。第三幕后面所有的公式,都是这一招的反复使用。
三、四角垛。第 k 层排成边长 k 的正方形,共 k2 枚。总数为平方和:
Σk2=n(n+1)(2n+1)/6。十层:10×11×21/6=385。
四、岚峰垛。第 k 层为 k(k+1)(k+2)/6 枚——这是四面都成三角的堆法,从上往下看是尖顶。总数为
Σk(k+1)(k+2)/6=n(n+1)(n+2)(n+3)/24。十层:10×11×12×13/24=715。
十层逐层是 1, 4, 10, 20, 35, 56, 84, 120, 165, 220,相加正好 715。看出对应了没有?最后一层的 220,正是三角垛十层的总数。又是同一个动作:把三角垛的累计值当一层,再垛上一次。
把四个公式并排,规律就露出来了:
n(n+1)/2;n(n+1)(n+2)/6;n(n+1)(n+2)(n+3)/24。
后一个总比前一个多乘一个因子、多除一个数:先 ×(n+2)÷3,再 ×(n+3)÷4。往上叠一层,就多乘一项、多除一级。这条规律背后是一张数表,下一面讲。
四角垛的式子长得不一样(2n+1 而不是 (n+2)),因为它堆的是「方」不是「三角」,不在这一条链上。它可以由三角垛拼出来:k2=2·k(k−1)/2+k,即一个正方形点阵 = 两个三角点阵 + 一条线。
《四元玉鉴》卷首有一张图,叫「古法七乘方图」。图上是一列一列的数,排成三角形:
最上一行一个 1;第二行 1、1;第三行 1、2、1;第四行 1、3、3、1;第五行 1、4、6、4、1;往下依次是 1、5、10、10、5、1;1、6、15、20、15、6、1;1、7、21、35、35、21、7、1。
这就是今天说的二项式系数表。西方叫帕斯卡三角,中国叫贾宪三角或杨辉三角。朱世杰在书里明写「古法」二字——他知道这不是自己的发明,所以标了出处。这一点常被忽略:一个能开四次方、五次方的人,肯在一张图上注明「这是老法子」。
这张图和垛积的关系,藏在除法里。三角垛公式 n(n+1)(n+2)/6 的系数 1/6,正是图上第三行(1、3、3、1)之和除以 3!;岚峰垛的 1/24,是第四行之和 8 除以 4! 再折出的结果。垛积公式的分母,一个个都从这张表里来。
更直接的用法是「乘方开方」。用这张表,可以把 (a+b)4 一眼展开成 a4+4a3b+6a2b2+4ab3+b4;反过来,开四次方时也能照着表一层层剥。一张表,两用。
垛积术不是坐在书房里想出来的。它的问题来自三个地方:驿站的草料场、码头的果行、兵营的箭库。
这三处有个共同点:东西堆得整齐,但不好数。草垛外面看得见,里面数不到;果行要按堆论价,不能拆开数;箭捆按束入库,束又按捆码放。谁能在不拆垛的情况下报出总数,谁就有用。
朱世杰走了二十多年,从燕山到江南,这类问题他一定见过无数次。他的书里题面写得极土——「今有茭草一垛」「今有果子一垛」——不用一个雅词。这不是文笔差,是他把问话的人原样写进了书里。
这一点与他讲四元术时的笔法形成对照:讲四元,他用「立天元一」「互隐通分」这类行话,读者是会算的人;讲垛积,他用「底阔几束」「高三层」这类市井话,读者是管事的人。同一个人,两副嗓子。
这也解释了为什么《四元玉鉴》里垛积占的篇幅那么大:四元术是给后人看的,垛积术是给当时人用的。
把四角垛的公式和一件后来的事放在一起看,会看见一条很长的线。
四角垛十层的总数是 385。而如果把 x2 从 0 到 10 连续地积起来,得到 1000/3≈333.33。两个数差 51.67。
差在哪里?垛是一格一格的,曲线是一寸一寸的。垛积算的是十个竖条的面积之和,每根竖条宽一格、高 k2,边缘是锯齿;积分算的是曲线下的光滑面积,锯齿被削平了。锯齿多出来的那一块,正是那 51.67。
这条差别在数学上有个名字:离散与连续。宋元算学家站在离散这一边——他们数的是实在的东西,一个一个,整整齐齐;三百年后的欧洲人站在连续那一边——他们量的是可以无限细分的东西。
但两边的公式长得几乎一样:Σk2 的主项是 n3/3,∫x2dx 是 x3/3。那个 1/3 是同一个 1/3。这不是巧合:把格子越分越细,垛积公式的「锯齿项」就越来越不重要,剩下的主项正是积分。
第三幕讲压缩:把一层一层的加,压成一次一次的乘。
四种垛。茭草、三角、四角、岚峰,各有各的公式。
一条链。后一个公式总比前一个多乘一项、多除一级。
一张表。古法七乘方图:垛积公式的分母从这张表里来,乘方开方也靠它。
题的来处。草料场、果行、箭库;题面用市井话,不用行话。
离散与连续。十层得 385,积分得 333.33;差的是锯齿,同的是 1/3。
茭草:n(n+1)/2,十层 55。
三角:n(n+1)(n+2)/6,十层 220。
四角:n(n+1)(2n+1)/6,十层 385。
岚峰:n(n+1)(n+2)(n+3)/24,十层 715。
《四元玉鉴》里有一门的名字很怪,叫「如象招数」。意思是:像招兵那样数。
招兵是怎样数?第一天来一批,第二天来的比第一天多,第三天比第二天再多,而且「多的那部分」本身也在增多。于是人数不是一个等差列,是一个「差又在变」的列。
这类数列在现实中到处都是:驿站逐年增加的驿马、河工逐年加派的夫役、仓廪逐月递减的存粮、按年累积的利息。它们都不是一次增长,是增长本身在增长。
要报出总数,光会等差求和不够,得有一件更锋利的工具。朱世杰的办法是:不看数本身,看数之间的差。第一层差、第二层差、第三层差——一直做到某一层差变成常数为止,然后用常数回头算出每一项与总和。
这套办法叫「招差术」。它是本册技术含量最高的一部分,也是后来最被低估的一部分。
招差术的全部操作,就是反复做减法。
取一串招兵的数:第一日 3 人,往后每日增加的人数本身每日多一人。于是十日的人数依次是
3, 7, 12, 18, 25, 33, 42, 52, 63, 75。
现在做第一层差(后项减前项):4, 5, 6, 7, 8, 9, 10, 11, 12。
不是常数。再做第二层差:1, 1, 1, 1, 1, 1, 1, 1。成了常数。
停。这一串数由三层信息完全决定:首项 3、第一层差的起点 4、第二层差的常数 1。三个数,定住了整串。
这不是巧合。「差分层层减到常数」这件事,正是「这个数列由一个多项式生成」的标志;减到第几层成常数,那个多项式就是几次的。上面这串减两层就平了,所以它是二次的。
古书把第一层差叫「上差」,第二层叫「二差」,第三层叫「三差」,第四层叫「四差」。「如象招数」的原题用到四差,即四次多项式。
有了三个数,怎么求前 n 项的和?招差术给的公式是:
S(n)=n·Δ1+C(n,2)·Δ2+C(n,3)·Δ3。
这里 Δ1 是第一层差的首项,Δ2 是第二层差的常数,C(n,2)=n(n−1)/2 是从 n 个里取两个的取法数。系数不是凑出来的,是「垛」出来的——每一项前面的 C,正是三角垛、岚峰垛那些数。
代入本例:Δ1=4,Δ2=1,而首项 3 是 n 项各自的本底,故
S(n)=3n+4·n(n−1)/2+1·n(n−1)(n−2)/6。
取 n=10:30+4×45+120=30+180+120=330。
检验:把十项直接相加,3+7+12+18+25+33+42+52+63+75=330。对上了。
再看 n=4:12+4×6+4=40;直加 3+7+12+18=40。也对。
三个数,一条公式,任意层数。这就是招差术的本事:从有限几个观察值,推出整串数。今天把这个叫「插值」。
再看一个四差的例子,用最朴素的一串数:1, 16, 81, 256, 625——就是 14, 24, 34, 44, 54。
做差,一层层往下:
一层:15, 65, 175, 369。二层:50, 110, 194。三层:60, 84。四层:24。
减四层,得常数 24。这个 24 有个身份:4!=24。四次多项式的四阶差分恒等于「首项系数 × 4!」,首项系数是 1,所以是 24。差分层数、常数、阶乘,三样扣在一起。
现在把这套差数写成公式(Δ1=1, Δ2=14, Δ3=36, Δ4=24):
f(n)=n+14C(n,2)+36C(n,3)+24C(n,4)。
验 n=4:4+84+144+24=256,正是 44。验 n=3:3+42+36=81。两处都对。
再往前走一步,把公式求和(这一步是招差术与垛积术合流的地方):
Σk4=C(11,2)+14C(11,3)+36C(11,4)+24C(11,5),取到第十项得 55+2310+11880+11088=25333。
直加检验:1+16+81+256+625+1296+2401+4096+6561+10000=25333。四次方的前十项和,一个不差。
招差术和垛积术看起来是两件事,其实立足点完全不同。
垛积术从「形」出发:先知道垛是什么形状,再用几何直觉猜出公式,最后验证。招差术从「数」出发:先有一串实测的数,再层层做差,最后反推出公式。
这个区别在实用上极要紧。堆草的人知道垛形,所以能猜公式;记驿站账的人不知道「公式」,只有一本账。账上是逐年逐月的数,一串一串。要从这串数推出「明年该备多少」「这十年一共用了多少」,公式是推不出来的——因为根本不知道它是几次的。
差分行。做几层差,看哪一层平了,就知道它是几次的;平了之后,用那几个常数直接算出任意一项与总和。整个过程不需要先知道公式,只需要会减法。
这是本册暗线的又一面:没有符号的代数,把「表达」的活儿交给了版面,把「推理」的活儿交给了操作。招差术里没有一个字母,但每一步都是合法的代数运算——只是运算的对象是表上的数,不是纸上的式。
代价是:它只能处理「已经有的数」。要预测一个从未观察过的情形,它给不出保证;它给的是「按已观察到的规律外推」。这个界限,古人心里清楚。
第三幕和第四幕讲的两套办法,其实是同一条路的两个方向。
向下走:给一串数,反复做差,减到常数为止——这是招差。向上走:给一串差数,反复累加,得到垛的总数——这是垛积。
拿三角垛验一次。向上:茭草垛的逐层数 1, 2, 3, 4, …,累加得 1, 3, 6, 10, …,这就是三角垛的逐层数;再累加得 1, 4, 10, 20, …,这就是岚峰垛的逐层数。每累加一次,垛就高一级。
向下:把岚峰垛的逐层数 1, 4, 10, 20, 35, … 做差,得 3, 6, 10, 15, …,再做差得 3, 4, 5, …,再做差得常数 1。每做差一次,垛就低一级。
两个方向互逆,正如加与减互逆。这不是本册的发明,而是这套算法本来的结构;朱世杰把两侧的公式都列了出来,却没有把它们写成一条「互逆定理」——因为那需要一种「以式写式」的语言,而他手里只有位置。
三百多年后,欧洲人把这件事写成了微积分基本定理:求和与求差互为逆运算。同一件事,两种说法;一个有定理,一个有表。
第四幕讲读取:一串数里藏着它的生成规则,反复做差就能读出来。
差分。一层层减,减到常数为止;平在第几层,就是几次。
公式。nΔ1+C(n,2)Δ2+C(n,3)Δ3+…,系数是垛数。
实算。招兵十日 330;四次方前十项和 25333。
四差。减四层得 24=4!。
互逆。做差降一级,累加升一级;与微积分基本定理同构。
差分:3,7,12,18,25,33,42,52,63,75 → 一差 4…12 → 二差恒 1。
求和:S(10)=3×10+4×C(10,2)+1×C(10,3)=30+180+120=330。
四差:n4 的四阶差为 24;Σk4(10 项)=25333。
《四元玉鉴》的流传,大致分三段。
第一段,元代到明初。书成之后有人读,也有人续。明初编入《永乐大典》,算是进了国库。这一段的特点是:书在,读的人少。
第二段,明代中后期到清初。几乎断掉。顾应祥删天元细草,《算法统宗》不载四元。这一段的特点是:书难找,方法失传,只剩题目与答案在少数抄本里。
第三段,清中期以后。乾嘉学者重刊古算书,阮元编《畴人传》,把朱世杰列入。李锐、沈钦裴、罗士琳先后攻这部书;罗士琳 1836 年成《四元玉鉴细草》,逐题补出演算。这本书这才重新「会算」。
二十世纪又添两笔:钱宝琮、李俨等用现代语言整理,日本学者三上义夫把它介绍到西方;计算机代数兴起后,人们发现四元术的消元思想与格罗布纳基一脉相通,这部六百多年前的书,忽然有了一门新读者。
四元术的核心动作是「消元」。这件事在现代数学里有名字,也有公式。
取一个小例。两式 x+y=5 与 xy=6。把两式都看成关于 y 的多项式:y+(x−5) 与 x·y−6。要消掉 y,可以排一个二行二列的行列式:
|1, x−5; x, −6|=1×(−6)−(x−5)×x=−x2+5x−6。
令它为零:x2−5x+6=0,得 x=2 或 3,对应 y=3 或 2。验:2+3=5,6=6。
这个行列式叫结式,是西尔维斯特 1853 年给出的。它的意思很直白:两个多项式有公共根的条件,就是它们的结式为零。四元术的「互隐通分、剔而消之」,做的就是这件事——只是没有行列式这座桥,靠一层层剃。
再往后一步是格罗布纳基(1965):给定一组多项式,自动算出一组「标准形」,使消元可以按固定顺序机械进行。把四元术交给机器做,得到的就是它。今天的符号计算软件里,解多元多项式方程组走的还是这条路。
把四道垛积公式的展开写全,会看见一条整齐的竖列:
Σk=n2/2+n/2
Σk2=n3/3+n2/2+n/6
Σk3=n4/4+n3/2+n2/4
Σk4=n5/5+n4/2+n3/3−n/30
每一项的头一个系数,是 1/2, 1/3, 1/4, 1/5——正好是「次方数加一」的倒数。而 ∫x4dx=x5/5,那个 1/5 就在这里。
后面的系数越来越怪:1/2、1/6、1/4、−1/30。这一串数在十八世纪被雅各布·伯努利系统算出,后世叫伯努利数。它们不是凑的,是从「求和」这个动作里必然长出来的。
朱世杰手里有四条公式,没有一般公式。不是他不够聪明,是缺两样东西:一是字母,没有字母就写不出「第 r 条公式」;二是幂级数,没有幂级数就管不住那一串怪系数。有工具才能有一般性——这句话在本册反复出现,此处是最硬的一例。
第四幕那条招差公式,写全了是这样:
S(n)=nΔ1+C(n,2)Δ2+C(n,3)Δ3+C(n,4)Δ4+…
牛顿在十七世纪七十年代给出的前向插值公式,是这样:
f(a+nh)=f(a)+nΔf(a)+C(n,2)Δ2f(a)+C(n,3)Δ3f(a)+…
同一个式子。唯一的差别是:朱世杰的是「求和」版,牛顿的是「求值」版;朱世杰用汉字说「上差乘层数、二差乘三角垛」,牛顿用 Δ 与阶乘写。相隔三百六十余年,两套记号,一条公式。
再往前走一步,就是泰勒级数:把差分的步长 h 缩到无穷小,差分变成导数,二项式系数变成阶乘的倒数。于是
f(a+h)=f(a)+hf′(a)+h2f″(a)/2!+…
泰勒级数是招差公式的连续极限。这不是牵强的比附:两者的系数结构完全一致,只是把「差」换成了「导」。
这件事让人不太舒服,也让人清醒:一条公式可以在两个地方各自长出来,长得一模一样。数学的「发现」与「发明」之争,在这个例子上格外难答。
朱世杰留给后世的,其实是三样东西,不是一条定理。
一张方阵。四元布算——把方程摆成一张有方向的表,幂次靠位置。这是一个容器,装得下四个未知数的一切多项式。
一叠公式。垛积术——十几种垛形,各自的求和式。这是一批成品,拿来就能用,用完不必问为什么。
一张表。招差术——反复做差,减到常数,反推每一项与总和。这是一套工序,可以从任意一串数开始,不需要先知道公式。
三样东西的品性完全不同:容器求「装得下」,成品求「算得快」,工序求「接得住生数据」。一个人同时做出这三样,说明他不是在解某一道题,是在造一套工具。
这也解释了他的书为什么难读:容器那一半写给内行,成品那一半写给管事的人,工序那一半写给算账的人。三种读者,三种笔法,编在同一部书里。后人读不通,往往是因为拿错了钥匙。
位置记法退场了。今天的代数式里没有一个格子,全是字母、数字、上标与括号。那么四元术留下了什么?
留下了三件看不见的东西。
其一,消元的次序感。「先消哪个元、后消哪个元」会影响计算的难易,这件事今天的符号计算里叫「项序」,是格罗布纳基算法的核心选择之一。四元术早就在做这个选择,只是靠经验。
其二,把方程当对象的习惯。四元术不关心「这个 x 代表什么」,只关心「这一格该放几」。把式子本身当成可以搬运、可以相减、可以叠起来的东西——这是抽象代数的第一步。多项式环、理想、商环,都是从这个习惯长出来的。
其三,算到底的耐心。《四元玉鉴》里有些题的演算要几十步,一步错则全盘废。这种「长篇演算」的体例,在中国算学里是新的;它预示了一种后来才成为常规的工作方式:不靠灵感,靠一步一步推。
记法死了,习惯活着。这一册的暗线走到这里,可以收尾了:一套记法能活多久,看它是否被更好的记法取代;一种习惯能活多久,看它是否被后来的学问吸收。
第五幕讲身后:一本书怎样失传,又怎样被反推回来。
三段路。元明有人读,明代几乎断,清代反推复原,二十世纪有新读者。
消元。「互隐通分」后来成了结式与格罗布纳基。
层级。垛积公式的主项系数是 1/(r+1),正对积分;怪系数是伯努利数。
同形。招差公式与牛顿插值同形,其连续极限是泰勒级数。
留下。记法退场,次序感、对象感、耐心留了下来。
结式小例:|1, x−5; x, −6|=−x2+5x−6,零点 2, 3。
层级:Σkr 的主项为 nr+1/(r+1)。
同形:nΔ1+C(n,2)Δ2+… ⟷ hf′+h2f″/2!+…。
约 1249 年生。籍贯燕山。生卒年均无确证,此年为后世推算。
13 世纪中期北方天元术成形。李冶《测圆海镜》(1248)系统使用「立天元一」,以「元」字标一次项。
约 1279—1299 年「周游湖海二十余年」,以数学授徒为业。莫若序称其「踵门而学者云集」。
1299 年《算学启蒙》成书(大德三年),三卷二十门二百五十九问,赵元镇作序。
1303 年《四元玉鉴》成书(大德七年),三卷二十四门二百八十八问,莫若、祖颐作序。卷首载「四元布算之图」与「古法七乘方图」。
约 1314 年卒(推算)。
1403—1408 年《四元玉鉴》收入《永乐大典》卷一万六千三百四十三、四十四。
1550 年顾应祥《测圆海镜分类释术》删去天元细草。1592 年程大位《算法统宗》不载天元术。四元术成绝学。
1799 年阮元《畴人传》为朱世杰立传。1836 年罗士琳《四元玉鉴细草》成,逐题补出演算。
1914 年三上义夫《中国算学之特色》向西方介绍四元术。1959 年李约瑟《中国科学技术史》第三卷设专节讨论。
1965 年布赫贝格尔提出格罗布纳基,多元多项式消元有了机械算法;四元术的思想在新的语言里重现。
两本书的关系,可以用一句话说清:《算学启蒙》是坡道,《四元玉鉴》是屋顶。
坡道那一本,编法极老实:从九九歌诀开始,一门一门往上加,每门先讲法、再给例、再出题。它不追求深刻,追求不留台阶——任何一步都不跳。这种编法在元代是新的:此前的算书多以「问题集」的形式出现,读者得自己从题里悟法。
屋顶那一本,编法相反:以题为准,不以法为准。二十四门,每门一类情境——田亩、仓窖、营建、堆垛、招兵、测望。同一门里可能用到天元、四元、垛积、招差中的几种;同一法也可能散在几门。读者若按「学法」的思路去读,会觉得杂乱;按「看题」的思路去读,就顺了。
这种「以题统法」的编排,好处是贴近实用,坏处是方法不成体系。后人要复原它,必须先把二百八十八题重做一遍,再从做法里反推出方法——罗士琳做的就是这件事,用了半辈子。
今天若要重编,多半会倒过来:先分方法,再挂例题。但那样编出来的,是一本教科书,不是朱世杰的书。
一、为什么停在四元?本册给的答案是「版面用完」:纸只有四方,第五元无处可去。但这个答案只解释了一半。为什么没有人试着把纸折起来、叠成两层?元代已有套印、已有复杂的版面设计。是没想到,还是想到了不划算?这个问题大概永远答不清。
二、一门学问为什么会失传?《四元玉鉴》的题目、答案、甚至部分细草,明代都还在;失掉的只是「怎么算」。顾应祥删细草,是看不懂,还是判断读者不需要?如果是后者,那他做的是一次理性的取舍——而这次取舍让一门学问断了两百多年。保存与普及,有时是冲突的。
三、一条公式在两处各自长出来,算发现还是发明?朱世杰的招差公式与牛顿的插值公式,形式几乎一样,相隔三百六十余年,中间没有可证的传递链。若数学是被发现的,那它本来就在那里,等人去取;若数学是被发明的,那两次独立发明出同一个东西,是极难解释的巧合。这个问题今天仍在争。
三个问题都不必急着答。它们的作用是:让这一册读完之后的安静,有一点内容。
材料:硬币或围棋子若干(二十枚以上)、一张白纸、一支笔。
第一种,茭草垛。第一行摆 1 枚,第二行 2 枚(紧挨着排成一条),第三行 3 枚,第四行 4 枚。四行共用 1+2+3+4=10 枚。公式:4×5/2=10。
第二种,三角垛。第一行 1 枚;第二行 2 枚;第三行 3 枚;第四行 4 枚——但每行都居中排在上一行下面,摆成一个正三角。这时每一行的枚数是 1, 3, 6, 10(因为三角形状的一行是「前几行之和」)。四行共 1+3+6+10=20 枚。公式:4×5×6/6=20。
第三种,四角垛。每行摆成正方形:第一行 1 枚,第二行 2×2=4 枚,第三行 3×3=9 枚,第四行 4×4=16 枚。四行共 1+4+9+16=30 枚。公式:4×5×9/6=30。
第四种,岚峰垛。把三角垛的每一行「再垛一次」:第一行 1 枚,第二行 4 枚,第三行 10 枚,第四行 20 枚。四行共 1+4+10+20=35 枚。公式:4×5×6×7/24=35。
收尾一问:四种垛,四行分别是 10、20、30、35。为什么从三角垛到四角垛增加了 10,从四角垛到岚峰垛只增加了 5?摆一遍就看出来了:四角垛每一行比三角垛「多一排」,越往下多得多;而岚峰垛是「垛上垛」,增量被摊薄了。
材料:一张纸、一支笔。不许用计算器。
第一步,写一行数。正方形点阵的枚数,从「零个点」开始:0, 1, 4, 9, 16。
第二步,做第一层差。后项减前项:1, 3, 5, 7。
第三步,做第二层差。再减一次:2, 2, 2。平了。
第四步,读三个数。第二层差的常数是 2;第一层差的首项是 1;首项本身是 0。三个数定住了整串。
第五步,写公式。f(n)=n×1+C(n,2)×2=n+n(n−1)=n2。正好是平方——本来就该是。
第六步,预测。第 10 个正方形点阵有多少点?f(10)=100。第 20 个?400。不用摆,算得出。
第七步,求和。前十项一共多少点?把公式累加:Σk2=C(11,2)×1+C(11,3)×2=55+330=385。这与第三幕的四角垛十层总数一致——同一件事,两条路。
换一串数自己试。写 1, 8, 27, 64(立方数),做三次差,会得到常数 6。用 6、首差、首项三个数写公式,看能不能预测 53=125。能,就说明这一套学会了。
四元术的三条支流,各自走了很远。
消元这一支:朱世杰的「剔而消之」→ 西尔维斯特的结式(1853)→ 布赫贝格尔的格罗布纳基(1965)→ 今天的计算机代数系统。每一次前进,都是把「靠经验选次序」换成「按规则定次序」。六百年前的难题,今天的机器几秒钟做完;但机器做的仍是同一件事:把多元化成少元,把少元化成一元。
垛积这一支:朱世杰的四条公式 → 伯努利数的求和公式(1713)→ 积分学 → 数值积分里的辛普森法则、欧拉—麦克劳林公式。「离散求和与连续积分差多少」这个问题,至今仍有人在算,因为工程上用它估误差。
招差这一支:朱世杰的差分表 → 牛顿前向插值(1670 年代)→ 泰勒级数 → 数值分析中的有限差分法。今天算天气预报、算结构受力,用的仍是把连续方程离散成网格、再用差分近似的办法。那套「减到常数」的思路,藏在每一台超级计算机里。
三条支流有一个共同点:都是从「把连续的弯东西,切成一段一段直的」这件事出发的。朱世杰的时代没有极限,也没有无穷小;他能做的,是把东西切成格子,然后精确地数格子。这不是退而求其次,这是另一条通往同一个答案的路。
这一册的主角是一个没有传记的人。他留下的只有两本书和两篇序;序里说他走了二十多年,上门求学的人多得挤不开。他靠教数学为生。
全册骨架五步:燕山与湖海(引子)、一个未知数怎么写在纸上(第一幕)、从一元到四元(第二幕)、一堆东西怎么数(第三幕)、一串数怎么读(第四幕)、一本书的旅行(第五幕)。数学层集中在 p.7—p.9、p.14—p.16、p.21—p.23、p.28—p.30、p.35—p.37。
这册的数学比前两册杂:有方程、有多项式、有求和公式、有差分。但每一项的入口都很低——第二幕从一个二十七个字的古文题开始,第三幕从「堆草」开始,第四幕从「做减法」开始。难点不在算,在「为什么位置能代替符号」。孩子若卡住,可以只记住一句:他不用字母,用格子;格子离中心几格,就是几次方。
两页动手做都适合在桌上做:p.44 用硬币摆四种垛(四行分别是 10、20、30、35,孩子摆完会「啊」一声),p.45 做差分表猜下一项(只用减法,不用计算器)。摆与减,比记公式扎实。
一、没有字母怎么写代数?可以拿一张方格纸,让孩子把 x2y 画成一个格子:向东两格、向北一格。画出来之后,再问一句:如果要加第五个字母,往哪个方向走?孩子会自己发现「没有方向了」——这就是四元术的天花板,不用讲,画一遍就懂。
二、为什么要数一堆草?可以问:一垛草不拆开,怎么知道有多少?孩子多半会说「量体积再估」。这时告诉他:古人真的找到了精确公式,而且只用底层的数目。「不用数就能知道」这件事本身,比公式更值得惊讶。
三、一本会算的书为什么会失传?这个问题适合大一点的孩子。可以这样问:如果一本教科书只剩下题目和答案,没有解题过程,它还传得下去吗?答案是不传。进而可以聊:今天存下来的东西,有多少是「只有答案没有过程」的。
顺带一句:这一册里出现的所有人名,除了朱世杰本人,几乎都是「替他保存或复原」的人——李冶、罗士琳、阮元、三上义夫。数学史里有一半的角色是保管员,这一点值得让孩子知道。
《数学家的故事》第三辑 · 第 23 册
朱世杰 · 四元玉鉴
明线:天元术与位置记幂次 · 四元布算 · 互隐通分与消元 · 垛积术 · 招差术 · 增乘开方
暗线:没有符号的代数,靠位置记幂次 · 版面决定容量 · 记法会死,习惯不会
时代:约 1249—约 1314 · 中国元(下延至 1303 成书、1403 入《永乐大典》、1550 细草被删、1836 罗士琳复原、1965 格罗布纳基)
主典:《算学启蒙》(1299,三卷二十门二百五十九问)·《四元玉鉴》(1303,三卷二十四门二百八十八问)
体例:扉页与题解 2 页 · 引子 3 页 · 五幕 35 页(每幕:故事 1 · 数学 3 · 故事/暗线 1 · 交汇 1 · 小结 1)· 收束与留问 3 页 · 动手做 2 页 · 小典 2 页 · 延伸 2 页 · 家长导读 2 页 · 版权 1 页,共 52 页。
《数学家的故事》第三辑十册:欧多克斯 · 花剌子米 · 朱世杰 · 卡尔丹诺 · 纳皮尔 · 拉普拉斯 · 李善兰 · 威尔斯特拉斯 · 康托尔 · 哥德尔。本册为第三辑第三册。
正文中的年代、人物、文献均据 p.47 所列材料与各页注疏;数值例(直田开方、一气混元消元、四种垛积、招差求和、四阶差分、结式小例)均为本册实算。生卒年取后世推算,标「约」。插画为写意示意,不追求器物形制与历史场景的复原。