2016-04-15 7 views
0

私はRのqr関数について問題があります。私の入力行列は正定であるため、Rは対角の三角行列がすべて正であることをr関数に与える必要があります。しかし、私は対角にいくつかの負の値があることを発見しました。どうすればこの問題に対処できますか?RのQR分解 - 正の対角を強制

我々は行列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 

私は(QRを適用)Rで、それは私に=

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ひいては可逆的である。 IはRにQR()を適用し、それは私に Qを与える= [1] [2] [3] [1,2] -0.5816076 -0.6157887 0.5315420 [2,1] 0.7970423 -0.5620336 0.2210021 [3,4] 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の対応する値を調整することができる。私はとにかくこの質問を編集することができました。 –

答えて

1

Iは、単に陽性であることが対角エントリを強制的に符号(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)と同じ 'Q%*%R == Q%*%diag(sgn)%*%diag(sgn)%*%R'はアイデンティティであることに注意してください。 –

関連する問題