【问题标题】:qr function in R and matlabR和matlab中的qr函数
【发布时间】:2017-12-01 15:31:05
【问题描述】:

我有一个关于将 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 不同)。所以根据定义的输入/输出会有不同的结果(这是有道理的)。

所以我的问题是: R 中有没有一种方法可以模仿 Matlab 中的 [Q,R,e]=qr(A,0)?

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

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

【问题讨论】:

    标签: r matlab qr-decomposition


    【解决方案1】:

    我认为差异归结为计算基础的数值库。默认情况下,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多