eigsh#
- scipy.sparse.linalg.eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, mode='normal')[原始碼]#
尋找實對稱方陣或複 Hermitian 矩陣 A 的 k 個特徵值和特徵向量。
解
A @ x[i] = w[i] * x[i]
,w[i] 特徵值的標準特徵值問題,以及對應的特徵向量 x[i]。如果指定 M,則解
A @ x[i] = w[i] * M @ x[i]
,w[i] 特徵值的廣義特徵值問題,以及對應的特徵向量 x[i]。請注意,對於 A 是複 Hermitian 矩陣的情況,沒有專門的常式。在這種情況下,
eigsh()
將呼叫eigs()
並傳回由此獲得的特徵值的實部。- 參數:
- Andarray、稀疏矩陣或 LinearOperator
表示運算
A @ x
的方陣運算元,其中A
是實對稱或複 Hermitian。對於挫曲模式(見下文),A
必須另外是正定矩陣。- kint,選用
所需的特徵值和特徵向量的數量。k 必須小於 N。無法計算矩陣的所有特徵向量。
- 傳回值:
- warray
k 個特徵值的陣列。
- varray
表示 k 個特徵向量的陣列。欄位
v[:, i]
是對應於特徵值w[i]
的特徵向量。
- 其他參數:
- MN x N 矩陣、陣列、稀疏矩陣或線性運算元,表示
廣義特徵值問題的運算
M @ x
A @ x = w * M @ x。
如果 A 是實數,則 M 必須表示實對稱矩陣;如果 A 是複數,則 M 必須表示複 Hermitian 矩陣。為了獲得最佳結果,M 的資料類型應與 A 的資料類型相同。此外
如果 sigma 為 None,則 M 是對稱正定矩陣。
如果指定 sigma,則 M 是對稱正半定矩陣。
在挫曲模式下,M 是對稱不定矩陣。
如果 sigma 為 None,則 eigsh 需要一個運算元來計算線性方程式
M @ x = b
的解。這在內部透過顯式矩陣 M 的(稀疏)LU 分解,或透過一般線性運算元的迭代求解器來完成。或者,使用者可以提供矩陣或運算元 Minv,它給出x = Minv @ b = M^-1 @ b
。- sigma實數
使用位移反轉模式尋找 sigma 附近的特徵值。這需要一個運算元來計算線性系統
[A - sigma * M] x = b
的解,其中如果未指定,則 M 是單位矩陣。這在內部透過顯式矩陣 A 和 M 的(稀疏)LU 分解來計算,或者如果 A 或 M 是通用線性運算元,則透過迭代求解器來計算。或者,使用者可以提供矩陣或運算元 OPinv,它給出x = OPinv @ b = [A - sigma * M]^-1 @ b
。請注意,當指定 sigma 時,關鍵字 'which' 是指位移的特徵值w'[i]
,其中如果 mode == 'normal',
w'[i] = 1 / (w[i] - sigma)
。如果 mode == 'cayley',
w'[i] = (w[i] + sigma) / (w[i] - sigma)
。如果 mode == 'buckling',
w'[i] = w[i] / (w[i] - sigma)
。(請參閱下面「mode」中的進一步討論)
- v0ndarray,選用
迭代的起始向量。預設值:隨機
- ncvint,選用
產生的 Lanczos 向量的數量 ncv 必須大於 k 且小於 n;建議
ncv > 2*k
。預設值:min(n, max(2*k + 1, 20))
- whichstr ['LM' | 'SM' | 'LA' | 'SA' | 'BE']
如果 A 是複 Hermitian 矩陣,則 'BE' 無效。要尋找的 k 個特徵向量和特徵值
'LM' : 最大(依量值)特徵值。
'SM' : 最小(依量值)特徵值。
'LA' : 最大(代數)特徵值。
'SA' : 最小(代數)特徵值。
'BE' : 從頻譜的每一端取一半 (k/2)。
當 k 為奇數時,從高端傳回多一個 (k/2+1)。當 sigma != None 時,'which' 是指位移的特徵值
w'[i]
(請參閱上面「sigma」中的討論)。ARPACK 通常更擅長尋找大值而不是小值。如果需要小特徵值,請考慮使用位移反轉模式以獲得更好的效能。- maxiterint,選用
允許的最大 Arnoldi 更新迭代次數。預設值:
n*10
- tolfloat
特徵值的相對準確度(停止條件)。預設值 0 表示機器精度。
- MinvN x N 矩陣、陣列、稀疏矩陣或 LinearOperator
請參閱上面 M 中的註解。
- OPinvN x N 矩陣、陣列、稀疏矩陣或 LinearOperator
請參閱上面 sigma 中的註解。
- return_eigenvectorsbool
除了特徵值之外,還傳回特徵向量 (True)。此值決定特徵值的排序順序。排序順序也取決於 which 變數。
- 對於 which = 'LM' 或 'SA'
如果 return_eigenvectors 為 True,則特徵值依代數值排序。
如果 return_eigenvectors 為 False,則特徵值依絕對值排序。
- 對於 which = 'BE' 或 'LA'
特徵值始終依代數值排序。
- 對於 which = 'SM'
如果 return_eigenvectors 為 True,則特徵值依代數值排序。
如果 return_eigenvectors 為 False,則特徵值依遞減的絕對值排序。
- modestring ['normal' | 'buckling' | 'cayley']
指定用於位移反轉模式的策略。此引數僅適用於實數值 A 和 sigma != None。對於位移反轉模式,ARPACK 內部解特徵值問題
OP @ x'[i] = w'[i] * B @ x'[i]
,並將產生的 Ritz 向量 x'[i] 和 Ritz 值 w'[i] 轉換為問題A @ x[i] = w[i] * M @ x[i]
的所需特徵向量和特徵值。模式如下- 'normal'
OP = [A - sigma * M]^-1 @ M, B = M, w'[i] = 1 / (w[i] - sigma)
- 'buckling'
OP = [A - sigma * M]^-1 @ A, B = A, w'[i] = w[i] / (w[i] - sigma)
- 'cayley'
OP = [A - sigma * M]^-1 @ [A + sigma * M], B = M, w'[i] = (w[i] + sigma) / (w[i] - sigma)
模式的選擇會影響關鍵字 'which' 選擇哪些特徵值,也可能影響收斂的穩定性(請參閱 [2] 中的討論)。
- 引發:
- ArpackNoConvergence
當未獲得請求的收斂時。
目前收斂的特徵值和特徵向量可以作為例外物件的
eigenvalues
和eigenvectors
屬性找到。
註解
此函數是 ARPACK [1] SSEUPD 和 DSEUPD 函數的包裝函式,這些函數使用隱式重新啟動 Lanczos 方法來尋找特徵值和特徵向量 [2]。
參考文獻
[1]ARPACK 軟體,opencollab/arpack-ng
[2]R. B. Lehoucq、D. C. Sorensen 和 C. Yang,《ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods》。SIAM,費城,賓夕法尼亞州,1998 年。
範例
>>> import numpy as np >>> from scipy.sparse.linalg import eigsh >>> identity = np.eye(13) >>> eigenvalues, eigenvectors = eigsh(identity, k=6) >>> eigenvalues array([1., 1., 1., 1., 1., 1.]) >>> eigenvectors.shape (13, 6)