R和Matlab中复杂矩阵QR分解的差异

使用下面的矩阵A,我在[R]和Matlab之间的QR分解中得到了不同的R矩阵。 (当然,Q也不同。)

A <- structure(c(1+0i,-0.75+0.75i,0+0i,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],但这当然破坏了R的上三角性质:

zapsmall(Q %*% R[,QR$pivot])
            [,1]        [,2]      [,]  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分解不是唯一的,但是我需要获得一个上三角R矩阵,就像在Matlab中一样,我可以随后使用而不重新排列其列,例如{{1} }。

R软件中关于如何实现此目标的任何建议?

更新: 有人提出了关于问题may be answered here的建议,但该答案仅适用于 real 矩阵,而我的查询是针对 complex

qq58616 回答:R和Matlab中复杂矩阵QR分解的差异

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2602460.html

大家都在问