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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。