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