當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R eigen 矩陣的譜分解


R語言 eigen 位於 base 包(package)。

說明

計算數值(雙精度、整數、邏輯)或複矩陣的特征值和特征向量。

用法

eigen(x, symmetric, only.values = FALSE, EISPACK = FALSE)

參數

x

要計算其譜分解的數值或複數矩陣。邏輯矩陣被強製轉換為數字。

symmetric

如果 TRUE ,則假定矩陣是對稱的(如果複數則為埃爾米特矩陣),並且僅使用其下三角形(包括對角線)。如果未指定symmetric,則使用isSymmetric(x)

only.values

如果 TRUE ,則僅計算並返回特征值,否則返回特征值和特征向量。

EISPACK

合乎邏輯的。已失效並被忽視。

細節

如果未指定symmetric,則isSymmetric(x) 確定矩陣是否對稱,直至出現可能的數值誤差。自己設置該值更可靠且通常更快。

對於大型矩陣來說,計算特征向量是最慢的部分。

在 real-world 計算機上計算矩陣的特征分解會出現錯誤:最終的分析是 Wilkinson (1965)。您所希望的隻是一個與 x 相當接近的問題的解決方案。因此,即使實數不對稱 x 可能具有具有重複實特征值的代數解,計算出的解也可能是具有複共軛特征值對的類似矩陣。

底層 LAPACK 代碼的不成功結果將導致錯誤,並給出正錯誤代碼(最常見的是 1 ):這些隻能通過詳細研究 FORTRAN 代碼來解釋。

x 中缺少 NaN 或無限值將給出錯誤。

x 的譜分解以包含組件的列表形式返回

values

包含 x 特征值的向量,根據非對稱情況下的 Mod(values) 按降序排序,當它們可能很複雜時(即使對於實矩陣)。對於實數不對稱矩陣,僅當檢測到複數共軛特征值對時,向量才是複數。

vectors

其列包含 x 的特征向量的 矩陣,或 NULL (如果 only.valuesTRUE )。向量被標準化為單位長度。

回想一下,特征向量僅定義為一個常數:即使指定了長度,它們仍然僅定義為模一標量(實矩陣的符號)。

only.values 不為 true 時,默認情況下,結果是 S3 類 "eigen"

如果 r <- eigen(A)V <- r$vectors; lam <- r$values ,則

(直到數值模糊),其中 diag(lam)

例子

eigen(cbind(c(1,-1), c(-1,1)))
eigen(cbind(c(1,-1), c(-1,1)), symmetric = FALSE)
# same (different algorithm).

eigen(cbind(1, c(1,-1)), only.values = TRUE)
eigen(cbind(-1, 2:1)) # complex values
eigen(print(cbind(c(0, 1i), c(-1i, 0)))) # Hermite ==> real Eigenvalues
## 3 x 3:
eigen(cbind( 1, 3:1, 1:3))
eigen(cbind(-1, c(1:2,0), 0:2)) # complex values

來源

eigen 使用 LAPACK 例程 DSYEVRDGEEVZHEEVZGEEV

LAPACK 來自https://netlib.org/lapack/,其指南在參考文獻中列出。

參考

Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at https://netlib.org/lapack/lug/lapack_lug.html.

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Wilkinson, J. H. (1965) The Algebraic Eigenvalue Problem. Clarendon Press, Oxford.

也可以看看

svdeigen 的泛化; qrchol 進行相關分解。

要計算矩陣的行列式,qr 分解效率更高:det

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Spectral Decomposition of a Matrix。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。