非線性方程的高維情形和一維情形既有相似處也有差異。首當其中的區別即在高維情形中不再存在介值定理,從而使得二分法不再可推廣到高維。不過,仍然有許多方法可以推廣。
1. 不動點迭代(高維)
尋找方程 $\boldsymbol{x}=\boldsymbol{g}(\boldsymbol{x})$ 的解。其中 $\boldsymbol{g}:\mathbb{R}^n\rightarrow \mathbb{R}^n$ 為一個n維空間上的變換。迭代形式:$\boldsymbol{x}_{k+1}=\boldsymbol{g}(\boldsymbol{x}_k)$ 。不動點在高維空間的表現為點,經過迭代后位置不變。
項目 | 一維不動點迭代 | 高維不動點迭代 | 高維解釋 |
迭代形式 | $x_{k+1}=g(x_k)$ | $\boldsymbol{x}_{k+1}=\boldsymbol{g}(\boldsymbol{x}_k)$ | |
收斂條件 | $x=g(x), |g'(x)|<1$ | $\boldsymbol{g}(\boldsymbol{x}), \rho(\boldsymbol{G}(\boldsymbol{x}^*))<1$ | $\delta \boldsymbol{x}_{k+1}\approx \boldsymbol{G}(\boldsymbol{x}^*)\delta \boldsymbol{x}_k$ $||\delta \boldsymbol{x}_{k+1}|| \leq \rho(\boldsymbol{G}(\boldsymbol{x}^*)) \boldsymbol{x}_k$ |
收斂速度 | 線性收斂(當 $g'(x)\neq 0$ ); 至少二次收斂(當 $g'(x)=0$ ); |
線性收斂(當 $\rho (\boldsymbol{G}(\boldsymbol{x}^*))\neq 0$ ); 至少二次收斂(當 $\rho (\boldsymbol{G}(\boldsymbol{x}^*))=0$ ); |
|
迭代復雜度 | 一次標量函數求值 |
一次n維矢量函數求值,等價於n個標量函數求值 |
$\boldsymbol{G}(\boldsymbol{x})$ 是函數變換 $\boldsymbol{g}$ 在x處的Jacobi矩陣,$\rho$ 表示矩陣的譜半徑,即矩陣特征值的最大模長(對於實數即絕對值)。正如 非線性方程(組):計算基本理論 中提到的,Jacobi矩陣是高維情形下導數的等價形式,更確切地說是線性主部的系數;線性代數的知識可知,特征值的幾何意義是矩陣對於特征值對應特征向量方向的向量的伸縮比,如特征值為2的特征方向的向量被矩陣左乘以后方向不變、長度翻倍。綜上所述,Jacobi矩陣的譜半徑可作為微分系數的大小在高維下的等價。
2. 牛頓法(高維)
在一維情況下,牛頓法用零點附近的微分公式,利用上一個點的值和微商值估算下一個零點的估計值。
在高維情況下,同樣使用零點附近的微分公式:$\boldsymbol{f}(\boldsymbol{x+\Delta x})=\boldsymbol{f}(\boldsymbol{x})+\boldsymbol{J}_f(\boldsymbol{x})\boldsymbol{\Delta x}$ ,帶入 $\boldsymbol{f}(\boldsymbol{x+\Delta x})=\boldsymbol{0}$ ,則得到方程:$\boldsymbol{f}(\boldsymbol{x})+\boldsymbol{J}_f(\boldsymbol{x})\boldsymbol{\Delta x}$ 。若Jacobi矩陣非奇異(對於合理的問題,在零點附近的矩陣也理應是非奇異的,除非是重根)則方程的解可以寫作:$\boldsymbol{\Delta x}=-\boldsymbol{J}_f(\boldsymbol{x})^{-1}\boldsymbol{f}(\boldsymbol{x})$ 。
此即高維牛頓方法的迭代方程:$\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\boldsymbol{J}_f(\boldsymbol{x}_k)^{-1}\boldsymbol{f}(\boldsymbol{x}_k)$ 。注意到這里的 $\boldsymbol{f}$ 是一個向量,由Jacobi矩陣左乘仍為一個向量。數值方法中,不用顯示地生成Jacobi矩陣的逆,只需要用Jacobi矩陣作為系數矩陣,$\boldsymbol{f}$ 作為右端項,用矩陣分解求解一個線性方程組即可,這樣復雜度明顯更低。
項目 | 一維牛頓法 | 高維牛頓法 | 解釋 |
迭代形式 | $x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}$ | $\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\boldsymbol{J}(\boldsymbol{x}_k)^{-1}\boldsymbol{f}(\boldsymbol{x}_k)$ 在計算中一般求出 $\boldsymbol{J}(\boldsymbol{x}_k)\boldsymbol{s}_k=-\boldsymbol{f}(\boldsymbol{x}_k)$ 的解,然后 $\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\boldsymbol{s}_k$ |
|
收斂速度 | 對應不動點迭代: $g'(x^*)=\frac{f(x^*)f''(x^*)}{(f'(x^*))^2}=0$ 二次收斂 |
對應不動點迭代: $\boldsymbol{G}(\boldsymbol{x^*})=\boldsymbol{I}-\boldsymbol{J}(\boldsymbol{x}^*)^{-1}\boldsymbol{J}(\boldsymbol{x}^*) - \sum\limits_{i=1}^n f_i(\boldsymbol{x}^*)\boldsymbol{H}_i(\boldsymbol{x}^*)=\boldsymbol{O}$ 二次收斂 |
$\boldsymbol{I}-\boldsymbol{J}(\boldsymbol{x}^*)^{-1}-\sum\limits_{i=1}^nf_i(\boldsymbol{x}^*)\boldsymbol{H}_i=\boldsymbol{I}-\boldsymbol{I}-\boldsymbol{O}(f的各個分量均為零)=\boldsymbol{O} $ |
迭代步復雜度 | 兩次函數求值(導數+原函數),固定四則運算兩次; 另需要求導函數; |
n維向量函數 $\boldsymbol{f}$ 求值 + Jacobi矩陣 $\boldsymbol{J} 求值,即攻擊 $n^2+n$ 次標量函數求值; 求 $\boldsymbol{J}(\boldsymbol{x}_k)\boldsymbol{s}_k=\boldsymbol{f}(\boldsymbol{x}_k)$ 的解系解n維線性方程組,$T(n)\approx n^3/3, O(n)=n^3$; 另需要求雅可比矩陣關於x的函數。 |
3. 布洛伊登(Broyden)方法(高維擬牛頓法和割線更新法的一種實現)
在一維中,割線法通過前兩個點的坐標做出過前兩個點的割線,將割線與橫軸的交點坐標作為下一個零點估計值,實質上是利用線性插值的方法代替牛頓法中的求導給出了切線的估計。割線法的好處是不用計算導函數。計算導函數所要求的符號求導運算可以說時間開銷等價於大量的浮點運算,且隨着函數的形式變復雜而越來越“昂貴”。對於非符號表達式的函數,計算導函數還需要插值,同樣非常昂貴。
牛頓法的這一缺陷在高維情況下更為嚴重:求導數的運算變成了求雅可比矩陣關於x的函數,原本只有一個標量函數符號求導變成了 $n^2$ 個符號求導,更不用說非符號表達式的函數求導函數。除此之外,每一步迭代中解線性方程組要求的 $n^3/3$ 的復雜度更產生了迭代復雜度的最高次項。因此高維的牛頓法尤為昂貴。
同時解決這兩個問題的一種方法稱為割線更新(Secant Updating)法。類似於一維的割線法,它的具體思路包括利用連續幾次的取點及其函數值生成Jacobi矩陣的估計值,而不需要先進行符號求導而后每迭代一次再耗費 $n^2$ 次標量函數求值生成。同時,所謂的“更新”是說每一次迭代只需要將之前Jacobi矩陣的分解(factorization)稍作更新改動即可,不用全盤重來,因此就可以每次省下 $n^3$ 量級的運算成本。由於基本框架繼承牛頓法,它也稱為擬牛頓法(Quasi-Newton Method)。
余下的問題即,如何確定這樣的Jacobi矩陣的近似矩陣,使得它既可以作為一個估計值,又可以使得每次迭代矩陣分解的變化盡可能少(並且易得)呢?選取近似矩陣是有自由度的,而實現割線更新方法的一種算法就是布羅伊登(Broyden)方法。對於以上兩個條件,Broyden方法要求Jacobi的近似矩陣以兩個形式滿足:
可以作為估計值 $\Leftrightarrow $ $\boldsymbol{B}_k$ 滿足割線方程 $\boldsymbol{B}_{k+1}(\boldsymbol{x}_{k+1}-\boldsymbol{x}_k)=\boldsymbol{f}(\boldsymbol{x}_{k+1})-\boldsymbol{f}(\boldsymbol{x}_k)$
新矩陣分解可以用較少的計算獲得 $\Leftrightarrow$ 相鄰的 $\boldsymbol{B}_k$ 滿足秩一變換 $\boldsymbol{B}_{k+1}=\boldsymbol{B}_k+\boldsymbol{u}\boldsymbol{v}^T$
於是最終選擇的迭代式:$$\boldsymbol{B}_{k+1}=\boldsymbol{B}_k+\frac{\boldsymbol{f}(\boldsymbol{x}_{k+1})\boldsymbol{s}_k^T}{\boldsymbol{s}_k^T\boldsymbol{s}_k}$$ 其中,$\boldsymbol{s}_k$ 為線性方程組 $\boldsymbol{B}_k\boldsymbol{s}_k=-\boldsymbol{f}(\boldsymbol{x}_k)$ 的解,而 $\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\boldsymbol{s}_k$ 。