當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R qr 矩陣的 QR 分解


R語言 qr 位於 base 包(package)。

說明

qr 計算矩陣的 QR 分解。

用法

qr(x, ...)
## Default S3 method:
qr(x, tol = 1e-07 , LAPACK = FALSE, ...)

qr.coef(qr, y)
qr.qy(qr, y)
qr.qty(qr, y)
qr.resid(qr, y)
qr.fitted(qr, y, k = qr$rank)
qr.solve(a, b, tol = 1e-7)
## S3 method for class 'qr'
solve(a, b, ...)

is.qr(x)
as.qr(x)

參數

x

要計算其 QR 分解的數值或複數矩陣。邏輯矩陣被強製轉換為數字。

tol

檢測 x 列中線性相關性的容差。僅當 LAPACK 為 false 並且 x 為 true 時才使用。

qr

qr 計算的類型的 QR 分解。

y, b

方程右側的向量或矩陣。

a

QR 分解或(僅限 qr.solve)矩形矩陣。

k

有效排名。

LAPACK

合乎邏輯的。對於真正的 x ,如果為 true,則使用 LAPACK,否則使用 LINPACK(默認值)。

...

傳遞給其他方法或從其他方法傳遞的進一步參數

細節

QR 分解在許多統計技術中發揮著重要作用。特別是,它可用於求解給定矩陣 和向量 的方程 。它對於計算回歸係數和應用 Newton-Raphson 算法很有用。

函數 qr.coefqr.residqr.fitted 返回通過 QR 分解 qry 擬合到矩陣時獲得的係數、殘差和擬合值。 (如果使用旋轉,某些係數將為 NA 。) qr.qyqr.qty 返回 Q %*% yt(Q) %*% y ,其中 Q 是(完整) 矩陣。

上述所有函數都保留 xy(如果有)的 dimnames (和 names )。

solve.qrqr 對象的 solve 的方法。 qr.solve 通過 QR 分解求解方程組:如果 a 是 QR 分解,則與 solve.qr 相同,但如果 a 是矩形矩陣,則首先計算 QR 分解。兩者都可以處理超定係統和欠定係統,並在適當的情況下提供最小二乘擬合。

如果 x 是來自 "qr"listinherits,則 is.qr 返回 TRUE

無法將對象強製為 "qr" 模式。對象或者是 QR 分解,或者不是。

LINPACK 接口僅限於元素少於 的矩陣 x

qr.fittedqr.resid僅支持LINPACK接口。

底層 LAPACK 代碼的不成功結果將導致錯誤,並給出正錯誤代碼:這些隻能通過詳細研究 FORTRAN 代碼來解釋。

由 LINPACK(*) 或 LAPACK 計算的矩陣的 QR 分解。返回值中的分量直接對應於 DQRDC(2)/DGEQP3/ZGEQP3 返回的值。

qr

x 具有相同維度的矩陣。上三角形包含分解的 ,下三角形包含有關分解的 的信息(以緊湊形式存儲)。請注意,DQRDC 和 DGEQP3 使用的存儲不同。

qraux

長度為 ncol(x) 的向量,其中包含有關 的附加信息。

rank

通過分解計算的x 的等級(*):在 LAPACK 情況下始終為滿等級。

pivot

有關分解過程中使用的旋轉策略的信息。

LAPACK 計算的非複雜 QR 對象具有屬性 "useLAPACK" 和值 TRUE

*) dqrdc2代替LINPACK的DQRDC

在(默認)LINPACK 情況 ( LAPACK = FALSE ) 中,qr() 使用 LINPACK DQRDC 的修改版本,稱為“dqrdc2”。它的不同之處在於使用公差 tol 作為旋轉策略,該策略將具有接近零 2-範數的列移動到 x 矩陣的右側邊。這一策略意味著可以以自然的方式計算連續的degree-of-freedom效應。

注意

要計算矩陣的行列式(您真的需要它嗎?),QR 分解比使用特征值 (eigen) 更有效。請參閱det

使用 LAPACK(包括在複雜的情況下)使用列旋轉並且不會嘗試檢測 rank-deficient 矩陣。

例子

hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, `+`) }
h9 <- hilbert(9); h9
qr(h9)$rank           #--> only 7
qrh9 <- qr(h9, tol = 1e-10)
qrh9$rank             #--> 9
##-- Solve linear equation system  H %*% x = y :
y <- 1:9/10
x <- qr.solve(h9, y, tol = 1e-10) # or equivalently :
x <- qr.coef(qrh9, y) #-- is == but much better than
                      #-- solve(h9) %*% y
h9 %*% x              # = y


## overdetermined system
A <- matrix(runif(12), 4)
b <- 1:4
qr.solve(A, b) # or solve(qr(A), b)
solve(qr(A, LAPACK = TRUE), b)
# this is a least-squares solution, cf. lm(b ~ 0 + A)

## underdetermined system
A <- matrix(runif(12), 3)
b <- 1:3
qr.solve(A, b)
solve(qr(A, LAPACK = TRUE), b)
# solutions will have one zero, not necessarily the same one

來源

對於 qr ,LINPACK 例程 DQRDC (但修改為 dqrdc2 (*))以及 LAPACK 例程 DGEQP3ZGEQP3 。更多 LINPACK 和 LAPACK 例程用於 qr.coefqr.qyqr.aty

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.

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.

也可以看看

qr.Qqr.Rqr.X 用於重建矩陣。 lm.fitlsfiteigensvd

det (使用 qr )計算矩陣的行列式。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 The QR Decomposition of a Matrix。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。