solve-methods
位于 Matrix
包(package)。 说明
通用函数solve
求解线性方程组的方法,即 中的 ,其中 是方阵, 和 是维度与 一致的矩阵。
用法
solve(a, b, ...)
## S4 method for signature 'dgeMatrix,ANY'
solve(a, b, tol = .Machine$double.eps, ...)
## S4 method for signature 'dgCMatrix,missing'
solve(a, b, sparse = TRUE, ...)
## S4 method for signature 'dgCMatrix,matrix'
solve(a, b, sparse = FALSE, ...)
## S4 method for signature 'dgCMatrix,denseMatrix'
solve(a, b, sparse = FALSE, ...)
## S4 method for signature 'dgCMatrix,sparseMatrix'
solve(a, b, sparse = TRUE, ...)
## S4 method for signature 'denseLU,dgeMatrix'
solve(a, b, ...)
## S4 method for signature 'BunchKaufman,dgeMatrix'
solve(a, b, ...)
## S4 method for signature 'Cholesky,dgeMatrix'
solve(a, b, ...)
## S4 method for signature 'sparseLU,dgCMatrix'
solve(a, b, tol = .Machine$double.eps, ...)
## S4 method for signature 'sparseQR,dgCMatrix'
solve(a, b, ...)
## S4 method for signature 'CHMfactor,dgCMatrix'
solve(a, b, system = c("A", "LDLt", "LD", "DLt", "L", "Lt", "D", "P", "Pt"), ...)
参数
a |
包含线性系统系数的 finite 方阵或 |
b |
满足 |
tol |
非负数。对于继承自 |
sparse |
指示结果是否应形式稀疏的逻辑,即结果是否应从虚拟类 |
system |
指定要求解的线性系统的字符串。只有从 |
... |
传入或传出方法的更多参数。 |
细节
一般矩阵和对称矩阵 a
的方法计算三角分解(LU、Bunch-Kaufman 或 Cholesky)并调用相应分解类的方法。如果 a
是稀疏的,则因式分解是稀疏的。稀疏对称矩阵 a
的方法尝试进行 Cholesky 分解,并且仅在失败时才执行 LU 分解(通常是因为 a
不是正定的)。
三角形、对角线和置换矩阵不需要因式分解(它们已经是“factors”),因此直接实现这些方法。对于三角形a
,通过前向或后向代入得到解;对于对角线 a
,它们是通过缩放 b
的行获得的;对于排列 a
,它们是通过排列 b
的行获得的。
密集 a
的方法基于 14 个 LAPACK 例程构建:类 d..Matrix
,其中 ..=(ge|tr|tp|sy|sp|po|pp)
分别使用例程 d..tri
和 d..trs
来处理缺失和非缺失的 b
。推论是这些方法总是给出密集的结果。
稀疏 a
的方法基于 CSparse 例程 cs_lsolve
、 cs_usolve
和 cs_spsolve
以及 CHOLMOD 例程 cholmod_solve
和 cholmod_spsolve
构建。默认情况下,如果 b
是向量,这些方法会给出向量结果;如果 b
缺失或稀疏矩阵,这些方法会给出稀疏矩阵结果;如果 b
是稠密矩阵,这些方法会给出稠密矩阵结果。可以通过设置 sparse
参数(如果可用)来覆盖此行为,但应小心操作。请注意,稀疏结果可能仅在形式意义上是稀疏的,而在数学意义上根本不是稀疏的,具体取决于 a
和 b
的非零模式。此外,虽然密集结果是完全预分配的,但稀疏结果必须是 “grown” 在 b
列上的循环中。
sparseQR
类的 a
的方法是 qr.coef
的简单包装,在超定情况下给出最小二乘解。
a
继承自 CHMfactor
的方法可以解决默认系统 以外的系统。系统实际解决的 system
参数之间的对应关系如下表所示。有关符号的定义,请参阅CHMfactor-class
。
system | isLDL(a)=TRUE | isLDL(a)=FALSE |
"A" | ||
"LDLt" | ||
"LD" | ||
"DLt" | ||
"L" | ||
"Lt" | ||
"D" | ||
"P" | ||
"Pt" |
例子
## A close to symmetric example with "quite sparse" inverse:
n1 <- 7; n2 <- 3
dd <- data.frame(a = gl(n1,n2), b = gl(n2,1,n1*n2))# balanced 2-way
X <- sparse.model.matrix(~ -1+ a + b, dd)# no intercept --> even sparser
XXt <- tcrossprod(X)
diag(XXt) <- rep(c(0,0,1,0), length.out = nrow(XXt))
n <- nrow(ZZ <- kronecker(XXt, Diagonal(x=c(4,1))))
image(a <- 2*Diagonal(n) + ZZ %*% Diagonal(x=c(10, rep(1, n-1))))
isSymmetric(a) # FALSE
image(drop0(skewpart(a)))
image(ia0 <- solve(a, tol = 0)) # checker board, dense [but really, a is singular!]
try(solve(a, sparse=TRUE))##-> error [ TODO: assertError ]
ia. <- solve(a, sparse=TRUE, tol = 1e-19)##-> *no* error
if(R.version$arch == "x86_64")
## Fails on 32-bit [Fedora 19, R 3.0.2] from Matrix 1.1-0 on [FIXME ??] only
stopifnot(all.equal(as.matrix(ia.), as.matrix(ia0)))
a <- a + Diagonal(n)
iad <- solve(a)
ias <- solve(a, sparse=FALSE)
stopifnot(all.equal(as(iad,"denseMatrix"), ias, tolerance=1e-14))
I. <- iad %*% a ; image(I.)
I0 <- drop0(zapsmall(I.)); image(I0)
.I <- a %*% iad
.I0 <- drop0(zapsmall(.I))
stopifnot( all.equal(as(I0, "diagonalMatrix"), Diagonal(n)),
all.equal(as(.I0,"diagonalMatrix"), Diagonal(n)) )
也可以看看
虚拟类MatrixFactorization
及其子类。
用于计算因式分解的通用函数 Cholesky
、 BunchKaufman
、 Schur
、 lu
和 qr
。
base
中的通用函数 solve
。
base
中的函数 qr.coef
用于计算超定线性系统的最小二乘解。
相关用法
- R symmetricMatrix-class 包矩阵中对称矩阵的虚拟类
- R symmpart-methods 矩阵的对称部分和偏斜(对称)部分
- R sparseMatrix 从非零项构建一般稀疏矩阵
- R sparseQR-class 稀疏 QR 分解
- R sparse.model.matrix 构造稀疏设计/模型矩阵
- R spMatrix 三元组的稀疏矩阵构造函数
- R sparseVector-class 稀疏向量类
- R sparseMatrix-class 虚拟类“sparseMatrix”——稀疏矩阵之母
- R sparseLU-class 稀疏 LU 分解
- R sparseVector 从非零条目构造稀疏向量
- R dtrMatrix-class 三角形稠密数值矩阵
- R facmul-methods 乘以矩阵因式分解的因数
- R updown-methods 更新和降级稀疏 Cholesky 分解
- R bdiag 构建分块对角矩阵
- R printSpMatrix 灵活格式化和打印稀疏矩阵
- R all.equal-methods 函数 all.equal() 的矩阵封装方法
- R boolmatmult-methods 布尔算术矩阵乘积:%&% 和方法
- R ltrMatrix-class 三角密集逻辑矩阵
- R Hilbert 生成希尔伯特矩阵
- R nearPD 最近正定矩阵
- R lsyMatrix-class 对称密集逻辑矩阵
- R CHMfactor-class 稀疏 Cholesky 分解
- R dgCMatrix-class 压缩、稀疏、面向列的数值矩阵
- R Cholesky-methods Cholesky 分解方法
- R Subassign-methods “[<-”的方法 - 分配给“矩阵”的子集
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Methods in Package Matrix for Function solve。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。