R igraph 手册页

如果您从 R 中使用 igraph,请使用此选项

arpack_defaults {igraph}R 文档

ARPACK 特征向量计算

描述

用于计算稀疏矩阵的特征向量的 ARPACK 库的接口

用法

arpack_defaults

arpack(
  func,
  extra = NULL,
  sym = FALSE,
  options = arpack_defaults,
  env = parent.frame(),
  complex = !sym
)

参数

func

执行矩阵-向量乘法的函数。ARPACK 要求用户执行这些操作。该函数将向量 x 作为第一个参数,并且应返回 Ax,其中 A 是“输入矩阵”。 (输入矩阵永远不会显式给出。)第二个参数是 extra

extra

要提供给 func 的额外参数。

sym

逻辑标量,指示输入矩阵是否对称。如果它是对称的,请始终在此处提供 TRUE,因为它可以加快计算速度。

选项

ARPACK 的选项,一个命名列表,用于覆盖一些默认选项值。请参阅下面的详细信息。

env

将在其中评估 func 的环境。

complex

是否将 ARPACK 返回的特征向量转换为 R 复向量。默认情况下,这对于对称问题(这些问题只有实特征向量/值)不执行,而只对非对称问题执行。如果您有一个非对称问题,但您确信结果将是实数,那么请在此处提供 FALSE

Format

一个长度为 14 的 list 类对象。

详细信息

ARPACK 是一个用于解决大规模特征值问题的库。该软件包旨在计算一般 n 乘以 n 矩阵 A 的几个特征值和相应的特征向量。它最适合于大型稀疏或结构化矩阵 A,其中结构化意味着矩阵向量乘积 w <- Av 需要阶数 n 而不是通常的阶数 n^2 浮点运算。

此函数是 ARPACK 的接口。igraph 不包含所有 ARPACK 例程,仅包含使用双精度实数处理对称和非对称特征值问题的例程。

ARPACK 中的特征值计算(在最简单的情况下)涉及 Av 乘积的计算,其中 A 是我们使用的矩阵,v 是任意向量。在 fun 参数中提供的函数应执行此乘积。如果可以有效地完成乘积,例如,如果矩阵是稀疏的,则 arpack 通常能够非常快速地计算特征值。

options 参数指定要执行的计算类型。它是一个包含以下成员的列表,它们直接对应于 ARPACK 参数。在输入时,它具有以下字段

bmat

字符常量,可能的值:‘I’,标准特征值问题,Ax=\lambda x;和‘G’,广义特征值问题,Ax=\lambda B x。目前仅支持 ‘I’。

n

数值标量。特征值问题的维度。仅当直接调用 arpack 时才需要设置此值。(即,对于 eigen_centralitypage_rank 等不需要。)

which

指定要计算哪些特征值/向量,具有正好两个字符的字符常量。

对称输入矩阵的可能值

"LA"

计算 nev 个最大(代数)特征值。

"SA"

计算 nev 个最小(代数)特征值。

"LM"

计算 nev 个最大(按幅度)特征值。

"SM"

计算 nev 个最小(按幅度)特征值。

"BE"

计算 nev 个特征值,一半来自频谱的每一端。当 nev 是奇数时,计算高端比低端多一个。

非对称输入矩阵的可能值

"LM"

计算 nev 个最大幅度的特征值。

"SM"

计算 nev 个最小幅度的特征值。

"LR"

计算 nev 个最大实部的特征值。

"SR"

计算 nev 个最小实部的特征值。

"LI"

计算 nev 个最大虚部的特征值。

"SI"

计算 nev 个最小虚部的特征值。

此参数有时会被各种函数覆盖,例如,page_rank 始终设置为 ‘LM’。

nev

数值标量。要计算的特征值的数量。

tol

数值标量。停止标准:如果 Ritz 值的误差小于其估计值的 tol 倍,则认为 Ritz 值的相对精度是可以接受的。如果将其设置为零,则使用机器精度。

ncv

要生成的 Lanczos 向量的数量。

ldv

数值标量。在当前实现中应将其设置为零。

ishift

零或一。如果为零,则移位由用户通过反向通信提供。如果为一,则关于缩减的三对角矩阵 T 的精确移位。请始终将其设置为一。

maxiter

允许的最大 Arnoldi 更新迭代次数。

