1614 納皮爾對數#
案發現場#
1614 年,蘇格蘭梅奇斯頓堡的貴族約翰·納皮爾(John Napier, 1550–1617)出版《奇妙的對數定律說明》(Mirifici Logarithmorum Canonis Descriptio)——人類第一次擁有了把乘法變成加法的系統方法。
案發現場的知識處境:十六世紀的天文學與航海計算浩繁如山。開普勒的行星理論(1609-開普勒行星定律.md)需要反覆計算三角函數與大數乘除;天文台與航海表(1576-第谷天文台.md、1492-哥倫布與航海革命.md)的計算動輒耗費數日,且抄錯一位小數就前功盡棄。開普勒稱之為「算術地獄」。
謎團:有沒有一種方法,能讓天文學家「用加法做乘法」,把幾天的計算縮到幾小時?
偵查過程#
納皮爾的「偵查」是一場二十年孤軍奮戰的計算工程:
- 起點是幾何直覺:納皮爾從兩個運動質點的對比構想對數:一點沿直線等速前進,另一點沿線段前進但速度與其到終點的剩餘距離成正比。任一時刻,兩點已走過的距離之間的關係,就是「數」與「對數」的關係——他先用運動學定義對數,再用代數語言表述(這在微積分發明之前,直覺上已觸及指數函數的微分性質)。
- 關鍵性質:這個定義給出 \(N \cdot M\) 的對數 = \(N\) 的對數 + \(M\) 的對數(現代記號 \(\log(ab) = \log a + \log b\) )。乘除化為加減、乘方化為乘法——計算的複雜度整整降了一級。
- 表格的量產:納皮爾與數學家布里格斯(Henry Briggs)合作(一說獨立完成),耗費多年計算出版對數表——涵蓋三角函數的對數,精度七位。這是一本「用來替代計算的書」——數學第一次以「工具書」的形式服務於科學。
- 布里格斯的改良:納皮爾的原始對數以接近 \(1/e\) 為底(現代所謂自然對數的前身);布里格斯提出以 10 為底的常用對數( \(\log 10 = 1\) , \(\log 1 = 0\) ),使表格更便於十進位計算。1617 年布里格斯出版第一份常用對數表。納皮爾同年去世,留下遺言般的合作成果。
- 立即的效應:開普勒在 1620 年代得到對數表後驚呼:「一位貴族的發明使天文學家的壽命加倍!」——計算時間縮短十倍以上,且錯誤率暴跌(加法遠比乘法不易出錯)。
結案報告#
對數是「技術⚙」環節在數學中的典範案例——它不是新理論,而是把既有數學物化為計算工具:
- 天文學的解放:對數表使開普勒的魯道夫星表(1627)、航海曆書的計算成為可能;天文計算從數日縮到數小時。沒有對數,就沒有十七世紀的天文資料革命。
- 數學成為工具:對數表、計算尺(1622 年岡特發明)直到 1970 年代電子計算機(1946-ENIAC.md)普及前,是三百五十年間工程師與科學家的標準計算裝備。一項計算技術統治三個半世紀。
- 指數函數的先聲:納皮爾的運動學定義在直覺上先於微積分觸及 \(e^x\) 的性質;後世尤拉把對數與指數統一為反函數, \(\ln x\) 成為分析學的基石。工具先於理論的又一例。
- 迴路的運轉:天文理論逼出計算需求(1609-開普勒行星定律.md)→納皮爾的對數(技術⚙)→計算能力反哺更多理論與觀測。對照古代中國的算籌與算盤(見 1090-水運儀象台.md 時代的計算環境)——同樣是計算工具,但只有印刷術(1450-古騰堡印刷術.md)時代才能把七位對數表印成千冊、傳遍歐洲,成為公共計算基礎設施。工具+印刷+理論需求,三者匯流,才有迴圈。
證據與工具#
# 用 Python 驗證對數的核心性質與「換底」計算
import math
# 性質一:log(ab) = log(a) + log(b) —— 乘法化為加法
a, b = 45.2, 318.7
print(f"log({a}) + log({b}) = {math.log10(a) + math.log10(b):.6f}")
print(f"log({a*b}) = {math.log10(a*b):.6f} (相等!)")
# 性質二:大數乘除的實戰——天文計算的情境
# 計算:(45.2 × 318.7) ÷ 0.0073
x = a * b / 0.0073
via_log = 10 ** (math.log10(a) + math.log10(b) - math.log10(0.0073))
print(f"\n直接計算:{x:.2f}")
print(f"經對數: {via_log:.2f}(加減代替乘除,查表即可)")
# 換底公式:log_b(x) = ln(x)/ln(b)
print("\n--- 換底公式 ---")
for base in [2, 10, 2.718281828]:
val = math.log(1024) / math.log(base)
print(f"log_{base}(1024) = ln(1024)/ln({base:.3f}) = {val:.4f}")
print(f"驗證:2^{math.log2(1024):.0f} = 1024 ✓")
# 納皮爾的運動學直覺:等速點 vs 減速點的距離對應
# 減速點速度與剩餘距離成正比 → 剩餘距離 = L·e^(-kt)(現代解法)
L, k = 10_000_000, 1.0 # 線段長與比例常數(納皮爾的量級)
print("\n--- 納皮爾的運動學直覺 ---")
print("時間t 等速點已走 減速點已走 兩者關係")
for t in [1, 2, 3]:
uniform = k * t * 10**7 # 等速點已走距離
remaining = L * math.exp(-k*t) # 減速點剩餘距離
moved = L - remaining
print(f" {t} {uniform:>9.0f} {moved:>9.0f} -ln(剩餘比例)={math.log(L/moved):.4f}")
print("\n對數即『反指數』:納皮爾用兩個運動質點直覺地定義了它——")
print("開普勒的名言:『這位貴族的發明使天文學家的壽命加倍!』")