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

穩定性、CFL 條件,與拉克斯等價定理

上一篇導讀做出了一套會隨網格縮小而逼近偏微分方程的格式。這一篇則問一個令人不安的問題:它算出來的答案,真的會趨近真解,還是微小的誤差會爆炸開來?三個詞——相容性、穩定性、收斂性——以及一條定理,把這一切繫在一起。

相容性只兌現了一半的承諾

上一篇導讀裡,你做出了一套有限差分格式,並量了它的截斷誤差:你把精確解代入離散公式,做泰勒展開,看著那份不吻合隨著網格加密而像網格間距的某次方一樣縮小。一套截斷誤差隨網格加密趨於零的格式,稱為相容的——這意味著離散方程在極限下確實在努力扮演那條偏微分方程。這感覺好像就是全部了:縮小網格、縮小誤差,大功告成。但這不是全部,而箇中緣由,是整個偏微分方程數值計算裡最重要的教訓之一。

截斷誤差量的是單獨一步:離散公式在某一點、做一次運算時,把偏微分方程描述得多差。但真正的計算把成千上萬步串接起來,每一步都吃進上一步略有偏差的輸出。真正要緊的問題,不是單獨一步的誤差有多小——而是這些誤差一同向前行進時,是保持有界,還是彼此餵養、無限制地增長。一套格式可以漂亮地相容,截斷誤差要多快消失就多快消失,卻仍在十來個時間步內就讓數值答案溢位成一團胡言。相容性管的是每一步誤差的輸入;它對格式在執行時是否會放大誤差,隻字未提。

看一套相容的格式爆炸

熱方程 u_t = k u_xx 最自然的那套格式:時間取前向差分,空間取中央差分——就是上一篇的 FTCS 格式(前向時間、中央空間)。它是相容的;其截斷誤差是時間步的一次方加空間步的平方。現在執行它。x 方向網格間距 h、時間步 dt,把常數打包成一個無因次數 r = k dt / h^2。只要 r 維持在 1/2 或以下,算出來的溫度就乖乖的:它們平滑下來、衰減,並追隨真解。一旦把 r 推過 1/2——只把時間步取得稍微大了一點點——猛烈的事就發生了。

FTCS for the heat equation, at grid point j, time level n:

   U[j, n+1] = U[j,n] + r*( U[j+1,n] - 2*U[j,n] + U[j-1,n] ),
   with r = k*dt / h^2.

   r <= 1/2 :  errors stay bounded   -> the answer converges
   r >  1/2 :  a tiny wiggle doubles every step -> overflow

   A jagged +1,-1,+1,-1 sawtooth is the most dangerous mode:
   the bracket becomes -4*(that value), so it is scaled by (1 - 4r).
   |1 - 4r| > 1  exactly when  r > 1/2.
整齣戲都活在打中最鋸齒狀的波那個因子 (1 - 4r) 上。若它的大小超過 1,那個波就會加倍、再翻四倍、然後爆炸——即使這套格式相容得無懈可擊。

圖像是這樣的。網格能表示的最粗糙的東西,是一個每一點都翻號的鋸齒波:+1、-1、+1、-1。把它餵進 FTCS 更新,中央差分的那個括號就把它變成 -4 倍的自己,於是一步之後鋸齒波被縮放了 (1 - 4r)。若 r 大於 1/2,則 1 - 4r 比 -1 還負,所以 |1 - 4r| > 1:鋸齒波每一步都翻號且增長。捨入雜訊裡總含有一絲這種鋸齒,所以即使從光滑、無辜的資料出發,那一個模態也會被挑出來、放大、加倍再加倍,直到它把一切淹沒。這就是不穩定,而相容性對阻止它毫無作為。

馮諾伊曼分析:問每個波它的增長因子

我們怎麼知道 1/2 是那個神奇的門檻,又怎麼為任意格式找出它?工具是 馮諾伊曼穩定性分析,它借用了整個變換階梯的核心招數:一次只用一個傅立葉模態來測試格式。在常係數網格上,單一個波 U[j,n] = (g)^n e^(i p j h) 的形狀會被每一次線性更新保住——只有它的振幅從一個時間層到下一層改變,乘上一個叫增長因子 g 的數。把那個波代入格式,幾乎一切都會約掉,剩下 g 成為波數 p 的一條乾淨公式。格式穩定,恰恰當 |g| <= 1 對網格能容納的每一個波數都成立——不許任何模態增長。

  1. 代入試驗波。把 U[j,n] = (g)^n e^(i p j h) 放進格式。每個 j 的平移 e^(i p (j±1) h) 都拆成 e^(±i p h) 乘上那個波,而 n+1 那一層則多帶出一個 g 的次方。
  2. 約掉共同的波。因子 (g)^n e^(i p j h) 出現在每一項裡,所以把它除掉。你剩下一條只含 g 的方程——解偏微分方程已化成一行代數。
  3. 讀出 g(p)。對 FTCS,那個括號給出 e^(i p h) - 2 + e^(-i p h) = 2 cos(p h) - 2 = -4 sin^2(p h / 2),於是 g = 1 - 4 r sin^2(p h / 2)。
  4. 要求 |g| <= 1 對所有 p 成立。最糟的情況是 sin^2 = 1(鋸齒波,p h = pi),給出 g = 1 - 4r。要求 |1 - 4r| <= 1 便逼出 0 <= r <= 1/2——門檻自己掉了出來。

