【问题标题】:How to create a rank k matrix using MATLAB?如何使用 MATLAB 创建秩 k 矩阵?
【发布时间】:2011-08-19 16:35:57
【问题描述】:

我希望创建一个秩为 k 的矩阵。 矩阵的维度是m x n。输入 k 满足 k < min(m,n) 的条件。

【问题讨论】:

    标签: matlab matrix linear-algebra


    【解决方案1】:

    你的目标不是很清楚。

    但是为了从矩阵A(至少rank至少k)创建一个具有特定秩k的矩阵B,您可能希望使用svd并继续:

    >>> A= rand(7, 5);
    >>> rank(A)
    ans =  5
    >>> [U, S, V]= svd(A);
    >>> k= 3;
    >>> B= U(:, 1: k)* S(1: k, 1: k)* V(:, 1: k)';
    >>> rank(B)
    ans =  3
    

    【讨论】:

      【解决方案2】:

      好吧,一个简单的方法是生成一个如下所示的矩阵:

      1 0 0 0 0
      0 1 0 0 0
      0 0 1 1 1
      0 0 0 0 0
      

      k 列单位矩阵,然后重复最后一列 n-k 次(或 m-k 次,具体取决于方向)。

      【讨论】:

        【解决方案3】:

        秩为 1 的矩阵可以由两个向量的外积创建,例如:

        A = randn(10,1) * randn(1,10);
        

        将其中的 k 个加在一起,您将得到一个秩为 k 的矩阵。像这样:

        >> A = zeros(10);
        >> for i = 1:4, A = A + randn(10,1) * randn(1,10); end
        >> rank(A)
        
        ans =  4
        

        【讨论】:

        • 准确地说,您的方法会生成一个秩
        • 当你使用它时,它可以在没有循环的情况下完成 A = rand(m, k)*rand(k,n); rank(A)
        猜你喜欢
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 2018-08-10
        相关资源
        最近更新 更多