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]])