scipy.linalg.
eig#
- scipy.linalg.eig(a, b=None, left=False, right=True, overwrite_a=False, overwrite_b=False, check_finite=True, homogeneous_eigvals=False)[原始碼]#
求解方陣的普通或廣義特徵值問題。
找出一般矩陣的特徵值 w 和右或左特徵向量
a vr[:,i] = w[i] b vr[:,i] a.H vl[:,i] = w[i].conj() b.H vl[:,i]
其中
.H
是 Hermitian 共軛轉置。- 參數:
- a(M, M) 類陣列
將計算其特徵值和特徵向量的複數或實數矩陣。
- b(M, M) 類陣列,選用
廣義特徵值問題中的右手邊矩陣。預設值為 None,假設為單位矩陣。
- leftbool,選用
是否計算並傳回左特徵向量。預設值為 False。
- rightbool,選用
是否計算並傳回右特徵向量。預設值為 True。
- overwrite_abool,選用
是否覆寫 a;可能會提高效能。預設值為 False。
- overwrite_bbool,選用
是否覆寫 b;可能會提高效能。預設值為 False。
- check_finitebool,選用
是否檢查輸入矩陣是否僅包含有限數字。 停用可能會提高效能,但如果輸入包含無限或 NaN,可能會導致問題(崩潰、不終止)。
- homogeneous_eigvalsbool,選用
如果為 True,則以齊次座標傳回特徵值。 在這種情況下,
w
是一個 (2, M) 陣列,使得w[1,i] a vr[:,i] = w[0,i] b vr[:,i]
預設值為 False。
- 傳回值:
- w(M,) 或 (2, M) double 或 complex ndarray
特徵值,每個都根據其重數重複。 形狀為 (M,),除非
homogeneous_eigvals=True
。- vl(M, M) double 或 complex ndarray
對應於特徵值
w[i]
的左特徵向量是列vl[:,i]
。 僅在left=True
時傳回。 左特徵向量未標準化。- vr(M, M) double 或 complex ndarray
對應於特徵值
w[i]
的標準化右特徵向量是列vr[:,i]
。 僅在right=True
時傳回。
- 引發:
- LinAlgError
如果特徵值計算未收斂。
參見
eigvals
一般陣列的特徵值
eigh
對稱/Hermitian 陣列的特徵值和右特徵向量。
eig_banded
對稱/Hermitian 帶狀矩陣的特徵值和右特徵向量
eigh_tridiagonal
對稱/Hermitian 三對角矩陣的特徵值和右特徵向量
範例
>>> import numpy as np >>> from scipy import linalg >>> a = np.array([[0., -1.], [1., 0.]]) >>> linalg.eigvals(a) array([0.+1.j, 0.-1.j])
>>> b = np.array([[0., 1.], [1., 1.]]) >>> linalg.eigvals(a, b) array([ 1.+0.j, -1.+0.j])
>>> a = np.array([[3., 0., 0.], [0., 8., 0.], [0., 0., 7.]]) >>> linalg.eigvals(a, homogeneous_eigvals=True) array([[3.+0.j, 8.+0.j, 7.+0.j], [1.+0.j, 1.+0.j, 1.+0.j]])
>>> a = np.array([[0., -1.], [1., 0.]]) >>> linalg.eigvals(a) == linalg.eig(a)[0] array([ True, True]) >>> linalg.eig(a, left=True, right=False)[1] # normalized left eigenvector array([[-0.70710678+0.j , -0.70710678-0.j ], [-0. +0.70710678j, -0. -0.70710678j]]) >>> linalg.eig(a, left=False, right=True)[1] # normalized right eigenvector array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])