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

離散外微分:上鏈、上邊界與離散霍奇星算子

光滑微分形式吃下流形上有向的小塊、吐出數字——所以在網格上,只要在每個有向單形上存一個數,再讓斯托克斯定理替你定義外微分就好。把這一個念頭照字面實現,就在三角剖分上得到一套完整的微分學:上鏈、一個平方為零的上邊界,以及一個把它轉成你網格真正幾何的離散霍奇星算子。

形式是拿來積分的東西——所以就把積分離散化

從微分形式那一級你已知道,一個光滑的微分 k-形式 omega 其實不是點上的函數——它是一台機器,吃下一塊有向的 k 維小片、吐回一個數,也就是 omega 在那片上的積分。離散外微分(DEC)把這個定義照字面完全採納。固定你在第一篇建好的單純複形——頂點、邊、三角形、四面體,全都有向——然後,與其儲存 omega 本身,只儲存它在各單形上的積分。一個離散 k-形式,稱為 k-上鏈,就是指派給每個有向 k-單形的一個實數。如此而已:0-上鏈是每個頂點一個值,1-上鏈是每條有向邊一個值,2-上鏈是每個有向三角形一個值。

這是一個有後果的真切抉擇,值得把我們捨棄了什麼說清楚。邊上的一個光滑 1-形式攜帶無窮多的資訊;我們只保留一個數,即它在該邊上的積分,其餘全忘掉。所以 DEC 是一套取樣方案,而如同一切取樣,它只在網格解析度的範圍內忠實——把三角剖分細化,離散物件便收斂到光滑者。為這份損失換來的代價極為可觀:離散理論在它的代數上是精確的、而非近似的。斯托克斯定理會分毫不差地成立,d 會分毫不差地平方為零,而德拉姆上同調會整數對整數地算對,全都在一個電腦裝得下的有限網格上。

上邊界算子,不過是把斯托克斯定理當成定義來讀

現在來到核心的把戲。我們需要一個離散外微分 d,把 k-上鏈送到 (k+1)-上鏈,對應你已熟知、會把形式次數升一的光滑 d。我們不去近似任何導數——而讓斯托克斯定理告訴我們答案。光滑的斯托克斯說:d omega 在區域 sigma 上的積分,等於 omega 在 sigma 邊界上的積分。左邊恰是離散 (k+1)-上鏈 d omega 在單形 sigma 上的值;右邊則是 omega 在 sigma 各邊界面上之值的帶號和。於是我們乾脆「定義」離散外微分為那個等式:(d omega)(sigma) = 對 sigma 的各邊界面、帶上定向符號、把 omega 在每個面上的值求和。

在一條邊上把它具體化。設 omega 是 0-上鏈,即每個頂點上的一個值 f,並設 e 是從頂點 a 到頂點 b 的有向邊。它的邊界是頭減尾,b - a,所以 (d omega)(e) = f(b) - f(a)。這就是離散梯度:一個 1-上鏈,其在每條邊上的值是兩端點值之差。升一級:對一個 1-上鏈 alpha 與一個有向三角形 T = [a, b, c],邊界是三條邊 [a,b] + [b,c] + [c,a],而 (d alpha)(T) = alpha(ab) + alpha(bc) + alpha(ca)——這就是離散旋度,alpha 沿三角形周緣的淨環流。外微分不過是沿邊界的帶號累加,而那純粹是組合的。

0-cochain f  (one value per vertex)
    |  d_0   (discrete gradient)          (d f)(a->b) = f(b) - f(a)
    v
1-cochain a  (one value per edge)
    |  d_1   (discrete curl)              (d a)([a,b,c]) = a(ab)+a(bc)+a(ca)
    v
2-cochain w  (one value per triangle)
    |  d_2   (discrete divergence-of-rotor, etc.)
    v
3-cochain ...

Matrix view:  d_k = transpose of the boundary operator  partial_{k+1}
              entries are only  -1, 0, +1   (the incidence/orientation signs)
              d_{k+1} composed with d_k  =  0     (since partial-partial = 0)
上邊界 d_k 就是帶號的關聯矩陣——邊界算子的轉置——而 d 與 d 的複合為零,因為邊界的邊界是空的。

為何 d 平方確為零,又為何那把上同調直接交到你手上

光滑的恆等式 d(d omega) = 0 是微分形式那一級承重的事實之一;它的離散影子更加乾淨。把各上鏈空間與各上邊界映射疊起來,你得到一個序列 C^0 -> C^1 -> C^2 -> ...,其中每個箭頭都是一個 d。這是一個上鏈複形,是你在單純同調裡用過的鏈複形之對偶。離散的 d 就是逐項地、單純邊界算子 邊界算子 partial 的轉置。所以 d 與 d 的複合是 partial 與 partial 複合的轉置——而 partial-partial = 0 正是「邊界的邊界是空的」這塊基石。把一個零映射轉置,得到的仍是零。所以 d^2 = 0 在任何網格上「確切地」成立,不是近似,而是直接承襲自關於單形的一個組合真理。

