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


R lu-methods LU 分解的方法


R语言 lu-methods 位于 Matrix 包(package)。

说明

计算 实数矩阵 的旋转 LU 分解,其具有一般形式

或(等效地)

其中 置换矩阵, 置换矩阵, 单位下梯形矩阵, 上梯形矩阵。

denseMatrix 的方法基于 LAPACK 例程 dgetrf 构建,该例程不会置换列,因此 是单位矩阵。

sparseMatrix 的方法基于 CSparse 例程 cs_lu 构建,该例程需要 ,因此 是三角矩阵。

用法

lu(x, ...)
## S4 method for signature 'dgeMatrix'
lu(x, warnSing = TRUE, ...)
## S4 method for signature 'dgCMatrix'
lu(x, errSing = TRUE, order = NA_integer_,
  tol = 1, ...)
## S4 method for signature 'dsyMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'dsCMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'matrix'
lu(x, ...)

参数

x

要进行因式分解的 finite 矩阵或 Matrix,如果稀疏,则必须是方阵。

warnSing

一个逻辑,指示是否应针对单数 x 发出 warning 信号。仅由用于稠密矩阵的方法使用。

errSing

一个逻辑,指示是否应针对单数 x 发出 error 信号。仅由稀疏矩阵的方法使用。

order

0:3 中的整数传递给 CSparse 例程 cs_sqr ,指示选择列排列 的策略。 0 表示没有列排列。图 1、2 和 3 表示 的 fill-reducing 排序,其中 是删除了 “dense” 行的 。如果是tol == 1,则NA(默认值)相当于 2,否则相当于 1。除非您知道 的列顺序已经合理,否则请勿设置为 0。

tol

一个号码。如果原始主元元素的绝对值超过 tol * a ,则使用原始主元元素,其中 a 是其他可能主元元素绝对值的最大值。仅当您知道自己在做什么时才设置tol < 1

cache

指示结果是否应缓存在 x@factors[["LU"]] 中的逻辑。请注意,缓存是实验性的,只有扩展 compMatrix 的类的方法才会有此参数。

...

传入或传出方法的更多参数。

细节

x 被确定为 near-singular 时发生的情况因方法而异。类 dgeMatrix 的方法完成因式分解,如果 warnSing = TRUE 则发出警告,并且在任何情况下返回有效的 denseLU 对象。使用此方法的用户可以使用合适的警告处理程序来检测奇异的x;请参阅tryCatch。相反,类 dgCMatrix 的方法放弃进一步计算,如果 errSing = TRUE 则抛出错误,否则返回 NA 。此方法的用户可以使用错误处理程序或通过设置 errSing = FALSE 并使用 is(., "sparseLU") 测试正式结果来检测单个 x

表示分解的对象,继承自虚拟类 LU 。特定类是 denseLU ,除非 x 继承自虚拟类 sparseMatrix ,在这种情况下它是 sparseLU

例子


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

## ---- Dense ----------------------------------------------------------

(A1 <- Matrix(rnorm(9L), 3L, 3L))
(lu.A1 <- lu(A1))

(A2 <- round(10 * A1[, -3L]))
(lu.A2 <- lu(A2))

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

## ---- Sparse ---------------------------------------------------------

A3 <- as(readMM(system.file("external/pores_1.mtx", package = "Matrix")),
         "CsparseMatrix")
(lu.A3 <- lu(A3))

## A ~ P1' L U P2' in floating point
str(e.lu.A3 <- expand2(lu.A3), max.level = 2L)
stopifnot(all.equal(A3, Reduce(`%*%`, e.lu.A3)))

参考

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

Davis, T. A. (2006). Direct methods for sparse linear systems. Society for Industrial and Applied Mathematics. doi:10.1137/1.9780898718881

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

也可以看看

denseLUsparseLU 及其方法。

dgeMatrixdgCMatrix

通用函数 expand1expand2 ,用于根据结果构造矩阵因子。

通用函数 CholeskyBunchKaufmanSchurqr 用于计算其他因式分解。

相关用法


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