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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。