CFL 條件:別跑贏物理

對波動類方程,穩定極限有一個生動的物理意義,由 CFL 條件(庫朗–弗里德里希斯–勒維)刻畫。回想波動方程那一級:雙曲問題裡的資訊以有限速度傳播——真解在某一點的值,只依賴於該點依賴域內的初始資料,即一個信號可能由其傳到該點的那個錐。有限差分格式有它自己的離散依賴域——透過模板真正餵入 U[j,n] 的那些較早格點構成的三角形。CFL 條件,就是要求那個數值錐至少要和錐一樣寬。

為何非如此不可?假設數值錐太窄——真解在 U[j,n] 處依賴於一塊落在格式模板三角形之外的初始資料。那麼格式根本看不到答案所需的資訊;對它能看到的那些點做再多算術,也無法重建它從未取樣過的東西。加密網格也救不了,因為把 h 和 dt 一起縮小,會讓兩個錐維持相同的比例。對平流方程 u_t + a u_x = 0,錐在一步內伸達 |a| dt 的距離,而模板只伸達 h,所以條件是 |a| dt <= h,也就是庫朗數 |a| dt / h 至多為 1。一句話:一個時間步裡,波橫越的格子不得多於一格。

拉克斯等價:把結打起來的那條定理

我們現在手上有兩項各自的美德。相容性說離散方程隨網格加密而趨近偏微分方程——局部的正確。穩定性說誤差不會隨步數累積而爆炸——全域的掌控。而我們真正想要的,不是其中任何一項單獨成立;我們想要收斂性:算出來的數隨 h、dt 趨於零而處處趨近真解。拉克斯等價定理 就是那座橋,對一個適定的線性初值問題,它說的話乾淨得令人吃驚。

確切的陳述是這樣。取一套相容的有限差分格式,施於一個適定的線性初值問題。那麼穩定性與收斂性等價:格式收斂,當且僅當它穩定。你會不斷用到的那一半是正向——相容性加穩定性給出收斂性——它把一個困難的、無窮步的問題(答案會趨近真相嗎?)化成一個單步的、可檢驗的問題(格式穩定嗎?)。逆向,即收斂性逼出穩定性,則是讓這份等價密不透風的關鍵:沒有任何辦法繞過穩定性卻仍然收斂。

請慢慢讀,因為它重塑了你工作的方式。收斂性——你最終在乎的那件事——很難直接驗證:它是關於一個你在任何有限電腦上都到不了的極限的陳述。相容性你已能用泰勒展開檢查。穩定性你能用一次馮諾伊曼計算檢查。拉克斯定理說,對一個適定問題上的相容格式,穩定性與收斂性是同一回事——彼此互蘊。於是那個看似不可能的問題「我的計算會收斂到真相嗎?」,就由你在書桌前能做的兩項可行檢查回答了:它相容嗎,它穩定嗎?這正是為何這三個詞如同一句咒語般同行:相容性加穩定性等於收斂性

兩點誠實的告誡。第一,定理假設底層問題是適定的——真解連續地依賴於其資料。給它一個不適定問題,像是把熱方程在時間上倒著跑,就根本找不到穩定的格式;不穩定性出在數學裡,而非方法裡,再聰明的離散化也救不回來。第二,古典定理是關於線性問題的陳述。非線性守恆律——其光滑資料能在有限時間內陡峭成一道震波——需要額外的結構(熵條件、謹慎的通量格式),那是接下來幾篇導讀的事;拉克斯等價是基礎,而非定論。

這為你換來什麼,以及前方的取捨

退一步,看清整台機器。你不再靠執行格式碰運氣來測試它;你在紙上分析它。為相容性做泰勒展開,代入一個波求增長因子,再讀出步長限制。對熱方程上的 FTCS,那條限制是 r = k dt / h^2 <= 1/2——而請留意它的刺:因為 h 是平方出現,把空間網格減半,會逼你把時間步減為四分之一。把網格加密十倍,你就得多走一百倍的時間步,每步還在更細的網格上。這份懲罰性的代價,正是隱式格式生來要逃離的弱點,而廉價但受限的顯式法、與昂貴但無條件穩定的隱式法之間的取捨,就是下一篇導讀的主題。

最後一個值得帶往前方的微妙之處。穩定並不等於準確——一套穩定的格式仍可能以某種特有的方式悄悄出錯。那個馴服鋸齒波的東西,亦即格式內建的阻尼,往往以人為的 數值耗散 之姿現身:算出來的解被抹開了,彷彿它在解一條從未出現在問題裡的熱方程。一套穩定的平流格式,能在許多步之內把一個尖銳的脈衝模糊成一個溫和的隆起。所以相容性—穩定性—收斂性保證你在極限下達到正確的答案,但在任何有限解析度下,你還必須留意誤差如何表現。讀一套格式的修正方程——它實際在解的那條略有差異的偏微分方程——正是診斷此事的辦法,而它貫穿接下來的每一種方法。