2
我發現下面的R
代碼使用qr
因式分解不能恢復原始矩陣。我無法弄清楚爲什麼。R高斯消除和qr分解
a <- matrix(runif(180),ncol=6)
a[,c(2,4)] <- 0
b <- qr(a)
d <- qr.Q(b) %*% qr.R(b)
然後d
是所有零列移到右側的方式,從不同a
。看起來qr
分解不保留行空間。
我發現下面的R
代碼使用qr
因式分解不能恢復原始矩陣。我無法弄清楚爲什麼。R高斯消除和qr分解
a <- matrix(runif(180),ncol=6)
a[,c(2,4)] <- 0
b <- qr(a)
d <- qr.Q(b) %*% qr.R(b)
然後d
是所有零列移到右側的方式,從不同a
。看起來qr
分解不保留行空間。
當您閱讀qr
的幫助時,您會看到R使用了旋轉QR分解。 所以
str(b)
給
List of 4
$ qr : num [1:30, 1:6] -3.2292 0.218 0.0623 0.0371 0.302 ...
$ rank : int 4
$ qraux: num [1:6] 1.05 1.11 1.04 1.22 0 ...
$ pivot: int [1:6] 1 3 5 6 2 4
- attr(*, "class")= chr "qr"
因此,你需要申請pivot
到a
或pivot
到d
逆正確地排列在矩陣起來。所以
pivots <- b$pivot
d.ok <- d[,order(pivots)]
all.equal(a,d.ok)
給
[1] TRUE
你也可以做
a.p <- a[,pivots]
all.equal(a.p,d)
這也導致TRUE
。
好的解釋。我覺得樞軸機制在R中沒有很好的記錄。 – 2012-08-09 02:27:18
您也可以使用'qr.X'來恢復原始矩陣'qr.X(b)' – dickoa 2012-08-08 13:14:34