R 和 matlab 中的 qr 函数
qr function in R and matlab
我有一个关于将 matlab 函数转换为 R 的问题,我希望有人能提供帮助。
matlab 和 R 中使用的标准 QR 分解称为 qr()。据我了解,在两种语言中执行 qr 分解的标准方法是:
Matlab:
[Q,R] = qr(A)
满足QR=A
R:
z <- qr(A)
Q <- qr.Q(z)
R <- qr.R(z)
两者都为我提供了相同的结果,不幸的是,这不是我需要的。我需要的是:
Matlab:
[Q,R,e] = qr(A,0) 产生经济规模的分解,其中 e 是置换向量,因此 A(:,e) = Q*R .
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 不同)。所以根据定义的 inputs/outputs 会有不同的结果(这是有道理的)。
所以我的问题是:
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
我有一个关于将 matlab 函数转换为 R 的问题,我希望有人能提供帮助。
matlab 和 R 中使用的标准 QR 分解称为 qr()。据我了解,在两种语言中执行 qr 分解的标准方法是:
Matlab:
[Q,R] = qr(A)
满足QR=A
R:
z <- qr(A)
Q <- qr.Q(z)
R <- qr.R(z)
两者都为我提供了相同的结果,不幸的是,这不是我需要的。我需要的是:
Matlab: [Q,R,e] = qr(A,0) 产生经济规模的分解,其中 e 是置换向量,因此 A(:,e) = Q*R .
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 不同)。所以根据定义的 inputs/outputs 会有不同的结果(这是有道理的)。
所以我的问题是: 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