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


R slanczos 计算对称矩阵的截断特征分解


R语言 slanczos 位于 mgcv 包(package)。

说明

使用 Lanczos 迭代求对称矩阵的截断特征分解。

用法

slanczos(A,k=10,kl=-1,tol=.Machine$double.eps^.5,nt=1)

参数

A

对称矩阵。

k

必须是非负数。如果kl 为负,则找到k 最大幅值特征值以及相应的特征向量。如果 kl 为非负数,则找到 k 最高特征值及其特征向量,并返回 kl 最低特征值及其特征向量。

kl

如果 kl 为非负,则返回 kl 最低特征值及其相应的特征向量(除了 k 最高特征值 + 向量)。负 kl 表示应返回 k 最大幅值特征值以及特征向量。

tol

用于特征值收敛测试的容差。特征值的误差将小于主特征值的大小乘以tol(或机器精度!)。

nt

用于 A 与向量的前导迭代乘法的线程数。在两个处理器的机器上可能没有显示速度提高。

细节

如果 kl 为非负,则返回最高的 k 和最低的 kl 特征值及其相应的特征向量。如果 kl 为负,则返回最大幅度的 k 特征值以及相应的特征向量。

该例程通过完全重新正交化实现 Lanczos 迭代,如 Demmel (1997) 中所述。 Lanczos 迭代迭代地构造一个三对角矩阵,随着迭代的进行(最极端的第一个),该矩阵的特征值收敛到 A 的特征值。还可以计算特征向量。对于小型 kkl,该方法比计算完整对称特征分解更快。使用 LAPACK 处理三对角特征值问题。

该实现并不是最优的:特别是内部三对角问题可以更有效地处理,并且通过不总是返回特征向量可以节省一些成本。

包含元素 values 的列表(特征值数组); vectors(列中有特征向量的矩阵); iter(所需的迭代次数)。

例子

 require(mgcv)
 ## create some x's and knots...
 set.seed(1);
 n <- 700;A <- matrix(runif(n*n),n,n);A <- A+t(A)
 
 ## compare timings of slanczos and eigen
 system.time(er <- slanczos(A,10))
 system.time(um <- eigen(A,symmetric=TRUE))
 
 ## confirm values are the same...
 ind <- c(1:6,(n-3):n)
 range(er$values-um$values[ind]);range(abs(er$vectors)-abs(um$vectors[,ind]))

作者

Simon N. Wood simon.wood@r-project.org

参考

Demmel, J. (1997) Applied Numerical Linear Algebra. SIAM

也可以看看

cyclic.p.spline

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Compute truncated eigen decomposition of a symmetric matrix。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。