跳轉到

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「單擺定律直接變成擺鐘」一脈相承,但規模放大了十億倍。

  1. 理論的工程價值蓋章——相對論從「抽象思辨」變成「每天 38 微秒的修正量」,證明最抽象的理論也能成為最實用的技術。
  2. 定位成為公共服務——2000 年美國關閉民用精度限制後,GPS 準度驟升,導航、物流、地圖、農業全面改寫。
  3. 迴路終端進入口袋——當 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))