【问题标题】:How to create a mxn matrix with a specific rank in matlab?如何在matlab中创建具有特定等级的mxn矩阵?
【发布时间】:2021-03-31 12:02:33
【问题描述】:

我想创建一个秩为 km by n 矩阵。

比如A8 × 8 等级为5B4 × 6 等级为4

所以我尝试在 MATLAB 中编写一个函数,如下所示。

我的想法是:

  1. 通过n 零矩阵生成m
  2. 通过n矩阵生成m并将其转换为缩减的行梯形形式
  3. 将 2. 的矩阵的秩分配给 num
  4. 如果num = k,则将当前矩阵分配给输出
  5. 中断迭代
function output = check_rank(m,n,k)
    while 1
        output = zeros(m,n);
        matrix = randi(20,m,n);
        tmp = rref(matrix);
        num = rank(tmp);
        if (num == k)
            output = matrix;
            break;
    end
    disp(output);    
end
A = check_rank(8,8,4)

结果是一个无限循环,所有答案都是6x6 zeros 矩阵: Command Window Output


我也试过how to create a rank k matrix using matlab?中的方法

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

它可以达到我的目标,但我不知道它是如何成功的?

谢谢@anonymous!

【问题讨论】:

    标签: matlab matrix linear-algebra


    【解决方案1】:

    如果要生成指定秩的随机矩阵,可以尝试构建如下用户函数

    function [Y,rk] = fn(m,n,k)
      P = orth(randn(m,k));
      Q = orth(randn(n,k))';
      Y = P*Q;
      rk = rank(Y);
    end
    

    其中PQ 是酉矩阵。 Y 是生成的带有随机值的矩阵,rk 帮助您检查排名。


    示例

    >> [Y,rk] = fn(8,6,5)
    Y =
    
       3.8613e-02   7.5837e-03  -7.1011e-02  -7.0392e-02  -3.8519e-02   1.6612e-01
      -3.1381e-02  -3.6287e-02   1.4888e-01  -7.6202e-02  -3.7867e-02   3.2707e-01
      -1.9689e-01   2.2684e-01   1.2606e-01  -1.2657e-03   1.9724e-01   7.2793e-02
      -1.2652e-01   7.7531e-02   1.3906e-01   3.1568e-02   1.8327e-01  -1.3804e-01
      -2.6604e-01  -1.4345e-01   1.6961e-03  -9.7833e-02   5.9299e-01  -1.5765e-01
       1.7787e-01  -3.5007e-01   3.8482e-01  -6.0741e-02  -2.1415e-02  -2.4317e-01
       8.9910e-02  -2.5538e-01  -1.8029e-01  -7.0032e-02  -1.0739e-01   2.2188e-01
      -3.4824e-01   3.7603e-01   2.8561e-02   2.6553e-02   2.4871e-02   6.8021e-01
    
    rk = 5
    

    【讨论】:

      【解决方案2】:

      您可以轻松使用eye函数:

      I = eye(k);
      M = zeros(m,n);
      M(1:k, 1:k) = I;
      

      rank(M) 等于 k

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2021-05-15
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多