R中的QR分解和Choleski分解

3

我最近了解到QR分解的R矩阵可以使用Cholesky分解来计算。它们之间的关系是:

R = Cholesky分解(A^TA)

例如:

> A=matrix(c(1,2,3,2,3,5,1,3,2), nrow=3)
> A
     [,1] [,2] [,3]
[1,]    1    2    1
[2,]    2    3    3
[3,]    3    5    2

> AtA = t(A)%*%A
> AtA
     [,1] [,2] [,3]
[1,]   14   23   13
[2,]   23   38   21
[3,]   13   21   14

现在正在计算QR分解和Cholesky分解:

> chol(AtA)
         [,1]     [,2]       [,3]
[1,] 3.741657 6.147009  3.4743961
[2,] 0.000000 0.462910 -0.7715167
[3,] 0.000000 0.000000  1.1547005

> qr_A = qr(A)
> qr.R(qr_A)
          [,1]      [,2]       [,3]
[1,] -3.741657 -6.147009 -3.4743961
[2,]  0.000000  0.462910 -0.7715167
[3,]  0.000000  0.000000 -1.1547005

从Choleski和QR分解计算的R矩阵的值可以看出,它们并不相同。 chol(AtA) 的第一行和第三行与 qr.R(qr_A) 相比是相反的。为什么会这样呢?我假设的关系是不正确的吗?

1个回答

5
矩阵的QR分解并不唯一! 有一个使用R=chol(AtA)的QR分解,但还有其他的分解方式,qr函数不一定会返回该分解。在您的示例中。
qr.Q(qr_A)%*%qr.R(qr_A) 

并且

(qr.Q(qr_A)%*%diag(c(-1,1,-1)))%*%chol(AtA)

都是A的有效QR分解。


2
没错。如果需要更多细节,可以查看这个优秀的答案,当时在计算科学 SO beta 上提出了完全相同的问题。链接为:http://scicomp.stackexchange.com/questions/1101/seemingly-non-unique-cholesky-factor-via-qr-rectangularisation/1104#1104 - Josh O'Brien
太好了。谢谢!在R中是否有QR分解的实现,可以确保给我一个正对角线? - Prateek Kulkarni
2
@PrateekKulkarni -- 正如在此处讨论的那样(https://dev59.com/CmrWa4cB1Zd3GeqP_oKz#13252584),R 软件包 biglm 似乎使用了执行您所要求的操作的实现。 - Josh O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接