1543 哥白尼日心說#
案發現場#
1543 年,臨終病榻上的尼古拉·哥白尼(Nicolaus Copernicus, 1473–1543)摸到了剛剛印好的《天體運行論》(De revolutionibus orbium coelestium)——他畢生唯一的一部著作,同日他離開人世。
案發現場的知識處境:托勒密地心體系(約公元 150 年)統治天文學一千四百年。地球靜止於宇宙中心,行星沿本輪(epicycle)繞均輪(deferent)轉動。為了匹配不斷累積的觀測數據,本輪套本輪,已疊加到數十個——體系臃腫如同一臺塞滿齒輪的機器。
謎團:為什麼行星有時順行、有時逆行(retrograde motion)?托勒密用本輪解釋——行星在本輪上轉,投影到天空自然會「倒退」。這是能用的解釋,但没人相信它是真的:中世紀學者視本輪為「計算工具」而非實體。
誰敢說出真正的答案?答案出人意料地保守:一位終身在教會任職的波蘭天文學家。
偵查過程#
哥白尼的推理是一場理論先行的經典偵查——他不是靠新觀測(他的數據大部分是舊的),而是靠美學與數學的直覺:
- 起點是和諧原則:哥白尼在《天體運行論》開篇寫道,他厭倦了托勒密體系中「本輪不共心、體系不統一」的缺陷。他信奉畢達哥拉斯式的信念:宇宙應當是簡單而和諧的數學結構。
- 關鍵一步——換參考系:如果讓太陽靜止於中心,地球成為繞日行星之一,那麼:行星的逆行不再是真實運動,而是地球與行星相對運動的視覺投影——就像兩輛並行的汽車,慢車看快車彷彿在後退。一個核心謎團瞬間消解。
- 推算行星次序:地心說無法確定各行星的距離次序;日心說則給出唯一解——水星、金星在地球軌道內側,火星、木星、土星在外側,且各行星的週期與軌道半徑有嚴格的數學關係(日心說第一次讓太陽系成為有秩序的系統)。
- 留下待檢驗的預言:日心說預言金星應有完整相位(像月亮一樣有盈虧)——托勒密體系則否。這個預言要等 1610 年伽利略的望遠鏡(1609-伽利略望遠鏡.md)才能檢驗——理論先行,等實驗來審,整整等了 67 年。
- 謹慎的出版:哥白尼把日心說包裝為「計算假說」,並在序言中聲明這只是數學工具(此序實為路德派神學家奧西安德未經同意所加)。臨終出版,是學者的謹慎,也是時代的謹慎。
結案報告#
《天體運行論》印行約 400–500 冊,起初影響有限——多數讀者只把它當作改進曆法的計算工具。但它埋下的種子在六十年後發芽:
- 宇宙圖像的翻轉:地球從中心降為行星;宇宙尺度暴增(恆星天球必須極遠,否則應可見恆星視差)。
- 理論先行的樣板:哥白尼示範了「理論可以先於實驗,但必須等實驗來裁決」——金星相位的預言、恆星視差的預言(19 世紀才測得),都成為後世實驗的標靶。
- 迴路的接棒:第谷以更精的觀測檢驗它(1576-第谷天文台.md),發現日心與地心觀測都同樣「不完美」;開普勒以第谷的數據逼出橢圓軌道(1609-開普勒行星定律.md);伽利略的望遠鏡找到決定性證據;牛頓(1687-牛頓原理.md)以萬有引力完成數學大一統。理論→實驗→理論→技術→理論——迴路第一次圍繞一個假設轉動起來。
- 孤例與迴路的對比:中國天文學同樣精於觀測與曆法(見 1090-水運儀象台.md),但曆法是為王朝服務的「術」,不是可批判的公共理論。哥白尼的假說能被印刷、被傳播、被批判、被接棒——這是迴路與孤行的差別。
證據與工具#
# 用 Python 模擬「行星逆行」:地心觀點下的火星視運動
# 日心說的核心解釋:逆行不是真實運動,而是相對運動的投影
import math
# 軌道參數(簡化為圓軌道,半徑以日地距離為 1)
R_earth, R_mars = 1.0, 1.524
T_earth, T_mars = 1.0, 1.881 # 週期(年)
def position(R, T, t):
"""行星在日心座標的位置(t 以年為單位)"""
theta = 2 * math.pi * t / T
return R * math.cos(theta), R * math.sin(theta)
# 從地球看火星:計算火星相對地球的視黃經,觀察是否「逆行」
def apparent_longitude(t):
ex, ey = position(R_earth, T_earth, t)
mx, my = position(R_mars, T_mars, t)
return math.degrees(math.atan2(my - ey, mx - ex))
print("時間(年) 視黃經(°) 運動方向")
prev, retro_count = None, 0
for i in range(0, 1000):
t = i * 0.01
lam = apparent_longitude(t)
if prev is not None:
d = (lam - prev + 540) % 360 - 180 # 黃經增量(-180~180)
if d < 0 and retro_count == 0:
print(f" {t:5.2f} {lam:7.1f} ← 逆行開始!")
retro_count = 1
elif d > 0 and retro_count == 1:
print(f" {t:5.2f} {lam:7.1f} 順行恢復")
retro_count = 0
prev = lam
# 逆行週期的理論值:1/(1/T_earth - 1/T_mars) ≈ 2.14 年
synodic = 1 / (1/T_earth - 1/T_mars)
print(f"\n理論會合週期 ≈ {synodic:.2f} 年(每約2.1年火星逆行一次)")
print("火星真實軌道上從未倒退——逆行只是地球超越火星時的視覺投影。")
print("換參考系,謎團消解:這就是哥白尼革命的本質。")