QR分解したい
行列のQR分解をやりたいと思って調べたら、qr関数ってのがその名の通りあるのでこれだけでやってくれるんじゃないかと期待したがqr関数の結果はqrクラスのオブジェクトになってて、これを
のそれぞれの関数に食わせる事ではじめてQ・R行列がそれぞれ取得できるようになってる作りのようだ。
> x <- matrix(1:36, 9) > x [,1] [,2] [,3] [,4] [1,] 1 10 19 28 [2,] 2 11 20 29 [3,] 3 12 21 30 [4,] 4 13 22 31 [5,] 5 14 23 32 [6,] 6 15 24 33 [7,] 7 16 25 34 [8,] 8 17 26 35 [9,] 9 18 27 36 > x.qr <- qr(x) > qr.Q(x.qr) [,1] [,2] [,3] [,4] [1,] -0.05923489 -0.61177529 -0.27429230 -0.28210573 [2,] -0.11846978 -0.49706742 -0.31040198 -0.16235610 [3,] -0.17770466 -0.38235956 0.89921377 -0.07293905 [4,] -0.23693955 -0.26765169 -0.08696728 0.92491977 [5,] -0.29617444 -0.15294382 -0.07314834 -0.07722141 [6,] -0.35540933 -0.03823596 -0.05932939 -0.07936260 [7,] -0.41464421 0.07647191 -0.04551044 -0.08150378 [8,] -0.47387910 0.19117978 -0.03169149 -0.08364496 [9,] -0.53311399 0.30588765 -0.01787254 -0.08578614 > qr.R(x.qr) [,1] [,2] [,3] [,4] [1,] -16.88194 -40.87207 -6.486220e+01 -8.885233e+01 [2,] 0.00000 -12.38845 -2.477690e+01 -3.716535e+01 [3,] 0.00000 0.00000 4.296762e-15 6.225828e-15 [4,] 0.00000 0.00000 0.000000e+00 6.792110e-15 > qr.Q(x.qr) %*% qr.R(x.qr) [,1] [,2] [,3] [,4] [1,] 1 10 19 28 [2,] 2 11 20 29 [3,] 3 12 21 30 [4,] 4 13 22 31 [5,] 5 14 23 32 [6,] 6 15 24 33 [7,] 7 16 25 34 [8,] 8 17 26 35 [9,] 9 18 27 36