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


R Schur-methods Schur 分解方法


R語言 Schur-methods 位於 Matrix 包(package)。

說明

計算 實數矩陣 的 Schur 分解,其具有一般形式

其中 是正交矩陣, 是塊上三角矩陣,其中 對角塊指定 的實數和複數共軛特征值。 的列向量是 的 Schur 向量, 的 Schur 形式。

方法基於 LAPACK 例程 dgees 構建。

用法

Schur(x, vectors = TRUE, ...)

參數

x

要因式分解的 finite 方陣或 Matrix

vectors

一個合乎邏輯的。如果TRUE(默認值),則除了 Schur 形式之外還計算 Schur 向量。

...

傳入或傳出方法的更多參數。

表示分解的對象,如果 vectors = TRUE 則繼承自虛擬類 SchurFactorization 。目前,在這種情況下,特定類始終是Schur。例外情況是 x 是傳統矩陣,在這種情況下,結果是包含 Schur 對象的 QTEValues 槽的命名列表。

如果 vectors = FALSE ,則結果是相同的命名列表,但沒有 Q

例子


showMethods("Schur", inherited = FALSE)
set.seed(0)

Schur(Hilbert(9L)) # real eigenvalues

(A <- Matrix(round(rnorm(25L, sd = 100)), 5L, 5L))
(sch.A <- Schur(A)) # complex eigenvalues

## A ~ Q T Q' in floating point
str(e.sch.A <- expand2(sch.A), max.level = 2L)
stopifnot(all.equal(A, Reduce(`%*%`, e.sch.A)))

(e1 <- eigen(sch.A@T, only.values = TRUE)$values)
(e2 <- eigen(    A  , only.values = TRUE)$values)
(e3 <- sch.A@EValues)

stopifnot(exprs = {
    all.equal(e1, e2, tolerance = 1e-13)
    all.equal(e1, e3[order(Mod(e3), decreasing = TRUE)], tolerance = 1e-13) 
    identical(Schur(A, vectors = FALSE),
              list(T = sch.A@T, EValues = e3))    
    identical(Schur(as(A, "matrix")),
              list(Q = as(sch.A@Q, "matrix"),
                   T = as(sch.A@T, "matrix"), EValues = e3))
})

參考

The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dgees.f.

Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. doi:10.56021/9781421407944

也可以看看

Schur 及其方法。

dgeMatrix

通用函數 expand1expand2 ,用於根據結果構造矩陣因子。

通用函數 CholeskyBunchKaufmanluqr 用於計算其他因式分解。

相關用法


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