向方程提出一個不同的問題
本級前面幾篇導讀問的都是同一類問題:讓偏微分方程在格點上近似地成立。把每個導數換成一個樣板,要求 u_t = k u_xx 在每個交叉點上成立,然後往前推進。這在矩形上做得很漂亮,但真實問題往往生活在不規則的形狀上——渦輪葉片、海岸線、中間挖了個洞的區域——整齊的格網根本貼不上去。有限元素法之所以誕生,正是因為它向方程提出了一個全然不同的問題,而這個問題能優雅地隨任何形狀彎折。
取這整道階梯的模型橢圓問題——帕松方程 -Laplacian u = f 定義在某區域上,邊界上 u = 0。我們不再堅持方程逐點成立,而是把兩邊乘上一個任意的測試函數 v(它在邊界上也為零),再對整個區域積分。接著做一次分部積分,把一個導數從 u 身上移到 v 身上,而邊界項因 v = 0 而消失。存活下來的是:grad u 與 grad v 的內積之積分,等於 f 乘 v 的積分——而關鍵在於,這必須對每一個合格的 v 都成立。這就是弱形式:方程不再被要求在點上成立,而是對一整個函數空間做測試。
strong form: -Laplacian u = f, u = 0 on boundary
multiply by v, integrate, integrate by parts once:
weak form: integral( grad u . grad v ) = integral( f v )
must hold for EVERY test function v
a(u, v) = L(v) for all v
\___/ \__/
bilinear linear為何弱形式才是該離散化的對象
這個改寫帶來兩份禮物。第一,弱形式對解的要求變少了:u 只出現一階導數,而非二階,於是 u 不再需要二次可微。它只需要有一個平方可積的一階導數——這恰好是空間 H^1_0的歸屬條件,也就是那些具有有限能量、且在邊界上為零的函數的自然居所。這正是你在弱形式讓帶有折角、帶有尖點的函數得以充當正當的解時,所遇見的同一種放寬。第二,左邊是一個雙線性形式 a(u,v)——對每一格分別是線性的——而右邊是一個線性泛函 L(v)。整個問題化為:在 H^1_0 中找出 u,使得 a(u,v) = L(v) 對所有 v 成立。
為什麼這樣的 u 存在,又為什麼唯一?這裡是理論一項靜默的勝利:拉克斯-米爾格拉姆定理保證了它,只要那個雙線性形式有界且強制(coercive)——意思是 a(v,v) 至少是 v 的能量的某個正倍數,於是這個形式不會在任何方向上塌陷。對帕松方程而言,a(v,v) 字面上就是 |grad v|^2 的積分,即狄利克雷能量,而強制性來自一條龐加萊不等式。這裡甚至有一個美麗的物理讀法:在所有具有正確邊界值的函數之中,真解正是使該能量最小的那一個——這就是狄利克雷原理,而弱形式不過是「它的一階變分為零」這句話。
帳篷函數:把空間變成有限維
弱問題依然活在無窮維的空間 H^1_0 之中——我們無法在電腦上搜遍它。那決定性的一步,即伽遼金法,是把那片浩瀚的空間換成一個小小的有限維子空間 V_h,由少數幾個簡單、被挑選好的函數張成,並只要求 a(u_h, v) = L(v) 對 V_h 中的 v 成立。從幾何看,你是在把真解投影到函數空間中一塊可掌控的薄板上;薄板愈小,答案愈粗糙,但 V_h 愈精細,u_h 就愈緊貼真值。
讓它成為有限元素法的,是 V_h 那個巧妙的基底選擇。把區域切成許多簡單的小片——一維中是區間,二維中是三角形——這張網格(mesh)能緊貼任何形狀,在解變化快的地方加密、在它慵懶的地方放粗。在這張網格上,每個節點放一個基底函數 phi_j:那是一個帽子函數(或稱帳篷函數),在節點 j 處等於 1,並線性地滑落到每個鄰近節點處的 0,於是每個 phi_j 只在觸及節點 j 的那幾個元素上非零。任何候選的 u_h 便是一個加權和,u_h = sum of c_j phi_j,而未知數就只是那些節點值 c_j——曲面在每個網格點上的高度。
組裝剛度矩陣
現在把伽遼金條件化成線性代數。只需對每個基底函數做測試即可,於是把 u_h = sum of c_j phi_j 代入 a(u_h, phi_i) = L(phi_i),對每個節點 i 都做一次。因為 a 是雙線性的,那個和可以提出來,剩下 sum over j of a(phi_j, phi_i) c_j = L(phi_i)。把係數 a(phi_j, phi_i) 收進一個矩陣 K,其元素為 K_ij = grad phi_i 與 grad phi_j 內積的積分——這就是著名的剛度矩陣,其名源於結構力學的出身。再把右端收進一個向量 F,其中 F_i = f phi_i 的積分。連續的偏微分方程,就此化成線性系統 K c = F。
正是在這裡,帳篷的局部支撐帶來巨大的回報。K_ij 只有在 phi_i 與 phi_j 重疊時才非零——也就是只有當節點 i 與 j 共用一個元素時。於是在一維中 K 每一列只有三個非零元素,二維中也只有寥寥幾個:這個矩陣是稀疏的,絕大多數是零,而上一篇導讀中對付隱式格式的那些快速解法器,三兩下就能搞定它。更妙的是,對帕松問題 K 是對稱正定的——這直接繼承自那個強制且對稱的雙線性形式——這保證了系統恰有一個解,也讓最高效的解法器得以放手施展。
- 把區域劃成網格:切成元素(區間或三角形),在你預期解變化快的地方加密。
- 選定基底函數:每個內部節點配一個帽子函數 phi_j,在每個元素上皆線性,於自身節點取 1、於其餘節點取 0。
- 建立剛度矩陣 K,其 K_ij = grad phi_i . grad phi_j 的積分,逐元素計算——多數元素為零。
- 建立載荷向量 F,其 F_i = f phi_i 的積分,通常在每個元素上以一個小型數值積分公式求得。
- 求解稀疏線性系統 K c = F;係數 c 即節點值,而 u_h = sum of c_j phi_j 便是近似解。
它有多好?誤差估計
一個誠實的方法必須說出自己錯了多少。關於伽遼金解最重要的單一事實是Cea 引理:u_h 在能量範數下,至多差一個固定常數,就是子空間 V_h 所能提供的對真值 u 之最佳可能近似。換句話說,這方法並非隨便產出 V_h 中的某個答案——它產出的本質上就是 V_h 中離真值最近的那一點。這把整個誤差問題化約成一個純粹的逼近問題:在尺寸為 h 的網格上,分段線性的帳篷能把一個光滑函數逼近到多好?
對線性元素,逼近理論給出乾淨的答案:能量範數中的誤差(它掌控一階導數)以 C h 縮小,對網格尺寸是一階;而樸素 L^2 範數中的誤差(即 u_h - u 本身的大小)以 C h^2 縮小,是二階——那著名的多出來的一階威力,來自一個對偶論證。當你把網格間距減半,函數值的誤差大致降到四分之一。那個隱藏的常數 C 又一次藏著真解的高階導數,因此這估計只有在 u 夠光滑時才誠實;在凹角附近,u 僅僅屬於 H^1,收斂率便會真切地退化,而這正是自適應網格加密所追逐的徵兆——只在誤差指標亮起紅燈之處,傾倒進細小的元素。
退一步,留意這套記帳與有限差分的感受何其不同。沒有泰勒展開、沒有樣板、沒有逐點的截斷誤差;收斂性改為流自強制性(存在與穩定,經由拉克斯-米爾格拉姆定理)、最佳逼近性質(Cea),以及逼近理論(帳篷把光滑函數貼得多好)。這正是你在伽遼金法的圖像中、以及兩篇前的等價定理裡所見的同一組三位一體——相容、穩定、收斂——只是換上了能量與函數空間的語言,而非格網與步長。下一篇將離開橢圓的舒適區,直面最艱難的情形:會形成震波的守恆律,那裡換成有限體積法與熵條件登場。