r - R和matlab中的qr函数

标签 r matlab qr-decomposition

我有一个关于将 matlab 函数转换为 R 的问题,我希望有人可以提供帮助。

matlab 和 R 中使用的标准 QR 分解称为 qr()。据我了解,在两种语言中执行 qr 分解的标准方法是:

MATLAB:
[Q,R] = qr(A) 满足 QR=A

回复:

z <- qr(A)
Q <- qr.Q(z)
R <- qr.R(z)

两者都为我提供了相同的结果,不幸的是,这不是我所需要的。我需要的是这个:

MATLAB:
[Q,R,e] = qr(A,0) 这会产生一个经济规模的分解,其中 e 是一个置换向量,因此 A(:,e) = Q*R。

回复:
没有线索

我试过比较 [Q,R,E] = qr(A)
z <- qr(A);
Q <- qr.Q(z);
R <- qr.R(z);
E <- diag(ncol(A))[z$pivot]

并且变量 Q 和 E 的结果似乎相同(但 R 不同)。所以根据定义的输入/输出会有不同的结果(这是有道理的)。

所以我的问题是:
R 中有没有办法在 Matlab 中模仿这个 [Q,R,e]=qr(A,0) ?

我曾尝试深入研究 matlab 函数,但它导致了无尽的函数定义的漫长而曲折的道路,我希望有更好的解决方案。

任何帮助将不胜感激,如果我错过了一些明显的东西,我深表歉意。

最佳答案

我认为差异归结为计算背后的数值库。默认情况下,R 的 qr函数使用(很旧)LINPACK例程,但如果我这样做

z <- qr(X,LAPACK=T)

然后 R 使用 LAPACK,结果似乎与 MATLAB 匹配(它可能也在下面使用 LAPACK)。无论哪种方式,我们都会看到与 X 的预期关系。 :
z <- qr(X,LAPACK=F)
all.equal(X[,z$pivot], qr.Q(z)%*%qr.R(z), check.attributes=FALSE)
# [1] TRUE

z <- qr(X,LAPACK=T)
all.equal(X[,z$pivot], qr.Q(z)%*%qr.R(z), check.attributes=FALSE)
# [1] TRUE

关于r - R和matlab中的qr函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596598/

相关文章:

R - 矩阵乘法 - 没有错误信号

Matlab - OOP 方法

r - lm 和 biglm 的 QR 分解不同?

opencv - 从视频中的单应性中提取人脸旋转

r - ubuntu上离线安装R catboost包

r - 在 R 中操作列表

c++ - 使用SDK2.0从Kinect录制视频流

matrix - 如何从 QR 分解输出中获取 Q?

r - 使用 lapply 或 map over columns 将 McNemar 测试应用于所有列组合

Matlab 求 y max 的 x 值