How to create a rank k matrix using MATLAB?

前端 未结 3 623
礼貌的吻别
礼貌的吻别 2021-01-21 18:01

Im looking to create a matrix of rank k. The dimension of the matrix is m x n. The input k satisfies that condition that k < min(

相关标签:
3条回答
  • 2021-01-21 18:49

    Well, a trivial method is to produce a matrix that looks like:

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

    i.e. k columns of the identity matrix, then repeat the last column n-k times (or m-k times, depending on orientation).

    0 讨论(0)
  • 2021-01-21 18:49

    It's not really so clear what you are aiming for.

    But in order to create a matrix B with specific rank k, from a matrix A (with rank at least k), you may like to utilize svd and proceed like:

    >>> 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
    
    0 讨论(0)
  • 2021-01-21 18:51

    A matrix of rank 1 can be created by the outer product of two vectors, for example:

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

    Add together k of these and you will have a matrix of rank k. Like this:

    >> A = zeros(10);
    >> for i = 1:4, A = A + randn(10,1) * randn(1,10); end
    >> rank(A)
    
    ans =  4
    
    0 讨论(0)
提交回复
热议问题