2016-04-15 81 views
0

我有一個關於R中qr函數的問題。我的輸入矩陣是正定的,所以R應該給r函數帶有對角線的三角矩陣都是正的。但是,我發現對角線有一些負值。我該如何解決這個問題?QR分解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(),它給了我 Q =

  [,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)) 
+0

假設我們有一個矩陣如下所示: [1] [2] [3] [1] 0.07018171 - 0.07249188 -0.01952050 [2,] -0.09617788 0.52664014 -0.02930578 [3,] -0.01962719 -0.09521439 0.81718699 這是pd並因此是可逆的。我在R中應用qr(),它給我 Q = [,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,1] 0.0000000 -0.3039269 0.4797403 [3,] 0.0000000 0.0000000 0.6513551 ,其對角爲負。 –

+0

謝謝,我已經想通了。我可以簡單地用對角線矩陣乘以符號(R)來強制對角線條目爲正,然後調整Q的對應值。然後,Q仍然是對角矩陣。無論如何,我可以編輯這些問題。 –

回答

1

我可以簡單地乘以符號(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.

+0

請通過提供具體信息來完成此操作。顯示實際執行的計算結果。 –

+0

我添加了示例代碼部分。我認爲這將足以說明這個想法。 –

+0

計算順序相反;我修好了它。請注意,'diag(sgn)%*%diag(sgn)'是身份。「%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% –