1995 GPS#
案發現場#
1995 年 7 月,美國空軍宣布 GPS(全球定位系統)24 顆衛星全部部署完成、全面運作。此刻,任何人在地球任何角落、任何天氣下,都能以數公尺的精度知道自己的位置——而且免費。空間定位,這個困擾航海家五百年的難題(見 1492-哥倫布與航海革命.md),成為一項全球公共服務。
GPS 是個罕見的案件:它的「兇手」是一個純理論的預言,而「偵探」是一群工程師;理論與技術在此直接握手。
偵查過程#
GPS 的偵查線索有四條:
第一條:時間就是位置。衛星以約 3.9 km/s 飛行,播送精確時間信號。接收器測出信號抵達的延遲,乘以光速即得距離。但這裡藏著一個致命細節:要定位到 1 公尺,時鐘必須準到約 3 奈秒。
第二條(全案最震撼):相對論不是哲學裝飾,而是工程參數。依 1915-廣義相對論.md,衛星時鐘因高速運動每天比地面慢約 7 微秒(狹義相對論),又因處於較弱重力場每天快約 45 微秒(廣義相對論)——淨效果每天快 38 微秒。設計者原本不確定相對論修正是否必要,甚至有人在地面關閉修正做過對照:不修正的 GPS 十分鐘內誤差就累積到數公里,一天將偏差約 11 公里。相對論修正因此被永久寫進每顆衛星。物理學家喬治·克利福德留下名言:「如果沒有相對論,GPS 兩分鐘內就會失去意義。」
第三條:三球交會。三顆衛星的距離球面交於一點即得位置,第四顆衛星用來校準接收器廉價石英鐘的誤差——把昂貴的原子鐘需求轉嫁給數學。
第四條:衛星網絡的設計。24 顆衛星分布在 6 個傾角 55° 的軌道面、約 20,200 km 高度,保證全球任一地點任一時刻至少可見 4 顆衛星。這是 1957-史潑尼克.md 以來太空技術的集大成。
結案報告#
GPS 屬於「理論→技術⚙」環節:純理論(相對論)直接物化為全球基礎設施,與 1656-惠更斯擺鐘.md「單擺定律直接變成擺鐘」一脈相承,但規模放大了十億倍。
- 理論的工程價值蓋章——相對論從「抽象思辨」變成「每天 38 微秒的修正量」,證明最抽象的理論也能成為最實用的技術。
- 定位成為公共服務——2000 年美國關閉民用精度限制後,GPS 準度驟升,導航、物流、地圖、農業全面改寫。
- 迴路終端進入口袋——當 2007-智慧型手機.md 把 GPS 晶片裝進手機,每個人手中的「理論-實驗-技術」終端又多了一個空間維度:你知道自己在哪裡,全網絡也知道。
證據與工具#
# GPS 的三大數學證物(可用 Python 驗證)
import math
C = 299_792_458.0 # 光速 (m/s)
# --- 證物一:時間精度 = 位置精度 ---
# 1 公尺誤差對應的時間誤差
print(f"定位到 1 m,時鐘須準到 {1/C*1e9:.2f} 奈秒")
# --- 證物二:相對論修正 ---
day = 86400.0 # 秒
v = 3874.0 # 衛星速度 (m/s)
h = 20_200e3 # 衛星高度 (m)
R = 6371e3 # 地球半徑 (m)
M_earth = 5.972e24
G = 6.674e-11
special = day * (1/math.sqrt(1 - (v/C)**2) - 1) # 狹義:慢
grav = day * G*M_earth/C**2 * (1/(R+h) - 1/R) * -1 # 廣義:快
print(f"狹義相對論:每天慢 {abs(special)*1e6:.2f} 微秒")
print(f"廣義相對論:每天快 {abs(grav)*1e6:.2f} 微秒")
print(f"淨效果:每天快 {(abs(grav)-abs(special))*1e6:.1f} 微秒")
print(f"若不修正,一天定位偏差 ≈ {(abs(grav)-abs(special))*C/1000:.1f} 公里")
# --- 證物三:三球交會(二維簡化:三圓定點)---
# 衛星 (x_i, y_i),測得距離 d_i,解交點
sats = [(0, 0, 5.0), (8, 0, 5.0), (4, 6, 3.0)] # (x, y, 距離)
def trilaterate(sats):
(x1,y1,d1),(x2,y2,d2),(x3,y3,d3) = sats
A = 2*(x2-x1); B = 2*(y2-y1); Cc = d1**2 - d2**2 - x1**2 + x2**2 - y1**2 + y2**2
D = 2*(x3-x1); E = 2*(y3-y1); F = d1**2 - d3**2 - x1**2 + x3**2 - y1**2 + y3**2
x = (Cc*E - F*B) / (A*E - D*B)
y = (A*F - D*Cc) / (A*E - D*B)
return x, y
print("三球交會定點:", trilaterate(sats))