JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

模擬:科學的第三根支柱

在歷史的大部分時間裡,科學只有兩種求知之道:理論與實驗。計算悄悄地成了第三種——一種對著大到、小到、快到或危險到永遠無法實驗的系統,去問「如果……會怎樣?」的方法。本篇是最後一級的地圖:你學過的每一個方法,都將在這裡上工。

第三種求知之道

四個世紀以來,科學一直立在兩條腿上。理論寫下定律——牛頓方程、馬克士威方程、納維-斯托克斯方程——並用紙筆向前推理。實驗則搭建一套裝置、擾動這個世界,再量測回傳的結果。兩者互為檢驗:理論預測、實驗檢測,而當它們不一致時,總有人因此學到了什麼。這對搭檔建起了現代物理、化學與生物學,而且在很長一段時間裡,這就是全部的工具箱。

麻煩在於,理論的定律通常是無人能寫出封閉解的方程式。寫下空氣流過機翼、或一千顆星辰的重力之舞、或一條蛋白質摺疊的方程式,你就握有一份對該物理完全精確的陳述,卻得不出半個可用的數字。實驗也有它自己的高牆:你無法跑一百個地球去測試一項氣候政策,你無法重跑一次大霹靂,你也無法撞毀一架真正的客機去研究疲勞。整片整片的科學就坐落在這道縫隙裡——對紙筆理論而言太複雜,對實驗室而言又太昂貴或根本不可能。

踏進那道縫隙的,是第三條腿:模擬。拿起理論交給你的那些精確方程,用前幾級的方法把它們離散化,再讓電腦一步一步把近似解向前行軍,直到一個數字掉出來為止。這就是計算科學,常被稱為科學的第三根支柱,與理論、實驗並肩而立。它並不取代它們——它坐落在兩者之間,把無法求解的方程變成你能畫圖、檢驗、信賴的數字。本最後一級裡的一切,都是同一個想法,套用到世界的不同角落。

每一場模擬背後的同一道食譜

剝去應用的外衣,幾乎每一場模擬都遵循同一條五步流程線——而這五步你都已在各別的篇章裡見過。本級的重點,是看著它們咬合成同一台機器。把下面這幾步當成你所學一切的目錄來讀:模型化為方程,方程化為有限的系統,系統被求解,而答案被檢查。

  1. 建模。寫下控制方程——通常是表達某條守恆律(質量、動量、能量)的微分方程。光是這一步就已注入了建模誤差:模型是對現實的刻意簡化,而那道落差在算出第一個數字之前就已經存在。
  2. 離散化。把連續的問題換成一個有限的問題:一張點的網格配上有限差分,或一張網格配上有限元素。這正是第一級的「先離散、再求解」之舉,它加進大小為 O(h^p) 的離散化誤差,由間距 h 來掌控。
  3. 求解。離散化產出一個龐大的系統要攻克——一個線性系統 A x = b、一個特徵值問題、一個最佳化,或一個時間步進迴圈。這正是直接求解法、Krylov 迭代法與時間積分器發揮身價之處。
  4. 時間行進(對隨時間演化的問題)。把狀態從 t 推進到 t + dt,一次又一次。顯式步進便宜,卻只是條件穩定的;剛性問題則逼著你用隱式步進,並在每一個時刻都做一次線性求解。
  5. 驗證與確認。做一次網格加密研究以確認收斂階,再拿去和一個實驗或一個已知的精確案例比對。直到此刻,你才握有一個站得住腳的數字。

請注意貫穿整條流程線的那份對誤差的誠實記帳。在捨入誤差都還沒登場之前,就已疊起了三種不同的誤差:建模誤差(方程不是現實)、離散化誤差(有限的網格不是連續體),以及求解器自身的截斷與迭代誤差。而墊在這一切之下的,是浮點數運算——每一個量都是一個被捨入的近似,加法甚至不滿足結合律,而一個病態的步驟能悄悄把微小的捨入放大成一個大誤差。整門學問反覆出現的教訓在這裡同樣成立:每一個被模擬出來的數字都是近似,而一個好的實踐者,總是大致知道那個近似有多大。

它驅動的三個世界:流體、金融、影像

最具代表性的應用是流體。每一種流體的運動——空氣流過機翼、血液在動脈裡流動、海洋、大氣——都由納維-斯托克斯方程所支配,而以數值方法求解它們,就是計算流體力學,簡稱 CFD。下一篇將專門講它,但其要旨此刻就值得一見:CFD 讓工程師在動手彎折任何金屬之前,先在一座虛擬風洞裡測試機翼;也讓氣象學家把大氣向前推演。第二種用途就是數值天氣預報——它字面上就是對明天空氣的一場模擬,這正是為什麼五天的預報能夠存在。每一個,都是那五步流程線,套用在一組方程上、鋪在一張行星大小的網格上。

