跳轉到

1801 高斯最小平方法#

環節標註:實驗⇒數學⇒實驗(與技術)——觀測數據催生新數學,新數學又讓此後一切數據成為證據。

案發現場#

1801 年 1 月 1 日,義大利天文學家皮亞齊(Piazzi)在西西里的巴勒莫天文台發現了一顆新的小行星——穀神星(Ceres)。這是太陽系第一顆被確認的小行星,天文學界為之振奮,因為它正好填補了火星與木星之間那個著名的「缺失行星」縫隙(呼應提丟斯-波得定則的預言)。

但案件很快變成了懸案:皮亞齊只追蹤了 41 天、累積了 24 次觀測,穀神星就運行到太陽背後,從望遠鏡中消失了。

要重新找到它,必須從短短 41 天的觀測弧段外推出它的完整橢圓軌道——並預測它幾個月後再次出現的位置。這在當時被認為幾乎不可能:觀測數據太少、每筆數據都有誤差,而任何一筆誤差都會被軌道計算放大成天文數字的偏差。

偵查過程#

24 歲的哥廷根大學數學家高斯(Carl Friedrich Gauss, 1777–1855)接下了這個案子。他的偵查策略有兩層:

第一層:更好的軌道理論。 皮亞齊與其他天文學家用的是傳統的圓軌道逼近法;高斯改用完整的開普勒橢圓軌道方程,配合自己發明的迭代收斂算法,從觀測弧段直接解出六個軌道要素(參見 1609-開普勒行星定律.md)。

第二層:處理誤差的數學——這才是革命性的部分。 24 筆觀測彼此不一致,無論如何都無法讓同一條軌道精確通過所有數據點。高斯的洞見是:不一致不是麻煩,而是資訊。與其挑選幾筆「看起來最準」的觀測,不如讓所有數據共同發言——找出那條使誤差平方總和最小的軌道。這就是最小平方法(method of least squares):

\[ \min \sum_i (y_i - f(x_i))^2 \]

平方有個深刻的理由:它讓正負誤差都變成懲罰、放大離群的誤差、並且在數學上可微好解。高斯後來進一步證明:若觀測誤差服從常態分佈(即「高斯分佈」、鐘形曲線),那麼最小平方正是最可能的估計——誤差理論與最小平方法在此合而為一。

1801 年 12 月 7 日,天文學家馮·扎赫(von Zach)依照高斯預測的位置搜索,穀神星就在預測點附近被重新找到。一位數學家憑鉛筆與紙,把一顆「失蹤」的天體從資料裡抓了回來。

結案報告#

穀神星被找回,只是這樁案件的判決書第一行。更深遠的遺產是:

  1. 數據從此成為證據——在高斯之前,觀測誤差是實驗者的恥辱,被隱瞞或丟棄;在高斯之後,誤差是可以被建模、被量化、被最小化的對象。一切定量科學因此換了地基。
  2. 常態分佈成為自然語言——鐘形曲線從天文觀測擴散到一切測量,再到統計學、社會科學(凱特勒的「平均人」)、生物統計。
  3. 最小平方法成為萬用工具——從大地測量、經濟學迴歸分析,到今日 GPS 的衛星定位解算(見 1995-GPS.md)、機器學習的損失函數(見 2012-深度學習革命.md),全是 1801 年那 24 筆數據的後裔。
  4. 科學的角色分工確立——實驗者負責產生數據,數學家負責讓數據說話。這個分工正是「理論—實驗—技術」迴路能高速運轉的潤滑劑。

促進鏈分析#

  • 實驗⇒數學:穀神星 41 天、24 筆帶誤差的觀測數據,逼出最小平方法、誤差理論與常態分佈——沒有這批真實數據,高斯不會去思考「不一致的觀測如何融合」這個問題。
  • 數學⇒實驗:最小平方法反過來成為此後一切定量實驗的分析工具——軌道測定、大地測量、化學定量分析(見 1789-拉瓦錫定量革命.md 的後繼)、統計檢驗,數據從此變成可審判的證據。
  • 數學⇒技術:最小平方與迭代求解算法最終進入 GPS 定位解算、機器學習的梯度下降與線性迴歸——每次手機定位、每次模型訓練,都是 1801 年數學的技術物化。

證據與工具#

# 重演高斯案件:帶誤差的觀測 => 最小平方法擬合 => 預測與誤差理論

import math
import random

# --- 第一部分:製造「穀神星式」觀測數據 ---
# 真實規律:y = 0.6x + 1.5(模擬軌道),觀測帶誤差
random.seed(1801)  # 以案發年份為種子
true_a, true_b = 0.6, 1.5
data = []
for x in [i * 0.5 for i in range(12)]:  # 12 筆觀測(呼應皮亞齊的 24 筆)
    noise = random.gauss(0, 0.3)  # 高斯誤差:常態分佈 N(0, 0.3^2)
    data.append((x, true_a * x + true_b + noise))

print("--- 觀測數據(帶誤差)---")
for x, y in data:
    print(f"x = {x:4.1f}   y = {y:6.3f}")

# --- 第二部分:最小平方法(高斯 1801 的核心)---
# 解 a, b 使得 Σ(y - ax - b)^2 最小
# 正規方程:a = Sxy/Sxx, b = ybar - a*xbar
n = len(data)
xbar = sum(x for x, _ in data) / n
ybar = sum(y for _, y in data) / n
sxx = sum((x - xbar) ** 2 for x, _ in data)
sxy = sum((x - xbar) * (y - ybar) for x, y in data)
a = sxy / sxx
b = ybar - a * xbar
print(f"\n最小平方擬合:y = {a:.4f}x + {b:.4f}")
print(f"真實規律    :y = {true_a:.4f}x + {true_b:.4f}")
print("=> 從帶誤差的數據中,數學把真實規律『撈』了回來")

# --- 第三部分:殘差與常態分佈 ---
residuals = [y - (a * x + b) for x, y in data]
mean_r = sum(residuals) / n
std_r = math.sqrt(sum((r - mean_r) ** 2 for r in residuals) / n)
print(f"\n殘差均值 = {mean_r:.4f}(應接近 0)")
print(f"殘差標準差 = {std_r:.4f}(觀測誤差的估計,即『誤差理論』的對象)")
# 常態分佈:f(r) = 1/(σ√(2π)) · exp(-r²/2σ²)
r0 = 0.2
f0 = math.exp(-r0 ** 2 / (2 * std_r ** 2)) / (std_r * math.sqrt(2 * math.pi))
print(f"殘差 = ±{r0} 的常態機率密度 = {f0:.4f}")
print("=> 高斯的洞見:誤差服從鐘形曲線,最小平方即最可能估計")
print("\n這套數學之後進入 GPS 解算與機器學習的損失函數——")
print("每一次定位與訓練,都是 1801 年那 24 筆觀測的後裔。")