I want to create a m by n
matrix with rank k
.
Like A
is 8 × 8
with rank 5
or B
is 4 × 6
with rank 4
.
So I try to write a function in MATLAB like below.
My thought is:
- generate an
m
by n
zeros matrix
- generate
m
by n
matrix and convert it into reduced row echelon form
- assign rank of 2.'s matrix to num
- if
num = k
, then assign current matrix to the output
- break the iteration
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)
The outcome is an infinite loop and all the answers are 6x6
zeros matrix:
Command Window Output
I have also tried method in the 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)
It can reach my goal, but I have no idea how it work successfully?
Thanks, @anonymous!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…