nb

要在递归中使用的块大小。请始终将此值保留为默认值 1。

模式

要解决的特征值问题的类型。如果输入矩阵是对称的,则可能的值

1

Ax=\lambda x, A 是对称的。

2

Ax=\lambda Mx, A 是对称的, M 是对称正定的。

3

Kx=\lambda Mx, K 是对称的, M 是对称半正定的。

4

Kx=\lambda KGx, K 是对称半正定的, KG 是对称不定的。

5

Ax=\lambda Mx, A 是对称的, M 是对称半正定的。(Cayley 变换模式。)

请注意,仅测试了 mode==1,其他值可能无法正常工作。

如果输入矩阵不是对称的,则可能的值

1

Ax=\lambda x.

2

Ax=\lambda Mx, M 是对称正定的。

3

Ax=\lambda Mx, M 是对称半正定的。

4

Ax=\lambda Mx, M 是对称半正定的。

请注意,仅测试了 mode==1,其他值可能无法正常工作。

开始

目前未使用。以后它将用于设置起始向量。

sigma

目前未使用。

sigmai

目前未使用。

在输出时,将添加以下附加字段

info

ARPACK 的错误标志。可能的值

0

正常退出。

1

已达到最大迭代次数。

3

在隐式重启 Arnoldi 迭代的一个周期中无法应用移位。一种可能性是相对于 nev 增加 ncv 的大小。

ARPACK 可以返回比这些更多的错误条件,但它们会转换为常规 igraph 错误。

iter

进行的 Arnoldi 迭代次数。

nconv

“收敛”的 Ritz 值的数量。这表示满足收敛标准的 Ritz 值的数量。

numop

矩阵-向量乘法的总数。

numopb

目前未使用。

numreo

重正交化的总步数。

有关更多详细信息,请参阅 ARPACK 文档。

一个具有以下成员的命名列表

values

数值向量,所需的特征值。

vectors

数值矩阵,所需的特征向量作为列。如果 complex=TRUE(非对称问题的默认值),则该矩阵是复数。

选项

一个带有提供的 options 和有关已执行计算的一些信息的命名列表,包括 ARPACK 退出代码。请参阅上面的详细信息。

作者

Rich Lehoucq、Kristi Maschhoff、Danny Sorensen、Chao Yang 为 ARPACK,Gabor Csardi csardi.gabor@gmail.com 为 R 接口。

参考

D.C. Sorensen, Implicit Application of Polynomial Filters in a k-Step Arnoldi Method. SIAM J. Matr. Anal. Apps., 13 (1992), pp 357-385.

R.B. Lehoucq, Analysis and Implementation of an Implicitly Restarted Arnoldi Iteration. Rice University Technical Report TR95-13, Department of Computational and Applied Mathematics.

B.N. Parlett & Y. Saad, Complex Shift and Invert Strategies for Real Matrices. Linear Algebra and its Applications, vol 88/89, pp 575-595, (1987).

参见

eigen_centrality, page_rank, hub_score, cluster_leading_eigen 是 igraph 中使用 ARPACK 的一些函数。

示例


# Identity matrix
f <- function(x, extra=NULL) x
arpack(f, options=list(n=10, nev=2, ncv=4), sym=TRUE)

# Graph laplacian of a star graph (undirected), n>=2
# Note that this is a linear operation
f <- function(x, extra=NULL) {
  y <- x
  y[1] <- (length(x)-1)*x[1] - sum(x[-1])
  for (i in 2:length(x)) {
    y[i] <- x[i] - x[1]
  }
  y
}

arpack(f, options=list(n=10, nev=1, ncv=3), sym=TRUE)

# double check
eigen(laplacian_matrix(make_star(10, mode="undirected")))

## First three eigenvalues of the adjacency matrix of a graph
## We need the 'Matrix' package for this
if (require(Matrix)) {
  set.seed(42)
  g <- sample_gnp(1000, 5/1000)
  M <- as_adj(g, sparse=TRUE)
  f2 <- function(x, extra=NULL) { cat("."); as.vector(M %*% x) }
  baev <- arpack(f2, sym=TRUE, options=list(n=vcount(g), nev=3, ncv=8,
                                  which="LM", maxiter=2000))
}

[包 igraph 版本 1.3.5 索引]