R 中的 QR 分解 - 强制正对角线
QR decomposition in R - Forcing a Positive Diagonal
我对 R 中的 qr 函数有疑问。我的输入矩阵是正定的,所以 R 应该给 r 函数一个对角线都是正的三角矩阵。但是,我发现对角线上有一些负值。我该如何解决这个问题?
假设我们有一个矩阵 y
如下所示:
[1,] 0.07018171 -0.07249188 -0.01952050
[2,] -0.09617788 0.52664014 -0.02930578
[3,] -0.01962719 -0.09521439 0.81718699
正定:
> eigen(y)$values
[1] 0.82631283 0.53350907 0.05418694
我在 R 中应用 qr(),它给了我
问=
[,1] [,2] [,3]
[1,] -0.5816076 -0.6157887 0.5315420
[2,] 0.7970423 -0.5620336 0.2210021
[3,] 0.1626538 0.5521980 0.8176926
和 R =
[1,] -0.1206685 0.4464293 0.1209139
[2,] 0.0000000 -0.3039269 0.4797403
[3,] 0.0000000 0.0000000 0.6513551
对角线不是正数
非常感谢。
这是矩阵:
structure(c(0.07018171, -0.09617788, -0.01962719, -0.07249188,
0.52664014, -0.09521439, -0.0195205, -0.02930578, 0.81718699), .Dim = c(3L,
3L))
我可以简单地将对角矩阵乘以 sign(R) 以强制对角元素为正,然后调整 Q 的相应值。Q 仍然是一个正交矩阵。
示例代码
qr.decom <- qr(A)
Q <- qr.Q(qr.decom)
R <- qr.R(qr.decom)
sgn <- sign(diag(R))
R.new <- diag(sgn) %*% R
Q.new <- Q %*% diag(sgn)
则R.new有正对角线元素。
我们可以在问题部分使用示例在 R 中尝试。
我想你也可以使用pracma::gramSchmidt
。此函数 returns 自动进行 gram-schmidt 分解,对角线上为正数。希望对你有帮助。
我对 R 中的 qr 函数有疑问。我的输入矩阵是正定的,所以 R 应该给 r 函数一个对角线都是正的三角矩阵。但是,我发现对角线上有一些负值。我该如何解决这个问题?
假设我们有一个矩阵 y
如下所示:
[1,] 0.07018171 -0.07249188 -0.01952050
[2,] -0.09617788 0.52664014 -0.02930578
[3,] -0.01962719 -0.09521439 0.81718699
正定:
> eigen(y)$values
[1] 0.82631283 0.53350907 0.05418694
我在 R 中应用 qr(),它给了我 问=
[,1] [,2] [,3]
[1,] -0.5816076 -0.6157887 0.5315420
[2,] 0.7970423 -0.5620336 0.2210021
[3,] 0.1626538 0.5521980 0.8176926
和 R =
[1,] -0.1206685 0.4464293 0.1209139
[2,] 0.0000000 -0.3039269 0.4797403
[3,] 0.0000000 0.0000000 0.6513551
对角线不是正数
非常感谢。
这是矩阵:
structure(c(0.07018171, -0.09617788, -0.01962719, -0.07249188,
0.52664014, -0.09521439, -0.0195205, -0.02930578, 0.81718699), .Dim = c(3L,
3L))
我可以简单地将对角矩阵乘以 sign(R) 以强制对角元素为正,然后调整 Q 的相应值。Q 仍然是一个正交矩阵。
示例代码
qr.decom <- qr(A)
Q <- qr.Q(qr.decom)
R <- qr.R(qr.decom)
sgn <- sign(diag(R))
R.new <- diag(sgn) %*% R
Q.new <- Q %*% diag(sgn)
则R.new有正对角线元素。
我们可以在问题部分使用示例在 R 中尝试。
我想你也可以使用pracma::gramSchmidt
。此函数 returns 自动进行 gram-schmidt 分解,对角线上为正数。希望对你有帮助。