【问题标题】:Julia - Find basis of column space of matrixJulia - 查找矩阵列空间的基础
【发布时间】:2021-12-28 13:10:58
【问题描述】:

我有一个(n, m) 矩阵A,它的秩为r < minimum([n, m])。我想找到跨越列/行空间的r 向量的基础。我该怎么做?

这是一个如何生成数据的方法。由于排名是3,我希望能够找到3 向量的基础。

using LinearAlgebra: svd, rank, Diagonal

function generate_rank_r_matrix(r; n=20, m=10)
    U, S, V = svd(randn(n, m))
    return U[:, 1:r] * Diagonal(S[1:r]) * V[:, 1:r]'
end

A = generate_rank_r_matrix(3)
rank(A) 

尝试

我知道qr 分解的Q 矩阵本质上包含列空间的一些基础,但我不确定如何仅找到r 向量。

也许可以使用 SVD?

【问题讨论】:

    标签: julia linear-algebra


    【解决方案1】:

    RowEchelon 正是您所需要的!您只需要在计算行梯形后删除零行

    【讨论】:

      【解决方案2】:

      您绝对可以使用 SVD。但是 QR 分解通常更便宜。

      对于您的示例,QR 分解的结果有两个属性QRR 的对角线元素告诉您有多少 Q 元素作为您想要的列基础感兴趣。如果分解使用花式旋转,您可能需要考虑排列。稀疏矩阵几乎肯定会利用它来避免填充。

      julia> x = qr(A);
      
      julia> x.R
      10×10 Matrix{Float64}:
       -3.74988  -1.84617  -0.690789   0.572068     …  -2.25879      -1.66442
        0.0      -1.35248  -0.951006  -0.424635        -1.81135       1.73008
        0.0       0.0      -1.01584    1.49595         -3.20437       0.880599
        0.0       0.0       0.0       -8.03415e-16      1.38778e-15  -1.11022e-16
        0.0       0.0       0.0        0.0             -3.88578e-16   2.63678e-16
        0.0       0.0       0.0        0.0          …  -2.91378e-16   4.50689e-16
        0.0       0.0       0.0        0.0             -4.09934e-17   8.76055e-17
        0.0       0.0       0.0        0.0             -2.66033e-16   1.40809e-17
        0.0       0.0       0.0        0.0             -6.19269e-16   1.2146e-16
        0.0       0.0       0.0        0.0              0.0           3.00838e-16
      julia> diag(x.R)
      10-element Vector{Float64}:
       -3.7498805345096264
       -1.3524838792645477
       -1.0158363404176274
       -8.034148497889382e-16
       -4.903462616556098e-16
       -9.260239239557565e-16
        1.0342057190512138e-15
       -2.5223684462590304e-16
       -6.192691559225543e-16
        3.008378301264802e-16
      
      

      请注意,所有这些信息都以非常易读的形式在文档中提供。要找到它,请输入“?”在 REPL 中,然后在 qr 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多