Различия в QR-разложении комплексной матрицы в R и Matlab - PullRequest
2 голосов
/ 22 марта 2020

С помощью приведенной ниже матрицы A я получаю разные матрицы для R в его QR-разложении между [R] и Matlab. (Конечно, Q тоже разные.)

A <- structure(c(1+0i, -0.75+0.75i, 0+0i, 0+0i, 1+0i, -0.75+0.75i, 
1+0i, -1.5+1.5i, 0-1i), .Dim = c(3L, 3L))

QR <- qr(A)
Q <- qr.Q(A)
R <- qr.R(QR)
R
            [,1]                  [,2]                   [,3]
[1,] -2.54951+0i  0.8825226+0.8825226i -1.27475488+0.0000000i
[2,]  0.00000+0i -0.7531983+0.0000000i -0.49787685+0.4978768i
[3,]  0.00000+0i  0.0000000+0.0000000i -0.06509446+0.0000000i

Принимая во внимание, что с Matlab:

[Q,R] = qr(A);
R =
  -1.4577 + 0.0000i   0.5145 + 0.5145i  -2.2295 - 0.0000i
   0.0000 + 0.0000i  -1.2632 + 0.0000i   0.8732 - 0.8732i
   0.0000 + 0.0000i   0.0000 + 0.0000i  -0.0679 + 0.0000i

Проверяя декомпозицию из программного обеспечения R, я должен изменить порядок столбцов матрицы R в воссоздайте мою исходную матрицу A, используя Q %*% R[, QR$pivot], но это, конечно, разрушает верхнюю три angular природу R:

zapsmall(Q %*% R[, QR$pivot])
            [,1]        [,2]      [,3]
[1,]  1.00+0.00i  0.00+0.00i  1.0+0.0i
[2,] -0.75+0.75i  1.00+0.00i -1.5+1.5i
[3,]  0.00+0.00i -0.75+0.75i  0.0-1.0i

В то время как с Matlab прямая Q * R работает:

Q * R
ans = 
   1.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i
  -0.7500 + 0.7500i   1.0000 + 0.0000i  -1.5000 + 1.5000i
   0.0000 + 0.0000i  -0.7500 + 0.7500i   0.0000 - 1.0000i

Я понимаю, что QR-разложение не уникально, но мне нужно получить верхнюю матрицу tri angular R, как в Matlab, которую я могу использовать впоследствии , не переставляя ее столбцы , например, Q %*% R = A.

Есть ли какие-либо предложения в программном обеспечении R о том, как мне этого добиться?

Обновление: было высказано предположение, что на вопрос можно ответить здесь , но этот ответ будет работать только с матрицами real , тогда как мой запрос для complex .

...