因為 d^2 = 0,你在光滑情形跑過的那套閉/恰當的帳目,在此照跑不誤。一個上鏈若其 d 為零,便是閉的(離散的閉形式),若它是某物的 d,便是恰當的。閉模恰當,就是網格的單純上同調 H^k,而依德拉姆定理的離散類比,它的維數就是第 k 個貝蒂數——你在第一篇已遇過的 k 維洞的計數。所以若你計算 d_k 的核維數減去 d_{k-1} 的秩,純由整數矩陣的線性代數,貝蒂數便冒了出來:連通分支、獨立迴圈、孔洞。DEC 把德拉姆上同調這個光滑幾何的陳述,化為一台筆電在毫秒間算完的有限秩計算。

幾何在此登場:離散霍奇星算子

至此為止一切都是組合的——同一形狀的任何網格給出同一答案,對邊長與角度視而不見。但真正的微分學需要度量:光滑的霍奇星算子 * 用黎曼度量把一個 k-形式轉成它的互補 (n-k)-形式,它正是讓你能構造內積、上微分與拉普拉斯算子的東西。DEC 透過離散霍奇星算子提供這一點,而這裡有個關鍵的結構想法:它把活在原始網格上的 k-上鏈,映成一個活在「對偶」網格上的 (n-k)-上鏈。三角剖分的對偶,在每個三角形處放一個對偶頂點(它的外心)、讓一條對偶邊穿過每條原始邊、並在每個原始頂點周圍圍出一個對偶面。原始 k-單形與對偶 (n-k)-胞,恰如形式與其霍奇對偶那般兩兩配對。

在它最簡單的對角形式裡,離散霍奇星算子具體得令人屏息:一個原始 k-上鏈在某單形上的星算,是它的值乘以「對偶胞的測度與原始胞的測度之比」。對一條邊 e 上的 1-上鏈,這個比是(對偶邊長)/(e 的長度)。把共用 e 的兩個三角形之外心連起來算出對偶邊,再做一點簡短的三角化簡,那個長度比就恰好變成 (cot alpha + cot beta) / 2,其中 alpha 與 beta 是那兩個三角形裡與 e 相對的兩個角。那個餘切權重並非巧合——它就是離散霍奇星算子,而在下一篇裡,它會組裝成那著名的、驅動全部網格處理的餘切拉普拉斯算子

把它拼起來:離散拉普拉斯算子與霍奇分解

手握 d(組合的)與霍奇星算子 *(度量的),你想要的每個光滑算子,都以和連續理論裡相同的公式組裝起來。離散上微分是 delta = (符號) * d *,是把次數降低的、d 的度量伴隨算子,而離散的 霍奇拉普拉斯算子 是 Delta = d delta + delta d,恰好鏡映光滑的霍奇拉普拉斯算子。在 0-上鏈上它退化為作用於頂點取樣函數的離散拉普拉斯-貝爾特拉米算子——而當你以對角餘切星算子把它寫出來,你得到的正是下一篇的餘切拉普拉斯算子,那個矩陣的 (i,j) 元對邊 ij 而言是負的 (cot alpha_ij + cot beta_ij)/2,其對角線則使每一列平衡。

而那個回報定理是免費附送的。因為上鏈空間是有限維的,霍奇分解不過是向量空間在霍奇星算子所定義的內積下的正交補分解:每個上鏈唯一地拆成 恰當 + 上恰當 + 調和,其中調和指被 Delta 消滅。調和部分是真正屬於拓樸的殘餘——它的維數又一次等於貝蒂數——所以調和 1-上鏈是你曲面上迴圈的一組具體基底。光滑的霍奇定理是個需要橢圓偏微分方程理論的艱深分析結果;它的離散手足卻是線性代數的一行推論,而那正是 DEC 所提供的交易:以分析的深度,換一個有限、精確、可計算、而結構完好如初的模型。

  1. 替網格定向,並把資料存成上鏈:每個頂點一個數(0-上鏈)、每條有向邊一個數(1-上鏈)、每個有向三角形一個數(2-上鏈)。
  2. 把每個上邊界 d_k 建成帶號的關聯矩陣(邊界 partial 的轉置),元素只有 -1、0、+1;這純屬組合,並確切地給出 d^2 = 0。
  3. 把每個霍奇星算子 *_k 建成「對偶胞除以原始胞測度」的對角矩陣,用外心算;對邊而言這就是餘切權重 (cot alpha + cot beta)/2。
  4. 組裝 delta = (符號) *^{-1} d^T * 與拉普拉斯算子 Delta = d delta + delta d;它的核是調和上鏈,而該核的維數就是貝蒂數。