当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。