與蓋爾圓:從理論到工程實(shí)踐的完整指南)
我讀矩陣論那會(huì)兒最直觀的感受是很多教材把“特征值的估計(jì)”講成了純理論小節(jié)讀完會(huì)做題但不知道它到底解決什么實(shí)際問題。后來做控制系統(tǒng)穩(wěn)定性分析和數(shù)值迭代收斂性判斷才意識(shí)到這個(gè)章節(jié)的價(jià)值被嚴(yán)重低估了。你手頭如果有一個(gè)幾十階的矩陣往往根本不需要把所有特征值精確實(shí)數(shù)地求出來只需要知道它們落在復(fù)平面的哪塊區(qū)域就能完成穩(wěn)定性判斷、可逆性驗(yàn)證和迭代法收斂性預(yù)判。這就是特征值估計(jì)的用武之地。這篇文章圍繞特征值的上下界估計(jì)和蓋爾圓展開適合正在學(xué)矩陣論的研究生、需要做矩陣分析判斷的工程師以及自學(xué)數(shù)值代數(shù)但希望把理論和實(shí)際接上線的朋友。蓋爾圓定理并不難真正有用的是圍繞它展開的一套操作怎么把圓盤畫小、怎么利用連通分支判斷特征值個(gè)數(shù)、怎么結(jié)合范數(shù)界給出完整估計(jì)。下面我把原理、推導(dǎo)、實(shí)操案例和踩過的坑一次講透。1. 不提精確求解特征值估計(jì)到底解決什么問題先拋一個(gè)反直覺的結(jié)論在絕大多數(shù)工程判斷場(chǎng)景里特征值估計(jì)的價(jià)值大于特征值精確計(jì)算。拿線性時(shí)不變系統(tǒng) dx/dt Ax 來說系統(tǒng)漸進(jìn)穩(wěn)定當(dāng)且僅當(dāng) A 的所有特征值都在復(fù)平面的左半平面即實(shí)部都小于零。如果矩陣是 45 階的你是否真的需要求出 45 個(gè)特征值才能判斷答案是不需要。你只需要一個(gè)足夠精確的“候選區(qū)域”如果這個(gè)區(qū)域整體落在左半平面那系統(tǒng)就是穩(wěn)定的。反過來如果候選區(qū)域有一部分越過了虛軸系統(tǒng)就可能不穩(wěn)定這時(shí)候再考慮精算或者重新設(shè)計(jì)參數(shù)。離散系統(tǒng) x_{k1} B x_k 的穩(wěn)定性同理它要求所有特征值落在單位圓內(nèi)也就是譜半徑 ρ(B) 1。迭代法收斂性分析里譜半徑本身就是主角。雅可比迭代、高斯-賽德爾迭代的收斂條件本質(zhì)上就是在估計(jì)迭代矩陣的譜半徑上界。更實(shí)際的一個(gè)場(chǎng)景是參數(shù)攝動(dòng)。工程中矩陣元素往往來自測(cè)量或辨識(shí)本身就帶誤差你辛辛苦苦把特征值算到小數(shù)點(diǎn)后十位結(jié)果參數(shù)一波動(dòng)特征值早就變了。這時(shí)候一套便宜的估計(jì)方法反而更貼合問題本質(zhì)它能告訴你特征值在多大的范圍內(nèi)變化這比一個(gè)貌似精確實(shí)則脆弱的數(shù)值有意義得多。還有一個(gè)容易忽視的點(diǎn)大規(guī)模稀疏矩陣的數(shù)值算法經(jīng)常需要預(yù)估譜的位置比如反冪法選位移、預(yù)處理子選參數(shù)都得先知道特征值大概在哪片區(qū)域。你不可能對(duì)百萬階矩陣先做 QR 算法但你可以用廉價(jià)的方法立刻得到譜的大致范圍然后把迭代法引導(dǎo)到正確方向。所以特征值估計(jì)不是“求不出精確解之后的妥協(xié)”它和精確計(jì)算是互補(bǔ)的估計(jì)負(fù)責(zé)快速鎖定區(qū)域、給判斷兜底精確計(jì)算負(fù)責(zé)在局部區(qū)域里把具體數(shù)值摳出來。理解了這一點(diǎn)你再看蓋爾圓定理的樸素結(jié)論就會(huì)覺得它其實(shí)是特別實(shí)用的一件工具。2. 蓋爾圓定理特征值活動(dòng)范圍的第一個(gè)硬邊界2.1 定理本身的表述設(shè) A 是 n 階復(fù)矩陣第 i 行的非對(duì)角元素絕對(duì)值之和記作R_i Σ_{j ≠ i} |a_ij|以對(duì)角元 a_ii 為圓心、R_i 為半徑做圓盤G_i { z ∈ C : |z - a_ii| ≤ R_i }蓋爾圓定理說A 的所有特征值都落在這些圓盤的并集里即 σ(A) ? ∪_{i1}^n G_i。換句話說每個(gè)特征值至少被其中一個(gè)圓盤圈住不會(huì)跑出去。這個(gè)定理最漂亮的地方是它把矩陣中最容易獲取的信息用了起來——你只需要看一眼對(duì)角元和非對(duì)角元絕對(duì)值的行和就能畫出一圈包圍所有特征值的區(qū)域。對(duì)編程和工程應(yīng)用來說這是一個(gè) O(n^2) 就能完成的計(jì)算性價(jià)比極高。2.2 證明的邏輯鏈特征向量最大分量為什么夠用證明的思路非常清奇但值得記住因?yàn)楹竺孀鱿嗨谱儞Q縮圓盤時(shí)你還要反復(fù)回到這個(gè)思路上來。取 λ 為 A 的一個(gè)特征值x ≠ 0 為對(duì)應(yīng)的特征向量。設(shè) |x_p| 是所有 |x_i| 中最大的那個(gè)。由 Ax λx 寫出第 p 個(gè)分量方程λ x_p Σ_j a_pj x_j移項(xiàng)后得到(λ - a_pp) x_p Σ_{j ≠ p} a_pj x_j兩邊取模|λ - a_pp| |x_p| ≤ Σ_{j ≠ p} |a_pj| |x_j|由于 |x_j| ≤ |x_p|右邊可以整體放大為 Σ_{j ≠ p} |a_pj| |x_p| R_p |x_p|。約掉 |x_p|就得到 |λ - a_pp| ≤ R_p——λ 落在了第 p 個(gè)蓋爾圓里。這個(gè)證明的巧妙之處在于挑特征向量里模最大的分量它把絕對(duì)值放縮做得幾乎不用損失什么信息。后面你會(huì)看到如果特征向量中各個(gè)分量的模差異很大那么最大分量對(duì)應(yīng)的那個(gè)圓盤往往能給出非常貼邊的估計(jì)而如果分量大小差不多圓盤就會(huì)偏保守。2.3 列蓋爾圓和“雙圓交集”的小技巧很多教材講了行蓋爾圓就結(jié)束了但實(shí)操中我強(qiáng)烈建議你把列蓋爾圓也畫出來。理由很簡(jiǎn)單A 和 A^T 有完全相同的特征值所以把蓋爾圓定理應(yīng)用到 A^T 上得到的是另一組圓盤C_i { z ∈ C : |z - a_ii| ≤ S_i }其中 S_i Σ_{j ≠ i} |a_ji|這是以第 i 列為單位計(jì)算的非對(duì)角元絕對(duì)值之和。因?yàn)樘卣髦当仨毻瑫r(shí)落在行圓盤并集和列圓盤并集里所以你實(shí)際上可以得到更緊的范圍σ(A) ? (∪_i G_i) ∩ (∪_j C_j)舉個(gè)最簡(jiǎn)單的例子一個(gè)非對(duì)稱矩陣可能在行方向上有一個(gè)很大的非對(duì)角元導(dǎo)致某個(gè)行圓盤半徑巨大但列方向看過去那個(gè)元素的貢獻(xiàn)卻是分到不同列上的列圓盤半徑可能小得多。兩個(gè)并集一交集整個(gè)候選區(qū)域往往能縮掉一大塊。我在實(shí)際做譜分布判斷時(shí)默認(rèn)套路就是行列兩組圓盤一起畫??梢暬蛿?shù)值計(jì)算成本幾乎為零但精度收益非??捎^。特別是當(dāng)你手頭沒有現(xiàn)成 API、只能從零開始寫判斷邏輯時(shí)先算行圓盤再算列圓盤再取交集比直接糊一個(gè)行圓盤并集靠譜得多。3. 當(dāng)圓盤連成一片連通分支決定特征值個(gè)數(shù)的判定規(guī)則3.1 孤立圓盤與唯一特征值蓋爾圓定理的第一層結(jié)論只告訴我們特征值被圈在并集里但沒說哪個(gè)圓盤里有多少個(gè)特征值。如果多個(gè)圓盤重疊在一起你只能說“它們共同圈住了若干未知個(gè)特征值”。但如果某個(gè)圓盤和其他所有圓盤都不相交它能給出強(qiáng)得多的結(jié)論這個(gè)孤立圓盤里恰好有 A 的一個(gè)特征值。為什么嚴(yán)格論證需要用到矩陣連續(xù)變形的技巧。構(gòu)造 A(t) D t(A - D)其中 D 是對(duì)角部分。當(dāng) t 從 0 變到 1 時(shí)矩陣從對(duì)角陣連續(xù)變到 A特征值軌跡是連續(xù)的。t 0 時(shí)第 i 個(gè)特征值就是 a_ii落在第 i 個(gè)圓盤里只要在變化過程中該圓盤始終不與其他圓盤相交特征值軌跡就不可能“換盤”所以最終第 i 個(gè)特征值仍留在圓盤里且因?yàn)閳A盤始終和其他圓盤隔離這個(gè)圓盤里恰好只有一個(gè)特征值。這個(gè)“連續(xù)變形”的思路特別重要你不需要知道特征值具體怎么走只需要知道它不會(huì)跳躍到另一個(gè)孤立的圓盤里。很多教材會(huì)把這段略過但如果不理解這層后面用蓋爾圓判斷特征值分離時(shí)會(huì)心虛。3.2 連通分支計(jì)數(shù)規(guī)則把孤立圓盤的結(jié)論推廣一下如果若干個(gè)圓盤連成一個(gè)連通分支且這個(gè)分支與其他圓盤都不相交那么這個(gè)連通分支里恰好包含該矩陣的 k 個(gè)特征值按代數(shù)重?cái)?shù)計(jì)。k 就是組成這個(gè)分支的圓盤個(gè)數(shù)。這個(gè)結(jié)論在實(shí)操中極有用。舉個(gè)場(chǎng)景你通過相似變換把矩陣處理成一個(gè)圓盤分支覆蓋 [-6, 14]、另一個(gè)圓盤分支覆蓋 [49, 51.5]兩塊區(qū)域隔得很遠(yuǎn)那么你立刻知道左邊區(qū)域有兩個(gè)特征值右邊區(qū)域也有兩個(gè)特征值。至于左邊兩個(gè)特征值是 -0.3 和 6.3還是 1 和 5蓋爾圓本身不能告訴你但你已經(jīng)把候選區(qū)域從整個(gè)復(fù)平面縮小到兩塊狹窄區(qū)域下一步無論是繼續(xù)精化估計(jì)還是直接做局部數(shù)值求解成本都小得多。反過來要警惕的是如果所有圓盤連成一片那么你只知道自己所有特征值都在這片區(qū)域內(nèi)至于里面是 1 個(gè)還是 n 個(gè)特征值蓋爾圓定理不提供任何信息。很多人在這上面栽跟頭一看大圓盤并集很整齊就下意識(shí)認(rèn)為里面特征值分布也很整齊這是錯(cuò)誤的。3.3 一個(gè)即學(xué)即用的推論嚴(yán)格對(duì)角占優(yōu)矩陣非奇異采用蓋爾圓的連通分支概念可以秒證一個(gè)在數(shù)值分析里反復(fù)被用到的結(jié)論嚴(yán)格對(duì)角占優(yōu)矩陣必然非奇異。如果一個(gè)矩陣滿足對(duì)每一行都有 |a_ii| Σ_{j≠i} |a_ij|那么每個(gè)蓋爾圓的中心 a_ii 的模大于半徑也就是說所有圓盤都不包含原點(diǎn)因此特征值不可能取到 0。既然矩陣沒有零特征值它就一定可逆。這個(gè)推論在迭代法收斂性分析、預(yù)處理子構(gòu)造和數(shù)值穩(wěn)定證明中經(jīng)常出現(xiàn)而且證明只需要一行。我自己在寫矩陣分解代碼時(shí)也習(xí)慣先檢查這個(gè)條件——如果矩陣嚴(yán)格對(duì)角占優(yōu)很多算法可以放心大膽地走完流程不需要額外加防退化代碼。4. 相似變換縮圓一個(gè)不改變特征值卻能改變估計(jì)精度的操作4.1 對(duì)角相似變換后圓盤半徑如何變化蓋爾圓的第一版通常畫出來很大原因是行的非對(duì)角元絕對(duì)值之和是個(gè)很粗糙的量。比如一個(gè)矩陣包含強(qiáng)耦合的兩個(gè)對(duì)角塊塊內(nèi)元素?cái)?shù)值較大但塊間耦合其實(shí)很弱這時(shí)候行圓盤的半徑會(huì)把弱耦合也算進(jìn)去導(dǎo)致圓盤一大片全糊在一起。要想讓圓盤變小辦法是施加對(duì)角相似變換B D^{-1} A DD diag(d_1, ..., d_n)d_i 0相似變換不改變特征值這是線性代數(shù)的基本結(jié)論。關(guān)鍵在于變換之后B 的第 i 行非對(duì)角元變成了 a_ij d_j / d_i所以新的蓋爾圓半徑為R_i(D) Σ_{j≠i} |a_ij| d_j / d_i注意圓心完全沒變因?yàn)樗袑?duì)角元都乘了 d_i^{-1} 再被 d_i 乘回去保持 a_ii 不變。也就是說你可以通過選擇一組正數(shù) d_i自由地拉伸或壓縮每個(gè)圓盤的半徑而不改變特征值的真實(shí)位置。這不是修改了矩陣的特征值再用蓋爾圓去蒙騙自己而是在同一個(gè)特征值集合上選擇了對(duì)蓋爾圓更友好的坐標(biāo)系。特征值一模一樣圓的半徑變了估計(jì)精度自然不同。4.2 怎么選縮放參數(shù)從特征向量到啟發(fā)式迭代很多人知道可以做對(duì)角相似變換但不知道 d_i 怎么選。最理想的選擇和特征向量直接掛鉤。如果 λ 是對(duì)應(yīng)于特征向量 x 的特征值取 d_i |x_i|那么對(duì)于任一行 i都有|λ - a_ii| ≤ Σ_{j≠i} |a_ij| |x_j| / |x_i|這個(gè)不等式右邊其實(shí)就是 R_i(D)。換句話說如果你已經(jīng)知道特征向量的分量大小那么用這些分量作為縮放系數(shù)蓋爾圓給出的界可以做得非常貼近真實(shí)特征值。但問題在于計(jì)算特征向量往往比估計(jì)特征值更貴、更難那怎么辦實(shí)操里常用的是迭代啟發(fā)式。你不需要精確的特征向量只需要大概知道特征值在哪片區(qū)域。比如你發(fā)現(xiàn)原始圓盤里有一個(gè)連通分支在 [49, 51.5]你判斷右下角 2 × 2 塊是相對(duì)獨(dú)立的那么對(duì)該塊內(nèi)部的分量取稍大的 d_i、對(duì)塊外分量取稍小的 d_i就能把塊內(nèi)圓盤半徑縮小把塊間耦合對(duì)半徑的貢獻(xiàn)壓下去。壓幾輪之后圓盤之間的分離會(huì)越來越明顯。對(duì)于只有兩個(gè)強(qiáng)相關(guān)行的情況可以精確推導(dǎo)。設(shè)第 1 行和第 2 行耦合其他行先不管令 d_11、d_2t那么第 1 個(gè)圓盤半徑變?yōu)?|a_12|·t第 2 個(gè)圓盤半徑變?yōu)?|a_21|/t。兩邊對(duì)稱地取平衡令 |a_12|·t |a_21|/t得到最優(yōu)縮放參數(shù)t sqrt(|a_21| / |a_12|)此時(shí)兩個(gè)圓盤半徑都等于 sqrt(|a_12|·|a_21|)這通常遠(yuǎn)小于原來的半徑和。這個(gè)公式我用的頻率極高尤其是處理兩行強(qiáng)耦合但其他行接近對(duì)角時(shí)一次縮放就能讓蓋爾圓從完全糊掉變成清晰分離。4.3 數(shù)值上容易翻車的三個(gè)細(xì)節(jié)第一d_i 之間差距不能太大。雖然理論上任意正數(shù)都行但數(shù)值上如果某個(gè) d_i 比其它 d_i 大出十個(gè)數(shù)量級(jí)變換矩陣 D 的條件數(shù)會(huì)爆炸計(jì)算 B 時(shí)浮點(diǎn)誤差會(huì)淹沒真的特征值信息。我自己的習(xí)慣是控制所有 d_i 的比例在 10^3 以內(nèi)如果超過這個(gè)范圍就分多個(gè)批次處理不要一步到位。第二縮放之后列蓋爾圓會(huì)變差。行圓盤半徑變小了但列圓盤半徑可能變大因?yàn)榱蟹较虻目s放系數(shù)恰好是倒過來的。所以調(diào)整完 d_i 之后一定要重新把行圓盤和列圓盤的并集交集畫出來看而不是只盯著行圓盤。優(yōu)化是一對(duì)矛盾行圓盤要小列圓盤就變大最終判斷要取兩者的交集所以最優(yōu)縮放不一定是單側(cè)拉到極限而是讓兩側(cè)比較均衡。第三縮放的目標(biāo)通常是“讓某個(gè)連通分支和其他分支分離”而不是盲目追求每個(gè)圓盤都最小。如果你的矩陣有 n 個(gè)圓盤其中兩個(gè)總是在重疊那說明這兩個(gè)特征值本身就靠得近再怎么縮放也很難把它們分開。硬要分離一個(gè)圓盤而不顧相鄰圓盤往往會(huì)把其他區(qū)域搞得更糊。實(shí)際操作中我會(huì)先把圓盤分成幾個(gè)可分離的大塊再逐塊細(xì)化而不是一次性對(duì)全矩陣求解最優(yōu) d_i。5. 譜半徑上界與實(shí)部虛部界蓋爾圓之外的另一組估計(jì)路線蓋爾圓適合畫“局部候選區(qū)域”但如果你想快速得到一個(gè)全局的譜半徑上界或者只想判斷矩陣是否穩(wěn)定范數(shù)界往往更快。這兩條路線不是二選一配合起來用效果最好。5.1 范數(shù)給譜半徑搭上限任意矩陣范數(shù) ||·||只要滿足相容性條件 ||Ax|| ≤ ||A||·||x||就有ρ(A) ≤ ||A||證明只需要取特征向量 x兩邊取范數(shù)|λ|·||x|| ||Ax|| ≤ ||A||·||x||約掉 ||x|| 即可。常用的范數(shù)里1-范數(shù)列和范數(shù)||A||_1 max_j Σ_i |a_ij|∞-范數(shù)行和范數(shù)||A||_∞ max_i Σ_j |a_ij|2-范數(shù)譜范數(shù)||A||_2 sqrt(λ_max(A^H A))Frobenius 范數(shù)||A||_F sqrt(Σ_i Σ_j |a_ij|^2)所以譜半徑的通用上界可以取這些范數(shù)的最小值ρ(A) ≤ min(||A||_1, ||A||_∞, ||A||_2, ||A||_F)這套方法的好處是計(jì)算量更小——特別是 1-范數(shù)和 ∞-范數(shù)只需要掃描一遍矩陣元素。雖然界通常比蓋爾圓粗糙但它在蓋爾圓完全糊掉的時(shí)候還能給出一個(gè)明確的譜半徑上限作為底線判斷非??煽?。5.2 Hermite部分控制實(shí)部斜Hermite部分控制虛部很多應(yīng)用要的不是模長(zhǎng)的界而是實(shí)部的界。比如連續(xù)系統(tǒng)穩(wěn)定性要求所有特征值實(shí)部小于 0。這時(shí)只靠 ρ(A) 還不夠因?yàn)樗豢刂颇iL(zhǎng)不控制實(shí)部。對(duì)任意矩陣 A定義它的 Hermite 部分H (A A^H) / 2記 λ_max(H) 和 λ_min(H) 為 H 的最大和最小特征值。由于 H 是 Hermite 矩陣它的特征值全是實(shí)數(shù)??梢宰C明A 的任意特征值 λ 的實(shí)部被夾在 H 的最小和最大特征值之間λ_min(H) ≤ Re(λ) ≤ λ_max(H)這個(gè)結(jié)論比計(jì)算全部特征值便宜得多因?yàn)槟阒恍枨笠粋€(gè) Hermite 矩陣 H 的最大/最小特征值Rayleigh 商迭代或 Lanczos 方法都能高效搞定。虛部的界由斜 Hermite 部分給出。定義S (A - A^H) / 2S 是斜 Hermite 矩陣特征值是純虛數(shù)。A 的任意特征值的虛部絕對(duì)值不超過 S 的譜半徑|Im(λ)| ≤ ρ(S)把這兩條合在一起你就能用一個(gè)圓盤外的矩形區(qū)域把特征值全部圈起來橫坐標(biāo)實(shí)部被 [λ_min(H), λ_max(H)] 夾住縱坐標(biāo)虛部被 [-ρ(S), ρ(S)] 夾住。這個(gè)矩形區(qū)域和蓋爾圓并集結(jié)合起來用判斷穩(wěn)定性時(shí)比單一方法更穩(wěn)。5.3 Rayleigh商與Hermite矩陣的特殊待遇如果 A 本身是 Hermite 矩陣情況會(huì)簡(jiǎn)單很多。Rayleigh 商給出了特征值范圍的特征λ_min(A) min_{x≠0} x^H A x / (x^H x)λ_max(A) max_{x≠0} x^H A x / (x^H x)這套等式雖然看起來簡(jiǎn)單但它把你對(duì)特征值范圍的估計(jì)變成了對(duì)二次型的估計(jì)。你不需要精確的最大最小特征值只要選取一些便宜的試探向量算 Rayleigh 商就可以逐步逼近真實(shí)譜區(qū)間。數(shù)值線性代數(shù)里的 Lanczos 方法本質(zhì)上就是在巧妙地選擇試探向量讓 Rayleigh 商快速收斂到極端特征值。實(shí)際工程里我常對(duì)非對(duì)稱矩陣算完 Hermite 部分的界再算幾個(gè)隨機(jī)向量的 Rayleigh 商做交叉驗(yàn)證。如果隨機(jī)向量的 Rayleigh 商接近 H 的最大特征值上界說明上界基本是緊的如果差很遠(yuǎn)說明 H 的極端特征值可能對(duì)應(yīng)著不常出現(xiàn)的特征向量這時(shí)光看界容易誤判。6. 完整算例從畫圓盤到矩陣穩(wěn)定性判定附避坑清單6.1 四階矩陣從頭算到尾直接上例子。設(shè)矩陣A [[2, 100, 0, 0], [0.1, 4, 0, 0], [0, 0, 50, 1], [0, 0, 0.5, 51]]這個(gè)矩陣可以看成兩個(gè) 2 階對(duì)角塊加上微量交叉耦合。先看行蓋爾圓第 1 行圓心 2半徑 |100| 0 0 100圓盤覆蓋實(shí)軸約 [-98, 102]第 2 行圓心 4半徑 |0.1| 0 0 0.1第 3 行圓心 50半徑 |1| 0 1第 4 行圓心 51半徑 |0.5| 0 0.5行圓盤并集是 [-98, 102] ∪ [49, 51.5]。注意 [-98, 102] 這個(gè)大區(qū)間把 [49, 51.5] 整個(gè)蓋住了所以從行圓盤并集看整個(gè)區(qū)域似乎連成一片你無法判斷 50 附近到底有幾個(gè)特征值。這就是典型的“蓋爾圓糊了”。再看列圓盤第 1 列圓心 2半徑 |0.1| 0 0 0.1第 2 列圓心 4半徑 |100| 0 0 100第 3 列圓心 50半徑 |0.5| 0 0.5第 4 列圓心 51半徑 |1| 0 1列圓盤并集是 [-96, 104] ∪ [49.5, 52]同樣糊成一團(tuán)。行列交集也還是覆蓋 [-96, 104] ∪ [49.5, 51.5]看起來沒救了。這時(shí)候相似變換登場(chǎng)??醋鲗?duì)前兩行做縮放令 d_11d_2td_3d_41。套用之前的半徑公式第 1 行新半徑100·t第 2 行新半徑0.1/t取 t sqrt(0.1 / 100) ≈ 0.0316兩個(gè)半徑同時(shí)變成 sqrt(0.1×100) ≈ 3.16。那么圓盤變成第 1 行圓心 2半徑 3.16覆蓋約 [-1.16, 5.16]第 2 行圓心 4半徑 3.16覆蓋約 [0.84, 7.16]第 3 行圓心 50半徑 1第 4 行圓心 51半徑 0.5這次清楚多了前兩行構(gòu)成連通分支覆蓋區(qū)域約 [-1.16, 7.16]里面恰好有 2 個(gè)特征值后兩行構(gòu)成另一個(gè)連通分支覆蓋區(qū)域約 [49, 51.5]里面恰好也有 2 個(gè)特征值。矩陣右側(cè)的兩個(gè)特征值被完全隔離出來了。用數(shù)值驗(yàn)算該矩陣的真實(shí)特征值約是 -0.316、6.316、49.634、51.366??瓷w爾圓的預(yù)測(cè)后兩個(gè)特征值確實(shí)都落在 [49, 51.5] 內(nèi)前兩個(gè)也都落在 [-1.16, 7.16] 內(nèi)一致。如果你只是想快速判斷這個(gè)矩陣是否穩(wěn)定光看連通分支就能得出結(jié)論有兩個(gè)特征值出現(xiàn)在正的實(shí)軸區(qū)域 [49, 51.5]離虛軸十萬八千里矩陣必然不穩(wěn)定。整個(gè)過程不用做一次特征值分解。6.2 用一行 Python 驗(yàn)證蓋爾圓的預(yù)測(cè)無論你的環(huán)境是科研還是工程驗(yàn)證蓋爾圓預(yù)測(cè)都很便宜。下面這段代碼可以原樣跑import numpy as np A np.array([ [2.0, 100.0, 0.0, 0.0], [0.1, 4.0, 0.0, 0.0], [0.0, 0.0, 50.0, 1.0], [0.0, 0.0, 0.5, 51.0] ]) print(np.linalg.eigvals(A))輸出的特征值順序可能不同但數(shù)值就是圍繞 -0.316、6.316、49.634、51.366 這幾個(gè)數(shù)。你還可以順手加三行業(yè)務(wù)邏輯把行圓盤半徑算一遍、把相似變換后的圓盤半徑算一遍、判斷連通分支就能在更大的矩陣上復(fù)用這套流程。6.3 實(shí)際操作中容易踩的坑第一個(gè)坑只畫行圓盤不畫列圓盤。有的矩陣行圓盤并集覆蓋了整個(gè)右半平面列圓盤卻能把范圍限制得很小。兩個(gè)并集取交集不會(huì)貴到哪去但能顯著提高判斷精度。第二個(gè)坑看到圓盤并集連成一片就以為特征值也均勻分布。連通分支計(jì)數(shù)只適用于“孤立連通分支”。如果全部圓盤連在一起你只能得到一個(gè)總體的候選區(qū)域無法對(duì)特征值個(gè)數(shù)做分配。第三個(gè)坑把蓋爾圓并集的空處理解為“這里一定沒有特征值”。嚴(yán)格說圓盤外確實(shí)沒有特征值但圓盤內(nèi)也不代表每個(gè)區(qū)域都有特征值。做矩陣穩(wěn)定性判斷時(shí)要記住蓋爾圓是必要非充分式的工具——它只會(huì)“放行”安全的矩陣不會(huì)“保證”危險(xiǎn)的矩陣一定有風(fēng)險(xiǎn)。第四個(gè)坑相似變換縮放參數(shù)拉得太極端。前面說了d_i 差距太大時(shí)變換矩陣條件數(shù)會(huì)很差浮點(diǎn)誤差直接污染計(jì)算結(jié)果。尤其在分析上矩陣已經(jīng)是病態(tài)的時(shí)候盲目提高縮放比例反而會(huì)讓圓盤失去意義。第五個(gè)坑把實(shí)軸上的圓盤交集當(dāng)成整個(gè)復(fù)平面的完整譜分布。特征值是復(fù)數(shù)蓋爾圓畫在復(fù)平面上即使矩陣所有元素都是實(shí)數(shù)特征值也可能成對(duì)出現(xiàn)在虛軸兩側(cè)。判斷穩(wěn)定性時(shí)只看實(shí)軸范圍是有盲區(qū)的必須同時(shí)看虛部方向上的覆蓋。就我個(gè)人的使用習(xí)慣而言蓋爾圓是最適合放進(jìn)“日常檢查清單”的工具先花一秒鐘算行圓盤和列圓盤再用相似變換做一輪快速精化輸出的候選區(qū)域直接指導(dǎo)后續(xù)用哪種數(shù)值算法。它不負(fù)責(zé)告訴你特征值是多少但它能告訴你特征值大概長(zhǎng)在哪個(gè)位置這種“先圈地再細(xì)挖”的思路在大規(guī)模計(jì)算里非常省事。如果你之后遇到需要更嚴(yán)密譜界的問題還可以往 Ostrowski 圓盤、Brualdi 特征值包含區(qū)域這些方向繼續(xù)深挖但先把蓋爾圓這層地基打好多數(shù)實(shí)際問題已經(jīng)夠用了。