求根與非線性方程

同倫延拓法(homotopy continuation)

/ ho-MOT-uh-pee /

牛頓法快,卻是局部的——只有在你已經從靠近根之處起步時才有效。對於一個你「沒有」好起始猜測的難題,該怎麼辦?同倫延拓法借用了登山者的訣竅:別直接跳上難爬的主峰;從一個你已能抵達的鄰近矮峰出發,再沿著連接的山脊一步步走,直到抵達。你把一個你能解的簡單問題「變形」成你想要的難問題,並追蹤解的移動。

用一個從 0 跑到 1 的參數 t 來設定。建一族問題 H(x, t) = 0(一個同倫),使得在 t = 0 時它是一個有已知解的「簡單」問題,在 t = 1 時它是你的「目標」問題 F(x) = 0。常見選擇是凸同倫 H(x, t) = (1 - t) * G(x) + t * F(x),其中 G 簡單(你已知其根)、F 是你的目標。現在把 t 從 0 到 1 小步遞增;在每個新的 t,用前一個 t 的解作為牛頓法的起始猜測,因為你只移動了一點點,牛頓法很快收斂。解在 (x, t) 空間中描出一條從簡單根到難根的連續「路徑」——故稱「路徑追蹤」。

延拓法把全域上困難的求根問題化為一串局部上容易的問題,當好的起始猜測稀缺時它是首選:非線性電路與結構分析、潮流方程,尤其是找出多項式系統的「所有」解(多項式同倫延拓能定位每一個孤立的複根)。誠實的困難是真實的:路徑可能折返(轉折點,t 在該處瞬間倒退)、分叉,或經過雅可比矩陣變壞的奇異點附近——穩健的實作用弧長參數化以「沿」路徑步進而非以 t 步進,再加上自適應步長控制、預測-修正步,以及在分歧點附近的小心處理。

要在沒有好猜測下解難的 F(x) = 0,挑一個簡單的 G(x) = x - x_0,其根 x_0 由你自由選定。組成 H(x, t) = (1 - t)(x - x_0) + t F(x)。在 t = 0 時根為 x_0;把 t 推到 0.1,從 x_0 跑牛頓法,得新根;推到 0.2,依此類推。到 t = 1 時你已把解一路走到 F 的某個根,無需幸運的起始猜測。

把簡單問題變形成難問題,沿路徑追蹤根。

路徑追蹤並非自動:解的路徑可能轉折、分叉,或繞過雅可比矩陣失效的奇異點,此時以 t 天真步進便會失敗。正式的程式以弧長並用自適應控制步進——即便如此,選得不好的同倫仍可能漏掉根。

又称
continuation methodhomotopy methodpath-following method延拓法路徑追蹤法