【问题标题】:Is there a way to find a basis of the row and column spaces of a matrix in R?有没有办法在 R 中找到矩阵的行和列空间的基础?
【发布时间】:2016-04-04 15:21:05
【问题描述】:

一位同事向我提出了这个问题,我希望得到答案。对 R 很陌生,而且我的第一个线性代数课程才刚刚完成,数小时的搜索并没有得到答案。在这里的任何帮助将不胜感激!

我知道这个问题相当模糊且不详细,但这正是向我提出的问题。如果被问到,我会尝试添加任何细节。

这也是我在这里的第一个问题,所以如果我没有正确提出问题,我深表歉意。欢迎批评我,我是来学习的。

【问题讨论】:

    标签: r linear-algebra


    【解决方案1】:

    您可以使用 rref(A) 函数从 pracma 包中定义行和空空间。行空间将是具有前导 1 的列,空/列空间将是列数减去行空间。所以代码 rref(as.matrix(A)) 然后写一点来找到你的简化矩阵中的枢轴列并计算你的列。剩下的就是简单的算术。

    【讨论】:

    • rref() 函数很有帮助。现在我有了我的 rref 矩阵,我无法将列空间与矩阵的其余部分分开。我知道带有前导 1 的列是列空间的一部分,而其他列是空空间的一部分。因此,如果在 5 列矩阵中,第 1、2 和 4 列有前导 1,这就是列空间的基础。我现在如何用 R 代码确定和显示它是我的问题。
    • 可以对列的向量求和。类似于: A
    • 我刚刚检查过,Null{MASS} 可以在手卷解决方案之外工作。从nullity中你可以找到其他属性。
    【解决方案2】:

    记住矩阵的four subspaces

    在 R4 中创建一个包含 3 个向量的矩阵,只有两个线性无关:

    > v1 <- c(3,5,11,-1)
    > v2 <- c(45,-2,5,23)
    > v3 <- v1 -2*v2
    > 
    > (M <- cbind(v1,v2,v3))
         v1 v2  v3
    [1,]  3 45 -87
    [2,]  5 -2   9
    [3,] 11  5   1
    [4,] -1 23 -47
    

    确定排名

    > # RANK:
    > nrow(rref(M)[apply(rref(M)[,-1], 1, function(x) !all(x==0)),])
    [1] 2
    

    COLUMN SPACE 生成一个基础,它存在于 R4 中,是所有 Mx=b 的结果 (b):

    > (Col_sp <- t(rref(t(M))[apply(rref(t(M)), 1, function(x) !all(x==0)),]))
                v1         v2
    [1,] 1.0000000  0.0000000
    [2,] 0.0000000  1.0000000
    [3,] 0.2034632  2.0779221
    [4,] 0.4891775 -0.4935065
    

    为 R4 中的列空间(即 LEFT NULL SPACE 或转置的空空间)或 tr(M)x = 0 中的 x 生成正交子空间的基础:

    library(MASS)
    > (Left_Null <- Null(M))
               [,1]         [,2]
    [1,] -0.2369092 -0.399278229
    [2,] -0.8051370  0.413649975
    [3,]  0.4573183 -0.004747012
    [4,]  0.2940891  0.818198057
    

    这两个向量是否满足条件tr(M)x = 0

    > round(t(M)%*%Left_Null,10)
       [,1] [,2]
    v1    0    0
    v2    0    0
    v3    0    0
    

    检查!

    这两个子空间真的正交吗?

    > round(t(Col_sp) %*% Left_Null, 10)
       [,1] [,2]
    v1    0    0
    v2    0    0
    

    检查!

    为存在于 R3 中的 ROW SPACEMx = b 的解决方案 (x) 生成基础:

    > (Row_sp <- rref(M)[apply(rref(M), 1, function(x) !all(x==0)),])
         v1 v2 v3
    [1,]  1  0  1
    [2,]  0  1 -2
    

    RIGHT NULL SPACE(列空间的零空间)或Mx=0生活在R3中的解决方案生成基础:

    > (Right_Null <- Null(t(M)))
               [,1]
    [1,] -0.4082483
    [2,]  0.8164966
    [3,]  0.4082483
    

    Mx=0 实现了吗?

    > round(M %*% Right_Null, 10)
         [,1]
    [1,]    0
    [2,]    0
    [3,]    0
    [4,]    0
    

    检查!

    最后两个子空间是正交的吗?

    > round(Row_sp %*% Right_Null,10)
         [,1]
    [1,]    0
    [2,]    0
    

    检查!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多