kappa
位於 base
包(package)。 說明
正則(方)矩陣的條件數是矩陣範數與其逆矩陣範數(或pseudo-inverse)的乘積,因此取決於matrix-norm的類型。
kappa()
默認計算(估計)矩陣或 分解的 矩陣的 2 範數條件數(可能是線性擬合)。 2-範數條件數可以表示為矩陣的最大非零奇異值與最小非零奇異值之比。
rcond()
計算條件數倒數的近似值,請參閱詳細信息。
用法
kappa(z, ...)
## Default S3 method:
kappa(z, exact = FALSE,
norm = NULL, method = c("qr", "direct"),
inv_z = solve(z),
triangular = FALSE, uplo = "U", ...)
## S3 method for class 'lm'
kappa(z, ...)
## S3 method for class 'qr'
kappa(z, ...)
.kappa_tri(z, exact = FALSE, LINPACK = TRUE, norm = NULL, uplo = "U", ...)
rcond(x, norm = c("O","I","1"), triangular = FALSE, uplo = "U", ...)
參數
z , x |
數字或複數矩陣或 |
exact |
合乎邏輯的。結果應該是精確的(不超過小舍入誤差)而不是快速的(但相當不準確)? |
norm |
字符串,指定要計算條件數的矩陣範數,請參閱函數 |
method |
部分匹配的字符串,指定要使用的方法; |
inv_z |
對於 |
triangular |
合乎邏輯的。如果為 true,則使用的矩陣隻是 |
uplo |
字符串, |
LINPACK |
合乎邏輯的。如果為 true 並且 |
... |
傳入或傳出其他方法的進一步參數;對於 |
細節
對於 kappa()
,如果 exact = FALSE
(默認),則通過 qr(x)
分解 的三角矩陣 的 1-範數的廉價近似來估計條件數。然而,精確的 2-範數計算(通過 svd
)也可能足夠快。
請注意,近似 1- 和 Inf-norm 條件數通過method = "direct"
計算速度要快得多,並且rcond()
計算這些r互惠的條件數,也適用於複雜矩陣,使用標準 LAPACK 例程。目前,還kappa*()
函數計算這些近似值exact
為 false,即默認情況下。
kappa
和 rcond
是部分相同函數的不同接口。
.kappa_tri
是一個內部函數,由kappa.qr
和kappa.default
;tri
是為了三Angular 及其方法僅考慮矩陣的上三角部分或下三角部分,具體取決於uplo = "U"
或者"L"
,其中"U"
之前是內部硬連線的R4.4.0。
底層 LAPACK 代碼的不成功結果將導致錯誤,並給出正錯誤代碼:這些隻能通過詳細研究 FORTRAN 代碼來解釋。
值
條件編號 exact = FALSE
。 或近似值
例子
kappa(x1 <- cbind(1, 1:10)) # 15.71
kappa(x1, exact = TRUE) # 13.68
kappa(x2 <- cbind(x1, 2:11)) # high! [x2 is singular!]
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, `+`) }
sv9 <- svd(h9 <- hilbert(9))$ d
kappa(h9) # pretty high; by default {exact=FALSE, method="qr"} :
kappa(h9) == kappa(qr.R(qr(h9)), norm = "1")
all.equal(kappa(h9, exact = TRUE), # its definition:
max(sv9) / min(sv9),
tolerance = 1e-12) ## the same (typically down to 2.22e-16)
kappa(h9, exact = TRUE) / kappa(h9) # 0.677 (i.e., rel.error = 32%)
## Exact kappa for rectangular matrix
## panmagic.6npm1(7) :
pm7 <- rbind(c( 1, 13, 18, 23, 35, 40, 45),
c(37, 49, 5, 10, 15, 27, 32),
c(24, 29, 41, 46, 2, 14, 19),
c(11, 16, 28, 33, 38, 43, 6),
c(47, 3, 8, 20, 25, 30, 42),
c(34, 39, 44, 7, 12, 17, 22),
c(21, 26, 31, 36, 48, 4, 9))
kappa(pm7, exact=TRUE, norm="1") # no problem for square matrix
m76 <- pm7[,1:6]
(m79 <- cbind(pm7, 50:56, 63:57))
## Moore-Penrose inverse { ~= MASS::ginv(); differing tol (value & meaning)}:
## pinv := p(seudo) inv(erse)
pinv <- function(X, s = svd(X), tol = 64*.Machine$double.eps) {
if (is.complex(X))
s$u <- Conj(s$u)
dx <- dim(X)
## X = U D V' ==> Result = V {1/D} U'
pI <- function(u,d,v) tcrossprod(v, u / rep(d, each = dx[1L]))
pos <- (d <- s$d) > max(tol * max(dx) * d[1L], 0)
if (all(pos))
pI(s$u, d, s$v)
else if (!any(pos))
array(0, dX[2L:1L])
else { # some pos, some not:
i <- which(pos)
pI(s$u[, i, drop = FALSE], d[i],
s$v[, i, drop = FALSE])
}
}
## rectangular
kappa(m76, norm="1")
try( kappa(m76, exact=TRUE, norm="1") )# error in solve().. must be square
## ==> use pseudo-inverse instead of solve() for rectangular {and norm != "2"}:
iZ <- pinv(m76)
kappa(m76, exact=TRUE, norm="1", inv_z = iZ)
kappa(m76, exact=TRUE, norm="M", inv_z = iZ)
kappa(m76, exact=TRUE, norm="I", inv_z = iZ)
iX <- pinv(m79)
kappa(m79, exact=TRUE, norm="1", inv_z = iX)
kappa(m79, exact=TRUE, norm="M", inv_z = iX)
kappa(m79, exact=TRUE, norm="I", inv_z = iX)
作者
The design was inspired by (but differs considerably from) the S function of the same name described in Chambers (1992).
來源
LAPACK 例程DTRCON
和ZTRCON
以及LINPACK 例程DTRCO
。
LAPACK 和 LINPACK 來自https://netlib.org/lapack/ 和https://netlib.org/linpack/,它們的指南在參考文獻中列出。
參考
Anderson. E. and ten others (1999)
LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at
https://netlib.org/lapack/lug/lapack_lug.html.
Chambers, J. M. (1992) Linear models. Chapter 4 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.
Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.
也可以看看
相關用法
- R kronecker 陣列上的克羅內克積
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
- R warning 警告信息
- R rapply 遞歸地將函數應用於列表
- R basename 操作文件路徑
- R with 評估數據環境中的表達式
- R formals 訪問和操縱形式參數
- R icuSetCollate 按 ICU 設置整理
- R search 給出 R 對象的搜索路徑
- R Defunct 將對象標記為已失效
- R gzcon 通過連接(解)壓縮 I/O
- R readRenviron 從文件設置環境變量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Compute or Estimate the Condition Number of a Matrix。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。