![](/img/trans.png)
[英]Remove column and row of a matrix according to result of column pivoting in qr decomposition in R
[英]Calculating R matrix in QR decomposition with column pivoting in R
我有一個矩陣A
可以通過以下代碼得到:
b = matrix(c(20, 33, 10, 12, 14, 22, 34, 55, 11, 40, 0, 0, 0, 0, 0, 33,40, 66,
78, 90, 11, 45, 32, 55, 65), nrow = 5, ncol= 5)
A =crossprod(b)
> A
[,1] [,2] [,3] [,4] [,5]
[1,] 1929 2804 0 4836 3595
[2,] 2804 6386 0 10174 6737
[3,] 0 0 0 0 0
[4,] 4836 10174 0 21229 14415
[5,] 3595 6737 0 14415 10420
我想對矩陣A
列旋轉應用qr分解,然后我執行以下代碼來獲得矩陣R
,但是我們知道t(R)%*%R
應該與矩陣A
相同,為什么它們不相同按行或列的順序? 如何獲得正確的R
矩陣?
qr.decom = qr(-b, 1e-20)
> qr.decom
$qr
[,1] [,2] [,3] [,4] [,5]
[1,] 43.9203825 63.8427955 110.1083307 81.8526569 0
[2,] 0.7513596 -48.0634732 -65.4213304 -31.4437859 0
[3,] 0.2276847 -0.8649054 -69.4636960 -48.1581960 0
[4,] 0.2732217 0.1064337 -0.8613864 20.3031782 0
[5,] 0.3187586 -0.4410522 -0.3253288 0.9490613 0
$rank
[1] 4
$qraux
[1] 1.455369 1.214671 1.390096 1.315092 0.000000
$pivot
[1] 1 2 4 5 3
attr(,"class")
[1] "qr"
R = qr.R(qr.decom)
> R
[,1] [,2] [,3] [,4] [,5]
[1,] 43.92038 63.84280 110.10833 81.85266 0
[2,] 0.00000 -48.06347 -65.42133 -31.44379 0
[3,] 0.00000 0.00000 -69.46370 -48.15820 0
[4,] 0.00000 0.00000 0.00000 20.30318 0
[5,] 0.00000 0.00000 0.00000 0.00000 0
> print(t(R)%*%R)
[,1] [,2] [,3] [,4] [,5]
[1,] 1929 2804 4836 3595 0
[2,] 2804 6386 10174 6737 0
[3,] 4836 10174 21229 14415 0
[4,] 3595 6737 14415 10420 0
[5,] 0 0 0 0 0
根據qr.decom$pivot
對行和列進行置換。 通過order
應用反向排列:
(t(R)%*%R)[order(qr.decom$pivot), order(qr.decom$pivot)]
[,1] [,2] [,3] [,4] [,5]
[1,] 1929 2804 0 4836 3595
[2,] 2804 6386 0 10174 6737
[3,] 0 0 0 0 0
[4,] 4836 10174 0 21229 14415
[5,] 3595 6737 0 14415 10420
all.equal(crossprod(b), (t(R)%*%R)[order(qr.decom$pivot), order(qr.decom$pivot)])
[1] TRUE
相關問題在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.