應用與前沿

水平集方法(level-set method)

你要如何追蹤一場蔓延野火的形狀、一顆生長中晶體、一道移動的火焰前緣,或兩種流體之間的界面——尤其當這形狀可能一分為二或合而為一時,用曲線上一串點來表示就很難應付?水平集方法是一個優雅的、以偏微分方程為基礎的答案:你不直接追蹤移動的曲線,而是把它存成一個定義在整個空間上的函數的零等高線,並移動那個函數。

訣竅是把界面表示為函數 phi(x, t) 的零水平集:前緣就在 phi = 0 之處,phi 在一側為正、另一側為負。若界面以法向速度 F 移動,則 phi 必須滿足水平集方程 phi_t + F |grad phi| = 0——一個漢米頓-雅可比型的偏微分方程。你在固定網格上對 phi 求解,並在每一瞬把 phi 穿越零的位置讀出來作為移動前緣。其美妙之處在於拓樸自行處理:若前緣的兩塊相撞合併、或一塊夾斷成兩塊,函數 phi 平滑地變化,零等高線就自動做對的事——無需對一串標記點動特殊的「手術」。

這使水平集成為移動界面問題的主力:模擬有自由表面的流體(潑濺的水)、晶體生長與凝固、影像分割(一條流動以包裹物體的曲線),以及形狀最佳化。當速度 F 是曲率時,方程變成平均曲率流,一種拋物型的收縮;當 F 為常數時,它是程函(eikonal)/前緣傳播方程。誠實的代價是:你把一個少一維的曲線追蹤問題,提升成了整個區域上的偏微分方程,這更昂貴——而且函數 phi 偶爾必須被重設(重新初始化)以保持數值上的良好性質。

水中的兩滴油,各以 phi < 0 的區域表示,相互漂近並合併。若用標記點表示法,你得偵測碰撞並動手術把兩串點接起來。用水平集則什麼特別處理都不必做:phi 的兩個負區域只是長成一個,零等高線便自動成為單一合併後的邊界。

把界面當作 phi 的零集來追蹤;拓樸變化自行處理。

水平集以維度換取穩健性:你在整個網格上解一個偏微分方程,只為移動一個低一維的曲面,這較為沉重,且需要週期性地把 phi 重新初始化為帶號距離函數。它的優雅並非免費——它以額外的計算換取拓樸上的彈性。

又稱
level set methodimplicit interface tracking水平集法等位集方法