現在,把流體換成金錢。一支股票的價格隨著時間隨機遊走,而寫在它之上的選擇權的合理價值,可以用兩種方法定價——而計算金融,也就是第三篇的主題,兩種都用。一種是解一個微分方程(布萊克-休斯方程,是熱方程的表親,你能用一模一樣的有限差分格式去攻它)。另一種則是純粹的蒙地卡羅:把那條隨機的價格路徑模擬數千萬次,再把報酬平均起來。第二條路繼承了你在蒙地卡羅那一級遇見的祝福與詛咒——它的誤差只以 O(1/sqrt(N)) 下降,所以要多加一位小數,你就得要多一百倍的路徑,然而那個速率,輝煌地不依賴於選擇權所牽涉的標的資產有多少個。

第三個世界,則是把流程線倒過來跑。一台 CT 掃描儀並不直接看見你的體內;它從許多角度量測 X 光的陰影,再必須重建出那些恰好能投出這些陰影的密度分布。這就是一個反問題:給定結果,回推原因。反問題通常是不適定的——量測中微小的雜訊可以爆炸成重建結果裡狂亂的變化,這正是病態問題的定義——所以你不能天真地直接去解它們。你必須加進先驗知識來馴服它們,正是你在最小平方法那一級遇見的 Tikhonov 正則化。醫學影像、地球物理,以及把衛星資料同化進天氣模型,全都是這同一種倒著跑的形狀。

通往機器學習的雙向橋

正在重塑這個領域、最重要的一件事,是一座通往機器學習的、深刻而雙向的橋——這是第四篇的主題,值得先給一段預覽,因為這份關係雙向往來,而人們往往只看見其中一向。從一個方向過橋,你會發現計算數學在驅動機器學習。訓練一個神經網路,骨子裡就是一個無約束最佳化:在數百萬個權重上極小化一個損失函數。下降所需的梯度,由自動微分算出——反向模式的自動微分,正就是反向傳播——而下降本身則是隨機梯度下降,是最佳化那一級裡最陡下降法帶著蒙地卡羅味道的表親。整套訓練堆疊跑在GPU 上,而 GPU 不過是用來做數值線性代數那些稠密矩陣相乘的、非常寬的引擎。在數學上,機器學習就是我們這門學問換了一身新衣裳。

從另一個方向過橋,這份人情便被回報了:機器學習在加速模擬。這裡的前沿是科學機器學習。那條經典的五步流程線可以慢得殘酷——單單一次高保真度的 CFD 運行,就能讓一台超級電腦算上好幾天——所以想法是:訓練一個神經網路去逼近那個昂貴的求解器,或是把控制方程烤進損失函數裡,逼著網路去尊重物理。後者就是物理啟發神經網路;前者則給出代理模型與降階模型,把一場長達數日的運行變成一次毫秒級的求值。關鍵的誠實之處:這些工具加速並擴增了經典求解器,卻並不讓它們退休。一個網路是一個在訓練資料之外毫無保證的內插器,而它底下依然倚靠著自動微分、最佳化與線性代數。這座橋,雙向都有車流。

前沿,與一道著名的未解難題

這一切要往哪裡去?第五篇也是最後一篇,是一趟前沿之旅,但有三股潮流此刻就值得點名。第一股是純粹的規模:這個領域已跨進百萬兆級運算——每秒做 10^18 次浮點運算的機器。然而,正如 HPC 那一級所警告的,原始的浮點運算量很少是真正的瓶頸;多數科學核心是受記憶體所限的,被快取未命中而非算術扼住喉嚨,而 Amdahl 定律則為任何平行加速所能買到的上限封了頂。第二股潮流是隨機化演算法:像隨機化 SVD 這樣的技術,用一個保證精確的答案,換一個算得快得多的機率性答案——這越來越是我們處理資料科學丟給我們的那些龐大矩陣的方式。

第三股潮流是「AI 為科學」:運用學習得來的模型,不只是去加速舊有的模擬,更是在根本沒有可解方程的地方做出預測,從蛋白質結構到新材料皆然。它既是貨真價實地令人興奮,也同樣是貨真價實地被過度炒作,而收尾的那篇試著同時握住這兩個真相。貫穿這三股潮流的,是一個發人深省的提醒:根基並非已了結之事——而最乾淨的例子,就藏在我們點名的第一個應用裡。